[{"data":1,"prerenderedAt":174367},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch09-css-he-mo-xing-fu-dong-yu-qie-tu":3,"wiki-doc-nav":1684},{"id":4,"title":5,"body":6,"description":1676,"extension":1677,"meta":1678,"navigation":1679,"path":1680,"seo":1681,"stem":1682,"__hash__":1683},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":8,"toc":1655},"minimark",[9,13,18,22,25,28,31,34,37,42,47,57,119,164,167,182,187,221,224,323,328,331,363,366,371,379,383,390,436,480,485,488,491,494,497,500,503,506,509,513,518,562,567,570,573,614,619,622,625,628,631,663,666,669,672,704,707,710,713,717,720,752,755,759,779,782,790,793,797,802,805,837,842,845,891,895,900,903,906,937,940,957,962,1021,1083,1088,1144,1182,1186,1190,1193,1197,1205,1208,1211,1222,1227,1276,1311,1314,1317,1320,1323,1367,1370,1373,1376,1379,1382,1385,1429,1432,1435,1438,1441,1444,1447,1453,1456,1500,1503,1506,1509,1512,1515,1559,1562,1564,1567,1571,1575,1613,1617,1620,1623,1627,1635,1639,1642,1645,1648,1651],[10,11,5],"h1",{"id":12},"_9-css盒模型浮动与切图",[14,15,17],"h2",{"id":16},"_91-盒子模型","9.1 盒子模型",[19,20,21],"p",{},"利用盒子来设计网页",[19,23,24],{},"盒子包含：边框、外边距、内边距、实际内容",[19,26,27],{},"网页布局设置：",[19,29,30],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,32,33],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,35,36],{},"③往盒子里装内容",[38,39],"img",{"style":40,"src":41},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[43,44,46],"h3",{"id":45},"_911-边框border","9.1.1 边框（border）",[48,49,50,54],"ol",{},[51,52,53],"li",{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[51,55,56],{},"语法",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-Css shiki shiki-themes github-light github-dark","\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n","Css","",[65,66,67,76,87,113],"code",{"__ignoreMap":63},[68,69,72],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"sJ8bj","\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[68,77,79,83],{"class":70,"line":78},2,[68,80,82],{"class":81},"s9eBZ","div",[68,84,86],{"class":85},"sVt8B"," {\n",[68,88,90,94,97,100,104,107,110],{"class":70,"line":89},3,[68,91,93],{"class":92},"sj4cs","  border",[68,95,96],{"class":85},": ",[68,98,99],{"class":92},"1",[68,101,103],{"class":102},"szBVR","px",[68,105,106],{"class":92}," solid",[68,108,109],{"class":92}," #ccc",[68,111,112],{"class":85},";\n",[68,114,116],{"class":70,"line":115},4,[68,117,118],{"class":85},"}\n",[120,121,122,136],"table",{},[123,124,125],"thead",{},[126,127,128,133],"tr",{},[129,130,132],"th",{"align":131},"left","属性",[129,134,135],{"align":131},"作用",[137,138,139,148,156],"tbody",{},[126,140,141,145],{},[142,143,144],"td",{"align":131},"border-width",[142,146,147],{"align":131},"定义边框粗细，单位是px",[126,149,150,153],{},[142,151,152],{"align":131},"border-style",[142,154,155],{"align":131},"边框的样式",[126,157,158,161],{},[142,159,160],{"align":131},"border-color",[142,162,163],{"align":131},"边框的颜色",[19,165,166],{},"边框样式 border-style 可以设置如下值：",[168,169,170,173,176,179],"ul",{},[51,171,172],{},"none：没有边框即忽略所有边框的宽度（默认值）",[51,174,175],{},"solid：边框为单实线(最为常用的)",[51,177,178],{},"dashed：边框为虚线",[51,180,181],{},"dotted：边框为点线",[48,183,184],{"start":89},[51,185,186],{},"边框的合写分写",[58,188,189],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,190,191,195,201,217],{"__ignoreMap":63},[68,192,193],{"class":70,"line":71},[68,194,75],{"class":74},[68,196,197,199],{"class":70,"line":78},[68,198,82],{"class":81},[68,200,86],{"class":85},[68,202,203,205,207,209,211,213,215],{"class":70,"line":89},[68,204,93],{"class":92},[68,206,96],{"class":85},[68,208,99],{"class":92},[68,210,103],{"class":102},[68,212,106],{"class":92},[68,214,109],{"class":92},[68,216,112],{"class":85},[68,218,219],{"class":70,"line":115},[68,220,118],{"class":85},[19,222,223],{},"边框分开写法：",[58,225,227],{"className":60,"code":226,"language":62,"meta":63,"style":63},"\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",[65,228,229,234,240,258,278,299,318],{"__ignoreMap":63},[68,230,231],{"class":70,"line":71},[68,232,233],{"class":74},"\u002F* 边框分开写法 *\u002F\n",[68,235,236,238],{"class":70,"line":78},[68,237,82],{"class":81},[68,239,86],{"class":85},[68,241,242,245,247,249,251,253,256],{"class":70,"line":89},[68,243,244],{"class":92},"  border-top",[68,246,96],{"class":85},[68,248,99],{"class":92},[68,250,103],{"class":102},[68,252,106],{"class":92},[68,254,255],{"class":92}," #000",[68,257,112],{"class":85},[68,259,260,263,265,268,270,273,276],{"class":70,"line":115},[68,261,262],{"class":92},"  border-right",[68,264,96],{"class":85},[68,266,267],{"class":92},"2",[68,269,103],{"class":102},[68,271,272],{"class":92}," dashed",[68,274,275],{"class":92}," #333",[68,277,112],{"class":85},[68,279,281,284,286,289,291,294,297],{"class":70,"line":280},5,[68,282,283],{"class":92},"  border-bottom",[68,285,96],{"class":85},[68,287,288],{"class":92},"3",[68,290,103],{"class":102},[68,292,293],{"class":92}," dotted",[68,295,296],{"class":92}," #666",[68,298,112],{"class":85},[68,300,302,305,307,309,311,313,316],{"class":70,"line":301},6,[68,303,304],{"class":92},"  border-left",[68,306,96],{"class":85},[68,308,99],{"class":92},[68,310,103],{"class":102},[68,312,106],{"class":92},[68,314,315],{"class":92}," #999",[68,317,112],{"class":85},[68,319,321],{"class":70,"line":320},7,[68,322,118],{"class":85},[48,324,325],{"start":115},[51,326,327],{},"表格的细线边框",[19,329,330],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[58,332,334],{"className":60,"code":333,"language":62,"meta":63,"style":63},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[65,335,336,341,347,359],{"__ignoreMap":63},[68,337,338],{"class":70,"line":71},[68,339,340],{"class":74},"\u002F* 表格细线边框合并 *\u002F\n",[68,342,343,345],{"class":70,"line":78},[68,344,120],{"class":81},[68,346,86],{"class":85},[68,348,349,352,354,357],{"class":70,"line":89},[68,350,351],{"class":92},"  border-collapse",[68,353,96],{"class":85},[68,355,356],{"class":92},"collapse",[68,358,112],{"class":85},[68,360,361],{"class":70,"line":115},[68,362,118],{"class":85},[19,364,365],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[48,367,368],{"start":280},[51,369,370],{},"解决边框额外增加盒子的实际大小的方法：",[168,372,373,376],{},[51,374,375],{},"测量盒子大小的时候,不量边框",[51,377,378],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[43,380,382],{"id":381},"_912-内边距","9.1.2 内边距",[48,384,385,388],{},[51,386,387],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[51,389,56],{},[120,391,392,402],{},[123,393,394],{},[126,395,396,399],{},[129,397,398],{"align":131},"值的个数",[129,400,401],{"align":131},"表达意思",[137,403,404,412,420,428],{},[126,405,406,409],{},[142,407,408],{"align":131},"padding: 5px;",[142,410,411],{"align":131},"1个值，代表上下左右都有5个元素",[126,413,414,417],{},[142,415,416],{"align":131},"padding: 5px 10px;",[142,418,419],{"align":131},"2个值，代表上下内边距为5像素，左右内边距为10像素",[126,421,422,425],{},[142,423,424],{"align":131},"padding: 5px 10px 20px;",[142,426,427],{"align":131},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[126,429,430,433],{},[142,431,432],{"align":131},"padding: 5px 10px 20px 30px;",[142,434,435],{"align":131},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[120,437,438,446],{},[123,439,440],{},[126,441,442,444],{},[129,443,132],{"align":131},[129,445,135],{"align":131},[137,447,448,456,464,472],{},[126,449,450,453],{},[142,451,452],{"align":131},"padding-left",[142,454,455],{"align":131},"左内边距",[126,457,458,461],{},[142,459,460],{"align":131},"padding-right",[142,462,463],{"align":131},"右内边距",[126,465,466,469],{},[142,467,468],{"align":131},"padding-top",[142,470,471],{"align":131},"上内边距",[126,473,474,477],{},[142,475,476],{"align":131},"padding-bottom",[142,478,479],{"align":131},"下内边距",[48,481,482],{"start":89},[51,483,484],{},"内边距会影响盒子的实际大小",[19,486,487],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,489,490],{},"①内容和边框有了距离，添加了内边距",[19,492,493],{},"②padding影响了盒子实际大小",[19,495,496],{},"内边距对盒子大小的影响：",[19,498,499],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,501,502],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,504,505],{},"解决方法：",[19,507,508],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[43,510,512],{"id":511},"_913-外边距","9.1.3 外边距",[48,514,515],{},[51,516,517],{},"控制盒子与盒子之间的距离",[120,519,520,528],{},[123,521,522],{},[126,523,524,526],{},[129,525,132],{"align":131},[129,527,135],{"align":131},[137,529,530,538,546,554],{},[126,531,532,535],{},[142,533,534],{"align":131},"margin-left",[142,536,537],{"align":131},"左外边距",[126,539,540,543],{},[142,541,542],{"align":131},"margin-right",[142,544,545],{"align":131},"右外边距",[126,547,548,551],{},[142,549,550],{"align":131},"margin-top",[142,552,553],{"align":131},"上外边距",[126,555,556,559],{},[142,557,558],{"align":131},"margin-bottom",[142,560,561],{"align":131},"下外边距",[48,563,564],{"start":78},[51,565,566],{},"外边距可以让块级盒子水平居中的两个条件：",[19,568,569],{},"①盒子必须指定了宽度（width）",[19,571,572],{},"②盒子左右的外边距都设置为 auto",[58,574,576],{"className":60,"code":575,"language":62,"meta":63,"style":63},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[65,577,578,583,591,610],{"__ignoreMap":63},[68,579,580],{"class":70,"line":71},[68,581,582],{"class":74},"\u002F* margin 复合写法（同上） *\u002F\n",[68,584,585,589],{"class":70,"line":78},[68,586,588],{"class":587},"sScJk",".box",[68,590,86],{"class":85},[68,592,593,596,598,601,604,607],{"class":70,"line":89},[68,594,595],{"class":92},"  margin",[68,597,96],{"class":85},[68,599,600],{"class":92},"0",[68,602,603],{"class":92}," auto",[68,605,606],{"class":85},";  ",[68,608,609],{"class":74},"\u002F* 块级盒子水平居中 *\u002F\n",[68,611,612],{"class":70,"line":115},[68,613,118],{"class":85},[48,615,616],{"start":89},[51,617,618],{},"外边距塌陷问题",[19,620,621],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[38,623],{"style":40,"src":624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,626,627],{},"解决方案：",[19,629,630],{},"①可以为父亲元素定义上边距",[58,632,633],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,634,635,639,645,659],{"__ignoreMap":63},[68,636,637],{"class":70,"line":71},[68,638,582],{"class":74},[68,640,641,643],{"class":70,"line":78},[68,642,588],{"class":587},[68,644,86],{"class":85},[68,646,647,649,651,653,655,657],{"class":70,"line":89},[68,648,595],{"class":92},[68,650,96],{"class":85},[68,652,600],{"class":92},[68,654,603],{"class":92},[68,656,606],{"class":85},[68,658,609],{"class":74},[68,660,661],{"class":70,"line":115},[68,662,118],{"class":85},[19,664,665],{},"②可以为父亲元素定义上内边距",[19,667,668],{},"③可以为父亲元素添加overflow:hidden",[38,670],{"style":40,"src":671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[58,673,674],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,675,676,680,686,700],{"__ignoreMap":63},[68,677,678],{"class":70,"line":71},[68,679,582],{"class":74},[68,681,682,684],{"class":70,"line":78},[68,683,588],{"class":587},[68,685,86],{"class":85},[68,687,688,690,692,694,696,698],{"class":70,"line":89},[68,689,595],{"class":92},[68,691,96],{"class":85},[68,693,600],{"class":92},[68,695,603],{"class":92},[68,697,606],{"class":85},[68,699,609],{"class":74},[68,701,702],{"class":70,"line":115},[68,703,118],{"class":85},[38,705],{"style":40,"src":706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,708,709],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,711,712],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[43,714,716],{"id":715},"_914-清除内外边距","9.1.4 清除内外边距",[19,718,719],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[58,721,722],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,723,724,728,734,748],{"__ignoreMap":63},[68,725,726],{"class":70,"line":71},[68,727,582],{"class":74},[68,729,730,732],{"class":70,"line":78},[68,731,588],{"class":587},[68,733,86],{"class":85},[68,735,736,738,740,742,744,746],{"class":70,"line":89},[68,737,595],{"class":92},[68,739,96],{"class":85},[68,741,600],{"class":92},[68,743,603],{"class":92},[68,745,606],{"class":85},[68,747,609],{"class":74},[68,749,750],{"class":70,"line":115},[68,751,118],{"class":85},[19,753,754],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[43,756,758],{"id":757},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[168,760,761,764,767,770,773,776],{},[51,762,763],{},"文件→打开 ：可以打开我们要测量的图片",[51,765,766],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[51,768,769],{},"右击标尺，把里面的单位改为像素",[51,771,772],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[51,774,775],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[51,777,778],{},"用选区拖动 可以测量大小",[38,780],{"style":40,"src":781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[168,783,784,787],{},[51,785,786],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[51,788,789],{},"吸管取色工具",[38,791],{"style":40,"src":792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[43,794,796],{"id":795},"_916-案例","9.1.6 案例",[48,798,799],{},[51,800,801],{},"小米商品",[38,803],{"style":40,"src":804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[58,806,807],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,808,809,813,819,833],{"__ignoreMap":63},[68,810,811],{"class":70,"line":71},[68,812,582],{"class":74},[68,814,815,817],{"class":70,"line":78},[68,816,588],{"class":587},[68,818,86],{"class":85},[68,820,821,823,825,827,829,831],{"class":70,"line":89},[68,822,595],{"class":92},[68,824,96],{"class":85},[68,826,600],{"class":92},[68,828,603],{"class":92},[68,830,606],{"class":85},[68,832,609],{"class":74},[68,834,835],{"class":70,"line":115},[68,836,118],{"class":85},[48,838,839],{"start":78},[51,840,841],{},"快报模块",[38,843],{"style":40,"src":844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[58,846,850],{"className":847,"code":848,"language":849,"meta":63,"style":63},"language-Html shiki shiki-themes github-light github-dark","\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n","Html",[65,851,852,857,877,882],{"__ignoreMap":63},[68,853,854],{"class":70,"line":71},[68,855,856],{"class":74},"\u003C!-- HTML 代码示例 -->\n",[68,858,859,862,864,867,870,874],{"class":70,"line":78},[68,860,861],{"class":85},"\u003C",[68,863,82],{"class":81},[68,865,866],{"class":587}," class",[68,868,869],{"class":85},"=",[68,871,873],{"class":872},"sZZnC","\"example\"",[68,875,876],{"class":85},">\n",[68,878,879],{"class":70,"line":89},[68,880,881],{"class":85},"  示例内容\n",[68,883,884,887,889],{"class":70,"line":115},[68,885,886],{"class":85},"\u003C\u002F",[68,888,82],{"class":81},[68,890,876],{"class":85},[43,892,894],{"id":893},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[48,896,897],{},[51,898,899],{},"圆角边框",[19,901,902],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[38,904],{"style":40,"src":905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[58,907,909],{"className":60,"code":908,"language":62,"meta":63,"style":63},"div {\n  border: 1px solid #ccc;\n}\n",[65,910,911,917,933],{"__ignoreMap":63},[68,912,913,915],{"class":70,"line":71},[68,914,82],{"class":81},[68,916,86],{"class":85},[68,918,919,921,923,925,927,929,931],{"class":70,"line":78},[68,920,93],{"class":92},[68,922,96],{"class":85},[68,924,99],{"class":92},[68,926,103],{"class":102},[68,928,106],{"class":92},[68,930,109],{"class":92},[68,932,112],{"class":85},[68,934,935],{"class":70,"line":89},[68,936,118],{"class":85},[19,938,939],{},"解释:",[168,941,942,945,948,951,954],{},[51,943,944],{},"参数值可以为数值或百分比的形式",[51,946,947],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[51,949,950],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[51,952,953],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[51,955,956],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[48,958,959],{"start":78},[51,960,961],{},"盒子阴影",[58,963,965],{"className":60,"code":964,"language":62,"meta":63,"style":63},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[65,966,967,973,1017],{"__ignoreMap":63},[68,968,969,971],{"class":70,"line":71},[68,970,82],{"class":81},[68,972,86],{"class":85},[68,974,975,978,980,982,985,987,990,992,995,998,1000,1003,1005,1007,1009,1011,1014],{"class":70,"line":78},[68,976,977],{"class":92},"  box-shadow",[68,979,96],{"class":85},[68,981,600],{"class":92},[68,983,984],{"class":92}," 2",[68,986,103],{"class":102},[68,988,989],{"class":92}," 10",[68,991,103],{"class":102},[68,993,994],{"class":92}," rgba",[68,996,997],{"class":85},"(",[68,999,600],{"class":92},[68,1001,1002],{"class":85},", ",[68,1004,600],{"class":92},[68,1006,1002],{"class":85},[68,1008,600],{"class":92},[68,1010,1002],{"class":85},[68,1012,1013],{"class":92},"0.1",[68,1015,1016],{"class":85},");\n",[68,1018,1019],{"class":70,"line":89},[68,1020,118],{"class":85},[120,1022,1023,1033],{},[123,1024,1025],{},[126,1026,1027,1030],{},[129,1028,1029],{"align":131},"值",[129,1031,1032],{"align":131},"描述",[137,1034,1035,1043,1051,1059,1067,1075],{},[126,1036,1037,1040],{},[142,1038,1039],{"align":131},"h-shadow",[142,1041,1042],{"align":131},"必需,水平阴影的位置,允许负值",[126,1044,1045,1048],{},[142,1046,1047],{"align":131},"v-shadow",[142,1049,1050],{"align":131},"必需,垂直阴影的位置,允许负值",[126,1052,1053,1056],{},[142,1054,1055],{"align":131},"blur",[142,1057,1058],{"align":131},"可选,模糊距离,就是影子的虚实",[126,1060,1061,1064],{},[142,1062,1063],{"align":131},"spread",[142,1065,1066],{"align":131},"可选,阴影尺寸",[126,1068,1069,1072],{},[142,1070,1071],{"align":131},"color",[142,1073,1074],{"align":131},"可选,阴影的颜色",[126,1076,1077,1080],{},[142,1078,1079],{"align":131},"inset",[142,1081,1082],{"align":131},"可选,将外部阴影(outset)改为内部阴影",[48,1084,1085],{"start":89},[51,1086,1087],{},"文字阴影",[58,1089,1091],{"className":60,"code":1090,"language":62,"meta":63,"style":63},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[65,1092,1093,1099,1140],{"__ignoreMap":63},[68,1094,1095,1097],{"class":70,"line":71},[68,1096,19],{"class":81},[68,1098,86],{"class":85},[68,1100,1101,1104,1106,1108,1110,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1138],{"class":70,"line":78},[68,1102,1103],{"class":92},"  text-shadow",[68,1105,96],{"class":85},[68,1107,99],{"class":92},[68,1109,103],{"class":102},[68,1111,1112],{"class":92}," 1",[68,1114,103],{"class":102},[68,1116,984],{"class":92},[68,1118,103],{"class":102},[68,1120,994],{"class":92},[68,1122,997],{"class":85},[68,1124,600],{"class":92},[68,1126,1002],{"class":85},[68,1128,600],{"class":92},[68,1130,1002],{"class":85},[68,1132,600],{"class":92},[68,1134,1002],{"class":85},[68,1136,1137],{"class":92},"0.3",[68,1139,1016],{"class":85},[68,1141,1142],{"class":70,"line":89},[68,1143,118],{"class":85},[120,1145,1146,1154],{},[123,1147,1148],{},[126,1149,1150,1152],{},[129,1151,1029],{"align":131},[129,1153,1032],{"align":131},[137,1155,1156,1162,1169,1176],{},[126,1157,1158,1160],{},[142,1159,1039],{"align":131},[142,1161,1042],{"align":131},[126,1163,1164,1166],{},[142,1165,1047],{"align":131},[142,1167,1168],{"align":131},"必需,垂直阴影位置,允许负值",[126,1170,1171,1173],{},[142,1172,1055],{"align":131},[142,1174,1175],{"align":131},"可选,模糊的距离",[126,1177,1178,1180],{},[142,1179,1071],{"align":131},[142,1181,1074],{"align":131},[14,1183,1185],{"id":1184},"_92-浮动","9.2 浮动",[43,1187,1189],{"id":1188},"_921-浮动介绍","9.2.1 浮动介绍",[19,1191,1192],{},"在16.2中详细介绍",[43,1194,1196],{"id":1195},"_922-清除浮动","9.2.2 清除浮动",[48,1198,1199,1202],{},[51,1200,1201],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[51,1203,1204],{},"清除浮动的本质",[19,1206,1207],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,1209,1210],{},"注意：",[168,1212,1213,1216,1219],{},[51,1214,1215],{},"如果父盒子本身有高度，则不需要清除浮动",[51,1217,1218],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[51,1220,1221],{},"父级有了高度，就不会影响下面的标准流了",[48,1223,1224],{"start":89},[51,1225,1226],{},"清除浮动样式",[58,1228,1230],{"className":60,"code":1229,"language":62,"meta":63,"style":63},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[65,1231,1232,1239,1250,1254,1261,1272],{"__ignoreMap":63},[68,1233,1234,1237],{"class":70,"line":71},[68,1235,1236],{"class":587},".left",[68,1238,86],{"class":85},[68,1240,1241,1244,1246,1248],{"class":70,"line":78},[68,1242,1243],{"class":92},"  float",[68,1245,96],{"class":85},[68,1247,131],{"class":92},[68,1249,112],{"class":85},[68,1251,1252],{"class":70,"line":89},[68,1253,118],{"class":85},[68,1255,1256,1259],{"class":70,"line":115},[68,1257,1258],{"class":587},".right",[68,1260,86],{"class":85},[68,1262,1263,1265,1267,1270],{"class":70,"line":280},[68,1264,1243],{"class":92},[68,1266,96],{"class":85},[68,1268,1269],{"class":92},"right",[68,1271,112],{"class":85},[68,1273,1274],{"class":70,"line":301},[68,1275,118],{"class":85},[120,1277,1278,1287],{},[123,1279,1280],{},[126,1281,1282,1285],{},[129,1283,1284],{"align":131},"属性值",[129,1286,1032],{"align":131},[137,1288,1289,1296,1303],{},[126,1290,1291,1293],{},[142,1292,131],{"align":131},[142,1294,1295],{"align":131},"不允许左侧有浮动元素（清除左侧浮动的影响）",[126,1297,1298,1300],{},[142,1299,1269],{"align":131},[142,1301,1302],{"align":131},"不允许右侧有浮动元素（清除右侧浮动的影响）",[126,1304,1305,1308],{},[142,1306,1307],{"align":131},"both",[142,1309,1310],{"align":131},"同时清除左右侧浮动的影响",[19,1312,1313],{},"法一",[19,1315,1316],{},"额外标签法也称为隔墙法",[19,1318,1319],{},"使用方式：",[19,1321,1322],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[58,1324,1325],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,1326,1327,1333,1343,1347,1353,1363],{"__ignoreMap":63},[68,1328,1329,1331],{"class":70,"line":71},[68,1330,1236],{"class":587},[68,1332,86],{"class":85},[68,1334,1335,1337,1339,1341],{"class":70,"line":78},[68,1336,1243],{"class":92},[68,1338,96],{"class":85},[68,1340,131],{"class":92},[68,1342,112],{"class":85},[68,1344,1345],{"class":70,"line":89},[68,1346,118],{"class":85},[68,1348,1349,1351],{"class":70,"line":115},[68,1350,1258],{"class":587},[68,1352,86],{"class":85},[68,1354,1355,1357,1359,1361],{"class":70,"line":280},[68,1356,1243],{"class":92},[68,1358,96],{"class":85},[68,1360,1269],{"class":92},[68,1362,112],{"class":85},[68,1364,1365],{"class":70,"line":301},[68,1366,118],{"class":85},[19,1368,1369],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,1371,1372],{},"优点： 通俗易懂，书写方便",[19,1374,1375],{},"缺点： 添加许多无意义的标签，结构化较差",[19,1377,1378],{},"注意： 要求这个新的空标签必须是块级元素。",[19,1380,1381],{},"法二",[19,1383,1384],{},"父级添加overflow属性",[58,1386,1387],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,1388,1389,1395,1405,1409,1415,1425],{"__ignoreMap":63},[68,1390,1391,1393],{"class":70,"line":71},[68,1392,1236],{"class":587},[68,1394,86],{"class":85},[68,1396,1397,1399,1401,1403],{"class":70,"line":78},[68,1398,1243],{"class":92},[68,1400,96],{"class":85},[68,1402,131],{"class":92},[68,1404,112],{"class":85},[68,1406,1407],{"class":70,"line":89},[68,1408,118],{"class":85},[68,1410,1411,1413],{"class":70,"line":115},[68,1412,1258],{"class":587},[68,1414,86],{"class":85},[68,1416,1417,1419,1421,1423],{"class":70,"line":280},[68,1418,1243],{"class":92},[68,1420,96],{"class":85},[68,1422,1269],{"class":92},[68,1424,112],{"class":85},[68,1426,1427],{"class":70,"line":301},[68,1428,118],{"class":85},[19,1430,1431],{},"overflow: hidden;",[19,1433,1434],{},"优点：代码简洁",[19,1436,1437],{},"缺点：无法显示溢出的部分",[19,1439,1440],{},"注意：是给父元素添加代码",[19,1442,1443],{},"法三",[19,1445,1446],{},"父级添加after伪元素",[19,1448,1449,1452],{},[1450,1451],"after",{}," 方式是额外标签法的升级版",[19,1454,1455],{},"使用的时候复制就可以",[58,1457,1458],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,1459,1460,1466,1476,1480,1486,1496],{"__ignoreMap":63},[68,1461,1462,1464],{"class":70,"line":71},[68,1463,1236],{"class":587},[68,1465,86],{"class":85},[68,1467,1468,1470,1472,1474],{"class":70,"line":78},[68,1469,1243],{"class":92},[68,1471,96],{"class":85},[68,1473,131],{"class":92},[68,1475,112],{"class":85},[68,1477,1478],{"class":70,"line":89},[68,1479,118],{"class":85},[68,1481,1482,1484],{"class":70,"line":115},[68,1483,1258],{"class":587},[68,1485,86],{"class":85},[68,1487,1488,1490,1492,1494],{"class":70,"line":280},[68,1489,1243],{"class":92},[68,1491,96],{"class":85},[68,1493,1269],{"class":92},[68,1495,112],{"class":85},[68,1497,1498],{"class":70,"line":301},[68,1499,118],{"class":85},[19,1501,1502],{},"优点：没有增加标签，结构更简单",[19,1504,1505],{},"缺点：照顾低版本浏览器",[19,1507,1508],{},"代表网站： 百度、淘宝网、网易等",[19,1510,1511],{},"法四",[19,1513,1514],{},"父级添加双伪元素",[58,1516,1517],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,1518,1519,1525,1535,1539,1545,1555],{"__ignoreMap":63},[68,1520,1521,1523],{"class":70,"line":71},[68,1522,1236],{"class":587},[68,1524,86],{"class":85},[68,1526,1527,1529,1531,1533],{"class":70,"line":78},[68,1528,1243],{"class":92},[68,1530,96],{"class":85},[68,1532,131],{"class":92},[68,1534,112],{"class":85},[68,1536,1537],{"class":70,"line":89},[68,1538,118],{"class":85},[68,1540,1541,1543],{"class":70,"line":115},[68,1542,1258],{"class":587},[68,1544,86],{"class":85},[68,1546,1547,1549,1551,1553],{"class":70,"line":280},[68,1548,1243],{"class":92},[68,1550,96],{"class":85},[68,1552,1269],{"class":92},[68,1554,112],{"class":85},[68,1556,1557],{"class":70,"line":301},[68,1558,118],{"class":85},[19,1560,1561],{},"优点：代码更简洁",[19,1563,1505],{},[19,1565,1566],{},"代表网站：小米、腾讯等",[14,1568,1570],{"id":1569},"_93-ps切图","9.3 PS切图",[43,1572,1574],{"id":1573},"_931-常见图片格式","9.3.1 常见图片格式",[120,1576,1577,1587],{},[123,1578,1579],{},[126,1580,1581,1584],{},[129,1582,1583],{"align":131},"jpg图像格式",[129,1585,1586],{"align":131},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[137,1588,1589,1597,1605],{},[126,1590,1591,1594],{},[142,1592,1593],{"align":131},"gif图像格式",[142,1595,1596],{"align":131},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[126,1598,1599,1602],{},[142,1600,1601],{"align":131},"png图像格式",[142,1603,1604],{"align":131},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[126,1606,1607,1610],{},[142,1608,1609],{"align":131},"PSD图像格式",[142,1611,1612],{"align":131},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[43,1614,1616],{"id":1615},"_932-图层切图","9.3.2 图层切图",[19,1618,1619],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,1621,1622],{},"按住shift选中两个图层->图层菜单->合并图层",[43,1624,1626],{"id":1625},"_933-切片切图","9.3.3 切片切图",[168,1628,1629,1632],{},[51,1630,1631],{},"利用切片工具手动划出",[51,1633,1634],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[43,1636,1638],{"id":1637},"_934-切图步骤","9.3.4 切图步骤",[19,1640,1641],{},"用切片工具选中：",[38,1643],{"style":40,"src":1644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,1646,1647],{},"文件 -> 导出",[38,1649],{"style":40,"src":1650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1652,1653,1654],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .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":63,"searchDepth":78,"depth":78,"links":1656},[1657,1666,1670],{"id":16,"depth":78,"text":17,"children":1658},[1659,1660,1661,1662,1663,1664,1665],{"id":45,"depth":89,"text":46},{"id":381,"depth":89,"text":382},{"id":511,"depth":89,"text":512},{"id":715,"depth":89,"text":716},{"id":757,"depth":89,"text":758},{"id":795,"depth":89,"text":796},{"id":893,"depth":89,"text":894},{"id":1184,"depth":78,"text":1185,"children":1667},[1668,1669],{"id":1188,"depth":89,"text":1189},{"id":1195,"depth":89,"text":1196},{"id":1569,"depth":78,"text":1570,"children":1671},[1672,1673,1674,1675],{"id":1573,"depth":89,"text":1574},{"id":1615,"depth":89,"text":1616},{"id":1625,"depth":89,"text":1626},{"id":1637,"depth":89,"text":1638},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":5,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",[1685,6761,7869,9289,12277,13628,15116,16205,24966,24978,25576,25602,25726,25967,26032,26050,26063,26110,26234,26403,26602,26781,26986,27122,27217,27254,27267,27577,28318,29026,29047,30066,31697,31848,31861,31873,32174,51986,52001,52018,52051,54915,78256,94399,94420,94533,94654,95424,96087,96448,96486,96592,96692,96735,96761,96821,98475,98576,98601,99092,99592,100672,100955,101697,102198,102210,104226,105889,107392,109090,111007,112926,114948,118418,118850,119313,120062,123006,123354,123376,123732,127039,127051,127454,127477,127624,127791,127995,128294,128850,129505,131435,132787,133436,134930,136361,137596,139290,141042,143452,143568,144503,144714,145599,146834,147062,147075,148230,150642,153010,156331,158808,160452,162229,164242,167294,169474,172001,174195],{"id":1686,"title":1687,"body":1688,"description":63,"extension":1677,"meta":6756,"navigation":1679,"path":6757,"seo":6758,"stem":6759,"__hash__":6760},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1689,"toc":6728},[1690,1693,1697,1700,1704,1715,1719,1723,1726,1729,1732,1735,1738,1765,1769,1772,1775,1778,1781,1829,1833,1851,1853,1867,1870,1878,1881,2734,2741,2757,2761,2847,2851,2857,2945,2949,2987,2991,3055,3059,3063,3069,3080,3084,3089,3093,3098,3102,3107,3111,3115,3120,3389,3394,3532,3537,3792,3795,3803,3807,3812,3915,3918,4224,4233,4333,4336,4339,4342,4345,4605,4610,4750,4753,4932,4935,5063,5066,5218,5222,5227,5230,5241,5249,5252,5359,5363,5367,5372,5422,5427,5432,5456,5461,5514,5517,5522,5699,5704,5989,5994,6391,6395,6400,6457,6462,6470,6473,6613,6616,6725],[10,1691,1687],{"id":1692},"_1基础入门",[14,1694,1696],{"id":1695},"_11注释","1.1注释",[19,1698,1699],{},"\u002F\u002F或者\u002F* *\u002F",[14,1701,1703],{"id":1702},"_12命名","1.2命名",[48,1705,1706,1709,1712],{},[51,1707,1708],{},"字母数字下划线",[51,1710,1711],{},"开头必须是字母或_",[51,1713,1714],{},"不能使用关键词",[14,1716,1718],{"id":1717},"_13数据类型","1.3数据类型",[43,1720,1722],{"id":1721},"_131整形","1.3.1整形",[19,1724,1725],{},"short 短整形 2",[19,1727,1728],{},"int 整形 4",[19,1730,1731],{},"long 长整形 win4 linux32位4 linux64位8",[19,1733,1734],{},"long long 长长整形 8",[19,1736,1737],{},"利用sizeof可以求数据类型占用的内存空间大小",[58,1739,1743],{"className":1740,"code":1741,"language":1742,"meta":63,"style":63},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[65,1744,1745,1758],{"__ignoreMap":63},[68,1746,1747,1750,1752,1755],{"class":70,"line":71},[68,1748,1749],{"class":102},"sizeof",[68,1751,997],{"class":85},[68,1753,1754],{"class":102},"int",[68,1756,1757],{"class":85},")\n",[68,1759,1760,1762],{"class":70,"line":78},[68,1761,1749],{"class":102},[68,1763,1764],{"class":85},"(num)\n",[43,1766,1768],{"id":1767},"_132浮点型","1.3.2浮点型",[19,1770,1771],{},"float 单精度 4节 7位有效数字",[19,1773,1774],{},"double 双精度 8节 15-16有效数字",[19,1776,1777],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1779,1780],{},"注意点：",[58,1782,1784],{"className":1740,"code":1783,"language":1742,"meta":63,"style":63},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[65,1785,1786,1808],{"__ignoreMap":63},[68,1787,1788,1791,1794,1796,1799,1802,1805],{"class":70,"line":71},[68,1789,1790],{"class":102},"float",[68,1792,1793],{"class":85}," f1",[68,1795,869],{"class":102},[68,1797,1798],{"class":92},"3.14",[68,1800,1801],{"class":102},"f",[68,1803,1804],{"class":85},";",[68,1806,1807],{"class":74}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[68,1809,1810,1812,1815,1817,1819,1822,1824,1826],{"class":70,"line":78},[68,1811,1790],{"class":102},[68,1813,1814],{"class":85}," f2",[68,1816,869],{"class":102},[68,1818,288],{"class":92},[68,1820,1821],{"class":102},"e",[68,1823,267],{"class":92},[68,1825,1804],{"class":85},[68,1827,1828],{"class":74}," \u002F\u002F科学记数法\n",[43,1830,1832],{"id":1831},"_133字符型","1.3.3字符型",[58,1834,1836],{"className":1740,"code":1835,"language":1742,"meta":63,"style":63},"char ch='a'\n",[65,1837,1838],{"__ignoreMap":63},[68,1839,1840,1843,1846,1848],{"class":70,"line":71},[68,1841,1842],{"class":102},"char",[68,1844,1845],{"class":85}," ch",[68,1847,869],{"class":102},[68,1849,1850],{"class":872},"'a'\n",[19,1852,1780],{},[48,1854,1855,1858,1861,1864],{},[51,1856,1857],{},"在显示字符型变量时，只能单引号，双引号x",[51,1859,1860],{},"单引号内只能一个字符，不能字符串",[51,1862,1863],{},"c和c++字符型变量只占用一个字符",[51,1865,1866],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1868,1869],{},"ASCII码大致由以下两部分组成：",[48,1871,1872,1875],{},[51,1873,1874],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[51,1876,1877],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1879,1880],{},"ASCII码表格：",[120,1882,1883,1923],{},[123,1884,1885],{},[126,1886,1887,1893,1898,1902,1907,1911,1915,1919],{},[129,1888,1889,1029],{},[1890,1891,1892],"strong",{},"ASCII",[129,1894,1895],{},[1890,1896,1897],{},"控制字符",[129,1899,1900,1029],{},[1890,1901,1892],{},[129,1903,1904],{},[1890,1905,1906],{},"字符",[129,1908,1909,1029],{},[1890,1910,1892],{},[129,1912,1913],{},[1890,1914,1906],{},[129,1916,1917,1029],{},[1890,1918,1892],{},[129,1920,1921],{},[1890,1922,1906],{},[137,1924,1925,1950,1975,2000,2025,2051,2076,2101,2127,2152,2178,2204,2230,2255,2281,2307,2333,2357,2382,2407,2432,2457,2482,2507,2532,2557,2582,2608,2633,2657,2682,2708],{},[126,1926,1927,1929,1932,1935,1938,1941,1944,1947],{},[142,1928,600],{},[142,1930,1931],{},"NUT",[142,1933,1934],{},"32",[142,1936,1937],{},"(space)",[142,1939,1940],{},"64",[142,1942,1943],{},"@",[142,1945,1946],{},"96",[142,1948,1949],{},"、",[126,1951,1952,1954,1957,1960,1963,1966,1969,1972],{},[142,1953,99],{},[142,1955,1956],{},"SOH",[142,1958,1959],{},"33",[142,1961,1962],{},"!",[142,1964,1965],{},"65",[142,1967,1968],{},"A",[142,1970,1971],{},"97",[142,1973,1974],{},"a",[126,1976,1977,1979,1982,1985,1988,1991,1994,1997],{},[142,1978,267],{},[142,1980,1981],{},"STX",[142,1983,1984],{},"34",[142,1986,1987],{},"\"",[142,1989,1990],{},"66",[142,1992,1993],{},"B",[142,1995,1996],{},"98",[142,1998,1999],{},"b",[126,2001,2002,2004,2007,2010,2013,2016,2019,2022],{},[142,2003,288],{},[142,2005,2006],{},"ETX",[142,2008,2009],{},"35",[142,2011,2012],{},"#",[142,2014,2015],{},"67",[142,2017,2018],{},"C",[142,2020,2021],{},"99",[142,2023,2024],{},"c",[126,2026,2027,2030,2033,2036,2039,2042,2045,2048],{},[142,2028,2029],{},"4",[142,2031,2032],{},"EOT",[142,2034,2035],{},"36",[142,2037,2038],{},"$",[142,2040,2041],{},"68",[142,2043,2044],{},"D",[142,2046,2047],{},"100",[142,2049,2050],{},"d",[126,2052,2053,2056,2059,2062,2065,2068,2071,2074],{},[142,2054,2055],{},"5",[142,2057,2058],{},"ENQ",[142,2060,2061],{},"37",[142,2063,2064],{},"%",[142,2066,2067],{},"69",[142,2069,2070],{},"E",[142,2072,2073],{},"101",[142,2075,1821],{},[126,2077,2078,2081,2084,2087,2090,2093,2096,2099],{},[142,2079,2080],{},"6",[142,2082,2083],{},"ACK",[142,2085,2086],{},"38",[142,2088,2089],{},"&",[142,2091,2092],{},"70",[142,2094,2095],{},"F",[142,2097,2098],{},"102",[142,2100,1801],{},[126,2102,2103,2106,2109,2112,2115,2118,2121,2124],{},[142,2104,2105],{},"7",[142,2107,2108],{},"BEL",[142,2110,2111],{},"39",[142,2113,2114],{},",",[142,2116,2117],{},"71",[142,2119,2120],{},"G",[142,2122,2123],{},"103",[142,2125,2126],{},"g",[126,2128,2129,2132,2135,2138,2140,2143,2146,2149],{},[142,2130,2131],{},"8",[142,2133,2134],{},"BS",[142,2136,2137],{},"40",[142,2139,997],{},[142,2141,2142],{},"72",[142,2144,2145],{},"H",[142,2147,2148],{},"104",[142,2150,2151],{},"h",[126,2153,2154,2157,2160,2163,2166,2169,2172,2175],{},[142,2155,2156],{},"9",[142,2158,2159],{},"HT",[142,2161,2162],{},"41",[142,2164,2165],{},")",[142,2167,2168],{},"73",[142,2170,2171],{},"I",[142,2173,2174],{},"105",[142,2176,2177],{},"i",[126,2179,2180,2183,2186,2189,2192,2195,2198,2201],{},[142,2181,2182],{},"10",[142,2184,2185],{},"LF",[142,2187,2188],{},"42",[142,2190,2191],{},"*",[142,2193,2194],{},"74",[142,2196,2197],{},"J",[142,2199,2200],{},"106",[142,2202,2203],{},"j",[126,2205,2206,2209,2212,2215,2218,2221,2224,2227],{},[142,2207,2208],{},"11",[142,2210,2211],{},"VT",[142,2213,2214],{},"43",[142,2216,2217],{},"+",[142,2219,2220],{},"75",[142,2222,2223],{},"K",[142,2225,2226],{},"107",[142,2228,2229],{},"k",[126,2231,2232,2235,2238,2241,2243,2246,2249,2252],{},[142,2233,2234],{},"12",[142,2236,2237],{},"FF",[142,2239,2240],{},"44",[142,2242,2114],{},[142,2244,2245],{},"76",[142,2247,2248],{},"L",[142,2250,2251],{},"108",[142,2253,2254],{},"l",[126,2256,2257,2260,2263,2266,2269,2272,2275,2278],{},[142,2258,2259],{},"13",[142,2261,2262],{},"CR",[142,2264,2265],{},"45",[142,2267,2268],{},"-",[142,2270,2271],{},"77",[142,2273,2274],{},"M",[142,2276,2277],{},"109",[142,2279,2280],{},"m",[126,2282,2283,2286,2289,2292,2295,2298,2301,2304],{},[142,2284,2285],{},"14",[142,2287,2288],{},"SO",[142,2290,2291],{},"46",[142,2293,2294],{},".",[142,2296,2297],{},"78",[142,2299,2300],{},"N",[142,2302,2303],{},"110",[142,2305,2306],{},"n",[126,2308,2309,2312,2315,2318,2321,2324,2327,2330],{},[142,2310,2311],{},"15",[142,2313,2314],{},"SI",[142,2316,2317],{},"47",[142,2319,2320],{},"\u002F",[142,2322,2323],{},"79",[142,2325,2326],{},"O",[142,2328,2329],{},"111",[142,2331,2332],{},"o",[126,2334,2335,2338,2341,2344,2346,2349,2352,2355],{},[142,2336,2337],{},"16",[142,2339,2340],{},"DLE",[142,2342,2343],{},"48",[142,2345,600],{},[142,2347,2348],{},"80",[142,2350,2351],{},"P",[142,2353,2354],{},"112",[142,2356,19],{},[126,2358,2359,2362,2365,2368,2370,2373,2376,2379],{},[142,2360,2361],{},"17",[142,2363,2364],{},"DCI",[142,2366,2367],{},"49",[142,2369,99],{},[142,2371,2372],{},"81",[142,2374,2375],{},"Q",[142,2377,2378],{},"113",[142,2380,2381],{},"q",[126,2383,2384,2387,2390,2393,2395,2398,2401,2404],{},[142,2385,2386],{},"18",[142,2388,2389],{},"DC2",[142,2391,2392],{},"50",[142,2394,267],{},[142,2396,2397],{},"82",[142,2399,2400],{},"R",[142,2402,2403],{},"114",[142,2405,2406],{},"r",[126,2408,2409,2412,2415,2418,2420,2423,2426,2429],{},[142,2410,2411],{},"19",[142,2413,2414],{},"DC3",[142,2416,2417],{},"51",[142,2419,288],{},[142,2421,2422],{},"83",[142,2424,2425],{},"S",[142,2427,2428],{},"115",[142,2430,2431],{},"s",[126,2433,2434,2437,2440,2443,2445,2448,2451,2454],{},[142,2435,2436],{},"20",[142,2438,2439],{},"DC4",[142,2441,2442],{},"52",[142,2444,2029],{},[142,2446,2447],{},"84",[142,2449,2450],{},"T",[142,2452,2453],{},"116",[142,2455,2456],{},"t",[126,2458,2459,2462,2465,2468,2470,2473,2476,2479],{},[142,2460,2461],{},"21",[142,2463,2464],{},"NAK",[142,2466,2467],{},"53",[142,2469,2055],{},[142,2471,2472],{},"85",[142,2474,2475],{},"U",[142,2477,2478],{},"117",[142,2480,2481],{},"u",[126,2483,2484,2487,2490,2493,2495,2498,2501,2504],{},[142,2485,2486],{},"22",[142,2488,2489],{},"SYN",[142,2491,2492],{},"54",[142,2494,2080],{},[142,2496,2497],{},"86",[142,2499,2500],{},"V",[142,2502,2503],{},"118",[142,2505,2506],{},"v",[126,2508,2509,2512,2515,2518,2520,2523,2526,2529],{},[142,2510,2511],{},"23",[142,2513,2514],{},"TB",[142,2516,2517],{},"55",[142,2519,2105],{},[142,2521,2522],{},"87",[142,2524,2525],{},"W",[142,2527,2528],{},"119",[142,2530,2531],{},"w",[126,2533,2534,2537,2540,2543,2545,2548,2551,2554],{},[142,2535,2536],{},"24",[142,2538,2539],{},"CAN",[142,2541,2542],{},"56",[142,2544,2131],{},[142,2546,2547],{},"88",[142,2549,2550],{},"X",[142,2552,2553],{},"120",[142,2555,2556],{},"x",[126,2558,2559,2562,2565,2568,2570,2573,2576,2579],{},[142,2560,2561],{},"25",[142,2563,2564],{},"EM",[142,2566,2567],{},"57",[142,2569,2156],{},[142,2571,2572],{},"89",[142,2574,2575],{},"Y",[142,2577,2578],{},"121",[142,2580,2581],{},"y",[126,2583,2584,2587,2590,2593,2596,2599,2602,2605],{},[142,2585,2586],{},"26",[142,2588,2589],{},"SUB",[142,2591,2592],{},"58",[142,2594,2595],{},":",[142,2597,2598],{},"90",[142,2600,2601],{},"Z",[142,2603,2604],{},"122",[142,2606,2607],{},"z",[126,2609,2610,2613,2616,2619,2621,2624,2627,2630],{},[142,2611,2612],{},"27",[142,2614,2615],{},"ESC",[142,2617,2618],{},"59",[142,2620,1804],{},[142,2622,2623],{},"91",[142,2625,2626],{},"[",[142,2628,2629],{},"123",[142,2631,2632],{},"{",[126,2634,2635,2638,2641,2644,2646,2649,2651,2654],{},[142,2636,2637],{},"28",[142,2639,2640],{},"FS",[142,2642,2643],{},"60",[142,2645,861],{},[142,2647,2648],{},"92",[142,2650,2320],{},[142,2652,2653],{},"124",[142,2655,2656],{},"|",[126,2658,2659,2662,2665,2668,2670,2673,2676,2679],{},[142,2660,2661],{},"29",[142,2663,2664],{},"GS",[142,2666,2667],{},"61",[142,2669,869],{},[142,2671,2672],{},"93",[142,2674,2675],{},"]",[142,2677,2678],{},"125",[142,2680,2681],{},"}",[126,2683,2684,2687,2690,2693,2696,2699,2702,2705],{},[142,2685,2686],{},"30",[142,2688,2689],{},"RS",[142,2691,2692],{},"62",[142,2694,2695],{},">",[142,2697,2698],{},"94",[142,2700,2701],{},"^",[142,2703,2704],{},"126",[142,2706,2707],{},"`",[126,2709,2710,2713,2716,2719,2722,2725,2728,2731],{},[142,2711,2712],{},"31",[142,2714,2715],{},"US",[142,2717,2718],{},"63",[142,2720,2721],{},"?",[142,2723,2724],{},"95",[142,2726,2727],{},"_",[142,2729,2730],{},"127",[142,2732,2733],{},"DEL",[19,2735,2736,2737,2740],{},"ASCII 码大致由以下",[1890,2738,2739],{},"两部分组","成：",[168,2742,2743,2750],{},[51,2744,2745,2746,2749],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1890,2747,2748],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[51,2751,2752,2753,2756],{},"ASCII 打印字符：数字 ",[1890,2754,2755],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[43,2758,2760],{"id":2759},"_134转义字符","1.3.4转义字符",[58,2762,2764],{"className":1740,"code":2763,"language":1742,"meta":63,"style":63},"\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",[65,2765,2766,2771,2787,2801,2806,2819,2824],{"__ignoreMap":63},[68,2767,2768],{"class":70,"line":71},[68,2769,2770],{"class":74},"\u002F\u002F换行符\n",[68,2772,2773,2776,2779,2782,2784],{"class":70,"line":78},[68,2774,2775],{"class":85},"cout ",[68,2777,2778],{"class":102},"\u003C\u003C",[68,2780,2781],{"class":872},"\"hello world\u002Fn\"",[68,2783,1804],{"class":85},[68,2785,2786],{"class":74}," \u002F\u002F就等同于如下：\n",[68,2788,2789,2791,2793,2796,2798],{"class":70,"line":89},[68,2790,2775],{"class":85},[68,2792,2778],{"class":102},[68,2794,2795],{"class":872},"\"hello world\"",[68,2797,2778],{"class":102},[68,2799,2800],{"class":85},"endl;\n",[68,2802,2803],{"class":70,"line":115},[68,2804,2805],{"class":74},"\u002F\u002F反斜杠\n",[68,2807,2808,2810,2812,2815,2817],{"class":70,"line":280},[68,2809,2775],{"class":85},[68,2811,2778],{"class":102},[68,2813,2814],{"class":872},"\"\u002F\u002F\"",[68,2816,2778],{"class":102},[68,2818,2800],{"class":85},[68,2820,2821],{"class":70,"line":301},[68,2822,2823],{"class":74},"\u002F\u002F水平制表符\n",[68,2825,2826,2828,2830,2833,2836,2839,2841,2844],{"class":70,"line":320},[68,2827,2775],{"class":85},[68,2829,2778],{"class":102},[68,2831,2832],{"class":872},"\"aaaa",[68,2834,2835],{"class":92},"\\t",[68,2837,2838],{"class":872},"helloworld\"",[68,2840,2778],{"class":102},[68,2842,2843],{"class":85},"endl;",[68,2845,2846],{"class":74}," \u002F\u002F输出窗口时有对齐效果\n",[43,2848,2850],{"id":2849},"_135字符串型","1.3.5字符串型",[19,2852,2853,2854,2856],{},"char 变量名",[68,2855],{},"=\"字符串值\"",[58,2858,2860],{"className":1740,"code":2859,"language":1742,"meta":63,"style":63},"\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",[65,2861,2862,2867,2872,2877,2882,2895,2908,2913,2919,2931],{"__ignoreMap":63},[68,2863,2864],{"class":70,"line":71},[68,2865,2866],{"class":74},"\u002F\u002Fc风格字符串\n",[68,2868,2869],{"class":70,"line":78},[68,2870,2871],{"class":74},"\u002F\u002F注意事项：\n",[68,2873,2874],{"class":70,"line":89},[68,2875,2876],{"class":74},"\u002F\u002F1.char字符串名[]\n",[68,2878,2879],{"class":70,"line":115},[68,2880,2881],{"class":74},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[68,2883,2884,2886,2889,2891,2893],{"class":70,"line":280},[68,2885,1842],{"class":102},[68,2887,2888],{"class":85}," str[]",[68,2890,869],{"class":102},[68,2892,2795],{"class":872},[68,2894,112],{"class":85},[68,2896,2897,2899,2901,2904,2906],{"class":70,"line":301},[68,2898,2775],{"class":85},[68,2900,2778],{"class":102},[68,2902,2903],{"class":85},"str",[68,2905,2778],{"class":102},[68,2907,2800],{"class":85},[68,2909,2910],{"class":70,"line":320},[68,2911,2912],{"class":74},"\u002F\u002Fc++风格字符串\n",[68,2914,2916],{"class":70,"line":2915},8,[68,2917,2918],{"class":74},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[68,2920,2922,2925,2927,2929],{"class":70,"line":2921},9,[68,2923,2924],{"class":85},"string str2",[68,2926,869],{"class":102},[68,2928,2795],{"class":872},[68,2930,112],{"class":85},[68,2932,2934,2936,2938,2941,2943],{"class":70,"line":2933},10,[68,2935,2775],{"class":85},[68,2937,2778],{"class":102},[68,2939,2940],{"class":85},"str2",[68,2942,2778],{"class":102},[68,2944,2800],{"class":85},[43,2946,2948],{"id":2947},"_136布尔类型bool","1.3.6布尔类型bool",[58,2950,2952],{"className":1740,"code":2951,"language":1742,"meta":63,"style":63},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[65,2953,2954,2969],{"__ignoreMap":63},[68,2955,2956,2959,2962,2964,2967],{"class":70,"line":71},[68,2957,2958],{"class":102},"bool",[68,2960,2961],{"class":85}," flag",[68,2963,869],{"class":102},[68,2965,2966],{"class":92},"true",[68,2968,112],{"class":85},[68,2970,2971,2974,2977,2980,2982,2984],{"class":70,"line":78},[68,2972,2973],{"class":85},"cout",[68,2975,2976],{"class":102},"\u003C\u003Csizeof",[68,2978,2979],{"class":85},"(flag)",[68,2981,2778],{"class":102},[68,2983,2843],{"class":85},[68,2985,2986],{"class":74}," \u002F\u002F查看布尔占内存空间\n",[14,2988,2990],{"id":2989},"_14键盘输入cin","1.4键盘输入cin",[58,2992,2994],{"className":1740,"code":2993,"language":1742,"meta":63,"style":63},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[65,2995,2996,3009,3026,3037],{"__ignoreMap":63},[68,2997,2998,3000,3003,3005,3007],{"class":70,"line":71},[68,2999,1754],{"class":102},[68,3001,3002],{"class":85}," a",[68,3004,869],{"class":102},[68,3006,600],{"class":92},[68,3008,112],{"class":85},[68,3010,3011,3013,3015,3018,3020,3022,3024],{"class":70,"line":78},[68,3012,2973],{"class":85},[68,3014,2778],{"class":102},[68,3016,3017],{"class":872},"\"请给整型变量a赋值\"",[68,3019,2778],{"class":102},[68,3021,1974],{"class":85},[68,3023,2778],{"class":102},[68,3025,2800],{"class":85},[68,3027,3028,3031,3034],{"class":70,"line":89},[68,3029,3030],{"class":85},"cin ",[68,3032,3033],{"class":102},">>",[68,3035,3036],{"class":85}," a;\n",[68,3038,3039,3041,3043,3046,3049,3051,3053],{"class":70,"line":115},[68,3040,2775],{"class":85},[68,3042,2778],{"class":102},[68,3044,3045],{"class":872}," \"整型变量a=\"",[68,3047,3048],{"class":102}," \u003C\u003C",[68,3050,1974],{"class":85},[68,3052,2778],{"class":102},[68,3054,2800],{"class":85},[14,3056,3058],{"id":3057},"_15运算符","1.5运算符",[43,3060,3062],{"id":3061},"_151算术运算符","1.5.1算术运算符",[19,3064,3065,3068],{},[38,3066],{"alt":63,"src":3067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[48,3070,3071,3074,3077],{},[51,3072,3073],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[51,3075,3076],{},"两个小数不可以做取模运算",[51,3078,3079],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[43,3081,3083],{"id":3082},"_152赋值运算符","1.5.2赋值运算符",[19,3085,3086],{},[38,3087],{"alt":63,"src":3088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[43,3090,3092],{"id":3091},"_153比较运算符","1.5.3比较运算符",[19,3094,3095],{},[38,3096],{"alt":63,"src":3097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[43,3099,3101],{"id":3100},"_154逻辑运算符","1.5.4逻辑运算符",[19,3103,3104],{},[38,3105],{"alt":63,"src":3106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3108,3110],{"id":3109},"_16程序流程结构","1.6程序流程结构",[43,3112,3114],{"id":3113},"_161选择结构","1.6.1选择结构",[48,3116,3117],{},[51,3118,3119],{},"if语句\n单行、多行、多条件if语句",[58,3121,3123],{"className":1740,"code":3122,"language":1742,"meta":63,"style":63},"\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",[65,3124,3125,3130,3145,3150,3164,3168,3173,3182,3195,3199,3212,3217,3223,3228,3242,3247,3253,3274,3279,3293,3298,3327,3332,3349,3354,3359,3364,3378,3383],{"__ignoreMap":63},[68,3126,3127],{"class":70,"line":71},[68,3128,3129],{"class":74},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[68,3131,3132,3135,3138,3140,3143],{"class":70,"line":78},[68,3133,3134],{"class":102},"if",[68,3136,3137],{"class":85},"(score",[68,3139,2695],{"class":102},[68,3141,3142],{"class":92},"600",[68,3144,1757],{"class":85},[68,3146,3147],{"class":70,"line":89},[68,3148,3149],{"class":85},"{\n",[68,3151,3152,3155,3157,3160,3162],{"class":70,"line":115},[68,3153,3154],{"class":85},"    cout",[68,3156,2778],{"class":102},[68,3158,3159],{"class":872},"'这是单行if语句'",[68,3161,2778],{"class":102},[68,3163,2800],{"class":85},[68,3165,3166],{"class":70,"line":280},[68,3167,118],{"class":85},[68,3169,3170],{"class":70,"line":301},[68,3171,3172],{"class":74},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[68,3174,3175,3177,3179],{"class":70,"line":320},[68,3176,3030],{"class":85},[68,3178,3033],{"class":102},[68,3180,3181],{"class":85}," score\n",[68,3183,3184,3186,3188,3191,3193],{"class":70,"line":2915},[68,3185,3134],{"class":102},[68,3187,3137],{"class":85},[68,3189,3190],{"class":102},"\u003C=",[68,3192,3142],{"class":92},[68,3194,1757],{"class":85},[68,3196,3197],{"class":70,"line":2921},[68,3198,3149],{"class":85},[68,3200,3201,3203,3205,3208,3210],{"class":70,"line":2933},[68,3202,3154],{"class":85},[68,3204,3033],{"class":102},[68,3206,3207],{"class":872},"\"小于等于600\"",[68,3209,2778],{"class":102},[68,3211,2800],{"class":85},[68,3213,3215],{"class":70,"line":3214},11,[68,3216,118],{"class":85},[68,3218,3220],{"class":70,"line":3219},12,[68,3221,3222],{"class":102},"else\n",[68,3224,3226],{"class":70,"line":3225},13,[68,3227,3149],{"class":85},[68,3229,3231,3233,3235,3238,3240],{"class":70,"line":3230},14,[68,3232,3154],{"class":85},[68,3234,3033],{"class":102},[68,3236,3237],{"class":872},"\"大于600\"",[68,3239,3033],{"class":102},[68,3241,2800],{"class":85},[68,3243,3245],{"class":70,"line":3244},15,[68,3246,118],{"class":85},[68,3248,3250],{"class":70,"line":3249},16,[68,3251,3252],{"class":74},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[68,3254,3256,3258,3261,3263,3265,3268,3270,3272],{"class":70,"line":3255},17,[68,3257,3134],{"class":102},[68,3259,3260],{"class":85}," (",[68,3262,600],{"class":92},[68,3264,861],{"class":102},[68,3266,3267],{"class":85},"num",[68,3269,861],{"class":102},[68,3271,2047],{"class":92},[68,3273,1757],{"class":85},[68,3275,3277],{"class":70,"line":3276},18,[68,3278,3149],{"class":85},[68,3280,3282,3284,3286,3289,3291],{"class":70,"line":3281},19,[68,3283,3154],{"class":85},[68,3285,2778],{"class":102},[68,3287,3288],{"class":872},"\"小于100\"",[68,3290,2778],{"class":102},[68,3292,2800],{"class":85},[68,3294,3296],{"class":70,"line":3295},20,[68,3297,118],{"class":85},[68,3299,3301,3304,3307,3310,3313,3315,3318,3320,3322,3325],{"class":70,"line":3300},21,[68,3302,3303],{"class":102},"else",[68,3305,3306],{"class":102}," if",[68,3308,3309],{"class":85}," (nmu",[68,3311,3312],{"class":102},">=",[68,3314,2047],{"class":92},[68,3316,3317],{"class":102},"&&",[68,3319,3267],{"class":85},[68,3321,861],{"class":102},[68,3323,3324],{"class":92},"200",[68,3326,1757],{"class":85},[68,3328,3330],{"class":70,"line":3329},22,[68,3331,3149],{"class":85},[68,3333,3335,3337,3339,3342,3344,3346],{"class":70,"line":3334},23,[68,3336,3154],{"class":85},[68,3338,2778],{"class":102},[68,3340,3341],{"class":872},"\"不小于100且小于200\"",[68,3343,2778],{"class":102},[68,3345,2843],{"class":85},[68,3347,3348],{"class":74}," \u002F\u002F可以无限else if,python中是elif：\n",[68,3350,3352],{"class":70,"line":3351},24,[68,3353,118],{"class":85},[68,3355,3357],{"class":70,"line":3356},25,[68,3358,3222],{"class":102},[68,3360,3362],{"class":70,"line":3361},26,[68,3363,3149],{"class":85},[68,3365,3367,3369,3371,3374,3376],{"class":70,"line":3366},27,[68,3368,3154],{"class":85},[68,3370,2778],{"class":102},[68,3372,3373],{"class":872},"\"不小于200\"",[68,3375,2778],{"class":102},[68,3377,2800],{"class":85},[68,3379,3381],{"class":70,"line":3380},28,[68,3382,118],{"class":85},[68,3384,3386],{"class":70,"line":3385},29,[68,3387,3388],{"class":74},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[48,3390,3391],{"start":78},[51,3392,3393],{},"三目运算符",[58,3395,3397],{"className":1740,"code":3396,"language":1742,"meta":63,"style":63},"\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",[65,3398,3399,3404,3409,3435,3457,3474,3479,3502,3517],{"__ignoreMap":63},[68,3400,3401],{"class":70,"line":71},[68,3402,3403],{"class":74},"\u002F\u002F创建三个变量a,b,c\n",[68,3405,3406],{"class":70,"line":78},[68,3407,3408],{"class":74},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[68,3410,3411,3413,3415,3417,3419,3422,3424,3426,3429,3431,3433],{"class":70,"line":89},[68,3412,1754],{"class":102},[68,3414,3002],{"class":85},[68,3416,869],{"class":102},[68,3418,2436],{"class":92},[68,3420,3421],{"class":85},",b",[68,3423,869],{"class":102},[68,3425,2182],{"class":92},[68,3427,3428],{"class":85},",c",[68,3430,869],{"class":102},[68,3432,600],{"class":92},[68,3434,112],{"class":85},[68,3436,3437,3439,3441,3444,3446,3448,3450,3452,3454],{"class":70,"line":115},[68,3438,2024],{"class":85},[68,3440,869],{"class":102},[68,3442,3443],{"class":85},"(a",[68,3445,2695],{"class":102},[68,3447,1999],{"class":85},[68,3449,2721],{"class":102},[68,3451,1974],{"class":85},[68,3453,2595],{"class":102},[68,3455,3456],{"class":85},"b)\n",[68,3458,3459,3461,3463,3466,3468,3470,3472],{"class":70,"line":280},[68,3460,2973],{"class":85},[68,3462,2778],{"class":102},[68,3464,3465],{"class":872},"\"c=\"",[68,3467,2778],{"class":102},[68,3469,2024],{"class":85},[68,3471,2778],{"class":102},[68,3473,2800],{"class":85},[68,3475,3476],{"class":70,"line":301},[68,3477,3478],{"class":74},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[68,3480,3481,3483,3485,3487,3489,3491,3493,3496,3498,3500],{"class":70,"line":320},[68,3482,3443],{"class":85},[68,3484,2695],{"class":102},[68,3486,1999],{"class":85},[68,3488,2721],{"class":102},[68,3490,1974],{"class":85},[68,3492,2595],{"class":102},[68,3494,3495],{"class":85},"b)",[68,3497,869],{"class":102},[68,3499,2047],{"class":92},[68,3501,112],{"class":85},[68,3503,3504,3506,3508,3510,3512,3514],{"class":70,"line":2915},[68,3505,2973],{"class":85},[68,3507,2778],{"class":102},[68,3509,1974],{"class":85},[68,3511,2778],{"class":102},[68,3513,2843],{"class":85},[68,3515,3516],{"class":74}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[68,3518,3519,3521,3523,3525,3527,3529],{"class":70,"line":2921},[68,3520,2973],{"class":85},[68,3522,2778],{"class":102},[68,3524,1999],{"class":85},[68,3526,2778],{"class":102},[68,3528,2843],{"class":85},[68,3530,3531],{"class":74}," \u002F\u002F10   a>b,b还是原值\n",[48,3533,3534],{"start":89},[51,3535,3536],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[58,3538,3540],{"className":1740,"code":3539,"language":1742,"meta":63,"style":63},"\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",[65,3541,3542,3547,3555,3568,3578,3582,3596,3609,3619,3627,3632,3656,3677,3699,3720,3742,3763,3783,3788],{"__ignoreMap":63},[68,3543,3544],{"class":70,"line":71},[68,3545,3546],{"class":74},"\u002F\u002F案例-电影打分\n",[68,3548,3549,3552],{"class":70,"line":78},[68,3550,3551],{"class":102},"#include",[68,3553,3554],{"class":872},"\u003Ciostream>\n",[68,3556,3557,3560,3563,3566],{"class":70,"line":89},[68,3558,3559],{"class":102},"using",[68,3561,3562],{"class":102}," namespace",[68,3564,3565],{"class":587}," std",[68,3567,112],{"class":85},[68,3569,3570,3572,3575],{"class":70,"line":115},[68,3571,1754],{"class":102},[68,3573,3574],{"class":587}," main",[68,3576,3577],{"class":85},"()\n",[68,3579,3580],{"class":70,"line":280},[68,3581,3149],{"class":85},[68,3583,3584,3587,3590,3592,3594],{"class":70,"line":301},[68,3585,3586],{"class":102},"    int",[68,3588,3589],{"class":85}," score",[68,3591,869],{"class":102},[68,3593,600],{"class":92},[68,3595,112],{"class":85},[68,3597,3598,3600,3602,3605,3607],{"class":70,"line":320},[68,3599,3154],{"class":85},[68,3601,2778],{"class":102},[68,3603,3604],{"class":872},"\"电影打分：\"",[68,3606,2778],{"class":102},[68,3608,2800],{"class":85},[68,3610,3611,3614,3616],{"class":70,"line":2915},[68,3612,3613],{"class":85},"    cin",[68,3615,3033],{"class":102},[68,3617,3618],{"class":85},"score;\n",[68,3620,3621,3624],{"class":70,"line":2921},[68,3622,3623],{"class":102},"    switch",[68,3625,3626],{"class":85},"(score)\n",[68,3628,3629],{"class":70,"line":2933},[68,3630,3631],{"class":85},"    {\n",[68,3633,3634,3637,3639,3642,3644,3647,3649,3651,3654],{"class":70,"line":3214},[68,3635,3636],{"class":102},"        case",[68,3638,989],{"class":92},[68,3640,3641],{"class":85},":cout",[68,3643,2778],{"class":102},[68,3645,3646],{"class":872},"\"经典\"",[68,3648,2778],{"class":102},[68,3650,2843],{"class":85},[68,3652,3653],{"class":102},"break",[68,3655,112],{"class":85},[68,3657,3658,3660,3663,3665,3667,3669,3671,3673,3675],{"class":70,"line":3219},[68,3659,3636],{"class":102},[68,3661,3662],{"class":92}," 9",[68,3664,3641],{"class":85},[68,3666,2778],{"class":102},[68,3668,3646],{"class":872},[68,3670,2778],{"class":102},[68,3672,2843],{"class":85},[68,3674,3653],{"class":102},[68,3676,112],{"class":85},[68,3678,3679,3681,3684,3686,3688,3691,3693,3695,3697],{"class":70,"line":3225},[68,3680,3636],{"class":102},[68,3682,3683],{"class":92}," 8",[68,3685,3641],{"class":85},[68,3687,2778],{"class":102},[68,3689,3690],{"class":872},"\"非常好\"",[68,3692,2778],{"class":102},[68,3694,2843],{"class":85},[68,3696,3653],{"class":102},[68,3698,112],{"class":85},[68,3700,3701,3703,3706,3708,3710,3712,3714,3716,3718],{"class":70,"line":3230},[68,3702,3636],{"class":102},[68,3704,3705],{"class":92}," 7",[68,3707,3641],{"class":85},[68,3709,2778],{"class":102},[68,3711,3690],{"class":872},[68,3713,2778],{"class":102},[68,3715,2843],{"class":85},[68,3717,3653],{"class":102},[68,3719,112],{"class":85},[68,3721,3722,3724,3727,3729,3731,3734,3736,3738,3740],{"class":70,"line":3244},[68,3723,3636],{"class":102},[68,3725,3726],{"class":92}," 6",[68,3728,3641],{"class":85},[68,3730,2778],{"class":102},[68,3732,3733],{"class":872},"\"一般\"",[68,3735,2778],{"class":102},[68,3737,2843],{"class":85},[68,3739,3653],{"class":102},[68,3741,112],{"class":85},[68,3743,3744,3746,3749,3751,3753,3755,3757,3759,3761],{"class":70,"line":3249},[68,3745,3636],{"class":102},[68,3747,3748],{"class":92}," 5",[68,3750,3641],{"class":85},[68,3752,2778],{"class":102},[68,3754,3733],{"class":872},[68,3756,2778],{"class":102},[68,3758,2843],{"class":85},[68,3760,3653],{"class":102},[68,3762,112],{"class":85},[68,3764,3765,3768,3770,3772,3775,3777,3779,3781],{"class":70,"line":3255},[68,3766,3767],{"class":102},"        default",[68,3769,3641],{"class":85},[68,3771,2778],{"class":102},[68,3773,3774],{"class":872},"\"烂片\"",[68,3776,2778],{"class":102},[68,3778,2843],{"class":85},[68,3780,3653],{"class":102},[68,3782,112],{"class":85},[68,3784,3785],{"class":70,"line":3276},[68,3786,3787],{"class":85},"    }\n",[68,3789,3790],{"class":70,"line":3281},[68,3791,118],{"class":85},[19,3793,3794],{},"if和switch区别：",[168,3796,3797,3800],{},[51,3798,3799],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[51,3801,3802],{},"switch优点：结构清晰，执行效率高",[43,3804,3806],{"id":3805},"_162循环结构","1.6.2循环结构",[48,3808,3809],{},[51,3810,3811],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[58,3813,3815],{"className":1740,"code":3814,"language":1742,"meta":63,"style":63},"\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",[65,3816,3817,3822,3830,3834,3847,3861,3865,3885,3895,3899,3911],{"__ignoreMap":63},[68,3818,3819],{"class":70,"line":71},[68,3820,3821],{"class":74},"\u002F\u002F打印0-9数字\n",[68,3823,3824,3826,3828],{"class":70,"line":78},[68,3825,1754],{"class":102},[68,3827,3574],{"class":587},[68,3829,3577],{"class":85},[68,3831,3832],{"class":70,"line":89},[68,3833,3149],{"class":85},[68,3835,3836,3838,3841,3843,3845],{"class":70,"line":115},[68,3837,3586],{"class":102},[68,3839,3840],{"class":85}," num",[68,3842,869],{"class":102},[68,3844,600],{"class":92},[68,3846,112],{"class":85},[68,3848,3849,3852,3855,3857,3859],{"class":70,"line":280},[68,3850,3851],{"class":102},"    while",[68,3853,3854],{"class":85},"(num",[68,3856,861],{"class":102},[68,3858,2182],{"class":92},[68,3860,1757],{"class":85},[68,3862,3863],{"class":70,"line":301},[68,3864,3631],{"class":85},[68,3866,3867,3870,3873,3875,3877,3879,3882],{"class":70,"line":320},[68,3868,3869],{"class":587},"       std",[68,3871,3872],{"class":85},"::cout",[68,3874,2778],{"class":102},[68,3876,3267],{"class":85},[68,3878,2778],{"class":102},[68,3880,3881],{"class":587},"std",[68,3883,3884],{"class":85},"::endl;\n",[68,3886,3887,3890,3893],{"class":70,"line":2915},[68,3888,3889],{"class":85},"        num",[68,3891,3892],{"class":102},"++",[68,3894,112],{"class":85},[68,3896,3897],{"class":70,"line":2921},[68,3898,3787],{"class":85},[68,3900,3901,3904,3906,3909],{"class":70,"line":2933},[68,3902,3903],{"class":587},"    system",[68,3905,997],{"class":85},[68,3907,3908],{"class":872},"\"pause\"",[68,3910,1757],{"class":85},[68,3912,3913],{"class":70,"line":3214},[68,3914,118],{"class":85},[19,3916,3917],{},"注意：写好循环条件，避免死循环情况",[58,3919,3921],{"className":1740,"code":3920,"language":1742,"meta":63,"style":63},"\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",[65,3922,3923,3928,3935,3942,3952,3960,3964,3969,3996,4001,4006,4014,4041,4046,4051,4064,4074,4078,4088,4093,4106,4111,4125,4130,4145,4149,4162,4166,4171,4175,4189,4197,4202,4208,4214,4219],{"__ignoreMap":63},[68,3924,3925],{"class":70,"line":71},[68,3926,3927],{"class":74},"\u002F\u002F循环结构-猜数字\n",[68,3929,3930,3932],{"class":70,"line":78},[68,3931,3551],{"class":102},[68,3933,3934],{"class":872}," \u003Ciostream>\n",[68,3936,3937,3939],{"class":70,"line":89},[68,3938,3551],{"class":102},[68,3940,3941],{"class":872}," \u003Cctime>\n",[68,3943,3944,3946,3948,3950],{"class":70,"line":115},[68,3945,3559],{"class":102},[68,3947,3562],{"class":102},[68,3949,3565],{"class":587},[68,3951,112],{"class":85},[68,3953,3954,3956,3958],{"class":70,"line":280},[68,3955,1754],{"class":102},[68,3957,3574],{"class":587},[68,3959,3577],{"class":85},[68,3961,3962],{"class":70,"line":301},[68,3963,3149],{"class":85},[68,3965,3966],{"class":70,"line":320},[68,3967,3968],{"class":74},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[68,3970,3971,3974,3977,3980,3983,3985,3988,3990,3993],{"class":70,"line":2915},[68,3972,3973],{"class":587},"    srand",[68,3975,3976],{"class":85},"((",[68,3978,3979],{"class":102},"unsigned",[68,3981,3982],{"class":102}," int",[68,3984,2165],{"class":85},[68,3986,3987],{"class":587},"time",[68,3989,997],{"class":85},[68,3991,3992],{"class":92},"NULL",[68,3994,3995],{"class":85},"));\n",[68,3997,3998],{"class":70,"line":2921},[68,3999,4000],{"emptyLinePlaceholder":1679},"\n",[68,4002,4003],{"class":70,"line":2933},[68,4004,4005],{"class":74},"    \u002F\u002F1.系统生成随机数\n",[68,4007,4008,4011],{"class":70,"line":3214},[68,4009,4010],{"class":74},"    \u002F\u002Frand()%100",[68,4012,4013],{"class":74}," \u002F\u002F生成0-99的随机数\n",[68,4015,4016,4018,4020,4022,4025,4028,4030,4032,4034,4036,4038],{"class":70,"line":3219},[68,4017,3586],{"class":102},[68,4019,3840],{"class":85},[68,4021,869],{"class":102},[68,4023,4024],{"class":587},"rand",[68,4026,4027],{"class":85},"()",[68,4029,2064],{"class":102},[68,4031,2047],{"class":92},[68,4033,2217],{"class":102},[68,4035,99],{"class":92},[68,4037,1804],{"class":85},[68,4039,4040],{"class":74}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[68,4042,4043],{"class":70,"line":3225},[68,4044,4045],{"class":74},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[68,4047,4048],{"class":70,"line":3230},[68,4049,4050],{"class":74},"    \u002F\u002F2.玩家猜测\n",[68,4052,4053,4055,4058,4060,4062],{"class":70,"line":3244},[68,4054,3586],{"class":102},[68,4056,4057],{"class":85}," val",[68,4059,869],{"class":102},[68,4061,600],{"class":92},[68,4063,112],{"class":85},[68,4065,4066,4068,4070,4072],{"class":70,"line":3249},[68,4067,3851],{"class":102},[68,4069,3260],{"class":85},[68,4071,99],{"class":92},[68,4073,1757],{"class":85},[68,4075,4076],{"class":70,"line":3255},[68,4077,3631],{"class":85},[68,4079,4080,4083,4085],{"class":70,"line":3276},[68,4081,4082],{"class":85},"        cin",[68,4084,3033],{"class":102},[68,4086,4087],{"class":85},"val;\n",[68,4089,4090],{"class":70,"line":3281},[68,4091,4092],{"class":74},"        \u002F\u002F3.判断玩家猜测\n",[68,4094,4095,4098,4101,4103],{"class":70,"line":3295},[68,4096,4097],{"class":102},"        if",[68,4099,4100],{"class":85},"(val",[68,4102,861],{"class":102},[68,4104,4105],{"class":85},"num) \n",[68,4107,4108],{"class":70,"line":3300},[68,4109,4110],{"class":85},"        {\n",[68,4112,4113,4116,4118,4121,4123],{"class":70,"line":3329},[68,4114,4115],{"class":85},"            cout",[68,4117,2778],{"class":102},[68,4119,4120],{"class":872},"\"猜小了！\"",[68,4122,2778],{"class":102},[68,4124,2800],{"class":85},[68,4126,4127],{"class":70,"line":3334},[68,4128,4129],{"class":85},"        }\n",[68,4131,4132,4135,4137,4140,4142],{"class":70,"line":3351},[68,4133,4134],{"class":102},"        else",[68,4136,3306],{"class":102},[68,4138,4139],{"class":85}," (val",[68,4141,2695],{"class":102},[68,4143,4144],{"class":85},"num)\n",[68,4146,4147],{"class":70,"line":3356},[68,4148,4110],{"class":85},[68,4150,4151,4153,4155,4158,4160],{"class":70,"line":3361},[68,4152,4115],{"class":85},[68,4154,2778],{"class":102},[68,4156,4157],{"class":872},"\"猜大了！\"",[68,4159,2778],{"class":102},[68,4161,2800],{"class":85},[68,4163,4164],{"class":70,"line":3366},[68,4165,4129],{"class":85},[68,4167,4168],{"class":70,"line":3380},[68,4169,4170],{"class":102},"        else\n",[68,4172,4173],{"class":70,"line":3385},[68,4174,4110],{"class":85},[68,4176,4178,4180,4182,4185,4187],{"class":70,"line":4177},30,[68,4179,4115],{"class":85},[68,4181,2778],{"class":102},[68,4183,4184],{"class":872},"\"猜对了！\"",[68,4186,2778],{"class":102},[68,4188,2800],{"class":85},[68,4190,4192,4195],{"class":70,"line":4191},31,[68,4193,4194],{"class":102},"            break",[68,4196,112],{"class":85},[68,4198,4200],{"class":70,"line":4199},32,[68,4201,4129],{"class":85},[68,4203,4205],{"class":70,"line":4204},33,[68,4206,4207],{"class":74},"        \u002F\u002F猜对 退出游戏\n",[68,4209,4211],{"class":70,"line":4210},34,[68,4212,4213],{"class":74},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[68,4215,4217],{"class":70,"line":4216},35,[68,4218,3787],{"class":85},[68,4220,4222],{"class":70,"line":4221},36,[68,4223,118],{"class":85},[48,4225,4226],{"start":78},[51,4227,4228,4229,4232],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1890,4230,4231],{},"do...while会先执行一次循环语句","，在判断循环语句",[58,4234,4236],{"className":1740,"code":4235,"language":1742,"meta":63,"style":63},"\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",[65,4237,4238,4243,4251,4255,4267,4275,4279,4296,4303,4307,4319,4329],{"__ignoreMap":63},[68,4239,4240],{"class":70,"line":71},[68,4241,4242],{"class":74},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[68,4244,4245,4247,4249],{"class":70,"line":78},[68,4246,1754],{"class":102},[68,4248,3574],{"class":587},[68,4250,3577],{"class":85},[68,4252,4253],{"class":70,"line":89},[68,4254,3149],{"class":85},[68,4256,4257,4259,4261,4263,4265],{"class":70,"line":115},[68,4258,3586],{"class":102},[68,4260,3840],{"class":85},[68,4262,869],{"class":102},[68,4264,600],{"class":92},[68,4266,112],{"class":85},[68,4268,4269,4272],{"class":70,"line":280},[68,4270,4271],{"class":102},"    do",[68,4273,4274],{"class":85}," \n",[68,4276,4277],{"class":70,"line":301},[68,4278,3631],{"class":85},[68,4280,4281,4284,4286,4288,4290,4292,4294],{"class":70,"line":320},[68,4282,4283],{"class":587},"        std",[68,4285,3872],{"class":85},[68,4287,2778],{"class":102},[68,4289,3267],{"class":85},[68,4291,2778],{"class":102},[68,4293,3881],{"class":587},[68,4295,3884],{"class":85},[68,4297,4298,4300],{"class":70,"line":2915},[68,4299,3889],{"class":85},[68,4301,4302],{"class":102},"++\n",[68,4304,4305],{"class":70,"line":2921},[68,4306,3787],{"class":85},[68,4308,4309,4311,4313,4315,4317],{"class":70,"line":2933},[68,4310,3851],{"class":102},[68,4312,3854],{"class":85},[68,4314,861],{"class":102},[68,4316,2182],{"class":92},[68,4318,1016],{"class":85},[68,4320,4321,4323,4325,4327],{"class":70,"line":3214},[68,4322,3903],{"class":587},[68,4324,997],{"class":85},[68,4326,3908],{"class":872},[68,4328,1016],{"class":85},[68,4330,4331],{"class":70,"line":3219},[68,4332,118],{"class":85},[19,4334,4335],{},"案例-水仙花数",[19,4337,4338],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4340,4341],{},"例如：1^3+5^3+3^3=153",[19,4343,4344],{},"请用do...while语句，求出所有3位数的水仙花数",[58,4346,4348],{"className":1740,"code":4347,"language":1742,"meta":63,"style":63},"#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",[65,4349,4350,4356,4366,4374,4378,4383,4395,4401,4405,4410,4426,4442,4458,4473,4492,4507,4555,4559,4571,4575,4583,4587,4601],{"__ignoreMap":63},[68,4351,4352,4354],{"class":70,"line":71},[68,4353,3551],{"class":102},[68,4355,3934],{"class":872},[68,4357,4358,4360,4362,4364],{"class":70,"line":78},[68,4359,3559],{"class":102},[68,4361,3562],{"class":102},[68,4363,3565],{"class":587},[68,4365,112],{"class":85},[68,4367,4368,4370,4372],{"class":70,"line":89},[68,4369,1754],{"class":102},[68,4371,3574],{"class":587},[68,4373,3577],{"class":85},[68,4375,4376],{"class":70,"line":115},[68,4377,3149],{"class":85},[68,4379,4380],{"class":70,"line":280},[68,4381,4382],{"class":74},"    \u002F\u002F1.先打印所有三位数字\n",[68,4384,4385,4387,4389,4391,4393],{"class":70,"line":301},[68,4386,3586],{"class":102},[68,4388,3840],{"class":85},[68,4390,869],{"class":102},[68,4392,2047],{"class":92},[68,4394,112],{"class":85},[68,4396,4397,4399],{"class":70,"line":320},[68,4398,4271],{"class":102},[68,4400,4274],{"class":85},[68,4402,4403],{"class":70,"line":2915},[68,4404,3631],{"class":85},[68,4406,4407],{"class":70,"line":2921},[68,4408,4409],{"class":74},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[68,4411,4412,4415,4417,4419,4421,4423],{"class":70,"line":2933},[68,4413,4414],{"class":102},"        int",[68,4416,3002],{"class":85},[68,4418,869],{"class":102},[68,4420,600],{"class":92},[68,4422,1804],{"class":85},[68,4424,4425],{"class":74}," \u002F\u002F个位\n",[68,4427,4428,4430,4433,4435,4437,4439],{"class":70,"line":3214},[68,4429,4414],{"class":102},[68,4431,4432],{"class":85}," b",[68,4434,869],{"class":102},[68,4436,600],{"class":92},[68,4438,1804],{"class":85},[68,4440,4441],{"class":74}," \u002F\u002F十位\n",[68,4443,4444,4446,4449,4451,4453,4455],{"class":70,"line":3219},[68,4445,4414],{"class":102},[68,4447,4448],{"class":85}," c",[68,4450,869],{"class":102},[68,4452,600],{"class":92},[68,4454,1804],{"class":85},[68,4456,4457],{"class":74}," \u002F\u002F百位\n",[68,4459,4460,4463,4465,4467,4469,4471],{"class":70,"line":3225},[68,4461,4462],{"class":85},"        a",[68,4464,869],{"class":102},[68,4466,3267],{"class":85},[68,4468,2064],{"class":102},[68,4470,2182],{"class":92},[68,4472,112],{"class":85},[68,4474,4475,4478,4480,4482,4484,4486,4488,4490],{"class":70,"line":3230},[68,4476,4477],{"class":85},"        b",[68,4479,869],{"class":102},[68,4481,3267],{"class":85},[68,4483,2320],{"class":102},[68,4485,2182],{"class":92},[68,4487,2064],{"class":102},[68,4489,2182],{"class":92},[68,4491,112],{"class":85},[68,4493,4494,4497,4499,4501,4503,4505],{"class":70,"line":3244},[68,4495,4496],{"class":85},"        c",[68,4498,869],{"class":102},[68,4500,3267],{"class":85},[68,4502,2320],{"class":102},[68,4504,2047],{"class":92},[68,4506,112],{"class":85},[68,4508,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4546,4549,4552],{"class":70,"line":3249},[68,4510,4097],{"class":102},[68,4512,3443],{"class":85},[68,4514,2191],{"class":102},[68,4516,1974],{"class":85},[68,4518,2191],{"class":102},[68,4520,1974],{"class":85},[68,4522,2217],{"class":102},[68,4524,1999],{"class":85},[68,4526,2191],{"class":102},[68,4528,1999],{"class":85},[68,4530,2191],{"class":102},[68,4532,1999],{"class":85},[68,4534,2217],{"class":102},[68,4536,2024],{"class":85},[68,4538,2191],{"class":102},[68,4540,2024],{"class":85},[68,4542,2191],{"class":102},[68,4544,4545],{"class":85},"c ",[68,4547,4548],{"class":102},"==",[68,4550,4551],{"class":85}," num)",[68,4553,4554],{"class":74}," \u002F\u002F如果是水仙花数，才打印\n",[68,4556,4557],{"class":70,"line":3255},[68,4558,4110],{"class":85},[68,4560,4561,4563,4565,4567,4569],{"class":70,"line":3276},[68,4562,4115],{"class":85},[68,4564,2778],{"class":102},[68,4566,3267],{"class":85},[68,4568,2778],{"class":102},[68,4570,2800],{"class":85},[68,4572,4573],{"class":70,"line":3281},[68,4574,4129],{"class":85},[68,4576,4577,4579,4581],{"class":70,"line":3295},[68,4578,3889],{"class":85},[68,4580,3892],{"class":102},[68,4582,112],{"class":85},[68,4584,4585],{"class":70,"line":3300},[68,4586,3787],{"class":85},[68,4588,4589,4591,4594,4596,4599],{"class":70,"line":3329},[68,4590,3851],{"class":102},[68,4592,4593],{"class":85}," (num ",[68,4595,861],{"class":102},[68,4597,4598],{"class":92}," 1000",[68,4600,1016],{"class":85},[68,4602,4603],{"class":70,"line":3334},[68,4604,118],{"class":85},[48,4606,4607],{"start":89},[51,4608,4609],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[58,4611,4613],{"className":1740,"code":4612,"language":1742,"meta":63,"style":63},"\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",[65,4614,4615,4620,4649,4653,4665,4669,4674,4685,4692,4696,4710,4714,4721,4725,4737,4746],{"__ignoreMap":63},[68,4616,4617],{"class":70,"line":71},[68,4618,4619],{"class":74},"\u002F\u002F从数字0-9打印\n",[68,4621,4622,4625,4627,4629,4632,4634,4636,4639,4641,4643,4645,4647],{"class":70,"line":78},[68,4623,4624],{"class":102},"for",[68,4626,997],{"class":85},[68,4628,1754],{"class":102},[68,4630,4631],{"class":85}," i",[68,4633,869],{"class":102},[68,4635,600],{"class":92},[68,4637,4638],{"class":85},";i",[68,4640,861],{"class":102},[68,4642,2182],{"class":92},[68,4644,4638],{"class":85},[68,4646,3892],{"class":102},[68,4648,1757],{"class":85},[68,4650,4651],{"class":70,"line":89},[68,4652,3149],{"class":85},[68,4654,4655,4657,4659,4661,4663],{"class":70,"line":115},[68,4656,3154],{"class":85},[68,4658,2778],{"class":102},[68,4660,2177],{"class":85},[68,4662,2778],{"class":102},[68,4664,2800],{"class":85},[68,4666,4667],{"class":70,"line":280},[68,4668,118],{"class":85},[68,4670,4671],{"class":70,"line":301},[68,4672,4673],{"class":74},"\u002F\u002F上式可以进行拆分\n",[68,4675,4676,4678,4680,4682],{"class":70,"line":320},[68,4677,1754],{"class":102},[68,4679,4631],{"class":85},[68,4681,869],{"class":102},[68,4683,4684],{"class":92},"0\n",[68,4686,4687,4689],{"class":70,"line":2915},[68,4688,4624],{"class":102},[68,4690,4691],{"class":85},"(;;;)\n",[68,4693,4694],{"class":70,"line":2921},[68,4695,3149],{"class":85},[68,4697,4698,4701,4704,4706,4708],{"class":70,"line":2933},[68,4699,4700],{"class":102},"    if",[68,4702,4703],{"class":85},"(i",[68,4705,3312],{"class":102},[68,4707,2182],{"class":92},[68,4709,1757],{"class":85},[68,4711,4712],{"class":70,"line":3214},[68,4713,3631],{"class":85},[68,4715,4716,4719],{"class":70,"line":3219},[68,4717,4718],{"class":102},"        break",[68,4720,112],{"class":85},[68,4722,4723],{"class":70,"line":3225},[68,4724,3787],{"class":85},[68,4726,4727,4729,4731,4733,4735],{"class":70,"line":3230},[68,4728,3154],{"class":85},[68,4730,2778],{"class":102},[68,4732,2177],{"class":85},[68,4734,2778],{"class":102},[68,4736,2800],{"class":85},[68,4738,4739,4742,4744],{"class":70,"line":3244},[68,4740,4741],{"class":85},"    i",[68,4743,3892],{"class":102},[68,4745,112],{"class":85},[68,4747,4748],{"class":70,"line":3249},[68,4749,118],{"class":85},[19,4751,4752],{},"小练习",[58,4754,4756],{"className":1740,"code":4755,"language":1742,"meta":63,"style":63},"#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",[65,4757,4758,4764,4774,4782,4786,4791,4796,4824,4828,4833,4838,4879,4883,4896,4900,4904,4908,4920,4924,4928],{"__ignoreMap":63},[68,4759,4760,4762],{"class":70,"line":71},[68,4761,3551],{"class":102},[68,4763,3554],{"class":872},[68,4765,4766,4768,4770,4772],{"class":70,"line":78},[68,4767,3559],{"class":102},[68,4769,3562],{"class":102},[68,4771,3565],{"class":587},[68,4773,112],{"class":85},[68,4775,4776,4778,4780],{"class":70,"line":89},[68,4777,1754],{"class":102},[68,4779,3574],{"class":587},[68,4781,3577],{"class":85},[68,4783,4784],{"class":70,"line":115},[68,4785,3149],{"class":85},[68,4787,4788],{"class":70,"line":280},[68,4789,4790],{"class":74},"    \u002F\u002F敲桌子案例\n",[68,4792,4793],{"class":70,"line":301},[68,4794,4795],{"class":74},"    \u002F\u002F1.先输出1-100的数字\n",[68,4797,4798,4801,4803,4805,4807,4809,4811,4814,4816,4818,4820,4822],{"class":70,"line":320},[68,4799,4800],{"class":102},"    for",[68,4802,997],{"class":85},[68,4804,1754],{"class":102},[68,4806,4631],{"class":85},[68,4808,869],{"class":102},[68,4810,99],{"class":92},[68,4812,4813],{"class":85},"; i",[68,4815,3190],{"class":102},[68,4817,2047],{"class":92},[68,4819,4813],{"class":85},[68,4821,3892],{"class":102},[68,4823,1757],{"class":85},[68,4825,4826],{"class":70,"line":2915},[68,4827,3631],{"class":85},[68,4829,4830],{"class":70,"line":2921},[68,4831,4832],{"class":74},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[68,4834,4835],{"class":70,"line":2933},[68,4836,4837],{"class":74},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[68,4839,4840,4842,4844,4846,4848,4850,4852,4855,4857,4859,4861,4863,4865,4867,4869,4871,4873,4875,4877],{"class":70,"line":3214},[68,4841,4097],{"class":102},[68,4843,4703],{"class":85},[68,4845,2064],{"class":102},[68,4847,2105],{"class":92},[68,4849,4548],{"class":102},[68,4851,600],{"class":92},[68,4853,4854],{"class":102}," ||",[68,4856,4631],{"class":85},[68,4858,2064],{"class":102},[68,4860,2182],{"class":92},[68,4862,4548],{"class":102},[68,4864,2105],{"class":92},[68,4866,4854],{"class":102},[68,4868,4631],{"class":85},[68,4870,2320],{"class":102},[68,4872,2182],{"class":92},[68,4874,4548],{"class":102},[68,4876,2105],{"class":92},[68,4878,1757],{"class":85},[68,4880,4881],{"class":70,"line":3219},[68,4882,4110],{"class":85},[68,4884,4885,4887,4889,4892,4894],{"class":70,"line":3225},[68,4886,4115],{"class":85},[68,4888,2778],{"class":102},[68,4890,4891],{"class":872},"\"敲桌子\"",[68,4893,2778],{"class":102},[68,4895,2800],{"class":85},[68,4897,4898],{"class":70,"line":3230},[68,4899,4129],{"class":85},[68,4901,4902],{"class":70,"line":3244},[68,4903,4170],{"class":102},[68,4905,4906],{"class":70,"line":3249},[68,4907,4110],{"class":85},[68,4909,4910,4912,4914,4916,4918],{"class":70,"line":3255},[68,4911,4115],{"class":85},[68,4913,2778],{"class":102},[68,4915,2177],{"class":85},[68,4917,2778],{"class":102},[68,4919,2800],{"class":85},[68,4921,4922],{"class":70,"line":3276},[68,4923,4129],{"class":85},[68,4925,4926],{"class":70,"line":3281},[68,4927,3787],{"class":85},[68,4929,4930],{"class":70,"line":3295},[68,4931,118],{"class":85},[19,4933,4934],{},"嵌套实现星图",[58,4936,4938],{"className":1740,"code":4937,"language":1742,"meta":63,"style":63},"#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",[65,4939,4940,4946,4956,4964,4968,4994,4998,5027,5031,5042,5046,5055,5059],{"__ignoreMap":63},[68,4941,4942,4944],{"class":70,"line":71},[68,4943,3551],{"class":102},[68,4945,3554],{"class":872},[68,4947,4948,4950,4952,4954],{"class":70,"line":78},[68,4949,3559],{"class":102},[68,4951,3562],{"class":102},[68,4953,3565],{"class":587},[68,4955,112],{"class":85},[68,4957,4958,4960,4962],{"class":70,"line":89},[68,4959,1754],{"class":102},[68,4961,3574],{"class":587},[68,4963,3577],{"class":85},[68,4965,4966],{"class":70,"line":115},[68,4967,3149],{"class":85},[68,4969,4970,4972,4974,4976,4978,4980,4982,4984,4986,4988,4990,4992],{"class":70,"line":280},[68,4971,4800],{"class":102},[68,4973,3260],{"class":85},[68,4975,1754],{"class":102},[68,4977,4631],{"class":85},[68,4979,869],{"class":102},[68,4981,600],{"class":92},[68,4983,4638],{"class":85},[68,4985,861],{"class":102},[68,4987,2182],{"class":92},[68,4989,4638],{"class":85},[68,4991,3892],{"class":102},[68,4993,1757],{"class":85},[68,4995,4996],{"class":70,"line":301},[68,4997,3631],{"class":85},[68,4999,5000,5003,5005,5007,5010,5012,5014,5017,5019,5021,5023,5025],{"class":70,"line":320},[68,5001,5002],{"class":102},"        for",[68,5004,3260],{"class":85},[68,5006,1754],{"class":102},[68,5008,5009],{"class":85}," j",[68,5011,869],{"class":102},[68,5013,600],{"class":92},[68,5015,5016],{"class":85},";j",[68,5018,861],{"class":102},[68,5020,2182],{"class":92},[68,5022,5016],{"class":85},[68,5024,3892],{"class":102},[68,5026,1757],{"class":85},[68,5028,5029],{"class":70,"line":2915},[68,5030,4110],{"class":85},[68,5032,5033,5035,5037,5040],{"class":70,"line":2921},[68,5034,4115],{"class":85},[68,5036,2778],{"class":102},[68,5038,5039],{"class":872},"\"*\"",[68,5041,112],{"class":85},[68,5043,5044],{"class":70,"line":2933},[68,5045,4129],{"class":85},[68,5047,5048,5051,5053],{"class":70,"line":3214},[68,5049,5050],{"class":85},"        cout",[68,5052,2778],{"class":102},[68,5054,2800],{"class":85},[68,5056,5057],{"class":70,"line":3219},[68,5058,3787],{"class":85},[68,5060,5061],{"class":70,"line":3225},[68,5062,118],{"class":85},[19,5064,5065],{},"乘法口诀表",[58,5067,5069],{"className":1740,"code":5068,"language":1742,"meta":63,"style":63},"#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",[65,5070,5071,5077,5087,5095,5099,5125,5129,5154,5158,5198,5202,5210,5214],{"__ignoreMap":63},[68,5072,5073,5075],{"class":70,"line":71},[68,5074,3551],{"class":102},[68,5076,3934],{"class":872},[68,5078,5079,5081,5083,5085],{"class":70,"line":78},[68,5080,3559],{"class":102},[68,5082,3562],{"class":102},[68,5084,3565],{"class":587},[68,5086,112],{"class":85},[68,5088,5089,5091,5093],{"class":70,"line":89},[68,5090,1754],{"class":102},[68,5092,3574],{"class":587},[68,5094,3577],{"class":85},[68,5096,5097],{"class":70,"line":115},[68,5098,3149],{"class":85},[68,5100,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123],{"class":70,"line":280},[68,5102,4800],{"class":102},[68,5104,997],{"class":85},[68,5106,1754],{"class":102},[68,5108,4631],{"class":85},[68,5110,869],{"class":102},[68,5112,99],{"class":92},[68,5114,4638],{"class":85},[68,5116,861],{"class":102},[68,5118,2182],{"class":92},[68,5120,4638],{"class":85},[68,5122,3892],{"class":102},[68,5124,1757],{"class":85},[68,5126,5127],{"class":70,"line":301},[68,5128,3631],{"class":85},[68,5130,5131,5133,5135,5137,5139,5141,5143,5145,5147,5150,5152],{"class":70,"line":320},[68,5132,5002],{"class":102},[68,5134,997],{"class":85},[68,5136,1754],{"class":102},[68,5138,5009],{"class":85},[68,5140,869],{"class":102},[68,5142,99],{"class":92},[68,5144,5016],{"class":85},[68,5146,3190],{"class":102},[68,5148,5149],{"class":85},"i;j",[68,5151,3892],{"class":102},[68,5153,1757],{"class":85},[68,5155,5156],{"class":70,"line":2915},[68,5157,4110],{"class":85},[68,5159,5160,5162,5164,5166,5168,5170,5172,5174,5176,5179,5181,5183,5185,5187,5189,5192,5194,5196],{"class":70,"line":2921},[68,5161,4115],{"class":85},[68,5163,2778],{"class":102},[68,5165,2203],{"class":85},[68,5167,2778],{"class":102},[68,5169,5039],{"class":872},[68,5171,2778],{"class":102},[68,5173,2177],{"class":85},[68,5175,2778],{"class":102},[68,5177,5178],{"class":872},"\"=\"",[68,5180,2778],{"class":102},[68,5182,2177],{"class":85},[68,5184,2191],{"class":102},[68,5186,2203],{"class":85},[68,5188,2778],{"class":102},[68,5190,5191],{"class":872},"'",[68,5193,2835],{"class":92},[68,5195,5191],{"class":872},[68,5197,112],{"class":85},[68,5199,5200],{"class":70,"line":2933},[68,5201,4129],{"class":85},[68,5203,5204,5206,5208],{"class":70,"line":3214},[68,5205,5050],{"class":85},[68,5207,2778],{"class":102},[68,5209,2800],{"class":85},[68,5211,5212],{"class":70,"line":3219},[68,5213,3787],{"class":85},[68,5215,5216],{"class":70,"line":3225},[68,5217,118],{"class":85},[43,5219,5221],{"id":5220},"_163跳出语句","1.6.3跳出语句",[48,5223,5224],{},[51,5225,5226],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5228,5229],{},"break使用时机：",[168,5231,5232,5235,5238],{},[51,5233,5234],{},"出现在switch条件语句中，作用是终止case并跳出switch",[51,5236,5237],{},"出现在循环结构中，作用是跳出当前的循环结构",[51,5239,5240],{},"出现在嵌套循环中，跳出最近的内层循环语句",[48,5242,5243,5246],{"start":78},[51,5244,5245],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[51,5247,5248],{},"goto语句\n语法：goto 标记;",[19,5250,5251],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[58,5253,5255],{"className":1740,"code":5254,"language":1742,"meta":63,"style":63},"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",[65,5256,5257,5265,5269,5282,5292,5305,5318,5331,5339,5355],{"__ignoreMap":63},[68,5258,5259,5261,5263],{"class":70,"line":71},[68,5260,1754],{"class":102},[68,5262,3574],{"class":587},[68,5264,3577],{"class":85},[68,5266,5267],{"class":70,"line":78},[68,5268,3149],{"class":85},[68,5270,5271,5273,5275,5278,5280],{"class":70,"line":89},[68,5272,3154],{"class":85},[68,5274,2778],{"class":102},[68,5276,5277],{"class":872},"\"1\"",[68,5279,2778],{"class":102},[68,5281,2800],{"class":85},[68,5283,5284,5287,5290],{"class":70,"line":115},[68,5285,5286],{"class":102},"    goto",[68,5288,5289],{"class":587}," FLAG",[68,5291,112],{"class":85},[68,5293,5294,5296,5298,5301,5303],{"class":70,"line":280},[68,5295,3154],{"class":85},[68,5297,2778],{"class":102},[68,5299,5300],{"class":872},"\"2\"",[68,5302,2778],{"class":102},[68,5304,2800],{"class":85},[68,5306,5307,5309,5311,5314,5316],{"class":70,"line":301},[68,5308,3154],{"class":85},[68,5310,2778],{"class":102},[68,5312,5313],{"class":872},"\"3\"",[68,5315,2778],{"class":102},[68,5317,2800],{"class":85},[68,5319,5320,5322,5324,5327,5329],{"class":70,"line":320},[68,5321,3154],{"class":85},[68,5323,2778],{"class":102},[68,5325,5326],{"class":872},"\"4\"",[68,5328,2778],{"class":102},[68,5330,2800],{"class":85},[68,5332,5333,5336],{"class":70,"line":2915},[68,5334,5335],{"class":587},"    FLAG",[68,5337,5338],{"class":85},":\n",[68,5340,5341,5343,5345,5348,5350,5352],{"class":70,"line":2921},[68,5342,3154],{"class":85},[68,5344,2778],{"class":102},[68,5346,5347],{"class":872},"\"5\"",[68,5349,2778],{"class":102},[68,5351,2843],{"class":85},[68,5353,5354],{"class":74},"\u002F\u002F跳过了2,3,4,直接到5\n",[68,5356,5357],{"class":70,"line":2933},[68,5358,118],{"class":85},[14,5360,5362],{"id":5361},"_17数组","1.7数组",[43,5364,5366],{"id":5365},"_171一维数组","1.7.1一维数组",[48,5368,5369],{},[51,5370,5371],{},"一维数组定义方式",[120,5373,5374,5384],{},[123,5375,5376],{},[126,5377,5378,5381],{},[129,5379,5380],{},"方式",[129,5382,5383],{},"注意事项",[137,5385,5386,5400,5410],{},[126,5387,5388,5394],{},[142,5389,5390,5391,1804],{},"数据类型 数组名",[68,5392,5393],{},"数组长度",[142,5395,5396,5397,5399],{},"这种方式是先定义再arr",[68,5398,2177],{},"赋值",[126,5401,5402,5407],{},[142,5403,5390,5404,5406],{},[68,5405,5393],{},"={值1,值2....};",[142,5408,5409],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[126,5411,5412,5416],{},[142,5413,5390,5414,5406],{},[68,5415],{},[142,5417,5418,5419,5421],{},"int arr",[68,5420],{},";这是不正确的，按照这样的方式定义必须有初始长度",[48,5423,5424],{"start":78},[51,5425,5426],{},"一维数组数组名\n用途：",[168,5428,5429],{},[51,5430,5431],{},"1.可以统计整个数组在内存中的长度：",[58,5433,5435],{"className":1740,"code":5434,"language":1742,"meta":63,"style":63},"sizeof(arr);\nsizeof(arr[0]);\n",[65,5436,5437,5444],{"__ignoreMap":63},[68,5438,5439,5441],{"class":70,"line":71},[68,5440,1749],{"class":102},[68,5442,5443],{"class":85},"(arr);\n",[68,5445,5446,5448,5451,5453],{"class":70,"line":78},[68,5447,1749],{"class":102},[68,5449,5450],{"class":85},"(arr[",[68,5452,600],{"class":92},[68,5454,5455],{"class":85},"]);\n",[168,5457,5458],{},[51,5459,5460],{},"2.可以获取数组在内存中的首地址:",[58,5462,5464],{"className":1740,"code":5463,"language":1742,"meta":63,"style":63},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[65,5465,5466,5471,5484,5489],{"__ignoreMap":63},[68,5467,5468],{"class":70,"line":71},[68,5469,5470],{"class":74},"\u002F\u002F查看16进制的首地址\n",[68,5472,5473,5475,5477,5480,5482],{"class":70,"line":78},[68,5474,2973],{"class":85},[68,5476,2778],{"class":102},[68,5478,5479],{"class":85},"arr",[68,5481,2778],{"class":102},[68,5483,2800],{"class":85},[68,5485,5486],{"class":70,"line":89},[68,5487,5488],{"class":74},"\u002F\u002F看10进制数\n",[68,5490,5491,5493,5495,5497,5499,5501,5503,5506,5508,5510,5512],{"class":70,"line":115},[68,5492,2973],{"class":85},[68,5494,2778],{"class":102},[68,5496,997],{"class":85},[68,5498,1754],{"class":102},[68,5500,2165],{"class":85},[68,5502,2089],{"class":102},[68,5504,5505],{"class":85},"arr[",[68,5507,600],{"class":92},[68,5509,2675],{"class":85},[68,5511,2778],{"class":102},[68,5513,2800],{"class":85},[19,5515,5516],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[168,5518,5519],{},[51,5520,5521],{},"1️⃣五只小猪称体重",[58,5523,5525],{"className":1740,"code":5524,"language":1742,"meta":63,"style":63},"#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",[65,5526,5527,5533,5543,5551,5555,5595,5608,5634,5638,5650,5654,5664,5668,5672,5685,5695],{"__ignoreMap":63},[68,5528,5529,5531],{"class":70,"line":71},[68,5530,3551],{"class":102},[68,5532,3554],{"class":872},[68,5534,5535,5537,5539,5541],{"class":70,"line":78},[68,5536,3559],{"class":102},[68,5538,3562],{"class":102},[68,5540,3565],{"class":587},[68,5542,112],{"class":85},[68,5544,5545,5547,5549],{"class":70,"line":89},[68,5546,1754],{"class":102},[68,5548,3574],{"class":587},[68,5550,3577],{"class":85},[68,5552,5553],{"class":70,"line":115},[68,5554,3149],{"class":85},[68,5556,5557,5559,5562,5564,5566,5568,5570,5573,5575,5578,5580,5582,5584,5587,5589,5592],{"class":70,"line":280},[68,5558,3586],{"class":102},[68,5560,5561],{"class":85}," arr[",[68,5563,2055],{"class":92},[68,5565,2675],{"class":85},[68,5567,869],{"class":102},[68,5569,2632],{"class":85},[68,5571,5572],{"class":92},"300",[68,5574,2114],{"class":85},[68,5576,5577],{"class":92},"350",[68,5579,2114],{"class":85},[68,5581,3324],{"class":92},[68,5583,2114],{"class":85},[68,5585,5586],{"class":92},"400",[68,5588,2114],{"class":85},[68,5590,5591],{"class":92},"250",[68,5593,5594],{"class":85},"};\n",[68,5596,5597,5599,5602,5604,5606],{"class":70,"line":301},[68,5598,3586],{"class":102},[68,5600,5601],{"class":85}," tmp",[68,5603,869],{"class":102},[68,5605,600],{"class":92},[68,5607,112],{"class":85},[68,5609,5610,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632],{"class":70,"line":320},[68,5611,4800],{"class":102},[68,5613,3260],{"class":85},[68,5615,1754],{"class":102},[68,5617,4631],{"class":85},[68,5619,869],{"class":102},[68,5621,600],{"class":92},[68,5623,4638],{"class":85},[68,5625,861],{"class":102},[68,5627,2055],{"class":92},[68,5629,4638],{"class":85},[68,5631,3892],{"class":102},[68,5633,1757],{"class":85},[68,5635,5636],{"class":70,"line":2915},[68,5637,3631],{"class":85},[68,5639,5640,5642,5645,5647],{"class":70,"line":2921},[68,5641,4097],{"class":102},[68,5643,5644],{"class":85},"(tmp",[68,5646,861],{"class":102},[68,5648,5649],{"class":85},"arr[i])\n",[68,5651,5652],{"class":70,"line":2933},[68,5653,4110],{"class":85},[68,5655,5656,5659,5661],{"class":70,"line":3214},[68,5657,5658],{"class":85},"            tmp",[68,5660,869],{"class":102},[68,5662,5663],{"class":85},"arr[i];\n",[68,5665,5666],{"class":70,"line":3219},[68,5667,4129],{"class":85},[68,5669,5670],{"class":70,"line":3225},[68,5671,3787],{"class":85},[68,5673,5674,5676,5678,5681,5683],{"class":70,"line":3230},[68,5675,3154],{"class":85},[68,5677,2778],{"class":102},[68,5679,5680],{"class":85},"tmp",[68,5682,2778],{"class":102},[68,5684,2800],{"class":85},[68,5686,5687,5690,5693],{"class":70,"line":3244},[68,5688,5689],{"class":102},"    return",[68,5691,5692],{"class":92}," 0",[68,5694,112],{"class":85},[68,5696,5697],{"class":70,"line":3249},[68,5698,118],{"class":85},[168,5700,5701],{},[51,5702,5703],{},"2️⃣数组元素逆置",[58,5705,5707],{"className":1740,"code":5706,"language":1742,"meta":63,"style":63},"\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",[65,5708,5709,5714,5720,5730,5738,5742,5777,5793,5825,5838,5843,5848,5860,5870,5880,5885,5894,5904,5909,5914,5941,5945,5961,5965,5976,5985],{"__ignoreMap":63},[68,5710,5711],{"class":70,"line":71},[68,5712,5713],{"class":74},"\u002F\u002F元素逆置\n",[68,5715,5716,5718],{"class":70,"line":78},[68,5717,3551],{"class":102},[68,5719,3554],{"class":872},[68,5721,5722,5724,5726,5728],{"class":70,"line":89},[68,5723,3559],{"class":102},[68,5725,3562],{"class":102},[68,5727,3565],{"class":587},[68,5729,112],{"class":85},[68,5731,5732,5734,5736],{"class":70,"line":115},[68,5733,1754],{"class":102},[68,5735,3574],{"class":587},[68,5737,3577],{"class":85},[68,5739,5740],{"class":70,"line":280},[68,5741,3149],{"class":85},[68,5743,5744,5747,5749,5751,5753,5755,5757,5759,5761,5763,5765,5767,5769,5771,5773,5775],{"class":70,"line":301},[68,5745,5746],{"class":102},"   int",[68,5748,5561],{"class":85},[68,5750,2055],{"class":92},[68,5752,2675],{"class":85},[68,5754,869],{"class":102},[68,5756,2632],{"class":85},[68,5758,99],{"class":92},[68,5760,2114],{"class":85},[68,5762,267],{"class":92},[68,5764,2114],{"class":85},[68,5766,288],{"class":92},[68,5768,2114],{"class":85},[68,5770,2029],{"class":92},[68,5772,2114],{"class":85},[68,5774,2055],{"class":92},[68,5776,5594],{"class":85},[68,5778,5779,5781,5784,5786,5788,5790],{"class":70,"line":320},[68,5780,5746],{"class":102},[68,5782,5783],{"class":85}," start",[68,5785,869],{"class":102},[68,5787,600],{"class":92},[68,5789,1804],{"class":85},[68,5791,5792],{"class":74},"\u002F\u002F起始下标\n",[68,5794,5795,5797,5800,5803,5806,5809,5811,5813,5816,5818,5820,5822],{"class":70,"line":2915},[68,5796,5746],{"class":102},[68,5798,5799],{"class":85}," end",[68,5801,5802],{"class":102},"=sizeof",[68,5804,5805],{"class":85},"(arr)",[68,5807,5808],{"class":102},"\u002Fsizeof",[68,5810,5450],{"class":85},[68,5812,600],{"class":92},[68,5814,5815],{"class":85},"])",[68,5817,2268],{"class":102},[68,5819,99],{"class":92},[68,5821,1804],{"class":85},[68,5823,5824],{"class":74},"\u002F\u002F结束下标\n",[68,5826,5827,5830,5833,5835],{"class":70,"line":2921},[68,5828,5829],{"class":102},"   while",[68,5831,5832],{"class":85}," (start",[68,5834,861],{"class":102},[68,5836,5837],{"class":85},"end)\n",[68,5839,5840],{"class":70,"line":2933},[68,5841,5842],{"class":85},"   {\n",[68,5844,5845],{"class":70,"line":3214},[68,5846,5847],{"class":74},"    \u002F\u002F实现元素互换代码\n",[68,5849,5850,5852,5855,5857],{"class":70,"line":3219},[68,5851,3586],{"class":102},[68,5853,5854],{"class":85}," temp",[68,5856,869],{"class":102},[68,5858,5859],{"class":85},"arr[start];\n",[68,5861,5862,5865,5867],{"class":70,"line":3225},[68,5863,5864],{"class":85},"    arr[start]",[68,5866,869],{"class":102},[68,5868,5869],{"class":85},"arr[end];\n",[68,5871,5872,5875,5877],{"class":70,"line":3230},[68,5873,5874],{"class":85},"    arr[end]",[68,5876,869],{"class":102},[68,5878,5879],{"class":85},"temp;\n",[68,5881,5882],{"class":70,"line":3244},[68,5883,5884],{"class":74},"    \u002F\u002F下标更新\n",[68,5886,5887,5890,5892],{"class":70,"line":3249},[68,5888,5889],{"class":85},"    start",[68,5891,3892],{"class":102},[68,5893,112],{"class":85},[68,5895,5896,5899,5902],{"class":70,"line":3255},[68,5897,5898],{"class":85},"    end",[68,5900,5901],{"class":102},"--",[68,5903,112],{"class":85},[68,5905,5906],{"class":70,"line":3276},[68,5907,5908],{"class":85},"   }\n",[68,5910,5911],{"class":70,"line":3281},[68,5912,5913],{"class":74},"   \u002F\u002F输出逆置后的数组\n",[68,5915,5916,5919,5921,5923,5925,5927,5929,5931,5933,5935,5937,5939],{"class":70,"line":3295},[68,5917,5918],{"class":102},"   for",[68,5920,3260],{"class":85},[68,5922,1754],{"class":102},[68,5924,4631],{"class":85},[68,5926,869],{"class":102},[68,5928,600],{"class":92},[68,5930,4638],{"class":85},[68,5932,861],{"class":102},[68,5934,2055],{"class":92},[68,5936,4638],{"class":85},[68,5938,3892],{"class":102},[68,5940,1757],{"class":85},[68,5942,5943],{"class":70,"line":3300},[68,5944,5842],{"class":85},[68,5946,5947,5949,5951,5954,5956,5959],{"class":70,"line":3329},[68,5948,3154],{"class":85},[68,5950,2778],{"class":102},[68,5952,5953],{"class":85},"arr[i]",[68,5955,2778],{"class":102},[68,5957,5958],{"class":872},"\" \"",[68,5960,112],{"class":85},[68,5962,5963],{"class":70,"line":3334},[68,5964,5908],{"class":85},[68,5966,5967,5970,5972,5974],{"class":70,"line":3351},[68,5968,5969],{"class":587},"   system",[68,5971,997],{"class":85},[68,5973,3908],{"class":872},[68,5975,1016],{"class":85},[68,5977,5978,5981,5983],{"class":70,"line":3356},[68,5979,5980],{"class":102},"   return",[68,5982,5692],{"class":92},[68,5984,112],{"class":85},[68,5986,5987],{"class":70,"line":3361},[68,5988,118],{"class":85},[168,5990,5991],{},[51,5992,5993],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[58,5995,5997],{"className":1740,"code":5996,"language":1742,"meta":63,"style":63},"\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",[65,5998,5999,6004,6010,6020,6028,6032,6084,6097,6123,6127,6141,6145,6150,6155,6185,6189,6194,6228,6232,6237,6257,6262,6274,6290,6305,6310,6314,6318,6331,6357,6361,6375,6379,6387],{"__ignoreMap":63},[68,6000,6001],{"class":70,"line":71},[68,6002,6003],{"class":74},"\u002F\u002F冒泡排序,升序\n",[68,6005,6006,6008],{"class":70,"line":78},[68,6007,3551],{"class":102},[68,6009,3554],{"class":872},[68,6011,6012,6014,6016,6018],{"class":70,"line":89},[68,6013,3559],{"class":102},[68,6015,3562],{"class":102},[68,6017,3565],{"class":587},[68,6019,112],{"class":85},[68,6021,6022,6024,6026],{"class":70,"line":115},[68,6023,1754],{"class":102},[68,6025,3574],{"class":587},[68,6027,3577],{"class":85},[68,6029,6030],{"class":70,"line":280},[68,6031,3149],{"class":85},[68,6033,6034,6036,6038,6040,6043,6045,6048,6050,6052,6054,6056,6058,6060,6062,6064,6066,6068,6070,6072,6074,6076,6078,6080,6082],{"class":70,"line":301},[68,6035,3586],{"class":102},[68,6037,5561],{"class":85},[68,6039,2156],{"class":92},[68,6041,6042],{"class":85},"] ",[68,6044,869],{"class":102},[68,6046,6047],{"class":85}," {",[68,6049,2029],{"class":92},[68,6051,2114],{"class":85},[68,6053,267],{"class":92},[68,6055,2114],{"class":85},[68,6057,2131],{"class":92},[68,6059,2114],{"class":85},[68,6061,600],{"class":92},[68,6063,2114],{"class":85},[68,6065,2055],{"class":92},[68,6067,2114],{"class":85},[68,6069,2105],{"class":92},[68,6071,2114],{"class":85},[68,6073,99],{"class":92},[68,6075,2114],{"class":85},[68,6077,288],{"class":92},[68,6079,2114],{"class":85},[68,6081,2156],{"class":92},[68,6083,5594],{"class":85},[68,6085,6086,6088,6090,6093,6095],{"class":70,"line":320},[68,6087,3154],{"class":85},[68,6089,2778],{"class":102},[68,6091,6092],{"class":872},"\"排序前：\"",[68,6094,2778],{"class":102},[68,6096,2800],{"class":85},[68,6098,6099,6101,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121],{"class":70,"line":2915},[68,6100,4800],{"class":102},[68,6102,3260],{"class":85},[68,6104,1754],{"class":102},[68,6106,4631],{"class":85},[68,6108,869],{"class":102},[68,6110,600],{"class":92},[68,6112,4638],{"class":85},[68,6114,861],{"class":102},[68,6116,2156],{"class":92},[68,6118,4638],{"class":85},[68,6120,3892],{"class":102},[68,6122,1757],{"class":85},[68,6124,6125],{"class":70,"line":2921},[68,6126,3631],{"class":85},[68,6128,6129,6131,6133,6135,6137,6139],{"class":70,"line":2933},[68,6130,5050],{"class":85},[68,6132,2778],{"class":102},[68,6134,5953],{"class":85},[68,6136,2778],{"class":102},[68,6138,5958],{"class":872},[68,6140,112],{"class":85},[68,6142,6143],{"class":70,"line":3214},[68,6144,3787],{"class":85},[68,6146,6147],{"class":70,"line":3219},[68,6148,6149],{"class":74},"    \u002F\u002F开始冒泡排序\n",[68,6151,6152],{"class":70,"line":3225},[68,6153,6154],{"class":74},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[68,6156,6157,6159,6161,6163,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183],{"class":70,"line":3230},[68,6158,4800],{"class":102},[68,6160,3260],{"class":85},[68,6162,1754],{"class":102},[68,6164,4631],{"class":85},[68,6166,869],{"class":102},[68,6168,600],{"class":92},[68,6170,4638],{"class":85},[68,6172,861],{"class":102},[68,6174,2156],{"class":92},[68,6176,2268],{"class":102},[68,6178,99],{"class":92},[68,6180,4638],{"class":85},[68,6182,3892],{"class":102},[68,6184,1757],{"class":85},[68,6186,6187],{"class":70,"line":3244},[68,6188,3631],{"class":85},[68,6190,6191],{"class":70,"line":3249},[68,6192,6193],{"class":74},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[68,6195,6196,6198,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220,6222,6224,6226],{"class":70,"line":3255},[68,6197,5002],{"class":102},[68,6199,3260],{"class":85},[68,6201,1754],{"class":102},[68,6203,5009],{"class":85},[68,6205,869],{"class":102},[68,6207,600],{"class":92},[68,6209,5016],{"class":85},[68,6211,861],{"class":102},[68,6213,2156],{"class":92},[68,6215,2268],{"class":102},[68,6217,2177],{"class":85},[68,6219,2268],{"class":102},[68,6221,99],{"class":92},[68,6223,5016],{"class":85},[68,6225,3892],{"class":102},[68,6227,1757],{"class":85},[68,6229,6230],{"class":70,"line":3276},[68,6231,4110],{"class":85},[68,6233,6234],{"class":70,"line":3281},[68,6235,6236],{"class":74},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[68,6238,6239,6242,6245,6247,6250,6252,6254],{"class":70,"line":3295},[68,6240,6241],{"class":102},"            if",[68,6243,6244],{"class":85},"(arr[j]",[68,6246,2695],{"class":102},[68,6248,6249],{"class":85},"arr[j",[68,6251,2217],{"class":102},[68,6253,99],{"class":92},[68,6255,6256],{"class":85},"])\n",[68,6258,6259],{"class":70,"line":3300},[68,6260,6261],{"class":85},"            {\n",[68,6263,6264,6267,6269,6271],{"class":70,"line":3329},[68,6265,6266],{"class":102},"                int",[68,6268,5854],{"class":85},[68,6270,869],{"class":102},[68,6272,6273],{"class":85},"arr[j];\n",[68,6275,6276,6279,6281,6283,6285,6287],{"class":70,"line":3334},[68,6277,6278],{"class":85},"                arr[j]",[68,6280,869],{"class":102},[68,6282,6249],{"class":85},[68,6284,2217],{"class":102},[68,6286,99],{"class":92},[68,6288,6289],{"class":85},"];\n",[68,6291,6292,6295,6297,6299,6301,6303],{"class":70,"line":3351},[68,6293,6294],{"class":85},"                arr[j",[68,6296,2217],{"class":102},[68,6298,99],{"class":92},[68,6300,2675],{"class":85},[68,6302,869],{"class":102},[68,6304,5879],{"class":85},[68,6306,6307],{"class":70,"line":3356},[68,6308,6309],{"class":85},"            }\n",[68,6311,6312],{"class":70,"line":3361},[68,6313,4129],{"class":85},[68,6315,6316],{"class":70,"line":3366},[68,6317,3787],{"class":85},[68,6319,6320,6322,6324,6327,6329],{"class":70,"line":3380},[68,6321,3154],{"class":85},[68,6323,2778],{"class":102},[68,6325,6326],{"class":872},"\"排序后：\"",[68,6328,2778],{"class":102},[68,6330,2800],{"class":85},[68,6332,6333,6335,6337,6339,6341,6343,6345,6347,6349,6351,6353,6355],{"class":70,"line":3385},[68,6334,4800],{"class":102},[68,6336,3260],{"class":85},[68,6338,1754],{"class":102},[68,6340,4631],{"class":85},[68,6342,869],{"class":102},[68,6344,600],{"class":92},[68,6346,4638],{"class":85},[68,6348,861],{"class":102},[68,6350,2156],{"class":92},[68,6352,4638],{"class":85},[68,6354,3892],{"class":102},[68,6356,1757],{"class":85},[68,6358,6359],{"class":70,"line":4177},[68,6360,3631],{"class":85},[68,6362,6363,6365,6367,6369,6371,6373],{"class":70,"line":4191},[68,6364,5050],{"class":85},[68,6366,2778],{"class":102},[68,6368,5953],{"class":85},[68,6370,2778],{"class":102},[68,6372,5958],{"class":872},[68,6374,112],{"class":85},[68,6376,6377],{"class":70,"line":4199},[68,6378,3787],{"class":85},[68,6380,6381,6383,6385],{"class":70,"line":4204},[68,6382,5689],{"class":102},[68,6384,5692],{"class":92},[68,6386,112],{"class":85},[68,6388,6389],{"class":70,"line":4210},[68,6390,118],{"class":85},[43,6392,6394],{"id":6393},"_172二维数组","1.7.2二维数组",[48,6396,6397],{},[51,6398,6399],{},"二维数组的四种定义方式",[120,6401,6402,6411],{},[123,6403,6404],{},[126,6405,6406,6409],{},[129,6407,6408],{},"序号",[129,6410,5380],{},[137,6412,6413,6423,6432,6441,6450],{},[126,6414,6415,6417],{},[142,6416,99],{},[142,6418,6419,6420,1804],{},"数据类型 数组名[行数]",[68,6421,6422],{},"列数",[126,6424,6425,6427],{},[142,6426,267],{},[142,6428,6419,6429,6431],{},[68,6430,6422],{},"={ {数据1,数据2}，{数据3，数据4}... }",[126,6433,6434,6436],{},[142,6435,288],{},[142,6437,6419,6438,6440],{},[68,6439,6422],{},"={数据1,数据2,数据3...}",[126,6442,6443,6445],{},[142,6444,2029],{},[142,6446,6447,6448,6440],{},"数据类型 数组名[]",[68,6449,6422],{},[126,6451,6452,6455],{},[142,6453,6454],{},"注意：不能只省略列数",[142,6456],{},[48,6458,6459],{"start":78},[51,6460,6461],{},"二维数组数组名",[168,6463,6464,6467],{},[51,6465,6466],{},"1.查看二维数组所占内存空间",[51,6468,6469],{},"2.获取二维数组首地址",[19,6471,6472],{},"已知二维数组，求二维数组的行数与列数",[58,6474,6476],{"className":1740,"code":6475,"language":1742,"meta":63,"style":63},"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",[65,6477,6478,6486,6490,6508,6512,6530,6546,6551,6576,6609],{"__ignoreMap":63},[68,6479,6480,6482,6484],{"class":70,"line":71},[68,6481,1754],{"class":102},[68,6483,3574],{"class":587},[68,6485,3577],{"class":85},[68,6487,6488],{"class":70,"line":78},[68,6489,3149],{"class":85},[68,6491,6492,6494,6496,6498,6501,6503,6505],{"class":70,"line":89},[68,6493,3586],{"class":102},[68,6495,5561],{"class":85},[68,6497,267],{"class":92},[68,6499,6500],{"class":85},"][",[68,6502,288],{"class":92},[68,6504,2675],{"class":85},[68,6506,6507],{"class":102},"=\n",[68,6509,6510],{"class":70,"line":115},[68,6511,3631],{"class":85},[68,6513,6514,6517,6519,6521,6523,6525,6527],{"class":70,"line":280},[68,6515,6516],{"class":85},"        {",[68,6518,99],{"class":92},[68,6520,2114],{"class":85},[68,6522,267],{"class":92},[68,6524,2114],{"class":85},[68,6526,288],{"class":92},[68,6528,6529],{"class":85},"},\n",[68,6531,6532,6534,6536,6538,6540,6542,6544],{"class":70,"line":301},[68,6533,6516],{"class":85},[68,6535,2029],{"class":92},[68,6537,2114],{"class":85},[68,6539,2055],{"class":92},[68,6541,2114],{"class":85},[68,6543,2080],{"class":92},[68,6545,118],{"class":85},[68,6547,6548],{"class":70,"line":320},[68,6549,6550],{"class":85},"    };\n",[68,6552,6553,6555,6557,6560,6562,6564,6566,6568,6570,6572,6574],{"class":70,"line":2915},[68,6554,3154],{"class":85},[68,6556,2778],{"class":102},[68,6558,6559],{"class":872},"\"二维数组的行数\"",[68,6561,2976],{"class":102},[68,6563,5805],{"class":85},[68,6565,5808],{"class":102},[68,6567,5450],{"class":85},[68,6569,600],{"class":92},[68,6571,5815],{"class":85},[68,6573,2778],{"class":102},[68,6575,2800],{"class":85},[68,6577,6578,6580,6582,6585,6587,6589,6591,6593,6595,6597,6599,6601,6603,6605,6607],{"class":70,"line":2921},[68,6579,3154],{"class":85},[68,6581,2778],{"class":102},[68,6583,6584],{"class":872},"\"二维数组的列数\"",[68,6586,2976],{"class":102},[68,6588,5450],{"class":85},[68,6590,600],{"class":92},[68,6592,5815],{"class":85},[68,6594,5808],{"class":102},[68,6596,5450],{"class":85},[68,6598,600],{"class":92},[68,6600,6500],{"class":85},[68,6602,600],{"class":92},[68,6604,5815],{"class":85},[68,6606,2778],{"class":102},[68,6608,2800],{"class":85},[68,6610,6611],{"class":70,"line":2933},[68,6612,118],{"class":85},[19,6614,6615],{},"查看二维数组首地址",[58,6617,6619],{"className":1740,"code":6618,"language":1742,"meta":63,"style":63},"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",[65,6620,6621,6638,6664,6689],{"__ignoreMap":63},[68,6622,6623,6625,6627,6630,6632,6634,6636],{"class":70,"line":71},[68,6624,2973],{"class":85},[68,6626,2778],{"class":102},[68,6628,6629],{"class":872},"\"二维数组首地址：\"",[68,6631,2778],{"class":102},[68,6633,5479],{"class":85},[68,6635,2778],{"class":102},[68,6637,2800],{"class":85},[68,6639,6640,6642,6644,6647,6649,6651,6653,6656,6658,6660,6662],{"class":70,"line":78},[68,6641,2973],{"class":85},[68,6643,2778],{"class":102},[68,6645,6646],{"class":872},"\"二维数组第一行的首地址：\"",[68,6648,2778],{"class":102},[68,6650,997],{"class":85},[68,6652,1754],{"class":102},[68,6654,6655],{"class":85},")arr[",[68,6657,600],{"class":92},[68,6659,2675],{"class":85},[68,6661,2778],{"class":102},[68,6663,2800],{"class":85},[68,6665,6666,6668,6670,6673,6675,6677,6679,6681,6683,6685,6687],{"class":70,"line":89},[68,6667,2973],{"class":85},[68,6669,2778],{"class":102},[68,6671,6672],{"class":872},"\"二维数组第二行的首地址：\"",[68,6674,2778],{"class":102},[68,6676,997],{"class":85},[68,6678,1754],{"class":102},[68,6680,6655],{"class":85},[68,6682,99],{"class":92},[68,6684,2675],{"class":85},[68,6686,2778],{"class":102},[68,6688,2800],{"class":85},[68,6690,6691,6693,6695,6698,6700,6702,6704,6706,6708,6710,6712,6714,6716,6718,6720,6722],{"class":70,"line":115},[68,6692,2973],{"class":85},[68,6694,2778],{"class":102},[68,6696,6697],{"class":872},"\"二维数组第一个元素的首地址:\"",[68,6699,2778],{"class":102},[68,6701,997],{"class":85},[68,6703,1754],{"class":102},[68,6705,2165],{"class":85},[68,6707,2089],{"class":102},[68,6709,5505],{"class":85},[68,6711,600],{"class":92},[68,6713,6500],{"class":85},[68,6715,600],{"class":92},[68,6717,2675],{"class":85},[68,6719,2778],{"class":102},[68,6721,2843],{"class":85},[68,6723,6724],{"class":74},"\u002F\u002F对于数，要加取址符\n",[1652,6726,6727],{},"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":63,"searchDepth":78,"depth":78,"links":6729},[6730,6731,6732,6740,6741,6747,6752],{"id":1695,"depth":78,"text":1696},{"id":1702,"depth":78,"text":1703},{"id":1717,"depth":78,"text":1718,"children":6733},[6734,6735,6736,6737,6738,6739],{"id":1721,"depth":89,"text":1722},{"id":1767,"depth":89,"text":1768},{"id":1831,"depth":89,"text":1832},{"id":2759,"depth":89,"text":2760},{"id":2849,"depth":89,"text":2850},{"id":2947,"depth":89,"text":2948},{"id":2989,"depth":78,"text":2990},{"id":3057,"depth":78,"text":3058,"children":6742},[6743,6744,6745,6746],{"id":3061,"depth":89,"text":3062},{"id":3082,"depth":89,"text":3083},{"id":3091,"depth":89,"text":3092},{"id":3100,"depth":89,"text":3101},{"id":3109,"depth":78,"text":3110,"children":6748},[6749,6750,6751],{"id":3113,"depth":89,"text":3114},{"id":3805,"depth":89,"text":3806},{"id":5220,"depth":89,"text":5221},{"id":5361,"depth":78,"text":5362,"children":6753},[6754,6755],{"id":5365,"depth":89,"text":5366},{"id":6393,"depth":89,"text":6394},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1687,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6762,"title":6763,"body":6764,"description":63,"extension":1677,"meta":7864,"navigation":1679,"path":7865,"seo":7866,"stem":7867,"__hash__":7868},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6765,"toc":7856},[6766,6769,6773,6781,6789,6792,6858,6862,6865,6941,6945,6948,6951,6954,7167,7171,7176,7240,7245,7312,7317,7408,7411,7516,7520,7523,7529,7673,7677,7680,7694,7697,7742,7745,7853],[10,6767,6763],{"id":6768},"_2函数",[14,6770,6772],{"id":6771},"_21函数概述","2.1函数概述",[48,6774,6775,6778],{},[51,6776,6777],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[51,6779,6780],{},"语法：",[58,6782,6787],{"className":6783,"code":6785,"language":6786,"meta":63},[6784],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[65,6788,6785],{"__ignoreMap":63},[19,6790,6791],{},"小案例",[58,6793,6795],{"className":1740,"code":6794,"language":1742,"meta":63,"style":63},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[65,6796,6797,6802,6826,6830,6847,6854],{"__ignoreMap":63},[68,6798,6799],{"class":70,"line":71},[68,6800,6801],{"class":74},"\u002F\u002Fnum1,num2形参\n",[68,6803,6804,6806,6809,6811,6813,6817,6819,6821,6824],{"class":70,"line":78},[68,6805,1754],{"class":102},[68,6807,6808],{"class":587}," add",[68,6810,997],{"class":85},[68,6812,1754],{"class":102},[68,6814,6816],{"class":6815},"s4XuR"," num1",[68,6818,2114],{"class":85},[68,6820,1754],{"class":102},[68,6822,6823],{"class":6815}," num2",[68,6825,1757],{"class":85},[68,6827,6828],{"class":70,"line":89},[68,6829,3149],{"class":85},[68,6831,6832,6834,6837,6839,6842,6844],{"class":70,"line":115},[68,6833,3586],{"class":102},[68,6835,6836],{"class":85}," sum",[68,6838,869],{"class":102},[68,6840,6841],{"class":85},"num1",[68,6843,2217],{"class":102},[68,6845,6846],{"class":85},"num2;\n",[68,6848,6849,6851],{"class":70,"line":280},[68,6850,5689],{"class":102},[68,6852,6853],{"class":85}," sum;\n",[68,6855,6856],{"class":70,"line":301},[68,6857,118],{"class":85},[14,6859,6861],{"id":6860},"_22函数调用","2.2函数调用",[19,6863,6864],{},"调用刚刚写的求和函数",[58,6866,6868],{"className":1740,"code":6867,"language":1742,"meta":63,"style":63},"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",[65,6869,6870,6878,6882,6887,6899,6911,6920,6925,6937],{"__ignoreMap":63},[68,6871,6872,6874,6876],{"class":70,"line":71},[68,6873,1754],{"class":102},[68,6875,3574],{"class":587},[68,6877,3577],{"class":85},[68,6879,6880],{"class":70,"line":78},[68,6881,3149],{"class":85},[68,6883,6884],{"class":70,"line":89},[68,6885,6886],{"class":74},"    \u002F\u002Fa,b实参\n",[68,6888,6889,6891,6893,6895,6897],{"class":70,"line":115},[68,6890,3586],{"class":102},[68,6892,3002],{"class":85},[68,6894,869],{"class":102},[68,6896,600],{"class":92},[68,6898,112],{"class":85},[68,6900,6901,6903,6905,6907,6909],{"class":70,"line":280},[68,6902,3586],{"class":102},[68,6904,4432],{"class":85},[68,6906,869],{"class":102},[68,6908,600],{"class":92},[68,6910,112],{"class":85},[68,6912,6913,6915,6917],{"class":70,"line":301},[68,6914,3613],{"class":85},[68,6916,3033],{"class":102},[68,6918,6919],{"class":85},"a,b;\n",[68,6921,6922],{"class":70,"line":320},[68,6923,6924],{"class":74},"    \u002F\u002F调用函数时，实参值传给了形参\n",[68,6926,6927,6929,6931,6934],{"class":70,"line":2915},[68,6928,3154],{"class":85},[68,6930,2778],{"class":102},[68,6932,6933],{"class":587},"add",[68,6935,6936],{"class":85},"(a,b);\n",[68,6938,6939],{"class":70,"line":2921},[68,6940,118],{"class":85},[14,6942,6944],{"id":6943},"_23值传递","2.3值传递",[19,6946,6947],{},"值传递就是函数调用时实参将数值传给形参",[19,6949,6950],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6952,6953],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[58,6955,6957],{"className":1740,"code":6956,"language":1742,"meta":63,"style":63},"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",[65,6958,6959,6981,6985,6998,7015,7033,7044,7053,7062,7075,7091,7107,7116,7120,7128,7132,7144,7156,7163],{"__ignoreMap":63},[68,6960,6961,6964,6967,6969,6971,6973,6975,6977,6979],{"class":70,"line":71},[68,6962,6963],{"class":102},"void",[68,6965,6966],{"class":587}," swap",[68,6968,997],{"class":85},[68,6970,1754],{"class":102},[68,6972,6816],{"class":6815},[68,6974,2114],{"class":85},[68,6976,1754],{"class":102},[68,6978,6823],{"class":6815},[68,6980,1757],{"class":85},[68,6982,6983],{"class":70,"line":78},[68,6984,3149],{"class":85},[68,6986,6987,6989,6991,6994,6996],{"class":70,"line":89},[68,6988,3154],{"class":85},[68,6990,2778],{"class":102},[68,6992,6993],{"class":872},"\"交换前：\"",[68,6995,2778],{"class":102},[68,6997,2800],{"class":85},[68,6999,7000,7002,7004,7007,7009,7011,7013],{"class":70,"line":115},[68,7001,3154],{"class":85},[68,7003,2778],{"class":102},[68,7005,7006],{"class":872},"\"num1=\"",[68,7008,2778],{"class":102},[68,7010,6841],{"class":85},[68,7012,2778],{"class":102},[68,7014,2800],{"class":85},[68,7016,7017,7019,7021,7024,7026,7029,7031],{"class":70,"line":280},[68,7018,3154],{"class":85},[68,7020,2778],{"class":102},[68,7022,7023],{"class":872},"\"num2=\"",[68,7025,2778],{"class":102},[68,7027,7028],{"class":85},"num2",[68,7030,2778],{"class":102},[68,7032,2800],{"class":85},[68,7034,7035,7037,7039,7041],{"class":70,"line":301},[68,7036,3586],{"class":102},[68,7038,5854],{"class":85},[68,7040,869],{"class":102},[68,7042,7043],{"class":85},"num1;\n",[68,7045,7046,7049,7051],{"class":70,"line":320},[68,7047,7048],{"class":85},"    num1",[68,7050,869],{"class":102},[68,7052,6846],{"class":85},[68,7054,7055,7058,7060],{"class":70,"line":2915},[68,7056,7057],{"class":85},"    num2",[68,7059,869],{"class":102},[68,7061,5879],{"class":85},[68,7063,7064,7066,7068,7071,7073],{"class":70,"line":2921},[68,7065,3154],{"class":85},[68,7067,2778],{"class":102},[68,7069,7070],{"class":872},"\"交换后：\"",[68,7072,2778],{"class":102},[68,7074,2800],{"class":85},[68,7076,7077,7079,7081,7083,7085,7087,7089],{"class":70,"line":2933},[68,7078,3154],{"class":85},[68,7080,2778],{"class":102},[68,7082,7006],{"class":872},[68,7084,2778],{"class":102},[68,7086,6841],{"class":85},[68,7088,2778],{"class":102},[68,7090,2800],{"class":85},[68,7092,7093,7095,7097,7099,7101,7103,7105],{"class":70,"line":3214},[68,7094,3154],{"class":85},[68,7096,2778],{"class":102},[68,7098,7023],{"class":872},[68,7100,2778],{"class":102},[68,7102,7028],{"class":85},[68,7104,2778],{"class":102},[68,7106,2800],{"class":85},[68,7108,7109,7111,7113],{"class":70,"line":3219},[68,7110,5689],{"class":102},[68,7112,1804],{"class":85},[68,7114,7115],{"class":74},"\u002F\u002F或者不写\n",[68,7117,7118],{"class":70,"line":3225},[68,7119,118],{"class":85},[68,7121,7122,7124,7126],{"class":70,"line":3230},[68,7123,1754],{"class":102},[68,7125,3574],{"class":587},[68,7127,3577],{"class":85},[68,7129,7130],{"class":70,"line":3244},[68,7131,3149],{"class":85},[68,7133,7134,7136,7138,7140,7142],{"class":70,"line":3249},[68,7135,3586],{"class":102},[68,7137,3002],{"class":85},[68,7139,869],{"class":102},[68,7141,2182],{"class":92},[68,7143,112],{"class":85},[68,7145,7146,7148,7150,7152,7154],{"class":70,"line":3255},[68,7147,3586],{"class":102},[68,7149,4432],{"class":85},[68,7151,869],{"class":102},[68,7153,2436],{"class":92},[68,7155,112],{"class":85},[68,7157,7158,7161],{"class":70,"line":3276},[68,7159,7160],{"class":587},"    swap",[68,7162,6936],{"class":85},[68,7164,7165],{"class":70,"line":3281},[68,7166,118],{"class":85},[14,7168,7170],{"id":7169},"_24函数的常见形式","2.4函数的常见形式",[48,7172,7173],{},[51,7174,7175],{},"无参无返",[58,7177,7179],{"className":1740,"code":7178,"language":1742,"meta":63,"style":63},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[65,7180,7181,7190,7194,7207,7211,7219,7223,7228,7236],{"__ignoreMap":63},[68,7182,7183,7185,7188],{"class":70,"line":71},[68,7184,6963],{"class":102},[68,7186,7187],{"class":587}," test01",[68,7189,3577],{"class":85},[68,7191,7192],{"class":70,"line":78},[68,7193,3149],{"class":85},[68,7195,7196,7198,7200,7203,7205],{"class":70,"line":89},[68,7197,3154],{"class":85},[68,7199,2778],{"class":102},[68,7201,7202],{"class":872},"\"你好\"",[68,7204,2778],{"class":102},[68,7206,2800],{"class":85},[68,7208,7209],{"class":70,"line":115},[68,7210,118],{"class":85},[68,7212,7213,7215,7217],{"class":70,"line":280},[68,7214,1754],{"class":102},[68,7216,3574],{"class":587},[68,7218,3577],{"class":85},[68,7220,7221],{"class":70,"line":301},[68,7222,3149],{"class":85},[68,7224,7225],{"class":70,"line":320},[68,7226,7227],{"class":74},"    \u002F\u002F函数调用\n",[68,7229,7230,7233],{"class":70,"line":2915},[68,7231,7232],{"class":587},"    test01",[68,7234,7235],{"class":85},"();\n",[68,7237,7238],{"class":70,"line":2921},[68,7239,118],{"class":85},[48,7241,7242],{"start":78},[51,7243,7244],{},"有参无返",[58,7246,7248],{"className":1740,"code":7247,"language":1742,"meta":63,"style":63},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[65,7249,7250,7265,7269,7281,7285,7293,7297,7308],{"__ignoreMap":63},[68,7251,7252,7254,7257,7259,7261,7263],{"class":70,"line":71},[68,7253,6963],{"class":102},[68,7255,7256],{"class":587}," test02",[68,7258,997],{"class":85},[68,7260,1754],{"class":102},[68,7262,3002],{"class":6815},[68,7264,1757],{"class":85},[68,7266,7267],{"class":70,"line":78},[68,7268,3149],{"class":85},[68,7270,7271,7273,7275,7277,7279],{"class":70,"line":89},[68,7272,3154],{"class":85},[68,7274,2778],{"class":102},[68,7276,7202],{"class":872},[68,7278,2778],{"class":102},[68,7280,2800],{"class":85},[68,7282,7283],{"class":70,"line":115},[68,7284,118],{"class":85},[68,7286,7287,7289,7291],{"class":70,"line":280},[68,7288,1754],{"class":102},[68,7290,3574],{"class":587},[68,7292,3577],{"class":85},[68,7294,7295],{"class":70,"line":301},[68,7296,3149],{"class":85},[68,7298,7299,7302,7304,7306],{"class":70,"line":320},[68,7300,7301],{"class":587},"    test02",[68,7303,997],{"class":85},[68,7305,2047],{"class":92},[68,7307,1016],{"class":85},[68,7309,7310],{"class":70,"line":2915},[68,7311,118],{"class":85},[48,7313,7314],{"start":89},[51,7315,7316],{},"无参有返",[58,7318,7320],{"className":1740,"code":7319,"language":1742,"meta":63,"style":63},"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",[65,7321,7322,7331,7335,7347,7356,7360,7368,7372,7385,7404],{"__ignoreMap":63},[68,7323,7324,7326,7329],{"class":70,"line":71},[68,7325,1754],{"class":102},[68,7327,7328],{"class":587}," test03",[68,7330,3577],{"class":85},[68,7332,7333],{"class":70,"line":78},[68,7334,3149],{"class":85},[68,7336,7337,7339,7341,7343,7345],{"class":70,"line":89},[68,7338,3154],{"class":85},[68,7340,2778],{"class":102},[68,7342,7202],{"class":872},[68,7344,2778],{"class":102},[68,7346,2800],{"class":85},[68,7348,7349,7351,7354],{"class":70,"line":115},[68,7350,5689],{"class":102},[68,7352,7353],{"class":92}," 100",[68,7355,112],{"class":85},[68,7357,7358],{"class":70,"line":280},[68,7359,118],{"class":85},[68,7361,7362,7364,7366],{"class":70,"line":301},[68,7363,1754],{"class":102},[68,7365,3574],{"class":587},[68,7367,3577],{"class":85},[68,7369,7370],{"class":70,"line":320},[68,7371,3149],{"class":85},[68,7373,7374,7376,7378,7380,7383],{"class":70,"line":2915},[68,7375,3586],{"class":102},[68,7377,6816],{"class":85},[68,7379,869],{"class":102},[68,7381,7382],{"class":587},"test03",[68,7384,7235],{"class":85},[68,7386,7387,7389,7391,7393,7395,7397,7399,7401],{"class":70,"line":2921},[68,7388,3154],{"class":85},[68,7390,2778],{"class":102},[68,7392,7006],{"class":872},[68,7394,2778],{"class":102},[68,7396,6841],{"class":85},[68,7398,2778],{"class":102},[68,7400,2843],{"class":85},[68,7402,7403],{"class":74}," \u002F\u002F100\n",[68,7405,7406],{"class":70,"line":2933},[68,7407,118],{"class":85},[19,7409,7410],{},"4.有参有返",[58,7412,7414],{"className":1740,"code":7413,"language":1742,"meta":63,"style":63},"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",[65,7415,7416,7431,7435,7448,7454,7458,7467,7471,7483,7497,7512],{"__ignoreMap":63},[68,7417,7418,7420,7423,7425,7427,7429],{"class":70,"line":71},[68,7419,1754],{"class":102},[68,7421,7422],{"class":587}," test04",[68,7424,997],{"class":85},[68,7426,1754],{"class":102},[68,7428,3002],{"class":6815},[68,7430,1757],{"class":85},[68,7432,7433],{"class":70,"line":78},[68,7434,3149],{"class":85},[68,7436,7437,7439,7441,7444,7446],{"class":70,"line":89},[68,7438,3154],{"class":85},[68,7440,2778],{"class":102},[68,7442,7443],{"class":872},"\"hello\"",[68,7445,2778],{"class":102},[68,7447,2800],{"class":85},[68,7449,7450,7452],{"class":70,"line":115},[68,7451,5689],{"class":102},[68,7453,3036],{"class":85},[68,7455,7456],{"class":70,"line":280},[68,7457,118],{"class":85},[68,7459,7460,7462,7465],{"class":70,"line":301},[68,7461,1754],{"class":102},[68,7463,7464],{"class":587}," mian",[68,7466,3577],{"class":85},[68,7468,7469],{"class":70,"line":320},[68,7470,3149],{"class":85},[68,7472,7473,7475,7477,7479,7481],{"class":70,"line":2915},[68,7474,3586],{"class":102},[68,7476,4432],{"class":85},[68,7478,869],{"class":102},[68,7480,99],{"class":92},[68,7482,112],{"class":85},[68,7484,7485,7487,7489,7491,7494],{"class":70,"line":2921},[68,7486,3586],{"class":102},[68,7488,4448],{"class":85},[68,7490,869],{"class":102},[68,7492,7493],{"class":587},"test04",[68,7495,7496],{"class":85},"(b);\n",[68,7498,7499,7501,7503,7505,7507,7509],{"class":70,"line":2933},[68,7500,3154],{"class":85},[68,7502,2778],{"class":102},[68,7504,2024],{"class":85},[68,7506,2778],{"class":102},[68,7508,2843],{"class":85},[68,7510,7511],{"class":74}," \u002F\u002F1\n",[68,7513,7514],{"class":70,"line":3214},[68,7515,118],{"class":85},[14,7517,7519],{"id":7518},"_25函数的声明","2.5函数的声明",[19,7521,7522],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7524,7525,7526],{},"函数的",[1890,7527,7528],{},"声明可以多次，但是函数的定义只能有一次",[58,7530,7532],{"className":1740,"code":7531,"language":1742,"meta":63,"style":63},"\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",[65,7533,7534,7539,7544,7569,7578,7582,7594,7606,7622,7626,7646,7650,7669],{"__ignoreMap":63},[68,7535,7536],{"class":70,"line":71},[68,7537,7538],{"class":74},"\u002F\u002F函数声明\n",[68,7540,7541],{"class":70,"line":78},[68,7542,7543],{"class":74},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[68,7545,7546,7548,7551,7553,7555,7557,7559,7561,7563,7566],{"class":70,"line":89},[68,7547,1754],{"class":102},[68,7549,7550],{"class":587}," max",[68,7552,997],{"class":85},[68,7554,1754],{"class":102},[68,7556,3002],{"class":6815},[68,7558,2114],{"class":85},[68,7560,1754],{"class":102},[68,7562,4432],{"class":6815},[68,7564,7565],{"class":85},");",[68,7567,7568],{"class":74},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[68,7570,7571,7573,7575],{"class":70,"line":115},[68,7572,1754],{"class":102},[68,7574,3574],{"class":587},[68,7576,7577],{"class":85},"() \n",[68,7579,7580],{"class":70,"line":280},[68,7581,3149],{"class":85},[68,7583,7584,7586,7588,7590,7592],{"class":70,"line":301},[68,7585,3586],{"class":102},[68,7587,3002],{"class":85},[68,7589,869],{"class":102},[68,7591,2182],{"class":92},[68,7593,112],{"class":85},[68,7595,7596,7598,7600,7602,7604],{"class":70,"line":320},[68,7597,3586],{"class":102},[68,7599,4432],{"class":85},[68,7601,869],{"class":102},[68,7603,2436],{"class":92},[68,7605,112],{"class":85},[68,7607,7608,7610,7612,7615,7618,7620],{"class":70,"line":2915},[68,7609,3154],{"class":85},[68,7611,2778],{"class":102},[68,7613,7614],{"class":587},"max",[68,7616,7617],{"class":85},"(a,b)",[68,7619,2778],{"class":102},[68,7621,2800],{"class":85},[68,7623,7624],{"class":70,"line":2921},[68,7625,118],{"class":85},[68,7627,7628,7630,7632,7634,7636,7638,7640,7642,7644],{"class":70,"line":2933},[68,7629,1754],{"class":102},[68,7631,7550],{"class":587},[68,7633,997],{"class":85},[68,7635,1754],{"class":102},[68,7637,3002],{"class":6815},[68,7639,2114],{"class":85},[68,7641,1754],{"class":102},[68,7643,4432],{"class":6815},[68,7645,1757],{"class":85},[68,7647,7648],{"class":70,"line":3214},[68,7649,3149],{"class":85},[68,7651,7652,7654,7656,7658,7660,7662,7664,7666],{"class":70,"line":3219},[68,7653,5689],{"class":102},[68,7655,3002],{"class":85},[68,7657,2695],{"class":102},[68,7659,1999],{"class":85},[68,7661,2721],{"class":102},[68,7663,1974],{"class":85},[68,7665,2595],{"class":102},[68,7667,7668],{"class":85},"b;\n",[68,7670,7671],{"class":70,"line":3225},[68,7672,118],{"class":85},[14,7674,7676],{"id":7675},"_26函数的分文件编写","2.6函数的分文件编写",[19,7678,7679],{},"4个步骤：",[168,7681,7682,7685,7688,7691],{},[51,7683,7684],{},"1.创建后缀名为.h的头文件",[51,7686,7687],{},"2.创建后缀名为.cpp的源文件",[51,7689,7690],{},"3.在头文件中写函数的定义",[51,7692,7693],{},"4.在源文件中写函数的定义\n示例：",[19,7695,7696],{},"头文件：swap.h",[58,7698,7700],{"className":1740,"code":7699,"language":1742,"meta":63,"style":63},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[65,7701,7702,7708,7718,7722],{"__ignoreMap":63},[68,7703,7704,7706],{"class":70,"line":71},[68,7705,3551],{"class":102},[68,7707,3554],{"class":872},[68,7709,7710,7712,7714,7716],{"class":70,"line":78},[68,7711,3559],{"class":102},[68,7713,3562],{"class":102},[68,7715,3565],{"class":587},[68,7717,112],{"class":85},[68,7719,7720],{"class":70,"line":89},[68,7721,7538],{"class":74},[68,7723,7724,7726,7728,7730,7732,7734,7736,7738,7740],{"class":70,"line":115},[68,7725,6963],{"class":102},[68,7727,6966],{"class":587},[68,7729,997],{"class":85},[68,7731,1754],{"class":102},[68,7733,3002],{"class":6815},[68,7735,2114],{"class":85},[68,7737,1754],{"class":102},[68,7739,4432],{"class":6815},[68,7741,1016],{"class":85},[19,7743,7744],{},"源文件：swap.cpp",[58,7746,7748],{"className":1740,"code":7747,"language":1742,"meta":63,"style":63},"#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",[65,7749,7750,7757,7762,7782,7786,7797,7806,7815,7832,7849],{"__ignoreMap":63},[68,7751,7752,7754],{"class":70,"line":71},[68,7753,3551],{"class":102},[68,7755,7756],{"class":872}," \"swap.h\"\n",[68,7758,7759],{"class":70,"line":78},[68,7760,7761],{"class":74},"\u002F\u002F函数的定义\n",[68,7763,7764,7766,7768,7770,7772,7774,7776,7778,7780],{"class":70,"line":89},[68,7765,6963],{"class":102},[68,7767,6966],{"class":587},[68,7769,997],{"class":85},[68,7771,1754],{"class":102},[68,7773,3002],{"class":6815},[68,7775,2114],{"class":85},[68,7777,1754],{"class":102},[68,7779,4432],{"class":6815},[68,7781,1757],{"class":85},[68,7783,7784],{"class":70,"line":115},[68,7785,3149],{"class":85},[68,7787,7788,7790,7792,7794],{"class":70,"line":280},[68,7789,3586],{"class":102},[68,7791,5854],{"class":85},[68,7793,869],{"class":102},[68,7795,7796],{"class":85},"a;\n",[68,7798,7799,7802,7804],{"class":70,"line":301},[68,7800,7801],{"class":85},"    a",[68,7803,869],{"class":102},[68,7805,7668],{"class":85},[68,7807,7808,7811,7813],{"class":70,"line":320},[68,7809,7810],{"class":85},"    b",[68,7812,869],{"class":102},[68,7814,5879],{"class":85},[68,7816,7817,7819,7821,7824,7826,7828,7830],{"class":70,"line":2915},[68,7818,3154],{"class":85},[68,7820,2778],{"class":102},[68,7822,7823],{"class":872},"\"a=\"",[68,7825,2778],{"class":102},[68,7827,1974],{"class":85},[68,7829,2778],{"class":102},[68,7831,2800],{"class":85},[68,7833,7834,7836,7838,7841,7843,7845,7847],{"class":70,"line":2921},[68,7835,3154],{"class":85},[68,7837,2778],{"class":102},[68,7839,7840],{"class":872},"\"b=\"",[68,7842,2778],{"class":102},[68,7844,1999],{"class":85},[68,7846,2778],{"class":102},[68,7848,2800],{"class":85},[68,7850,7851],{"class":70,"line":2933},[68,7852,118],{"class":85},[1652,7854,7855],{},"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":63,"searchDepth":78,"depth":78,"links":7857},[7858,7859,7860,7861,7862,7863],{"id":6771,"depth":78,"text":6772},{"id":6860,"depth":78,"text":6861},{"id":6943,"depth":78,"text":6944},{"id":7169,"depth":78,"text":7170},{"id":7518,"depth":78,"text":7519},{"id":7675,"depth":78,"text":7676},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6763,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7870,"title":7871,"body":7872,"description":7879,"extension":1677,"meta":9284,"navigation":1679,"path":9285,"seo":9286,"stem":9287,"__hash__":9288},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7873,"toc":9274},[7874,7877,7880,7884,8046,8050,8053,8056,8059,8062,8202,8206,8209,8212,8215,8280,8284,8289,8356,8359,8363,8366,8377,8382,8402,8405,8410,8429,8432,8436,8455,8458,8462,8697,8701,8704,8707,8710,8872,8875,8879,8882,8888,9271],[10,7875,7871],{"id":7876},"_3指针",[19,7878,7879],{},"通过指针保存一个地址，指针就是个地址",[14,7881,7883],{"id":7882},"_31定义指针","3.1定义指针",[58,7885,7887],{"className":1740,"code":7886,"language":1742,"meta":63,"style":63},"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",[65,7888,7889,7897,7901,7906,7918,7923,7931,7941,7959,7979,7983,7988,7993,7998,8012,8028,8042],{"__ignoreMap":63},[68,7890,7891,7893,7895],{"class":70,"line":71},[68,7892,1754],{"class":102},[68,7894,3574],{"class":587},[68,7896,3577],{"class":85},[68,7898,7899],{"class":70,"line":78},[68,7900,3149],{"class":85},[68,7902,7903],{"class":70,"line":89},[68,7904,7905],{"class":74},"    \u002F\u002F1.定义指针\n",[68,7907,7908,7910,7912,7914,7916],{"class":70,"line":115},[68,7909,3586],{"class":102},[68,7911,3002],{"class":85},[68,7913,869],{"class":102},[68,7915,2182],{"class":92},[68,7917,112],{"class":85},[68,7919,7920],{"class":70,"line":280},[68,7921,7922],{"class":74},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[68,7924,7925,7928],{"class":70,"line":301},[68,7926,7927],{"class":102},"    int*",[68,7929,7930],{"class":85},"p;\n",[68,7932,7933,7936,7939],{"class":70,"line":320},[68,7934,7935],{"class":85},"    p",[68,7937,7938],{"class":102},"=&",[68,7940,7796],{"class":85},[68,7942,7943,7945,7947,7950,7953,7955,7957],{"class":70,"line":2915},[68,7944,3154],{"class":85},[68,7946,2778],{"class":102},[68,7948,7949],{"class":872},"\"a的地址为：\"",[68,7951,7952],{"class":102},"\u003C\u003C&",[68,7954,1974],{"class":85},[68,7956,2778],{"class":102},[68,7958,2800],{"class":85},[68,7960,7961,7963,7965,7968,7970,7972,7974,7976],{"class":70,"line":2921},[68,7962,3154],{"class":85},[68,7964,2778],{"class":102},[68,7966,7967],{"class":872},"\"指针p为：\"",[68,7969,2778],{"class":102},[68,7971,19],{"class":85},[68,7973,2778],{"class":102},[68,7975,2843],{"class":85},[68,7977,7978],{"class":74},"\u002F\u002F指针p表示的就是a的地址\n",[68,7980,7981],{"class":70,"line":2933},[68,7982,4000],{"emptyLinePlaceholder":1679},[68,7984,7985],{"class":70,"line":3214},[68,7986,7987],{"class":74},"    \u002F\u002F2.使用指针\n",[68,7989,7990],{"class":70,"line":3219},[68,7991,7992],{"class":74},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[68,7994,7995],{"class":70,"line":3225},[68,7996,7997],{"class":74},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[68,7999,8000,8003,8005,8007,8010],{"class":70,"line":3230},[68,8001,8002],{"class":102},"    *",[68,8004,19],{"class":85},[68,8006,869],{"class":102},[68,8008,8009],{"class":92},"1000",[68,8011,112],{"class":85},[68,8013,8014,8016,8019,8021,8023,8025],{"class":70,"line":3244},[68,8015,3154],{"class":85},[68,8017,8018],{"class":102},"\u003C\u003C*",[68,8020,19],{"class":85},[68,8022,2778],{"class":102},[68,8024,2843],{"class":85},[68,8026,8027],{"class":74},"\u002F\u002F1000\n",[68,8029,8030,8032,8034,8036,8038,8040],{"class":70,"line":3249},[68,8031,3154],{"class":85},[68,8033,2778],{"class":102},[68,8035,1974],{"class":85},[68,8037,2778],{"class":102},[68,8039,2843],{"class":85},[68,8041,8027],{"class":74},[68,8043,8044],{"class":70,"line":3255},[68,8045,118],{"class":85},[14,8047,8049],{"id":8048},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8051,8052],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8054,8055],{},"在32位操作系统下：占用4个字节空间",[19,8057,8058],{},"在64位操作系统下：占用8个字节空间",[19,8060,8061],{},"上方是不管啥数据类型的",[58,8063,8065],{"className":1740,"code":8064,"language":1742,"meta":63,"style":63},"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",[65,8066,8067,8075,8079,8084,8096,8101,8106,8111,8124,8146,8172,8198],{"__ignoreMap":63},[68,8068,8069,8071,8073],{"class":70,"line":71},[68,8070,1754],{"class":102},[68,8072,3574],{"class":587},[68,8074,3577],{"class":85},[68,8076,8077],{"class":70,"line":78},[68,8078,3149],{"class":85},[68,8080,8081],{"class":70,"line":89},[68,8082,8083],{"class":74},"    \u002F\u002F指针所占内存空间\n",[68,8085,8086,8088,8090,8092,8094],{"class":70,"line":115},[68,8087,3586],{"class":102},[68,8089,3002],{"class":85},[68,8091,869],{"class":102},[68,8093,2182],{"class":92},[68,8095,112],{"class":85},[68,8097,8098],{"class":70,"line":280},[68,8099,8100],{"class":74},"    \u002F\u002Fint *p;\n",[68,8102,8103],{"class":70,"line":301},[68,8104,8105],{"class":74},"    \u002F\u002Fp=&a;\n",[68,8107,8108],{"class":70,"line":320},[68,8109,8110],{"class":74},"    \u002F\u002F上述可以写为以下：\n",[68,8112,8113,8115,8118,8120,8122],{"class":70,"line":2915},[68,8114,3586],{"class":102},[68,8116,8117],{"class":102}," *",[68,8119,19],{"class":85},[68,8121,7938],{"class":102},[68,8123,7796],{"class":85},[68,8125,8126,8129,8131,8134,8136,8139,8141,8143],{"class":70,"line":2921},[68,8127,8128],{"class":85},"    cout ",[68,8130,2778],{"class":102},[68,8132,8133],{"class":872},"\"sizeof(int *)\"",[68,8135,2976],{"class":102},[68,8137,8138],{"class":85},"(p)",[68,8140,2778],{"class":102},[68,8142,2843],{"class":85},[68,8144,8145],{"class":74},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[68,8147,8148,8150,8152,8154,8156,8158,8160,8162,8164,8166,8169],{"class":70,"line":2933},[68,8149,8128],{"class":85},[68,8151,2778],{"class":102},[68,8153,8133],{"class":872},[68,8155,2976],{"class":102},[68,8157,997],{"class":85},[68,8159,1754],{"class":102},[68,8161,8117],{"class":102},[68,8163,2165],{"class":85},[68,8165,2778],{"class":102},[68,8167,8168],{"class":85},"endl",[68,8170,8171],{"class":74},"  \u002F\u002F4字节(32位的话)\n",[68,8173,8174,8176,8178,8181,8183,8185,8187,8189,8191,8193,8195],{"class":70,"line":3214},[68,8175,8128],{"class":85},[68,8177,2778],{"class":102},[68,8179,8180],{"class":872},"\"sizeof(char *)\"",[68,8182,2976],{"class":102},[68,8184,997],{"class":85},[68,8186,1842],{"class":102},[68,8188,8117],{"class":102},[68,8190,2165],{"class":85},[68,8192,2778],{"class":102},[68,8194,2843],{"class":85},[68,8196,8197],{"class":74}," \u002F\u002F4字节(32位的话)\n",[68,8199,8200],{"class":70,"line":3219},[68,8201,118],{"class":85},[14,8203,8205],{"id":8204},"_33空指针","3.3空指针",[19,8207,8208],{},"空指针：指针变量指向内存中编号为0的空间",[19,8210,8211],{},"用途：初始化指针变量",[19,8213,8214],{},"注意：空指针指向的内存是不可以访问的",[58,8216,8218],{"className":1740,"code":8217,"language":1742,"meta":63,"style":63},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[65,8219,8220,8228,8232,8237,8251,8256,8271,8276],{"__ignoreMap":63},[68,8221,8222,8224,8226],{"class":70,"line":71},[68,8223,1754],{"class":102},[68,8225,3574],{"class":587},[68,8227,3577],{"class":85},[68,8229,8230],{"class":70,"line":78},[68,8231,3149],{"class":85},[68,8233,8234],{"class":70,"line":89},[68,8235,8236],{"class":74},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[68,8238,8239,8241,8243,8245,8247,8249],{"class":70,"line":115},[68,8240,3586],{"class":102},[68,8242,8117],{"class":102},[68,8244,19],{"class":85},[68,8246,869],{"class":102},[68,8248,3992],{"class":92},[68,8250,112],{"class":85},[68,8252,8253],{"class":70,"line":280},[68,8254,8255],{"class":74},"    \u002F\u002F2.空指针不能进行访问\n",[68,8257,8258,8260,8262,8264,8266,8268],{"class":70,"line":301},[68,8259,8002],{"class":102},[68,8261,19],{"class":85},[68,8263,869],{"class":102},[68,8265,2047],{"class":92},[68,8267,1804],{"class":85},[68,8269,8270],{"class":74},"\u002F\u002F直接报错，压根不能访问\n",[68,8272,8273],{"class":70,"line":320},[68,8274,8275],{"class":74},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[68,8277,8278],{"class":70,"line":2915},[68,8279,118],{"class":85},[14,8281,8283],{"id":8282},"_34野指针","3.4野指针",[19,8285,8286],{},[1890,8287,8288],{},"指针变量指向非法的内存空间",[58,8290,8292],{"className":1740,"code":8291,"language":1742,"meta":63,"style":63},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[65,8293,8294,8302,8306,8335,8340,8352],{"__ignoreMap":63},[68,8295,8296,8298,8300],{"class":70,"line":71},[68,8297,1754],{"class":102},[68,8299,3574],{"class":587},[68,8301,3577],{"class":85},[68,8303,8304],{"class":70,"line":78},[68,8305,3149],{"class":85},[68,8307,8308,8310,8312,8314,8316,8318,8320,8322,8324,8327,8330,8332],{"class":70,"line":89},[68,8309,3586],{"class":102},[68,8311,8117],{"class":102},[68,8313,19],{"class":85},[68,8315,869],{"class":102},[68,8317,997],{"class":85},[68,8319,1754],{"class":102},[68,8321,8117],{"class":102},[68,8323,2165],{"class":85},[68,8325,8326],{"class":102},"0x",[68,8328,8329],{"class":92},"1100",[68,8331,1804],{"class":85},[68,8333,8334],{"class":74}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[68,8336,8337],{"class":70,"line":115},[68,8338,8339],{"class":74},"    \u002F\u002F访问野指针报错\n",[68,8341,8342,8344,8346,8348,8350],{"class":70,"line":280},[68,8343,3154],{"class":85},[68,8345,8018],{"class":102},[68,8347,19],{"class":85},[68,8349,2778],{"class":102},[68,8351,2800],{"class":85},[68,8353,8354],{"class":70,"line":301},[68,8355,118],{"class":85},[19,8357,8358],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8360,8362],{"id":8361},"_35const修饰指针","3.5const修饰指针",[19,8364,8365],{},"三种情况：",[168,8367,8368,8371,8374],{},[51,8369,8370],{},"const修饰指针 常量指针",[51,8372,8373],{},"const修饰常量 指针常量",[51,8375,8376],{},"const即修饰指针，又修饰常量",[48,8378,8379],{},[51,8380,8381],{},"常量指针",[58,8383,8385],{"className":1740,"code":8384,"language":1742,"meta":63,"style":63},"const int *p=&a;\n",[65,8386,8387],{"__ignoreMap":63},[68,8388,8389,8392,8394,8396,8398,8400],{"class":70,"line":71},[68,8390,8391],{"class":102},"const",[68,8393,3982],{"class":102},[68,8395,8117],{"class":102},[68,8397,19],{"class":85},[68,8399,7938],{"class":102},[68,8401,7796],{"class":85},[19,8403,8404],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[48,8406,8407],{"start":78},[51,8408,8409],{},"指针常量",[58,8411,8413],{"className":1740,"code":8412,"language":1742,"meta":63,"style":63},"int *const p=&a;\n",[65,8414,8415],{"__ignoreMap":63},[68,8416,8417,8419,8422,8425,8427],{"class":70,"line":71},[68,8418,1754],{"class":102},[68,8420,8421],{"class":102}," *const",[68,8423,8424],{"class":85}," p",[68,8426,7938],{"class":102},[68,8428,7796],{"class":85},[19,8430,8431],{},"指针的指向不可以改，指针指向的值可以改",[48,8433,8434],{"start":89},[51,8435,8376],{},[58,8437,8439],{"className":1740,"code":8438,"language":1742,"meta":63,"style":63},"const int *const p=&a;\n",[65,8440,8441],{"__ignoreMap":63},[68,8442,8443,8445,8447,8449,8451,8453],{"class":70,"line":71},[68,8444,8391],{"class":102},[68,8446,3982],{"class":102},[68,8448,8421],{"class":102},[68,8450,8424],{"class":85},[68,8452,7938],{"class":102},[68,8454,7796],{"class":85},[19,8456,8457],{},"指针的指向和指针指向的值都不可以改变",[14,8459,8461],{"id":8460},"_36指针和数组","3.6指针和数组",[58,8463,8465],{"className":1740,"code":8464,"language":1742,"meta":63,"style":63},"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",[65,8466,8467,8475,8479,8484,8538,8559,8575,8591,8602,8619,8624,8638,8664,8668,8680,8689,8693],{"__ignoreMap":63},[68,8468,8469,8471,8473],{"class":70,"line":71},[68,8470,1754],{"class":102},[68,8472,3574],{"class":587},[68,8474,3577],{"class":85},[68,8476,8477],{"class":70,"line":78},[68,8478,3149],{"class":85},[68,8480,8481],{"class":70,"line":89},[68,8482,8483],{"class":74},"    \u002F\u002F利用指针访问数组中的元素\n",[68,8485,8486,8488,8490,8492,8494,8496,8498,8500,8502,8504,8506,8508,8510,8512,8514,8516,8518,8520,8522,8524,8526,8528,8530,8532,8534,8536],{"class":70,"line":115},[68,8487,3586],{"class":102},[68,8489,5561],{"class":85},[68,8491,2182],{"class":92},[68,8493,2675],{"class":85},[68,8495,869],{"class":102},[68,8497,2632],{"class":85},[68,8499,99],{"class":92},[68,8501,2114],{"class":85},[68,8503,267],{"class":92},[68,8505,2114],{"class":85},[68,8507,288],{"class":92},[68,8509,2114],{"class":85},[68,8511,2029],{"class":92},[68,8513,2114],{"class":85},[68,8515,2055],{"class":92},[68,8517,2114],{"class":85},[68,8519,2080],{"class":92},[68,8521,2114],{"class":85},[68,8523,2105],{"class":92},[68,8525,2114],{"class":85},[68,8527,2131],{"class":92},[68,8529,2114],{"class":85},[68,8531,2156],{"class":92},[68,8533,2114],{"class":85},[68,8535,2182],{"class":92},[68,8537,5594],{"class":85},[68,8539,8540,8542,8544,8547,8549,8551,8553,8555,8557],{"class":70,"line":280},[68,8541,3154],{"class":85},[68,8543,2778],{"class":102},[68,8545,8546],{"class":872},"\"数组的第一个元素为：\"",[68,8548,2778],{"class":102},[68,8550,5505],{"class":85},[68,8552,600],{"class":92},[68,8554,2675],{"class":85},[68,8556,2778],{"class":102},[68,8558,2800],{"class":85},[68,8560,8561,8563,8565,8567,8569,8572],{"class":70,"line":301},[68,8562,3586],{"class":102},[68,8564,8117],{"class":102},[68,8566,19],{"class":85},[68,8568,869],{"class":102},[68,8570,8571],{"class":85},"arr;",[68,8573,8574],{"class":74},"\u002F\u002F注意数才要加取地址符号&\n",[68,8576,8577,8579,8581,8583,8585,8587,8589],{"class":70,"line":320},[68,8578,3154],{"class":85},[68,8580,2778],{"class":102},[68,8582,8546],{"class":872},[68,8584,8018],{"class":102},[68,8586,19],{"class":85},[68,8588,2778],{"class":102},[68,8590,2800],{"class":85},[68,8592,8593,8595,8597,8599],{"class":70,"line":2915},[68,8594,7935],{"class":85},[68,8596,3892],{"class":102},[68,8598,1804],{"class":85},[68,8600,8601],{"class":74}," \u002F\u002F让指针向后偏移4个字节\n",[68,8603,8604,8606,8608,8611,8613,8615,8617],{"class":70,"line":2921},[68,8605,3154],{"class":85},[68,8607,2778],{"class":102},[68,8609,8610],{"class":872},"\"数组的第二个元素为：\"",[68,8612,8018],{"class":102},[68,8614,19],{"class":85},[68,8616,2778],{"class":102},[68,8618,2800],{"class":85},[68,8620,8621],{"class":70,"line":2933},[68,8622,8623],{"class":74},"    \u002F\u002F利用指针遍历数组\n",[68,8625,8626,8628,8630,8633,8635],{"class":70,"line":3214},[68,8627,3586],{"class":102},[68,8629,8117],{"class":102},[68,8631,8632],{"class":85},"p2",[68,8634,869],{"class":102},[68,8636,8637],{"class":85},"arr;\n",[68,8639,8640,8642,8644,8646,8648,8650,8652,8654,8656,8658,8660,8662],{"class":70,"line":3219},[68,8641,4800],{"class":102},[68,8643,3260],{"class":85},[68,8645,1754],{"class":102},[68,8647,4631],{"class":85},[68,8649,869],{"class":102},[68,8651,600],{"class":92},[68,8653,4638],{"class":85},[68,8655,861],{"class":102},[68,8657,2182],{"class":92},[68,8659,4638],{"class":85},[68,8661,3892],{"class":102},[68,8663,1757],{"class":85},[68,8665,8666],{"class":70,"line":3225},[68,8667,3631],{"class":85},[68,8669,8670,8672,8674,8676,8678],{"class":70,"line":3230},[68,8671,5050],{"class":85},[68,8673,8018],{"class":102},[68,8675,8632],{"class":85},[68,8677,2778],{"class":102},[68,8679,2800],{"class":85},[68,8681,8682,8685,8687],{"class":70,"line":3244},[68,8683,8684],{"class":85},"        p2",[68,8686,3892],{"class":102},[68,8688,112],{"class":85},[68,8690,8691],{"class":70,"line":3249},[68,8692,3787],{"class":85},[68,8694,8695],{"class":70,"line":3255},[68,8696,118],{"class":85},[14,8698,8700],{"id":8699},"_37指针和函数","3.7指针和函数",[19,8702,8703],{},"利用指针做函数参数，可以修改实参的值",[19,8705,8706],{},"值传递：只改变形参，不改变实参",[19,8708,8709],{},"地址传递：",[58,8711,8713],{"className":1740,"code":8712,"language":1742,"meta":63,"style":63},"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",[65,8714,8715,8740,8744,8756,8767,8777,8781,8789,8793,8805,8817,8822,8838,8853,8868],{"__ignoreMap":63},[68,8716,8717,8719,8721,8723,8725,8727,8730,8732,8734,8736,8738],{"class":70,"line":71},[68,8718,6963],{"class":102},[68,8720,6966],{"class":587},[68,8722,997],{"class":85},[68,8724,1754],{"class":102},[68,8726,8117],{"class":102},[68,8728,8729],{"class":6815},"p1",[68,8731,2114],{"class":85},[68,8733,1754],{"class":102},[68,8735,8117],{"class":102},[68,8737,8632],{"class":6815},[68,8739,1757],{"class":85},[68,8741,8742],{"class":70,"line":78},[68,8743,3149],{"class":85},[68,8745,8746,8748,8750,8753],{"class":70,"line":89},[68,8747,3586],{"class":102},[68,8749,5854],{"class":85},[68,8751,8752],{"class":102},"=*",[68,8754,8755],{"class":85},"p1;\n",[68,8757,8758,8760,8762,8764],{"class":70,"line":115},[68,8759,8002],{"class":102},[68,8761,8729],{"class":85},[68,8763,8752],{"class":102},[68,8765,8766],{"class":85},"p2;\n",[68,8768,8769,8771,8773,8775],{"class":70,"line":280},[68,8770,8002],{"class":102},[68,8772,8632],{"class":85},[68,8774,869],{"class":102},[68,8776,5879],{"class":85},[68,8778,8779],{"class":70,"line":301},[68,8780,118],{"class":85},[68,8782,8783,8785,8787],{"class":70,"line":320},[68,8784,1754],{"class":102},[68,8786,3574],{"class":587},[68,8788,3577],{"class":85},[68,8790,8791],{"class":70,"line":2915},[68,8792,3149],{"class":85},[68,8794,8795,8797,8799,8801,8803],{"class":70,"line":2921},[68,8796,3586],{"class":102},[68,8798,3002],{"class":85},[68,8800,869],{"class":102},[68,8802,2182],{"class":92},[68,8804,112],{"class":85},[68,8806,8807,8809,8811,8813,8815],{"class":70,"line":2933},[68,8808,3586],{"class":102},[68,8810,4432],{"class":85},[68,8812,869],{"class":102},[68,8814,2436],{"class":92},[68,8816,112],{"class":85},[68,8818,8819],{"class":70,"line":3214},[68,8820,8821],{"class":74},"    \u002F\u002F地址传递\n",[68,8823,8824,8826,8828,8830,8833,8835],{"class":70,"line":3219},[68,8825,7160],{"class":587},[68,8827,997],{"class":85},[68,8829,2089],{"class":102},[68,8831,8832],{"class":85},"a,",[68,8834,2089],{"class":102},[68,8836,8837],{"class":85},"b);\n",[68,8839,8840,8842,8844,8846,8848,8850],{"class":70,"line":3225},[68,8841,3154],{"class":85},[68,8843,2778],{"class":102},[68,8845,1974],{"class":85},[68,8847,2778],{"class":102},[68,8849,2843],{"class":85},[68,8851,8852],{"class":74},"\u002F\u002F20\n",[68,8854,8855,8857,8859,8861,8863,8865],{"class":70,"line":3230},[68,8856,3154],{"class":85},[68,8858,2778],{"class":102},[68,8860,1999],{"class":85},[68,8862,2778],{"class":102},[68,8864,2843],{"class":85},[68,8866,8867],{"class":74},"\u002F\u002F10\n",[68,8869,8870],{"class":70,"line":3244},[68,8871,118],{"class":85},[19,8873,8874],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8876,8878],{"id":8877},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8880,8881],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8883,8884,8885,8887],{},"例如数组：int arr",[68,8886,2182],{},"={4,3,6,9,1,2,10,8,7,5}",[58,8889,8891],{"className":1740,"code":8890,"language":1742,"meta":63,"style":63},"#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",[65,8892,8893,8899,8909,8933,8937,8968,8972,9006,9010,9028,9032,9043,9058,9073,9077,9081,9085,9089,9093,9101,9105,9110,9164,9176,9188,9193,9201,9205,9210,9235,9239,9254,9263,9267],{"__ignoreMap":63},[68,8894,8895,8897],{"class":70,"line":71},[68,8896,3551],{"class":102},[68,8898,3554],{"class":872},[68,8900,8901,8903,8905,8907],{"class":70,"line":78},[68,8902,3559],{"class":102},[68,8904,3562],{"class":102},[68,8906,3565],{"class":587},[68,8908,112],{"class":85},[68,8910,8911,8913,8916,8918,8920,8922,8924,8926,8928,8931],{"class":70,"line":89},[68,8912,6963],{"class":102},[68,8914,8915],{"class":587}," bubbleSort",[68,8917,997],{"class":85},[68,8919,1754],{"class":102},[68,8921,8117],{"class":102},[68,8923,19],{"class":6815},[68,8925,2114],{"class":85},[68,8927,1754],{"class":102},[68,8929,8930],{"class":6815}," len",[68,8932,1757],{"class":85},[68,8934,8935],{"class":70,"line":115},[68,8936,3149],{"class":85},[68,8938,8939,8941,8943,8945,8947,8949,8951,8953,8955,8958,8960,8962,8964,8966],{"class":70,"line":280},[68,8940,4800],{"class":102},[68,8942,997],{"class":85},[68,8944,1754],{"class":102},[68,8946,4631],{"class":85},[68,8948,869],{"class":102},[68,8950,600],{"class":92},[68,8952,4638],{"class":85},[68,8954,861],{"class":102},[68,8956,8957],{"class":85},"len",[68,8959,2268],{"class":102},[68,8961,99],{"class":92},[68,8963,4638],{"class":85},[68,8965,3892],{"class":102},[68,8967,1757],{"class":85},[68,8969,8970],{"class":70,"line":301},[68,8971,3631],{"class":85},[68,8973,8974,8976,8978,8980,8982,8984,8986,8988,8990,8992,8994,8996,8998,9000,9002,9004],{"class":70,"line":320},[68,8975,5002],{"class":102},[68,8977,997],{"class":85},[68,8979,1754],{"class":102},[68,8981,5009],{"class":85},[68,8983,869],{"class":102},[68,8985,600],{"class":92},[68,8987,5016],{"class":85},[68,8989,861],{"class":102},[68,8991,8957],{"class":85},[68,8993,2268],{"class":102},[68,8995,2177],{"class":85},[68,8997,2268],{"class":102},[68,8999,99],{"class":92},[68,9001,5016],{"class":85},[68,9003,3892],{"class":102},[68,9005,1757],{"class":85},[68,9007,9008],{"class":70,"line":2915},[68,9009,4110],{"class":85},[68,9011,9012,9014,9017,9019,9022,9024,9026],{"class":70,"line":2921},[68,9013,6241],{"class":102},[68,9015,9016],{"class":85},"(p[j]",[68,9018,2695],{"class":102},[68,9020,9021],{"class":85},"p[j",[68,9023,2217],{"class":102},[68,9025,99],{"class":92},[68,9027,6256],{"class":85},[68,9029,9030],{"class":70,"line":2933},[68,9031,6261],{"class":85},[68,9033,9034,9036,9038,9040],{"class":70,"line":3214},[68,9035,6266],{"class":102},[68,9037,5854],{"class":85},[68,9039,869],{"class":102},[68,9041,9042],{"class":85},"p[j];\n",[68,9044,9045,9048,9050,9052,9054,9056],{"class":70,"line":3219},[68,9046,9047],{"class":85},"                p[j]",[68,9049,869],{"class":102},[68,9051,9021],{"class":85},[68,9053,2217],{"class":102},[68,9055,99],{"class":92},[68,9057,6289],{"class":85},[68,9059,9060,9063,9065,9067,9069,9071],{"class":70,"line":3225},[68,9061,9062],{"class":85},"                p[j",[68,9064,2217],{"class":102},[68,9066,99],{"class":92},[68,9068,2675],{"class":85},[68,9070,869],{"class":102},[68,9072,5879],{"class":85},[68,9074,9075],{"class":70,"line":3230},[68,9076,6309],{"class":85},[68,9078,9079],{"class":70,"line":3244},[68,9080,4129],{"class":85},[68,9082,9083],{"class":70,"line":3249},[68,9084,3787],{"class":85},[68,9086,9087],{"class":70,"line":3255},[68,9088,118],{"class":85},[68,9090,9091],{"class":70,"line":3276},[68,9092,4000],{"emptyLinePlaceholder":1679},[68,9094,9095,9097,9099],{"class":70,"line":3281},[68,9096,1754],{"class":102},[68,9098,3574],{"class":587},[68,9100,3577],{"class":85},[68,9102,9103],{"class":70,"line":3295},[68,9104,3149],{"class":85},[68,9106,9107],{"class":70,"line":3300},[68,9108,9109],{"class":74},"    \u002F\u002F 1.创建数组\n",[68,9111,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132,9134,9136,9138,9140,9142,9144,9146,9148,9150,9152,9154,9156,9158,9160,9162],{"class":70,"line":3329},[68,9113,3586],{"class":102},[68,9115,5561],{"class":85},[68,9117,2182],{"class":92},[68,9119,2675],{"class":85},[68,9121,869],{"class":102},[68,9123,2632],{"class":85},[68,9125,2029],{"class":92},[68,9127,2114],{"class":85},[68,9129,288],{"class":92},[68,9131,2114],{"class":85},[68,9133,2080],{"class":92},[68,9135,2114],{"class":85},[68,9137,2156],{"class":92},[68,9139,2114],{"class":85},[68,9141,99],{"class":92},[68,9143,2114],{"class":85},[68,9145,267],{"class":92},[68,9147,2114],{"class":85},[68,9149,2182],{"class":92},[68,9151,2114],{"class":85},[68,9153,2131],{"class":92},[68,9155,2114],{"class":85},[68,9157,2105],{"class":92},[68,9159,2114],{"class":85},[68,9161,2055],{"class":92},[68,9163,5594],{"class":85},[68,9165,9166,9168,9170,9172,9174],{"class":70,"line":3334},[68,9167,3586],{"class":102},[68,9169,8930],{"class":85},[68,9171,869],{"class":102},[68,9173,2182],{"class":92},[68,9175,112],{"class":85},[68,9177,9178,9180,9182,9184,9186],{"class":70,"line":3351},[68,9179,3586],{"class":102},[68,9181,8117],{"class":102},[68,9183,19],{"class":85},[68,9185,869],{"class":102},[68,9187,8637],{"class":85},[68,9189,9190],{"class":70,"line":3356},[68,9191,9192],{"class":74},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[68,9194,9195,9198],{"class":70,"line":3361},[68,9196,9197],{"class":587},"    bubbleSort",[68,9199,9200],{"class":85},"(p,len);\n",[68,9202,9203],{"class":70,"line":3366},[68,9204,4000],{"emptyLinePlaceholder":1679},[68,9206,9207],{"class":70,"line":3380},[68,9208,9209],{"class":74},"    \u002F\u002F 3.打印排序后的数组\n",[68,9211,9212,9214,9216,9218,9220,9222,9224,9226,9228,9231,9233],{"class":70,"line":3385},[68,9213,4800],{"class":102},[68,9215,3260],{"class":85},[68,9217,1754],{"class":102},[68,9219,4631],{"class":85},[68,9221,869],{"class":102},[68,9223,600],{"class":92},[68,9225,4813],{"class":85},[68,9227,861],{"class":102},[68,9229,9230],{"class":85},"len; i",[68,9232,3892],{"class":102},[68,9234,1757],{"class":85},[68,9236,9237],{"class":70,"line":4177},[68,9238,3631],{"class":85},[68,9240,9241,9243,9245,9247,9249,9252],{"class":70,"line":4191},[68,9242,5050],{"class":85},[68,9244,8018],{"class":102},[68,9246,19],{"class":85},[68,9248,2778],{"class":102},[68,9250,9251],{"class":872},"\"\"",[68,9253,112],{"class":85},[68,9255,9256,9259,9261],{"class":70,"line":4199},[68,9257,9258],{"class":85},"        p",[68,9260,3892],{"class":102},[68,9262,112],{"class":85},[68,9264,9265],{"class":70,"line":4204},[68,9266,3787],{"class":85},[68,9268,9269],{"class":70,"line":4210},[68,9270,118],{"class":85},[1652,9272,9273],{},"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":63,"searchDepth":78,"depth":78,"links":9275},[9276,9277,9278,9279,9280,9281,9282,9283],{"id":7882,"depth":78,"text":7883},{"id":8048,"depth":78,"text":8049},{"id":8204,"depth":78,"text":8205},{"id":8282,"depth":78,"text":8283},{"id":8361,"depth":78,"text":8362},{"id":8460,"depth":78,"text":8461},{"id":8699,"depth":78,"text":8700},{"id":8877,"depth":78,"text":8878},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7871,"description":7879},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9290,"title":9291,"body":9292,"description":9299,"extension":1677,"meta":12272,"navigation":1679,"path":12273,"seo":12274,"stem":12275,"__hash__":12276},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9293,"toc":12263},[9294,9297,9300,9304,9307,9310,9321,9659,9662,9666,9669,9676,9931,9935,9938,9941,10096,10100,10103,10106,10312,10316,10319,10622,10624,10632,10636,10639,10790,10792,10803,10860,10864,10869,11526,11534,11537,11631,11634,12254,12260],[10,9295,9291],{"id":9296},"_4结构体",[19,9298,9299],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9301,9303],{"id":9302},"_41结构体定义与使用","4.1结构体定义与使用",[19,9305,9306],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9308,9309],{},"通过结构体创建变量的方式：",[168,9311,9312,9315,9318],{},[51,9313,9314],{},"struct 结构体名 变量名",[51,9316,9317],{},"struct 结构体名 变量名={成员1值，成员2值...}",[51,9319,9320],{},"定义结构体时顺便创建变量",[58,9322,9324],{"className":1740,"code":9323,"language":1742,"meta":63,"style":63},"#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",[65,9325,9326,9332,9342,9349,9354,9362,9366,9371,9375,9380,9385,9390,9397,9402,9409,9413,9420,9424,9428,9432,9436,9440,9444,9450,9454,9460,9468,9476,9480,9485,9490,9501,9506,9518,9529,9540,9545,9569,9574,9580,9607,9612,9618,9630,9642,9654],{"__ignoreMap":63},[68,9327,9328,9330],{"class":70,"line":71},[68,9329,3551],{"class":102},[68,9331,3554],{"class":872},[68,9333,9334,9336,9338,9340],{"class":70,"line":78},[68,9335,3559],{"class":102},[68,9337,3562],{"class":102},[68,9339,3565],{"class":587},[68,9341,112],{"class":85},[68,9343,9344,9346],{"class":70,"line":89},[68,9345,3551],{"class":102},[68,9347,9348],{"class":872},"\u003Cstring>\n",[68,9350,9351],{"class":70,"line":115},[68,9352,9353],{"class":74},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[68,9355,9356,9359],{"class":70,"line":280},[68,9357,9358],{"class":102},"struct",[68,9360,9361],{"class":587}," Student\n",[68,9363,9364],{"class":70,"line":301},[68,9365,3149],{"class":85},[68,9367,9368],{"class":70,"line":320},[68,9369,9370],{"class":74},"    \u002F\u002F成员列表\n",[68,9372,9373],{"class":70,"line":2915},[68,9374,4000],{"emptyLinePlaceholder":1679},[68,9376,9377],{"class":70,"line":2921},[68,9378,9379],{"class":74},"    \u002F\u002F姓名\n",[68,9381,9382],{"class":70,"line":2933},[68,9383,9384],{"class":85},"    string name;\n",[68,9386,9387],{"class":70,"line":3214},[68,9388,9389],{"class":74},"    \u002F\u002F年龄\n",[68,9391,9392,9394],{"class":70,"line":3219},[68,9393,3586],{"class":102},[68,9395,9396],{"class":85}," age;\n",[68,9398,9399],{"class":70,"line":3225},[68,9400,9401],{"class":74},"    \u002F\u002F分数\n",[68,9403,9404,9406],{"class":70,"line":3230},[68,9405,3586],{"class":102},[68,9407,9408],{"class":85}," score;\n",[68,9410,9411],{"class":70,"line":3244},[68,9412,5594],{"class":85},[68,9414,9415,9417],{"class":70,"line":3249},[68,9416,9358],{"class":102},[68,9418,9419],{"class":587}," School\n",[68,9421,9422],{"class":70,"line":3255},[68,9423,3149],{"class":85},[68,9425,9426],{"class":70,"line":3276},[68,9427,9370],{"class":74},[68,9429,9430],{"class":70,"line":3281},[68,9431,4000],{"emptyLinePlaceholder":1679},[68,9433,9434],{"class":70,"line":3295},[68,9435,9379],{"class":74},[68,9437,9438],{"class":70,"line":3300},[68,9439,9384],{"class":85},[68,9441,9442],{"class":70,"line":3329},[68,9443,9389],{"class":74},[68,9445,9446,9448],{"class":70,"line":3334},[68,9447,3586],{"class":102},[68,9449,9396],{"class":85},[68,9451,9452],{"class":70,"line":3351},[68,9453,9401],{"class":74},[68,9455,9456,9458],{"class":70,"line":3356},[68,9457,3586],{"class":102},[68,9459,9408],{"class":85},[68,9461,9462,9465],{"class":70,"line":3361},[68,9463,9464],{"class":85},"} s3;",[68,9466,9467],{"class":74}," \u002F\u002F创建结构体时就创建了变量\n",[68,9469,9470,9472,9474],{"class":70,"line":3366},[68,9471,1754],{"class":102},[68,9473,3574],{"class":587},[68,9475,3577],{"class":85},[68,9477,9478],{"class":70,"line":3380},[68,9479,3149],{"class":85},[68,9481,9482],{"class":70,"line":3385},[68,9483,9484],{"class":74},"    \u002F\u002F2.通过学生类型创建具体学生\n",[68,9486,9487],{"class":70,"line":4177},[68,9488,9489],{"class":74},"    \u002F\u002F2.1 struct Student s1;\n",[68,9491,9492,9495,9498],{"class":70,"line":4191},[68,9493,9494],{"class":102},"    struct",[68,9496,9497],{"class":587}," Student",[68,9499,9500],{"class":85}," s1;\n",[68,9502,9503],{"class":70,"line":4199},[68,9504,9505],{"class":74},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[68,9507,9508,9511,9513,9516],{"class":70,"line":4204},[68,9509,9510],{"class":85},"    s1.name",[68,9512,869],{"class":102},[68,9514,9515],{"class":872},"\"张三\"",[68,9517,112],{"class":85},[68,9519,9520,9523,9525,9527],{"class":70,"line":4210},[68,9521,9522],{"class":85},"    s1.age",[68,9524,869],{"class":102},[68,9526,2386],{"class":92},[68,9528,112],{"class":85},[68,9530,9531,9534,9536,9538],{"class":70,"line":4216},[68,9532,9533],{"class":85},"    s1.score",[68,9535,869],{"class":102},[68,9537,1990],{"class":92},[68,9539,112],{"class":85},[68,9541,9542],{"class":70,"line":4221},[68,9543,9544],{"class":74},"    \u002F\u002F输出结果\n",[68,9546,9548,9550,9552,9555,9557,9560,9562,9565,9567],{"class":70,"line":9547},37,[68,9549,3154],{"class":85},[68,9551,2778],{"class":102},[68,9553,9554],{"class":85},"s1.name",[68,9556,2778],{"class":102},[68,9558,9559],{"class":85},"s1.age",[68,9561,2778],{"class":102},[68,9563,9564],{"class":85},"s1.score",[68,9566,2778],{"class":102},[68,9568,2800],{"class":85},[68,9570,9572],{"class":70,"line":9571},38,[68,9573,4000],{"emptyLinePlaceholder":1679},[68,9575,9577],{"class":70,"line":9576},39,[68,9578,9579],{"class":74},"    \u002F\u002F2.2 struct Student s2={...}\n",[68,9581,9583,9585,9587,9590,9592,9594,9597,9599,9601,9603,9605],{"class":70,"line":9582},40,[68,9584,9494],{"class":102},[68,9586,9497],{"class":587},[68,9588,9589],{"class":85}," s2",[68,9591,869],{"class":102},[68,9593,2632],{"class":85},[68,9595,9596],{"class":872},"\"王五\"",[68,9598,2114],{"class":85},[68,9600,2386],{"class":92},[68,9602,2114],{"class":85},[68,9604,1990],{"class":92},[68,9606,5594],{"class":85},[68,9608,9610],{"class":70,"line":9609},41,[68,9611,4000],{"emptyLinePlaceholder":1679},[68,9613,9615],{"class":70,"line":9614},42,[68,9616,9617],{"class":74},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[68,9619,9621,9624,9626,9628],{"class":70,"line":9620},43,[68,9622,9623],{"class":85},"    s3.name",[68,9625,869],{"class":102},[68,9627,5277],{"class":872},[68,9629,112],{"class":85},[68,9631,9633,9636,9638,9640],{"class":70,"line":9632},44,[68,9634,9635],{"class":85},"    s3.age",[68,9637,869],{"class":102},[68,9639,2386],{"class":92},[68,9641,112],{"class":85},[68,9643,9645,9648,9650,9652],{"class":70,"line":9644},45,[68,9646,9647],{"class":85},"    s3.score",[68,9649,869],{"class":102},[68,9651,2436],{"class":92},[68,9653,112],{"class":85},[68,9655,9657],{"class":70,"line":9656},46,[68,9658,118],{"class":85},[19,9660,9661],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9663,9665],{"id":9664},"_42结构体数组","4.2结构体数组",[19,9667,9668],{},"将自定义的结构体放入到数组中方便维护",[19,9670,9671,9672,9675],{},"语法：struct 结构体名 数组名",[68,9673,9674],{},"元素个数","={ {}，{},...{} };",[58,9677,9679],{"className":1740,"code":9678,"language":1742,"meta":63,"style":63},"#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",[65,9680,9681,9687,9697,9703,9708,9714,9718,9722,9728,9734,9738,9742,9750,9754,9759,9774,9778,9794,9810,9814,9819,9835,9850,9865,9870,9896,9900,9923,9927],{"__ignoreMap":63},[68,9682,9683,9685],{"class":70,"line":71},[68,9684,3551],{"class":102},[68,9686,3554],{"class":872},[68,9688,9689,9691,9693,9695],{"class":70,"line":78},[68,9690,3559],{"class":102},[68,9692,3562],{"class":102},[68,9694,3565],{"class":587},[68,9696,112],{"class":85},[68,9698,9699,9701],{"class":70,"line":89},[68,9700,3551],{"class":102},[68,9702,9348],{"class":872},[68,9704,9705],{"class":70,"line":115},[68,9706,9707],{"class":74},"\u002F\u002F1.定义结构体\n",[68,9709,9710,9712],{"class":70,"line":280},[68,9711,9358],{"class":102},[68,9713,9361],{"class":587},[68,9715,9716],{"class":70,"line":301},[68,9717,3149],{"class":85},[68,9719,9720],{"class":70,"line":320},[68,9721,9384],{"class":85},[68,9723,9724,9726],{"class":70,"line":2915},[68,9725,3586],{"class":102},[68,9727,9396],{"class":85},[68,9729,9730,9732],{"class":70,"line":2921},[68,9731,3586],{"class":102},[68,9733,9408],{"class":85},[68,9735,9736],{"class":70,"line":2933},[68,9737,4000],{"emptyLinePlaceholder":1679},[68,9739,9740],{"class":70,"line":3214},[68,9741,5594],{"class":85},[68,9743,9744,9746,9748],{"class":70,"line":3219},[68,9745,1754],{"class":102},[68,9747,3574],{"class":587},[68,9749,3577],{"class":85},[68,9751,9752],{"class":70,"line":3225},[68,9753,3149],{"class":85},[68,9755,9756],{"class":70,"line":3230},[68,9757,9758],{"class":74},"    \u002F\u002F2.创建结构体数组\n",[68,9760,9761,9763,9765,9768,9770,9772],{"class":70,"line":3244},[68,9762,9494],{"class":102},[68,9764,9497],{"class":587},[68,9766,9767],{"class":85}," stuArray[",[68,9769,267],{"class":92},[68,9771,2675],{"class":85},[68,9773,6507],{"class":102},[68,9775,9776],{"class":70,"line":3249},[68,9777,3631],{"class":85},[68,9779,9780,9782,9784,9786,9788,9790,9792],{"class":70,"line":3255},[68,9781,6516],{"class":85},[68,9783,9515],{"class":872},[68,9785,2114],{"class":85},[68,9787,2386],{"class":92},[68,9789,2114],{"class":85},[68,9791,2047],{"class":92},[68,9793,6529],{"class":85},[68,9795,9796,9798,9800,9802,9804,9806,9808],{"class":70,"line":3276},[68,9797,6516],{"class":85},[68,9799,5277],{"class":872},[68,9801,2114],{"class":85},[68,9803,2311],{"class":92},[68,9805,2114],{"class":85},[68,9807,2311],{"class":92},[68,9809,118],{"class":85},[68,9811,9812],{"class":70,"line":3281},[68,9813,3787],{"class":85},[68,9815,9816],{"class":70,"line":3295},[68,9817,9818],{"class":74},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[68,9820,9821,9824,9826,9829,9831,9833],{"class":70,"line":3300},[68,9822,9823],{"class":85},"    stuArray[",[68,9825,99],{"class":92},[68,9827,9828],{"class":85},"].name",[68,9830,869],{"class":102},[68,9832,5300],{"class":872},[68,9834,112],{"class":85},[68,9836,9837,9839,9841,9844,9846,9848],{"class":70,"line":3329},[68,9838,9823],{"class":85},[68,9840,99],{"class":92},[68,9842,9843],{"class":85},"].age",[68,9845,869],{"class":102},[68,9847,267],{"class":92},[68,9849,112],{"class":85},[68,9851,9852,9854,9856,9859,9861,9863],{"class":70,"line":3334},[68,9853,9823],{"class":85},[68,9855,99],{"class":92},[68,9857,9858],{"class":85},"].score",[68,9860,869],{"class":102},[68,9862,267],{"class":92},[68,9864,112],{"class":85},[68,9866,9867],{"class":70,"line":3351},[68,9868,9869],{"class":74},"    \u002F\u002F4.遍历结构体数组\n",[68,9871,9872,9874,9876,9878,9880,9882,9884,9886,9888,9890,9892,9894],{"class":70,"line":3356},[68,9873,4800],{"class":102},[68,9875,3260],{"class":85},[68,9877,1754],{"class":102},[68,9879,4631],{"class":85},[68,9881,869],{"class":102},[68,9883,600],{"class":92},[68,9885,4638],{"class":85},[68,9887,861],{"class":102},[68,9889,267],{"class":92},[68,9891,4638],{"class":85},[68,9893,3892],{"class":102},[68,9895,1757],{"class":85},[68,9897,9898],{"class":70,"line":3361},[68,9899,3631],{"class":85},[68,9901,9902,9904,9906,9909,9911,9914,9916,9919,9921],{"class":70,"line":3366},[68,9903,5050],{"class":85},[68,9905,2778],{"class":102},[68,9907,9908],{"class":85},"stuArray[i].name",[68,9910,2778],{"class":102},[68,9912,9913],{"class":85},"stuArray[i].age",[68,9915,2778],{"class":102},[68,9917,9918],{"class":85},"stuArray[i].score",[68,9920,2778],{"class":102},[68,9922,2800],{"class":85},[68,9924,9925],{"class":70,"line":3380},[68,9926,3787],{"class":85},[68,9928,9929],{"class":70,"line":3385},[68,9930,118],{"class":85},[14,9932,9934],{"id":9933},"_43结构体指针","4.3结构体指针",[19,9936,9937],{},"作用：通过指针访问结构体中的成员",[19,9939,9940],{},"利用操作符->可以通过结构体指针访问结构体属性",[58,9942,9944],{"className":1740,"code":9943,"language":1742,"meta":63,"style":63},"#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",[65,9945,9946,9952,9962,9968,9972,9978,9982,9986,9992,9998,10002,10010,10014,10019,10044,10049,10064,10069,10092],{"__ignoreMap":63},[68,9947,9948,9950],{"class":70,"line":71},[68,9949,3551],{"class":102},[68,9951,3554],{"class":872},[68,9953,9954,9956,9958,9960],{"class":70,"line":78},[68,9955,3559],{"class":102},[68,9957,3562],{"class":102},[68,9959,3565],{"class":587},[68,9961,112],{"class":85},[68,9963,9964,9966],{"class":70,"line":89},[68,9965,3551],{"class":102},[68,9967,9348],{"class":872},[68,9969,9970],{"class":70,"line":115},[68,9971,9707],{"class":74},[68,9973,9974,9976],{"class":70,"line":280},[68,9975,9358],{"class":102},[68,9977,9361],{"class":587},[68,9979,9980],{"class":70,"line":301},[68,9981,3149],{"class":85},[68,9983,9984],{"class":70,"line":320},[68,9985,9384],{"class":85},[68,9987,9988,9990],{"class":70,"line":2915},[68,9989,3586],{"class":102},[68,9991,9396],{"class":85},[68,9993,9994,9996],{"class":70,"line":2921},[68,9995,3586],{"class":102},[68,9997,9408],{"class":85},[68,9999,10000],{"class":70,"line":2933},[68,10001,5594],{"class":85},[68,10003,10004,10006,10008],{"class":70,"line":3214},[68,10005,1754],{"class":102},[68,10007,3574],{"class":587},[68,10009,3577],{"class":85},[68,10011,10012],{"class":70,"line":3219},[68,10013,3149],{"class":85},[68,10015,10016],{"class":70,"line":3225},[68,10017,10018],{"class":74},"    \u002F\u002F创建学生结构体变量\n",[68,10020,10021,10023,10025,10028,10030,10032,10034,10036,10038,10040,10042],{"class":70,"line":3230},[68,10022,9494],{"class":102},[68,10024,9497],{"class":587},[68,10026,10027],{"class":85}," s",[68,10029,869],{"class":102},[68,10031,2632],{"class":85},[68,10033,9515],{"class":872},[68,10035,2114],{"class":85},[68,10037,2386],{"class":92},[68,10039,2114],{"class":85},[68,10041,3324],{"class":92},[68,10043,5594],{"class":85},[68,10045,10046],{"class":70,"line":3244},[68,10047,10048],{"class":74},"    \u002F\u002F通过指针指向结构体变量\n",[68,10050,10051,10053,10055,10057,10059,10061],{"class":70,"line":3249},[68,10052,9494],{"class":102},[68,10054,9497],{"class":587},[68,10056,8117],{"class":102},[68,10058,19],{"class":85},[68,10060,7938],{"class":102},[68,10062,10063],{"class":85},"s\n",[68,10065,10066],{"class":70,"line":3255},[68,10067,10068],{"class":74},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[68,10070,10071,10073,10075,10078,10080,10083,10085,10088,10090],{"class":70,"line":3276},[68,10072,3154],{"class":85},[68,10074,2778],{"class":102},[68,10076,10077],{"class":85},"p->name",[68,10079,2778],{"class":102},[68,10081,10082],{"class":85},"p->age",[68,10084,2778],{"class":102},[68,10086,10087],{"class":85},"p->score",[68,10089,2778],{"class":102},[68,10091,2800],{"class":85},[68,10093,10094],{"class":70,"line":3281},[68,10095,118],{"class":85},[14,10097,10099],{"id":10098},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10101,10102],{},"作用：结构体中的成员可以是另一个结构体",[19,10104,10105],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[58,10107,10109],{"className":1740,"code":10108,"language":1742,"meta":63,"style":63},"#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",[65,10110,10111,10117,10127,10133,10138,10146,10150,10154,10160,10166,10170,10175,10182,10186,10193,10197,10203,10208,10212,10220,10224,10229,10234,10239,10250,10262,10273,10286,10297,10308],{"__ignoreMap":63},[68,10112,10113,10115],{"class":70,"line":71},[68,10114,3551],{"class":102},[68,10116,3554],{"class":872},[68,10118,10119,10121,10123,10125],{"class":70,"line":78},[68,10120,3559],{"class":102},[68,10122,3562],{"class":102},[68,10124,3565],{"class":587},[68,10126,112],{"class":85},[68,10128,10129,10131],{"class":70,"line":89},[68,10130,3551],{"class":102},[68,10132,9348],{"class":872},[68,10134,10135],{"class":70,"line":115},[68,10136,10137],{"class":74},"\u002F\u002F定义学生结构体\n",[68,10139,10140,10142,10144],{"class":70,"line":280},[68,10141,9358],{"class":102},[68,10143,9497],{"class":587},[68,10145,4274],{"class":85},[68,10147,10148],{"class":70,"line":301},[68,10149,3149],{"class":85},[68,10151,10152],{"class":70,"line":320},[68,10153,9384],{"class":85},[68,10155,10156,10158],{"class":70,"line":2915},[68,10157,3586],{"class":102},[68,10159,9396],{"class":85},[68,10161,10162,10164],{"class":70,"line":2921},[68,10163,3586],{"class":102},[68,10165,9408],{"class":85},[68,10167,10168],{"class":70,"line":2933},[68,10169,118],{"class":85},[68,10171,10172],{"class":70,"line":3214},[68,10173,10174],{"class":74},"\u002F\u002F定义老师结构体\n",[68,10176,10177,10179],{"class":70,"line":3219},[68,10178,9358],{"class":102},[68,10180,10181],{"class":587}," Teacher\n",[68,10183,10184],{"class":70,"line":3225},[68,10185,3149],{"class":85},[68,10187,10188,10190],{"class":70,"line":3230},[68,10189,3586],{"class":102},[68,10191,10192],{"class":85}," id;\n",[68,10194,10195],{"class":70,"line":3244},[68,10196,9384],{"class":85},[68,10198,10199,10201],{"class":70,"line":3249},[68,10200,3586],{"class":102},[68,10202,9396],{"class":85},[68,10204,10205],{"class":70,"line":3255},[68,10206,10207],{"class":85},"    Student stu;\n",[68,10209,10210],{"class":70,"line":3276},[68,10211,118],{"class":85},[68,10213,10214,10216,10218],{"class":70,"line":3281},[68,10215,1754],{"class":102},[68,10217,3574],{"class":587},[68,10219,7577],{"class":85},[68,10221,10222],{"class":70,"line":3295},[68,10223,3149],{"class":85},[68,10225,10226],{"class":70,"line":3300},[68,10227,10228],{"class":74},"    \u002F\u002F结构体嵌套结构体\n",[68,10230,10231],{"class":70,"line":3329},[68,10232,10233],{"class":74},"    \u002F\u002F创建老师\n",[68,10235,10236],{"class":70,"line":3334},[68,10237,10238],{"class":85},"    Teacher t;\n",[68,10240,10241,10244,10246,10248],{"class":70,"line":3351},[68,10242,10243],{"class":85},"    t.id",[68,10245,869],{"class":102},[68,10247,2047],{"class":92},[68,10249,112],{"class":85},[68,10251,10252,10255,10257,10260],{"class":70,"line":3356},[68,10253,10254],{"class":85},"    t.name",[68,10256,869],{"class":102},[68,10258,10259],{"class":872},"\"老王\"",[68,10261,112],{"class":85},[68,10263,10264,10267,10269,10271],{"class":70,"line":3361},[68,10265,10266],{"class":85},"    t.age",[68,10268,869],{"class":102},[68,10270,2386],{"class":92},[68,10272,112],{"class":85},[68,10274,10275,10278,10280,10283],{"class":70,"line":3366},[68,10276,10277],{"class":85},"    t.stu.name",[68,10279,869],{"class":102},[68,10281,10282],{"class":872},"\"小王\"",[68,10284,10285],{"class":85},"；\n",[68,10287,10288,10291,10293,10295],{"class":70,"line":3380},[68,10289,10290],{"class":85},"    t.stu.age",[68,10292,869],{"class":102},[68,10294,2436],{"class":92},[68,10296,112],{"class":85},[68,10298,10299,10302,10304,10306],{"class":70,"line":3385},[68,10300,10301],{"class":85},"    t.stu.score",[68,10303,869],{"class":102},[68,10305,2080],{"class":92},[68,10307,112],{"class":85},[68,10309,10310],{"class":70,"line":4177},[68,10311,118],{"class":85},[14,10313,10315],{"id":10314},"_45结构体做函数参数","4.5结构体做函数参数",[19,10317,10318],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[58,10320,10322],{"className":1740,"code":10321,"language":1742,"meta":63,"style":63},"#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",[65,10323,10324,10330,10340,10346,10352,10356,10360,10366,10372,10376,10381,10386,10403,10407,10440,10444,10449,10468,10472,10503,10507,10515,10519,10528,10540,10552,10564,10577,10585,10598,10610,10618],{"__ignoreMap":63},[68,10325,10326,10328],{"class":70,"line":71},[68,10327,3551],{"class":102},[68,10329,3554],{"class":872},[68,10331,10332,10334,10336,10338],{"class":70,"line":78},[68,10333,3559],{"class":102},[68,10335,3562],{"class":102},[68,10337,3565],{"class":587},[68,10339,112],{"class":85},[68,10341,10342,10344],{"class":70,"line":89},[68,10343,3551],{"class":102},[68,10345,9348],{"class":872},[68,10347,10348,10350],{"class":70,"line":115},[68,10349,9358],{"class":102},[68,10351,9361],{"class":587},[68,10353,10354],{"class":70,"line":280},[68,10355,3149],{"class":85},[68,10357,10358],{"class":70,"line":301},[68,10359,9384],{"class":85},[68,10361,10362,10364],{"class":70,"line":320},[68,10363,3586],{"class":102},[68,10365,9396],{"class":85},[68,10367,10368,10370],{"class":70,"line":2915},[68,10369,3586],{"class":102},[68,10371,9408],{"class":85},[68,10373,10374],{"class":70,"line":2921},[68,10375,5594],{"class":85},[68,10377,10378],{"class":70,"line":2933},[68,10379,10380],{"class":74},"\u002F\u002F打印学生信息的函数\n",[68,10382,10383],{"class":70,"line":3214},[68,10384,10385],{"class":74},"\u002F\u002F值传递\n",[68,10387,10388,10390,10393,10395,10397,10399,10401],{"class":70,"line":3219},[68,10389,6963],{"class":102},[68,10391,10392],{"class":587}," printStudent1",[68,10394,997],{"class":85},[68,10396,9358],{"class":102},[68,10398,9497],{"class":587},[68,10400,10027],{"class":6815},[68,10402,1757],{"class":85},[68,10404,10405],{"class":70,"line":3225},[68,10406,3149],{"class":85},[68,10408,10409,10411,10413,10416,10418,10421,10423,10426,10428,10430,10432,10435,10437],{"class":70,"line":3230},[68,10410,8128],{"class":85},[68,10412,2778],{"class":102},[68,10414,10415],{"class":85}," s.name ",[68,10417,2778],{"class":102},[68,10419,10420],{"class":872}," \" \"",[68,10422,3048],{"class":102},[68,10424,10425],{"class":85}," s.age ",[68,10427,2778],{"class":102},[68,10429,10420],{"class":872},[68,10431,3048],{"class":102},[68,10433,10434],{"class":85}," s.score ",[68,10436,2778],{"class":102},[68,10438,10439],{"class":85}," endl;\n",[68,10441,10442],{"class":70,"line":3244},[68,10443,118],{"class":85},[68,10445,10446],{"class":70,"line":3249},[68,10447,10448],{"class":74},"\u002F\u002F地址传递\n",[68,10450,10451,10453,10456,10458,10460,10462,10464,10466],{"class":70,"line":3255},[68,10452,6963],{"class":102},[68,10454,10455],{"class":587}," printStudent2",[68,10457,997],{"class":85},[68,10459,9358],{"class":102},[68,10461,9497],{"class":587},[68,10463,8117],{"class":102},[68,10465,2431],{"class":6815},[68,10467,1757],{"class":85},[68,10469,10470],{"class":70,"line":3276},[68,10471,3149],{"class":85},[68,10473,10474,10476,10478,10481,10483,10485,10487,10490,10492,10494,10496,10499,10501],{"class":70,"line":3281},[68,10475,8128],{"class":85},[68,10477,2778],{"class":102},[68,10479,10480],{"class":85}," s->name ",[68,10482,2778],{"class":102},[68,10484,10420],{"class":872},[68,10486,3048],{"class":102},[68,10488,10489],{"class":85}," s->age ",[68,10491,2778],{"class":102},[68,10493,10420],{"class":872},[68,10495,3048],{"class":102},[68,10497,10498],{"class":85}," s->score ",[68,10500,2778],{"class":102},[68,10502,10439],{"class":85},[68,10504,10505],{"class":70,"line":3295},[68,10506,118],{"class":85},[68,10508,10509,10511,10513],{"class":70,"line":3300},[68,10510,1754],{"class":102},[68,10512,3574],{"class":587},[68,10514,3577],{"class":85},[68,10516,10517],{"class":70,"line":3329},[68,10518,3149],{"class":85},[68,10520,10521,10523,10525],{"class":70,"line":3334},[68,10522,9494],{"class":102},[68,10524,9497],{"class":587},[68,10526,10527],{"class":85}," s;\n",[68,10529,10530,10533,10535,10538],{"class":70,"line":3351},[68,10531,10532],{"class":85},"    s.name ",[68,10534,869],{"class":102},[68,10536,10537],{"class":872}," \"张三\"",[68,10539,112],{"class":85},[68,10541,10542,10545,10547,10550],{"class":70,"line":3356},[68,10543,10544],{"class":85},"    s.age ",[68,10546,869],{"class":102},[68,10548,10549],{"class":92}," 20",[68,10551,112],{"class":85},[68,10553,10554,10557,10559,10562],{"class":70,"line":3361},[68,10555,10556],{"class":85},"    s.score ",[68,10558,869],{"class":102},[68,10560,10561],{"class":92}," 85",[68,10563,112],{"class":85},[68,10565,10566,10568,10570,10573,10575],{"class":70,"line":3366},[68,10567,3154],{"class":85},[68,10569,2778],{"class":102},[68,10571,10572],{"class":872},"\"值传递:\"",[68,10574,2778],{"class":102},[68,10576,2800],{"class":85},[68,10578,10579,10582],{"class":70,"line":3380},[68,10580,10581],{"class":587},"    printStudent1",[68,10583,10584],{"class":85},"(s);\n",[68,10586,10587,10589,10591,10594,10596],{"class":70,"line":3385},[68,10588,3154],{"class":85},[68,10590,2778],{"class":102},[68,10592,10593],{"class":872},"\"地址传递:\"",[68,10595,2778],{"class":102},[68,10597,2800],{"class":85},[68,10599,10600,10603,10605,10607],{"class":70,"line":4177},[68,10601,10602],{"class":587},"    printStudent2",[68,10604,997],{"class":85},[68,10606,2089],{"class":102},[68,10608,10609],{"class":85},"s); \n",[68,10611,10612,10614,10616],{"class":70,"line":4191},[68,10613,5689],{"class":102},[68,10615,5692],{"class":92},[68,10617,112],{"class":85},[68,10619,10620],{"class":70,"line":4199},[68,10621,118],{"class":85},[19,10623,1210],{},[168,10625,10626,10629],{},[51,10627,10628],{},"1.先定义结构体，不要在函数中写结构体的定义",[51,10630,10631],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10633,10635],{"id":10634},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10637,10638],{},"用const防止误操作",[58,10640,10642],{"className":1740,"code":10641,"language":1742,"meta":63,"style":63},"#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",[65,10643,10644,10650,10660,10666,10671,10675,10679,10685,10691,10695,10711,10715,10738,10742,10750,10754,10775,10782,10786],{"__ignoreMap":63},[68,10645,10646,10648],{"class":70,"line":71},[68,10647,3551],{"class":102},[68,10649,3554],{"class":872},[68,10651,10652,10654,10656,10658],{"class":70,"line":78},[68,10653,3559],{"class":102},[68,10655,3562],{"class":102},[68,10657,3565],{"class":587},[68,10659,112],{"class":85},[68,10661,10662,10664],{"class":70,"line":89},[68,10663,3551],{"class":102},[68,10665,9348],{"class":872},[68,10667,10668],{"class":70,"line":115},[68,10669,10670],{"class":85},"sctuct Student\n",[68,10672,10673],{"class":70,"line":280},[68,10674,3149],{"class":85},[68,10676,10677],{"class":70,"line":301},[68,10678,9384],{"class":85},[68,10680,10681,10683],{"class":70,"line":320},[68,10682,3586],{"class":102},[68,10684,9396],{"class":85},[68,10686,10687,10689],{"class":70,"line":2915},[68,10688,3586],{"class":102},[68,10690,9408],{"class":85},[68,10692,10693],{"class":70,"line":2921},[68,10694,5594],{"class":85},[68,10696,10697,10699,10702,10704,10707,10709],{"class":70,"line":2933},[68,10698,6963],{"class":102},[68,10700,10701],{"class":587}," printStudents",[68,10703,997],{"class":85},[68,10705,10706],{"class":587},"student",[68,10708,10027],{"class":6815},[68,10710,1757],{"class":85},[68,10712,10713],{"class":70,"line":3214},[68,10714,3149],{"class":85},[68,10716,10717,10719,10721,10724,10726,10729,10731,10734,10736],{"class":70,"line":3219},[68,10718,3154],{"class":85},[68,10720,2778],{"class":102},[68,10722,10723],{"class":85},"s.name",[68,10725,2778],{"class":102},[68,10727,10728],{"class":85},"s.age",[68,10730,2778],{"class":102},[68,10732,10733],{"class":85},"s.score",[68,10735,2778],{"class":102},[68,10737,2800],{"class":85},[68,10739,10740],{"class":70,"line":3225},[68,10741,118],{"class":85},[68,10743,10744,10746,10748],{"class":70,"line":3230},[68,10745,1754],{"class":102},[68,10747,3574],{"class":587},[68,10749,7577],{"class":85},[68,10751,10752],{"class":70,"line":3244},[68,10753,3149],{"class":85},[68,10755,10756,10759,10761,10763,10765,10767,10769,10771,10773],{"class":70,"line":3249},[68,10757,10758],{"class":85},"    Student s",[68,10760,869],{"class":102},[68,10762,2632],{"class":85},[68,10764,9515],{"class":872},[68,10766,2114],{"class":85},[68,10768,2386],{"class":92},[68,10770,2114],{"class":85},[68,10772,2386],{"class":92},[68,10774,5594],{"class":85},[68,10776,10777,10780],{"class":70,"line":3255},[68,10778,10779],{"class":587},"    printStudent",[68,10781,10584],{"class":85},[68,10783,10784],{"class":70,"line":3276},[68,10785,4000],{"emptyLinePlaceholder":1679},[68,10787,10788],{"class":70,"line":3281},[68,10789,118],{"class":85},[19,10791,1210],{},[168,10793,10794,10797,10800],{},[51,10795,10796],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[51,10798,10799],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[51,10801,10802],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[58,10804,10806],{"className":1740,"code":10805,"language":1742,"meta":63,"style":63},"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",[65,10807,10808,10827,10831,10836,10856],{"__ignoreMap":63},[68,10809,10810,10812,10814,10816,10818,10821,10823,10825],{"class":70,"line":71},[68,10811,6963],{"class":102},[68,10813,10701],{"class":587},[68,10815,997],{"class":85},[68,10817,8391],{"class":102},[68,10819,10820],{"class":587}," student",[68,10822,8117],{"class":102},[68,10824,2431],{"class":6815},[68,10826,1757],{"class":85},[68,10828,10829],{"class":70,"line":78},[68,10830,3149],{"class":85},[68,10832,10833],{"class":70,"line":89},[68,10834,10835],{"class":74},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[68,10837,10838,10840,10842,10844,10846,10848,10850,10852,10854],{"class":70,"line":115},[68,10839,3154],{"class":85},[68,10841,2778],{"class":102},[68,10843,10723],{"class":85},[68,10845,2778],{"class":102},[68,10847,10728],{"class":85},[68,10849,2778],{"class":102},[68,10851,10733],{"class":85},[68,10853,2778],{"class":102},[68,10855,2800],{"class":85},[68,10857,10858],{"class":70,"line":280},[68,10859,118],{"class":85},[14,10861,10863],{"id":10862},"_47案例","4.7案例",[48,10865,10866],{},[51,10867,10868],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[58,10870,10872],{"className":1740,"code":10871,"language":1742,"meta":63,"style":63},"#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",[65,10873,10874,10880,10890,10896,10903,10907,10913,10917,10922,10928,10934,10938,10942,10948,10952,10957,10962,10975,10979,10984,11010,11014,11026,11053,11057,11069,11079,11083,11088,11117,11121,11133,11142,11169,11180,11190,11194,11198,11202,11207,11231,11235,11259,11263,11282,11308,11312,11337,11360,11384,11389,11394,11399,11408,11413,11419,11440,11446,11460,11466,11493,11502,11508,11516,11521],{"__ignoreMap":63},[68,10875,10876,10878],{"class":70,"line":71},[68,10877,3551],{"class":102},[68,10879,3554],{"class":872},[68,10881,10882,10884,10886,10888],{"class":70,"line":78},[68,10883,3559],{"class":102},[68,10885,3562],{"class":102},[68,10887,3565],{"class":587},[68,10889,112],{"class":85},[68,10891,10892,10894],{"class":70,"line":89},[68,10893,3551],{"class":102},[68,10895,9348],{"class":872},[68,10897,10898,10900],{"class":70,"line":115},[68,10899,3551],{"class":102},[68,10901,10902],{"class":872},"\u003Cctime>\n",[68,10904,10905],{"class":70,"line":280},[68,10906,10137],{"class":74},[68,10908,10909,10911],{"class":70,"line":301},[68,10910,9358],{"class":102},[68,10912,9361],{"class":587},[68,10914,10915],{"class":70,"line":320},[68,10916,3149],{"class":85},[68,10918,10919],{"class":70,"line":2915},[68,10920,10921],{"class":85},"    string sName;\n",[68,10923,10924,10926],{"class":70,"line":2921},[68,10925,3586],{"class":102},[68,10927,9396],{"class":85},[68,10929,10930,10932],{"class":70,"line":2933},[68,10931,3586],{"class":102},[68,10933,9408],{"class":85},[68,10935,10936],{"class":70,"line":3214},[68,10937,5594],{"class":85},[68,10939,10940],{"class":70,"line":3219},[68,10941,10174],{"class":74},[68,10943,10944,10946],{"class":70,"line":3225},[68,10945,9358],{"class":102},[68,10947,10181],{"class":587},[68,10949,10950],{"class":70,"line":3230},[68,10951,3149],{"class":85},[68,10953,10954],{"class":70,"line":3244},[68,10955,10956],{"class":85},"    string tName;\n",[68,10958,10959],{"class":70,"line":3249},[68,10960,10961],{"class":74},"    \u002F\u002F学生数组\n",[68,10963,10964,10966,10968,10971,10973],{"class":70,"line":3255},[68,10965,9494],{"class":102},[68,10967,9497],{"class":587},[68,10969,10970],{"class":85}," sArray[",[68,10972,2055],{"class":92},[68,10974,6289],{"class":85},[68,10976,10977],{"class":70,"line":3276},[68,10978,5594],{"class":85},[68,10980,10981],{"class":70,"line":3281},[68,10982,10983],{"class":74},"\u002F\u002F给老师和学生赋值的函数\n",[68,10985,10986,10988,10991,10993,10995,10998,11001,11004,11006,11008],{"class":70,"line":3295},[68,10987,6963],{"class":102},[68,10989,10990],{"class":587}," allocateSpace",[68,10992,997],{"class":85},[68,10994,9358],{"class":102},[68,10996,10997],{"class":587}," Teacher",[68,10999,11000],{"class":6815}," tArray",[68,11002,11003],{"class":85},"[],",[68,11005,1754],{"class":102},[68,11007,8930],{"class":6815},[68,11009,1757],{"class":85},[68,11011,11012],{"class":70,"line":3300},[68,11013,3149],{"class":85},[68,11015,11016,11019,11021,11024],{"class":70,"line":3329},[68,11017,11018],{"class":85},"    string nameSeed",[68,11020,869],{"class":102},[68,11022,11023],{"class":872},"\"ABCDE\"",[68,11025,112],{"class":85},[68,11027,11028,11030,11032,11034,11037,11039,11041,11044,11046,11049,11051],{"class":70,"line":3334},[68,11029,4800],{"class":102},[68,11031,3260],{"class":85},[68,11033,1754],{"class":102},[68,11035,11036],{"class":85}," i ",[68,11038,869],{"class":102},[68,11040,5692],{"class":92},[68,11042,11043],{"class":85},"; i ",[68,11045,861],{"class":102},[68,11047,11048],{"class":85}," len; i",[68,11050,3892],{"class":102},[68,11052,1757],{"class":85},[68,11054,11055],{"class":70,"line":3351},[68,11056,3631],{"class":85},[68,11058,11059,11062,11064,11067],{"class":70,"line":3356},[68,11060,11061],{"class":85},"        tArray[i].tName ",[68,11063,869],{"class":102},[68,11065,11066],{"class":872}," \"Teacher_\"",[68,11068,112],{"class":85},[68,11070,11071,11073,11076],{"class":70,"line":3361},[68,11072,11061],{"class":85},[68,11074,11075],{"class":102},"+=",[68,11077,11078],{"class":85},"nameSeed[i];\n",[68,11080,11081],{"class":70,"line":3366},[68,11082,4000],{"emptyLinePlaceholder":1679},[68,11084,11085],{"class":70,"line":3380},[68,11086,11087],{"class":74},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[68,11089,11090,11092,11094,11096,11099,11101,11103,11106,11108,11110,11113,11115],{"class":70,"line":3385},[68,11091,5002],{"class":102},[68,11093,3260],{"class":85},[68,11095,1754],{"class":102},[68,11097,11098],{"class":85}," j ",[68,11100,869],{"class":102},[68,11102,5692],{"class":92},[68,11104,11105],{"class":85},"; j ",[68,11107,861],{"class":102},[68,11109,3748],{"class":92},[68,11111,11112],{"class":85},"; j",[68,11114,3892],{"class":102},[68,11116,1757],{"class":85},[68,11118,11119],{"class":70,"line":4177},[68,11120,4110],{"class":85},[68,11122,11123,11126,11128,11131],{"class":70,"line":4191},[68,11124,11125],{"class":85},"            tArray[i].sArray[j].sName ",[68,11127,869],{"class":102},[68,11129,11130],{"class":872}," \"Student_\"",[68,11132,112],{"class":85},[68,11134,11135,11137,11139],{"class":70,"line":4199},[68,11136,11125],{"class":85},[68,11138,11075],{"class":102},[68,11140,11141],{"class":85}," nameSeed[j];\n",[68,11143,11144,11147,11150,11152,11154,11156,11158,11160,11162,11164,11166],{"class":70,"line":4204},[68,11145,11146],{"class":102},"            int",[68,11148,11149],{"class":85}," random",[68,11151,869],{"class":102},[68,11153,4024],{"class":587},[68,11155,4027],{"class":85},[68,11157,2064],{"class":102},[68,11159,2643],{"class":92},[68,11161,2217],{"class":102},[68,11163,2137],{"class":92},[68,11165,1804],{"class":85},[68,11167,11168],{"class":74},"\u002F\u002F40~99\n",[68,11170,11171,11174,11176,11178],{"class":70,"line":4210},[68,11172,11173],{"class":85},"            tArray[i].sArray[j].age ",[68,11175,869],{"class":102},[68,11177,10549],{"class":92},[68,11179,112],{"class":85},[68,11181,11182,11185,11187],{"class":70,"line":4216},[68,11183,11184],{"class":85},"            tArray[i].sArray[j].score ",[68,11186,869],{"class":102},[68,11188,11189],{"class":85}," random;\n",[68,11191,11192],{"class":70,"line":4221},[68,11193,4129],{"class":85},[68,11195,11196],{"class":70,"line":9547},[68,11197,3787],{"class":85},[68,11199,11200],{"class":70,"line":9571},[68,11201,118],{"class":85},[68,11203,11204],{"class":70,"line":9576},[68,11205,11206],{"class":74},"\u002F\u002F打印所有信息的函数\n",[68,11208,11209,11211,11214,11216,11218,11220,11222,11225,11227,11229],{"class":70,"line":9582},[68,11210,6963],{"class":102},[68,11212,11213],{"class":587}," printInfo",[68,11215,997],{"class":85},[68,11217,9358],{"class":102},[68,11219,10997],{"class":587},[68,11221,11000],{"class":6815},[68,11223,11224],{"class":85},"[], ",[68,11226,1754],{"class":102},[68,11228,8930],{"class":6815},[68,11230,1757],{"class":85},[68,11232,11233],{"class":70,"line":9609},[68,11234,3149],{"class":85},[68,11236,11237,11239,11241,11243,11245,11247,11249,11251,11253,11255,11257],{"class":70,"line":9614},[68,11238,4800],{"class":102},[68,11240,3260],{"class":85},[68,11242,1754],{"class":102},[68,11244,11036],{"class":85},[68,11246,869],{"class":102},[68,11248,5692],{"class":92},[68,11250,11043],{"class":85},[68,11252,861],{"class":102},[68,11254,11048],{"class":85},[68,11256,3892],{"class":102},[68,11258,1757],{"class":85},[68,11260,11261],{"class":70,"line":9620},[68,11262,3631],{"class":85},[68,11264,11265,11268,11270,11273,11275,11278,11280],{"class":70,"line":9632},[68,11266,11267],{"class":85},"        cout ",[68,11269,2778],{"class":102},[68,11271,11272],{"class":872}," \"Teacher: \"",[68,11274,3048],{"class":102},[68,11276,11277],{"class":85}," tArray[i].tName ",[68,11279,2778],{"class":102},[68,11281,10439],{"class":85},[68,11283,11284,11286,11288,11290,11292,11294,11296,11298,11300,11302,11304,11306],{"class":70,"line":9644},[68,11285,5002],{"class":102},[68,11287,3260],{"class":85},[68,11289,1754],{"class":102},[68,11291,11098],{"class":85},[68,11293,869],{"class":102},[68,11295,5692],{"class":92},[68,11297,11105],{"class":85},[68,11299,861],{"class":102},[68,11301,3748],{"class":92},[68,11303,11112],{"class":85},[68,11305,3892],{"class":102},[68,11307,1757],{"class":85},[68,11309,11310],{"class":70,"line":9656},[68,11311,4110],{"class":85},[68,11313,11315,11318,11320,11323,11325,11328,11330,11333,11335],{"class":70,"line":11314},47,[68,11316,11317],{"class":85},"            cout ",[68,11319,2778],{"class":102},[68,11321,11322],{"class":872}," \"",[68,11324,2835],{"class":92},[68,11326,11327],{"class":872},"Student: \"",[68,11329,3048],{"class":102},[68,11331,11332],{"class":85}," tArray[i].sArray[j].sName",[68,11334,2778],{"class":102},[68,11336,2800],{"class":85},[68,11338,11340,11342,11344,11346,11348,11351,11353,11356,11358],{"class":70,"line":11339},48,[68,11341,11317],{"class":85},[68,11343,2778],{"class":102},[68,11345,11322],{"class":872},[68,11347,2835],{"class":92},[68,11349,11350],{"class":872},"Age: \"",[68,11352,3048],{"class":102},[68,11354,11355],{"class":85}," tArray[i].sArray[j].age ",[68,11357,2778],{"class":102},[68,11359,10439],{"class":85},[68,11361,11363,11365,11367,11369,11371,11374,11376,11379,11381],{"class":70,"line":11362},49,[68,11364,11317],{"class":85},[68,11366,2778],{"class":102},[68,11368,11322],{"class":872},[68,11370,2835],{"class":92},[68,11372,11373],{"class":872},"Score: \"",[68,11375,3048],{"class":102},[68,11377,11378],{"class":85}," tArray[i].sArray[j].score ",[68,11380,2778],{"class":102},[68,11382,11383],{"class":85}," endl;   \n",[68,11385,11387],{"class":70,"line":11386},50,[68,11388,4129],{"class":85},[68,11390,11392],{"class":70,"line":11391},51,[68,11393,3787],{"class":85},[68,11395,11397],{"class":70,"line":11396},52,[68,11398,118],{"class":85},[68,11400,11402,11404,11406],{"class":70,"line":11401},53,[68,11403,1754],{"class":102},[68,11405,3574],{"class":587},[68,11407,3577],{"class":85},[68,11409,11411],{"class":70,"line":11410},54,[68,11412,3149],{"class":85},[68,11414,11416],{"class":70,"line":11415},55,[68,11417,11418],{"class":74},"    \u002F\u002F随机数种子\n",[68,11420,11422,11424,11426,11428,11430,11432,11434,11436,11438],{"class":70,"line":11421},56,[68,11423,3973],{"class":587},[68,11425,3976],{"class":85},[68,11427,3979],{"class":102},[68,11429,3982],{"class":102},[68,11431,2165],{"class":85},[68,11433,3987],{"class":587},[68,11435,997],{"class":85},[68,11437,3992],{"class":92},[68,11439,3995],{"class":85},[68,11441,11443],{"class":70,"line":11442},57,[68,11444,11445],{"class":74},"    \u002F\u002F1.创建3名老师的数组\n",[68,11447,11449,11451,11453,11456,11458],{"class":70,"line":11448},58,[68,11450,9494],{"class":102},[68,11452,10997],{"class":587},[68,11454,11455],{"class":85}," tArray[",[68,11457,288],{"class":92},[68,11459,6289],{"class":85},[68,11461,11463],{"class":70,"line":11462},59,[68,11464,11465],{"class":74},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[68,11467,11469,11471,11474,11476,11479,11482,11484,11486,11489,11491],{"class":70,"line":11468},60,[68,11470,3586],{"class":102},[68,11472,11473],{"class":85}," len ",[68,11475,869],{"class":102},[68,11477,11478],{"class":102}," sizeof",[68,11480,11481],{"class":85},"(tArray) ",[68,11483,2320],{"class":102},[68,11485,11478],{"class":102},[68,11487,11488],{"class":85},"(tArray[",[68,11490,600],{"class":92},[68,11492,5455],{"class":85},[68,11494,11496,11499],{"class":70,"line":11495},61,[68,11497,11498],{"class":587},"    allocateSpace",[68,11500,11501],{"class":85},"(tArray, len);\n",[68,11503,11505],{"class":70,"line":11504},62,[68,11506,11507],{"class":74},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[68,11509,11511,11514],{"class":70,"line":11510},63,[68,11512,11513],{"class":587},"    printInfo",[68,11515,11501],{"class":85},[68,11517,11519],{"class":70,"line":11518},64,[68,11520,4000],{"emptyLinePlaceholder":1679},[68,11522,11524],{"class":70,"line":11523},65,[68,11525,118],{"class":85},[48,11527,11528],{"start":78},[51,11529,11530,11533],{},[1890,11531,11532],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11535,11536],{},"五名英雄信息如下：",[58,11538,11542],{"className":11539,"code":11540,"language":11541,"meta":63,"style":63},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[65,11543,11544,11562,11579,11596,11613],{"__ignoreMap":63},[68,11545,11546,11548,11551,11553,11555,11557,11560],{"class":70,"line":71},[68,11547,6516],{"class":85},[68,11549,11550],{"class":872},"\"刘备\"",[68,11552,2114],{"class":85},[68,11554,2511],{"class":92},[68,11556,2114],{"class":85},[68,11558,11559],{"class":872},"\"男\"",[68,11561,6529],{"class":85},[68,11563,11564,11566,11569,11571,11573,11575,11577],{"class":70,"line":78},[68,11565,6516],{"class":85},[68,11567,11568],{"class":872},"\"关羽\"",[68,11570,2114],{"class":85},[68,11572,2486],{"class":92},[68,11574,2114],{"class":85},[68,11576,11559],{"class":872},[68,11578,6529],{"class":85},[68,11580,11581,11583,11586,11588,11590,11592,11594],{"class":70,"line":89},[68,11582,6516],{"class":85},[68,11584,11585],{"class":872},"\"张飞\"",[68,11587,2114],{"class":85},[68,11589,2436],{"class":92},[68,11591,2114],{"class":85},[68,11593,11559],{"class":872},[68,11595,6529],{"class":85},[68,11597,11598,11600,11603,11605,11607,11609,11611],{"class":70,"line":115},[68,11599,6516],{"class":85},[68,11601,11602],{"class":872},"\"赵云\"",[68,11604,2114],{"class":85},[68,11606,2461],{"class":92},[68,11608,2114],{"class":85},[68,11610,11559],{"class":872},[68,11612,6529],{"class":85},[68,11614,11615,11617,11620,11622,11624,11626,11629],{"class":70,"line":280},[68,11616,6516],{"class":85},[68,11618,11619],{"class":872},"\"貂蝉\"",[68,11621,2114],{"class":85},[68,11623,2411],{"class":92},[68,11625,2114],{"class":85},[68,11627,11628],{"class":872},"\"女\"",[68,11630,6529],{"class":85},[19,11632,11633],{},"代码：",[58,11635,11637],{"className":1740,"code":11636,"language":1742,"meta":63,"style":63},"#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",[65,11638,11639,11645,11655,11661,11668,11672,11676,11682,11687,11691,11696,11719,11723,11748,11752,11785,11790,11819,11824,11839,11865,11885,11890,11895,11899,11903,11908,11930,11934,11958,11962,12024,12028,12032,12040,12044,12049,12060,12064,12080,12096,12112,12128,12144,12148,12168,12190,12195,12208,12215,12220,12226,12231,12244,12250],{"__ignoreMap":63},[68,11640,11641,11643],{"class":70,"line":71},[68,11642,3551],{"class":102},[68,11644,3554],{"class":872},[68,11646,11647,11649,11651,11653],{"class":70,"line":78},[68,11648,3559],{"class":102},[68,11650,3562],{"class":102},[68,11652,3565],{"class":587},[68,11654,112],{"class":85},[68,11656,11657,11659],{"class":70,"line":89},[68,11658,3551],{"class":102},[68,11660,9348],{"class":872},[68,11662,11663,11665],{"class":70,"line":115},[68,11664,9358],{"class":102},[68,11666,11667],{"class":587}," Sanguo\n",[68,11669,11670],{"class":70,"line":280},[68,11671,3149],{"class":85},[68,11673,11674],{"class":70,"line":301},[68,11675,9384],{"class":85},[68,11677,11678,11680],{"class":70,"line":320},[68,11679,3586],{"class":102},[68,11681,9396],{"class":85},[68,11683,11684],{"class":70,"line":2915},[68,11685,11686],{"class":85},"    string gender;\n",[68,11688,11689],{"class":70,"line":2921},[68,11690,5594],{"class":85},[68,11692,11693],{"class":70,"line":2933},[68,11694,11695],{"class":74},"\u002F\u002F定义排序函数\n",[68,11697,11698,11700,11702,11704,11707,11709,11711,11713,11715,11717],{"class":70,"line":3214},[68,11699,6963],{"class":102},[68,11701,8915],{"class":587},[68,11703,997],{"class":85},[68,11705,11706],{"class":587},"Sanguo",[68,11708,8117],{"class":102},[68,11710,2431],{"class":6815},[68,11712,2114],{"class":85},[68,11714,1754],{"class":102},[68,11716,8930],{"class":6815},[68,11718,1757],{"class":85},[68,11720,11721],{"class":70,"line":3219},[68,11722,3149],{"class":85},[68,11724,11725,11727,11729,11731,11733,11735,11737,11739,11741,11744,11746],{"class":70,"line":3225},[68,11726,4800],{"class":102},[68,11728,997],{"class":85},[68,11730,1754],{"class":102},[68,11732,4631],{"class":85},[68,11734,869],{"class":102},[68,11736,600],{"class":92},[68,11738,4638],{"class":85},[68,11740,861],{"class":102},[68,11742,11743],{"class":85},"len;i",[68,11745,3892],{"class":102},[68,11747,1757],{"class":85},[68,11749,11750],{"class":70,"line":3230},[68,11751,3631],{"class":85},[68,11753,11754,11757,11759,11761,11763,11765,11767,11769,11771,11773,11775,11777,11779,11781,11783],{"class":70,"line":3244},[68,11755,11756],{"class":102},"     for",[68,11758,3260],{"class":85},[68,11760,1754],{"class":102},[68,11762,5009],{"class":85},[68,11764,869],{"class":102},[68,11766,600],{"class":92},[68,11768,5016],{"class":85},[68,11770,861],{"class":102},[68,11772,8957],{"class":85},[68,11774,2268],{"class":102},[68,11776,99],{"class":92},[68,11778,2268],{"class":102},[68,11780,5149],{"class":85},[68,11782,3892],{"class":102},[68,11784,1757],{"class":85},[68,11786,11787],{"class":70,"line":3249},[68,11788,11789],{"class":85},"     {\n",[68,11791,11792,11795,11798,11800,11803,11805,11808,11810,11812,11814,11816],{"class":70,"line":3255},[68,11793,11794],{"class":102},"         if",[68,11796,11797],{"class":85}," ((s",[68,11799,2217],{"class":102},[68,11801,11802],{"class":85},"j)->age ",[68,11804,2695],{"class":102},[68,11806,11807],{"class":85}," (s",[68,11809,2217],{"class":102},[68,11811,2203],{"class":85},[68,11813,2217],{"class":102},[68,11815,99],{"class":92},[68,11817,11818],{"class":85},")->age)\n",[68,11820,11821],{"class":70,"line":3276},[68,11822,11823],{"class":85},"         {\n",[68,11825,11826,11829,11831,11834,11836],{"class":70,"line":3281},[68,11827,11828],{"class":85},"             Sanguo temp",[68,11830,8752],{"class":102},[68,11832,11833],{"class":85},"(s",[68,11835,2217],{"class":102},[68,11837,11838],{"class":85},"j);\n",[68,11840,11841,11844,11846,11848,11851,11853,11855,11857,11859,11861,11863],{"class":70,"line":3295},[68,11842,11843],{"class":102},"             *",[68,11845,11833],{"class":85},[68,11847,2217],{"class":102},[68,11849,11850],{"class":85},"j)",[68,11852,8752],{"class":102},[68,11854,11833],{"class":85},[68,11856,2217],{"class":102},[68,11858,2203],{"class":85},[68,11860,2217],{"class":102},[68,11862,99],{"class":92},[68,11864,1016],{"class":85},[68,11866,11867,11869,11871,11873,11875,11877,11879,11881,11883],{"class":70,"line":3300},[68,11868,11843],{"class":102},[68,11870,11833],{"class":85},[68,11872,2217],{"class":102},[68,11874,2203],{"class":85},[68,11876,2217],{"class":102},[68,11878,99],{"class":92},[68,11880,2165],{"class":85},[68,11882,869],{"class":102},[68,11884,5879],{"class":85},[68,11886,11887],{"class":70,"line":3329},[68,11888,11889],{"class":85},"         }\n",[68,11891,11892],{"class":70,"line":3334},[68,11893,11894],{"class":85},"     }\n",[68,11896,11897],{"class":70,"line":3351},[68,11898,3787],{"class":85},[68,11900,11901],{"class":70,"line":3356},[68,11902,118],{"class":85},[68,11904,11905],{"class":70,"line":3361},[68,11906,11907],{"class":74},"\u002F\u002F定义打印函数\n",[68,11909,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928],{"class":70,"line":3366},[68,11911,6963],{"class":102},[68,11913,11213],{"class":587},[68,11915,997],{"class":85},[68,11917,11706],{"class":587},[68,11919,8117],{"class":102},[68,11921,2431],{"class":6815},[68,11923,2114],{"class":85},[68,11925,1754],{"class":102},[68,11927,8930],{"class":6815},[68,11929,1757],{"class":85},[68,11931,11932],{"class":70,"line":3380},[68,11933,3149],{"class":85},[68,11935,11936,11938,11940,11942,11944,11946,11948,11950,11952,11954,11956],{"class":70,"line":3385},[68,11937,4800],{"class":102},[68,11939,3260],{"class":85},[68,11941,1754],{"class":102},[68,11943,4631],{"class":85},[68,11945,869],{"class":102},[68,11947,600],{"class":92},[68,11949,4638],{"class":85},[68,11951,861],{"class":102},[68,11953,11743],{"class":85},[68,11955,3892],{"class":102},[68,11957,1757],{"class":85},[68,11959,11960],{"class":70,"line":4177},[68,11961,3631],{"class":85},[68,11963,11964,11966,11968,11970,11972,11975,11977,11979,11981,11984,11986,11988,11990,11993,11995,11997,11999,12002,12004,12006,12008,12011,12013,12015,12017,12020,12022],{"class":70,"line":4191},[68,11965,5050],{"class":85},[68,11967,2778],{"class":102},[68,11969,1987],{"class":872},[68,11971,2835],{"class":92},[68,11973,11974],{"class":872},"姓名：\"",[68,11976,2778],{"class":102},[68,11978,11833],{"class":85},[68,11980,2217],{"class":102},[68,11982,11983],{"class":85},"i)->name",[68,11985,2778],{"class":102},[68,11987,1987],{"class":872},[68,11989,2835],{"class":92},[68,11991,11992],{"class":872},"年龄：\"",[68,11994,2778],{"class":102},[68,11996,11833],{"class":85},[68,11998,2217],{"class":102},[68,12000,12001],{"class":85},"i)->age",[68,12003,2778],{"class":102},[68,12005,1987],{"class":872},[68,12007,2835],{"class":92},[68,12009,12010],{"class":872},"性别：\"",[68,12012,2778],{"class":102},[68,12014,11833],{"class":85},[68,12016,2217],{"class":102},[68,12018,12019],{"class":85},"i)->gender",[68,12021,2778],{"class":102},[68,12023,2800],{"class":85},[68,12025,12026],{"class":70,"line":4199},[68,12027,3787],{"class":85},[68,12029,12030],{"class":70,"line":4204},[68,12031,118],{"class":85},[68,12033,12034,12036,12038],{"class":70,"line":4210},[68,12035,1754],{"class":102},[68,12037,3574],{"class":587},[68,12039,3577],{"class":85},[68,12041,12042],{"class":70,"line":4216},[68,12043,3149],{"class":85},[68,12045,12046],{"class":70,"line":4221},[68,12047,12048],{"class":74},"    \u002F\u002F定义结构体变量\n",[68,12050,12051,12054,12056,12058],{"class":70,"line":9547},[68,12052,12053],{"class":85},"    Sanguo s1[",[68,12055,2055],{"class":92},[68,12057,2675],{"class":85},[68,12059,6507],{"class":102},[68,12061,12062],{"class":70,"line":9571},[68,12063,3631],{"class":85},[68,12065,12066,12068,12070,12072,12074,12076,12078],{"class":70,"line":9576},[68,12067,6516],{"class":85},[68,12069,11550],{"class":872},[68,12071,2114],{"class":85},[68,12073,2511],{"class":92},[68,12075,2114],{"class":85},[68,12077,11559],{"class":872},[68,12079,6529],{"class":85},[68,12081,12082,12084,12086,12088,12090,12092,12094],{"class":70,"line":9582},[68,12083,6516],{"class":85},[68,12085,11568],{"class":872},[68,12087,2114],{"class":85},[68,12089,2486],{"class":92},[68,12091,2114],{"class":85},[68,12093,11559],{"class":872},[68,12095,6529],{"class":85},[68,12097,12098,12100,12102,12104,12106,12108,12110],{"class":70,"line":9609},[68,12099,6516],{"class":85},[68,12101,11585],{"class":872},[68,12103,2114],{"class":85},[68,12105,2436],{"class":92},[68,12107,2114],{"class":85},[68,12109,11559],{"class":872},[68,12111,6529],{"class":85},[68,12113,12114,12116,12118,12120,12122,12124,12126],{"class":70,"line":9614},[68,12115,6516],{"class":85},[68,12117,11602],{"class":872},[68,12119,2114],{"class":85},[68,12121,2461],{"class":92},[68,12123,2114],{"class":85},[68,12125,11559],{"class":872},[68,12127,6529],{"class":85},[68,12129,12130,12132,12134,12136,12138,12140,12142],{"class":70,"line":9620},[68,12131,6516],{"class":85},[68,12133,11619],{"class":872},[68,12135,2114],{"class":85},[68,12137,2411],{"class":92},[68,12139,2114],{"class":85},[68,12141,11628],{"class":872},[68,12143,6529],{"class":85},[68,12145,12146],{"class":70,"line":9632},[68,12147,6550],{"class":85},[68,12149,12150,12152,12154,12156,12159,12161,12164,12166],{"class":70,"line":9644},[68,12151,3586],{"class":102},[68,12153,8930],{"class":85},[68,12155,5802],{"class":102},[68,12157,12158],{"class":85},"(s1)",[68,12160,5808],{"class":102},[68,12162,12163],{"class":85},"(s1[",[68,12165,600],{"class":92},[68,12167,5455],{"class":85},[68,12169,12170,12173,12175,12178,12180,12183,12186,12188],{"class":70,"line":9656},[68,12171,12172],{"class":85},"    Sanguo ",[68,12174,2191],{"class":102},[68,12176,12177],{"class":85},"s ",[68,12179,869],{"class":102},[68,12181,12182],{"class":102}," &",[68,12184,12185],{"class":85},"s1[",[68,12187,600],{"class":92},[68,12189,6289],{"class":85},[68,12191,12192],{"class":70,"line":11314},[68,12193,12194],{"class":74},"    \u002F\u002F排序前：\n",[68,12196,12197,12199,12201,12204,12206],{"class":70,"line":11339},[68,12198,8128],{"class":85},[68,12200,2778],{"class":102},[68,12202,12203],{"class":872}," \"排序前：\"",[68,12205,3048],{"class":102},[68,12207,10439],{"class":85},[68,12209,12210,12212],{"class":70,"line":11362},[68,12211,11513],{"class":587},[68,12213,12214],{"class":85},"(s,len);\n",[68,12216,12217],{"class":70,"line":11386},[68,12218,12219],{"class":74},"    \u002F\u002F调用排序函数\n",[68,12221,12222,12224],{"class":70,"line":11391},[68,12223,9197],{"class":587},[68,12225,12214],{"class":85},[68,12227,12228],{"class":70,"line":11396},[68,12229,12230],{"class":74},"    \u002F\u002F排序后\n",[68,12232,12233,12235,12237,12240,12242],{"class":70,"line":11401},[68,12234,8128],{"class":85},[68,12236,2778],{"class":102},[68,12238,12239],{"class":872}," \"排序后：\"",[68,12241,3048],{"class":102},[68,12243,10439],{"class":85},[68,12245,12246,12248],{"class":70,"line":11410},[68,12247,11513],{"class":587},[68,12249,12214],{"class":85},[68,12251,12252],{"class":70,"line":11415},[68,12253,118],{"class":85},[19,12255,12256,12257,12259],{},"注意：使用指针时直接用传首地址**&s",[68,12258,600],{},"**",[1652,12261,12262],{},"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":63,"searchDepth":78,"depth":78,"links":12264},[12265,12266,12267,12268,12269,12270,12271],{"id":9302,"depth":78,"text":9303},{"id":9664,"depth":78,"text":9665},{"id":9933,"depth":78,"text":9934},{"id":10098,"depth":78,"text":10099},{"id":10314,"depth":78,"text":10315},{"id":10634,"depth":78,"text":10635},{"id":10862,"depth":78,"text":10863},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9291,"description":9299},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12278,"title":12279,"body":12280,"description":63,"extension":1677,"meta":13623,"navigation":1679,"path":13624,"seo":13625,"stem":13626,"__hash__":13627},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12281,"toc":13617},[12282,12285,12289,12295,12309,12314,12317,12321,12328,12334,12337,12344,12350,12355,12358,12361,12364,12928,12931,12945,12949,12954,12970,13110,13113,13119,13122,13127,13135,13243,13246,13251,13254,13259,13262,13268,13271,13614],[10,12283,12279],{"id":12284},"_5程序内存模型",[14,12286,12288],{"id":12287},"_51内存分区模型","5.1内存分区模型",[19,12290,12291,12292],{},"C++程序在执行时，将内存大方向划分为",[1890,12293,12294],{},"4个区域",[168,12296,12297,12300,12303,12306],{},[51,12298,12299],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[51,12301,12302],{},"全局区：存放全局变量和静态变量以及常量",[51,12304,12305],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[51,12307,12308],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12310,12311],{},[1890,12312,12313],{},"内存四区意义：",[19,12315,12316],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[43,12318,12320],{"id":12319},"_511程序运行前","5.1.1程序运行前",[19,12322,12323,12324,12327],{},"​\t在程序编译后，生成了exe可执行程序，",[1890,12325,12326],{},"未执行该程序前","分为两个区域",[19,12329,12330,12331],{},"​\t",[1890,12332,12333],{},"代码区：",[19,12335,12336],{},"​\t\t存放 CPU 执行的机器指令",[19,12338,12339,12340,12343],{},"​\t\t代码区是",[1890,12341,12342],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12345,12339,12346,12349],{},[1890,12347,12348],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12351,12330,12352],{},[1890,12353,12354],{},"全局区：",[19,12356,12357],{},"​\t\t全局变量和静态变量存放在此.",[19,12359,12360],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12362,12363],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[58,12365,12367],{"className":1740,"code":12366,"language":1742,"meta":63,"style":63},"\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",[65,12368,12369,12374,12387,12400,12404,12409,12424,12439,12443,12452,12456,12461,12474,12487,12491,12496,12522,12548,12552,12579,12605,12609,12614,12630,12645,12649,12675,12701,12705,12730,12755,12759,12785,12811,12815,12831,12846,12872,12898,12902,12912,12916,12924],{"__ignoreMap":63},[68,12370,12371],{"class":70,"line":71},[68,12372,12373],{"class":74},"\u002F\u002F全局变量\n",[68,12375,12376,12378,12381,12383,12385],{"class":70,"line":78},[68,12377,1754],{"class":102},[68,12379,12380],{"class":85}," g_a ",[68,12382,869],{"class":102},[68,12384,989],{"class":92},[68,12386,112],{"class":85},[68,12388,12389,12391,12394,12396,12398],{"class":70,"line":89},[68,12390,1754],{"class":102},[68,12392,12393],{"class":85}," g_b ",[68,12395,869],{"class":102},[68,12397,989],{"class":92},[68,12399,112],{"class":85},[68,12401,12402],{"class":70,"line":115},[68,12403,4000],{"emptyLinePlaceholder":1679},[68,12405,12406],{"class":70,"line":280},[68,12407,12408],{"class":74},"\u002F\u002F全局常量\n",[68,12410,12411,12413,12415,12418,12420,12422],{"class":70,"line":301},[68,12412,8391],{"class":102},[68,12414,3982],{"class":102},[68,12416,12417],{"class":85}," c_g_a ",[68,12419,869],{"class":102},[68,12421,989],{"class":92},[68,12423,112],{"class":85},[68,12425,12426,12428,12430,12433,12435,12437],{"class":70,"line":320},[68,12427,8391],{"class":102},[68,12429,3982],{"class":102},[68,12431,12432],{"class":85}," c_g_b ",[68,12434,869],{"class":102},[68,12436,989],{"class":92},[68,12438,112],{"class":85},[68,12440,12441],{"class":70,"line":2915},[68,12442,4000],{"emptyLinePlaceholder":1679},[68,12444,12445,12447,12449],{"class":70,"line":2921},[68,12446,1754],{"class":102},[68,12448,3574],{"class":587},[68,12450,12451],{"class":85},"() {\n",[68,12453,12454],{"class":70,"line":2933},[68,12455,4000],{"emptyLinePlaceholder":1679},[68,12457,12458],{"class":70,"line":3214},[68,12459,12460],{"class":74},"    \u002F\u002F局部变量\n",[68,12462,12463,12465,12468,12470,12472],{"class":70,"line":3219},[68,12464,3586],{"class":102},[68,12466,12467],{"class":85}," a ",[68,12469,869],{"class":102},[68,12471,989],{"class":92},[68,12473,112],{"class":85},[68,12475,12476,12478,12481,12483,12485],{"class":70,"line":3225},[68,12477,3586],{"class":102},[68,12479,12480],{"class":85}," b ",[68,12482,869],{"class":102},[68,12484,989],{"class":92},[68,12486,112],{"class":85},[68,12488,12489],{"class":70,"line":3230},[68,12490,4000],{"emptyLinePlaceholder":1679},[68,12492,12493],{"class":70,"line":3244},[68,12494,12495],{"class":74},"    \u002F\u002F打印地址\n",[68,12497,12498,12500,12502,12505,12507,12509,12511,12513,12515,12518,12520],{"class":70,"line":3249},[68,12499,8128],{"class":85},[68,12501,2778],{"class":102},[68,12503,12504],{"class":872}," \"局部变量a地址为： \"",[68,12506,3048],{"class":102},[68,12508,3260],{"class":85},[68,12510,1754],{"class":102},[68,12512,2165],{"class":85},[68,12514,2089],{"class":102},[68,12516,12517],{"class":85},"a ",[68,12519,2778],{"class":102},[68,12521,10439],{"class":85},[68,12523,12524,12526,12528,12531,12533,12535,12537,12539,12541,12544,12546],{"class":70,"line":3255},[68,12525,8128],{"class":85},[68,12527,2778],{"class":102},[68,12529,12530],{"class":872}," \"局部变量b地址为： \"",[68,12532,3048],{"class":102},[68,12534,3260],{"class":85},[68,12536,1754],{"class":102},[68,12538,2165],{"class":85},[68,12540,2089],{"class":102},[68,12542,12543],{"class":85},"b ",[68,12545,2778],{"class":102},[68,12547,10439],{"class":85},[68,12549,12550],{"class":70,"line":3276},[68,12551,4000],{"emptyLinePlaceholder":1679},[68,12553,12554,12556,12558,12561,12563,12566,12568,12570,12572,12575,12577],{"class":70,"line":3281},[68,12555,8128],{"class":85},[68,12557,2778],{"class":102},[68,12559,12560],{"class":872}," \"全局变量g_a地址为： \"",[68,12562,3048],{"class":102},[68,12564,12565],{"class":85},"  (",[68,12567,1754],{"class":102},[68,12569,2165],{"class":85},[68,12571,2089],{"class":102},[68,12573,12574],{"class":85},"g_a ",[68,12576,2778],{"class":102},[68,12578,10439],{"class":85},[68,12580,12581,12583,12585,12588,12590,12592,12594,12596,12598,12601,12603],{"class":70,"line":3295},[68,12582,8128],{"class":85},[68,12584,2778],{"class":102},[68,12586,12587],{"class":872}," \"全局变量g_b地址为： \"",[68,12589,3048],{"class":102},[68,12591,12565],{"class":85},[68,12593,1754],{"class":102},[68,12595,2165],{"class":85},[68,12597,2089],{"class":102},[68,12599,12600],{"class":85},"g_b ",[68,12602,2778],{"class":102},[68,12604,10439],{"class":85},[68,12606,12607],{"class":70,"line":3300},[68,12608,4000],{"emptyLinePlaceholder":1679},[68,12610,12611],{"class":70,"line":3329},[68,12612,12613],{"class":74},"    \u002F\u002F静态变量\n",[68,12615,12616,12619,12621,12624,12626,12628],{"class":70,"line":3334},[68,12617,12618],{"class":102},"    static",[68,12620,3982],{"class":102},[68,12622,12623],{"class":85}," s_a ",[68,12625,869],{"class":102},[68,12627,989],{"class":92},[68,12629,112],{"class":85},[68,12631,12632,12634,12636,12639,12641,12643],{"class":70,"line":3351},[68,12633,12618],{"class":102},[68,12635,3982],{"class":102},[68,12637,12638],{"class":85}," s_b ",[68,12640,869],{"class":102},[68,12642,989],{"class":92},[68,12644,112],{"class":85},[68,12646,12647],{"class":70,"line":3356},[68,12648,4000],{"emptyLinePlaceholder":1679},[68,12650,12651,12653,12655,12658,12660,12662,12664,12666,12668,12671,12673],{"class":70,"line":3361},[68,12652,8128],{"class":85},[68,12654,2778],{"class":102},[68,12656,12657],{"class":872}," \"静态变量s_a地址为： \"",[68,12659,3048],{"class":102},[68,12661,3260],{"class":85},[68,12663,1754],{"class":102},[68,12665,2165],{"class":85},[68,12667,2089],{"class":102},[68,12669,12670],{"class":85},"s_a ",[68,12672,2778],{"class":102},[68,12674,10439],{"class":85},[68,12676,12677,12679,12681,12684,12686,12688,12690,12692,12694,12697,12699],{"class":70,"line":3366},[68,12678,8128],{"class":85},[68,12680,2778],{"class":102},[68,12682,12683],{"class":872}," \"静态变量s_b地址为： \"",[68,12685,3048],{"class":102},[68,12687,3260],{"class":85},[68,12689,1754],{"class":102},[68,12691,2165],{"class":85},[68,12693,2089],{"class":102},[68,12695,12696],{"class":85},"s_b ",[68,12698,2778],{"class":102},[68,12700,10439],{"class":85},[68,12702,12703],{"class":70,"line":3380},[68,12704,4000],{"emptyLinePlaceholder":1679},[68,12706,12707,12709,12711,12714,12716,12718,12720,12722,12724,12726,12728],{"class":70,"line":3385},[68,12708,8128],{"class":85},[68,12710,2778],{"class":102},[68,12712,12713],{"class":872}," \"字符串常量地址为： \"",[68,12715,3048],{"class":102},[68,12717,3260],{"class":85},[68,12719,1754],{"class":102},[68,12721,2165],{"class":85},[68,12723,2089],{"class":102},[68,12725,2795],{"class":872},[68,12727,3048],{"class":102},[68,12729,10439],{"class":85},[68,12731,12732,12734,12736,12738,12740,12742,12744,12746,12748,12751,12753],{"class":70,"line":4177},[68,12733,8128],{"class":85},[68,12735,2778],{"class":102},[68,12737,12713],{"class":872},[68,12739,3048],{"class":102},[68,12741,3260],{"class":85},[68,12743,1754],{"class":102},[68,12745,2165],{"class":85},[68,12747,2089],{"class":102},[68,12749,12750],{"class":872},"\"hello world1\"",[68,12752,3048],{"class":102},[68,12754,10439],{"class":85},[68,12756,12757],{"class":70,"line":4191},[68,12758,4000],{"emptyLinePlaceholder":1679},[68,12760,12761,12763,12765,12768,12770,12772,12774,12776,12778,12781,12783],{"class":70,"line":4199},[68,12762,8128],{"class":85},[68,12764,2778],{"class":102},[68,12766,12767],{"class":872}," \"全局常量c_g_a地址为： \"",[68,12769,3048],{"class":102},[68,12771,3260],{"class":85},[68,12773,1754],{"class":102},[68,12775,2165],{"class":85},[68,12777,2089],{"class":102},[68,12779,12780],{"class":85},"c_g_a ",[68,12782,2778],{"class":102},[68,12784,10439],{"class":85},[68,12786,12787,12789,12791,12794,12796,12798,12800,12802,12804,12807,12809],{"class":70,"line":4204},[68,12788,8128],{"class":85},[68,12790,2778],{"class":102},[68,12792,12793],{"class":872}," \"全局常量c_g_b地址为： \"",[68,12795,3048],{"class":102},[68,12797,3260],{"class":85},[68,12799,1754],{"class":102},[68,12801,2165],{"class":85},[68,12803,2089],{"class":102},[68,12805,12806],{"class":85},"c_g_b ",[68,12808,2778],{"class":102},[68,12810,10439],{"class":85},[68,12812,12813],{"class":70,"line":4210},[68,12814,4000],{"emptyLinePlaceholder":1679},[68,12816,12817,12820,12822,12825,12827,12829],{"class":70,"line":4216},[68,12818,12819],{"class":102},"    const",[68,12821,3982],{"class":102},[68,12823,12824],{"class":85}," c_l_a ",[68,12826,869],{"class":102},[68,12828,989],{"class":92},[68,12830,112],{"class":85},[68,12832,12833,12835,12837,12840,12842,12844],{"class":70,"line":4221},[68,12834,12819],{"class":102},[68,12836,3982],{"class":102},[68,12838,12839],{"class":85}," c_l_b ",[68,12841,869],{"class":102},[68,12843,989],{"class":92},[68,12845,112],{"class":85},[68,12847,12848,12850,12852,12855,12857,12859,12861,12863,12865,12868,12870],{"class":70,"line":9547},[68,12849,8128],{"class":85},[68,12851,2778],{"class":102},[68,12853,12854],{"class":872}," \"局部常量c_l_a地址为： \"",[68,12856,3048],{"class":102},[68,12858,3260],{"class":85},[68,12860,1754],{"class":102},[68,12862,2165],{"class":85},[68,12864,2089],{"class":102},[68,12866,12867],{"class":85},"c_l_a ",[68,12869,2778],{"class":102},[68,12871,10439],{"class":85},[68,12873,12874,12876,12878,12881,12883,12885,12887,12889,12891,12894,12896],{"class":70,"line":9571},[68,12875,8128],{"class":85},[68,12877,2778],{"class":102},[68,12879,12880],{"class":872}," \"局部常量c_l_b地址为： \"",[68,12882,3048],{"class":102},[68,12884,3260],{"class":85},[68,12886,1754],{"class":102},[68,12888,2165],{"class":85},[68,12890,2089],{"class":102},[68,12892,12893],{"class":85},"c_l_b ",[68,12895,2778],{"class":102},[68,12897,10439],{"class":85},[68,12899,12900],{"class":70,"line":9576},[68,12901,4000],{"emptyLinePlaceholder":1679},[68,12903,12904,12906,12908,12910],{"class":70,"line":9582},[68,12905,3903],{"class":587},[68,12907,997],{"class":85},[68,12909,3908],{"class":872},[68,12911,1016],{"class":85},[68,12913,12914],{"class":70,"line":9609},[68,12915,4000],{"emptyLinePlaceholder":1679},[68,12917,12918,12920,12922],{"class":70,"line":9614},[68,12919,5689],{"class":102},[68,12921,5692],{"class":92},[68,12923,112],{"class":85},[68,12925,12926],{"class":70,"line":9620},[68,12927,118],{"class":85},[19,12929,12930],{},"总结：",[168,12932,12933,12936,12939,12942],{},[51,12934,12935],{},"c++中程序运行前分为全局区和代码区",[51,12937,12938],{},"代码区特点是共享和只读",[51,12940,12941],{},"全局区中存放全局变量、静态变量、常量",[51,12943,12944],{},"常量区中存放const修饰的全局常量和字符串常量",[43,12946,12948],{"id":12947},"_512程序运行后","5.1.2程序运行后",[48,12950,12951],{},[51,12952,12953],{},"栈区：",[168,12955,12956,12963],{},[51,12957,12958,12959,12962],{},"由编译器自动分配释放, 存放",[1890,12960,12961],{},"函数的参数值,局部变量","等",[51,12964,12965,12966,12969],{},"注意事项：",[1890,12967,12968],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[58,12971,12973],{"className":1740,"code":12972,"language":1742,"meta":63,"style":63},"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",[65,12974,12975,12986,12990,13005,13017,13021,13025,13033,13038,13053,13071,13088,13098,13106],{"__ignoreMap":63},[68,12976,12977,12979,12981,12984],{"class":70,"line":71},[68,12978,1754],{"class":102},[68,12980,8117],{"class":102},[68,12982,12983],{"class":587}," func",[68,12985,3577],{"class":85},[68,12987,12988],{"class":70,"line":78},[68,12989,3149],{"class":85},[68,12991,12992,12994,12996,12998,13000,13002],{"class":70,"line":89},[68,12993,3586],{"class":102},[68,12995,12467],{"class":85},[68,12997,869],{"class":102},[68,12999,989],{"class":92},[68,13001,1804],{"class":85},[68,13003,13004],{"class":74}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[68,13006,13007,13009,13011,13014],{"class":70,"line":115},[68,13008,5689],{"class":102},[68,13010,12182],{"class":102},[68,13012,13013],{"class":85},"a;",[68,13015,13016],{"class":74}," \u002F\u002F放回局部变量的地址\n",[68,13018,13019],{"class":70,"line":280},[68,13020,118],{"class":85},[68,13022,13023],{"class":70,"line":301},[68,13024,4000],{"emptyLinePlaceholder":1679},[68,13026,13027,13029,13031],{"class":70,"line":320},[68,13028,1754],{"class":102},[68,13030,3574],{"class":587},[68,13032,12451],{"class":85},[68,13034,13035],{"class":70,"line":2915},[68,13036,13037],{"class":74},"    \u002F\u002F接受func的返回值\n",[68,13039,13040,13042,13044,13047,13049,13051],{"class":70,"line":2921},[68,13041,3586],{"class":102},[68,13043,8117],{"class":102},[68,13045,13046],{"class":85},"p ",[68,13048,869],{"class":102},[68,13050,12983],{"class":587},[68,13052,7235],{"class":85},[68,13054,13055,13057,13059,13061,13063,13065,13068],{"class":70,"line":2933},[68,13056,8128],{"class":85},[68,13058,2778],{"class":102},[68,13060,8117],{"class":102},[68,13062,13046],{"class":85},[68,13064,2778],{"class":102},[68,13066,13067],{"class":85}," endl;",[68,13069,13070],{"class":74}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[68,13072,13073,13075,13077,13079,13081,13083,13085],{"class":70,"line":3214},[68,13074,8128],{"class":85},[68,13076,2778],{"class":102},[68,13078,8117],{"class":102},[68,13080,13046],{"class":85},[68,13082,2778],{"class":102},[68,13084,13067],{"class":85},[68,13086,13087],{"class":74}," \u002F\u002F第二次这个数据不再保留\n",[68,13089,13090,13092,13094,13096],{"class":70,"line":3219},[68,13091,3903],{"class":587},[68,13093,997],{"class":85},[68,13095,3908],{"class":872},[68,13097,1016],{"class":85},[68,13099,13100,13102,13104],{"class":70,"line":3225},[68,13101,5689],{"class":102},[68,13103,5692],{"class":92},[68,13105,112],{"class":85},[68,13107,13108],{"class":70,"line":3230},[68,13109,118],{"class":85},[19,13111,13112],{},"输出结果：",[19,13114,13115],{},[38,13116],{"alt":13117,"src":13118},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13120,13121],{},"总结：不要返回局部变量的地址",[48,13123,13124],{"start":78},[51,13125,13126],{},"堆区",[168,13128,13129,13132],{},[51,13130,13131],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[51,13133,13134],{},"在c++中主要利用new在堆区开辟内存",[58,13136,13138],{"className":1740,"code":13137,"language":1742,"meta":63,"style":63},"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",[65,13139,13140,13155,13159,13164,13185,13192,13196,13204,13208,13213,13227,13239],{"__ignoreMap":63},[68,13141,13142,13144,13147,13150,13152],{"class":70,"line":71},[68,13143,1754],{"class":102},[68,13145,13146],{"class":102},"  *",[68,13148,13149],{"class":587},"func",[68,13151,4027],{"class":85},[68,13153,13154],{"class":74},"  \u002F\u002F函数返回指针\n",[68,13156,13157],{"class":70,"line":78},[68,13158,3149],{"class":85},[68,13160,13161],{"class":70,"line":89},[68,13162,13163],{"class":74},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[68,13165,13166,13168,13170,13172,13174,13177,13179,13181,13183],{"class":70,"line":115},[68,13167,5746],{"class":102},[68,13169,8117],{"class":102},[68,13171,19],{"class":85},[68,13173,869],{"class":102},[68,13175,13176],{"class":102}," new",[68,13178,3982],{"class":102},[68,13180,997],{"class":85},[68,13182,2182],{"class":92},[68,13184,1016],{"class":85},[68,13186,13187,13189],{"class":70,"line":280},[68,13188,5980],{"class":102},[68,13190,13191],{"class":85}," p;\n",[68,13193,13194],{"class":70,"line":301},[68,13195,118],{"class":85},[68,13197,13198,13200,13202],{"class":70,"line":320},[68,13199,1754],{"class":102},[68,13201,3574],{"class":587},[68,13203,3577],{"class":85},[68,13205,13206],{"class":70,"line":2915},[68,13207,3149],{"class":85},[68,13209,13210],{"class":70,"line":2921},[68,13211,13212],{"class":74},"    \u002F\u002F在堆区开辟数据\n",[68,13214,13215,13217,13219,13221,13223,13225],{"class":70,"line":2933},[68,13216,3586],{"class":102},[68,13218,8117],{"class":102},[68,13220,19],{"class":85},[68,13222,869],{"class":102},[68,13224,13149],{"class":587},[68,13226,7235],{"class":85},[68,13228,13229,13231,13233,13235,13237],{"class":70,"line":3214},[68,13230,3154],{"class":85},[68,13232,8018],{"class":102},[68,13234,19],{"class":85},[68,13236,2778],{"class":102},[68,13238,2800],{"class":85},[68,13240,13241],{"class":70,"line":3219},[68,13242,118],{"class":85},[19,13244,13245],{},"图片展示：",[19,13247,13248],{},[38,13249],{"alt":13117,"src":13250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13252,13253],{},"堆区内存由程序员管生死！！！",[48,13255,13256],{"start":89},[51,13257,13258],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13260,13261],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13263,13264,13265],{},"​语法：",[65,13266,13267],{}," new 数据类型",[19,13269,13270],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[58,13272,13274],{"className":1740,"code":13273,"language":1742,"meta":63,"style":63},"\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",[65,13275,13276,13281,13291,13295,13300,13305,13327,13331,13339,13343,13357,13369,13381,13393,13398,13403,13414,13418,13423,13431,13435,13440,13462,13488,13492,13510,13514,13540,13544,13556,13560,13565,13570,13578,13582,13586,13594,13598,13604,13610],{"__ignoreMap":63},[68,13277,13278],{"class":70,"line":71},[68,13279,13280],{"class":74},"\u002F\u002F1.new的基本语法\n",[68,13282,13283,13285,13287,13289],{"class":70,"line":78},[68,13284,1754],{"class":102},[68,13286,8117],{"class":102},[68,13288,13149],{"class":587},[68,13290,3577],{"class":85},[68,13292,13293],{"class":70,"line":89},[68,13294,3149],{"class":85},[68,13296,13297],{"class":70,"line":115},[68,13298,13299],{"class":74},"    \u002F\u002F在堆区创建整型数据\n",[68,13301,13302],{"class":70,"line":280},[68,13303,13304],{"class":74},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[68,13306,13307,13309,13311,13313,13316,13318,13320,13322,13324],{"class":70,"line":301},[68,13308,3586],{"class":102},[68,13310,8117],{"class":102},[68,13312,19],{"class":85},[68,13314,13315],{"class":102},"=new",[68,13317,3982],{"class":102},[68,13319,997],{"class":85},[68,13321,2182],{"class":92},[68,13323,7565],{"class":85},[68,13325,13326],{"class":74},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[68,13328,13329],{"class":70,"line":320},[68,13330,118],{"class":85},[68,13332,13333,13335,13337],{"class":70,"line":2915},[68,13334,6963],{"class":102},[68,13336,7187],{"class":587},[68,13338,3577],{"class":85},[68,13340,13341],{"class":70,"line":2921},[68,13342,3149],{"class":85},[68,13344,13345,13347,13349,13351,13353,13355],{"class":70,"line":2933},[68,13346,3586],{"class":102},[68,13348,8117],{"class":102},[68,13350,19],{"class":85},[68,13352,869],{"class":102},[68,13354,13149],{"class":587},[68,13356,7235],{"class":85},[68,13358,13359,13361,13363,13365,13367],{"class":70,"line":3214},[68,13360,3154],{"class":85},[68,13362,8018],{"class":102},[68,13364,19],{"class":85},[68,13366,2778],{"class":102},[68,13368,2800],{"class":85},[68,13370,13371,13373,13375,13377,13379],{"class":70,"line":3219},[68,13372,3154],{"class":85},[68,13374,8018],{"class":102},[68,13376,19],{"class":85},[68,13378,2778],{"class":102},[68,13380,2800],{"class":85},[68,13382,13383,13385,13387,13389,13391],{"class":70,"line":3225},[68,13384,3154],{"class":85},[68,13386,8018],{"class":102},[68,13388,19],{"class":85},[68,13390,2778],{"class":102},[68,13392,2800],{"class":85},[68,13394,13395],{"class":70,"line":3230},[68,13396,13397],{"class":74},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[68,13399,13400],{"class":70,"line":3244},[68,13401,13402],{"class":74},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[68,13404,13405,13408,13411],{"class":70,"line":3249},[68,13406,13407],{"class":102},"    delete",[68,13409,13410],{"class":85}," p;",[68,13412,13413],{"class":74},"\u002F\u002F删除这块地址\n",[68,13415,13416],{"class":70,"line":3255},[68,13417,118],{"class":85},[68,13419,13420],{"class":70,"line":3276},[68,13421,13422],{"class":74},"\u002F\u002F2.在堆区利用new开辟数组\n",[68,13424,13425,13427,13429],{"class":70,"line":3281},[68,13426,6963],{"class":102},[68,13428,7256],{"class":587},[68,13430,3577],{"class":85},[68,13432,13433],{"class":70,"line":3295},[68,13434,3149],{"class":85},[68,13436,13437],{"class":70,"line":3300},[68,13438,13439],{"class":74},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[68,13441,13442,13444,13446,13448,13450,13452,13454,13456,13459],{"class":70,"line":3329},[68,13443,3586],{"class":102},[68,13445,8117],{"class":102},[68,13447,5479],{"class":85},[68,13449,13315],{"class":102},[68,13451,3982],{"class":102},[68,13453,2626],{"class":85},[68,13455,2182],{"class":92},[68,13457,13458],{"class":85},"];",[68,13460,13461],{"class":74},"\u002F\u002F10代表数组有10个元素\n",[68,13463,13464,13466,13468,13470,13472,13474,13476,13478,13480,13482,13484,13486],{"class":70,"line":3334},[68,13465,4800],{"class":102},[68,13467,3260],{"class":85},[68,13469,1754],{"class":102},[68,13471,4631],{"class":85},[68,13473,869],{"class":102},[68,13475,600],{"class":92},[68,13477,4638],{"class":85},[68,13479,861],{"class":102},[68,13481,2182],{"class":92},[68,13483,4638],{"class":85},[68,13485,3892],{"class":102},[68,13487,1757],{"class":85},[68,13489,13490],{"class":70,"line":3351},[68,13491,3631],{"class":85},[68,13493,13494,13497,13499,13501,13503,13505,13507],{"class":70,"line":3356},[68,13495,13496],{"class":85},"        arr[i]",[68,13498,869],{"class":102},[68,13500,2177],{"class":85},[68,13502,2217],{"class":102},[68,13504,2047],{"class":92},[68,13506,1804],{"class":85},[68,13508,13509],{"class":74},"\u002F\u002F给10个元素赋值100～109\n",[68,13511,13512],{"class":70,"line":3361},[68,13513,3787],{"class":85},[68,13515,13516,13518,13520,13522,13524,13526,13528,13530,13532,13534,13536,13538],{"class":70,"line":3366},[68,13517,4800],{"class":102},[68,13519,3260],{"class":85},[68,13521,1754],{"class":102},[68,13523,4631],{"class":85},[68,13525,869],{"class":102},[68,13527,600],{"class":92},[68,13529,4638],{"class":85},[68,13531,861],{"class":102},[68,13533,2182],{"class":92},[68,13535,4638],{"class":85},[68,13537,3892],{"class":102},[68,13539,1757],{"class":85},[68,13541,13542],{"class":70,"line":3380},[68,13543,3631],{"class":85},[68,13545,13546,13548,13550,13552,13554],{"class":70,"line":3385},[68,13547,5050],{"class":85},[68,13549,2778],{"class":102},[68,13551,5953],{"class":85},[68,13553,2778],{"class":102},[68,13555,2800],{"class":85},[68,13557,13558],{"class":70,"line":4177},[68,13559,3787],{"class":85},[68,13561,13562],{"class":70,"line":4191},[68,13563,13564],{"class":74},"    \u002F\u002F释放堆区数组\n",[68,13566,13567],{"class":70,"line":4199},[68,13568,13569],{"class":74},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[68,13571,13572,13575],{"class":70,"line":4204},[68,13573,13574],{"class":102},"    delete[]",[68,13576,13577],{"class":85}," arr;\n",[68,13579,13580],{"class":70,"line":4210},[68,13581,118],{"class":85},[68,13583,13584],{"class":70,"line":4216},[68,13585,4000],{"emptyLinePlaceholder":1679},[68,13587,13588,13590,13592],{"class":70,"line":4221},[68,13589,1754],{"class":102},[68,13591,3574],{"class":587},[68,13593,3577],{"class":85},[68,13595,13596],{"class":70,"line":9547},[68,13597,3149],{"class":85},[68,13599,13600,13602],{"class":70,"line":9571},[68,13601,7232],{"class":587},[68,13603,7235],{"class":85},[68,13605,13606,13608],{"class":70,"line":9576},[68,13607,7301],{"class":587},[68,13609,7235],{"class":85},[68,13611,13612],{"class":70,"line":9582},[68,13613,118],{"class":85},[1652,13615,13616],{},"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":63,"searchDepth":78,"depth":78,"links":13618},[13619],{"id":12287,"depth":78,"text":12288,"children":13620},[13621,13622],{"id":12319,"depth":89,"text":12320},{"id":12947,"depth":89,"text":12948},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12279,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13629,"title":13630,"body":13631,"description":63,"extension":1677,"meta":15111,"navigation":1679,"path":15112,"seo":15113,"stem":15114,"__hash__":15115},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13632,"toc":15103},[13633,13636,13640,13643,13646,13815,13819,13824,13841,13846,13998,14002,14005,14008,14401,14405,14408,14413,14416,14728,14732,14738,14898,14900,14908,14912,14915,14922,15100],[10,13634,13630],{"id":13635},"_6引用",[14,13637,13639],{"id":13638},"_61引用基本用法","6.1引用基本用法",[19,13641,13642],{},"引用的本质：给变量起别名",[19,13644,13645],{},"语法：数据类型 &别名=原名",[58,13647,13649],{"className":1740,"code":13648,"language":1742,"meta":63,"style":63},"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",[65,13650,13651,13659,13663,13675,13687,13691,13710,13729,13733,13744,13748,13767,13785,13789,13799,13803,13811],{"__ignoreMap":63},[68,13652,13653,13655,13657],{"class":70,"line":71},[68,13654,1754],{"class":102},[68,13656,3574],{"class":587},[68,13658,12451],{"class":85},[68,13660,13661],{"class":70,"line":78},[68,13662,4000],{"emptyLinePlaceholder":1679},[68,13664,13665,13667,13669,13671,13673],{"class":70,"line":89},[68,13666,3586],{"class":102},[68,13668,12467],{"class":85},[68,13670,869],{"class":102},[68,13672,989],{"class":92},[68,13674,112],{"class":85},[68,13676,13677,13679,13681,13683,13685],{"class":70,"line":115},[68,13678,3586],{"class":102},[68,13680,12182],{"class":102},[68,13682,12543],{"class":85},[68,13684,869],{"class":102},[68,13686,3036],{"class":85},[68,13688,13689],{"class":70,"line":280},[68,13690,4000],{"emptyLinePlaceholder":1679},[68,13692,13693,13695,13697,13700,13702,13704,13706,13708],{"class":70,"line":301},[68,13694,8128],{"class":85},[68,13696,2778],{"class":102},[68,13698,13699],{"class":872}," \"a = \"",[68,13701,3048],{"class":102},[68,13703,12467],{"class":85},[68,13705,2778],{"class":102},[68,13707,13067],{"class":85},[68,13709,8867],{"class":74},[68,13711,13712,13714,13716,13719,13721,13723,13725,13727],{"class":70,"line":320},[68,13713,8128],{"class":85},[68,13715,2778],{"class":102},[68,13717,13718],{"class":872}," \"b = \"",[68,13720,3048],{"class":102},[68,13722,12480],{"class":85},[68,13724,2778],{"class":102},[68,13726,13067],{"class":85},[68,13728,8867],{"class":74},[68,13730,13731],{"class":70,"line":2915},[68,13732,4000],{"emptyLinePlaceholder":1679},[68,13734,13735,13738,13740,13742],{"class":70,"line":2921},[68,13736,13737],{"class":85},"    b ",[68,13739,869],{"class":102},[68,13741,7353],{"class":92},[68,13743,112],{"class":85},[68,13745,13746],{"class":70,"line":2933},[68,13747,4000],{"emptyLinePlaceholder":1679},[68,13749,13750,13752,13754,13756,13758,13760,13762,13764],{"class":70,"line":3214},[68,13751,8128],{"class":85},[68,13753,2778],{"class":102},[68,13755,13699],{"class":872},[68,13757,3048],{"class":102},[68,13759,12467],{"class":85},[68,13761,2778],{"class":102},[68,13763,13067],{"class":85},[68,13765,13766],{"class":74},"\u002F\u002F100\n",[68,13768,13769,13771,13773,13775,13777,13779,13781,13783],{"class":70,"line":3219},[68,13770,8128],{"class":85},[68,13772,2778],{"class":102},[68,13774,13718],{"class":872},[68,13776,3048],{"class":102},[68,13778,12480],{"class":85},[68,13780,2778],{"class":102},[68,13782,13067],{"class":85},[68,13784,13766],{"class":74},[68,13786,13787],{"class":70,"line":3225},[68,13788,4000],{"emptyLinePlaceholder":1679},[68,13790,13791,13793,13795,13797],{"class":70,"line":3230},[68,13792,3903],{"class":587},[68,13794,997],{"class":85},[68,13796,3908],{"class":872},[68,13798,1016],{"class":85},[68,13800,13801],{"class":70,"line":3244},[68,13802,4000],{"emptyLinePlaceholder":1679},[68,13804,13805,13807,13809],{"class":70,"line":3249},[68,13806,5689],{"class":102},[68,13808,5692],{"class":92},[68,13810,112],{"class":85},[68,13812,13813],{"class":70,"line":3255},[68,13814,118],{"class":85},[14,13816,13818],{"id":13817},"_62引用的注意事项","6.2引用的注意事项",[48,13820,13821],{},[51,13822,13823],{},"引用必须要初始化",[58,13825,13827],{"className":1740,"code":13826,"language":1742,"meta":63,"style":63},"int &b;\u002F\u002F非常错误！\n",[65,13828,13829],{"__ignoreMap":63},[68,13830,13831,13833,13835,13838],{"class":70,"line":71},[68,13832,1754],{"class":102},[68,13834,12182],{"class":102},[68,13836,13837],{"class":85},"b;",[68,13839,13840],{"class":74},"\u002F\u002F非常错误！\n",[48,13842,13843],{"start":78},[51,13844,13845],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[58,13847,13849],{"className":1740,"code":13848,"language":1742,"meta":63,"style":63},"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",[65,13850,13851,13859,13871,13883,13891,13907,13920,13938,13956,13976,13986,13994],{"__ignoreMap":63},[68,13852,13853,13855,13857],{"class":70,"line":71},[68,13854,1754],{"class":102},[68,13856,3574],{"class":587},[68,13858,12451],{"class":85},[68,13860,13861,13863,13865,13867,13869],{"class":70,"line":78},[68,13862,3586],{"class":102},[68,13864,12467],{"class":85},[68,13866,869],{"class":102},[68,13868,989],{"class":92},[68,13870,112],{"class":85},[68,13872,13873,13875,13877,13879,13881],{"class":70,"line":89},[68,13874,3586],{"class":102},[68,13876,12480],{"class":85},[68,13878,869],{"class":102},[68,13880,10549],{"class":92},[68,13882,112],{"class":85},[68,13884,13885,13888],{"class":70,"line":115},[68,13886,13887],{"class":74},"    \u002F\u002Fint &c;",[68,13889,13890],{"class":74}," \u002F\u002F错误，引用必须初始化\n",[68,13892,13893,13895,13897,13899,13901,13904],{"class":70,"line":280},[68,13894,3586],{"class":102},[68,13896,12182],{"class":102},[68,13898,4545],{"class":85},[68,13900,869],{"class":102},[68,13902,13903],{"class":85}," a;",[68,13905,13906],{"class":74}," \u002F\u002F一旦初始化后，就不可以更改\n",[68,13908,13909,13912,13914,13917],{"class":70,"line":301},[68,13910,13911],{"class":85},"    c ",[68,13913,869],{"class":102},[68,13915,13916],{"class":85}," b;",[68,13918,13919],{"class":74}," \u002F\u002F这是赋值操作，不是更改引用\n",[68,13921,13922,13924,13926,13928,13930,13932,13934,13936],{"class":70,"line":320},[68,13923,8128],{"class":85},[68,13925,2778],{"class":102},[68,13927,13699],{"class":872},[68,13929,3048],{"class":102},[68,13931,12467],{"class":85},[68,13933,2778],{"class":102},[68,13935,13067],{"class":85},[68,13937,8852],{"class":74},[68,13939,13940,13942,13944,13946,13948,13950,13952,13954],{"class":70,"line":2915},[68,13941,8128],{"class":85},[68,13943,2778],{"class":102},[68,13945,13718],{"class":872},[68,13947,3048],{"class":102},[68,13949,12480],{"class":85},[68,13951,2778],{"class":102},[68,13953,13067],{"class":85},[68,13955,8852],{"class":74},[68,13957,13958,13960,13962,13965,13967,13970,13972,13974],{"class":70,"line":2921},[68,13959,8128],{"class":85},[68,13961,2778],{"class":102},[68,13963,13964],{"class":872}," \"c = \"",[68,13966,3048],{"class":102},[68,13968,13969],{"class":85}," c ",[68,13971,2778],{"class":102},[68,13973,13067],{"class":85},[68,13975,8852],{"class":74},[68,13977,13978,13980,13982,13984],{"class":70,"line":2933},[68,13979,3903],{"class":587},[68,13981,997],{"class":85},[68,13983,3908],{"class":872},[68,13985,1016],{"class":85},[68,13987,13988,13990,13992],{"class":70,"line":3214},[68,13989,5689],{"class":102},[68,13991,5692],{"class":92},[68,13993,112],{"class":85},[68,13995,13996],{"class":70,"line":3219},[68,13997,118],{"class":85},[14,13999,14001],{"id":14000},"_63引用做函数参数","6.3引用做函数参数",[19,14003,14004],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14006,14007],{},"优点：可以简化指针修改实参",[58,14009,14011],{"className":1740,"code":14010,"language":1742,"meta":63,"style":63},"\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",[65,14012,14013,14018,14040,14051,14061,14070,14074,14078,14083,14105,14117,14129,14139,14143,14147,14152,14174,14184,14192,14200,14204,14208,14216,14220,14232,14244,14248,14259,14285,14289,14309,14333,14337,14347,14371,14375,14385,14389,14397],{"__ignoreMap":63},[68,14014,14015],{"class":70,"line":71},[68,14016,14017],{"class":74},"\u002F\u002F1. 值传递\n",[68,14019,14020,14022,14025,14027,14029,14031,14033,14035,14037],{"class":70,"line":78},[68,14021,6963],{"class":102},[68,14023,14024],{"class":587}," mySwap01",[68,14026,997],{"class":85},[68,14028,1754],{"class":102},[68,14030,3002],{"class":6815},[68,14032,1002],{"class":85},[68,14034,1754],{"class":102},[68,14036,4432],{"class":6815},[68,14038,14039],{"class":85},") {\n",[68,14041,14042,14044,14047,14049],{"class":70,"line":89},[68,14043,3586],{"class":102},[68,14045,14046],{"class":85}," temp ",[68,14048,869],{"class":102},[68,14050,3036],{"class":85},[68,14052,14053,14056,14058],{"class":70,"line":115},[68,14054,14055],{"class":85},"    a ",[68,14057,869],{"class":102},[68,14059,14060],{"class":85}," b;\n",[68,14062,14063,14065,14067],{"class":70,"line":280},[68,14064,13737],{"class":85},[68,14066,869],{"class":102},[68,14068,14069],{"class":85}," temp;\n",[68,14071,14072],{"class":70,"line":301},[68,14073,118],{"class":85},[68,14075,14076],{"class":70,"line":320},[68,14077,4000],{"emptyLinePlaceholder":1679},[68,14079,14080],{"class":70,"line":2915},[68,14081,14082],{"class":74},"\u002F\u002F2. 地址传递\n",[68,14084,14085,14087,14090,14092,14095,14097,14099,14101,14103],{"class":70,"line":2921},[68,14086,6963],{"class":102},[68,14088,14089],{"class":587}," mySwap02",[68,14091,997],{"class":85},[68,14093,14094],{"class":102},"int*",[68,14096,3002],{"class":6815},[68,14098,1002],{"class":85},[68,14100,14094],{"class":102},[68,14102,4432],{"class":6815},[68,14104,14039],{"class":85},[68,14106,14107,14109,14111,14113,14115],{"class":70,"line":2933},[68,14108,3586],{"class":102},[68,14110,14046],{"class":85},[68,14112,869],{"class":102},[68,14114,8117],{"class":102},[68,14116,7796],{"class":85},[68,14118,14119,14121,14123,14125,14127],{"class":70,"line":3214},[68,14120,8002],{"class":102},[68,14122,12517],{"class":85},[68,14124,869],{"class":102},[68,14126,8117],{"class":102},[68,14128,7668],{"class":85},[68,14130,14131,14133,14135,14137],{"class":70,"line":3219},[68,14132,8002],{"class":102},[68,14134,12543],{"class":85},[68,14136,869],{"class":102},[68,14138,14069],{"class":85},[68,14140,14141],{"class":70,"line":3225},[68,14142,118],{"class":85},[68,14144,14145],{"class":70,"line":3230},[68,14146,4000],{"emptyLinePlaceholder":1679},[68,14148,14149],{"class":70,"line":3244},[68,14150,14151],{"class":74},"\u002F\u002F3. 引用传递\n",[68,14153,14154,14156,14159,14161,14164,14166,14168,14170,14172],{"class":70,"line":3249},[68,14155,6963],{"class":102},[68,14157,14158],{"class":587}," mySwap03",[68,14160,997],{"class":85},[68,14162,14163],{"class":102},"int&",[68,14165,3002],{"class":6815},[68,14167,1002],{"class":85},[68,14169,14163],{"class":102},[68,14171,4432],{"class":6815},[68,14173,14039],{"class":85},[68,14175,14176,14178,14180,14182],{"class":70,"line":3255},[68,14177,3586],{"class":102},[68,14179,14046],{"class":85},[68,14181,869],{"class":102},[68,14183,3036],{"class":85},[68,14185,14186,14188,14190],{"class":70,"line":3276},[68,14187,14055],{"class":85},[68,14189,869],{"class":102},[68,14191,14060],{"class":85},[68,14193,14194,14196,14198],{"class":70,"line":3281},[68,14195,13737],{"class":85},[68,14197,869],{"class":102},[68,14199,14069],{"class":85},[68,14201,14202],{"class":70,"line":3295},[68,14203,118],{"class":85},[68,14205,14206],{"class":70,"line":3300},[68,14207,4000],{"emptyLinePlaceholder":1679},[68,14209,14210,14212,14214],{"class":70,"line":3329},[68,14211,1754],{"class":102},[68,14213,3574],{"class":587},[68,14215,12451],{"class":85},[68,14217,14218],{"class":70,"line":3334},[68,14219,4000],{"emptyLinePlaceholder":1679},[68,14221,14222,14224,14226,14228,14230],{"class":70,"line":3351},[68,14223,3586],{"class":102},[68,14225,12467],{"class":85},[68,14227,869],{"class":102},[68,14229,989],{"class":92},[68,14231,112],{"class":85},[68,14233,14234,14236,14238,14240,14242],{"class":70,"line":3356},[68,14235,3586],{"class":102},[68,14237,12480],{"class":85},[68,14239,869],{"class":102},[68,14241,10549],{"class":92},[68,14243,112],{"class":85},[68,14245,14246],{"class":70,"line":3361},[68,14247,4000],{"emptyLinePlaceholder":1679},[68,14249,14250,14253,14256],{"class":70,"line":3366},[68,14251,14252],{"class":587},"    mySwap01",[68,14254,14255],{"class":85},"(a, b);",[68,14257,14258],{"class":74},"\u002F\u002F值传递，形参不会修饰实参\n",[68,14260,14261,14263,14265,14268,14270,14272,14274,14277,14279,14281,14283],{"class":70,"line":3380},[68,14262,8128],{"class":85},[68,14264,2778],{"class":102},[68,14266,14267],{"class":872}," \"a:\"",[68,14269,3048],{"class":102},[68,14271,12467],{"class":85},[68,14273,2778],{"class":102},[68,14275,14276],{"class":872}," \" b:\"",[68,14278,3048],{"class":102},[68,14280,12480],{"class":85},[68,14282,2778],{"class":102},[68,14284,10439],{"class":85},[68,14286,14287],{"class":70,"line":3385},[68,14288,4000],{"emptyLinePlaceholder":1679},[68,14290,14291,14294,14296,14298,14301,14303,14306],{"class":70,"line":4177},[68,14292,14293],{"class":587},"    mySwap02",[68,14295,997],{"class":85},[68,14297,2089],{"class":102},[68,14299,14300],{"class":85},"a, ",[68,14302,2089],{"class":102},[68,14304,14305],{"class":85},"b);",[68,14307,14308],{"class":74},"\u002F\u002F地址传递，形参会修饰实参\n",[68,14310,14311,14313,14315,14317,14319,14321,14323,14325,14327,14329,14331],{"class":70,"line":4191},[68,14312,8128],{"class":85},[68,14314,2778],{"class":102},[68,14316,14267],{"class":872},[68,14318,3048],{"class":102},[68,14320,12467],{"class":85},[68,14322,2778],{"class":102},[68,14324,14276],{"class":872},[68,14326,3048],{"class":102},[68,14328,12480],{"class":85},[68,14330,2778],{"class":102},[68,14332,10439],{"class":85},[68,14334,14335],{"class":70,"line":4199},[68,14336,4000],{"emptyLinePlaceholder":1679},[68,14338,14339,14342,14344],{"class":70,"line":4204},[68,14340,14341],{"class":587},"    mySwap03",[68,14343,14255],{"class":85},[68,14345,14346],{"class":74},"\u002F\u002F引用传递，形参会修饰实参\n",[68,14348,14349,14351,14353,14355,14357,14359,14361,14363,14365,14367,14369],{"class":70,"line":4210},[68,14350,8128],{"class":85},[68,14352,2778],{"class":102},[68,14354,14267],{"class":872},[68,14356,3048],{"class":102},[68,14358,12467],{"class":85},[68,14360,2778],{"class":102},[68,14362,14276],{"class":872},[68,14364,3048],{"class":102},[68,14366,12480],{"class":85},[68,14368,2778],{"class":102},[68,14370,10439],{"class":85},[68,14372,14373],{"class":70,"line":4216},[68,14374,4000],{"emptyLinePlaceholder":1679},[68,14376,14377,14379,14381,14383],{"class":70,"line":4221},[68,14378,3903],{"class":587},[68,14380,997],{"class":85},[68,14382,3908],{"class":872},[68,14384,1016],{"class":85},[68,14386,14387],{"class":70,"line":9547},[68,14388,4000],{"emptyLinePlaceholder":1679},[68,14390,14391,14393,14395],{"class":70,"line":9571},[68,14392,5689],{"class":102},[68,14394,5692],{"class":92},[68,14396,112],{"class":85},[68,14398,14399],{"class":70,"line":9576},[68,14400,118],{"class":85},[14,14402,14404],{"id":14403},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14406,14407],{},"作用：引用是可以作为函数的返回值存在的",[19,14409,1210,14410],{},[1890,14411,14412],{},"不要返回局部变量引用",[19,14414,14415],{},"用法：函数调用作为左值",[58,14417,14419],{"className":11539,"code":14418,"language":11541,"meta":63,"style":63},"\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",[65,14420,14421,14426,14434,14449,14455,14459,14463,14468,14476,14493,14499,14503,14507,14515,14519,14524,14538,14558,14577,14581,14586,14599,14619,14637,14641,14657,14661,14680,14698,14702,14712,14716,14724],{"__ignoreMap":63},[68,14422,14423],{"class":70,"line":71},[68,14424,14425],{"class":74},"\u002F\u002F返回局部变量引用\n",[68,14427,14428,14430,14432],{"class":70,"line":78},[68,14429,14163],{"class":102},[68,14431,7187],{"class":587},[68,14433,12451],{"class":85},[68,14435,14436,14438,14440,14442,14444,14446],{"class":70,"line":89},[68,14437,3586],{"class":102},[68,14439,12467],{"class":85},[68,14441,869],{"class":102},[68,14443,989],{"class":92},[68,14445,1804],{"class":85},[68,14447,14448],{"class":74}," \u002F\u002F局部变量\n",[68,14450,14451,14453],{"class":70,"line":115},[68,14452,5689],{"class":102},[68,14454,3036],{"class":85},[68,14456,14457],{"class":70,"line":280},[68,14458,118],{"class":85},[68,14460,14461],{"class":70,"line":301},[68,14462,4000],{"emptyLinePlaceholder":1679},[68,14464,14465],{"class":70,"line":320},[68,14466,14467],{"class":74},"\u002F\u002F返回静态变量引用\n",[68,14469,14470,14472,14474],{"class":70,"line":2915},[68,14471,14163],{"class":102},[68,14473,7256],{"class":587},[68,14475,12451],{"class":85},[68,14477,14478,14480,14482,14484,14486,14488,14490],{"class":70,"line":2921},[68,14479,12618],{"class":102},[68,14481,3982],{"class":102},[68,14483,12467],{"class":85},[68,14485,869],{"class":102},[68,14487,10549],{"class":92},[68,14489,1804],{"class":85},[68,14491,14492],{"class":74},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[68,14494,14495,14497],{"class":70,"line":2933},[68,14496,5689],{"class":102},[68,14498,3036],{"class":85},[68,14500,14501],{"class":70,"line":3214},[68,14502,118],{"class":85},[68,14504,14505],{"class":70,"line":3219},[68,14506,4000],{"emptyLinePlaceholder":1679},[68,14508,14509,14511,14513],{"class":70,"line":3225},[68,14510,1754],{"class":102},[68,14512,3574],{"class":587},[68,14514,12451],{"class":85},[68,14516,14517],{"class":70,"line":3230},[68,14518,4000],{"emptyLinePlaceholder":1679},[68,14520,14521],{"class":70,"line":3244},[68,14522,14523],{"class":74},"    \u002F\u002F不能返回局部变量的引用\n",[68,14525,14526,14529,14532,14534,14536],{"class":70,"line":3249},[68,14527,14528],{"class":102},"    int&",[68,14530,14531],{"class":85}," ref ",[68,14533,869],{"class":102},[68,14535,7187],{"class":587},[68,14537,7235],{"class":85},[68,14539,14540,14542,14544,14547,14549,14551,14553,14555],{"class":70,"line":3255},[68,14541,8128],{"class":85},[68,14543,2778],{"class":102},[68,14545,14546],{"class":872}," \"ref = \"",[68,14548,3048],{"class":102},[68,14550,14531],{"class":85},[68,14552,2778],{"class":102},[68,14554,13067],{"class":85},[68,14556,14557],{"class":74},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[68,14559,14560,14562,14564,14566,14568,14570,14572,14574],{"class":70,"line":3276},[68,14561,8128],{"class":85},[68,14563,2778],{"class":102},[68,14565,14546],{"class":872},[68,14567,3048],{"class":102},[68,14569,14531],{"class":85},[68,14571,2778],{"class":102},[68,14573,13067],{"class":85},[68,14575,14576],{"class":74},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[68,14578,14579],{"class":70,"line":3281},[68,14580,4000],{"emptyLinePlaceholder":1679},[68,14582,14583],{"class":70,"line":3295},[68,14584,14585],{"class":74},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[68,14587,14588,14590,14593,14595,14597],{"class":70,"line":3300},[68,14589,14528],{"class":102},[68,14591,14592],{"class":85}," ref2 ",[68,14594,869],{"class":102},[68,14596,7256],{"class":587},[68,14598,7235],{"class":85},[68,14600,14601,14603,14605,14608,14610,14612,14614,14616],{"class":70,"line":3329},[68,14602,8128],{"class":85},[68,14604,2778],{"class":102},[68,14606,14607],{"class":872}," \"ref2 = \"",[68,14609,3048],{"class":102},[68,14611,14592],{"class":85},[68,14613,2778],{"class":102},[68,14615,13067],{"class":85},[68,14617,14618],{"class":74}," \u002F\u002F20\n",[68,14620,14621,14623,14625,14627,14629,14631,14633,14635],{"class":70,"line":3334},[68,14622,8128],{"class":85},[68,14624,2778],{"class":102},[68,14626,14607],{"class":872},[68,14628,3048],{"class":102},[68,14630,14592],{"class":85},[68,14632,2778],{"class":102},[68,14634,13067],{"class":85},[68,14636,14618],{"class":74},[68,14638,14639],{"class":70,"line":3351},[68,14640,4000],{"emptyLinePlaceholder":1679},[68,14642,14643,14645,14648,14650,14652,14654],{"class":70,"line":3356},[68,14644,7301],{"class":587},[68,14646,14647],{"class":85},"() ",[68,14649,869],{"class":102},[68,14651,4598],{"class":92},[68,14653,1804],{"class":85},[68,14655,14656],{"class":74},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[68,14658,14659],{"class":70,"line":3361},[68,14660,4000],{"emptyLinePlaceholder":1679},[68,14662,14663,14665,14667,14669,14671,14673,14675,14677],{"class":70,"line":3366},[68,14664,8128],{"class":85},[68,14666,2778],{"class":102},[68,14668,14607],{"class":872},[68,14670,3048],{"class":102},[68,14672,14592],{"class":85},[68,14674,2778],{"class":102},[68,14676,13067],{"class":85},[68,14678,14679],{"class":74}," \u002F\u002F1000\n",[68,14681,14682,14684,14686,14688,14690,14692,14694,14696],{"class":70,"line":3380},[68,14683,8128],{"class":85},[68,14685,2778],{"class":102},[68,14687,14607],{"class":872},[68,14689,3048],{"class":102},[68,14691,14592],{"class":85},[68,14693,2778],{"class":102},[68,14695,13067],{"class":85},[68,14697,14679],{"class":74},[68,14699,14700],{"class":70,"line":3385},[68,14701,4000],{"emptyLinePlaceholder":1679},[68,14703,14704,14706,14708,14710],{"class":70,"line":4177},[68,14705,3903],{"class":587},[68,14707,997],{"class":85},[68,14709,3908],{"class":872},[68,14711,1016],{"class":85},[68,14713,14714],{"class":70,"line":4191},[68,14715,4000],{"emptyLinePlaceholder":1679},[68,14717,14718,14720,14722],{"class":70,"line":4199},[68,14719,5689],{"class":102},[68,14721,5692],{"class":92},[68,14723,112],{"class":85},[68,14725,14726],{"class":70,"line":4204},[68,14727,118],{"class":85},[14,14729,14731],{"id":14730},"_65引用的本质","6.5引用的本质",[19,14733,14734,14735],{},"本质：",[1890,14736,14737],{},"引用的本质在c++内部实现是一个指针常量.",[58,14739,14741],{"className":1740,"code":14740,"language":1742,"meta":63,"style":63},"\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",[65,14742,14743,14748,14764,14778,14782,14791,14803,14808,14813,14824,14837,14841,14857,14874,14878,14886,14894],{"__ignoreMap":63},[68,14744,14745],{"class":70,"line":71},[68,14746,14747],{"class":74},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[68,14749,14750,14752,14754,14756,14758,14761],{"class":70,"line":78},[68,14751,6963],{"class":102},[68,14753,12983],{"class":587},[68,14755,997],{"class":85},[68,14757,14163],{"class":102},[68,14759,14760],{"class":6815}," ref",[68,14762,14763],{"class":85},"){\n",[68,14765,14766,14769,14771,14773,14775],{"class":70,"line":89},[68,14767,14768],{"class":85},"    ref ",[68,14770,869],{"class":102},[68,14772,7353],{"class":92},[68,14774,1804],{"class":85},[68,14776,14777],{"class":74}," \u002F\u002F ref是引用，转换为*ref = 100\n",[68,14779,14780],{"class":70,"line":115},[68,14781,118],{"class":85},[68,14783,14784,14786,14788],{"class":70,"line":280},[68,14785,1754],{"class":102},[68,14787,3574],{"class":587},[68,14789,14790],{"class":85},"(){\n",[68,14792,14793,14795,14797,14799,14801],{"class":70,"line":301},[68,14794,3586],{"class":102},[68,14796,12467],{"class":85},[68,14798,869],{"class":102},[68,14800,989],{"class":92},[68,14802,112],{"class":85},[68,14804,14805],{"class":70,"line":320},[68,14806,14807],{"class":85},"    \n",[68,14809,14810],{"class":70,"line":2915},[68,14811,14812],{"class":74},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[68,14814,14815,14817,14819,14821],{"class":70,"line":2921},[68,14816,14528],{"class":102},[68,14818,14531],{"class":85},[68,14820,869],{"class":102},[68,14822,14823],{"class":85}," a; \n",[68,14825,14826,14828,14830,14832,14834],{"class":70,"line":2933},[68,14827,14768],{"class":85},[68,14829,869],{"class":102},[68,14831,10549],{"class":92},[68,14833,1804],{"class":85},[68,14835,14836],{"class":74}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[68,14838,14839],{"class":70,"line":3214},[68,14840,14807],{"class":85},[68,14842,14843,14845,14847,14849,14851,14853,14855],{"class":70,"line":3219},[68,14844,8128],{"class":85},[68,14846,2778],{"class":102},[68,14848,14267],{"class":872},[68,14850,3048],{"class":102},[68,14852,12467],{"class":85},[68,14854,2778],{"class":102},[68,14856,10439],{"class":85},[68,14858,14859,14861,14863,14866,14868,14870,14872],{"class":70,"line":3225},[68,14860,8128],{"class":85},[68,14862,2778],{"class":102},[68,14864,14865],{"class":872}," \"ref:\"",[68,14867,3048],{"class":102},[68,14869,14531],{"class":85},[68,14871,2778],{"class":102},[68,14873,10439],{"class":85},[68,14875,14876],{"class":70,"line":3230},[68,14877,14807],{"class":85},[68,14879,14880,14883],{"class":70,"line":3244},[68,14881,14882],{"class":587},"    func",[68,14884,14885],{"class":85},"(a);\n",[68,14887,14888,14890,14892],{"class":70,"line":3249},[68,14889,5689],{"class":102},[68,14891,5692],{"class":92},[68,14893,112],{"class":85},[68,14895,14896],{"class":70,"line":3255},[68,14897,118],{"class":85},[19,14899,12930],{},[48,14901,14902,14905],{},[51,14903,14904],{},"引用的本质，就是一个指针常量",[51,14906,14907],{},"引用一旦初始化，就不可以发生改变",[14,14909,14911],{"id":14910},"_66常量引用","6.6常量引用",[19,14913,14914],{},"作用：常量引用主要用来修饰形参",[19,14916,14917,14918,14921],{},"在函数形参列表中，可以加",[1890,14919,14920],{},"const修饰形参","，防止形参改变实参",[58,14923,14925],{"className":1740,"code":14924,"language":1742,"meta":63,"style":63},"\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",[65,14926,14927,14932,14937,14956,14961,14974,14978,14982,14990,14994,14999,15004,15018,15022,15030,15042,15046,15051,15063,15070,15074,15084,15088,15096],{"__ignoreMap":63},[68,14928,14929],{"class":70,"line":71},[68,14930,14931],{"class":74},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[68,14933,14934],{"class":70,"line":78},[68,14935,14936],{"class":74},"\u002F\u002F加上const就不能修改实参的\n",[68,14938,14939,14941,14944,14946,14948,14951,14954],{"class":70,"line":89},[68,14940,6963],{"class":102},[68,14942,14943],{"class":587}," showValue",[68,14945,997],{"class":85},[68,14947,8391],{"class":102},[68,14949,14950],{"class":102}," int&",[68,14952,14953],{"class":6815}," v",[68,14955,14039],{"class":85},[68,14957,14958],{"class":70,"line":115},[68,14959,14960],{"class":74},"    \u002F\u002Fv += 100;\n",[68,14962,14963,14965,14967,14970,14972],{"class":70,"line":280},[68,14964,8128],{"class":85},[68,14966,2778],{"class":102},[68,14968,14969],{"class":85}," v ",[68,14971,2778],{"class":102},[68,14973,10439],{"class":85},[68,14975,14976],{"class":70,"line":301},[68,14977,118],{"class":85},[68,14979,14980],{"class":70,"line":320},[68,14981,4000],{"emptyLinePlaceholder":1679},[68,14983,14984,14986,14988],{"class":70,"line":2915},[68,14985,1754],{"class":102},[68,14987,3574],{"class":587},[68,14989,12451],{"class":85},[68,14991,14992],{"class":70,"line":2921},[68,14993,4000],{"emptyLinePlaceholder":1679},[68,14995,14996],{"class":70,"line":2933},[68,14997,14998],{"class":74},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[68,15000,15001],{"class":70,"line":3214},[68,15002,15003],{"class":74},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[68,15005,15006,15008,15010,15012,15014,15016],{"class":70,"line":3219},[68,15007,12819],{"class":102},[68,15009,14950],{"class":102},[68,15011,14531],{"class":85},[68,15013,869],{"class":102},[68,15015,989],{"class":92},[68,15017,112],{"class":85},[68,15019,15020],{"class":70,"line":3225},[68,15021,4000],{"emptyLinePlaceholder":1679},[68,15023,15024,15027],{"class":70,"line":3230},[68,15025,15026],{"class":74},"    \u002F\u002Fref = 100;",[68,15028,15029],{"class":74},"  \u002F\u002F加入const后不可以修改变量\n",[68,15031,15032,15034,15036,15038,15040],{"class":70,"line":3244},[68,15033,8128],{"class":85},[68,15035,2778],{"class":102},[68,15037,14531],{"class":85},[68,15039,2778],{"class":102},[68,15041,10439],{"class":85},[68,15043,15044],{"class":70,"line":3249},[68,15045,4000],{"emptyLinePlaceholder":1679},[68,15047,15048],{"class":70,"line":3255},[68,15049,15050],{"class":74},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[68,15052,15053,15055,15057,15059,15061],{"class":70,"line":3276},[68,15054,3586],{"class":102},[68,15056,12467],{"class":85},[68,15058,869],{"class":102},[68,15060,989],{"class":92},[68,15062,112],{"class":85},[68,15064,15065,15068],{"class":70,"line":3281},[68,15066,15067],{"class":587},"    showValue",[68,15069,14885],{"class":85},[68,15071,15072],{"class":70,"line":3295},[68,15073,4000],{"emptyLinePlaceholder":1679},[68,15075,15076,15078,15080,15082],{"class":70,"line":3300},[68,15077,3903],{"class":587},[68,15079,997],{"class":85},[68,15081,3908],{"class":872},[68,15083,1016],{"class":85},[68,15085,15086],{"class":70,"line":3329},[68,15087,4000],{"emptyLinePlaceholder":1679},[68,15089,15090,15092,15094],{"class":70,"line":3334},[68,15091,5689],{"class":102},[68,15093,5692],{"class":92},[68,15095,112],{"class":85},[68,15097,15098],{"class":70,"line":3351},[68,15099,118],{"class":85},[1652,15101,15102],{},"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":63,"searchDepth":78,"depth":78,"links":15104},[15105,15106,15107,15108,15109,15110],{"id":13638,"depth":78,"text":13639},{"id":13817,"depth":78,"text":13818},{"id":14000,"depth":78,"text":14001},{"id":14403,"depth":78,"text":14404},{"id":14730,"depth":78,"text":14731},{"id":14910,"depth":78,"text":14911},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13630,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15117,"title":15118,"body":15119,"description":63,"extension":1677,"meta":16200,"navigation":1679,"path":16201,"seo":16202,"stem":16203,"__hash__":16204},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15120,"toc":16192},[15121,15124,15128,15131,15136,15368,15370,15381,15385,15388,15396,15500,15503,15507,15510,15514,15517,15522,15544,15550,15877,15880,15884,15892,16189],[10,15122,15118],{"id":15123},"_7函数高级部分",[14,15125,15127],{"id":15126},"_71函数默认参数","7.1函数默认参数",[19,15129,15130],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15132,6780,15133],{},[65,15134,15135],{}," 返回值类型  函数名 （参数= 默认值）{}",[58,15137,15139],{"className":1740,"code":15138,"language":1742,"meta":63,"style":63},"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",[65,15140,15141,15176,15191,15195,15199,15204,15209,15238,15258,15268,15272,15276,15284,15288,15316,15338,15342,15352,15356,15364],{"__ignoreMap":63},[68,15142,15143,15145,15147,15149,15151,15153,15155,15157,15159,15162,15164,15166,15168,15170,15172,15174],{"class":70,"line":71},[68,15144,1754],{"class":102},[68,15146,12983],{"class":587},[68,15148,997],{"class":85},[68,15150,1754],{"class":102},[68,15152,3002],{"class":6815},[68,15154,1002],{"class":85},[68,15156,1754],{"class":102},[68,15158,4432],{"class":6815},[68,15160,15161],{"class":102}," =",[68,15163,989],{"class":92},[68,15165,1002],{"class":85},[68,15167,1754],{"class":102},[68,15169,4448],{"class":6815},[68,15171,15161],{"class":102},[68,15173,989],{"class":92},[68,15175,14039],{"class":85},[68,15177,15178,15180,15182,15184,15186,15188],{"class":70,"line":78},[68,15179,5689],{"class":102},[68,15181,12467],{"class":85},[68,15183,2217],{"class":102},[68,15185,12480],{"class":85},[68,15187,2217],{"class":102},[68,15189,15190],{"class":85}," c;\n",[68,15192,15193],{"class":70,"line":89},[68,15194,118],{"class":85},[68,15196,15197],{"class":70,"line":115},[68,15198,4000],{"emptyLinePlaceholder":1679},[68,15200,15201],{"class":70,"line":280},[68,15202,15203],{"class":74},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[68,15205,15206],{"class":70,"line":301},[68,15207,15208],{"class":74},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[68,15210,15211,15213,15216,15218,15220,15222,15224,15226,15228,15230,15232,15234,15236],{"class":70,"line":320},[68,15212,1754],{"class":102},[68,15214,15215],{"class":587}," func2",[68,15217,997],{"class":85},[68,15219,1754],{"class":102},[68,15221,3002],{"class":6815},[68,15223,15161],{"class":102},[68,15225,989],{"class":92},[68,15227,1002],{"class":85},[68,15229,1754],{"class":102},[68,15231,4432],{"class":6815},[68,15233,15161],{"class":102},[68,15235,989],{"class":92},[68,15237,1016],{"class":85},[68,15239,15240,15242,15244,15246,15248,15250,15252,15254,15256],{"class":70,"line":2915},[68,15241,1754],{"class":102},[68,15243,15215],{"class":587},[68,15245,997],{"class":85},[68,15247,1754],{"class":102},[68,15249,3002],{"class":6815},[68,15251,1002],{"class":85},[68,15253,1754],{"class":102},[68,15255,4432],{"class":6815},[68,15257,14039],{"class":85},[68,15259,15260,15262,15264,15266],{"class":70,"line":2921},[68,15261,5689],{"class":102},[68,15263,12467],{"class":85},[68,15265,2217],{"class":102},[68,15267,14060],{"class":85},[68,15269,15270],{"class":70,"line":2933},[68,15271,118],{"class":85},[68,15273,15274],{"class":70,"line":3214},[68,15275,4000],{"emptyLinePlaceholder":1679},[68,15277,15278,15280,15282],{"class":70,"line":3219},[68,15279,1754],{"class":102},[68,15281,3574],{"class":587},[68,15283,12451],{"class":85},[68,15285,15286],{"class":70,"line":3225},[68,15287,4000],{"emptyLinePlaceholder":1679},[68,15289,15290,15292,15294,15297,15299,15301,15303,15305,15307,15309,15312,15314],{"class":70,"line":3230},[68,15291,8128],{"class":85},[68,15293,2778],{"class":102},[68,15295,15296],{"class":872}," \"ret = \"",[68,15298,3048],{"class":102},[68,15300,12983],{"class":587},[68,15302,997],{"class":85},[68,15304,2436],{"class":92},[68,15306,1002],{"class":85},[68,15308,2436],{"class":92},[68,15310,15311],{"class":85},") ",[68,15313,2778],{"class":102},[68,15315,10439],{"class":85},[68,15317,15318,15320,15322,15324,15326,15328,15330,15332,15334,15336],{"class":70,"line":3244},[68,15319,8128],{"class":85},[68,15321,2778],{"class":102},[68,15323,15296],{"class":872},[68,15325,3048],{"class":102},[68,15327,12983],{"class":587},[68,15329,997],{"class":85},[68,15331,2047],{"class":92},[68,15333,15311],{"class":85},[68,15335,2778],{"class":102},[68,15337,10439],{"class":85},[68,15339,15340],{"class":70,"line":3249},[68,15341,4000],{"emptyLinePlaceholder":1679},[68,15343,15344,15346,15348,15350],{"class":70,"line":3255},[68,15345,3903],{"class":587},[68,15347,997],{"class":85},[68,15349,3908],{"class":872},[68,15351,1016],{"class":85},[68,15353,15354],{"class":70,"line":3276},[68,15355,4000],{"emptyLinePlaceholder":1679},[68,15357,15358,15360,15362],{"class":70,"line":3281},[68,15359,5689],{"class":102},[68,15361,5692],{"class":92},[68,15363,112],{"class":85},[68,15365,15366],{"class":70,"line":3295},[68,15367,118],{"class":85},[19,15369,12930],{},[48,15371,15372,15375,15378],{},[51,15373,15374],{},"我传就用我；没传就用你",[51,15376,15377],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[51,15379,15380],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15382,15384],{"id":15383},"_72函数的占位参数","7.2函数的占位参数",[19,15386,15387],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15389,15390,15392,15393],{},[1890,15391,6780],{}," ",[65,15394,15395],{},"返回值类型 函数名 (数据类型){}",[58,15397,15399],{"className":1740,"code":15398,"language":1742,"meta":63,"style":63},"\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",[65,15400,15401,15406,15424,15437,15441,15449,15453,15470,15474,15484,15488,15496],{"__ignoreMap":63},[68,15402,15403],{"class":70,"line":71},[68,15404,15405],{"class":74},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[68,15407,15408,15410,15412,15414,15416,15418,15420,15422],{"class":70,"line":78},[68,15409,6963],{"class":102},[68,15411,12983],{"class":587},[68,15413,997],{"class":85},[68,15415,1754],{"class":102},[68,15417,3002],{"class":6815},[68,15419,1002],{"class":85},[68,15421,1754],{"class":102},[68,15423,14039],{"class":85},[68,15425,15426,15428,15430,15433,15435],{"class":70,"line":89},[68,15427,8128],{"class":85},[68,15429,2778],{"class":102},[68,15431,15432],{"class":872}," \"this is func\"",[68,15434,3048],{"class":102},[68,15436,10439],{"class":85},[68,15438,15439],{"class":70,"line":115},[68,15440,118],{"class":85},[68,15442,15443,15445,15447],{"class":70,"line":280},[68,15444,1754],{"class":102},[68,15446,3574],{"class":587},[68,15448,12451],{"class":85},[68,15450,15451],{"class":70,"line":301},[68,15452,4000],{"emptyLinePlaceholder":1679},[68,15454,15455,15457,15459,15461,15463,15465,15467],{"class":70,"line":320},[68,15456,14882],{"class":587},[68,15458,997],{"class":85},[68,15460,2182],{"class":92},[68,15462,2114],{"class":85},[68,15464,2182],{"class":92},[68,15466,7565],{"class":85},[68,15468,15469],{"class":74}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[68,15471,15472],{"class":70,"line":2915},[68,15473,4000],{"emptyLinePlaceholder":1679},[68,15475,15476,15478,15480,15482],{"class":70,"line":2921},[68,15477,3903],{"class":587},[68,15479,997],{"class":85},[68,15481,3908],{"class":872},[68,15483,1016],{"class":85},[68,15485,15486],{"class":70,"line":2933},[68,15487,4000],{"emptyLinePlaceholder":1679},[68,15489,15490,15492,15494],{"class":70,"line":3214},[68,15491,5689],{"class":102},[68,15493,5692],{"class":92},[68,15495,112],{"class":85},[68,15497,15498],{"class":70,"line":3219},[68,15499,118],{"class":85},[19,15501,15502],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15504,15506],{"id":15505},"_73函数重载","7.3函数重载",[19,15508,15509],{},"意思是函数名是可以相同的",[43,15511,15513],{"id":15512},"_731基本语法","7.3.1基本语法",[19,15515,15516],{},"作用：函数名可以相同，提高复用性",[19,15518,15519],{},[1890,15520,15521],{},"函数重载满足条件：",[168,15523,15524,15527,15530],{},[51,15525,15526],{},"同一个作用域下",[51,15528,15529],{},"函数名称相同",[51,15531,15532,15533,15536,15537,15540,15541],{},"函数参数",[1890,15534,15535],{},"类型不同","  或者 ",[1890,15538,15539],{},"个数不同"," 或者 ",[1890,15542,15543],{},"顺序不同",[19,15545,15546,15549],{},[1890,15547,15548],{},"注意:","  函数的返回值不可以作为函数重载的条件",[58,15551,15553],{"className":11539,"code":15552,"language":11541,"meta":63,"style":63},"\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",[65,15554,15555,15560,15568,15572,15585,15589,15603,15607,15620,15624,15639,15643,15656,15660,15681,15685,15698,15702,15722,15726,15739,15743,15747,15752,15757,15762,15767,15772,15776,15780,15788,15792,15798,15808,15818,15832,15847,15851,15861,15865,15873],{"__ignoreMap":63},[68,15556,15557],{"class":70,"line":71},[68,15558,15559],{"class":74},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[68,15561,15562,15564,15566],{"class":70,"line":78},[68,15563,6963],{"class":102},[68,15565,12983],{"class":587},[68,15567,3577],{"class":85},[68,15569,15570],{"class":70,"line":89},[68,15571,3149],{"class":85},[68,15573,15574,15576,15578,15581,15583],{"class":70,"line":115},[68,15575,8128],{"class":85},[68,15577,2778],{"class":102},[68,15579,15580],{"class":872}," \"func 的调用！\"",[68,15582,3048],{"class":102},[68,15584,10439],{"class":85},[68,15586,15587],{"class":70,"line":280},[68,15588,118],{"class":85},[68,15590,15591,15593,15595,15597,15599,15601],{"class":70,"line":301},[68,15592,6963],{"class":102},[68,15594,12983],{"class":587},[68,15596,997],{"class":85},[68,15598,1754],{"class":102},[68,15600,3002],{"class":6815},[68,15602,1757],{"class":85},[68,15604,15605],{"class":70,"line":320},[68,15606,3149],{"class":85},[68,15608,15609,15611,15613,15616,15618],{"class":70,"line":2915},[68,15610,8128],{"class":85},[68,15612,2778],{"class":102},[68,15614,15615],{"class":872}," \"func (int a) 的调用！\"",[68,15617,3048],{"class":102},[68,15619,10439],{"class":85},[68,15621,15622],{"class":70,"line":2921},[68,15623,118],{"class":85},[68,15625,15626,15628,15630,15632,15635,15637],{"class":70,"line":2933},[68,15627,6963],{"class":102},[68,15629,12983],{"class":587},[68,15631,997],{"class":85},[68,15633,15634],{"class":102},"double",[68,15636,3002],{"class":6815},[68,15638,1757],{"class":85},[68,15640,15641],{"class":70,"line":3214},[68,15642,3149],{"class":85},[68,15644,15645,15647,15649,15652,15654],{"class":70,"line":3219},[68,15646,8128],{"class":85},[68,15648,2778],{"class":102},[68,15650,15651],{"class":872}," \"func (double a)的调用！\"",[68,15653,3048],{"class":102},[68,15655,10439],{"class":85},[68,15657,15658],{"class":70,"line":3225},[68,15659,118],{"class":85},[68,15661,15662,15664,15666,15668,15670,15672,15675,15677,15679],{"class":70,"line":3230},[68,15663,6963],{"class":102},[68,15665,12983],{"class":587},[68,15667,997],{"class":85},[68,15669,1754],{"class":102},[68,15671,3002],{"class":6815},[68,15673,15674],{"class":85}," ,",[68,15676,15634],{"class":102},[68,15678,4432],{"class":6815},[68,15680,1757],{"class":85},[68,15682,15683],{"class":70,"line":3244},[68,15684,3149],{"class":85},[68,15686,15687,15689,15691,15694,15696],{"class":70,"line":3249},[68,15688,8128],{"class":85},[68,15690,2778],{"class":102},[68,15692,15693],{"class":872}," \"func (int a ,double b) 的调用！\"",[68,15695,3048],{"class":102},[68,15697,10439],{"class":85},[68,15699,15700],{"class":70,"line":3255},[68,15701,118],{"class":85},[68,15703,15704,15706,15708,15710,15712,15714,15716,15718,15720],{"class":70,"line":3276},[68,15705,6963],{"class":102},[68,15707,12983],{"class":587},[68,15709,997],{"class":85},[68,15711,15634],{"class":102},[68,15713,3002],{"class":6815},[68,15715,15674],{"class":85},[68,15717,1754],{"class":102},[68,15719,4432],{"class":6815},[68,15721,1757],{"class":85},[68,15723,15724],{"class":70,"line":3281},[68,15725,3149],{"class":85},[68,15727,15728,15730,15732,15735,15737],{"class":70,"line":3295},[68,15729,8128],{"class":85},[68,15731,2778],{"class":102},[68,15733,15734],{"class":872}," \"func (double a ,int b)的调用！\"",[68,15736,3048],{"class":102},[68,15738,10439],{"class":85},[68,15740,15741],{"class":70,"line":3300},[68,15742,118],{"class":85},[68,15744,15745],{"class":70,"line":3329},[68,15746,4000],{"emptyLinePlaceholder":1679},[68,15748,15749],{"class":70,"line":3334},[68,15750,15751],{"class":74},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[68,15753,15754],{"class":70,"line":3351},[68,15755,15756],{"class":74},"\u002F\u002Fint func(double a, int b)\n",[68,15758,15759],{"class":70,"line":3356},[68,15760,15761],{"class":74},"\u002F\u002F{\n",[68,15763,15764],{"class":70,"line":3361},[68,15765,15766],{"class":74},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[68,15768,15769],{"class":70,"line":3366},[68,15770,15771],{"class":74},"\u002F\u002F}\n",[68,15773,15774],{"class":70,"line":3380},[68,15775,4000],{"emptyLinePlaceholder":1679},[68,15777,15778],{"class":70,"line":3385},[68,15779,4000],{"emptyLinePlaceholder":1679},[68,15781,15782,15784,15786],{"class":70,"line":4177},[68,15783,1754],{"class":102},[68,15785,3574],{"class":587},[68,15787,12451],{"class":85},[68,15789,15790],{"class":70,"line":4191},[68,15791,4000],{"emptyLinePlaceholder":1679},[68,15793,15794,15796],{"class":70,"line":4199},[68,15795,14882],{"class":587},[68,15797,7235],{"class":85},[68,15799,15800,15802,15804,15806],{"class":70,"line":4204},[68,15801,14882],{"class":587},[68,15803,997],{"class":85},[68,15805,2182],{"class":92},[68,15807,1016],{"class":85},[68,15809,15810,15812,15814,15816],{"class":70,"line":4210},[68,15811,14882],{"class":587},[68,15813,997],{"class":85},[68,15815,1798],{"class":92},[68,15817,1016],{"class":85},[68,15819,15820,15822,15824,15826,15828,15830],{"class":70,"line":4216},[68,15821,14882],{"class":587},[68,15823,997],{"class":85},[68,15825,2182],{"class":92},[68,15827,2114],{"class":85},[68,15829,1798],{"class":92},[68,15831,1016],{"class":85},[68,15833,15834,15836,15838,15840,15843,15845],{"class":70,"line":4221},[68,15835,14882],{"class":587},[68,15837,997],{"class":85},[68,15839,1798],{"class":92},[68,15841,15842],{"class":85}," , ",[68,15844,2182],{"class":92},[68,15846,1016],{"class":85},[68,15848,15849],{"class":70,"line":9547},[68,15850,14807],{"class":85},[68,15852,15853,15855,15857,15859],{"class":70,"line":9571},[68,15854,3903],{"class":587},[68,15856,997],{"class":85},[68,15858,3908],{"class":872},[68,15860,1016],{"class":85},[68,15862,15863],{"class":70,"line":9576},[68,15864,4000],{"emptyLinePlaceholder":1679},[68,15866,15867,15869,15871],{"class":70,"line":9582},[68,15868,5689],{"class":102},[68,15870,5692],{"class":92},[68,15872,112],{"class":85},[68,15874,15875],{"class":70,"line":9609},[68,15876,118],{"class":85},[19,15878,15879],{},"重点：函数返回值不可以作为函数重载条件！",[43,15881,15883],{"id":15882},"_732注意事项","7.3.2注意事项",[168,15885,15886,15889],{},[51,15887,15888],{},"引用作为重载条件!!!",[51,15890,15891],{},"函数重载碰到函数默认参数",[58,15893,15895],{"className":1740,"code":15894,"language":1742,"meta":63,"style":63},"\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",[65,15896,15897,15902,15907,15911,15927,15931,15944,15948,15952,15970,15974,15987,15991,15995,15999,16004,16008,16032,16036,16049,16053,16057,16071,16075,16088,16092,16096,16104,16108,16120,16130,16143,16147,16151,16159,16163,16173,16177,16185],{"__ignoreMap":63},[68,15898,15899],{"class":70,"line":71},[68,15900,15901],{"class":74},"\u002F\u002F函数重载注意事项\n",[68,15903,15904],{"class":70,"line":78},[68,15905,15906],{"class":74},"\u002F\u002F1、引用作为重载条件\n",[68,15908,15909],{"class":70,"line":89},[68,15910,4000],{"emptyLinePlaceholder":1679},[68,15912,15913,15915,15917,15919,15921,15923,15925],{"class":70,"line":115},[68,15914,6963],{"class":102},[68,15916,12983],{"class":587},[68,15918,997],{"class":85},[68,15920,1754],{"class":102},[68,15922,12182],{"class":102},[68,15924,1974],{"class":6815},[68,15926,1757],{"class":85},[68,15928,15929],{"class":70,"line":280},[68,15930,3149],{"class":85},[68,15932,15933,15935,15937,15940,15942],{"class":70,"line":301},[68,15934,8128],{"class":85},[68,15936,2778],{"class":102},[68,15938,15939],{"class":872}," \"func (int &a) 调用 \"",[68,15941,3048],{"class":102},[68,15943,10439],{"class":85},[68,15945,15946],{"class":70,"line":320},[68,15947,118],{"class":85},[68,15949,15950],{"class":70,"line":2915},[68,15951,4000],{"emptyLinePlaceholder":1679},[68,15953,15954,15956,15958,15960,15962,15964,15966,15968],{"class":70,"line":2921},[68,15955,6963],{"class":102},[68,15957,12983],{"class":587},[68,15959,997],{"class":85},[68,15961,8391],{"class":102},[68,15963,3982],{"class":102},[68,15965,12182],{"class":102},[68,15967,1974],{"class":6815},[68,15969,1757],{"class":85},[68,15971,15972],{"class":70,"line":2933},[68,15973,3149],{"class":85},[68,15975,15976,15978,15980,15983,15985],{"class":70,"line":3214},[68,15977,8128],{"class":85},[68,15979,2778],{"class":102},[68,15981,15982],{"class":872}," \"func (const int &a) 调用 \"",[68,15984,3048],{"class":102},[68,15986,10439],{"class":85},[68,15988,15989],{"class":70,"line":3219},[68,15990,118],{"class":85},[68,15992,15993],{"class":70,"line":3225},[68,15994,4000],{"emptyLinePlaceholder":1679},[68,15996,15997],{"class":70,"line":3230},[68,15998,4000],{"emptyLinePlaceholder":1679},[68,16000,16001],{"class":70,"line":3244},[68,16002,16003],{"class":74},"\u002F\u002F2、函数重载碰到函数默认参数\n",[68,16005,16006],{"class":70,"line":3249},[68,16007,4000],{"emptyLinePlaceholder":1679},[68,16009,16010,16012,16014,16016,16018,16020,16022,16024,16026,16028,16030],{"class":70,"line":3255},[68,16011,6963],{"class":102},[68,16013,15215],{"class":587},[68,16015,997],{"class":85},[68,16017,1754],{"class":102},[68,16019,3002],{"class":6815},[68,16021,1002],{"class":85},[68,16023,1754],{"class":102},[68,16025,4432],{"class":6815},[68,16027,15161],{"class":102},[68,16029,989],{"class":92},[68,16031,1757],{"class":85},[68,16033,16034],{"class":70,"line":3276},[68,16035,3149],{"class":85},[68,16037,16038,16040,16042,16045,16047],{"class":70,"line":3281},[68,16039,8128],{"class":85},[68,16041,2778],{"class":102},[68,16043,16044],{"class":872}," \"func2(int a, int b = 10) 调用\"",[68,16046,3048],{"class":102},[68,16048,10439],{"class":85},[68,16050,16051],{"class":70,"line":3295},[68,16052,118],{"class":85},[68,16054,16055],{"class":70,"line":3300},[68,16056,4000],{"emptyLinePlaceholder":1679},[68,16058,16059,16061,16063,16065,16067,16069],{"class":70,"line":3329},[68,16060,6963],{"class":102},[68,16062,15215],{"class":587},[68,16064,997],{"class":85},[68,16066,1754],{"class":102},[68,16068,3002],{"class":6815},[68,16070,1757],{"class":85},[68,16072,16073],{"class":70,"line":3334},[68,16074,3149],{"class":85},[68,16076,16077,16079,16081,16084,16086],{"class":70,"line":3351},[68,16078,8128],{"class":85},[68,16080,2778],{"class":102},[68,16082,16083],{"class":872}," \"func2(int a) 调用\"",[68,16085,3048],{"class":102},[68,16087,10439],{"class":85},[68,16089,16090],{"class":70,"line":3356},[68,16091,118],{"class":85},[68,16093,16094],{"class":70,"line":3361},[68,16095,4000],{"emptyLinePlaceholder":1679},[68,16097,16098,16100,16102],{"class":70,"line":3366},[68,16099,1754],{"class":102},[68,16101,3574],{"class":587},[68,16103,12451],{"class":85},[68,16105,16106],{"class":70,"line":3380},[68,16107,14807],{"class":85},[68,16109,16110,16112,16114,16116,16118],{"class":70,"line":3385},[68,16111,3586],{"class":102},[68,16113,12467],{"class":85},[68,16115,869],{"class":102},[68,16117,989],{"class":92},[68,16119,112],{"class":85},[68,16121,16122,16124,16127],{"class":70,"line":4177},[68,16123,14882],{"class":587},[68,16125,16126],{"class":85},"(a);",[68,16128,16129],{"class":74}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[68,16131,16132,16134,16136,16138,16140],{"class":70,"line":4191},[68,16133,14882],{"class":587},[68,16135,997],{"class":85},[68,16137,2182],{"class":92},[68,16139,7565],{"class":85},[68,16141,16142],{"class":74},"\u002F\u002F调用有const   10是个常量\n",[68,16144,16145],{"class":70,"line":4199},[68,16146,4000],{"emptyLinePlaceholder":1679},[68,16148,16149],{"class":70,"line":4204},[68,16150,4000],{"emptyLinePlaceholder":1679},[68,16152,16153,16156],{"class":70,"line":4210},[68,16154,16155],{"class":74},"    \u002F\u002Ffunc2(10);",[68,16157,16158],{"class":74}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[68,16160,16161],{"class":70,"line":4216},[68,16162,4000],{"emptyLinePlaceholder":1679},[68,16164,16165,16167,16169,16171],{"class":70,"line":4221},[68,16166,3903],{"class":587},[68,16168,997],{"class":85},[68,16170,3908],{"class":872},[68,16172,1016],{"class":85},[68,16174,16175],{"class":70,"line":9547},[68,16176,4000],{"emptyLinePlaceholder":1679},[68,16178,16179,16181,16183],{"class":70,"line":9571},[68,16180,5689],{"class":102},[68,16182,5692],{"class":92},[68,16184,112],{"class":85},[68,16186,16187],{"class":70,"line":9576},[68,16188,118],{"class":85},[1652,16190,16191],{},"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":63,"searchDepth":78,"depth":78,"links":16193},[16194,16195,16196],{"id":15126,"depth":78,"text":15127},{"id":15383,"depth":78,"text":15384},{"id":15505,"depth":78,"text":15506,"children":16197},[16198,16199],{"id":15512,"depth":89,"text":15513},{"id":15882,"depth":89,"text":15883},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15118,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16206,"title":16207,"body":16208,"description":24960,"extension":1677,"meta":24961,"navigation":1679,"path":24962,"seo":24963,"stem":24964,"__hash__":24965},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16209,"toc":24941},[16210,16213,16219,16226,16231,16234,16237,16240,16244,16248,16251,16254,16262,16267,16270,16277,16282,16440,16443,16696,16699,16702,16705,16710,16713,16716,16727,16732,16968,16972,16982,16985,16993,17140,17144,17147,17150,17154,17598,17602,17610,17618,18530,18537,18542,19170,19173,19176,19179,19298,19301,19388,19391,19517,19520,19614,19617,19970,19974,19982,19986,19993,19996,19999,20010,20016,20021,20033,20041,20061,20069,20086,20272,20275,20279,20282,20285,20288,20291,20294,20297,20300,20760,20766,20770,20773,20784,21371,21374,21863,21867,21870,21873,21876,21879,21882,21890,22286,22290,22293,22296,22743,22746,22749,22754,22757,22762,22765,22769,22772,22774,22780,22783,23089,23099,23140,23144,23147,23149,23182,23185,23492,23494,23509,23512,23535,23544,23550,23553,23557,23560,23563,23568,23579,23584,23592,23597,23727,23730,23733,23908,23913,24125,24129,24132,24246,24251,24490,24494,24498,24501,24504,24509,24614,24617,24620,24623,24627,24738,24741,24744,24749,24801,24804,24807,24812,24858,24861,24866,24934,24936,24939],[10,16211,16207],{"id":16212},"_8类和对象",[19,16214,16215,16216],{},"C++面向对象的三大特性为",[1890,16217,16218],{},"封装、继承、多态",[19,16220,16221,16222,16225],{},"C++认为",[1890,16223,16224],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16227,16228],{},[1890,16229,16230],{},"例如：",[19,16232,16233],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16235,16236],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16238,16239],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16241,16243],{"id":16242},"_81封装","8.1封装",[43,16245,16247],{"id":16246},"_811封装的意义","8.1.1封装的意义",[19,16249,16250],{},"封装是C++面向对象三大特性之一",[19,16252,16253],{},"封装的意义：",[168,16255,16256,16259],{},[51,16257,16258],{},"将属性和行为作为一个整体，表现生活中的事物",[51,16260,16261],{},"将属性和行为加以权限控制",[19,16263,16264],{},[1890,16265,16266],{},"封装意义一：",[19,16268,16269],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16271,16272,15392,16274],{},[1890,16273,6780],{},[65,16275,16276],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[48,16278,16279],{},[51,16280,16281],{},"**示例1：**设计一个圆类，求圆的周长",[58,16283,16285],{"className":1740,"code":16284,"language":1742,"meta":63,"style":63},"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",[65,16286,16287,16295,16299,16304,16309,16314,16319,16326,16331,16341,16345,16362,16366,16370,16378,16382,16387,16392,16397,16402,16413,16436],{"__ignoreMap":63},[68,16288,16289,16292],{"class":70,"line":71},[68,16290,16291],{"class":102},"class",[68,16293,16294],{"class":587}," Circle\n",[68,16296,16297],{"class":70,"line":78},[68,16298,3149],{"class":85},[68,16300,16301],{"class":70,"line":89},[68,16302,16303],{"class":74},"    \u002F\u002F访问权限\n",[68,16305,16306],{"class":70,"line":115},[68,16307,16308],{"class":74},"    \u002F\u002F公共权限\n",[68,16310,16311],{"class":70,"line":280},[68,16312,16313],{"class":102},"public:\n",[68,16315,16316],{"class":70,"line":301},[68,16317,16318],{"class":74},"    \u002F\u002F属性\n",[68,16320,16321,16323],{"class":70,"line":320},[68,16322,3586],{"class":102},[68,16324,16325],{"class":85}," m_r;\n",[68,16327,16328],{"class":70,"line":2915},[68,16329,16330],{"class":74},"    \u002F\u002F行为\n",[68,16332,16333,16336,16339],{"class":70,"line":2921},[68,16334,16335],{"class":102},"    double",[68,16337,16338],{"class":587}," calculateZC",[68,16340,3577],{"class":85},[68,16342,16343],{"class":70,"line":2933},[68,16344,3631],{"class":85},[68,16346,16347,16350,16352,16354,16357,16359],{"class":70,"line":3214},[68,16348,16349],{"class":102},"        return",[68,16351,984],{"class":92},[68,16353,2191],{"class":102},[68,16355,16356],{"class":85},"PI",[68,16358,2191],{"class":102},[68,16360,16361],{"class":85},"m_r;\n",[68,16363,16364],{"class":70,"line":3219},[68,16365,3787],{"class":85},[68,16367,16368],{"class":70,"line":3225},[68,16369,5594],{"class":85},[68,16371,16372,16374,16376],{"class":70,"line":3230},[68,16373,1754],{"class":102},[68,16375,3574],{"class":587},[68,16377,3577],{"class":85},[68,16379,16380],{"class":70,"line":3244},[68,16381,3149],{"class":85},[68,16383,16384],{"class":70,"line":3249},[68,16385,16386],{"class":74},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[68,16388,16389],{"class":70,"line":3255},[68,16390,16391],{"class":74},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[68,16393,16394],{"class":70,"line":3276},[68,16395,16396],{"class":85},"    Circle c1;\n",[68,16398,16399],{"class":70,"line":3281},[68,16400,16401],{"class":74},"    \u002F\u002F给圆对象 的属性进行赋值\n",[68,16403,16404,16407,16409,16411],{"class":70,"line":3295},[68,16405,16406],{"class":85},"    c1.m_r",[68,16408,869],{"class":102},[68,16410,2182],{"class":92},[68,16412,112],{"class":85},[68,16414,16415,16417,16419,16422,16424,16427,16430,16432,16434],{"class":70,"line":3300},[68,16416,3154],{"class":85},[68,16418,2778],{"class":102},[68,16420,16421],{"class":872},"\"圆的周长\"",[68,16423,2778],{"class":102},[68,16425,16426],{"class":85},"c1.",[68,16428,16429],{"class":587},"calculateZC",[68,16431,4027],{"class":85},[68,16433,2778],{"class":102},[68,16435,2800],{"class":85},[68,16437,16438],{"class":70,"line":3329},[68,16439,118],{"class":85},[19,16441,16442],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[58,16444,16446],{"className":1740,"code":16445,"language":1742,"meta":63,"style":63},"#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",[65,16447,16448,16454,16464,16470,16476,16480,16484,16489,16496,16501,16519,16523,16533,16537,16542,16558,16562,16572,16576,16581,16589,16593,16625,16629,16633,16641,16645,16650,16655,16669,16683,16692],{"__ignoreMap":63},[68,16449,16450,16452],{"class":70,"line":71},[68,16451,3551],{"class":102},[68,16453,3554],{"class":872},[68,16455,16456,16458,16460,16462],{"class":70,"line":78},[68,16457,3559],{"class":102},[68,16459,3562],{"class":102},[68,16461,3565],{"class":587},[68,16463,112],{"class":85},[68,16465,16466,16468],{"class":70,"line":89},[68,16467,3551],{"class":102},[68,16469,9348],{"class":872},[68,16471,16472,16474],{"class":70,"line":115},[68,16473,16291],{"class":102},[68,16475,9361],{"class":587},[68,16477,16478],{"class":70,"line":280},[68,16479,3149],{"class":85},[68,16481,16482],{"class":70,"line":301},[68,16483,16313],{"class":102},[68,16485,16486],{"class":70,"line":320},[68,16487,16488],{"class":85},"    string m_name;\n",[68,16490,16491,16493],{"class":70,"line":2915},[68,16492,3586],{"class":102},[68,16494,16495],{"class":85}," m_id;\n",[68,16497,16498],{"class":70,"line":2921},[68,16499,16500],{"class":74},"    \u002F\u002F赋值姓名\n",[68,16502,16503,16506,16509,16511,16514,16517],{"class":70,"line":2933},[68,16504,16505],{"class":102},"    void",[68,16507,16508],{"class":587}," setName",[68,16510,997],{"class":85},[68,16512,16513],{"class":587},"string",[68,16515,16516],{"class":6815}," name",[68,16518,1757],{"class":85},[68,16520,16521],{"class":70,"line":3214},[68,16522,3631],{"class":85},[68,16524,16525,16528,16530],{"class":70,"line":3219},[68,16526,16527],{"class":85},"        m_name",[68,16529,869],{"class":102},[68,16531,16532],{"class":85},"name;\n",[68,16534,16535],{"class":70,"line":3225},[68,16536,3787],{"class":85},[68,16538,16539],{"class":70,"line":3230},[68,16540,16541],{"class":74},"    \u002F\u002F赋值学号\n",[68,16543,16544,16546,16549,16551,16553,16556],{"class":70,"line":3244},[68,16545,16505],{"class":102},[68,16547,16548],{"class":587}," setId",[68,16550,997],{"class":85},[68,16552,1754],{"class":102},[68,16554,16555],{"class":6815}," id",[68,16557,1757],{"class":85},[68,16559,16560],{"class":70,"line":3249},[68,16561,3631],{"class":85},[68,16563,16564,16567,16569],{"class":70,"line":3255},[68,16565,16566],{"class":85},"        m_id",[68,16568,869],{"class":102},[68,16570,16571],{"class":85},"id;\n",[68,16573,16574],{"class":70,"line":3276},[68,16575,3787],{"class":85},[68,16577,16578],{"class":70,"line":3281},[68,16579,16580],{"class":74},"    \u002F\u002F打印学生信息\n",[68,16582,16583,16585,16587],{"class":70,"line":3295},[68,16584,16505],{"class":102},[68,16586,11213],{"class":587},[68,16588,3577],{"class":85},[68,16590,16591],{"class":70,"line":3300},[68,16592,3631],{"class":85},[68,16594,16595,16597,16599,16602,16604,16607,16609,16611,16613,16616,16618,16621,16623],{"class":70,"line":3329},[68,16596,5050],{"class":85},[68,16598,2778],{"class":102},[68,16600,16601],{"class":872},"\"姓名：\"",[68,16603,2778],{"class":102},[68,16605,16606],{"class":85},"m_name",[68,16608,2778],{"class":102},[68,16610,5958],{"class":872},[68,16612,2778],{"class":102},[68,16614,16615],{"class":872},"\"学号：\"",[68,16617,2778],{"class":102},[68,16619,16620],{"class":85},"m_id",[68,16622,2778],{"class":102},[68,16624,2800],{"class":85},[68,16626,16627],{"class":70,"line":3334},[68,16628,3787],{"class":85},[68,16630,16631],{"class":70,"line":3351},[68,16632,5594],{"class":85},[68,16634,16635,16637,16639],{"class":70,"line":3356},[68,16636,1754],{"class":102},[68,16638,3574],{"class":587},[68,16640,3577],{"class":85},[68,16642,16643],{"class":70,"line":3361},[68,16644,3149],{"class":85},[68,16646,16647],{"class":70,"line":3366},[68,16648,16649],{"class":74},"    \u002F\u002F实例化\n",[68,16651,16652],{"class":70,"line":3380},[68,16653,16654],{"class":85},"    Student s1;\n",[68,16656,16657,16660,16663,16665,16667],{"class":70,"line":3385},[68,16658,16659],{"class":85},"    s1.",[68,16661,16662],{"class":587},"setName",[68,16664,997],{"class":85},[68,16666,9515],{"class":872},[68,16668,1016],{"class":85},[68,16670,16671,16673,16676,16678,16681],{"class":70,"line":4177},[68,16672,16659],{"class":85},[68,16674,16675],{"class":587},"setId",[68,16677,997],{"class":85},[68,16679,16680],{"class":92},"123456",[68,16682,1016],{"class":85},[68,16684,16685,16687,16690],{"class":70,"line":4191},[68,16686,16659],{"class":85},[68,16688,16689],{"class":587},"printInfo",[68,16691,7235],{"class":85},[68,16693,16694],{"class":70,"line":4199},[68,16695,118],{"class":85},[19,16697,16698],{},"类中的属性和行为统称为成员",[19,16700,16701],{},"属性：成员属性(成员变量)",[19,16703,16704],{},"方法：成员函数(成员方法)",[19,16706,16707],{},[1890,16708,16709],{},"封装意义二：",[19,16711,16712],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16714,16715],{},"访问权限有三种：",[48,16717,16718,16721,16724],{},[51,16719,16720],{},"public        公共权限",[51,16722,16723],{},"protected 保护权限",[51,16725,16726],{},"private      私有权限",[19,16728,16729],{},[1890,16730,16731],{},"示例：",[58,16733,16735],{"className":11539,"code":16734,"language":11541,"meta":63,"style":63},"\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",[65,16736,16737,16742,16747,16752,16757,16761,16768,16772,16777,16781,16786,16790,16795,16800,16805,16809,16814,16819,16826,16830,16834,16842,16846,16857,16869,16881,16885,16889,16893,16901,16905,16910,16922,16930,16938,16942,16952,16956,16964],{"__ignoreMap":63},[68,16738,16739],{"class":70,"line":71},[68,16740,16741],{"class":74},"\u002F\u002F三种权限\n",[68,16743,16744],{"class":70,"line":78},[68,16745,16746],{"class":74},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[68,16748,16749],{"class":70,"line":89},[68,16750,16751],{"class":74},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[68,16753,16754],{"class":70,"line":115},[68,16755,16756],{"class":74},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[68,16758,16759],{"class":70,"line":280},[68,16760,4000],{"emptyLinePlaceholder":1679},[68,16762,16763,16765],{"class":70,"line":301},[68,16764,16291],{"class":102},[68,16766,16767],{"class":587}," Person\n",[68,16769,16770],{"class":70,"line":320},[68,16771,3149],{"class":85},[68,16773,16774],{"class":70,"line":2915},[68,16775,16776],{"class":74},"    \u002F\u002F姓名  公共权限\n",[68,16778,16779],{"class":70,"line":2921},[68,16780,16313],{"class":102},[68,16782,16783],{"class":70,"line":2933},[68,16784,16785],{"class":85},"    string m_Name;\n",[68,16787,16788],{"class":70,"line":3214},[68,16789,4000],{"emptyLinePlaceholder":1679},[68,16791,16792],{"class":70,"line":3219},[68,16793,16794],{"class":74},"    \u002F\u002F汽车  保护权限\n",[68,16796,16797],{"class":70,"line":3225},[68,16798,16799],{"class":102},"protected:\n",[68,16801,16802],{"class":70,"line":3230},[68,16803,16804],{"class":85},"    string m_Car;\n",[68,16806,16807],{"class":70,"line":3244},[68,16808,4000],{"emptyLinePlaceholder":1679},[68,16810,16811],{"class":70,"line":3249},[68,16812,16813],{"class":74},"    \u002F\u002F银行卡密码  私有权限\n",[68,16815,16816],{"class":70,"line":3255},[68,16817,16818],{"class":102},"private:\n",[68,16820,16821,16823],{"class":70,"line":3276},[68,16822,3586],{"class":102},[68,16824,16825],{"class":85}," m_Password;\n",[68,16827,16828],{"class":70,"line":3281},[68,16829,4000],{"emptyLinePlaceholder":1679},[68,16831,16832],{"class":70,"line":3295},[68,16833,16313],{"class":102},[68,16835,16836,16838,16840],{"class":70,"line":3300},[68,16837,16505],{"class":102},[68,16839,12983],{"class":587},[68,16841,3577],{"class":85},[68,16843,16844],{"class":70,"line":3329},[68,16845,3631],{"class":85},[68,16847,16848,16851,16853,16855],{"class":70,"line":3334},[68,16849,16850],{"class":85},"        m_Name ",[68,16852,869],{"class":102},[68,16854,10537],{"class":872},[68,16856,112],{"class":85},[68,16858,16859,16862,16864,16867],{"class":70,"line":3351},[68,16860,16861],{"class":85},"        m_Car ",[68,16863,869],{"class":102},[68,16865,16866],{"class":872}," \"拖拉机\"",[68,16868,112],{"class":85},[68,16870,16871,16874,16876,16879],{"class":70,"line":3356},[68,16872,16873],{"class":85},"        m_Password ",[68,16875,869],{"class":102},[68,16877,16878],{"class":92}," 123456",[68,16880,112],{"class":85},[68,16882,16883],{"class":70,"line":3361},[68,16884,3787],{"class":85},[68,16886,16887],{"class":70,"line":3366},[68,16888,5594],{"class":85},[68,16890,16891],{"class":70,"line":3380},[68,16892,4000],{"emptyLinePlaceholder":1679},[68,16894,16895,16897,16899],{"class":70,"line":3385},[68,16896,1754],{"class":102},[68,16898,3574],{"class":587},[68,16900,12451],{"class":85},[68,16902,16903],{"class":70,"line":4177},[68,16904,4000],{"emptyLinePlaceholder":1679},[68,16906,16907],{"class":70,"line":4191},[68,16908,16909],{"class":85},"    Person p;\n",[68,16911,16912,16915,16917,16920],{"class":70,"line":4199},[68,16913,16914],{"class":85},"    p.m_Name ",[68,16916,869],{"class":102},[68,16918,16919],{"class":872}," \"李四\"",[68,16921,112],{"class":85},[68,16923,16924,16927],{"class":70,"line":4204},[68,16925,16926],{"class":74},"    \u002F\u002Fp.m_Car = \"奔驰\";",[68,16928,16929],{"class":74},"  \u002F\u002F保护权限类外访问不到\n",[68,16931,16932,16935],{"class":70,"line":4210},[68,16933,16934],{"class":74},"    \u002F\u002Fp.m_Password = 123;",[68,16936,16937],{"class":74}," \u002F\u002F私有权限类外访问不到\n",[68,16939,16940],{"class":70,"line":4216},[68,16941,4000],{"emptyLinePlaceholder":1679},[68,16943,16944,16946,16948,16950],{"class":70,"line":4221},[68,16945,3903],{"class":587},[68,16947,997],{"class":85},[68,16949,3908],{"class":872},[68,16951,1016],{"class":85},[68,16953,16954],{"class":70,"line":9547},[68,16955,4000],{"emptyLinePlaceholder":1679},[68,16957,16958,16960,16962],{"class":70,"line":9571},[68,16959,5689],{"class":102},[68,16961,5692],{"class":92},[68,16963,112],{"class":85},[68,16965,16966],{"class":70,"line":9576},[68,16967,118],{"class":85},[43,16969,16971],{"id":16970},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16973,16974,16975,16978,16979],{},"在C++中 struct和class唯一的",[1890,16976,16977],{},"区别","就在于 ",[1890,16980,16981],{},"默认的访问权限不同",[19,16983,16984],{},"区别：",[168,16986,16987,16990],{},[51,16988,16989],{},"struct 默认权限为公共",[51,16991,16992],{},"class   默认权限为私有",[58,16994,16996],{"className":11539,"code":16995,"language":11541,"meta":63,"style":63},"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",[65,16997,16998,17005,17009,17019,17023,17027,17034,17038,17048,17052,17056,17064,17068,17073,17087,17091,17096,17110,17114,17124,17128,17136],{"__ignoreMap":63},[68,16999,17000,17002],{"class":70,"line":71},[68,17001,16291],{"class":102},[68,17003,17004],{"class":587}," C1\n",[68,17006,17007],{"class":70,"line":78},[68,17008,3149],{"class":85},[68,17010,17011,17013,17016],{"class":70,"line":89},[68,17012,3586],{"class":102},[68,17014,17015],{"class":85},"  m_A;",[68,17017,17018],{"class":74}," \u002F\u002F默认是私有权限\n",[68,17020,17021],{"class":70,"line":115},[68,17022,5594],{"class":85},[68,17024,17025],{"class":70,"line":280},[68,17026,4000],{"emptyLinePlaceholder":1679},[68,17028,17029,17031],{"class":70,"line":301},[68,17030,9358],{"class":102},[68,17032,17033],{"class":587}," C2\n",[68,17035,17036],{"class":70,"line":320},[68,17037,3149],{"class":85},[68,17039,17040,17042,17045],{"class":70,"line":2915},[68,17041,3586],{"class":102},[68,17043,17044],{"class":85}," m_A;",[68,17046,17047],{"class":74},"  \u002F\u002F默认是公共权限\n",[68,17049,17050],{"class":70,"line":2921},[68,17051,5594],{"class":85},[68,17053,17054],{"class":70,"line":2933},[68,17055,4000],{"emptyLinePlaceholder":1679},[68,17057,17058,17060,17062],{"class":70,"line":3214},[68,17059,1754],{"class":102},[68,17061,3574],{"class":587},[68,17063,12451],{"class":85},[68,17065,17066],{"class":70,"line":3219},[68,17067,4000],{"emptyLinePlaceholder":1679},[68,17069,17070],{"class":70,"line":3225},[68,17071,17072],{"class":85},"    C1 c1;\n",[68,17074,17075,17078,17080,17082,17084],{"class":70,"line":3230},[68,17076,17077],{"class":85},"    c1.m_A ",[68,17079,869],{"class":102},[68,17081,989],{"class":92},[68,17083,1804],{"class":85},[68,17085,17086],{"class":74}," \u002F\u002F错误，访问权限是私有\n",[68,17088,17089],{"class":70,"line":3244},[68,17090,4000],{"emptyLinePlaceholder":1679},[68,17092,17093],{"class":70,"line":3249},[68,17094,17095],{"class":85},"    C2 c2;\n",[68,17097,17098,17101,17103,17105,17107],{"class":70,"line":3255},[68,17099,17100],{"class":85},"    c2.m_A ",[68,17102,869],{"class":102},[68,17104,989],{"class":92},[68,17106,1804],{"class":85},[68,17108,17109],{"class":74}," \u002F\u002F正确，访问权限是公共\n",[68,17111,17112],{"class":70,"line":3276},[68,17113,4000],{"emptyLinePlaceholder":1679},[68,17115,17116,17118,17120,17122],{"class":70,"line":3281},[68,17117,3903],{"class":587},[68,17119,997],{"class":85},[68,17121,3908],{"class":872},[68,17123,1016],{"class":85},[68,17125,17126],{"class":70,"line":3295},[68,17127,4000],{"emptyLinePlaceholder":1679},[68,17129,17130,17132,17134],{"class":70,"line":3300},[68,17131,5689],{"class":102},[68,17133,5692],{"class":92},[68,17135,112],{"class":85},[68,17137,17138],{"class":70,"line":3329},[68,17139,118],{"class":85},[43,17141,17143],{"id":17142},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17145,17146],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17148,17149],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17151,17152],{},[1890,17153,16731],{},[58,17155,17157],{"className":11539,"code":17156,"language":11541,"meta":63,"style":63},"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",[65,17158,17159,17168,17172,17176,17181,17195,17204,17208,17218,17222,17229,17233,17237,17241,17246,17255,17262,17266,17271,17287,17310,17323,17330,17334,17343,17347,17351,17356,17372,17382,17386,17390,17394,17402,17406,17416,17420,17428,17432,17436,17444,17448,17452,17457,17470,17493,17497,17502,17515,17537,17541,17546,17560,17568,17572,17582,17586,17594],{"__ignoreMap":63},[68,17160,17161,17163,17166],{"class":70,"line":71},[68,17162,16291],{"class":102},[68,17164,17165],{"class":587}," Person",[68,17167,86],{"class":85},[68,17169,17170],{"class":70,"line":78},[68,17171,16313],{"class":102},[68,17173,17174],{"class":70,"line":89},[68,17175,4000],{"emptyLinePlaceholder":1679},[68,17177,17178],{"class":70,"line":115},[68,17179,17180],{"class":74},"    \u002F\u002F姓名设置可读可写\n",[68,17182,17183,17185,17187,17189,17191,17193],{"class":70,"line":280},[68,17184,16505],{"class":102},[68,17186,16508],{"class":587},[68,17188,997],{"class":85},[68,17190,16513],{"class":587},[68,17192,16516],{"class":6815},[68,17194,14039],{"class":85},[68,17196,17197,17199,17201],{"class":70,"line":301},[68,17198,16850],{"class":85},[68,17200,869],{"class":102},[68,17202,17203],{"class":85}," name;\n",[68,17205,17206],{"class":70,"line":320},[68,17207,3787],{"class":85},[68,17209,17210,17213,17216],{"class":70,"line":2915},[68,17211,17212],{"class":587},"    string",[68,17214,17215],{"class":587}," getName",[68,17217,3577],{"class":85},[68,17219,17220],{"class":70,"line":2921},[68,17221,3631],{"class":85},[68,17223,17224,17226],{"class":70,"line":2933},[68,17225,16349],{"class":102},[68,17227,17228],{"class":85}," m_Name;\n",[68,17230,17231],{"class":70,"line":3214},[68,17232,3787],{"class":85},[68,17234,17235],{"class":70,"line":3219},[68,17236,4000],{"emptyLinePlaceholder":1679},[68,17238,17239],{"class":70,"line":3225},[68,17240,4000],{"emptyLinePlaceholder":1679},[68,17242,17243],{"class":70,"line":3230},[68,17244,17245],{"class":74},"    \u002F\u002F获取年龄 \n",[68,17247,17248,17250,17253],{"class":70,"line":3244},[68,17249,3586],{"class":102},[68,17251,17252],{"class":587}," getAge",[68,17254,12451],{"class":85},[68,17256,17257,17259],{"class":70,"line":3249},[68,17258,16349],{"class":102},[68,17260,17261],{"class":85}," m_Age;\n",[68,17263,17264],{"class":70,"line":3255},[68,17265,3787],{"class":85},[68,17267,17268],{"class":70,"line":3276},[68,17269,17270],{"class":74},"    \u002F\u002F设置年龄\n",[68,17272,17273,17275,17278,17280,17282,17285],{"class":70,"line":3281},[68,17274,16505],{"class":102},[68,17276,17277],{"class":587}," setAge",[68,17279,997],{"class":85},[68,17281,1754],{"class":102},[68,17283,17284],{"class":6815}," age",[68,17286,14039],{"class":85},[68,17288,17289,17291,17294,17296,17298,17300,17303,17305,17308],{"class":70,"line":3295},[68,17290,4097],{"class":102},[68,17292,17293],{"class":85}," (age ",[68,17295,861],{"class":102},[68,17297,5692],{"class":92},[68,17299,4854],{"class":102},[68,17301,17302],{"class":85}," age ",[68,17304,2695],{"class":102},[68,17306,17307],{"class":92}," 150",[68,17309,14039],{"class":85},[68,17311,17312,17314,17316,17319,17321],{"class":70,"line":3300},[68,17313,11317],{"class":85},[68,17315,2778],{"class":102},[68,17317,17318],{"class":872}," \"你个老妖精!\"",[68,17320,3048],{"class":102},[68,17322,10439],{"class":85},[68,17324,17325,17328],{"class":70,"line":3329},[68,17326,17327],{"class":102},"            return",[68,17329,112],{"class":85},[68,17331,17332],{"class":70,"line":3334},[68,17333,4129],{"class":85},[68,17335,17336,17339,17341],{"class":70,"line":3351},[68,17337,17338],{"class":85},"        m_Age ",[68,17340,869],{"class":102},[68,17342,9396],{"class":85},[68,17344,17345],{"class":70,"line":3356},[68,17346,3787],{"class":85},[68,17348,17349],{"class":70,"line":3361},[68,17350,4000],{"emptyLinePlaceholder":1679},[68,17352,17353],{"class":70,"line":3366},[68,17354,17355],{"class":74},"    \u002F\u002F情人设置为只写\n",[68,17357,17358,17360,17363,17365,17367,17370],{"class":70,"line":3380},[68,17359,16505],{"class":102},[68,17361,17362],{"class":587}," setLover",[68,17364,997],{"class":85},[68,17366,16513],{"class":587},[68,17368,17369],{"class":6815}," lover",[68,17371,14039],{"class":85},[68,17373,17374,17377,17379],{"class":70,"line":3385},[68,17375,17376],{"class":85},"        m_Lover ",[68,17378,869],{"class":102},[68,17380,17381],{"class":85}," lover;\n",[68,17383,17384],{"class":70,"line":4177},[68,17385,3787],{"class":85},[68,17387,17388],{"class":70,"line":4191},[68,17389,4000],{"emptyLinePlaceholder":1679},[68,17391,17392],{"class":70,"line":4199},[68,17393,16818],{"class":102},[68,17395,17396,17399],{"class":70,"line":4204},[68,17397,17398],{"class":85},"    string m_Name;",[68,17400,17401],{"class":74}," \u002F\u002F可读可写  姓名\n",[68,17403,17404],{"class":70,"line":4210},[68,17405,14807],{"class":85},[68,17407,17408,17410,17413],{"class":70,"line":4216},[68,17409,3586],{"class":102},[68,17411,17412],{"class":85}," m_Age;",[68,17414,17415],{"class":74}," \u002F\u002F只读  年龄\n",[68,17417,17418],{"class":70,"line":4221},[68,17419,4000],{"emptyLinePlaceholder":1679},[68,17421,17422,17425],{"class":70,"line":9547},[68,17423,17424],{"class":85},"    string m_Lover;",[68,17426,17427],{"class":74}," \u002F\u002F只写  情人\n",[68,17429,17430],{"class":70,"line":9571},[68,17431,5594],{"class":85},[68,17433,17434],{"class":70,"line":9576},[68,17435,4000],{"emptyLinePlaceholder":1679},[68,17437,17438,17440,17442],{"class":70,"line":9582},[68,17439,1754],{"class":102},[68,17441,3574],{"class":587},[68,17443,12451],{"class":85},[68,17445,17446],{"class":70,"line":9609},[68,17447,4000],{"emptyLinePlaceholder":1679},[68,17449,17450],{"class":70,"line":9614},[68,17451,16909],{"class":85},[68,17453,17454],{"class":70,"line":9620},[68,17455,17456],{"class":74},"    \u002F\u002F姓名设置\n",[68,17458,17459,17462,17464,17466,17468],{"class":70,"line":9632},[68,17460,17461],{"class":85},"    p.",[68,17463,16662],{"class":587},[68,17465,997],{"class":85},[68,17467,9515],{"class":872},[68,17469,1016],{"class":85},[68,17471,17472,17474,17476,17479,17481,17484,17487,17489,17491],{"class":70,"line":9644},[68,17473,8128],{"class":85},[68,17475,2778],{"class":102},[68,17477,17478],{"class":872}," \"姓名： \"",[68,17480,3048],{"class":102},[68,17482,17483],{"class":85}," p.",[68,17485,17486],{"class":587},"getName",[68,17488,14647],{"class":85},[68,17490,2778],{"class":102},[68,17492,10439],{"class":85},[68,17494,17495],{"class":70,"line":9656},[68,17496,4000],{"emptyLinePlaceholder":1679},[68,17498,17499],{"class":70,"line":11314},[68,17500,17501],{"class":74},"    \u002F\u002F年龄设置\n",[68,17503,17504,17506,17509,17511,17513],{"class":70,"line":11339},[68,17505,17461],{"class":85},[68,17507,17508],{"class":587},"setAge",[68,17510,997],{"class":85},[68,17512,2392],{"class":92},[68,17514,1016],{"class":85},[68,17516,17517,17519,17521,17524,17526,17528,17531,17533,17535],{"class":70,"line":11362},[68,17518,8128],{"class":85},[68,17520,2778],{"class":102},[68,17522,17523],{"class":872}," \"年龄： \"",[68,17525,3048],{"class":102},[68,17527,17483],{"class":85},[68,17529,17530],{"class":587},"getAge",[68,17532,14647],{"class":85},[68,17534,2778],{"class":102},[68,17536,10439],{"class":85},[68,17538,17539],{"class":70,"line":11386},[68,17540,4000],{"emptyLinePlaceholder":1679},[68,17542,17543],{"class":70,"line":11391},[68,17544,17545],{"class":74},"    \u002F\u002F情人设置\n",[68,17547,17548,17550,17553,17555,17558],{"class":70,"line":11396},[68,17549,17461],{"class":85},[68,17551,17552],{"class":587},"setLover",[68,17554,997],{"class":85},[68,17556,17557],{"class":872},"\"苍井\"",[68,17559,1016],{"class":85},[68,17561,17562,17565],{"class":70,"line":11401},[68,17563,17564],{"class":74},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[68,17566,17567],{"class":74},"  \u002F\u002F只写属性，不可以读取\n",[68,17569,17570],{"class":70,"line":11410},[68,17571,4000],{"emptyLinePlaceholder":1679},[68,17573,17574,17576,17578,17580],{"class":70,"line":11415},[68,17575,3903],{"class":587},[68,17577,997],{"class":85},[68,17579,3908],{"class":872},[68,17581,1016],{"class":85},[68,17583,17584],{"class":70,"line":11421},[68,17585,4000],{"emptyLinePlaceholder":1679},[68,17587,17588,17590,17592],{"class":70,"line":11442},[68,17589,5689],{"class":102},[68,17591,5692],{"class":92},[68,17593,112],{"class":85},[68,17595,17596],{"class":70,"line":11448},[68,17597,118],{"class":85},[43,17599,17601],{"id":17600},"_814封装案例","8.1.4封装案例",[48,17603,17604],{},[51,17605,17606,17609],{},[1890,17607,17608],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[168,17611,17612,17615],{},[51,17613,17614],{},"求出立方体的面积和体积",[51,17616,17617],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[58,17619,17621],{"className":1740,"code":17620,"language":1742,"meta":63,"style":63},"#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",[65,17622,17623,17629,17639,17646,17650,17654,17659,17689,17693,17703,17713,17723,17727,17736,17740,17776,17780,17789,17793,17809,17813,17818,17827,17831,17838,17842,17851,17855,17862,17866,17875,17879,17886,17890,17895,17912,17916,17962,17966,17975,17979,17983,17987,17996,18000,18004,18009,18013,18019,18025,18031,18035,18039,18044,18066,18070,18124,18128,18136,18140,18145,18150,18163,18170,18186,18197,18203,18226,18232,18255,18269,18289,18295,18306,18329,18351,18356,18362,18376,18389,18394,18408,18413,18419,18424,18438,18443,18448,18462,18474,18479,18492,18497,18502,18507,18520,18525],{"__ignoreMap":63},[68,17624,17625,17627],{"class":70,"line":71},[68,17626,3551],{"class":102},[68,17628,3554],{"class":872},[68,17630,17631,17633,17635,17637],{"class":70,"line":78},[68,17632,3559],{"class":102},[68,17634,3562],{"class":102},[68,17636,3565],{"class":587},[68,17638,112],{"class":85},[68,17640,17641,17643],{"class":70,"line":89},[68,17642,16291],{"class":102},[68,17644,17645],{"class":587}," Cube\n",[68,17647,17648],{"class":70,"line":115},[68,17649,3149],{"class":85},[68,17651,17652],{"class":70,"line":280},[68,17653,16313],{"class":102},[68,17655,17656],{"class":70,"line":301},[68,17657,17658],{"class":74},"    \u002F\u002F输入长宽高\n",[68,17660,17661,17663,17666,17668,17670,17673,17675,17677,17680,17682,17684,17687],{"class":70,"line":320},[68,17662,16505],{"class":102},[68,17664,17665],{"class":587}," setLwh",[68,17667,997],{"class":85},[68,17669,1754],{"class":102},[68,17671,17672],{"class":6815}," l",[68,17674,2114],{"class":85},[68,17676,1754],{"class":102},[68,17678,17679],{"class":6815}," w",[68,17681,2114],{"class":85},[68,17683,1754],{"class":102},[68,17685,17686],{"class":6815}," h",[68,17688,1757],{"class":85},[68,17690,17691],{"class":70,"line":2915},[68,17692,3631],{"class":85},[68,17694,17695,17698,17700],{"class":70,"line":2921},[68,17696,17697],{"class":85},"        m_L",[68,17699,869],{"class":102},[68,17701,17702],{"class":85},"l;\n",[68,17704,17705,17708,17710],{"class":70,"line":2933},[68,17706,17707],{"class":85},"        m_W",[68,17709,869],{"class":102},[68,17711,17712],{"class":85},"w;\n",[68,17714,17715,17718,17720],{"class":70,"line":3214},[68,17716,17717],{"class":85},"        m_H",[68,17719,869],{"class":102},[68,17721,17722],{"class":85},"h;\n",[68,17724,17725],{"class":70,"line":3219},[68,17726,3787],{"class":85},[68,17728,17729,17731,17734],{"class":70,"line":3225},[68,17730,3586],{"class":102},[68,17732,17733],{"class":587}," mianji",[68,17735,3577],{"class":85},[68,17737,17738],{"class":70,"line":3230},[68,17739,3631],{"class":85},[68,17741,17742,17744,17746,17748,17751,17753,17756,17758,17761,17763,17766,17768,17771,17773],{"class":70,"line":3244},[68,17743,16349],{"class":102},[68,17745,984],{"class":92},[68,17747,2191],{"class":102},[68,17749,17750],{"class":85},"(m_L",[68,17752,2191],{"class":102},[68,17754,17755],{"class":85},"m_W ",[68,17757,2217],{"class":102},[68,17759,17760],{"class":85}," m_L",[68,17762,2191],{"class":102},[68,17764,17765],{"class":85},"m_H ",[68,17767,2217],{"class":102},[68,17769,17770],{"class":85}," m_W",[68,17772,2191],{"class":102},[68,17774,17775],{"class":85},"m_H);\n",[68,17777,17778],{"class":70,"line":3249},[68,17779,3787],{"class":85},[68,17781,17782,17784,17787],{"class":70,"line":3255},[68,17783,3586],{"class":102},[68,17785,17786],{"class":587}," tiji",[68,17788,3577],{"class":85},[68,17790,17791],{"class":70,"line":3276},[68,17792,3631],{"class":85},[68,17794,17795,17797,17799,17801,17804,17806],{"class":70,"line":3281},[68,17796,16349],{"class":102},[68,17798,17760],{"class":85},[68,17800,2191],{"class":102},[68,17802,17803],{"class":85},"m_W",[68,17805,2191],{"class":102},[68,17807,17808],{"class":85},"m_H;\n",[68,17810,17811],{"class":70,"line":3295},[68,17812,3787],{"class":85},[68,17814,17815],{"class":70,"line":3300},[68,17816,17817],{"class":74},"    \u002F\u002F获取长宽高\n",[68,17819,17820,17822,17825],{"class":70,"line":3329},[68,17821,3586],{"class":102},[68,17823,17824],{"class":587}," getLength",[68,17826,3577],{"class":85},[68,17828,17829],{"class":70,"line":3334},[68,17830,3631],{"class":85},[68,17832,17833,17835],{"class":70,"line":3351},[68,17834,16349],{"class":102},[68,17836,17837],{"class":85}," m_L;\n",[68,17839,17840],{"class":70,"line":3356},[68,17841,3787],{"class":85},[68,17843,17844,17846,17849],{"class":70,"line":3361},[68,17845,3586],{"class":102},[68,17847,17848],{"class":587}," getWidth",[68,17850,3577],{"class":85},[68,17852,17853],{"class":70,"line":3366},[68,17854,3631],{"class":85},[68,17856,17857,17859],{"class":70,"line":3380},[68,17858,16349],{"class":102},[68,17860,17861],{"class":85}," m_W;\n",[68,17863,17864],{"class":70,"line":3385},[68,17865,3787],{"class":85},[68,17867,17868,17870,17873],{"class":70,"line":4177},[68,17869,3586],{"class":102},[68,17871,17872],{"class":587}," getHeight",[68,17874,3577],{"class":85},[68,17876,17877],{"class":70,"line":4191},[68,17878,3631],{"class":85},[68,17880,17881,17883],{"class":70,"line":4199},[68,17882,16349],{"class":102},[68,17884,17885],{"class":85}," m_H;\n",[68,17887,17888],{"class":70,"line":4204},[68,17889,3787],{"class":85},[68,17891,17892],{"class":70,"line":4210},[68,17893,17894],{"class":74},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[68,17896,17897,17900,17903,17905,17908,17910],{"class":70,"line":4216},[68,17898,17899],{"class":102},"    bool",[68,17901,17902],{"class":587}," isEqual",[68,17904,997],{"class":85},[68,17906,17907],{"class":587},"Cube",[68,17909,4448],{"class":6815},[68,17911,1757],{"class":85},[68,17913,17914],{"class":70,"line":4221},[68,17915,3631],{"class":85},[68,17917,17918,17920,17923,17926,17928,17930,17933,17935,17938,17941,17943,17945,17948,17950,17952,17955,17957,17959],{"class":70,"line":9547},[68,17919,4097],{"class":102},[68,17921,17922],{"class":85}," (c.",[68,17924,17925],{"class":587},"getLength",[68,17927,14647],{"class":85},[68,17929,4548],{"class":102},[68,17931,17932],{"class":85}," m_L ",[68,17934,3317],{"class":102},[68,17936,17937],{"class":85}," c.",[68,17939,17940],{"class":587},"getWidth",[68,17942,14647],{"class":85},[68,17944,4548],{"class":102},[68,17946,17947],{"class":85}," m_W ",[68,17949,3317],{"class":102},[68,17951,17937],{"class":85},[68,17953,17954],{"class":587},"getHeight",[68,17956,14647],{"class":85},[68,17958,4548],{"class":102},[68,17960,17961],{"class":85}," m_H)\n",[68,17963,17964],{"class":70,"line":9571},[68,17965,4110],{"class":85},[68,17967,17968,17970,17973],{"class":70,"line":9576},[68,17969,17327],{"class":102},[68,17971,17972],{"class":92}," true",[68,17974,112],{"class":85},[68,17976,17977],{"class":70,"line":9582},[68,17978,4129],{"class":85},[68,17980,17981],{"class":70,"line":9609},[68,17982,4170],{"class":102},[68,17984,17985],{"class":70,"line":9614},[68,17986,4110],{"class":85},[68,17988,17989,17991,17994],{"class":70,"line":9620},[68,17990,17327],{"class":102},[68,17992,17993],{"class":92}," false",[68,17995,112],{"class":85},[68,17997,17998],{"class":70,"line":9632},[68,17999,4129],{"class":85},[68,18001,18002],{"class":70,"line":9644},[68,18003,3787],{"class":85},[68,18005,18006],{"class":70,"line":9656},[68,18007,18008],{"class":74},"    \u002F\u002F私有属性\n",[68,18010,18011],{"class":70,"line":11314},[68,18012,16818],{"class":102},[68,18014,18015,18017],{"class":70,"line":11339},[68,18016,3586],{"class":102},[68,18018,17837],{"class":85},[68,18020,18021,18023],{"class":70,"line":11362},[68,18022,3586],{"class":102},[68,18024,17861],{"class":85},[68,18026,18027,18029],{"class":70,"line":11386},[68,18028,3586],{"class":102},[68,18030,17885],{"class":85},[68,18032,18033],{"class":70,"line":11391},[68,18034,4000],{"emptyLinePlaceholder":1679},[68,18036,18037],{"class":70,"line":11396},[68,18038,5594],{"class":85},[68,18040,18041],{"class":70,"line":11401},[68,18042,18043],{"class":74},"\u002F\u002F全局函数判断两个立方体是否相等\n",[68,18045,18046,18048,18050,18052,18054,18057,18059,18061,18064],{"class":70,"line":11410},[68,18047,2958],{"class":102},[68,18049,17902],{"class":587},[68,18051,997],{"class":85},[68,18053,17907],{"class":587},[68,18055,18056],{"class":6815}," c1",[68,18058,2114],{"class":85},[68,18060,17907],{"class":587},[68,18062,18063],{"class":6815}," c2",[68,18065,1757],{"class":85},[68,18067,18068],{"class":70,"line":11415},[68,18069,3149],{"class":85},[68,18071,18072,18074,18077,18079,18081,18083,18086,18088,18091,18093,18095,18097,18099,18101,18103,18105,18107,18109,18111,18113,18115,18117,18119,18121],{"class":70,"line":11421},[68,18073,5689],{"class":102},[68,18075,18076],{"class":85}," (c1.",[68,18078,17925],{"class":587},[68,18080,14647],{"class":85},[68,18082,4548],{"class":102},[68,18084,18085],{"class":85}," c2.",[68,18087,17925],{"class":587},[68,18089,18090],{"class":85},"()) ",[68,18092,3317],{"class":102},[68,18094,18076],{"class":85},[68,18096,17940],{"class":587},[68,18098,14647],{"class":85},[68,18100,4548],{"class":102},[68,18102,18085],{"class":85},[68,18104,17940],{"class":587},[68,18106,18090],{"class":85},[68,18108,3317],{"class":102},[68,18110,18076],{"class":85},[68,18112,17954],{"class":587},[68,18114,14647],{"class":85},[68,18116,4548],{"class":102},[68,18118,18085],{"class":85},[68,18120,17954],{"class":587},[68,18122,18123],{"class":85},"());\n",[68,18125,18126],{"class":70,"line":11442},[68,18127,118],{"class":85},[68,18129,18130,18132,18134],{"class":70,"line":11448},[68,18131,1754],{"class":102},[68,18133,3574],{"class":587},[68,18135,3577],{"class":85},[68,18137,18138],{"class":70,"line":11462},[68,18139,3149],{"class":85},[68,18141,18142],{"class":70,"line":11468},[68,18143,18144],{"class":85},"    Cube c1;\n",[68,18146,18147],{"class":70,"line":11495},[68,18148,18149],{"class":74},"    \u002F\u002F输入立方体的长宽高\n",[68,18151,18152,18154,18156,18159,18161],{"class":70,"line":11504},[68,18153,3154],{"class":85},[68,18155,2778],{"class":102},[68,18157,18158],{"class":872},"\"请输入第一个立方体的长、宽、高：\"",[68,18160,2778],{"class":102},[68,18162,2800],{"class":85},[68,18164,18165,18167],{"class":70,"line":11510},[68,18166,3586],{"class":102},[68,18168,18169],{"class":85}," l,w,h,l1,w1,h1;\n",[68,18171,18172,18174,18176,18178,18180,18182,18184],{"class":70,"line":11518},[68,18173,3613],{"class":85},[68,18175,3033],{"class":102},[68,18177,2254],{"class":85},[68,18179,3033],{"class":102},[68,18181,2531],{"class":85},[68,18183,3033],{"class":102},[68,18185,17722],{"class":85},[68,18187,18188,18191,18194],{"class":70,"line":11523},[68,18189,18190],{"class":85},"    c1.",[68,18192,18193],{"class":587},"setLwh",[68,18195,18196],{"class":85},"(l,w,h);\n",[68,18198,18200],{"class":70,"line":18199},66,[68,18201,18202],{"class":74},"    \u002F\u002F面积\n",[68,18204,18206,18208,18210,18213,18215,18217,18220,18222,18224],{"class":70,"line":18205},67,[68,18207,3154],{"class":85},[68,18209,2778],{"class":102},[68,18211,18212],{"class":872},"\"立方体的表面积为：\"",[68,18214,2778],{"class":102},[68,18216,16426],{"class":85},[68,18218,18219],{"class":587},"mianji",[68,18221,4027],{"class":85},[68,18223,2778],{"class":102},[68,18225,2800],{"class":85},[68,18227,18229],{"class":70,"line":18228},68,[68,18230,18231],{"class":74},"    \u002F\u002F体积\n",[68,18233,18235,18237,18239,18242,18244,18246,18249,18251,18253],{"class":70,"line":18234},69,[68,18236,3154],{"class":85},[68,18238,2778],{"class":102},[68,18240,18241],{"class":872},"\"立方体的体积为：\"",[68,18243,2778],{"class":102},[68,18245,16426],{"class":85},[68,18247,18248],{"class":587},"tiji",[68,18250,4027],{"class":85},[68,18252,2778],{"class":102},[68,18254,2800],{"class":85},[68,18256,18258,18260,18262,18265,18267],{"class":70,"line":18257},70,[68,18259,3154],{"class":85},[68,18261,2778],{"class":102},[68,18263,18264],{"class":872},"\"请输入第二个立方体的长、宽、高：\"",[68,18266,2778],{"class":102},[68,18268,2800],{"class":85},[68,18270,18272,18274,18276,18279,18281,18284,18286],{"class":70,"line":18271},71,[68,18273,3613],{"class":85},[68,18275,3033],{"class":102},[68,18277,18278],{"class":85},"l1",[68,18280,3033],{"class":102},[68,18282,18283],{"class":85},"w1",[68,18285,3033],{"class":102},[68,18287,18288],{"class":85},"h1;\n",[68,18290,18292],{"class":70,"line":18291},72,[68,18293,18294],{"class":85},"    Cube c2;\n",[68,18296,18298,18301,18303],{"class":70,"line":18297},73,[68,18299,18300],{"class":85},"    c2.",[68,18302,18193],{"class":587},[68,18304,18305],{"class":85},"(l1,w1,h1);\n",[68,18307,18309,18311,18313,18316,18318,18321,18323,18325,18327],{"class":70,"line":18308},74,[68,18310,3154],{"class":85},[68,18312,2778],{"class":102},[68,18314,18315],{"class":872},"\"第二个立方体的表面积为：\"",[68,18317,2778],{"class":102},[68,18319,18320],{"class":85},"c2.",[68,18322,18219],{"class":587},[68,18324,4027],{"class":85},[68,18326,2778],{"class":102},[68,18328,2800],{"class":85},[68,18330,18332,18334,18336,18339,18341,18343,18345,18347,18349],{"class":70,"line":18331},75,[68,18333,3154],{"class":85},[68,18335,2778],{"class":102},[68,18337,18338],{"class":872},"\"第二个立方体的体积为：\"",[68,18340,2778],{"class":102},[68,18342,18320],{"class":85},[68,18344,18248],{"class":587},[68,18346,4027],{"class":85},[68,18348,2778],{"class":102},[68,18350,2800],{"class":85},[68,18352,18354],{"class":70,"line":18353},76,[68,18355,4000],{"emptyLinePlaceholder":1679},[68,18357,18359],{"class":70,"line":18358},77,[68,18360,18361],{"class":74},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[68,18363,18365,18367,18369,18372,18374],{"class":70,"line":18364},78,[68,18366,3154],{"class":85},[68,18368,2778],{"class":102},[68,18370,18371],{"class":872},"\"内部函数判断结果：\"",[68,18373,2778],{"class":102},[68,18375,2800],{"class":85},[68,18377,18379,18381,18383,18386],{"class":70,"line":18378},79,[68,18380,4700],{"class":102},[68,18382,18076],{"class":85},[68,18384,18385],{"class":587},"isEqual",[68,18387,18388],{"class":85},"(c2))\n",[68,18390,18392],{"class":70,"line":18391},80,[68,18393,3631],{"class":85},[68,18395,18397,18399,18401,18404,18406],{"class":70,"line":18396},81,[68,18398,5050],{"class":85},[68,18400,2778],{"class":102},[68,18402,18403],{"class":872},"\"两个立方体相等\"",[68,18405,2778],{"class":102},[68,18407,2800],{"class":85},[68,18409,18411],{"class":70,"line":18410},82,[68,18412,3787],{"class":85},[68,18414,18416],{"class":70,"line":18415},83,[68,18417,18418],{"class":102},"    else\n",[68,18420,18422],{"class":70,"line":18421},84,[68,18423,3631],{"class":85},[68,18425,18427,18429,18431,18434,18436],{"class":70,"line":18426},85,[68,18428,5050],{"class":85},[68,18430,2778],{"class":102},[68,18432,18433],{"class":872},"\"两个立方体不相等\"",[68,18435,2778],{"class":102},[68,18437,2800],{"class":85},[68,18439,18441],{"class":70,"line":18440},86,[68,18442,3787],{"class":85},[68,18444,18446],{"class":70,"line":18445},87,[68,18447,4000],{"emptyLinePlaceholder":1679},[68,18449,18451,18453,18455,18458,18460],{"class":70,"line":18450},88,[68,18452,3154],{"class":85},[68,18454,2778],{"class":102},[68,18456,18457],{"class":872},"\"全局函数判断结果：\"",[68,18459,2778],{"class":102},[68,18461,2800],{"class":85},[68,18463,18465,18467,18469,18471],{"class":70,"line":18464},89,[68,18466,4700],{"class":102},[68,18468,3260],{"class":85},[68,18470,18385],{"class":587},[68,18472,18473],{"class":85},"(c1, c2))\n",[68,18475,18477],{"class":70,"line":18476},90,[68,18478,3631],{"class":85},[68,18480,18482,18484,18486,18488,18490],{"class":70,"line":18481},91,[68,18483,5050],{"class":85},[68,18485,2778],{"class":102},[68,18487,18403],{"class":872},[68,18489,2778],{"class":102},[68,18491,2800],{"class":85},[68,18493,18495],{"class":70,"line":18494},92,[68,18496,3787],{"class":85},[68,18498,18500],{"class":70,"line":18499},93,[68,18501,18418],{"class":102},[68,18503,18505],{"class":70,"line":18504},94,[68,18506,3631],{"class":85},[68,18508,18510,18512,18514,18516,18518],{"class":70,"line":18509},95,[68,18511,5050],{"class":85},[68,18513,2778],{"class":102},[68,18515,18433],{"class":872},[68,18517,2778],{"class":102},[68,18519,2800],{"class":85},[68,18521,18523],{"class":70,"line":18522},96,[68,18524,3787],{"class":85},[68,18526,18528],{"class":70,"line":18527},97,[68,18529,118],{"class":85},[48,18531,18532],{"start":78},[51,18533,18534],{},[1890,18535,18536],{},"练习案例2：点和圆的关系",[168,18538,18539],{},[51,18540,18541],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[58,18543,18545],{"className":1740,"code":18544,"language":1742,"meta":63,"style":63},"#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",[65,18546,18547,18553,18563,18570,18577,18581,18585,18590,18624,18629,18645,18659,18663,18667,18674,18681,18685,18691,18695,18699,18703,18725,18748,18753,18767,18782,18786,18790,18796,18801,18806,18810,18836,18840,18870,18898,18926,18943,18947,18960,18964,18968,18972,18985,18989,18993,19001,19005,19009,19013,19018,19022,19033,19040,19049,19059,19070,19077,19090,19101,19111,19122,19129,19143,19148,19158,19166],{"__ignoreMap":63},[68,18548,18549,18551],{"class":70,"line":71},[68,18550,3551],{"class":102},[68,18552,3554],{"class":872},[68,18554,18555,18557,18559,18561],{"class":70,"line":78},[68,18556,3559],{"class":102},[68,18558,3562],{"class":102},[68,18560,3565],{"class":587},[68,18562,112],{"class":85},[68,18564,18565,18567],{"class":70,"line":89},[68,18566,3551],{"class":102},[68,18568,18569],{"class":872},"\u003Ccmath>\n",[68,18571,18572,18574],{"class":70,"line":115},[68,18573,16291],{"class":102},[68,18575,18576],{"class":587}," Point\n",[68,18578,18579],{"class":70,"line":280},[68,18580,3149],{"class":85},[68,18582,18583],{"class":70,"line":301},[68,18584,16313],{"class":102},[68,18586,18587],{"class":70,"line":320},[68,18588,18589],{"class":74},"    \u002F\u002F赋值\n",[68,18591,18592,18594,18597,18599,18601,18604,18606,18608,18611,18614,18616,18619,18621],{"class":70,"line":2915},[68,18593,16505],{"class":102},[68,18595,18596],{"class":587}," setPoint",[68,18598,997],{"class":85},[68,18600,15634],{"class":102},[68,18602,18603],{"class":6815}," x",[68,18605,1002],{"class":85},[68,18607,15634],{"class":102},[68,18609,18610],{"class":6815}," y",[68,18612,18613],{"class":85},") { m_x ",[68,18615,869],{"class":102},[68,18617,18618],{"class":85}," x; m_y ",[68,18620,869],{"class":102},[68,18622,18623],{"class":85}," y; }\n",[68,18625,18626],{"class":70,"line":2921},[68,18627,18628],{"class":74},"    \u002F\u002F获取坐标\n",[68,18630,18631,18633,18636,18639,18642],{"class":70,"line":2933},[68,18632,16335],{"class":102},[68,18634,18635],{"class":587}," getX",[68,18637,18638],{"class":85},"() { ",[68,18640,18641],{"class":102},"return",[68,18643,18644],{"class":85}," m_x; }\n",[68,18646,18647,18649,18652,18654,18656],{"class":70,"line":3214},[68,18648,16335],{"class":102},[68,18650,18651],{"class":587}," getY",[68,18653,18638],{"class":85},[68,18655,18641],{"class":102},[68,18657,18658],{"class":85}," m_y; }\n",[68,18660,18661],{"class":70,"line":3219},[68,18662,4000],{"emptyLinePlaceholder":1679},[68,18664,18665],{"class":70,"line":3225},[68,18666,16818],{"class":102},[68,18668,18669,18671],{"class":70,"line":3230},[68,18670,16335],{"class":102},[68,18672,18673],{"class":85}," m_x;\n",[68,18675,18676,18678],{"class":70,"line":3244},[68,18677,16335],{"class":102},[68,18679,18680],{"class":85}," m_y;\n",[68,18682,18683],{"class":70,"line":3249},[68,18684,5594],{"class":85},[68,18686,18687,18689],{"class":70,"line":3255},[68,18688,16291],{"class":102},[68,18690,16294],{"class":587},[68,18692,18693],{"class":70,"line":3276},[68,18694,3149],{"class":85},[68,18696,18697],{"class":70,"line":3281},[68,18698,16313],{"class":102},[68,18700,18701],{"class":70,"line":3295},[68,18702,18589],{"class":74},[68,18704,18705,18707,18710,18712,18714,18717,18720,18722],{"class":70,"line":3300},[68,18706,16505],{"class":102},[68,18708,18709],{"class":587}," setRadius",[68,18711,997],{"class":85},[68,18713,15634],{"class":102},[68,18715,18716],{"class":6815}," r",[68,18718,18719],{"class":85},") { m_r ",[68,18721,869],{"class":102},[68,18723,18724],{"class":85}," r; }\n",[68,18726,18727,18729,18732,18734,18737,18740,18743,18745],{"class":70,"line":3329},[68,18728,16505],{"class":102},[68,18730,18731],{"class":587}," setCenter",[68,18733,997],{"class":85},[68,18735,18736],{"class":587},"Point",[68,18738,18739],{"class":6815}," center",[68,18741,18742],{"class":85},") { m_center ",[68,18744,869],{"class":102},[68,18746,18747],{"class":85}," center; }\n",[68,18749,18750],{"class":70,"line":3334},[68,18751,18752],{"class":74},"    \u002F\u002F获取属性\n",[68,18754,18755,18757,18760,18762,18764],{"class":70,"line":3351},[68,18756,16335],{"class":102},[68,18758,18759],{"class":587}," getRadius",[68,18761,18638],{"class":85},[68,18763,18641],{"class":102},[68,18765,18766],{"class":85}," m_r; }\n",[68,18768,18769,18772,18775,18777,18779],{"class":70,"line":3356},[68,18770,18771],{"class":587},"    Point",[68,18773,18774],{"class":587}," getCenter",[68,18776,18638],{"class":85},[68,18778,18641],{"class":102},[68,18780,18781],{"class":85}," m_center; }\n",[68,18783,18784],{"class":70,"line":3361},[68,18785,4000],{"emptyLinePlaceholder":1679},[68,18787,18788],{"class":70,"line":3366},[68,18789,16818],{"class":102},[68,18791,18792,18794],{"class":70,"line":3380},[68,18793,16335],{"class":102},[68,18795,16325],{"class":85},[68,18797,18798],{"class":70,"line":3385},[68,18799,18800],{"class":74},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[68,18802,18803],{"class":70,"line":4177},[68,18804,18805],{"class":85},"    Point m_center;\n",[68,18807,18808],{"class":70,"line":4191},[68,18809,5594],{"class":85},[68,18811,18812,18814,18817,18819,18822,18824,18826,18828,18830,18832,18834],{"class":70,"line":4199},[68,18813,6963],{"class":102},[68,18815,18816],{"class":587}," isInCircle",[68,18818,997],{"class":85},[68,18820,18821],{"class":587},"Circle",[68,18823,12182],{"class":102},[68,18825,2024],{"class":6815},[68,18827,2114],{"class":85},[68,18829,18736],{"class":587},[68,18831,12182],{"class":102},[68,18833,19],{"class":6815},[68,18835,1757],{"class":85},[68,18837,18838],{"class":70,"line":4204},[68,18839,3149],{"class":85},[68,18841,18842,18844,18847,18849,18851,18854,18857,18860,18862,18864,18866,18868],{"class":70,"line":4210},[68,18843,16335],{"class":102},[68,18845,18846],{"class":85}," dx ",[68,18848,869],{"class":102},[68,18850,17937],{"class":85},[68,18852,18853],{"class":587},"getCenter",[68,18855,18856],{"class":85},"().",[68,18858,18859],{"class":587},"getX",[68,18861,14647],{"class":85},[68,18863,2268],{"class":102},[68,18865,17483],{"class":85},[68,18867,18859],{"class":587},[68,18869,7235],{"class":85},[68,18871,18872,18874,18877,18879,18881,18883,18885,18888,18890,18892,18894,18896],{"class":70,"line":4216},[68,18873,16335],{"class":102},[68,18875,18876],{"class":85}," dy ",[68,18878,869],{"class":102},[68,18880,17937],{"class":85},[68,18882,18853],{"class":587},[68,18884,18856],{"class":85},[68,18886,18887],{"class":587},"getY",[68,18889,14647],{"class":85},[68,18891,2268],{"class":102},[68,18893,17483],{"class":85},[68,18895,18887],{"class":587},[68,18897,7235],{"class":85},[68,18899,18900,18902,18905,18907,18910,18913,18915,18917,18919,18921,18923],{"class":70,"line":4221},[68,18901,16335],{"class":102},[68,18903,18904],{"class":85}," distance ",[68,18906,869],{"class":102},[68,18908,18909],{"class":587}," sqrt",[68,18911,18912],{"class":85},"(dx ",[68,18914,2191],{"class":102},[68,18916,18846],{"class":85},[68,18918,2217],{"class":102},[68,18920,18876],{"class":85},[68,18922,2191],{"class":102},[68,18924,18925],{"class":85}," dy);\n",[68,18927,18928,18930,18933,18935,18937,18940],{"class":70,"line":9547},[68,18929,4700],{"class":102},[68,18931,18932],{"class":85}," (distance ",[68,18934,861],{"class":102},[68,18936,17937],{"class":85},[68,18938,18939],{"class":587},"getRadius",[68,18941,18942],{"class":85},"())\n",[68,18944,18945],{"class":70,"line":9571},[68,18946,3631],{"class":85},[68,18948,18949,18951,18953,18956,18958],{"class":70,"line":9576},[68,18950,11267],{"class":85},[68,18952,2778],{"class":102},[68,18954,18955],{"class":872}," \"点在圆内\"",[68,18957,3048],{"class":102},[68,18959,10439],{"class":85},[68,18961,18962],{"class":70,"line":9582},[68,18963,3787],{"class":85},[68,18965,18966],{"class":70,"line":9609},[68,18967,18418],{"class":102},[68,18969,18970],{"class":70,"line":9614},[68,18971,3631],{"class":85},[68,18973,18974,18976,18978,18981,18983],{"class":70,"line":9620},[68,18975,11267],{"class":85},[68,18977,2778],{"class":102},[68,18979,18980],{"class":872}," \"点在圆外\"",[68,18982,3048],{"class":102},[68,18984,10439],{"class":85},[68,18986,18987],{"class":70,"line":9632},[68,18988,3787],{"class":85},[68,18990,18991],{"class":70,"line":9644},[68,18992,118],{"class":85},[68,18994,18995,18997,18999],{"class":70,"line":9656},[68,18996,1754],{"class":102},[68,18998,3574],{"class":587},[68,19000,3577],{"class":85},[68,19002,19003],{"class":70,"line":11314},[68,19004,3149],{"class":85},[68,19006,19007],{"class":70,"line":11339},[68,19008,16649],{"class":74},[68,19010,19011],{"class":70,"line":11362},[68,19012,16396],{"class":85},[68,19014,19015],{"class":70,"line":11386},[68,19016,19017],{"class":85},"    Point p1;\n",[68,19019,19020],{"class":70,"line":11391},[68,19021,18589],{"class":74},[68,19023,19024,19026,19028,19031],{"class":70,"line":11396},[68,19025,3154],{"class":85},[68,19027,2778],{"class":102},[68,19029,19030],{"class":872},"\"请输入圆的半径：\"",[68,19032,112],{"class":85},[68,19034,19035,19037],{"class":70,"line":11401},[68,19036,16335],{"class":102},[68,19038,19039],{"class":85}," r;\n",[68,19041,19042,19044,19046],{"class":70,"line":11410},[68,19043,3613],{"class":85},[68,19045,3033],{"class":102},[68,19047,19048],{"class":85},"r;\n",[68,19050,19051,19053,19056],{"class":70,"line":11415},[68,19052,18190],{"class":85},[68,19054,19055],{"class":587},"setRadius",[68,19057,19058],{"class":85},"(r);\n",[68,19060,19061,19063,19065,19068],{"class":70,"line":11421},[68,19062,3154],{"class":85},[68,19064,2778],{"class":102},[68,19066,19067],{"class":872},"\"请输入圆心坐标：\"",[68,19069,112],{"class":85},[68,19071,19072,19074],{"class":70,"line":11442},[68,19073,16335],{"class":102},[68,19075,19076],{"class":85}," x, y;\n",[68,19078,19079,19081,19083,19085,19087],{"class":70,"line":11448},[68,19080,3613],{"class":85},[68,19082,3033],{"class":102},[68,19084,2556],{"class":85},[68,19086,3033],{"class":102},[68,19088,19089],{"class":85},"y;\n",[68,19091,19092,19095,19098],{"class":70,"line":11462},[68,19093,19094],{"class":85},"    p1.",[68,19096,19097],{"class":587},"setPoint",[68,19099,19100],{"class":85},"(x, y);\n",[68,19102,19103,19105,19108],{"class":70,"line":11468},[68,19104,18190],{"class":85},[68,19106,19107],{"class":587},"setCenter",[68,19109,19110],{"class":85},"(p1);\n",[68,19112,19113,19115,19117,19120],{"class":70,"line":11495},[68,19114,3154],{"class":85},[68,19116,2778],{"class":102},[68,19118,19119],{"class":872},"\"请输入测试点坐标：\"",[68,19121,112],{"class":85},[68,19123,19124,19126],{"class":70,"line":11504},[68,19125,16335],{"class":102},[68,19127,19128],{"class":85}," x1, y1;\n",[68,19130,19131,19133,19135,19138,19140],{"class":70,"line":11510},[68,19132,3613],{"class":85},[68,19134,3033],{"class":102},[68,19136,19137],{"class":85},"x1",[68,19139,3033],{"class":102},[68,19141,19142],{"class":85},"y1;\n",[68,19144,19145],{"class":70,"line":11518},[68,19146,19147],{"class":85},"    Point p2;\n",[68,19149,19150,19153,19155],{"class":70,"line":11523},[68,19151,19152],{"class":85},"    p2.",[68,19154,19097],{"class":587},[68,19156,19157],{"class":85},"(x1, y1);\n",[68,19159,19160,19163],{"class":70,"line":18199},[68,19161,19162],{"class":587},"    isInCircle",[68,19164,19165],{"class":85},"(c1, p2);\n",[68,19167,19168],{"class":70,"line":18205},[68,19169,118],{"class":85},[19,19171,19172],{},"在类中可以让另一个类作为本来的成员",[19,19174,19175],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19177,19178],{},"创建point.h",[58,19180,19182],{"className":1740,"code":19181,"language":1742,"meta":63,"style":63},"#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",[65,19183,19184,19195,19201,19211,19217,19221,19226,19230,19234,19254,19258,19266,19274,19278,19282,19288,19294],{"__ignoreMap":63},[68,19185,19186,19189,19192],{"class":70,"line":71},[68,19187,19188],{"class":102},"#pragma",[68,19190,19191],{"class":587}," once",[68,19193,19194],{"class":74}," \u002F\u002F防止头文件重复包含\n",[68,19196,19197,19199],{"class":70,"line":78},[68,19198,3551],{"class":102},[68,19200,3554],{"class":872},[68,19202,19203,19205,19207,19209],{"class":70,"line":89},[68,19204,3559],{"class":102},[68,19206,3562],{"class":102},[68,19208,3565],{"class":587},[68,19210,112],{"class":85},[68,19212,19213,19215],{"class":70,"line":115},[68,19214,16291],{"class":102},[68,19216,18576],{"class":587},[68,19218,19219],{"class":70,"line":280},[68,19220,3149],{"class":85},[68,19222,19223],{"class":70,"line":301},[68,19224,19225],{"class":74},"\u002F\u002F做好声明与变量定义就可以\n",[68,19227,19228],{"class":70,"line":320},[68,19229,16313],{"class":102},[68,19231,19232],{"class":70,"line":2915},[68,19233,18589],{"class":74},[68,19235,19236,19238,19240,19242,19244,19246,19248,19250,19252],{"class":70,"line":2921},[68,19237,16505],{"class":102},[68,19239,18596],{"class":587},[68,19241,997],{"class":85},[68,19243,15634],{"class":102},[68,19245,18603],{"class":6815},[68,19247,1002],{"class":85},[68,19249,15634],{"class":102},[68,19251,18610],{"class":6815},[68,19253,1016],{"class":85},[68,19255,19256],{"class":70,"line":2933},[68,19257,18628],{"class":74},[68,19259,19260,19262,19264],{"class":70,"line":3214},[68,19261,16335],{"class":102},[68,19263,18635],{"class":587},[68,19265,7235],{"class":85},[68,19267,19268,19270,19272],{"class":70,"line":3219},[68,19269,16335],{"class":102},[68,19271,18651],{"class":587},[68,19273,7235],{"class":85},[68,19275,19276],{"class":70,"line":3225},[68,19277,4000],{"emptyLinePlaceholder":1679},[68,19279,19280],{"class":70,"line":3230},[68,19281,16818],{"class":102},[68,19283,19284,19286],{"class":70,"line":3244},[68,19285,16335],{"class":102},[68,19287,18673],{"class":85},[68,19289,19290,19292],{"class":70,"line":3249},[68,19291,16335],{"class":102},[68,19293,18680],{"class":85},[68,19295,19296],{"class":70,"line":3255},[68,19297,5594],{"class":85},[19,19299,19300],{},"创建point.cpp",[58,19302,19304],{"className":1740,"code":19303,"language":1742,"meta":63,"style":63},"#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",[65,19305,19306,19313,19318,19352,19356,19372],{"__ignoreMap":63},[68,19307,19308,19310],{"class":70,"line":71},[68,19309,3551],{"class":102},[68,19311,19312],{"class":872},"\u003Cpoint.h>\n",[68,19314,19315],{"class":70,"line":78},[68,19316,19317],{"class":74},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[68,19319,19320,19322,19325,19328,19330,19332,19334,19336,19338,19340,19342,19344,19346,19348,19350],{"class":70,"line":89},[68,19321,16505],{"class":102},[68,19323,19324],{"class":587}," Point",[68,19326,19327],{"class":85},"::",[68,19329,19097],{"class":587},[68,19331,997],{"class":85},[68,19333,15634],{"class":102},[68,19335,18603],{"class":6815},[68,19337,1002],{"class":85},[68,19339,15634],{"class":102},[68,19341,18610],{"class":6815},[68,19343,18613],{"class":85},[68,19345,869],{"class":102},[68,19347,18618],{"class":85},[68,19349,869],{"class":102},[68,19351,18623],{"class":85},[68,19353,19354],{"class":70,"line":115},[68,19355,18628],{"class":74},[68,19357,19358,19360,19362,19364,19366,19368,19370],{"class":70,"line":280},[68,19359,16335],{"class":102},[68,19361,19324],{"class":587},[68,19363,19327],{"class":85},[68,19365,18859],{"class":587},[68,19367,18638],{"class":85},[68,19369,18641],{"class":102},[68,19371,18644],{"class":85},[68,19373,19374,19376,19378,19380,19382,19384,19386],{"class":70,"line":301},[68,19375,16335],{"class":102},[68,19377,19324],{"class":587},[68,19379,19327],{"class":85},[68,19381,18887],{"class":587},[68,19383,18638],{"class":85},[68,19385,18641],{"class":102},[68,19387,18658],{"class":85},[19,19389,19390],{},"创建circle.h",[58,19392,19394],{"className":1740,"code":19393,"language":1742,"meta":63,"style":63},"#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",[65,19395,19396,19403,19409,19419,19425,19431,19435,19439,19443,19457,19471,19475,19483,19491,19495,19499,19505,19509,19513],{"__ignoreMap":63},[68,19397,19398,19400],{"class":70,"line":71},[68,19399,19188],{"class":102},[68,19401,19402],{"class":587}," once\n",[68,19404,19405,19407],{"class":70,"line":78},[68,19406,3551],{"class":102},[68,19408,3554],{"class":872},[68,19410,19411,19413,19415,19417],{"class":70,"line":89},[68,19412,3559],{"class":102},[68,19414,3562],{"class":102},[68,19416,3565],{"class":587},[68,19418,112],{"class":85},[68,19420,19421,19423],{"class":70,"line":115},[68,19422,3551],{"class":102},[68,19424,19312],{"class":872},[68,19426,19427,19429],{"class":70,"line":280},[68,19428,16291],{"class":102},[68,19430,16294],{"class":587},[68,19432,19433],{"class":70,"line":301},[68,19434,3149],{"class":85},[68,19436,19437],{"class":70,"line":320},[68,19438,16313],{"class":102},[68,19440,19441],{"class":70,"line":2915},[68,19442,18589],{"class":74},[68,19444,19445,19447,19449,19451,19453,19455],{"class":70,"line":2921},[68,19446,16505],{"class":102},[68,19448,18709],{"class":587},[68,19450,997],{"class":85},[68,19452,15634],{"class":102},[68,19454,18716],{"class":6815},[68,19456,1016],{"class":85},[68,19458,19459,19461,19463,19465,19467,19469],{"class":70,"line":2933},[68,19460,16505],{"class":102},[68,19462,18731],{"class":587},[68,19464,997],{"class":85},[68,19466,18736],{"class":587},[68,19468,18739],{"class":6815},[68,19470,1016],{"class":85},[68,19472,19473],{"class":70,"line":3214},[68,19474,18752],{"class":74},[68,19476,19477,19479,19481],{"class":70,"line":3219},[68,19478,16335],{"class":102},[68,19480,18759],{"class":587},[68,19482,7235],{"class":85},[68,19484,19485,19487,19489],{"class":70,"line":3225},[68,19486,18771],{"class":587},[68,19488,18774],{"class":587},[68,19490,7235],{"class":85},[68,19492,19493],{"class":70,"line":3230},[68,19494,4000],{"emptyLinePlaceholder":1679},[68,19496,19497],{"class":70,"line":3244},[68,19498,16818],{"class":102},[68,19500,19501,19503],{"class":70,"line":3249},[68,19502,16335],{"class":102},[68,19504,16325],{"class":85},[68,19506,19507],{"class":70,"line":3255},[68,19508,18800],{"class":74},[68,19510,19511],{"class":70,"line":3276},[68,19512,18805],{"class":85},[68,19514,19515],{"class":70,"line":3281},[68,19516,5594],{"class":85},[19,19518,19519],{},"创建circle.cpp",[58,19521,19523],{"className":1740,"code":19522,"language":1742,"meta":63,"style":63},"#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",[65,19524,19525,19532,19555,19577,19582,19598],{"__ignoreMap":63},[68,19526,19527,19529],{"class":70,"line":71},[68,19528,3551],{"class":102},[68,19530,19531],{"class":872},"\u003Ccircle.h>\n",[68,19533,19534,19536,19539,19541,19543,19545,19547,19549,19551,19553],{"class":70,"line":78},[68,19535,6963],{"class":102},[68,19537,19538],{"class":587}," Circle",[68,19540,19327],{"class":85},[68,19542,19055],{"class":587},[68,19544,997],{"class":85},[68,19546,15634],{"class":102},[68,19548,18716],{"class":6815},[68,19550,18719],{"class":85},[68,19552,869],{"class":102},[68,19554,18724],{"class":85},[68,19556,19557,19559,19561,19563,19565,19567,19569,19571,19573,19575],{"class":70,"line":89},[68,19558,6963],{"class":102},[68,19560,19538],{"class":587},[68,19562,19327],{"class":85},[68,19564,19107],{"class":587},[68,19566,997],{"class":85},[68,19568,18736],{"class":587},[68,19570,18739],{"class":6815},[68,19572,18742],{"class":85},[68,19574,869],{"class":102},[68,19576,18747],{"class":85},[68,19578,19579],{"class":70,"line":115},[68,19580,19581],{"class":74},"\u002F\u002F获取属性\n",[68,19583,19584,19586,19588,19590,19592,19594,19596],{"class":70,"line":280},[68,19585,15634],{"class":102},[68,19587,19538],{"class":587},[68,19589,19327],{"class":85},[68,19591,18939],{"class":587},[68,19593,18638],{"class":85},[68,19595,18641],{"class":102},[68,19597,18766],{"class":85},[68,19599,19600,19602,19604,19606,19608,19610,19612],{"class":70,"line":301},[68,19601,18736],{"class":587},[68,19603,19538],{"class":587},[68,19605,19327],{"class":85},[68,19607,18853],{"class":587},[68,19609,18638],{"class":85},[68,19611,18641],{"class":102},[68,19613,18781],{"class":85},[19,19615,19616],{},"使用封装的类",[58,19618,19620],{"className":1740,"code":19619,"language":1742,"meta":63,"style":63},"#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",[65,19621,19622,19628,19638,19644,19650,19674,19678,19704,19730,19754,19768,19772,19784,19788,19792,19796,19808,19812,19816,19824,19828,19832,19836,19840,19844,19854,19860,19868,19876,19886,19892,19904,19912,19920,19930,19936,19948,19952,19960,19966],{"__ignoreMap":63},[68,19623,19624,19626],{"class":70,"line":71},[68,19625,3551],{"class":102},[68,19627,3554],{"class":872},[68,19629,19630,19632,19634,19636],{"class":70,"line":78},[68,19631,3559],{"class":102},[68,19633,3562],{"class":102},[68,19635,3565],{"class":587},[68,19637,112],{"class":85},[68,19639,19640,19642],{"class":70,"line":89},[68,19641,3551],{"class":102},[68,19643,19531],{"class":872},[68,19645,19646,19648],{"class":70,"line":115},[68,19647,3551],{"class":102},[68,19649,19312],{"class":872},[68,19651,19652,19654,19656,19658,19660,19662,19664,19666,19668,19670,19672],{"class":70,"line":280},[68,19653,6963],{"class":102},[68,19655,18816],{"class":587},[68,19657,997],{"class":85},[68,19659,18821],{"class":587},[68,19661,12182],{"class":102},[68,19663,2024],{"class":6815},[68,19665,2114],{"class":85},[68,19667,18736],{"class":587},[68,19669,12182],{"class":102},[68,19671,19],{"class":6815},[68,19673,1757],{"class":85},[68,19675,19676],{"class":70,"line":301},[68,19677,3149],{"class":85},[68,19679,19680,19682,19684,19686,19688,19690,19692,19694,19696,19698,19700,19702],{"class":70,"line":320},[68,19681,16335],{"class":102},[68,19683,18846],{"class":85},[68,19685,869],{"class":102},[68,19687,17937],{"class":85},[68,19689,18853],{"class":587},[68,19691,18856],{"class":85},[68,19693,18859],{"class":587},[68,19695,14647],{"class":85},[68,19697,2268],{"class":102},[68,19699,17483],{"class":85},[68,19701,18859],{"class":587},[68,19703,7235],{"class":85},[68,19705,19706,19708,19710,19712,19714,19716,19718,19720,19722,19724,19726,19728],{"class":70,"line":2915},[68,19707,16335],{"class":102},[68,19709,18876],{"class":85},[68,19711,869],{"class":102},[68,19713,17937],{"class":85},[68,19715,18853],{"class":587},[68,19717,18856],{"class":85},[68,19719,18887],{"class":587},[68,19721,14647],{"class":85},[68,19723,2268],{"class":102},[68,19725,17483],{"class":85},[68,19727,18887],{"class":587},[68,19729,7235],{"class":85},[68,19731,19732,19734,19736,19738,19740,19742,19744,19746,19748,19750,19752],{"class":70,"line":2921},[68,19733,16335],{"class":102},[68,19735,18904],{"class":85},[68,19737,869],{"class":102},[68,19739,18909],{"class":587},[68,19741,18912],{"class":85},[68,19743,2191],{"class":102},[68,19745,18846],{"class":85},[68,19747,2217],{"class":102},[68,19749,18876],{"class":85},[68,19751,2191],{"class":102},[68,19753,18925],{"class":85},[68,19755,19756,19758,19760,19762,19764,19766],{"class":70,"line":2933},[68,19757,4700],{"class":102},[68,19759,18932],{"class":85},[68,19761,861],{"class":102},[68,19763,17937],{"class":85},[68,19765,18939],{"class":587},[68,19767,18942],{"class":85},[68,19769,19770],{"class":70,"line":3214},[68,19771,3631],{"class":85},[68,19773,19774,19776,19778,19780,19782],{"class":70,"line":3219},[68,19775,11267],{"class":85},[68,19777,2778],{"class":102},[68,19779,18955],{"class":872},[68,19781,3048],{"class":102},[68,19783,10439],{"class":85},[68,19785,19786],{"class":70,"line":3225},[68,19787,3787],{"class":85},[68,19789,19790],{"class":70,"line":3230},[68,19791,18418],{"class":102},[68,19793,19794],{"class":70,"line":3244},[68,19795,3631],{"class":85},[68,19797,19798,19800,19802,19804,19806],{"class":70,"line":3249},[68,19799,11267],{"class":85},[68,19801,2778],{"class":102},[68,19803,18980],{"class":872},[68,19805,3048],{"class":102},[68,19807,10439],{"class":85},[68,19809,19810],{"class":70,"line":3255},[68,19811,3787],{"class":85},[68,19813,19814],{"class":70,"line":3276},[68,19815,118],{"class":85},[68,19817,19818,19820,19822],{"class":70,"line":3281},[68,19819,1754],{"class":102},[68,19821,3574],{"class":587},[68,19823,3577],{"class":85},[68,19825,19826],{"class":70,"line":3295},[68,19827,3149],{"class":85},[68,19829,19830],{"class":70,"line":3300},[68,19831,16649],{"class":74},[68,19833,19834],{"class":70,"line":3329},[68,19835,16396],{"class":85},[68,19837,19838],{"class":70,"line":3334},[68,19839,19017],{"class":85},[68,19841,19842],{"class":70,"line":3351},[68,19843,18589],{"class":74},[68,19845,19846,19848,19850,19852],{"class":70,"line":3356},[68,19847,3154],{"class":85},[68,19849,2778],{"class":102},[68,19851,19030],{"class":872},[68,19853,112],{"class":85},[68,19855,19856,19858],{"class":70,"line":3361},[68,19857,16335],{"class":102},[68,19859,19039],{"class":85},[68,19861,19862,19864,19866],{"class":70,"line":3366},[68,19863,3613],{"class":85},[68,19865,3033],{"class":102},[68,19867,19048],{"class":85},[68,19869,19870,19872,19874],{"class":70,"line":3380},[68,19871,18190],{"class":85},[68,19873,19055],{"class":587},[68,19875,19058],{"class":85},[68,19877,19878,19880,19882,19884],{"class":70,"line":3385},[68,19879,3154],{"class":85},[68,19881,2778],{"class":102},[68,19883,19067],{"class":872},[68,19885,112],{"class":85},[68,19887,19888,19890],{"class":70,"line":4177},[68,19889,16335],{"class":102},[68,19891,19076],{"class":85},[68,19893,19894,19896,19898,19900,19902],{"class":70,"line":4191},[68,19895,3613],{"class":85},[68,19897,3033],{"class":102},[68,19899,2556],{"class":85},[68,19901,3033],{"class":102},[68,19903,19089],{"class":85},[68,19905,19906,19908,19910],{"class":70,"line":4199},[68,19907,19094],{"class":85},[68,19909,19097],{"class":587},[68,19911,19100],{"class":85},[68,19913,19914,19916,19918],{"class":70,"line":4204},[68,19915,18190],{"class":85},[68,19917,19107],{"class":587},[68,19919,19110],{"class":85},[68,19921,19922,19924,19926,19928],{"class":70,"line":4210},[68,19923,3154],{"class":85},[68,19925,2778],{"class":102},[68,19927,19119],{"class":872},[68,19929,112],{"class":85},[68,19931,19932,19934],{"class":70,"line":4216},[68,19933,16335],{"class":102},[68,19935,19128],{"class":85},[68,19937,19938,19940,19942,19944,19946],{"class":70,"line":4221},[68,19939,3613],{"class":85},[68,19941,3033],{"class":102},[68,19943,19137],{"class":85},[68,19945,3033],{"class":102},[68,19947,19142],{"class":85},[68,19949,19950],{"class":70,"line":9547},[68,19951,19147],{"class":85},[68,19953,19954,19956,19958],{"class":70,"line":9571},[68,19955,19152],{"class":85},[68,19957,19097],{"class":587},[68,19959,19157],{"class":85},[68,19961,19962,19964],{"class":70,"line":9576},[68,19963,19162],{"class":587},[68,19965,19165],{"class":85},[68,19967,19968],{"class":70,"line":9582},[68,19969,118],{"class":85},[14,19971,19973],{"id":19972},"_82对象的初始化清理","8.2对象的初始化清理",[168,19975,19976,19979],{},[51,19977,19978],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[51,19980,19981],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[43,19983,19985],{"id":19984},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19987,19988,19989,19992],{},"对象的",[1890,19990,19991],{},"初始化和清理","也是两个非常重要的安全问题",[19,19994,19995],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19997,19998],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20000,20001,20002,20005,20006,20009],{},"c++利用了",[1890,20003,20004],{},"构造函数","和",[1890,20007,20008],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20011,20012,20013],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1890,20014,20015],{},"我们不提供构造和析构，编译器会提供",[19,20017,20018],{},[1890,20019,20020],{},"编译器提供的构造函数和析构函数是空实现。",[168,20022,20023,20026],{},[51,20024,20025],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[51,20027,20028,20029,20032],{},"析构函数：主要作用在于对象",[1890,20030,20031],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20034,20035,20038],{},[1890,20036,20037],{},"构造函数语法：",[65,20039,20040],{},"类名(){}",[48,20042,20043,20046,20049,20052,20055],{},[51,20044,20045],{},"构造函数，没有返回值也不写void",[51,20047,20048],{},"函数名称与类名相同",[51,20050,20051],{},"构造函数可以有参数，因此可以发生重载",[51,20053,20054],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[51,20056,20057,20058,2165],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[65,20059,20060],{},"Person(){}",[19,20062,20063,15392,20066],{},[1890,20064,20065],{},"析构函数语法：",[65,20067,20068],{},"~类名(){}",[48,20070,20071,20074,20077,20083],{},[51,20072,20073],{},"析构函数，没有返回值也不写void",[51,20075,20076],{},"函数名称与类名相同,在名称前加上符号  ~",[51,20078,20079,20080],{},"析构函数不可以有参数，因此",[1890,20081,20082],{},"不可以发生重载",[51,20084,20085],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[58,20087,20089],{"className":1740,"code":20088,"language":1742,"meta":63,"style":63},"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",[65,20090,20091,20097,20101,20105,20110,20117,20121,20134,20138,20143,20150,20154,20167,20171,20175,20179,20183,20191,20195,20203,20207,20211,20219,20223,20228,20232,20239,20243,20256,20260,20268],{"__ignoreMap":63},[68,20092,20093,20095],{"class":70,"line":71},[68,20094,16291],{"class":102},[68,20096,16767],{"class":587},[68,20098,20099],{"class":70,"line":78},[68,20100,3149],{"class":85},[68,20102,20103],{"class":70,"line":89},[68,20104,16313],{"class":102},[68,20106,20107],{"class":70,"line":115},[68,20108,20109],{"class":74},"    \u002F\u002F构造函数\n",[68,20111,20112,20115],{"class":70,"line":280},[68,20113,20114],{"class":587},"    Person",[68,20116,3577],{"class":85},[68,20118,20119],{"class":70,"line":301},[68,20120,3631],{"class":85},[68,20122,20123,20125,20127,20130,20132],{"class":70,"line":320},[68,20124,11267],{"class":85},[68,20126,2778],{"class":102},[68,20128,20129],{"class":872}," \"Person的构造函数调用\"",[68,20131,3048],{"class":102},[68,20133,10439],{"class":85},[68,20135,20136],{"class":70,"line":2915},[68,20137,3787],{"class":85},[68,20139,20140],{"class":70,"line":2921},[68,20141,20142],{"class":74},"    \u002F\u002F析构函数\n",[68,20144,20145,20148],{"class":70,"line":2933},[68,20146,20147],{"class":587},"    ~Person",[68,20149,3577],{"class":85},[68,20151,20152],{"class":70,"line":3214},[68,20153,3631],{"class":85},[68,20155,20156,20158,20160,20163,20165],{"class":70,"line":3219},[68,20157,11267],{"class":85},[68,20159,2778],{"class":102},[68,20161,20162],{"class":872}," \"Person的析构函数调用\"",[68,20164,3048],{"class":102},[68,20166,10439],{"class":85},[68,20168,20169],{"class":70,"line":3225},[68,20170,3787],{"class":85},[68,20172,20173],{"class":70,"line":3230},[68,20174,4000],{"emptyLinePlaceholder":1679},[68,20176,20177],{"class":70,"line":3244},[68,20178,5594],{"class":85},[68,20180,20181],{"class":70,"line":3249},[68,20182,4000],{"emptyLinePlaceholder":1679},[68,20184,20185,20187,20189],{"class":70,"line":3255},[68,20186,6963],{"class":102},[68,20188,7187],{"class":587},[68,20190,3577],{"class":85},[68,20192,20193],{"class":70,"line":3276},[68,20194,3149],{"class":85},[68,20196,20197,20200],{"class":70,"line":3281},[68,20198,20199],{"class":85},"    Person p;",[68,20201,20202],{"class":74},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[68,20204,20205],{"class":70,"line":3295},[68,20206,118],{"class":85},[68,20208,20209],{"class":70,"line":3300},[68,20210,4000],{"emptyLinePlaceholder":1679},[68,20212,20213,20215,20217],{"class":70,"line":3329},[68,20214,1754],{"class":102},[68,20216,3574],{"class":587},[68,20218,12451],{"class":85},[68,20220,20221],{"class":70,"line":3334},[68,20222,14807],{"class":85},[68,20224,20225],{"class":70,"line":3351},[68,20226,20227],{"class":74},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[68,20229,20230],{"class":70,"line":3356},[68,20231,4000],{"emptyLinePlaceholder":1679},[68,20233,20234,20236],{"class":70,"line":3361},[68,20235,20199],{"class":85},[68,20237,20238],{"class":74},"\u002F\u002F只有构造函数\n",[68,20240,20241],{"class":70,"line":3366},[68,20242,4000],{"emptyLinePlaceholder":1679},[68,20244,20245,20247,20249,20251,20253],{"class":70,"line":3380},[68,20246,3903],{"class":587},[68,20248,997],{"class":85},[68,20250,3908],{"class":872},[68,20252,7565],{"class":85},[68,20254,20255],{"class":74},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[68,20257,20258],{"class":70,"line":3385},[68,20259,4000],{"emptyLinePlaceholder":1679},[68,20261,20262,20264,20266],{"class":70,"line":4177},[68,20263,5689],{"class":102},[68,20265,5692],{"class":92},[68,20267,112],{"class":85},[68,20269,20270],{"class":70,"line":4191},[68,20271,118],{"class":85},[19,20273,20274],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[43,20276,20278],{"id":20277},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20280,20281],{},"两种分类方式：",[19,20283,20284],{},"​\t按参数分为： 有参构造和无参构造",[19,20286,20287],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20289,20290],{},"三种调用方式：",[19,20292,20293],{},"​\t括号法",[19,20295,20296],{},"​\t显示法",[19,20298,20299],{},"​\t隐式转换法",[58,20301,20303],{"className":1740,"code":20302,"language":1742,"meta":63,"style":63},"#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",[65,20304,20305,20311,20321,20326,20331,20336,20341,20345,20353,20357,20361,20365,20371,20375,20388,20392,20404,20408,20417,20430,20434,20438,20444,20448,20461,20465,20470,20486,20490,20495,20504,20517,20521,20527,20531,20536,20544,20548,20553,20557,20565,20569,20574,20579,20584,20589,20594,20598,20603,20608,20613,20618,20622,20627,20632,20648,20660,20665,20669,20674,20679,20684,20688,20693,20707,20720,20724,20732,20736,20742,20748,20756],{"__ignoreMap":63},[68,20306,20307,20309],{"class":70,"line":71},[68,20308,3551],{"class":102},[68,20310,3554],{"class":872},[68,20312,20313,20315,20317,20319],{"class":70,"line":78},[68,20314,3559],{"class":102},[68,20316,3562],{"class":102},[68,20318,3565],{"class":587},[68,20320,112],{"class":85},[68,20322,20323],{"class":70,"line":89},[68,20324,20325],{"class":74},"\u002F\u002F1.构造函数的分类及调用\n",[68,20327,20328],{"class":70,"line":115},[68,20329,20330],{"class":74},"\u002F\u002F分类\n",[68,20332,20333],{"class":70,"line":280},[68,20334,20335],{"class":74},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[68,20337,20338],{"class":70,"line":301},[68,20339,20340],{"class":74},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[68,20342,20343],{"class":70,"line":320},[68,20344,4000],{"emptyLinePlaceholder":1679},[68,20346,20347,20349,20351],{"class":70,"line":2915},[68,20348,16291],{"class":102},[68,20350,17165],{"class":587},[68,20352,4274],{"class":85},[68,20354,20355],{"class":70,"line":2921},[68,20356,3149],{"class":85},[68,20358,20359],{"class":70,"line":2933},[68,20360,16313],{"class":102},[68,20362,20363],{"class":70,"line":3214},[68,20364,20109],{"class":74},[68,20366,20367,20369],{"class":70,"line":3219},[68,20368,20114],{"class":587},[68,20370,3577],{"class":85},[68,20372,20373],{"class":70,"line":3225},[68,20374,3631],{"class":85},[68,20376,20377,20379,20381,20384,20386],{"class":70,"line":3230},[68,20378,5050],{"class":85},[68,20380,2778],{"class":102},[68,20382,20383],{"class":872},"\"Person构造函数无参构造\"",[68,20385,2778],{"class":102},[68,20387,2800],{"class":85},[68,20389,20390],{"class":70,"line":3244},[68,20391,3787],{"class":85},[68,20393,20394,20396,20398,20400,20402],{"class":70,"line":3249},[68,20395,20114],{"class":587},[68,20397,997],{"class":85},[68,20399,1754],{"class":102},[68,20401,3002],{"class":6815},[68,20403,1757],{"class":85},[68,20405,20406],{"class":70,"line":3255},[68,20407,3631],{"class":85},[68,20409,20410,20413,20415],{"class":70,"line":3276},[68,20411,20412],{"class":85},"        age",[68,20414,869],{"class":102},[68,20416,7796],{"class":85},[68,20418,20419,20421,20423,20426,20428],{"class":70,"line":3281},[68,20420,5050],{"class":85},[68,20422,2778],{"class":102},[68,20424,20425],{"class":872},"\"Person构造函数有参构造\"",[68,20427,2778],{"class":102},[68,20429,2800],{"class":85},[68,20431,20432],{"class":70,"line":3295},[68,20433,3787],{"class":85},[68,20435,20436],{"class":70,"line":3300},[68,20437,20142],{"class":74},[68,20439,20440,20442],{"class":70,"line":3329},[68,20441,20147],{"class":587},[68,20443,3577],{"class":85},[68,20445,20446],{"class":70,"line":3334},[68,20447,3631],{"class":85},[68,20449,20450,20452,20454,20457,20459],{"class":70,"line":3351},[68,20451,5050],{"class":85},[68,20453,2778],{"class":102},[68,20455,20456],{"class":872},"\"Person析构函数被调用\"",[68,20458,2778],{"class":102},[68,20460,2800],{"class":85},[68,20462,20463],{"class":70,"line":3356},[68,20464,3787],{"class":85},[68,20466,20467],{"class":70,"line":3361},[68,20468,20469],{"class":74},"    \u002F\u002F拷贝构造函数\n",[68,20471,20472,20474,20476,20478,20480,20482,20484],{"class":70,"line":3366},[68,20473,20114],{"class":587},[68,20475,997],{"class":85},[68,20477,8391],{"class":102},[68,20479,17165],{"class":587},[68,20481,12182],{"class":102},[68,20483,19],{"class":6815},[68,20485,1757],{"class":85},[68,20487,20488],{"class":70,"line":3380},[68,20489,3631],{"class":85},[68,20491,20492],{"class":70,"line":3385},[68,20493,20494],{"class":74},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[68,20496,20497,20499,20501],{"class":70,"line":4177},[68,20498,20412],{"class":85},[68,20500,869],{"class":102},[68,20502,20503],{"class":85},"p.age;\n",[68,20505,20506,20508,20510,20513,20515],{"class":70,"line":4191},[68,20507,5050],{"class":85},[68,20509,2778],{"class":102},[68,20511,20512],{"class":872},"\"Person拷贝构造函数被调用\"",[68,20514,2778],{"class":102},[68,20516,2800],{"class":85},[68,20518,20519],{"class":70,"line":4199},[68,20520,3787],{"class":85},[68,20522,20523,20525],{"class":70,"line":4204},[68,20524,3586],{"class":102},[68,20526,9396],{"class":85},[68,20528,20529],{"class":70,"line":4210},[68,20530,5594],{"class":85},[68,20532,20533],{"class":70,"line":4216},[68,20534,20535],{"class":74},"\u002F\u002F调用\n",[68,20537,20538,20540,20542],{"class":70,"line":4221},[68,20539,6963],{"class":102},[68,20541,7187],{"class":587},[68,20543,3577],{"class":85},[68,20545,20546],{"class":70,"line":9547},[68,20547,3149],{"class":85},[68,20549,20550],{"class":70,"line":9571},[68,20551,20552],{"class":74},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[68,20554,20555],{"class":70,"line":9576},[68,20556,118],{"class":85},[68,20558,20559,20561,20563],{"class":70,"line":9582},[68,20560,6963],{"class":102},[68,20562,7256],{"class":587},[68,20564,3577],{"class":85},[68,20566,20567],{"class":70,"line":9609},[68,20568,3149],{"class":85},[68,20570,20571],{"class":70,"line":9614},[68,20572,20573],{"class":74},"    \u002F\u002F1.括号法\n",[68,20575,20576],{"class":70,"line":9620},[68,20577,20578],{"class":74},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[68,20580,20581],{"class":70,"line":9632},[68,20582,20583],{"class":74},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[68,20585,20586],{"class":70,"line":9644},[68,20587,20588],{"class":74},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[68,20590,20591],{"class":70,"line":9656},[68,20592,20593],{"class":74},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[68,20595,20596],{"class":70,"line":11314},[68,20597,4000],{"emptyLinePlaceholder":1679},[68,20599,20600],{"class":70,"line":11339},[68,20601,20602],{"class":74},"    \u002F\u002F注意事项\n",[68,20604,20605],{"class":70,"line":11362},[68,20606,20607],{"class":74},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[68,20609,20610],{"class":70,"line":11386},[68,20611,20612],{"class":74},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[68,20614,20615],{"class":70,"line":11391},[68,20616,20617],{"class":74},"    \u002F\u002F Person p4();\n",[68,20619,20620],{"class":70,"line":11396},[68,20621,4000],{"emptyLinePlaceholder":1679},[68,20623,20624],{"class":70,"line":11401},[68,20625,20626],{"class":74},"    \u002F\u002F2.显示法\n",[68,20628,20629],{"class":70,"line":11410},[68,20630,20631],{"class":85},"    Person p1;\n",[68,20633,20634,20637,20639,20642,20644,20646],{"class":70,"line":11415},[68,20635,20636],{"class":85},"    Person p2",[68,20638,869],{"class":102},[68,20640,20641],{"class":587},"Person",[68,20643,997],{"class":85},[68,20645,2182],{"class":92},[68,20647,1016],{"class":85},[68,20649,20650,20653,20655,20657],{"class":70,"line":11421},[68,20651,20652],{"class":85},"    Person p3",[68,20654,869],{"class":102},[68,20656,20641],{"class":587},[68,20658,20659],{"class":85},"(p2);\n",[68,20661,20662],{"class":70,"line":11442},[68,20663,20664],{"class":74},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[68,20666,20667],{"class":70,"line":11448},[68,20668,4000],{"emptyLinePlaceholder":1679},[68,20670,20671],{"class":70,"line":11462},[68,20672,20673],{"class":74},"    \u002F\u002F 注意事项2\n",[68,20675,20676],{"class":70,"line":11468},[68,20677,20678],{"class":74},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[68,20680,20681],{"class":70,"line":11495},[68,20682,20683],{"class":74},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[68,20685,20686],{"class":70,"line":11504},[68,20687,4000],{"emptyLinePlaceholder":1679},[68,20689,20690],{"class":70,"line":11510},[68,20691,20692],{"class":74},"    \u002F\u002F3.隐士转换法\n",[68,20694,20695,20698,20700,20702,20704],{"class":70,"line":11518},[68,20696,20697],{"class":85},"    Person p4",[68,20699,869],{"class":102},[68,20701,2182],{"class":92},[68,20703,1804],{"class":85},[68,20705,20706],{"class":74},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[68,20708,20709,20712,20714,20717],{"class":70,"line":11523},[68,20710,20711],{"class":85},"    Person p5",[68,20713,869],{"class":102},[68,20715,20716],{"class":85},"p4;",[68,20718,20719],{"class":74}," \u002F\u002F 这里会调用拷贝构造函数\n",[68,20721,20722],{"class":70,"line":18199},[68,20723,118],{"class":85},[68,20725,20726,20728,20730],{"class":70,"line":18205},[68,20727,1754],{"class":102},[68,20729,3574],{"class":587},[68,20731,3577],{"class":85},[68,20733,20734],{"class":70,"line":18228},[68,20735,3149],{"class":85},[68,20737,20738,20740],{"class":70,"line":18234},[68,20739,7232],{"class":587},[68,20741,7235],{"class":85},[68,20743,20744,20746],{"class":70,"line":18257},[68,20745,7301],{"class":587},[68,20747,7235],{"class":85},[68,20749,20750,20752,20754],{"class":70,"line":18271},[68,20751,5689],{"class":102},[68,20753,5692],{"class":92},[68,20755,112],{"class":85},[68,20757,20758],{"class":70,"line":18291},[68,20759,118],{"class":85},[19,20761,20762,20765],{},[1890,20763,20764],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[43,20767,20769],{"id":20768},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20771,20772],{},"C++中拷贝构造函数调用时机通常有三种情况",[168,20774,20775,20778,20781],{},[51,20776,20777],{},"使用一个已经创建完毕的对象来初始化一个新对象",[51,20779,20780],{},"值传递的方式给函数参数传值",[51,20782,20783],{},"以值方式返回局部对象",[58,20785,20787],{"className":1740,"code":20786,"language":1742,"meta":63,"style":63},"#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",[65,20788,20789,20795,20805,20809,20814,20818,20823,20828,20833,20839,20843,20847,20853,20857,20870,20874,20879,20891,20895,20903,20916,20920,20924,20940,20944,20953,20966,20970,20976,20980,20992,20996,21002,21006,21010,21018,21022,21035,21043,21061,21065,21070,21075,21090,21094,21107,21111,21119,21123,21127,21135,21139,21144,21153,21157,21161,21186,21196,21200,21208,21212,21223,21248,21252,21256,21260,21268,21272,21277,21282,21289,21294,21299,21304,21309,21313,21318,21322,21327,21331,21336,21341,21345,21349,21354,21359,21367],{"__ignoreMap":63},[68,20790,20791,20793],{"class":70,"line":71},[68,20792,3551],{"class":102},[68,20794,3554],{"class":872},[68,20796,20797,20799,20801,20803],{"class":70,"line":78},[68,20798,3559],{"class":102},[68,20800,3562],{"class":102},[68,20802,3565],{"class":587},[68,20804,112],{"class":85},[68,20806,20807],{"class":70,"line":89},[68,20808,4000],{"emptyLinePlaceholder":1679},[68,20810,20811],{"class":70,"line":115},[68,20812,20813],{"class":74},"\u002F\u002F拷贝构造函数调用时机\n",[68,20815,20816],{"class":70,"line":280},[68,20817,4000],{"emptyLinePlaceholder":1679},[68,20819,20820],{"class":70,"line":301},[68,20821,20822],{"class":74},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[68,20824,20825],{"class":70,"line":320},[68,20826,20827],{"class":74},"\u002F\u002F2.值传递的方式给函数参数传值\n",[68,20829,20830],{"class":70,"line":2915},[68,20831,20832],{"class":74},"\u002F\u002F3.以值方式返回局部对象\n",[68,20834,20835,20837],{"class":70,"line":2921},[68,20836,16291],{"class":102},[68,20838,16767],{"class":587},[68,20840,20841],{"class":70,"line":2933},[68,20842,3149],{"class":85},[68,20844,20845],{"class":70,"line":3214},[68,20846,16313],{"class":102},[68,20848,20849,20851],{"class":70,"line":3219},[68,20850,20114],{"class":587},[68,20852,3577],{"class":85},[68,20854,20855],{"class":70,"line":3225},[68,20856,3631],{"class":85},[68,20858,20859,20861,20863,20866,20868],{"class":70,"line":3230},[68,20860,11267],{"class":85},[68,20862,2778],{"class":102},[68,20864,20865],{"class":872}," \"Person的默认构造函数调用\"",[68,20867,3048],{"class":102},[68,20869,10439],{"class":85},[68,20871,20872],{"class":70,"line":3244},[68,20873,3787],{"class":85},[68,20875,20876],{"class":70,"line":3249},[68,20877,20878],{"class":74},"    \u002F\u002F有参构造\n",[68,20880,20881,20883,20885,20887,20889],{"class":70,"line":3255},[68,20882,20114],{"class":587},[68,20884,997],{"class":85},[68,20886,1754],{"class":102},[68,20888,17284],{"class":6815},[68,20890,1757],{"class":85},[68,20892,20893],{"class":70,"line":3276},[68,20894,3631],{"class":85},[68,20896,20897,20899,20901],{"class":70,"line":3281},[68,20898,17338],{"class":85},[68,20900,869],{"class":102},[68,20902,9396],{"class":85},[68,20904,20905,20907,20909,20912,20914],{"class":70,"line":3295},[68,20906,11267],{"class":85},[68,20908,2778],{"class":102},[68,20910,20911],{"class":872}," \"Person的有参构造函数调用\"",[68,20913,3048],{"class":102},[68,20915,10439],{"class":85},[68,20917,20918],{"class":70,"line":3300},[68,20919,3787],{"class":85},[68,20921,20922],{"class":70,"line":3329},[68,20923,20469],{"class":74},[68,20925,20926,20928,20930,20932,20934,20936,20938],{"class":70,"line":3334},[68,20927,20114],{"class":587},[68,20929,997],{"class":85},[68,20931,8391],{"class":102},[68,20933,17165],{"class":587},[68,20935,12182],{"class":102},[68,20937,19],{"class":6815},[68,20939,1757],{"class":85},[68,20941,20942],{"class":70,"line":3351},[68,20943,3631],{"class":85},[68,20945,20946,20948,20950],{"class":70,"line":3356},[68,20947,17338],{"class":85},[68,20949,869],{"class":102},[68,20951,20952],{"class":85}," p.m_Age;\n",[68,20954,20955,20957,20959,20962,20964],{"class":70,"line":3361},[68,20956,11267],{"class":85},[68,20958,2778],{"class":102},[68,20960,20961],{"class":872}," \"Person的拷贝构造函数调用\"",[68,20963,3048],{"class":102},[68,20965,10439],{"class":85},[68,20967,20968],{"class":70,"line":3366},[68,20969,3787],{"class":85},[68,20971,20972,20974],{"class":70,"line":3380},[68,20973,20147],{"class":587},[68,20975,3577],{"class":85},[68,20977,20978],{"class":70,"line":3385},[68,20979,3631],{"class":85},[68,20981,20982,20984,20986,20988,20990],{"class":70,"line":4177},[68,20983,11267],{"class":85},[68,20985,2778],{"class":102},[68,20987,20162],{"class":872},[68,20989,3048],{"class":102},[68,20991,10439],{"class":85},[68,20993,20994],{"class":70,"line":4191},[68,20995,3787],{"class":85},[68,20997,20998,21000],{"class":70,"line":4199},[68,20999,3586],{"class":102},[68,21001,17261],{"class":85},[68,21003,21004],{"class":70,"line":4204},[68,21005,5594],{"class":85},[68,21007,21008],{"class":70,"line":4210},[68,21009,20822],{"class":74},[68,21011,21012,21014,21016],{"class":70,"line":4216},[68,21013,6963],{"class":102},[68,21015,7187],{"class":587},[68,21017,3577],{"class":85},[68,21019,21020],{"class":70,"line":4221},[68,21021,3149],{"class":85},[68,21023,21024,21027,21029,21031,21033],{"class":70,"line":9547},[68,21025,21026],{"class":85},"    Person ",[68,21028,8729],{"class":587},[68,21030,997],{"class":85},[68,21032,2436],{"class":92},[68,21034,1016],{"class":85},[68,21036,21037,21039,21041],{"class":70,"line":9571},[68,21038,21026],{"class":85},[68,21040,8632],{"class":587},[68,21042,19110],{"class":85},[68,21044,21045,21047,21049,21052,21054,21057,21059],{"class":70,"line":9576},[68,21046,3154],{"class":85},[68,21048,2778],{"class":102},[68,21050,21051],{"class":872},"\"P2的年龄为：\"",[68,21053,2778],{"class":102},[68,21055,21056],{"class":85},"p2.m_Age",[68,21058,2778],{"class":102},[68,21060,2800],{"class":85},[68,21062,21063],{"class":70,"line":9582},[68,21064,118],{"class":85},[68,21066,21067],{"class":70,"line":9609},[68,21068,21069],{"class":74},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[68,21071,21072],{"class":70,"line":9614},[68,21073,21074],{"class":74},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[68,21076,21077,21079,21082,21084,21086,21088],{"class":70,"line":9620},[68,21078,6963],{"class":102},[68,21080,21081],{"class":587}," doWork",[68,21083,997],{"class":85},[68,21085,20641],{"class":587},[68,21087,8424],{"class":6815},[68,21089,1757],{"class":85},[68,21091,21092],{"class":70,"line":9632},[68,21093,3149],{"class":85},[68,21095,21096,21098,21100,21103,21105],{"class":70,"line":9644},[68,21097,8128],{"class":85},[68,21099,2778],{"class":102},[68,21101,21102],{"class":872}," \"doWork函数调用\"",[68,21104,3048],{"class":102},[68,21106,10439],{"class":85},[68,21108,21109],{"class":70,"line":9656},[68,21110,118],{"class":85},[68,21112,21113,21115,21117],{"class":70,"line":11314},[68,21114,6963],{"class":102},[68,21116,7256],{"class":587},[68,21118,3577],{"class":85},[68,21120,21121],{"class":70,"line":11339},[68,21122,3149],{"class":85},[68,21124,21125],{"class":70,"line":11362},[68,21126,16909],{"class":85},[68,21128,21129,21132],{"class":70,"line":11386},[68,21130,21131],{"class":587},"    doWork",[68,21133,21134],{"class":85},"(p);\n",[68,21136,21137],{"class":70,"line":11391},[68,21138,118],{"class":85},[68,21140,21141],{"class":70,"line":11396},[68,21142,21143],{"class":74},"\u002F\u002F 3.以值方式返回局部对象\n",[68,21145,21146,21148,21151],{"class":70,"line":11401},[68,21147,20641],{"class":587},[68,21149,21150],{"class":587}," doWork2",[68,21152,3577],{"class":85},[68,21154,21155],{"class":70,"line":11410},[68,21156,3149],{"class":85},[68,21158,21159],{"class":70,"line":11415},[68,21160,20631],{"class":85},[68,21162,21163,21165,21167,21169,21171,21173,21175,21177,21179,21181,21183],{"class":70,"line":11421},[68,21164,3154],{"class":85},[68,21166,2778],{"class":102},[68,21168,997],{"class":85},[68,21170,1754],{"class":102},[68,21172,8117],{"class":102},[68,21174,2165],{"class":85},[68,21176,2089],{"class":102},[68,21178,8729],{"class":85},[68,21180,2778],{"class":102},[68,21182,2843],{"class":85},[68,21184,21185],{"class":74},"\u002F\u002F打印p1的地址\n",[68,21187,21188,21190,21193],{"class":70,"line":11442},[68,21189,5689],{"class":102},[68,21191,21192],{"class":85}," p1;",[68,21194,21195],{"class":74},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[68,21197,21198],{"class":70,"line":11448},[68,21199,118],{"class":85},[68,21201,21202,21204,21206],{"class":70,"line":11462},[68,21203,6963],{"class":102},[68,21205,7328],{"class":587},[68,21207,3577],{"class":85},[68,21209,21210],{"class":70,"line":11468},[68,21211,3149],{"class":85},[68,21213,21214,21217,21219,21221],{"class":70,"line":11495},[68,21215,21216],{"class":85},"    Person p ",[68,21218,869],{"class":102},[68,21220,21150],{"class":587},[68,21222,7235],{"class":85},[68,21224,21225,21227,21229,21231,21233,21235,21237,21239,21241,21243,21245],{"class":70,"line":11504},[68,21226,3154],{"class":85},[68,21228,2778],{"class":102},[68,21230,997],{"class":85},[68,21232,1754],{"class":102},[68,21234,8117],{"class":102},[68,21236,2165],{"class":85},[68,21238,2089],{"class":102},[68,21240,19],{"class":85},[68,21242,2778],{"class":102},[68,21244,2843],{"class":85},[68,21246,21247],{"class":74},"\u002F\u002F打印p的地址\n",[68,21249,21250],{"class":70,"line":11510},[68,21251,118],{"class":85},[68,21253,21254],{"class":70,"line":11518},[68,21255,4000],{"emptyLinePlaceholder":1679},[68,21257,21258],{"class":70,"line":11523},[68,21259,4000],{"emptyLinePlaceholder":1679},[68,21261,21262,21264,21266],{"class":70,"line":18199},[68,21263,1754],{"class":102},[68,21265,3574],{"class":587},[68,21267,3577],{"class":85},[68,21269,21270],{"class":70,"line":18205},[68,21271,3149],{"class":85},[68,21273,21274],{"class":70,"line":18228},[68,21275,21276],{"class":74},"    \u002F\u002F test01();\n",[68,21278,21279],{"class":70,"line":18234},[68,21280,21281],{"class":74},"    \u002F\u002F test02();\n",[68,21283,21284,21287],{"class":70,"line":18257},[68,21285,21286],{"class":587},"    test03",[68,21288,7235],{"class":85},[68,21290,21291],{"class":70,"line":18271},[68,21292,21293],{"class":74},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[68,21295,21296],{"class":70,"line":18291},[68,21297,21298],{"class":74},"\u002F\u002F 输出结果如下：\n",[68,21300,21301],{"class":70,"line":18297},[68,21302,21303],{"class":74},"\u002F\u002F Person的默认构造函数调用\n",[68,21305,21306],{"class":70,"line":18308},[68,21307,21308],{"class":74},"\u002F\u002F 0x7fffffffceec\n",[68,21310,21311],{"class":70,"line":18331},[68,21312,21308],{"class":74},[68,21314,21315],{"class":70,"line":18353},[68,21316,21317],{"class":74},"\u002F\u002F Person的析构函数调用\n",[68,21319,21320],{"class":70,"line":18358},[68,21321,4000],{"emptyLinePlaceholder":1679},[68,21323,21324],{"class":70,"line":18364},[68,21325,21326],{"class":74},"\u002F\u002F 之前的输出结果如下：\n",[68,21328,21329],{"class":70,"line":18378},[68,21330,21303],{"class":74},[68,21332,21333],{"class":70,"line":18391},[68,21334,21335],{"class":74},"\u002F\u002F 地址\n",[68,21337,21338],{"class":70,"line":18396},[68,21339,21340],{"class":74},"\u002F\u002F Person的拷贝构造函数调用\n",[68,21342,21343],{"class":70,"line":18410},[68,21344,21317],{"class":74},[68,21346,21347],{"class":70,"line":18415},[68,21348,21335],{"class":74},[68,21350,21351],{"class":70,"line":18421},[68,21352,21353],{"class":74},"\u002F\u002F (这两次输出的地址也是不同的) \n",[68,21355,21356],{"class":70,"line":18426},[68,21357,21358],{"class":74},"\u002F\u002F Person的析构函数调用     \n",[68,21360,21361,21363,21365],{"class":70,"line":18440},[68,21362,5689],{"class":102},[68,21364,5692],{"class":92},[68,21366,112],{"class":85},[68,21368,21369],{"class":70,"line":18445},[68,21370,118],{"class":85},[19,21372,21373],{},"简化版理解",[58,21375,21377],{"className":1740,"code":21376,"language":1742,"meta":63,"style":63},"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",[65,21378,21379,21387,21391,21397,21410,21421,21425,21437,21450,21458,21462,21478,21491,21500,21504,21509,21515,21528,21532,21536,21543,21547,21551,21556,21564,21568,21584,21597,21610,21614,21619,21627,21631,21635,21640,21645,21661,21669,21676,21682,21686,21690,21695,21703,21707,21711,21734,21741,21745,21749,21757,21761,21771,21793,21797,21801,21805,21813,21817,21822,21827,21833,21837,21847,21851,21859],{"__ignoreMap":63},[68,21380,21381,21383,21385],{"class":70,"line":71},[68,21382,16291],{"class":102},[68,21384,17165],{"class":587},[68,21386,86],{"class":85},[68,21388,21389],{"class":70,"line":78},[68,21390,16313],{"class":102},[68,21392,21393,21395],{"class":70,"line":89},[68,21394,20114],{"class":587},[68,21396,12451],{"class":85},[68,21398,21399,21401,21403,21406,21408],{"class":70,"line":115},[68,21400,11267],{"class":85},[68,21402,2778],{"class":102},[68,21404,21405],{"class":872}," \"无参构造函数!\"",[68,21407,3048],{"class":102},[68,21409,10439],{"class":85},[68,21411,21412,21415,21417,21419],{"class":70,"line":280},[68,21413,21414],{"class":85},"        mAge ",[68,21416,869],{"class":102},[68,21418,5692],{"class":92},[68,21420,112],{"class":85},[68,21422,21423],{"class":70,"line":301},[68,21424,3787],{"class":85},[68,21426,21427,21429,21431,21433,21435],{"class":70,"line":320},[68,21428,20114],{"class":587},[68,21430,997],{"class":85},[68,21432,1754],{"class":102},[68,21434,17284],{"class":6815},[68,21436,14039],{"class":85},[68,21438,21439,21441,21443,21446,21448],{"class":70,"line":2915},[68,21440,11267],{"class":85},[68,21442,2778],{"class":102},[68,21444,21445],{"class":872}," \"有参构造函数!\"",[68,21447,3048],{"class":102},[68,21449,10439],{"class":85},[68,21451,21452,21454,21456],{"class":70,"line":2921},[68,21453,21414],{"class":85},[68,21455,869],{"class":102},[68,21457,9396],{"class":85},[68,21459,21460],{"class":70,"line":2933},[68,21461,3787],{"class":85},[68,21463,21464,21466,21468,21470,21472,21474,21476],{"class":70,"line":3214},[68,21465,20114],{"class":587},[68,21467,997],{"class":85},[68,21469,8391],{"class":102},[68,21471,17165],{"class":587},[68,21473,2089],{"class":102},[68,21475,8424],{"class":6815},[68,21477,14039],{"class":85},[68,21479,21480,21482,21484,21487,21489],{"class":70,"line":3219},[68,21481,11267],{"class":85},[68,21483,2778],{"class":102},[68,21485,21486],{"class":872}," \"拷贝构造函数!\"",[68,21488,3048],{"class":102},[68,21490,10439],{"class":85},[68,21492,21493,21495,21497],{"class":70,"line":3225},[68,21494,21414],{"class":85},[68,21496,869],{"class":102},[68,21498,21499],{"class":85}," p.mAge;\n",[68,21501,21502],{"class":70,"line":3230},[68,21503,3787],{"class":85},[68,21505,21506],{"class":70,"line":3244},[68,21507,21508],{"class":74},"    \u002F\u002F析构函数在释放内存之前调用\n",[68,21510,21511,21513],{"class":70,"line":3249},[68,21512,20147],{"class":587},[68,21514,12451],{"class":85},[68,21516,21517,21519,21521,21524,21526],{"class":70,"line":3255},[68,21518,11267],{"class":85},[68,21520,2778],{"class":102},[68,21522,21523],{"class":872}," \"析构函数!\"",[68,21525,3048],{"class":102},[68,21527,10439],{"class":85},[68,21529,21530],{"class":70,"line":3276},[68,21531,3787],{"class":85},[68,21533,21534],{"class":70,"line":3281},[68,21535,16313],{"class":102},[68,21537,21538,21540],{"class":70,"line":3295},[68,21539,3586],{"class":102},[68,21541,21542],{"class":85}," mAge;\n",[68,21544,21545],{"class":70,"line":3300},[68,21546,5594],{"class":85},[68,21548,21549],{"class":70,"line":3329},[68,21550,4000],{"emptyLinePlaceholder":1679},[68,21552,21553],{"class":70,"line":3334},[68,21554,21555],{"class":74},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[68,21557,21558,21560,21562],{"class":70,"line":3351},[68,21559,6963],{"class":102},[68,21561,7187],{"class":587},[68,21563,12451],{"class":85},[68,21565,21566],{"class":70,"line":3356},[68,21567,4000],{"emptyLinePlaceholder":1679},[68,21569,21570,21572,21575,21577,21579,21581],{"class":70,"line":3361},[68,21571,21026],{"class":85},[68,21573,21574],{"class":587},"man",[68,21576,997],{"class":85},[68,21578,2047],{"class":92},[68,21580,7565],{"class":85},[68,21582,21583],{"class":74}," \u002F\u002Fp对象已经创建完毕\n",[68,21585,21586,21588,21591,21594],{"class":70,"line":3366},[68,21587,21026],{"class":85},[68,21589,21590],{"class":587},"newman",[68,21592,21593],{"class":85},"(man);",[68,21595,21596],{"class":74}," \u002F\u002F调用拷贝构造函数\n",[68,21598,21599,21602,21604,21607],{"class":70,"line":3380},[68,21600,21601],{"class":85},"    Person newman2 ",[68,21603,869],{"class":102},[68,21605,21606],{"class":85}," man;",[68,21608,21609],{"class":74}," \u002F\u002F拷贝构造\n",[68,21611,21612],{"class":70,"line":3385},[68,21613,4000],{"emptyLinePlaceholder":1679},[68,21615,21616],{"class":70,"line":4177},[68,21617,21618],{"class":74},"    \u002F\u002FPerson newman3;\n",[68,21620,21621,21624],{"class":70,"line":4191},[68,21622,21623],{"class":74},"    \u002F\u002Fnewman3 = man;",[68,21625,21626],{"class":74}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[68,21628,21629],{"class":70,"line":4199},[68,21630,118],{"class":85},[68,21632,21633],{"class":70,"line":4204},[68,21634,4000],{"emptyLinePlaceholder":1679},[68,21636,21637],{"class":70,"line":4210},[68,21638,21639],{"class":74},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[68,21641,21642],{"class":70,"line":4216},[68,21643,21644],{"class":74},"\u002F\u002F相当于Person p1 = p;\n",[68,21646,21647,21649,21651,21653,21655,21658],{"class":70,"line":4221},[68,21648,6963],{"class":102},[68,21650,21081],{"class":587},[68,21652,997],{"class":85},[68,21654,20641],{"class":587},[68,21656,21657],{"class":6815}," p1",[68,21659,21660],{"class":85},") {}\n",[68,21662,21663,21665,21667],{"class":70,"line":9547},[68,21664,6963],{"class":102},[68,21666,7256],{"class":587},[68,21668,12451],{"class":85},[68,21670,21671,21673],{"class":70,"line":9571},[68,21672,20199],{"class":85},[68,21674,21675],{"class":74}," \u002F\u002F无参构造函数\n",[68,21677,21678,21680],{"class":70,"line":9576},[68,21679,21131],{"class":587},[68,21681,21134],{"class":85},[68,21683,21684],{"class":70,"line":9582},[68,21685,118],{"class":85},[68,21687,21688],{"class":70,"line":9609},[68,21689,4000],{"emptyLinePlaceholder":1679},[68,21691,21692],{"class":70,"line":9614},[68,21693,21694],{"class":74},"\u002F\u002F3. 以值方式返回局部对象\n",[68,21696,21697,21699,21701],{"class":70,"line":9620},[68,21698,20641],{"class":587},[68,21700,21150],{"class":587},[68,21702,3577],{"class":85},[68,21704,21705],{"class":70,"line":9632},[68,21706,3149],{"class":85},[68,21708,21709],{"class":70,"line":9644},[68,21710,20631],{"class":85},[68,21712,21713,21715,21717,21719,21721,21723,21725,21727,21730,21732],{"class":70,"line":9656},[68,21714,8128],{"class":85},[68,21716,2778],{"class":102},[68,21718,3260],{"class":85},[68,21720,1754],{"class":102},[68,21722,8117],{"class":102},[68,21724,2165],{"class":85},[68,21726,2089],{"class":102},[68,21728,21729],{"class":85},"p1 ",[68,21731,2778],{"class":102},[68,21733,10439],{"class":85},[68,21735,21736,21738],{"class":70,"line":11314},[68,21737,5689],{"class":102},[68,21739,21740],{"class":85}," p1;\n",[68,21742,21743],{"class":70,"line":11339},[68,21744,118],{"class":85},[68,21746,21747],{"class":70,"line":11362},[68,21748,4000],{"emptyLinePlaceholder":1679},[68,21750,21751,21753,21755],{"class":70,"line":11386},[68,21752,6963],{"class":102},[68,21754,7328],{"class":587},[68,21756,3577],{"class":85},[68,21758,21759],{"class":70,"line":11391},[68,21760,3149],{"class":85},[68,21762,21763,21765,21767,21769],{"class":70,"line":11396},[68,21764,21216],{"class":85},[68,21766,869],{"class":102},[68,21768,21150],{"class":587},[68,21770,7235],{"class":85},[68,21772,21773,21775,21777,21779,21781,21783,21785,21787,21789,21791],{"class":70,"line":11401},[68,21774,8128],{"class":85},[68,21776,2778],{"class":102},[68,21778,3260],{"class":85},[68,21780,1754],{"class":102},[68,21782,8117],{"class":102},[68,21784,2165],{"class":85},[68,21786,2089],{"class":102},[68,21788,13046],{"class":85},[68,21790,2778],{"class":102},[68,21792,10439],{"class":85},[68,21794,21795],{"class":70,"line":11410},[68,21796,118],{"class":85},[68,21798,21799],{"class":70,"line":11415},[68,21800,4000],{"emptyLinePlaceholder":1679},[68,21802,21803],{"class":70,"line":11421},[68,21804,4000],{"emptyLinePlaceholder":1679},[68,21806,21807,21809,21811],{"class":70,"line":11442},[68,21808,1754],{"class":102},[68,21810,3574],{"class":587},[68,21812,12451],{"class":85},[68,21814,21815],{"class":70,"line":11448},[68,21816,4000],{"emptyLinePlaceholder":1679},[68,21818,21819],{"class":70,"line":11462},[68,21820,21821],{"class":74},"    \u002F\u002Ftest01();\n",[68,21823,21824],{"class":70,"line":11468},[68,21825,21826],{"class":74},"    \u002F\u002Ftest02();\n",[68,21828,21829,21831],{"class":70,"line":11495},[68,21830,21286],{"class":587},[68,21832,7235],{"class":85},[68,21834,21835],{"class":70,"line":11504},[68,21836,4000],{"emptyLinePlaceholder":1679},[68,21838,21839,21841,21843,21845],{"class":70,"line":11510},[68,21840,3903],{"class":587},[68,21842,997],{"class":85},[68,21844,3908],{"class":872},[68,21846,1016],{"class":85},[68,21848,21849],{"class":70,"line":11518},[68,21850,4000],{"emptyLinePlaceholder":1679},[68,21852,21853,21855,21857],{"class":70,"line":11523},[68,21854,5689],{"class":102},[68,21856,5692],{"class":92},[68,21858,112],{"class":85},[68,21860,21861],{"class":70,"line":18199},[68,21862,118],{"class":85},[43,21864,21866],{"id":21865},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21868,21869],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21871,21872],{},"1．默认构造函数(无参，函数体为空)",[19,21874,21875],{},"2．默认析构函数(无参，函数体为空)",[19,21877,21878],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21880,21881],{},"构造函数调用规则如下：",[168,21883,21884,21887],{},[51,21885,21886],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[51,21888,21889],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[58,21891,21893],{"className":1740,"code":21892,"language":1742,"meta":63,"style":63},"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",[65,21894,21895,21903,21907,21912,21918,21930,21934,21939,21951,21960,21972,21976,21980,21996,22005,22017,22021,22025,22031,22043,22047,22051,22057,22061,22065,22073,22077,22089,22094,22102,22106,22124,22128,22132,22140,22144,22149,22157,22172,22185,22189,22194,22201,22217,22230,22234,22238,22246,22250,22256,22260,22270,22274,22282],{"__ignoreMap":63},[68,21896,21897,21899,21901],{"class":70,"line":71},[68,21898,16291],{"class":102},[68,21900,17165],{"class":587},[68,21902,86],{"class":85},[68,21904,21905],{"class":70,"line":78},[68,21906,16313],{"class":102},[68,21908,21909],{"class":70,"line":89},[68,21910,21911],{"class":74},"    \u002F\u002F无参（默认）构造函数\n",[68,21913,21914,21916],{"class":70,"line":115},[68,21915,20114],{"class":587},[68,21917,12451],{"class":85},[68,21919,21920,21922,21924,21926,21928],{"class":70,"line":280},[68,21921,11267],{"class":85},[68,21923,2778],{"class":102},[68,21925,21405],{"class":872},[68,21927,3048],{"class":102},[68,21929,10439],{"class":85},[68,21931,21932],{"class":70,"line":301},[68,21933,3787],{"class":85},[68,21935,21936],{"class":70,"line":320},[68,21937,21938],{"class":74},"    \u002F\u002F有参构造函数\n",[68,21940,21941,21943,21945,21947,21949],{"class":70,"line":2915},[68,21942,20114],{"class":587},[68,21944,997],{"class":85},[68,21946,1754],{"class":102},[68,21948,3002],{"class":6815},[68,21950,14039],{"class":85},[68,21952,21953,21956,21958],{"class":70,"line":2921},[68,21954,21955],{"class":85},"        age ",[68,21957,869],{"class":102},[68,21959,3036],{"class":85},[68,21961,21962,21964,21966,21968,21970],{"class":70,"line":2933},[68,21963,11267],{"class":85},[68,21965,2778],{"class":102},[68,21967,21445],{"class":872},[68,21969,3048],{"class":102},[68,21971,10439],{"class":85},[68,21973,21974],{"class":70,"line":3214},[68,21975,3787],{"class":85},[68,21977,21978],{"class":70,"line":3219},[68,21979,20469],{"class":74},[68,21981,21982,21984,21986,21988,21990,21992,21994],{"class":70,"line":3225},[68,21983,20114],{"class":587},[68,21985,997],{"class":85},[68,21987,8391],{"class":102},[68,21989,17165],{"class":587},[68,21991,2089],{"class":102},[68,21993,8424],{"class":6815},[68,21995,14039],{"class":85},[68,21997,21998,22000,22002],{"class":70,"line":3230},[68,21999,21955],{"class":85},[68,22001,869],{"class":102},[68,22003,22004],{"class":85}," p.age;\n",[68,22006,22007,22009,22011,22013,22015],{"class":70,"line":3244},[68,22008,11267],{"class":85},[68,22010,2778],{"class":102},[68,22012,21486],{"class":872},[68,22014,3048],{"class":102},[68,22016,10439],{"class":85},[68,22018,22019],{"class":70,"line":3249},[68,22020,3787],{"class":85},[68,22022,22023],{"class":70,"line":3255},[68,22024,20142],{"class":74},[68,22026,22027,22029],{"class":70,"line":3276},[68,22028,20147],{"class":587},[68,22030,12451],{"class":85},[68,22032,22033,22035,22037,22039,22041],{"class":70,"line":3281},[68,22034,11267],{"class":85},[68,22036,2778],{"class":102},[68,22038,21523],{"class":872},[68,22040,3048],{"class":102},[68,22042,10439],{"class":85},[68,22044,22045],{"class":70,"line":3295},[68,22046,3787],{"class":85},[68,22048,22049],{"class":70,"line":3300},[68,22050,16313],{"class":102},[68,22052,22053,22055],{"class":70,"line":3329},[68,22054,3586],{"class":102},[68,22056,9396],{"class":85},[68,22058,22059],{"class":70,"line":3334},[68,22060,5594],{"class":85},[68,22062,22063],{"class":70,"line":3351},[68,22064,4000],{"emptyLinePlaceholder":1679},[68,22066,22067,22069,22071],{"class":70,"line":3356},[68,22068,6963],{"class":102},[68,22070,7187],{"class":587},[68,22072,3577],{"class":85},[68,22074,22075],{"class":70,"line":3361},[68,22076,3149],{"class":85},[68,22078,22079,22081,22083,22085,22087],{"class":70,"line":3366},[68,22080,21026],{"class":85},[68,22082,8729],{"class":587},[68,22084,997],{"class":85},[68,22086,2386],{"class":92},[68,22088,1016],{"class":85},[68,22090,22091],{"class":70,"line":3380},[68,22092,22093],{"class":74},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[68,22095,22096,22098,22100],{"class":70,"line":3385},[68,22097,21026],{"class":85},[68,22099,8632],{"class":587},[68,22101,19110],{"class":85},[68,22103,22104],{"class":70,"line":4177},[68,22105,4000],{"emptyLinePlaceholder":1679},[68,22107,22108,22110,22112,22115,22117,22120,22122],{"class":70,"line":4191},[68,22109,8128],{"class":85},[68,22111,2778],{"class":102},[68,22113,22114],{"class":872}," \"p2的年龄为： \"",[68,22116,3048],{"class":102},[68,22118,22119],{"class":85}," p2.age ",[68,22121,2778],{"class":102},[68,22123,10439],{"class":85},[68,22125,22126],{"class":70,"line":4199},[68,22127,118],{"class":85},[68,22129,22130],{"class":70,"line":4204},[68,22131,4000],{"emptyLinePlaceholder":1679},[68,22133,22134,22136,22138],{"class":70,"line":4210},[68,22135,6963],{"class":102},[68,22137,7256],{"class":587},[68,22139,3577],{"class":85},[68,22141,22142],{"class":70,"line":4216},[68,22143,3149],{"class":85},[68,22145,22146],{"class":70,"line":4221},[68,22147,22148],{"class":74},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[68,22150,22151,22154],{"class":70,"line":9547},[68,22152,22153],{"class":85},"    Person p1;",[68,22155,22156],{"class":74}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[68,22158,22159,22161,22163,22165,22167,22169],{"class":70,"line":9571},[68,22160,21026],{"class":85},[68,22162,8632],{"class":587},[68,22164,997],{"class":85},[68,22166,2182],{"class":92},[68,22168,7565],{"class":85},[68,22170,22171],{"class":74}," \u002F\u002F用户提供的有参\n",[68,22173,22174,22176,22179,22182],{"class":70,"line":9576},[68,22175,21026],{"class":85},[68,22177,22178],{"class":587},"p3",[68,22180,22181],{"class":85},"(p2);",[68,22183,22184],{"class":74}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[68,22186,22187],{"class":70,"line":9582},[68,22188,4000],{"emptyLinePlaceholder":1679},[68,22190,22191],{"class":70,"line":9609},[68,22192,22193],{"class":74},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[68,22195,22196,22199],{"class":70,"line":9614},[68,22197,22198],{"class":85},"    Person p4;",[68,22200,22156],{"class":74},[68,22202,22203,22205,22208,22210,22212,22214],{"class":70,"line":9620},[68,22204,21026],{"class":85},[68,22206,22207],{"class":587},"p5",[68,22209,997],{"class":85},[68,22211,2182],{"class":92},[68,22213,7565],{"class":85},[68,22215,22216],{"class":74}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[68,22218,22219,22221,22224,22227],{"class":70,"line":9632},[68,22220,21026],{"class":85},[68,22222,22223],{"class":587},"p6",[68,22225,22226],{"class":85},"(p5);",[68,22228,22229],{"class":74}," \u002F\u002F用户自己提供拷贝构造\n",[68,22231,22232],{"class":70,"line":9644},[68,22233,118],{"class":85},[68,22235,22236],{"class":70,"line":9656},[68,22237,4000],{"emptyLinePlaceholder":1679},[68,22239,22240,22242,22244],{"class":70,"line":11314},[68,22241,1754],{"class":102},[68,22243,3574],{"class":587},[68,22245,12451],{"class":85},[68,22247,22248],{"class":70,"line":11339},[68,22249,4000],{"emptyLinePlaceholder":1679},[68,22251,22252,22254],{"class":70,"line":11362},[68,22253,7232],{"class":587},[68,22255,7235],{"class":85},[68,22257,22258],{"class":70,"line":11386},[68,22259,4000],{"emptyLinePlaceholder":1679},[68,22261,22262,22264,22266,22268],{"class":70,"line":11391},[68,22263,3903],{"class":587},[68,22265,997],{"class":85},[68,22267,3908],{"class":872},[68,22269,1016],{"class":85},[68,22271,22272],{"class":70,"line":11396},[68,22273,4000],{"emptyLinePlaceholder":1679},[68,22275,22276,22278,22280],{"class":70,"line":11401},[68,22277,5689],{"class":102},[68,22279,5692],{"class":92},[68,22281,112],{"class":85},[68,22283,22284],{"class":70,"line":11410},[68,22285,118],{"class":85},[43,22287,22289],{"id":22288},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22291,22292],{},"浅拷贝：简单的赋值拷贝操作",[19,22294,22295],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[58,22297,22299],{"className":1740,"code":22298,"language":1742,"meta":63,"style":63},"#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",[65,22300,22301,22307,22317,22323,22327,22331,22336,22342,22346,22359,22363,22367,22374,22378,22388,22403,22416,22420,22425,22430,22446,22450,22463,22468,22473,22478,22487,22492,22507,22511,22515,22519,22525,22529,22534,22549,22553,22564,22578,22582,22591,22595,22601,22613,22617,22625,22629,22646,22677,22685,22713,22717,22721,22729,22733,22739],{"__ignoreMap":63},[68,22302,22303,22305],{"class":70,"line":71},[68,22304,3551],{"class":102},[68,22306,3554],{"class":872},[68,22308,22309,22311,22313,22315],{"class":70,"line":78},[68,22310,3559],{"class":102},[68,22312,3562],{"class":102},[68,22314,3565],{"class":587},[68,22316,112],{"class":85},[68,22318,22319,22321],{"class":70,"line":89},[68,22320,16291],{"class":102},[68,22322,16767],{"class":587},[68,22324,22325],{"class":70,"line":115},[68,22326,3149],{"class":85},[68,22328,22329],{"class":70,"line":280},[68,22330,16313],{"class":102},[68,22332,22333],{"class":70,"line":301},[68,22334,22335],{"class":74},"    \u002F\u002F默认构造函数\n",[68,22337,22338,22340],{"class":70,"line":320},[68,22339,20114],{"class":587},[68,22341,3577],{"class":85},[68,22343,22344],{"class":70,"line":2915},[68,22345,3631],{"class":85},[68,22347,22348,22350,22352,22355,22357],{"class":70,"line":2921},[68,22349,5050],{"class":85},[68,22351,2778],{"class":102},[68,22353,22354],{"class":872},"\"默认构造函数\"",[68,22356,2778],{"class":102},[68,22358,2800],{"class":85},[68,22360,22361],{"class":70,"line":2933},[68,22362,3787],{"class":85},[68,22364,22365],{"class":70,"line":3214},[68,22366,21938],{"class":74},[68,22368,22369,22371],{"class":70,"line":3219},[68,22370,20147],{"class":587},[68,22372,22373],{"class":85},"(int age,int height)\n",[68,22375,22376],{"class":70,"line":3225},[68,22377,3631],{"class":85},[68,22379,22380,22383,22385],{"class":70,"line":3230},[68,22381,22382],{"class":85},"        m_Age",[68,22384,869],{"class":102},[68,22386,22387],{"class":85},"age;\n",[68,22389,22390,22393,22395,22397,22400],{"class":70,"line":3244},[68,22391,22392],{"class":85},"        m_Height",[68,22394,13315],{"class":102},[68,22396,3982],{"class":102},[68,22398,22399],{"class":85},"(height);",[68,22401,22402],{"class":74},"\u002F\u002F放到堆区\n",[68,22404,22405,22407,22409,22412,22414],{"class":70,"line":3249},[68,22406,5050],{"class":85},[68,22408,2778],{"class":102},[68,22410,22411],{"class":872},"\"有参构造函数\"",[68,22413,2778],{"class":102},[68,22415,2800],{"class":85},[68,22417,22418],{"class":70,"line":3255},[68,22419,3787],{"class":85},[68,22421,22422],{"class":70,"line":3276},[68,22423,22424],{"class":74},"    \u002F\u002F深拷贝解决上述问题\n",[68,22426,22427],{"class":70,"line":3281},[68,22428,22429],{"class":74},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[68,22431,22432,22434,22436,22438,22440,22442,22444],{"class":70,"line":3295},[68,22433,20114],{"class":587},[68,22435,997],{"class":85},[68,22437,8391],{"class":102},[68,22439,17165],{"class":587},[68,22441,12182],{"class":102},[68,22443,19],{"class":6815},[68,22445,1757],{"class":85},[68,22447,22448],{"class":70,"line":3300},[68,22449,3631],{"class":85},[68,22451,22452,22454,22456,22459,22461],{"class":70,"line":3329},[68,22453,5050],{"class":85},[68,22455,2778],{"class":102},[68,22457,22458],{"class":872},"\"拷贝构造函数\"",[68,22460,2778],{"class":102},[68,22462,2800],{"class":85},[68,22464,22465],{"class":70,"line":3334},[68,22466,22467],{"class":74},"        \u002F\u002F编译器默认的写如下注释部分\n",[68,22469,22470],{"class":70,"line":3351},[68,22471,22472],{"class":74},"        \u002F\u002Fm_Age=p.m_Age;\n",[68,22474,22475],{"class":70,"line":3356},[68,22476,22477],{"class":74},"        \u002F\u002Fm_Height=p.m_Height;\n",[68,22479,22480,22482,22484],{"class":70,"line":3361},[68,22481,22382],{"class":85},[68,22483,869],{"class":102},[68,22485,22486],{"class":85},"p.m_Age;\n",[68,22488,22489],{"class":70,"line":3366},[68,22490,22491],{"class":74},"        \u002F\u002F深拷贝操作\n",[68,22493,22494,22496,22498,22500,22502,22504],{"class":70,"line":3380},[68,22495,22392],{"class":85},[68,22497,13315],{"class":102},[68,22499,3982],{"class":102},[68,22501,997],{"class":85},[68,22503,2191],{"class":102},[68,22505,22506],{"class":85},"p.m_Height);\n",[68,22508,22509],{"class":70,"line":3385},[68,22510,3787],{"class":85},[68,22512,22513],{"class":70,"line":4177},[68,22514,4000],{"emptyLinePlaceholder":1679},[68,22516,22517],{"class":70,"line":4191},[68,22518,20142],{"class":74},[68,22520,22521,22523],{"class":70,"line":4199},[68,22522,20147],{"class":587},[68,22524,3577],{"class":85},[68,22526,22527],{"class":70,"line":4204},[68,22528,3631],{"class":85},[68,22530,22531],{"class":70,"line":4210},[68,22532,22533],{"class":74},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[68,22535,22536,22538,22541,22544,22547],{"class":70,"line":4216},[68,22537,4097],{"class":102},[68,22539,22540],{"class":85},"(m_Height ",[68,22542,22543],{"class":102},"!=",[68,22545,22546],{"class":92}," NULL",[68,22548,1757],{"class":85},[68,22550,22551],{"class":70,"line":4221},[68,22552,4110],{"class":85},[68,22554,22555,22558,22561],{"class":70,"line":9547},[68,22556,22557],{"class":102},"            delete",[68,22559,22560],{"class":85}," m_Height;",[68,22562,22563],{"class":74}," \u002F\u002F释放堆区内存\n",[68,22565,22566,22569,22571,22573,22575],{"class":70,"line":9571},[68,22567,22568],{"class":85},"            m_Height",[68,22570,869],{"class":102},[68,22572,3992],{"class":92},[68,22574,1804],{"class":85},[68,22576,22577],{"class":74}," \u002F\u002F防止野指针\n",[68,22579,22580],{"class":70,"line":9576},[68,22581,4129],{"class":85},[68,22583,22584,22586,22588],{"class":70,"line":9582},[68,22585,5050],{"class":85},[68,22587,2778],{"class":102},[68,22589,22590],{"class":872},"\"Person的析构函数调用\"\n",[68,22592,22593],{"class":70,"line":9609},[68,22594,3787],{"class":85},[68,22596,22597,22599],{"class":70,"line":9614},[68,22598,3586],{"class":102},[68,22600,17261],{"class":85},[68,22602,22603,22605,22607,22610],{"class":70,"line":9620},[68,22604,3586],{"class":102},[68,22606,8117],{"class":102},[68,22608,22609],{"class":85},"m_Height;",[68,22611,22612],{"class":74}," \u002F\u002F定义一个指针，指向身高\n",[68,22614,22615],{"class":70,"line":9632},[68,22616,5594],{"class":85},[68,22618,22619,22621,22623],{"class":70,"line":9644},[68,22620,6963],{"class":102},[68,22622,7187],{"class":587},[68,22624,3577],{"class":85},[68,22626,22627],{"class":70,"line":9656},[68,22628,3149],{"class":85},[68,22630,22631,22633,22635,22637,22639,22641,22644],{"class":70,"line":11314},[68,22632,21026],{"class":85},[68,22634,8729],{"class":587},[68,22636,997],{"class":85},[68,22638,2386],{"class":92},[68,22640,2114],{"class":85},[68,22642,22643],{"class":92},"160",[68,22645,1016],{"class":85},[68,22647,22648,22650,22652,22655,22657,22660,22662,22665,22667,22670,22672,22674],{"class":70,"line":11339},[68,22649,3154],{"class":85},[68,22651,2778],{"class":102},[68,22653,22654],{"class":872},"\"p1的年龄为:\"",[68,22656,2778],{"class":102},[68,22658,22659],{"class":85},"p1.m_Age",[68,22661,2778],{"class":102},[68,22663,22664],{"class":872},"\"身高为：\"",[68,22666,8018],{"class":102},[68,22668,22669],{"class":85},"p1.m_Height",[68,22671,2778],{"class":102},[68,22673,2843],{"class":85},[68,22675,22676],{"class":74},"  \u002F\u002F18\n",[68,22678,22679,22681,22683],{"class":70,"line":11362},[68,22680,21026],{"class":85},[68,22682,8632],{"class":587},[68,22684,19110],{"class":85},[68,22686,22687,22689,22691,22694,22696,22698,22700,22702,22704,22707,22709,22711],{"class":70,"line":11386},[68,22688,3154],{"class":85},[68,22690,2778],{"class":102},[68,22692,22693],{"class":872},"\"p2的年龄为：\"",[68,22695,2778],{"class":102},[68,22697,21056],{"class":85},[68,22699,2778],{"class":102},[68,22701,22664],{"class":872},[68,22703,8018],{"class":102},[68,22705,22706],{"class":85},"p2.m_Height",[68,22708,2778],{"class":102},[68,22710,2843],{"class":85},[68,22712,22676],{"class":74},[68,22714,22715],{"class":70,"line":11391},[68,22716,14807],{"class":85},[68,22718,22719],{"class":70,"line":11396},[68,22720,118],{"class":85},[68,22722,22723,22725,22727],{"class":70,"line":11401},[68,22724,1754],{"class":102},[68,22726,3574],{"class":587},[68,22728,3577],{"class":85},[68,22730,22731],{"class":70,"line":11410},[68,22732,3149],{"class":85},[68,22734,22735,22737],{"class":70,"line":11415},[68,22736,7232],{"class":587},[68,22738,7235],{"class":85},[68,22740,22741],{"class":70,"line":11421},[68,22742,118],{"class":85},[19,22744,22745],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22747,22748],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22750,22751],{},[38,22752],{"alt":63,"src":22753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22755,22756],{},"浅拷贝问题要使用深拷贝来解决",[19,22758,22759],{},[38,22760],{"alt":63,"src":22761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22763,22764],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[43,22766,22768],{"id":22767},"_826初始化列表","8.2.6初始化列表",[19,22770,22771],{},"作用：初始化属性",[19,22773,6780],{},[58,22775,22778],{"className":22776,"code":22777,"language":6786},[6784],"构造函数():属性1(值1),属性2(值2).....{}\n",[65,22779,22777],{"__ignoreMap":63},[19,22781,22782],{},"例子",[58,22784,22786],{"className":1740,"code":22785,"language":1742,"meta":63,"style":63},"#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",[65,22787,22788,22794,22804,22810,22814,22819,22823,22828,22833,22838,22843,22848,22853,22857,22862,22867,22910,22919,22937,22955,22973,22977,22981,22988,22995,23002,23006,23010,23018,23022,23026,23046,23055,23059,23063,23073,23077,23085],{"__ignoreMap":63},[68,22789,22790,22792],{"class":70,"line":71},[68,22791,3551],{"class":102},[68,22793,3554],{"class":872},[68,22795,22796,22798,22800,22802],{"class":70,"line":78},[68,22797,3559],{"class":102},[68,22799,3562],{"class":102},[68,22801,3565],{"class":587},[68,22803,112],{"class":85},[68,22805,22806,22808],{"class":70,"line":89},[68,22807,16291],{"class":102},[68,22809,16767],{"class":587},[68,22811,22812],{"class":70,"line":115},[68,22813,3149],{"class":85},[68,22815,22816],{"class":70,"line":280},[68,22817,22818],{"class":102},"    public:\n",[68,22820,22821],{"class":70,"line":301},[68,22822,4000],{"emptyLinePlaceholder":1679},[68,22824,22825],{"class":70,"line":320},[68,22826,22827],{"class":74},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[68,22829,22830],{"class":70,"line":2915},[68,22831,22832],{"class":74},"    \u002F\u002FPerson(int a, int b, int c) {\n",[68,22834,22835],{"class":70,"line":2921},[68,22836,22837],{"class":74},"    \u002F\u002F  m_A = a;\n",[68,22839,22840],{"class":70,"line":2933},[68,22841,22842],{"class":74},"    \u002F\u002F  m_B = b;\n",[68,22844,22845],{"class":70,"line":3214},[68,22846,22847],{"class":74},"    \u002F\u002F  m_C = c;\n",[68,22849,22850],{"class":70,"line":3219},[68,22851,22852],{"class":74},"    \u002F\u002F}\n",[68,22854,22855],{"class":70,"line":3225},[68,22856,4000],{"emptyLinePlaceholder":1679},[68,22858,22859],{"class":70,"line":3230},[68,22860,22861],{"class":74},"    \u002F\u002F初始化列表方式初始化\n",[68,22863,22864],{"class":70,"line":3244},[68,22865,22866],{"class":74},"    \u002F\u002F使用有参构造函数\n",[68,22868,22869,22871,22873,22875,22877,22879,22881,22883,22885,22887,22889,22892,22895,22898,22901,22904,22907],{"class":70,"line":3249},[68,22870,20114],{"class":587},[68,22872,997],{"class":85},[68,22874,1754],{"class":102},[68,22876,3002],{"class":6815},[68,22878,1002],{"class":85},[68,22880,1754],{"class":102},[68,22882,4432],{"class":6815},[68,22884,1002],{"class":85},[68,22886,1754],{"class":102},[68,22888,4448],{"class":6815},[68,22890,22891],{"class":85},") :",[68,22893,22894],{"class":587},"m_A",[68,22896,22897],{"class":85},"(a), ",[68,22899,22900],{"class":587},"m_B",[68,22902,22903],{"class":85},"(b), ",[68,22905,22906],{"class":587},"m_C",[68,22908,22909],{"class":85},"(c) {}\n",[68,22911,22912,22914,22917],{"class":70,"line":3255},[68,22913,16505],{"class":102},[68,22915,22916],{"class":587}," PrintPerson",[68,22918,12451],{"class":85},[68,22920,22921,22923,22925,22928,22930,22933,22935],{"class":70,"line":3276},[68,22922,11267],{"class":85},[68,22924,2778],{"class":102},[68,22926,22927],{"class":872}," \"mA:\"",[68,22929,3048],{"class":102},[68,22931,22932],{"class":85}," m_A ",[68,22934,2778],{"class":102},[68,22936,10439],{"class":85},[68,22938,22939,22941,22943,22946,22948,22951,22953],{"class":70,"line":3281},[68,22940,11267],{"class":85},[68,22942,2778],{"class":102},[68,22944,22945],{"class":872}," \"mB:\"",[68,22947,3048],{"class":102},[68,22949,22950],{"class":85}," m_B ",[68,22952,2778],{"class":102},[68,22954,10439],{"class":85},[68,22956,22957,22959,22961,22964,22966,22969,22971],{"class":70,"line":3295},[68,22958,11267],{"class":85},[68,22960,2778],{"class":102},[68,22962,22963],{"class":872}," \"mC:\"",[68,22965,3048],{"class":102},[68,22967,22968],{"class":85}," m_C ",[68,22970,2778],{"class":102},[68,22972,10439],{"class":85},[68,22974,22975],{"class":70,"line":3300},[68,22976,3787],{"class":85},[68,22978,22979],{"class":70,"line":3329},[68,22980,16818],{"class":102},[68,22982,22983,22985],{"class":70,"line":3334},[68,22984,3586],{"class":102},[68,22986,22987],{"class":85}," m_A;\n",[68,22989,22990,22992],{"class":70,"line":3351},[68,22991,3586],{"class":102},[68,22993,22994],{"class":85}," m_B;\n",[68,22996,22997,22999],{"class":70,"line":3356},[68,22998,3586],{"class":102},[68,23000,23001],{"class":85}," m_C;\n",[68,23003,23004],{"class":70,"line":3361},[68,23005,5594],{"class":85},[68,23007,23008],{"class":70,"line":3366},[68,23009,4000],{"emptyLinePlaceholder":1679},[68,23011,23012,23014,23016],{"class":70,"line":3380},[68,23013,1754],{"class":102},[68,23015,3574],{"class":587},[68,23017,7577],{"class":85},[68,23019,23020],{"class":70,"line":3385},[68,23021,3149],{"class":85},[68,23023,23024],{"class":70,"line":4177},[68,23025,4000],{"emptyLinePlaceholder":1679},[68,23027,23028,23030,23032,23034,23036,23038,23040,23042,23044],{"class":70,"line":4191},[68,23029,21026],{"class":85},[68,23031,19],{"class":587},[68,23033,997],{"class":85},[68,23035,99],{"class":92},[68,23037,1002],{"class":85},[68,23039,267],{"class":92},[68,23041,1002],{"class":85},[68,23043,288],{"class":92},[68,23045,1016],{"class":85},[68,23047,23048,23050,23053],{"class":70,"line":4199},[68,23049,17461],{"class":85},[68,23051,23052],{"class":587},"PrintPerson",[68,23054,7235],{"class":85},[68,23056,23057],{"class":70,"line":4204},[68,23058,4000],{"emptyLinePlaceholder":1679},[68,23060,23061],{"class":70,"line":4210},[68,23062,4000],{"emptyLinePlaceholder":1679},[68,23064,23065,23067,23069,23071],{"class":70,"line":4216},[68,23066,3903],{"class":587},[68,23068,997],{"class":85},[68,23070,3908],{"class":872},[68,23072,1016],{"class":85},[68,23074,23075],{"class":70,"line":4221},[68,23076,4000],{"emptyLinePlaceholder":1679},[68,23078,23079,23081,23083],{"class":70,"line":9547},[68,23080,5689],{"class":102},[68,23082,5692],{"class":92},[68,23084,112],{"class":85},[68,23086,23087],{"class":70,"line":9571},[68,23088,118],{"class":85},[19,23090,23091,23092,23095,23096],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1890,23093,23094],{},"参数名就是定义的对象属性","，",[1890,23097,23098],{},"属性后面的值为有参构造函数的形参",[58,23100,23102],{"className":1740,"code":23101,"language":1742,"meta":63,"style":63},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[65,23103,23104],{"__ignoreMap":63},[68,23105,23106,23108,23110,23112,23115,23117,23120,23122,23125,23127,23130,23132,23135,23137],{"class":70,"line":71},[68,23107,20641],{"class":587},[68,23109,997],{"class":85},[68,23111,1754],{"class":102},[68,23113,23114],{"class":85}," a.",[68,23116,1754],{"class":102},[68,23118,23119],{"class":85}," b,",[68,23121,1754],{"class":102},[68,23123,23124],{"class":85}," b):",[68,23126,22894],{"class":587},[68,23128,23129],{"class":85},"(a),",[68,23131,22900],{"class":587},[68,23133,23134],{"class":85},"(c),",[68,23136,22906],{"class":587},[68,23138,23139],{"class":85},"(b) {}\n",[43,23141,23143],{"id":23142},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23145,23146],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23148,16230],{},[58,23150,23152],{"className":1740,"code":23151,"language":1742,"meta":63,"style":63},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[65,23153,23154,23159,23164,23168,23173,23177],{"__ignoreMap":63},[68,23155,23156],{"class":70,"line":71},[68,23157,23158],{"class":85},"A{};\n",[68,23160,23161],{"class":70,"line":78},[68,23162,23163],{"class":85},"B\n",[68,23165,23166],{"class":70,"line":89},[68,23167,3149],{"class":85},[68,23169,23170],{"class":70,"line":115},[68,23171,23172],{"class":85},"    A a;\n",[68,23174,23175],{"class":70,"line":280},[68,23176,118],{"class":85},[68,23178,23179],{"class":70,"line":301},[68,23180,23181],{"class":74},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23183,23184],{},"案例",[58,23186,23188],{"className":1740,"code":23187,"language":1742,"meta":63,"style":63},"\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",[65,23189,23190,23195,23202,23206,23211,23216,23230,23234,23244,23255,23259,23266,23270,23283,23287,23292,23297,23301,23307,23311,23315,23319,23350,23354,23365,23369,23375,23379,23392,23396,23400,23404,23409,23414,23418,23426,23430,23447,23466,23470,23478,23482,23488],{"__ignoreMap":63},[68,23191,23192],{"class":70,"line":71},[68,23193,23194],{"class":74},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[68,23196,23197,23199],{"class":70,"line":78},[68,23198,16291],{"class":102},[68,23200,23201],{"class":587}," Phone\n",[68,23203,23204],{"class":70,"line":89},[68,23205,3149],{"class":85},[68,23207,23208],{"class":70,"line":115},[68,23209,23210],{"class":85},"public：\n",[68,23212,23213],{"class":70,"line":280},[68,23214,23215],{"class":74},"    \u002F\u002F 赋值(构造函数)\n",[68,23217,23218,23221,23223,23225,23228],{"class":70,"line":301},[68,23219,23220],{"class":587},"    Phone",[68,23222,997],{"class":85},[68,23224,16513],{"class":587},[68,23226,23227],{"class":6815}," pName",[68,23229,1757],{"class":85},[68,23231,23232],{"class":70,"line":320},[68,23233,3631],{"class":85},[68,23235,23236,23239,23241],{"class":70,"line":2915},[68,23237,23238],{"class":85},"        m_pName",[68,23240,869],{"class":102},[68,23242,23243],{"class":85},"pName;\n",[68,23245,23246,23248,23250,23253],{"class":70,"line":2921},[68,23247,5050],{"class":85},[68,23249,2778],{"class":102},[68,23251,23252],{"class":872},"\"Phone的构造函数调用\"",[68,23254,112],{"class":85},[68,23256,23257],{"class":70,"line":2933},[68,23258,3787],{"class":85},[68,23260,23261,23264],{"class":70,"line":3214},[68,23262,23263],{"class":587},"    ~Phone",[68,23265,3577],{"class":85},[68,23267,23268],{"class":70,"line":3219},[68,23269,3631],{"class":85},[68,23271,23272,23274,23276,23279,23281],{"class":70,"line":3225},[68,23273,5050],{"class":85},[68,23275,2778],{"class":102},[68,23277,23278],{"class":872},"\"Phone析构函数调用\"",[68,23280,2778],{"class":102},[68,23282,2800],{"class":85},[68,23284,23285],{"class":70,"line":3230},[68,23286,3787],{"class":85},[68,23288,23289],{"class":70,"line":3244},[68,23290,23291],{"class":74},"    \u002F\u002F\n",[68,23293,23294],{"class":70,"line":3249},[68,23295,23296],{"class":85},"    string m_PName;\n",[68,23298,23299],{"class":70,"line":3255},[68,23300,5594],{"class":85},[68,23302,23303,23305],{"class":70,"line":3276},[68,23304,16291],{"class":102},[68,23306,16767],{"class":587},[68,23308,23309],{"class":70,"line":3281},[68,23310,3149],{"class":85},[68,23312,23313],{"class":70,"line":3295},[68,23314,16313],{"class":102},[68,23316,23317],{"class":70,"line":3300},[68,23318,18589],{"class":74},[68,23320,23321,23323,23325,23327,23329,23331,23333,23336,23339,23341,23344,23347],{"class":70,"line":3329},[68,23322,20114],{"class":587},[68,23324,997],{"class":85},[68,23326,16513],{"class":587},[68,23328,16516],{"class":6815},[68,23330,2114],{"class":85},[68,23332,16513],{"class":587},[68,23334,23335],{"class":6815}," pname",[68,23337,23338],{"class":85},"):",[68,23340,16606],{"class":587},[68,23342,23343],{"class":85},"(name),m_phone.",[68,23345,23346],{"class":587},"m_PName",[68,23348,23349],{"class":85},"(pname) \n",[68,23351,23352],{"class":70,"line":3334},[68,23353,3631],{"class":85},[68,23355,23356,23358,23360,23363],{"class":70,"line":3351},[68,23357,5050],{"class":85},[68,23359,2778],{"class":102},[68,23361,23362],{"class":872},"\"Person的构造函数调用\"",[68,23364,112],{"class":85},[68,23366,23367],{"class":70,"line":3356},[68,23368,3787],{"class":85},[68,23370,23371,23373],{"class":70,"line":3361},[68,23372,20147],{"class":587},[68,23374,3577],{"class":85},[68,23376,23377],{"class":70,"line":3366},[68,23378,3631],{"class":85},[68,23380,23381,23383,23385,23388,23390],{"class":70,"line":3380},[68,23382,5050],{"class":85},[68,23384,2778],{"class":102},[68,23386,23387],{"class":872},"\"Person析构函数调用\"",[68,23389,2778],{"class":102},[68,23391,2800],{"class":85},[68,23393,23394],{"class":70,"line":3385},[68,23395,3787],{"class":85},[68,23397,23398],{"class":70,"line":4177},[68,23399,9379],{"class":74},[68,23401,23402],{"class":70,"line":4191},[68,23403,16488],{"class":85},[68,23405,23406],{"class":70,"line":4199},[68,23407,23408],{"class":74},"    \u002F\u002F手机\n",[68,23410,23411],{"class":70,"line":4204},[68,23412,23413],{"class":85},"    Phone m_Phone;\n",[68,23415,23416],{"class":70,"line":4210},[68,23417,5594],{"class":85},[68,23419,23420,23422,23424],{"class":70,"line":4216},[68,23421,6963],{"class":102},[68,23423,7187],{"class":587},[68,23425,3577],{"class":85},[68,23427,23428],{"class":70,"line":4221},[68,23429,3149],{"class":85},[68,23431,23432,23434,23436,23438,23440,23442,23445],{"class":70,"line":9547},[68,23433,21026],{"class":85},[68,23435,19],{"class":587},[68,23437,997],{"class":85},[68,23439,9515],{"class":872},[68,23441,2114],{"class":85},[68,23443,23444],{"class":872},"\"安卓\"",[68,23446,1016],{"class":85},[68,23448,23449,23451,23453,23456,23458,23461,23463],{"class":70,"line":9571},[68,23450,3154],{"class":85},[68,23452,2778],{"class":102},[68,23454,23455],{"class":85},"p.Name",[68,23457,2778],{"class":102},[68,23459,23460],{"class":872},"\"拿着：\"",[68,23462,2778],{"class":102},[68,23464,23465],{"class":85},"p.m_phone.m_PName;\n",[68,23467,23468],{"class":70,"line":9576},[68,23469,118],{"class":85},[68,23471,23472,23474,23476],{"class":70,"line":9582},[68,23473,1754],{"class":102},[68,23475,3574],{"class":587},[68,23477,3577],{"class":85},[68,23479,23480],{"class":70,"line":9609},[68,23481,3149],{"class":85},[68,23483,23484,23486],{"class":70,"line":9614},[68,23485,7232],{"class":587},[68,23487,7235],{"class":85},[68,23489,23490],{"class":70,"line":9620},[68,23491,118],{"class":85},[19,23493,1210],{},[58,23495,23497],{"className":1740,"code":23496,"language":1742,"meta":63,"style":63},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[65,23498,23499,23504],{"__ignoreMap":63},[68,23500,23501],{"class":70,"line":71},[68,23502,23503],{"class":74},"    \u002F\u002F不需要写这个：\n",[68,23505,23506],{"class":70,"line":78},[68,23507,23508],{"class":74},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23510,23511],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[58,23513,23515],{"className":1740,"code":23514,"language":1742,"meta":63,"style":63},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[65,23516,23517],{"__ignoreMap":63},[68,23518,23519,23521,23524,23526,23529,23532],{"class":70,"line":71},[68,23520,20641],{"class":587},[68,23522,23523],{"class":85},"(string name.string pname):",[68,23525,16606],{"class":587},[68,23527,23528],{"class":85},"(name),",[68,23530,23531],{"class":587},"m_phone",[68,23533,23534],{"class":85},"(pname) {}\n",[19,23536,23537,23538,869,23541],{},"采用的是隐式转换法，实际为如下：\n",[65,23539,23540],{},"m_phone(pname)",[65,23542,23543],{},"Phone m_phone=pname",[19,23545,23546,23549],{},[1890,23547,23548],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23551,23552],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[43,23554,23556],{"id":23555},"_828静态对象","8.2.8静态对象",[19,23558,23559],{},"静态对象在成员对象前static，称为静态对象",[19,23561,23562],{},"静态对象分为两类：",[48,23564,23565],{},[51,23566,23567],{},"静态成员变量",[168,23569,23570,23573,23576],{},[51,23571,23572],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[51,23574,23575],{},"②在编译阶段分配内存",[51,23577,23578],{},"③类内声明，类外初始化",[48,23580,23581],{"start":78},[51,23582,23583],{},"静态成员函数",[168,23585,23586,23589],{},[51,23587,23588],{},"①所有对象共享同一个函数",[51,23590,23591],{},"②静态成员函数只能访问静态成员变量",[23593,23594,23596],"h4",{"id":23595},"_8281静态成员变量","8.2.8.1静态成员变量",[58,23598,23600],{"className":1740,"code":23599,"language":1742,"meta":63,"style":63},"#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",[65,23601,23602,23608,23618,23624,23628,23632,23637,23642,23647,23655,23659,23663,23667,23675,23679,23683,23688,23701,23705,23713,23717,23723],{"__ignoreMap":63},[68,23603,23604,23606],{"class":70,"line":71},[68,23605,3551],{"class":102},[68,23607,3554],{"class":872},[68,23609,23610,23612,23614,23616],{"class":70,"line":78},[68,23611,3559],{"class":102},[68,23613,3562],{"class":102},[68,23615,3565],{"class":587},[68,23617,112],{"class":85},[68,23619,23620,23622],{"class":70,"line":89},[68,23621,16291],{"class":102},[68,23623,16767],{"class":587},[68,23625,23626],{"class":70,"line":115},[68,23627,3149],{"class":85},[68,23629,23630],{"class":70,"line":280},[68,23631,16313],{"class":102},[68,23633,23634],{"class":70,"line":301},[68,23635,23636],{"class":74},"    \u002F\u002F非静态成员变量\n",[68,23638,23639],{"class":70,"line":320},[68,23640,23641],{"class":74},"    \u002F\u002F int m_A;\n",[68,23643,23644],{"class":70,"line":2915},[68,23645,23646],{"class":74},"    \u002F\u002F定义静态成员变量\n",[68,23648,23649,23651,23653],{"class":70,"line":2921},[68,23650,12618],{"class":102},[68,23652,3982],{"class":102},[68,23654,22987],{"class":85},[68,23656,23657],{"class":70,"line":2933},[68,23658,4000],{"emptyLinePlaceholder":1679},[68,23660,23661],{"class":70,"line":3214},[68,23662,4000],{"emptyLinePlaceholder":1679},[68,23664,23665],{"class":70,"line":3219},[68,23666,5594],{"class":85},[68,23668,23669,23671,23673],{"class":70,"line":3225},[68,23670,6963],{"class":102},[68,23672,7187],{"class":587},[68,23674,3577],{"class":85},[68,23676,23677],{"class":70,"line":3230},[68,23678,3149],{"class":85},[68,23680,23681],{"class":70,"line":3244},[68,23682,16909],{"class":85},[68,23684,23685],{"class":70,"line":3249},[68,23686,23687],{"class":74},"    \u002F\u002F输出类成员变量这块内存\n",[68,23689,23690,23692,23694,23697,23699],{"class":70,"line":3255},[68,23691,3154],{"class":85},[68,23693,2778],{"class":102},[68,23695,23696],{"class":85},"p.m_A",[68,23698,2778],{"class":102},[68,23700,2800],{"class":85},[68,23702,23703],{"class":70,"line":3276},[68,23704,118],{"class":85},[68,23706,23707,23709,23711],{"class":70,"line":3281},[68,23708,1754],{"class":102},[68,23710,3574],{"class":587},[68,23712,3577],{"class":85},[68,23714,23715],{"class":70,"line":3295},[68,23716,3149],{"class":85},[68,23718,23719,23721],{"class":70,"line":3300},[68,23720,7232],{"class":587},[68,23722,3577],{"class":85},[68,23724,23725],{"class":70,"line":3329},[68,23726,118],{"class":85},[19,23728,23729],{},"此时输出是报错的：无法解析外部命令",[19,23731,23732],{},"解决这一问题：必须用到类内声明，类外初始化操作",[58,23734,23736],{"className":1740,"code":23735,"language":1742,"meta":63,"style":63},"#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",[65,23737,23738,23744,23754,23760,23764,23768,23773,23781,23785,23790,23805,23813,23817,23821,23826,23831,23843,23848,23859,23864,23869,23882,23886,23894,23898,23904],{"__ignoreMap":63},[68,23739,23740,23742],{"class":70,"line":71},[68,23741,3551],{"class":102},[68,23743,3554],{"class":872},[68,23745,23746,23748,23750,23752],{"class":70,"line":78},[68,23747,3559],{"class":102},[68,23749,3562],{"class":102},[68,23751,3565],{"class":587},[68,23753,112],{"class":85},[68,23755,23756,23758],{"class":70,"line":89},[68,23757,16291],{"class":102},[68,23759,16767],{"class":587},[68,23761,23762],{"class":70,"line":115},[68,23763,3149],{"class":85},[68,23765,23766],{"class":70,"line":280},[68,23767,16313],{"class":102},[68,23769,23770],{"class":70,"line":301},[68,23771,23772],{"class":74},"    \u002F\u002F类内声明\n",[68,23774,23775,23777,23779],{"class":70,"line":320},[68,23776,12618],{"class":102},[68,23778,3982],{"class":102},[68,23780,22987],{"class":85},[68,23782,23783],{"class":70,"line":2915},[68,23784,5594],{"class":85},[68,23786,23787],{"class":70,"line":2921},[68,23788,23789],{"class":74},"\u002F\u002F类外初始化\n",[68,23791,23792,23794,23796,23799,23801,23803],{"class":70,"line":2933},[68,23793,1754],{"class":102},[68,23795,17165],{"class":587},[68,23797,23798],{"class":85},"::m_A",[68,23800,869],{"class":102},[68,23802,2182],{"class":92},[68,23804,112],{"class":85},[68,23806,23807,23809,23811],{"class":70,"line":3214},[68,23808,6963],{"class":102},[68,23810,7187],{"class":587},[68,23812,3577],{"class":85},[68,23814,23815],{"class":70,"line":3219},[68,23816,3149],{"class":85},[68,23818,23819],{"class":70,"line":3225},[68,23820,16909],{"class":85},[68,23822,23823],{"class":70,"line":3230},[68,23824,23825],{"class":74},"    \u002F\u002F访问变量的原内存空间\n",[68,23827,23828],{"class":70,"line":3244},[68,23829,23830],{"class":74},"    \u002F\u002F100\n",[68,23832,23833,23835,23837,23839,23841],{"class":70,"line":3249},[68,23834,3154],{"class":85},[68,23836,2778],{"class":102},[68,23838,23696],{"class":85},[68,23840,2778],{"class":102},[68,23842,2800],{"class":85},[68,23844,23845],{"class":70,"line":3255},[68,23846,23847],{"class":85},"    Person p2;\n",[68,23849,23850,23853,23855,23857],{"class":70,"line":3276},[68,23851,23852],{"class":85},"    p2.m_A",[68,23854,869],{"class":102},[68,23856,3324],{"class":92},[68,23858,112],{"class":85},[68,23860,23861],{"class":70,"line":3281},[68,23862,23863],{"class":74},"    \u002F\u002F继续访问这片空间\n",[68,23865,23866],{"class":70,"line":3295},[68,23867,23868],{"class":74},"    \u002F\u002F200\n",[68,23870,23871,23873,23875,23878,23880],{"class":70,"line":3300},[68,23872,3154],{"class":85},[68,23874,2778],{"class":102},[68,23876,23877],{"class":85},"p2.m_A",[68,23879,2778],{"class":102},[68,23881,2800],{"class":85},[68,23883,23884],{"class":70,"line":3329},[68,23885,118],{"class":85},[68,23887,23888,23890,23892],{"class":70,"line":3334},[68,23889,1754],{"class":102},[68,23891,3574],{"class":587},[68,23893,3577],{"class":85},[68,23895,23896],{"class":70,"line":3351},[68,23897,3149],{"class":85},[68,23899,23900,23902],{"class":70,"line":3356},[68,23901,7232],{"class":587},[68,23903,7235],{"class":85},[68,23905,23906],{"class":70,"line":3361},[68,23907,118],{"class":85},[19,23909,23910],{},[1890,23911,23912],{},"静态变量的访问",[58,23914,23916],{"className":1740,"code":23915,"language":1742,"meta":63,"style":63},"#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",[65,23917,23918,23924,23934,23940,23944,23948,23952,23960,23964,23969,23977,23981,23985,23999,24014,24022,24026,24031,24036,24041,24046,24058,24063,24068,24082,24099,24103,24111,24115,24121],{"__ignoreMap":63},[68,23919,23920,23922],{"class":70,"line":71},[68,23921,3551],{"class":102},[68,23923,3554],{"class":872},[68,23925,23926,23928,23930,23932],{"class":70,"line":78},[68,23927,3559],{"class":102},[68,23929,3562],{"class":102},[68,23931,3565],{"class":587},[68,23933,112],{"class":85},[68,23935,23936,23938],{"class":70,"line":89},[68,23937,16291],{"class":102},[68,23939,16767],{"class":587},[68,23941,23942],{"class":70,"line":115},[68,23943,3149],{"class":85},[68,23945,23946],{"class":70,"line":280},[68,23947,16313],{"class":102},[68,23949,23950],{"class":70,"line":301},[68,23951,23772],{"class":74},[68,23953,23954,23956,23958],{"class":70,"line":320},[68,23955,12618],{"class":102},[68,23957,3982],{"class":102},[68,23959,22987],{"class":85},[68,23961,23962],{"class":70,"line":2915},[68,23963,16818],{"class":102},[68,23965,23966],{"class":70,"line":2921},[68,23967,23968],{"class":74},"    \u002F\u002F静态成员变量也是有访问权限的\n",[68,23970,23971,23973,23975],{"class":70,"line":2933},[68,23972,12618],{"class":102},[68,23974,3982],{"class":102},[68,23976,22994],{"class":85},[68,23978,23979],{"class":70,"line":3214},[68,23980,5594],{"class":85},[68,23982,23983],{"class":70,"line":3219},[68,23984,23789],{"class":74},[68,23986,23987,23989,23991,23993,23995,23997],{"class":70,"line":3225},[68,23988,1754],{"class":102},[68,23990,17165],{"class":587},[68,23992,23798],{"class":85},[68,23994,869],{"class":102},[68,23996,2182],{"class":92},[68,23998,112],{"class":85},[68,24000,24001,24003,24005,24008,24010,24012],{"class":70,"line":3230},[68,24002,1754],{"class":102},[68,24004,17165],{"class":587},[68,24006,24007],{"class":85},"::m_B",[68,24009,869],{"class":102},[68,24011,2436],{"class":92},[68,24013,112],{"class":85},[68,24015,24016,24018,24020],{"class":70,"line":3244},[68,24017,6963],{"class":102},[68,24019,7256],{"class":587},[68,24021,3577],{"class":85},[68,24023,24024],{"class":70,"line":3249},[68,24025,3149],{"class":85},[68,24027,24028],{"class":70,"line":3255},[68,24029,24030],{"class":74},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[68,24032,24033],{"class":70,"line":3276},[68,24034,24035],{"class":74},"    \u002F\u002F静态成员变量有两种访问方式：\n",[68,24037,24038],{"class":70,"line":3281},[68,24039,24040],{"class":74},"    \u002F\u002F1.通过对象进行访问\n",[68,24042,24043],{"class":70,"line":3295},[68,24044,24045],{"class":85},"    Person p;  \n",[68,24047,24048,24050,24052,24054,24056],{"class":70,"line":3300},[68,24049,3154],{"class":85},[68,24051,2778],{"class":102},[68,24053,23696],{"class":85},[68,24055,2778],{"class":102},[68,24057,2800],{"class":85},[68,24059,24060],{"class":70,"line":3329},[68,24061,24062],{"class":74},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[68,24064,24065],{"class":70,"line":3334},[68,24066,24067],{"class":74},"    \u002F\u002F2.通过类名进行访问\n",[68,24069,24070,24072,24074,24076,24078,24080],{"class":70,"line":3351},[68,24071,3154],{"class":85},[68,24073,2778],{"class":102},[68,24075,20641],{"class":587},[68,24077,23798],{"class":85},[68,24079,2778],{"class":102},[68,24081,2800],{"class":85},[68,24083,24084,24086,24088,24090,24092,24094,24096],{"class":70,"line":3356},[68,24085,3154],{"class":85},[68,24087,2778],{"class":102},[68,24089,20641],{"class":587},[68,24091,24007],{"class":85},[68,24093,2778],{"class":102},[68,24095,2843],{"class":85},[68,24097,24098],{"class":74}," \u002F\u002F没有访问权限，报错\n",[68,24100,24101],{"class":70,"line":3361},[68,24102,118],{"class":85},[68,24104,24105,24107,24109],{"class":70,"line":3366},[68,24106,1754],{"class":102},[68,24108,3574],{"class":587},[68,24110,3577],{"class":85},[68,24112,24113],{"class":70,"line":3380},[68,24114,3149],{"class":85},[68,24116,24117,24119],{"class":70,"line":3385},[68,24118,7301],{"class":587},[68,24120,7235],{"class":85},[68,24122,24123],{"class":70,"line":4177},[68,24124,118],{"class":85},[23593,24126,24128],{"id":24127},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24130,24131],{},"1.静态成员函数定义与访问",[58,24133,24135],{"className":1740,"code":24134,"language":1742,"meta":63,"style":63},"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",[65,24136,24137,24143,24147,24151,24156,24167,24171,24185,24189,24193,24201,24205,24210,24215,24219,24227,24232,24242],{"__ignoreMap":63},[68,24138,24139,24141],{"class":70,"line":71},[68,24140,16291],{"class":102},[68,24142,16767],{"class":587},[68,24144,24145],{"class":70,"line":78},[68,24146,3149],{"class":85},[68,24148,24149],{"class":70,"line":89},[68,24150,16313],{"class":102},[68,24152,24153],{"class":70,"line":115},[68,24154,24155],{"class":74},"    \u002F\u002F在公共权限下定义静态成员函数\n",[68,24157,24158,24160,24163,24165],{"class":70,"line":280},[68,24159,12618],{"class":102},[68,24161,24162],{"class":102}," void",[68,24164,12983],{"class":587},[68,24166,3577],{"class":85},[68,24168,24169],{"class":70,"line":301},[68,24170,3631],{"class":85},[68,24172,24173,24176,24178,24181,24183],{"class":70,"line":320},[68,24174,24175],{"class":85},"        coout",[68,24177,2778],{"class":102},[68,24179,24180],{"class":872},"\"静态成员函数的调用\"",[68,24182,2778],{"class":102},[68,24184,2800],{"class":85},[68,24186,24187],{"class":70,"line":2915},[68,24188,3787],{"class":85},[68,24190,24191],{"class":70,"line":2921},[68,24192,5594],{"class":85},[68,24194,24195,24197,24199],{"class":70,"line":2933},[68,24196,6963],{"class":102},[68,24198,7187],{"class":587},[68,24200,3577],{"class":85},[68,24202,24203],{"class":70,"line":3214},[68,24204,3149],{"class":85},[68,24206,24207],{"class":70,"line":3219},[68,24208,24209],{"class":74},"    \u002F\u002F静态成员函数的调用方式:\n",[68,24211,24212],{"class":70,"line":3225},[68,24213,24214],{"class":74},"    \u002F\u002F1.通过对象访问\n",[68,24216,24217],{"class":70,"line":3230},[68,24218,16909],{"class":85},[68,24220,24221,24223,24225],{"class":70,"line":3244},[68,24222,17461],{"class":85},[68,24224,13149],{"class":587},[68,24226,7235],{"class":85},[68,24228,24229],{"class":70,"line":3249},[68,24230,24231],{"class":74},"    \u002F\u002F2.通过类名访问\n",[68,24233,24234,24236,24238,24240],{"class":70,"line":3255},[68,24235,20114],{"class":587},[68,24237,19327],{"class":85},[68,24239,13149],{"class":587},[68,24241,7235],{"class":85},[68,24243,24244],{"class":70,"line":3276},[68,24245,118],{"class":85},[48,24247,24248],{"start":78},[51,24249,24250],{},"静态成员函数只能访问静态成员变量",[58,24252,24254],{"className":1740,"code":24253,"language":1742,"meta":63,"style":63},"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",[65,24255,24256,24262,24266,24270,24274,24284,24288,24302,24307,24319,24323,24334,24344,24348,24352,24356,24366,24370,24383,24387,24391,24395,24399,24413,24421,24425,24429,24433,24437,24445,24449,24459,24464,24468,24476,24480,24486],{"__ignoreMap":63},[68,24257,24258,24260],{"class":70,"line":71},[68,24259,16291],{"class":102},[68,24261,16767],{"class":587},[68,24263,24264],{"class":70,"line":78},[68,24265,3149],{"class":85},[68,24267,24268],{"class":70,"line":89},[68,24269,16313],{"class":102},[68,24271,24272],{"class":70,"line":115},[68,24273,24155],{"class":74},[68,24275,24276,24278,24280,24282],{"class":70,"line":280},[68,24277,12618],{"class":102},[68,24279,24162],{"class":102},[68,24281,12983],{"class":587},[68,24283,3577],{"class":85},[68,24285,24286],{"class":70,"line":301},[68,24287,3631],{"class":85},[68,24289,24290,24293,24295,24297,24299],{"class":70,"line":320},[68,24291,24292],{"class":85},"        m_A",[68,24294,869],{"class":102},[68,24296,2047],{"class":92},[68,24298,1804],{"class":85},[68,24300,24301],{"class":74}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[68,24303,24304],{"class":70,"line":2915},[68,24305,24306],{"class":74},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[68,24308,24309,24311,24313,24315,24317],{"class":70,"line":2921},[68,24310,24175],{"class":85},[68,24312,2778],{"class":102},[68,24314,24180],{"class":872},[68,24316,2778],{"class":102},[68,24318,2800],{"class":85},[68,24320,24321],{"class":70,"line":2933},[68,24322,3787],{"class":85},[68,24324,24325,24327,24329,24331],{"class":70,"line":3214},[68,24326,12618],{"class":102},[68,24328,3982],{"class":102},[68,24330,17044],{"class":85},[68,24332,24333],{"class":74}," \u002F\u002F静态成员变量\n",[68,24335,24336,24338,24341],{"class":70,"line":3219},[68,24337,3586],{"class":102},[68,24339,24340],{"class":85}," m_B;",[68,24342,24343],{"class":74}," \u002F\u002F非静态成员变量\n",[68,24345,24346],{"class":70,"line":3225},[68,24347,4000],{"emptyLinePlaceholder":1679},[68,24349,24350],{"class":70,"line":3230},[68,24351,16818],{"class":102},[68,24353,24354],{"class":70,"line":3244},[68,24355,23968],{"class":74},[68,24357,24358,24360,24362,24364],{"class":70,"line":3249},[68,24359,12618],{"class":102},[68,24361,24162],{"class":102},[68,24363,15215],{"class":587},[68,24365,3577],{"class":85},[68,24367,24368],{"class":70,"line":3255},[68,24369,3631],{"class":85},[68,24371,24372,24374,24376,24379,24381],{"class":70,"line":3276},[68,24373,5050],{"class":85},[68,24375,2778],{"class":102},[68,24377,24378],{"class":872},"\"这是私有权限下的静态函数调用\"",[68,24380,2778],{"class":102},[68,24382,2800],{"class":85},[68,24384,24385],{"class":70,"line":3281},[68,24386,3787],{"class":85},[68,24388,24389],{"class":70,"line":3295},[68,24390,4000],{"emptyLinePlaceholder":1679},[68,24392,24393],{"class":70,"line":3300},[68,24394,4000],{"emptyLinePlaceholder":1679},[68,24396,24397],{"class":70,"line":3329},[68,24398,5594],{"class":85},[68,24400,24401,24403,24405,24407,24409,24411],{"class":70,"line":3334},[68,24402,1754],{"class":102},[68,24404,17165],{"class":587},[68,24406,23798],{"class":85},[68,24408,869],{"class":102},[68,24410,600],{"class":92},[68,24412,112],{"class":85},[68,24414,24415,24417,24419],{"class":70,"line":3351},[68,24416,6963],{"class":102},[68,24418,7187],{"class":587},[68,24420,3577],{"class":85},[68,24422,24423],{"class":70,"line":3356},[68,24424,3149],{"class":85},[68,24426,24427],{"class":70,"line":3361},[68,24428,24209],{"class":74},[68,24430,24431],{"class":70,"line":3366},[68,24432,24214],{"class":74},[68,24434,24435],{"class":70,"line":3380},[68,24436,16909],{"class":85},[68,24438,24439,24441,24443],{"class":70,"line":3385},[68,24440,17461],{"class":85},[68,24442,13149],{"class":587},[68,24444,7235],{"class":85},[68,24446,24447],{"class":70,"line":4177},[68,24448,24231],{"class":74},[68,24450,24451,24453,24455,24457],{"class":70,"line":4191},[68,24452,20114],{"class":587},[68,24454,19327],{"class":85},[68,24456,13149],{"class":587},[68,24458,7235],{"class":85},[68,24460,24461],{"class":70,"line":4199},[68,24462,24463],{"class":74},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[68,24465,24466],{"class":70,"line":4204},[68,24467,118],{"class":85},[68,24469,24470,24472,24474],{"class":70,"line":4210},[68,24471,1754],{"class":102},[68,24473,3574],{"class":587},[68,24475,3577],{"class":85},[68,24477,24478],{"class":70,"line":4216},[68,24479,3149],{"class":85},[68,24481,24482,24484],{"class":70,"line":4221},[68,24483,7232],{"class":587},[68,24485,7235],{"class":85},[68,24487,24488],{"class":70,"line":9547},[68,24489,118],{"class":85},[43,24491,24493],{"id":24492},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23593,24495,24497],{"id":24496},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24499,24500],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24502,24503],{},"只有非静态成员变量才属于类的对象上",[24505,24506,24508],"h5",{"id":24507},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[58,24510,24512],{"className":1740,"code":24511,"language":1742,"meta":63,"style":63},"#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",[65,24513,24514,24521,24531,24537,24541,24545,24549,24557,24561,24565,24588,24592,24600,24604,24610],{"__ignoreMap":63},[68,24515,24516,24518],{"class":70,"line":71},[68,24517,3551],{"class":102},[68,24519,24520],{"class":872},"\u003Ciostraem>\n",[68,24522,24523,24525,24527,24529],{"class":70,"line":78},[68,24524,3559],{"class":102},[68,24526,3562],{"class":102},[68,24528,3565],{"class":587},[68,24530,112],{"class":85},[68,24532,24533,24535],{"class":70,"line":89},[68,24534,16291],{"class":102},[68,24536,16767],{"class":587},[68,24538,24539],{"class":70,"line":115},[68,24540,3149],{"class":85},[68,24542,24543],{"class":70,"line":280},[68,24544,4000],{"emptyLinePlaceholder":1679},[68,24546,24547],{"class":70,"line":301},[68,24548,5594],{"class":85},[68,24550,24551,24553,24555],{"class":70,"line":320},[68,24552,6963],{"class":102},[68,24554,7187],{"class":587},[68,24556,3577],{"class":85},[68,24558,24559],{"class":70,"line":2915},[68,24560,3149],{"class":85},[68,24562,24563],{"class":70,"line":2921},[68,24564,16909],{"class":85},[68,24566,24567,24569,24571,24574,24576,24579,24581,24583,24585],{"class":70,"line":2933},[68,24568,3154],{"class":85},[68,24570,2778],{"class":102},[68,24572,24573],{"class":872},"\"size of p=\"",[68,24575,2778],{"class":102},[68,24577,24578],{"class":587},"sizeoif",[68,24580,8138],{"class":85},[68,24582,2778],{"class":102},[68,24584,2843],{"class":85},[68,24586,24587],{"class":74}," \u002F\u002F查看这个空类的占用的内存空间\n",[68,24589,24590],{"class":70,"line":3214},[68,24591,118],{"class":85},[68,24593,24594,24596,24598],{"class":70,"line":3219},[68,24595,1754],{"class":102},[68,24597,3574],{"class":587},[68,24599,3577],{"class":85},[68,24601,24602],{"class":70,"line":3225},[68,24603,3149],{"class":85},[68,24605,24606,24608],{"class":70,"line":3230},[68,24607,7232],{"class":587},[68,24609,7235],{"class":85},[68,24611,24612],{"class":70,"line":3244},[68,24613,118],{"class":85},[19,24615,24616],{},"输出结果为：size of p=1",[19,24618,24619],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24621,24622],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24505,24624,24626],{"id":24625},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[58,24628,24630],{"className":1740,"code":24629,"language":1742,"meta":63,"style":63},"#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",[65,24631,24632,24638,24648,24656,24660,24669,24673,24681,24685,24689,24708,24712,24716,24724,24728,24734],{"__ignoreMap":63},[68,24633,24634,24636],{"class":70,"line":71},[68,24635,3551],{"class":102},[68,24637,3554],{"class":872},[68,24639,24640,24642,24644,24646],{"class":70,"line":78},[68,24641,3559],{"class":102},[68,24643,3562],{"class":102},[68,24645,3565],{"class":587},[68,24647,112],{"class":85},[68,24649,24650,24652,24654],{"class":70,"line":89},[68,24651,16291],{"class":102},[68,24653,17165],{"class":587},[68,24655,4274],{"class":85},[68,24657,24658],{"class":70,"line":115},[68,24659,3149],{"class":85},[68,24661,24662,24664,24666],{"class":70,"line":280},[68,24663,3586],{"class":102},[68,24665,17044],{"class":85},[68,24667,24668],{"class":74},"\u002F\u002F非静态成员变量\n",[68,24670,24671],{"class":70,"line":301},[68,24672,5594],{"class":85},[68,24674,24675,24677,24679],{"class":70,"line":320},[68,24676,6963],{"class":102},[68,24678,7187],{"class":587},[68,24680,3577],{"class":85},[68,24682,24683],{"class":70,"line":2915},[68,24684,3149],{"class":85},[68,24686,24687],{"class":70,"line":2921},[68,24688,16909],{"class":85},[68,24690,24691,24693,24695,24697,24699,24701,24703,24705],{"class":70,"line":2933},[68,24692,3154],{"class":85},[68,24694,2778],{"class":102},[68,24696,24573],{"class":872},[68,24698,2976],{"class":102},[68,24700,8138],{"class":85},[68,24702,2778],{"class":102},[68,24704,2843],{"class":85},[68,24706,24707],{"class":74}," \u002F\u002F查看不是空对象时占用多少内存\n",[68,24709,24710],{"class":70,"line":3214},[68,24711,4000],{"emptyLinePlaceholder":1679},[68,24713,24714],{"class":70,"line":3219},[68,24715,118],{"class":85},[68,24717,24718,24720,24722],{"class":70,"line":3225},[68,24719,1754],{"class":102},[68,24721,3574],{"class":587},[68,24723,3577],{"class":85},[68,24725,24726],{"class":70,"line":3230},[68,24727,3149],{"class":85},[68,24729,24730,24732],{"class":70,"line":3244},[68,24731,7232],{"class":587},[68,24733,7235],{"class":85},[68,24735,24736],{"class":70,"line":3249},[68,24737,118],{"class":85},[19,24739,24740],{},"输出结果：size of p=4",[19,24742,24743],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[48,24745,24746],{},[51,24747,24748],{},"如果加上非静态成员变量，Person类修改如下",[58,24750,24752],{"className":1740,"code":24751,"language":1742,"meta":63,"style":63},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[65,24753,24754,24760,24764,24770,24778,24782,24787],{"__ignoreMap":63},[68,24755,24756,24758],{"class":70,"line":71},[68,24757,16291],{"class":102},[68,24759,16767],{"class":587},[68,24761,24762],{"class":70,"line":78},[68,24763,3149],{"class":85},[68,24765,24766,24768],{"class":70,"line":89},[68,24767,3586],{"class":102},[68,24769,22987],{"class":85},[68,24771,24772,24774,24776],{"class":70,"line":115},[68,24773,12618],{"class":102},[68,24775,3982],{"class":102},[68,24777,22994],{"class":85},[68,24779,24780],{"class":70,"line":280},[68,24781,5594],{"class":85},[68,24783,24784],{"class":70,"line":301},[68,24785,24786],{"class":74},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[68,24788,24789,24791,24793,24795,24797,24799],{"class":70,"line":320},[68,24790,1754],{"class":102},[68,24792,17165],{"class":587},[68,24794,24007],{"class":85},[68,24796,869],{"class":102},[68,24798,600],{"class":92},[68,24800,112],{"class":85},[19,24802,24803],{},"输出结果：4",[19,24805,24806],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[48,24808,24809],{"start":78},[51,24810,24811],{},"加上非静态成员函数",[58,24813,24815],{"className":1740,"code":24814,"language":1742,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[65,24816,24817,24824,24828,24834,24842,24846,24850,24854],{"__ignoreMap":63},[68,24818,24819,24821],{"class":70,"line":71},[68,24820,16291],{"class":102},[68,24822,24823],{"class":587},"  Person\n",[68,24825,24826],{"class":70,"line":78},[68,24827,3149],{"class":85},[68,24829,24830,24832],{"class":70,"line":89},[68,24831,3586],{"class":102},[68,24833,22987],{"class":85},[68,24835,24836,24838,24840],{"class":70,"line":115},[68,24837,16505],{"class":102},[68,24839,12983],{"class":587},[68,24841,3577],{"class":85},[68,24843,24844],{"class":70,"line":280},[68,24845,3631],{"class":85},[68,24847,24848],{"class":70,"line":301},[68,24849,4000],{"emptyLinePlaceholder":1679},[68,24851,24852],{"class":70,"line":320},[68,24853,3787],{"class":85},[68,24855,24856],{"class":70,"line":2915},[68,24857,5594],{"class":85},[19,24859,24860],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[48,24862,24863],{"start":89},[51,24864,24865],{},"加上静态成员函数",[58,24867,24869],{"className":1740,"code":24868,"language":1742,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[65,24870,24871,24877,24881,24887,24895,24899,24903,24907,24918,24922,24926,24930],{"__ignoreMap":63},[68,24872,24873,24875],{"class":70,"line":71},[68,24874,16291],{"class":102},[68,24876,24823],{"class":587},[68,24878,24879],{"class":70,"line":78},[68,24880,3149],{"class":85},[68,24882,24883,24885],{"class":70,"line":89},[68,24884,3586],{"class":102},[68,24886,22987],{"class":85},[68,24888,24889,24891,24893],{"class":70,"line":115},[68,24890,16505],{"class":102},[68,24892,12983],{"class":587},[68,24894,3577],{"class":85},[68,24896,24897],{"class":70,"line":280},[68,24898,3631],{"class":85},[68,24900,24901],{"class":70,"line":301},[68,24902,4000],{"emptyLinePlaceholder":1679},[68,24904,24905],{"class":70,"line":320},[68,24906,3787],{"class":85},[68,24908,24909,24911,24913,24916],{"class":70,"line":2915},[68,24910,12618],{"class":102},[68,24912,24162],{"class":102},[68,24914,24915],{"class":587}," func1",[68,24917,3577],{"class":85},[68,24919,24920],{"class":70,"line":2921},[68,24921,3631],{"class":85},[68,24923,24924],{"class":70,"line":2933},[68,24925,4000],{"emptyLinePlaceholder":1679},[68,24927,24928],{"class":70,"line":3214},[68,24929,3787],{"class":85},[68,24931,24932],{"class":70,"line":3219},[68,24933,5594],{"class":85},[19,24935,24803],{},[19,24937,24938],{},"解释：静态成员函数也不属于类上",[1652,24940,9273],{},{"title":63,"searchDepth":78,"depth":78,"links":24942},[24943,24949],{"id":16242,"depth":78,"text":16243,"children":24944},[24945,24946,24947,24948],{"id":16246,"depth":89,"text":16247},{"id":16970,"depth":89,"text":16971},{"id":17142,"depth":89,"text":17143},{"id":17600,"depth":89,"text":17601},{"id":19972,"depth":78,"text":19973,"children":24950},[24951,24952,24953,24954,24955,24956,24957,24958,24959],{"id":19984,"depth":89,"text":19985},{"id":20277,"depth":89,"text":20278},{"id":20768,"depth":89,"text":20769},{"id":21865,"depth":89,"text":21866},{"id":22288,"depth":89,"text":22289},{"id":22767,"depth":89,"text":22768},{"id":23142,"depth":89,"text":23143},{"id":23555,"depth":89,"text":23556},{"id":24492,"depth":89,"text":24493},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16207,"description":24960},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24967,"title":1742,"body":24968,"description":1676,"extension":1677,"meta":24972,"navigation":1679,"path":24974,"seo":24975,"stem":24976,"__hash__":24977},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24969,"toc":24970},[],{"title":63,"searchDepth":78,"depth":78,"links":24971},[],{"category":24973},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1742,"description":1676},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24979,"title":24980,"body":24981,"description":63,"extension":1677,"meta":25571,"navigation":1679,"path":25572,"seo":25573,"stem":25574,"__hash__":25575},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24982,"toc":25553},[24983,24986,24990,24993,24996,24999,25017,25022,25025,25028,25031,25034,25039,25042,25047,25050,25053,25057,25060,25063,25069,25072,25090,25094,25098,25101,25106,25109,25113,25116,25129,25132,25136,25139,25142,25145,25170,25173,25182,25193,25208,25240,25244,25251,25259,25263,25266,25269,25274,25278,25281,25284,25289,25292,25296,25299,25302,25307,25310,25314,25319,25323,25389,25393,25396,25399,25402,25405,25408,25414,25435,25438,25452,25461,25465,25468,25471,25476,25479,25484,25489,25492,25495,25500,25505,25508,25513,25518,25521,25526,25531,25534,25537,25542,25545,25550],[10,24984,24980],{"id":24985},"_1强化学习基本认识",[14,24987,24989],{"id":24988},"_11什么是强化学习","1.1.什么是强化学习",[19,24991,24992],{},"强化学习有两部分组成：智能体和环境；",[19,24994,24995],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24997,24998],{},"强化学习与监督学习的区别:",[48,25000,25001,25004,25007,25010],{},[51,25002,25003],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[51,25005,25006],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[51,25008,25009],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[51,25011,25012,25013,25016],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1890,25014,25015],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25018,25019],{},[38,25020],{"alt":63,"src":25021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25023,25024],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25026,25027],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25029,25030],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25032,25033],{},"获取奖励",[19,25035,25036],{},[38,25037],{"alt":63,"src":25038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25040,25041],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25043,25044],{},[38,25045],{"alt":63,"src":25046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25048,25049],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25051,25052],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25054,25056],{"id":25055},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25058,25059],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25061,25062],{},"具身智能中的应用",[19,25064,25065,25068],{},[1890,25066,25067],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25070,25071],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25073,25074,25075,25078,25079,25082,25083,25086,25087],{},"机器人是",[1890,25076,25077],{},"躯体","，深度学习是",[1890,25080,25081],{},"神经元****网络","，VLA是",[1890,25084,25085],{},"通用的行为逻辑","，而强化学习是",[1890,25088,25089],{},"教练",[14,25091,25093],{"id":25092},"_13序列决策","1.3.序列决策",[43,25095,25097],{"id":25096},"_131智能体与环境","1.3.1.智能体与环境",[19,25099,25100],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25102,25103],{},[38,25104],{"alt":63,"src":25105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25107,25108],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[43,25110,25112],{"id":25111},"_132奖励","1.3.2.奖励",[19,25114,25115],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25117,25118,25119,25128],{},"取某个策略的表现如何。强化学习的目的就是",[1890,25120,25121,25122,25127],{},"最大化",[1890,25123,25124],{},[1890,25125,25126],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25130,25131],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[43,25133,25135],{"id":25134},"_133序列决策","1.3.3.序列决策",[19,25137,25138],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25140,25141],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25143,25144],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25146,25147,25151,25152,25154,25155,25157,25158,25160,25161,15392,25164,15392,25167],{},[25148,25149,25150],"em",{},"Ht"," = ",[25148,25153,2332],{},"1*, a",[25148,25156,99],{},", r",[25148,25159,99],{},", . . . ,* ",[25148,25162,25163],{},"ot",[25148,25165,25166],{},", at ,",[25148,25168,25169],{},"rt",[19,25171,25172],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25174,25175,25151,25178,3260,25180,2165],{},[25148,25176,25177],{},"st",[25148,25179,1801],{},[25148,25181,25150],{},[19,25183,25184,25185,25188,25189,25192],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1890,25186,25187],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1890,25190,25191],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25194,25195,25196,25199,25200,25203,25204,25207],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1890,25197,25198],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1890,25201,25202],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25148,25205,25206],{},"S, A, T, R, Ω, O, γ",")。",[19,25209,25210,25211,25213,25214,25216,25217,997,25219,25222,25223,25225,25226,997,25229,25232,25233,25235,25236,25239],{},"其中 ",[25148,25212,2425],{}," 表示状态空间，为隐变量，",[25148,25215,1968],{}," 为动作空间，",[25148,25218,2450],{},[25148,25220,25221],{},"s ′ |s, a",") 为状态转移概率，",[25148,25224,2400],{}," 为奖励函数，",[25148,25227,25228],{},"Ω",[25148,25230,25231],{},"o|s, a",") 为观测概率，",[25148,25234,2326],{}," 为观测空间，",[25148,25237,25238],{},"γ"," 为折扣因子。",[14,25241,25243],{"id":25242},"_14动作空间","1.4.动作空间",[19,25245,25246,25247,25250],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1890,25248,25249],{},"动作空间"," ，动作空间分为:",[48,25252,25253,25256],{},[51,25254,25255],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[51,25257,25258],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25260,25262],{"id":25261},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25264,25265],{},"由策略、价值函数、模型三部分组成",[19,25267,25268],{},"这三者组成马尔可夫决策过程",[19,25270,25271],{},[38,25272],{"alt":63,"src":25273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[43,25275,25277],{"id":25276},"_151策略","1.5.1.策略",[19,25279,25280],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25282,25283],{},"策略可分为两种：",[19,25285,25286],{},[38,25287],{"alt":63,"src":25288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25290,25291],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[43,25293,25295],{"id":25294},"_152价值函数","1.5.2.价值函数",[19,25297,25298],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25300,25301],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25303,25304],{},[38,25305],{"alt":63,"src":25306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25308,25309],{},"进入某个状态采取的最优动作可以通过Q函数得到",[43,25311,25313],{"id":25312},"_153模型","1.5.3.模型",[19,25315,25316],{},[38,25317],{"alt":63,"src":25318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25320,25322],{"id":25321},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[120,25324,25325,25335],{},[123,25326,25327],{},[126,25328,25329,25332],{},[129,25330,25331],{"align":131},"类型",[129,25333,25334],{"align":131},"特点",[137,25336,25337,25347,25357,25367,25379],{},[126,25338,25339,25344],{},[142,25340,25341],{"align":131},[1890,25342,25343],{},"基于价值的智能体",[142,25345,25346],{"align":131},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[126,25348,25349,25354],{},[142,25350,25351],{"align":131},[1890,25352,25353],{},"基于策略的智能体",[142,25355,25356],{"align":131},"直接学习策略，没有学习价值函数",[126,25358,25359,25364],{},[142,25360,25361],{"align":131},[1890,25362,25363],{},"演员-评论员智能体",[142,25365,25366],{"align":131},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[126,25368,25369,25374],{},[142,25370,25371],{"align":131},[1890,25372,25373],{},"有模型强化学习智能体",[142,25375,25376],{"align":131},[38,25377],{"alt":63,"src":25378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[126,25380,25381,25386],{},[142,25382,25383],{"align":131},[1890,25384,25385],{},"免模型强化学习智能体",[142,25387,25388],{"align":131},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25390,25392],{"id":25391},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25394,25395],{},"学习和规划是序列决策的两个基本问题",[19,25397,25398],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25400,25401],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25403,25404],{},"强化学习用到的库：Gym",[19,25406,25407],{},"Gym可以检验强化学习算法的优劣",[19,25409,25410,25413],{},[1890,25411,25412],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[58,25415,25419],{"className":25416,"code":25417,"language":25418,"meta":63,"style":63},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[65,25420,25421],{"__ignoreMap":63},[68,25422,25423,25426,25429,25432],{"class":70,"line":71},[68,25424,25425],{"class":587},"pip",[68,25427,25428],{"class":872}," install",[68,25430,25431],{"class":872}," gym==",[68,25433,25434],{"class":92},"0.25.2\n",[19,25436,25437],{},"显示图形界面需要",[58,25439,25441],{"className":25416,"code":25440,"language":25418,"meta":63,"style":63},"pip install pygame\n",[65,25442,25443],{"__ignoreMap":63},[68,25444,25445,25447,25449],{"class":70,"line":71},[68,25446,25425],{"class":587},[68,25448,25428],{"class":872},[68,25450,25451],{"class":872}," pygame\n",[19,25453,25454,25455],{},"有关Gym库的相关文档介绍：",[1974,25456,25460],{"href":25457,"rel":25458},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25459],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25462,25464],{"id":25463},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25466,25467],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25469,25470],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25472,25473],{},[38,25474],{"alt":63,"src":25475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25477,25478],{},"折扣率需要自己来设定",[19,25480,25481],{},[38,25482],{"alt":63,"src":25483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[48,25485,25486],{},[51,25487,25488],{},"状态转移函数：",[19,25490,25491],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25493,25494],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25496,25497],{},[38,25498],{"alt":63,"src":25499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[48,25501,25502],{"start":78},[51,25503,25504],{},"动作价值函数：",[19,25506,25507],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25509,25510],{},[38,25511],{"alt":63,"src":25512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[48,25514,25515],{"start":89},[51,25516,25517],{},"最优动作价值函数：",[19,25519,25520],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,25522,25523],{},[38,25524],{"alt":63,"src":25525},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[48,25527,25528],{"start":115},[51,25529,25530],{},"状态价值函数:",[19,25532,25533],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25535,25536],{},"它衡量的是“一个具体动作”的长期价值",[19,25538,25539],{},[38,25540],{"alt":63,"src":25541},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25543,25544],{},"几个价值函数之间的比较：",[19,25546,25547],{},[38,25548],{"alt":63,"src":25549},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1652,25551,25552],{},"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":63,"searchDepth":78,"depth":78,"links":25554},[25555,25556,25557,25562,25563,25568,25569,25570],{"id":24988,"depth":78,"text":24989},{"id":25055,"depth":78,"text":25056},{"id":25092,"depth":78,"text":25093,"children":25558},[25559,25560,25561],{"id":25096,"depth":89,"text":25097},{"id":25111,"depth":89,"text":25112},{"id":25134,"depth":89,"text":25135},{"id":25242,"depth":78,"text":25243},{"id":25261,"depth":78,"text":25262,"children":25564},[25565,25566,25567],{"id":25276,"depth":89,"text":25277},{"id":25294,"depth":89,"text":25295},{"id":25312,"depth":89,"text":25313},{"id":25321,"depth":78,"text":25322},{"id":25391,"depth":78,"text":25392},{"id":25463,"depth":78,"text":25464},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24980,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25577,"title":25578,"body":25579,"description":25586,"extension":1677,"meta":25597,"navigation":1679,"path":25598,"seo":25599,"stem":25600,"__hash__":25601},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25580,"toc":25595},[25581,25584,25587,25592],[10,25582,25578],{"id":25583},"_2马尔可夫决策过程",[19,25585,25586],{},"这是强化学习的基本框架",[19,25588,25589],{},[38,25590],{"alt":63,"src":25591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25593,25594],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":63,"searchDepth":78,"depth":78,"links":25596},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25578,"description":25586},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25603,"title":25604,"body":25605,"description":63,"extension":1677,"meta":25721,"navigation":1679,"path":25722,"seo":25723,"stem":25724,"__hash__":25725},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25606,"toc":25716},[25607,25610,25614,25617,25622,25627,25630,25635,25638,25643,25646,25650,25655,25658,25663,25668,25673,25676,25680,25685,25688,25693,25698,25703,25708,25711],[10,25608,25604],{"id":25609},"_3动作价值函数",[14,25611,25613],{"id":25612},"_31dqn","3.1.DQN",[19,25615,25616],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25618,25619],{},[38,25620],{"alt":63,"src":25621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25623,25624],{},[38,25625],{"alt":63,"src":25626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25628,25629],{},"DQN算法的描述：",[19,25631,25632],{},[38,25633],{"alt":63,"src":25634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25636,25637],{},"这里的Dense指的是全连接层",[19,25639,25640],{},[38,25641],{"alt":63,"src":25642},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25644,25645],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,25647,25649],{"id":25648},"_32dqn的举例","3.2.DQN的举例",[19,25651,25652],{},[38,25653],{"alt":63,"src":25654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25656,25657],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25659,25660],{},[38,25661],{"alt":63,"src":25662},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25664,25665],{},[38,25666],{"alt":63,"src":25667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25669,25670],{},[38,25671],{"alt":63,"src":25672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25674,25675],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25677,25679],{"id":25678},"_33td算法","3.3.TD算法",[19,25681,25682],{},[38,25683],{"alt":63,"src":25684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25686,25687],{},"强化学习TD算法公式的粗略解释：",[19,25689,25690],{},[38,25691],{"alt":63,"src":25692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25694,25695],{},[38,25696],{"alt":63,"src":25697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25699,25700],{},[38,25701],{"alt":63,"src":25702},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25704,25705],{},[38,25706],{"alt":63,"src":25707},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25709,25710],{},"TD算法总结：",[19,25712,25713],{},[38,25714],{"alt":63,"src":25715},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":63,"searchDepth":78,"depth":78,"links":25717},[25718,25719,25720],{"id":25612,"depth":78,"text":25613},{"id":25648,"depth":78,"text":25649},{"id":25678,"depth":78,"text":25679},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25604,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25727,"title":25728,"body":25729,"description":63,"extension":1677,"meta":25962,"navigation":1679,"path":25963,"seo":25964,"stem":25965,"__hash__":25966},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25730,"toc":25958},[25731,25734,25738,25741,25744,25749,25754,25757,25762,25767,25770,25775,25778,25783,25786,25791,25794,25799,25802,25807,25812,25815,25820,25823,25826,25831,25834,25839,25844,25848,25851,25854,25859,25864,25867,25872,25877,25880,25885,25888,25891,25896,25899,25904,25907,25912,25917,25920,25925,25930,25933,25938,25941,25946,25949],[10,25732,25728],{"id":25733},"_4策略学习",[14,25735,25737],{"id":25736},"_41概念描述","4.1.概念描述",[19,25739,25740],{},"用神经网络（策略网络）近似策略函数",[19,25742,25743],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25745,25746],{},[38,25747],{"alt":63,"src":25748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25750,25751],{},[38,25752],{"alt":63,"src":25753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25755,25756],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25758,25759],{},[38,25760],{"alt":63,"src":25761},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25763,25764],{},[38,25765],{"alt":63,"src":25766},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25768,25769],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25771,25772],{},[38,25773],{"alt":63,"src":25774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25776,25777],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25779,25780],{},[38,25781],{"alt":63,"src":25782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25784,25785],{},"改进theta要用到策略梯度算法",[19,25787,25788],{},[38,25789],{"alt":63,"src":25790},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25792,25793],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25795,25796],{},[38,25797],{"alt":63,"src":25798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25800,25801],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25803,25804],{},[38,25805],{"alt":63,"src":25806},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25808,25809],{},[38,25810],{"alt":63,"src":25811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25813,25814],{},"梯度公式总结：",[19,25816,25817],{},[38,25818],{"alt":63,"src":25819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25821,25822],{},"两个公式的分别应用场景：",[19,25824,25825],{},"对于离散的动作：",[19,25827,25828],{},[38,25829],{"alt":63,"src":25830},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25832,25833],{},"对于连续的动作：",[19,25835,25836],{},[38,25837],{"alt":63,"src":25838},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25840,25841],{},[38,25842],{"alt":63,"src":25843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25845,25847],{"id":25846},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25849,25850],{},"使用蒙特卡洛来近似计算策略梯度",[19,25852,25853],{},"蒙特卡洛法的解释如下：",[19,25855,25856],{},[38,25857],{"alt":63,"src":25858},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25860,25861],{},[38,25862],{"alt":63,"src":25863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25865,25866],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[48,25868,25869],{},[51,25870,25871],{},"方法一：reinforce算法",[19,25873,25874],{},[38,25875],{"alt":63,"src":25876},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25878,25879],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[48,25881,25882],{"start":78},[51,25883,25884],{},"方法二：actor-critic算法",[19,25886,25887],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25889,25890],{},"两个网络的构建：",[19,25892,25893],{},[38,25894],{"alt":63,"src":25895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25897,25898],{},"actor网路：",[19,25900,25901],{},[38,25902],{"alt":63,"src":25903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25905,25906],{},"critic网络",[19,25908,25909],{},[38,25910],{"alt":63,"src":25911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[48,25913,25914],{"start":89},[51,25915,25916],{},"网络的训练",[19,25918,25919],{},"网络描述",[19,25921,25922],{},[38,25923],{"alt":63,"src":25924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25926,25927],{},[38,25928],{"alt":63,"src":25929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25931,25932],{},"TD算法更新梯度：",[19,25934,25935],{},[38,25936],{"alt":63,"src":25937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25939,25940],{},"策略网络更新梯度：",[19,25942,25943],{},[38,25944],{"alt":63,"src":25945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25947,25948],{},"训练整个流程的具体描述：",[19,25950,25951,25954,25955],{},[38,25952],{"alt":63,"src":25953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[38,25956],{"alt":63,"src":25957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":63,"searchDepth":78,"depth":78,"links":25959},[25960,25961],{"id":25736,"depth":78,"text":25737},{"id":25846,"depth":78,"text":25847},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25728,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25968,"title":25969,"body":25970,"description":25977,"extension":1677,"meta":26027,"navigation":1679,"path":26028,"seo":26029,"stem":26030,"__hash__":26031},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25971,"toc":26023},[25972,25975,25978,25982,25985,25990,25994,25997,26002,26005,26010,26015,26018],[10,25973,25969],{"id":25974},"_5alphago算法",[19,25976,25977],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25979,25981],{"id":25980},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25983,25984],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25986,25987],{},[38,25988],{"alt":63,"src":25989},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25991,25993],{"id":25992},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25995,25996],{},"采用强化学习的方式训练策略网络",[19,25998,25999],{},[38,26000],{"alt":63,"src":26001},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26003,26004],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26006,26007],{},[38,26008],{"alt":63,"src":26009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26011,26012],{},[38,26013],{"alt":63,"src":26014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26016,26017],{},"强化学习训练策略网络的总结：",[19,26019,26020],{},[38,26021],{"alt":63,"src":26022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":63,"searchDepth":78,"depth":78,"links":26024},[26025,26026],{"id":25980,"depth":78,"text":25981},{"id":25992,"depth":78,"text":25993},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25969,"description":25977},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26033,"title":26034,"body":26035,"description":26042,"extension":1677,"meta":26045,"navigation":1679,"path":26046,"seo":26047,"stem":26048,"__hash__":26049},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26036,"toc":26043},[26037,26040],[10,26038,26034],{"id":26039},"_6价值网络",[19,26041,26042],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":63,"searchDepth":78,"depth":78,"links":26044},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26034,"description":26042},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26051,"title":26052,"body":26053,"description":26057,"extension":1677,"meta":26058,"navigation":1679,"path":26059,"seo":26060,"stem":26061,"__hash__":26062},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26054,"toc":26055},[],{"title":63,"searchDepth":78,"depth":78,"links":26056},[],"记录自己的强化学习笔记。",{"category":24973},"\u002Fwiki\u002F2025-12-04",{"title":26052,"description":26057},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26064,"title":26065,"body":26066,"description":1676,"extension":1677,"meta":26105,"navigation":1679,"path":26106,"seo":26107,"stem":26108,"__hash__":26109},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26067,"toc":26103},[26068,26071,26074,26080,26083,26089,26092,26097,26100],[10,26069,26065],{"id":26070},"_1-项目概览与官方资源",[19,26072,26073],{},"官方文档：",[19,26075,26076],{},[1974,26077,26078],{"href":26078,"rel":26079},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25459],[19,26081,26082],{},"官方代码仓库：",[19,26084,26085],{},[1974,26086,26087],{"href":26087,"rel":26088},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25459],[19,26090,26091],{},"复现大体流程：",[19,26093,26094],{},[38,26095],{"alt":63,"src":26096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26098,26099],{},"本教程的目标是打通这条链路：",[19,26101,26102],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":63,"searchDepth":78,"depth":78,"links":26104},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26065,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26111,"title":26112,"body":26113,"description":1676,"extension":1677,"meta":26229,"navigation":1679,"path":26230,"seo":26231,"stem":26232,"__hash__":26233},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26114,"toc":26224},[26115,26118,26122,26125,26132,26136,26139,26148,26158,26162,26192,26195,26221],[10,26116,26112],{"id":26117},"_2-环境准备与设备连接",[14,26119,26121],{"id":26120},"_21-系统与环境","2.1 系统与环境",[19,26123,26124],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26126,26127,26128,26131],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[65,26129,26130],{},"lerobot"," 依赖。",[14,26133,26135],{"id":26134},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26137,26138],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[58,26140,26142],{"className":25416,"code":26141,"language":25418,"meta":63,"style":63},"lerobot-find-out\n",[65,26143,26144],{"__ignoreMap":63},[68,26145,26146],{"class":70,"line":71},[68,26147,26141],{"class":587},[19,26149,26150,26151,1949,26154,26157],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[65,26152,26153],{},"\u002Fdev\u002FttyACM0",[65,26155,26156],{},"\u002Fdev\u002FttyACM1","）。",[14,26159,26161],{"id":26160},"_23-串口授权","2.3 串口授权",[58,26163,26165],{"className":25416,"code":26164,"language":25418,"meta":63,"style":63},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[65,26166,26167,26181],{"__ignoreMap":63},[68,26168,26169,26172,26175,26178],{"class":70,"line":71},[68,26170,26171],{"class":587},"sudo",[68,26173,26174],{"class":872}," chmod",[68,26176,26177],{"class":92}," 666",[68,26179,26180],{"class":872}," \u002Fdev\u002FttyACM0\n",[68,26182,26183,26185,26187,26189],{"class":70,"line":78},[68,26184,26171],{"class":587},[68,26186,26174],{"class":872},[68,26188,26177],{"class":92},[68,26190,26191],{"class":872}," \u002Fdev\u002FttyACM1\n",[19,26193,26194],{},"说明：",[168,26196,26197,26202,26208,26218],{},[51,26198,26199,26201],{},[65,26200,26171],{},"：以 root 权限执行命令。",[51,26203,26204,26207],{},[65,26205,26206],{},"chmod","：修改设备节点权限。",[51,26209,26210,26213,26214,26217],{},[65,26211,26212],{},"666","：",[65,26215,26216],{},"rw-rw-rw-","，所有用户可读写。",[51,26219,26220],{},"串口号必须替换为你机器上的真实端口。",[1652,26222,26223],{},"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":63,"searchDepth":78,"depth":78,"links":26225},[26226,26227,26228],{"id":26120,"depth":78,"text":26121},{"id":26134,"depth":78,"text":26135},{"id":26160,"depth":78,"text":26161},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26112,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26235,"title":26236,"body":26237,"description":1676,"extension":1677,"meta":26398,"navigation":1679,"path":26399,"seo":26400,"stem":26401,"__hash__":26402},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26238,"toc":26394},[26239,26243,26247,26253,26256,26313,26316,26320,26323,26391],[10,26240,26242],{"id":26241},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26244,26246],{"id":26245},"_31-配置电机-id","3.1 配置电机 ID",[19,26248,26249,26250,26252],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[65,26251,99],{},"，需要改成机械臂链路里不冲突的编号。",[19,26254,26255],{},"方式一：用 LeRobot 命令逐步写入。",[58,26257,26259],{"className":25416,"code":26258,"language":25418,"meta":63,"style":63},"# 主臂舵机配置 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",[65,26260,26261,26266,26274,26281,26286,26290,26295,26301,26308],{"__ignoreMap":63},[68,26262,26263],{"class":70,"line":71},[68,26264,26265],{"class":74},"# 主臂舵机配置 ID\n",[68,26267,26268,26271],{"class":70,"line":78},[68,26269,26270],{"class":587},"lerobot-setup-motors",[68,26272,26273],{"class":92}," \\\n",[68,26275,26276,26279],{"class":70,"line":89},[68,26277,26278],{"class":92},"  --teleop.type=so101_leader",[68,26280,26273],{"class":92},[68,26282,26283],{"class":70,"line":115},[68,26284,26285],{"class":92},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[68,26287,26288],{"class":70,"line":280},[68,26289,4000],{"emptyLinePlaceholder":1679},[68,26291,26292],{"class":70,"line":301},[68,26293,26294],{"class":74},"# 从臂舵机配置 ID\n",[68,26296,26297,26299],{"class":70,"line":320},[68,26298,26270],{"class":587},[68,26300,26273],{"class":92},[68,26302,26303,26306],{"class":70,"line":2915},[68,26304,26305],{"class":92},"  --robot.type=so101_follower",[68,26307,26273],{"class":92},[68,26309,26310],{"class":70,"line":2921},[68,26311,26312],{"class":92},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26314,26315],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26317,26319],{"id":26318},"_32-机械臂校准","3.2 机械臂校准",[19,26321,26322],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[58,26324,26326],{"className":25416,"code":26325,"language":25418,"meta":63,"style":63},"# 主臂校准\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",[65,26327,26328,26333,26340,26346,26353,26358,26362,26367,26373,26379,26386],{"__ignoreMap":63},[68,26329,26330],{"class":70,"line":71},[68,26331,26332],{"class":74},"# 主臂校准\n",[68,26334,26335,26338],{"class":70,"line":78},[68,26336,26337],{"class":587},"lerobot-calibrate",[68,26339,26273],{"class":92},[68,26341,26342,26344],{"class":70,"line":89},[68,26343,26278],{"class":92},[68,26345,26273],{"class":92},[68,26347,26348,26351],{"class":70,"line":115},[68,26349,26350],{"class":92},"  --teleop.port=\u002Fdev\u002FttyACM0",[68,26352,26273],{"class":92},[68,26354,26355],{"class":70,"line":280},[68,26356,26357],{"class":92},"  --teleop.id=my_awesome_leader_arm\n",[68,26359,26360],{"class":70,"line":301},[68,26361,4000],{"emptyLinePlaceholder":1679},[68,26363,26364],{"class":70,"line":320},[68,26365,26366],{"class":74},"# 从臂校准\n",[68,26368,26369,26371],{"class":70,"line":2915},[68,26370,26337],{"class":587},[68,26372,26273],{"class":92},[68,26374,26375,26377],{"class":70,"line":2921},[68,26376,26305],{"class":92},[68,26378,26273],{"class":92},[68,26380,26381,26384],{"class":70,"line":2933},[68,26382,26383],{"class":92},"  --robot.port=\u002Fdev\u002FttyACM1",[68,26385,26273],{"class":92},[68,26387,26388],{"class":70,"line":3214},[68,26389,26390],{"class":92},"  --robot.id=my_awesome_follower_arm\n",[1652,26392,26393],{},"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":63,"searchDepth":78,"depth":78,"links":26395},[26396,26397],{"id":26245,"depth":78,"text":26246},{"id":26318,"depth":78,"text":26319},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26236,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26404,"title":26405,"body":26406,"description":1676,"extension":1677,"meta":26597,"navigation":1679,"path":26598,"seo":26599,"stem":26600,"__hash__":26601},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26407,"toc":26593},[26408,26411,26415,26462,26466,26479,26542,26545,26590],[10,26409,26405],{"id":26410},"_4-遥操与相机接入",[14,26412,26414],{"id":26413},"_41-不带相机遥操","4.1 不带相机遥操",[58,26416,26418],{"className":25416,"code":26417,"language":25418,"meta":63,"style":63},"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",[65,26419,26420,26427,26433,26439,26446,26452,26458],{"__ignoreMap":63},[68,26421,26422,26425],{"class":70,"line":71},[68,26423,26424],{"class":587},"lerobot-teleoperate",[68,26426,26273],{"class":92},[68,26428,26429,26431],{"class":70,"line":78},[68,26430,26305],{"class":92},[68,26432,26273],{"class":92},[68,26434,26435,26437],{"class":70,"line":89},[68,26436,26383],{"class":92},[68,26438,26273],{"class":92},[68,26440,26441,26444],{"class":70,"line":115},[68,26442,26443],{"class":92},"  --robot.id=my_awesome_follower_arm",[68,26445,26273],{"class":92},[68,26447,26448,26450],{"class":70,"line":280},[68,26449,26278],{"class":92},[68,26451,26273],{"class":92},[68,26453,26454,26456],{"class":70,"line":301},[68,26455,26350],{"class":92},[68,26457,26273],{"class":92},[68,26459,26460],{"class":70,"line":320},[68,26461,26357],{"class":92},[14,26463,26465],{"id":26464},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[58,26467,26469],{"className":25416,"code":26468,"language":25418,"meta":63,"style":63},"lerobot-find-cameras opencv\n",[65,26470,26471],{"__ignoreMap":63},[68,26472,26473,26476],{"class":70,"line":71},[68,26474,26475],{"class":587},"lerobot-find-cameras",[68,26477,26478],{"class":872}," opencv\n",[58,26480,26482],{"className":25416,"code":26481,"language":25418,"meta":63,"style":63},"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",[65,26483,26484,26490,26496,26502,26508,26518,26524,26530,26537],{"__ignoreMap":63},[68,26485,26486,26488],{"class":70,"line":71},[68,26487,26424],{"class":587},[68,26489,26273],{"class":92},[68,26491,26492,26494],{"class":70,"line":78},[68,26493,26305],{"class":92},[68,26495,26273],{"class":92},[68,26497,26498,26500],{"class":70,"line":89},[68,26499,26383],{"class":92},[68,26501,26273],{"class":92},[68,26503,26504,26506],{"class":70,"line":115},[68,26505,26443],{"class":92},[68,26507,26273],{"class":92},[68,26509,26510,26513,26516],{"class":70,"line":280},[68,26511,26512],{"class":92},"  --robot.cameras=",[68,26514,26515],{"class":872},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[68,26517,26273],{"class":92},[68,26519,26520,26522],{"class":70,"line":301},[68,26521,26278],{"class":92},[68,26523,26273],{"class":92},[68,26525,26526,26528],{"class":70,"line":320},[68,26527,26350],{"class":92},[68,26529,26273],{"class":92},[68,26531,26532,26535],{"class":70,"line":2915},[68,26533,26534],{"class":92},"  --teleop.id=my_awesome_leader_arm",[68,26536,26273],{"class":92},[68,26538,26539],{"class":70,"line":2921},[68,26540,26541],{"class":92},"  --display_data=true\n",[19,26543,26544],{},"相机参数说明：",[168,26546,26547,26553,26559,26568,26578,26584],{},[51,26548,26549,26552],{},[65,26550,26551],{},"front","：相机名称。",[51,26554,26555,26558],{},[65,26556,26557],{},"type: opencv","：相机驱动类型。",[51,26560,26561,26564,26565,26157],{},[65,26562,26563],{},"index_or_path","：设备编号或设备路径（如 ",[65,26566,26567],{},"\u002Fdev\u002Fvideo4",[51,26569,26570,26573,26574,26577],{},[65,26571,26572],{},"width"," \u002F ",[65,26575,26576],{},"height","：图像分辨率。",[51,26579,26580,26583],{},[65,26581,26582],{},"fps","：采样帧率。",[51,26585,26586,26589],{},[65,26587,26588],{},"--display_data=true","：启用实时可视化。",[1652,26591,26592],{},"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":63,"searchDepth":78,"depth":78,"links":26594},[26595,26596],{"id":26413,"depth":78,"text":26414},{"id":26464,"depth":78,"text":26465},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26405,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26603,"title":26604,"body":26605,"description":1676,"extension":1677,"meta":26776,"navigation":1679,"path":26777,"seo":26778,"stem":26779,"__hash__":26780},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26606,"toc":26771},[26607,26611,26615,26620,26625,26628,26670,26676,26680,26728,26733,26737,26740,26748,26753,26758,26763,26768],[10,26608,26610],{"id":26609},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26612,26614],{"id":26613},"_51-生成访问令牌","5.1 生成访问令牌",[19,26616,26617],{},[38,26618],{"alt":63,"src":26619},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26621,26622],{},[38,26623],{"alt":63,"src":26624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26626,26627],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[58,26629,26631],{"className":25416,"code":26630,"language":25418,"meta":63,"style":63},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[65,26632,26633,26646],{"__ignoreMap":63},[68,26634,26635,26638,26641,26643],{"class":70,"line":71},[68,26636,26637],{"class":102},"export",[68,26639,26640],{"class":85}," HF_TOKEN",[68,26642,869],{"class":102},[68,26644,26645],{"class":872},"\"your_huggingface_token\"\n",[68,26647,26648,26651,26654,26657,26660,26662,26665,26667],{"class":70,"line":78},[68,26649,26650],{"class":587},"hf",[68,26652,26653],{"class":872}," auth",[68,26655,26656],{"class":872}," login",[68,26658,26659],{"class":92}," --token",[68,26661,11322],{"class":872},[68,26663,26664],{"class":85},"$HF_TOKEN",[68,26666,1987],{"class":872},[68,26668,26669],{"class":92}," --add-to-git-credential\n",[19,26671,26672,26675],{},[65,26673,26674],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26677,26679],{"id":26678},"_52-验证登录","5.2 验证登录",[58,26681,26683],{"className":25416,"code":26682,"language":25418,"meta":63,"style":63},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[65,26684,26685,26715],{"__ignoreMap":63},[68,26686,26687,26690,26692,26695,26697,26699,26702,26705,26708,26711,26713],{"class":70,"line":71},[68,26688,26689],{"class":85},"HF_USER",[68,26691,869],{"class":102},[68,26693,26694],{"class":85},"$(",[68,26696,26650],{"class":587},[68,26698,26653],{"class":872},[68,26700,26701],{"class":872}," whoami",[68,26703,26704],{"class":102}," |",[68,26706,26707],{"class":587}," head",[68,26709,26710],{"class":92}," -n",[68,26712,1112],{"class":92},[68,26714,1757],{"class":85},[68,26716,26717,26720,26722,26725],{"class":70,"line":78},[68,26718,26719],{"class":92},"echo",[68,26721,11322],{"class":872},[68,26723,26724],{"class":85},"$HF_USER",[68,26726,26727],{"class":872},"\"\n",[19,26729,26730],{},[38,26731],{"alt":63,"src":26732},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26734,26736],{"id":26735},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26738,26739],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[168,26741,26742,26745],{},[51,26743,26744],{},"Dataset Repo（用于上传演示数据）",[51,26746,26747],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26749,26750],{},[38,26751],{"alt":63,"src":26752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26754,26755],{},[38,26756],{"alt":63,"src":26757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26759,26760],{},[38,26761],{"alt":63,"src":26762},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26764,26765],{},[38,26766],{"alt":63,"src":26767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1652,26769,26770],{},"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":63,"searchDepth":78,"depth":78,"links":26772},[26773,26774,26775],{"id":26613,"depth":78,"text":26614},{"id":26678,"depth":78,"text":26679},{"id":26735,"depth":78,"text":26736},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26604,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26782,"title":26783,"body":26784,"description":1676,"extension":1677,"meta":26981,"navigation":1679,"path":26982,"seo":26983,"stem":26984,"__hash__":26985},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26785,"toc":26976},[26786,26790,26794,26890,26898,26903,26907,26923,26926,26930,26973],[10,26787,26789],{"id":26788},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26791,26793],{"id":26792},"_61-录制示教数据","6.1 录制示教数据",[58,26795,26797],{"className":25416,"code":26796,"language":25418,"meta":63,"style":63},"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",[65,26798,26799,26806,26812,26818,26824,26833,26839,26845,26851,26858,26868,26875,26885],{"__ignoreMap":63},[68,26800,26801,26804],{"class":70,"line":71},[68,26802,26803],{"class":587},"lerobot-record",[68,26805,26273],{"class":92},[68,26807,26808,26810],{"class":70,"line":78},[68,26809,26305],{"class":92},[68,26811,26273],{"class":92},[68,26813,26814,26816],{"class":70,"line":89},[68,26815,26383],{"class":92},[68,26817,26273],{"class":92},[68,26819,26820,26822],{"class":70,"line":115},[68,26821,26443],{"class":92},[68,26823,26273],{"class":92},[68,26825,26826,26828,26831],{"class":70,"line":280},[68,26827,26512],{"class":92},[68,26829,26830],{"class":872},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[68,26832,26273],{"class":92},[68,26834,26835,26837],{"class":70,"line":301},[68,26836,26278],{"class":92},[68,26838,26273],{"class":92},[68,26840,26841,26843],{"class":70,"line":320},[68,26842,26350],{"class":92},[68,26844,26273],{"class":92},[68,26846,26847,26849],{"class":70,"line":2915},[68,26848,26534],{"class":92},[68,26850,26273],{"class":92},[68,26852,26853,26856],{"class":70,"line":2921},[68,26854,26855],{"class":92},"  --display_data=true",[68,26857,26273],{"class":92},[68,26859,26860,26863,26866],{"class":70,"line":2933},[68,26861,26862],{"class":92},"  --dataset.repo_id=",[68,26864,26865],{"class":872},"\"Embodied-AI-6\u002Fso101_test\"",[68,26867,26273],{"class":92},[68,26869,26870,26873],{"class":70,"line":3214},[68,26871,26872],{"class":92},"  --dataset.num_episodes=10",[68,26874,26273],{"class":92},[68,26876,26877,26880,26883],{"class":70,"line":3219},[68,26878,26879],{"class":92},"  --dataset.single_task=",[68,26881,26882],{"class":872},"\"Grab the green cube\"",[68,26884,26273],{"class":92},[68,26886,26887],{"class":70,"line":3225},[68,26888,26889],{"class":92},"  --resume=true\n",[168,26891,26892],{},[51,26893,26894,26897],{},[65,26895,26896],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26899,26900],{},[38,26901],{"alt":63,"src":26902},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26904,26906],{"id":26905},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[58,26908,26910],{"className":25416,"code":26909,"language":25418,"meta":63,"style":63},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[65,26911,26912],{"__ignoreMap":63},[68,26913,26914,26917,26920],{"class":70,"line":71},[68,26915,26916],{"class":587},"rm",[68,26918,26919],{"class":92}," -rf",[68,26921,26922],{"class":872}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26924,26925],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26927,26929],{"id":26928},"_63-回放指定-episode","6.3 回放指定 episode",[58,26931,26933],{"className":25416,"code":26932,"language":25418,"meta":63,"style":63},"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",[65,26934,26935,26942,26948,26954,26960,26968],{"__ignoreMap":63},[68,26936,26937,26940],{"class":70,"line":71},[68,26938,26939],{"class":587},"lerobot-replay",[68,26941,26273],{"class":92},[68,26943,26944,26946],{"class":70,"line":78},[68,26945,26305],{"class":92},[68,26947,26273],{"class":92},[68,26949,26950,26952],{"class":70,"line":89},[68,26951,26383],{"class":92},[68,26953,26273],{"class":92},[68,26955,26956,26958],{"class":70,"line":115},[68,26957,26443],{"class":92},[68,26959,26273],{"class":92},[68,26961,26962,26964,26966],{"class":70,"line":280},[68,26963,26862],{"class":92},[68,26965,26865],{"class":872},[68,26967,26273],{"class":92},[68,26969,26970],{"class":70,"line":301},[68,26971,26972],{"class":92},"  --dataset.episode=0\n",[1652,26974,26975],{},"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":63,"searchDepth":78,"depth":78,"links":26977},[26978,26979,26980],{"id":26792,"depth":78,"text":26793},{"id":26905,"depth":78,"text":26906},{"id":26928,"depth":78,"text":26929},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26783,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26987,"title":26988,"body":26989,"description":1676,"extension":1677,"meta":27117,"navigation":1679,"path":27118,"seo":27119,"stem":27120,"__hash__":27121},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26990,"toc":27115},[26991,26995,27058,27061,27108,27113],[10,26992,26994],{"id":26993},"_7-act-模型训练","7. ACT 模型训练",[58,26996,26998],{"className":25416,"code":26997,"language":25418,"meta":63,"style":63},"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",[65,26999,27000,27007,27015,27022,27029,27036,27043,27050],{"__ignoreMap":63},[68,27001,27002,27005],{"class":70,"line":71},[68,27003,27004],{"class":587},"lerobot-train",[68,27006,26273],{"class":92},[68,27008,27009,27011,27013],{"class":70,"line":78},[68,27010,26862],{"class":92},[68,27012,26865],{"class":872},[68,27014,26273],{"class":92},[68,27016,27017,27020],{"class":70,"line":89},[68,27018,27019],{"class":92},"  --policy.type=act",[68,27021,26273],{"class":92},[68,27023,27024,27027],{"class":70,"line":115},[68,27025,27026],{"class":92},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[68,27028,26273],{"class":92},[68,27030,27031,27034],{"class":70,"line":280},[68,27032,27033],{"class":92},"  --job_name=act_so101_test",[68,27035,26273],{"class":92},[68,27037,27038,27041],{"class":70,"line":301},[68,27039,27040],{"class":92},"  --policy.device=cuda",[68,27042,26273],{"class":92},[68,27044,27045,27048],{"class":70,"line":320},[68,27046,27047],{"class":92},"  --wandb.enable=false",[68,27049,26273],{"class":92},[68,27051,27052,27055],{"class":70,"line":2915},[68,27053,27054],{"class":92},"  --policy.repo_id=",[68,27056,27057],{"class":872},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27059,27060],{},"参数说明：",[168,27062,27063,27069,27075,27081,27087,27096,27102],{},[51,27064,27065,27068],{},[65,27066,27067],{},"--dataset.repo_id","：训练数据集仓库。",[51,27070,27071,27074],{},[65,27072,27073],{},"--policy.type=act","：策略模型类型为 ACT。",[51,27076,27077,27080],{},[65,27078,27079],{},"--output_dir","：本地训练输出目录。",[51,27082,27083,27086],{},[65,27084,27085],{},"--job_name","：训练任务名称。",[51,27088,27089,27092,27093,26157],{},[65,27090,27091],{},"--policy.device","：训练设备（如 ",[65,27094,27095],{},"cuda",[51,27097,27098,27101],{},[65,27099,27100],{},"--wandb.enable","：是否启用 WandB 可视化。",[51,27103,27104,27107],{},[65,27105,27106],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27109,27110],{},[38,27111],{"alt":63,"src":27112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1652,27114,26975],{},{"title":63,"searchDepth":78,"depth":78,"links":27116},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26988,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27123,"title":27124,"body":27125,"description":1676,"extension":1677,"meta":27212,"navigation":1679,"path":27213,"seo":27214,"stem":27215,"__hash__":27216},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27126,"toc":27210},[27127,27130,27133,27200,27208],[10,27128,27124],{"id":27129},"_8-策略部署与自动采集",[19,27131,27132],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[58,27134,27136],{"className":25416,"code":27135,"language":25418,"meta":63,"style":63},"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",[65,27137,27138,27144,27150,27156,27164,27170,27177,27185,27193],{"__ignoreMap":63},[68,27139,27140,27142],{"class":70,"line":71},[68,27141,26803],{"class":587},[68,27143,26273],{"class":92},[68,27145,27146,27148],{"class":70,"line":78},[68,27147,26305],{"class":92},[68,27149,26273],{"class":92},[68,27151,27152,27154],{"class":70,"line":89},[68,27153,26383],{"class":92},[68,27155,26273],{"class":92},[68,27157,27158,27160,27162],{"class":70,"line":115},[68,27159,26512],{"class":92},[68,27161,26830],{"class":872},[68,27163,26273],{"class":92},[68,27165,27166,27168],{"class":70,"line":280},[68,27167,26443],{"class":92},[68,27169,26273],{"class":92},[68,27171,27172,27175],{"class":70,"line":301},[68,27173,27174],{"class":92},"  --display_data=false",[68,27176,26273],{"class":92},[68,27178,27179,27181,27183],{"class":70,"line":320},[68,27180,26862],{"class":92},[68,27182,26865],{"class":872},[68,27184,26273],{"class":92},[68,27186,27187,27189,27191],{"class":70,"line":2915},[68,27188,26879],{"class":92},[68,27190,26882],{"class":872},[68,27192,26273],{"class":92},[68,27194,27195,27198],{"class":70,"line":2921},[68,27196,27197],{"class":92},"  --policy.path=",[68,27199,27057],{"class":872},[168,27201,27202],{},[51,27203,27204,27207],{},[65,27205,27206],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1652,27209,26975],{},{"title":63,"searchDepth":78,"depth":78,"links":27211},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27124,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27218,"title":27219,"body":27220,"description":1676,"extension":1677,"meta":27249,"navigation":1679,"path":27250,"seo":27251,"stem":27252,"__hash__":27253},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27221,"toc":27247},[27222,27226,27229,27235,27238,27244],[10,27223,27225],{"id":27224},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27227,27228],{},"项目地址：",[19,27230,27231],{},[1974,27232,27233],{"href":27233,"rel":27234},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25459],[19,27236,27237],{},"参考教程：",[19,27239,27240],{},[1974,27241,27242],{"href":27242,"rel":27243},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25459],[19,27245,27246],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":63,"searchDepth":78,"depth":78,"links":27248},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27219,"description":1676},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27255,"title":27256,"body":27257,"description":27261,"extension":1677,"meta":27262,"navigation":1679,"path":27263,"seo":27264,"stem":27265,"__hash__":27266},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27258,"toc":27259},[],{"title":63,"searchDepth":78,"depth":78,"links":27260},[],"act复现",{"category":24973},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27256,"description":27261},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27268,"title":27269,"body":27270,"description":63,"extension":1677,"meta":27572,"navigation":1679,"path":27573,"seo":27574,"stem":27575,"__hash__":27576},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27271,"toc":27564},[27272,27275,27279,27289,27296,27303,27306,27313,27316,27319,27323,27335,27339,27385,27388,27391,27394,27397,27400,27404,27442,27448,27452,27506,27511,27514,27517,27522,27525,27530,27533,27536,27540,27543,27546,27550],[10,27273,27269],{"id":27274},"_1简介",[43,27276,27278],{"id":27277},"_11什么是-docker","1.1什么是 Docker？",[19,27280,27281,27282,27285,27286],{},"Docker 是一个开源的 ",[1890,27283,27284],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1890,27287,27288],{},"一次构建，到处运行。",[19,27290,27291,27292,27295],{},"“ ",[1890,27293,27294],{},"一次构建，到处运行"," ”也就是说：",[48,27297,27298],{},[51,27299,27300],{},[1890,27301,27302],{},"之前：",[19,27304,27305],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[48,27307,27308],{},[51,27309,27310],{},[1890,27311,27312],{},"使用docker后：",[19,27314,27315],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27317,27318],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[43,27320,27322],{"id":27321},"_12它是怎么工作的","1.2.它是怎么工作的？",[168,27324,27325,27328],{},[51,27326,27327],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[51,27329,27330,27331,27334],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1890,27332,27333],{},"无论在哪运行都一样稳定"," 。",[43,27336,27338],{"id":27337},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[120,27340,27341,27351],{},[123,27342,27343],{},[126,27344,27345,27348],{},[129,27346,27347],{"align":131},"概念",[129,27349,27350],{"align":131},"解释",[137,27352,27353,27361,27369,27377],{},[126,27354,27355,27358],{},[142,27356,27357],{"align":131},"镜像",[142,27359,27360],{"align":131},"Image，运行容器的模板，像是一个应用快照",[126,27362,27363,27366],{},[142,27364,27365],{"align":131},"容器",[142,27367,27368],{"align":131},"Container，运行中的镜像实例，有自己的文件系统、网络等",[126,27370,27371,27374],{},[142,27372,27373],{"align":131},"Dockerfile",[142,27375,27376],{"align":131},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[126,27378,27379,27382],{},[142,27380,27381],{"align":131},"仓库",[142,27383,27384],{"align":131},"Registry，存放镜像的地方，比如 Docker Hub",[19,27386,27387],{},"抽象化理解:",[19,27389,27390],{},"Docker镜像≈C++类",[19,27392,27393],{},"Docker容器≈C++类实例(即对象)",[19,27395,27396],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27398,27399],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[43,27401,27403],{"id":27402},"_14类比理解","1.4.类比理解",[120,27405,27406,27416],{},[123,27407,27408],{},[126,27409,27410,27413],{},[129,27411,27412],{"align":131},"传统部署",[129,27414,27415],{"align":131},"Docker部署",[137,27417,27418,27426,27434],{},[126,27419,27420,27423],{},[142,27421,27422],{"align":131},"手动安装依赖、调试版本不一致问题",[142,27424,27425],{"align":131},"一次打包环境和代码",[126,27427,27428,27431],{},[142,27429,27430],{"align":131},"程序“裸奔”跑在系统上",[142,27432,27433],{"align":131},"程序“穿着容器”隔离运行",[126,27435,27436,27439],{},[142,27437,27438],{"align":131},"容易“在我电脑上能跑”",[142,27440,27441],{"align":131},"保证“无论在哪都能跑”",[19,27443,27444,27445],{},"就像快递包裹： ",[1890,27446,27447],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[43,27449,27451],{"id":27450},"_15docker-的核心优势","1.5.Docker 的核心优势",[120,27453,27454,27464],{},[123,27455,27456],{},[126,27457,27458,27461],{},[129,27459,27460],{"align":131},"优势",[129,27462,27463],{"align":131},"说明",[137,27465,27466,27474,27482,27490,27498],{},[126,27467,27468,27471],{},[142,27469,27470],{"align":131},"轻量级",[142,27472,27473],{"align":131},"基于系统内核共享，启动速度快，占资源少",[126,27475,27476,27479],{},[142,27477,27478],{"align":131},"跨平台",[142,27480,27481],{"align":131},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[126,27483,27484,27487],{},[142,27485,27486],{"align":131},"易于迁移部署",[142,27488,27489],{"align":131},"应用和环境一起封装，不怕依赖不一致",[126,27491,27492,27495],{},[142,27493,27494],{"align":131},"易于版本控制",[142,27496,27497],{"align":131},"镜像版本可控，支持回滚",[126,27499,27500,27503],{},[142,27501,27502],{"align":131},"生态丰富",[142,27504,27505],{"align":131},"Docker Hub 上有成千上万的现成镜像可用",[48,27507,27508],{},[51,27509,27510],{},"在Linux上可以几乎实现无性能损失。",[19,27512,27513],{},"docker里的发行版和本机共用Linux内核。",[19,27515,27516],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[48,27518,27519],{},[51,27520,27521],{},"可以快速部署在绝大多数Linux发行版",[19,27523,27524],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[48,27526,27527],{},[51,27528,27529],{},"配置环境简单",[19,27531,27532],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27534,27535],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[48,27537,27538],{},[51,27539,27502],{},[19,27541,27542],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27544,27545],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[43,27547,27549],{"id":27548},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[168,27551,27552,27555,27558,27561],{},[51,27553,27554],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[51,27556,27557],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[51,27559,27560],{},"微服务架构：每个服务一个容器，灵活组合",[51,27562,27563],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":63,"searchDepth":78,"depth":78,"links":27565},[27566,27567,27568,27569,27570,27571],{"id":27277,"depth":89,"text":27278},{"id":27321,"depth":89,"text":27322},{"id":27337,"depth":89,"text":27338},{"id":27402,"depth":89,"text":27403},{"id":27450,"depth":89,"text":27451},{"id":27548,"depth":89,"text":27549},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27269,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27578,"title":27579,"body":27580,"description":63,"extension":1677,"meta":28313,"navigation":1679,"path":28314,"seo":28315,"stem":28316,"__hash__":28317},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27581,"toc":28308},[27582,27585,27589,27592,27595,27601,27607,27611,27620,27623,27680,27683,27734,27737,27820,27823,27860,27864,27875,27888,27895,27898,27978,27981,28031,28034,28057,28061,28068,28071,28087,28093,28096,28112,28118,28121,28137,28151,28157,28177,28183,28186,28198,28204,28207,28221,28227,28230,28250,28255,28258,28261,28265,28268,28271,28274,28281,28284,28287,28290,28295,28300,28305],[10,27583,27579],{"id":27584},"_2安装docker",[43,27586,27588],{"id":27587},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27590,27591],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27593,27594],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27596,27597],{},[1974,27598,27599],{"href":27599,"rel":27600},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25459],[19,27602,27603],{},[1974,27604,27605],{"href":27605,"rel":27606},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25459],[23593,27608,27610],{"id":27609},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27612,27613,27614,27619],{},"以下内容根据 ",[1974,27615,27618],{"href":27616,"rel":27617},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25459],"官方文档"," 修改而来。",[19,27621,27622],{},"如果你过去安装过 docker，先删掉：",[58,27624,27626],{"className":25416,"code":27625,"language":25418,"meta":63,"style":63},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[65,27627,27628],{"__ignoreMap":63},[68,27629,27630,27632,27635,27638,27641,27644,27647,27650,27653,27656,27659,27662,27665,27668,27671,27674,27677],{"class":70,"line":71},[68,27631,4624],{"class":102},[68,27633,27634],{"class":85}," pkg ",[68,27636,27637],{"class":102},"in",[68,27639,27640],{"class":872}," docker.io",[68,27642,27643],{"class":872}," docker-doc",[68,27645,27646],{"class":872}," docker-compose",[68,27648,27649],{"class":872}," docker-compose-v2",[68,27651,27652],{"class":872}," podman-docker",[68,27654,27655],{"class":872}," containerd",[68,27657,27658],{"class":872}," runc",[68,27660,27661],{"class":85},"; ",[68,27663,27664],{"class":102},"do",[68,27666,27667],{"class":587}," sudo",[68,27669,27670],{"class":872}," apt-get",[68,27672,27673],{"class":872}," remove",[68,27675,27676],{"class":85}," $pkg; ",[68,27678,27679],{"class":102},"done\n",[19,27681,27682],{},"首先安装依赖和GPG：",[58,27684,27688],{"className":27685,"code":27686,"language":27687,"meta":63,"style":63},"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",[65,27689,27690,27695,27700,27705,27710,27715,27720,27724,27729],{"__ignoreMap":63},[68,27691,27692],{"class":70,"line":71},[68,27693,27694],{},"# Add Docker's official GPG key:\n",[68,27696,27697],{"class":70,"line":78},[68,27698,27699],{},"sudo apt-get update\n",[68,27701,27702],{"class":70,"line":89},[68,27703,27704],{},"sudo apt-get install ca-certificates curl\n",[68,27706,27707],{"class":70,"line":115},[68,27708,27709],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[68,27711,27712],{"class":70,"line":280},[68,27713,27714],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[68,27716,27717],{"class":70,"line":301},[68,27718,27719],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[68,27721,27722],{"class":70,"line":320},[68,27723,4000],{"emptyLinePlaceholder":1679},[68,27725,27726],{"class":70,"line":2915},[68,27727,27728],{},"# 如果上面这行报错就弄下面这行\n",[68,27730,27731],{"class":70,"line":2921},[68,27732,27733],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27735,27736],{},"信任 Docker 的 GPG 公钥并添加仓库：",[58,27738,27740],{"className":25416,"code":27739,"language":25418,"meta":63,"style":63},"# 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",[65,27741,27742,27747,27753,27770,27803],{"__ignoreMap":63},[68,27743,27744],{"class":70,"line":71},[68,27745,27746],{"class":74},"# Add the repository to Apt sources:\n",[68,27748,27749,27751],{"class":70,"line":78},[68,27750,26719],{"class":92},[68,27752,26273],{"class":92},[68,27754,27755,27758,27761,27764,27767],{"class":70,"line":89},[68,27756,27757],{"class":872},"  \"deb [arch=$(",[68,27759,27760],{"class":587},"dpkg",[68,27762,27763],{"class":92}," --print-architecture",[68,27765,27766],{"class":872},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[68,27768,27769],{"class":92},"\\\n",[68,27771,27772,27775,27777,27779,27782,27785,27787,27789,27792,27794,27796,27799,27801],{"class":70,"line":115},[68,27773,27774],{"class":872},"  \"",[68,27776,26694],{"class":85},[68,27778,2294],{"class":92},[68,27780,27781],{"class":872}," \u002Fetc\u002Fos-release",[68,27783,27784],{"class":85}," && ",[68,27786,26719],{"class":92},[68,27788,11322],{"class":872},[68,27790,27791],{"class":85},"$VERSION_CODENAME",[68,27793,1987],{"class":872},[68,27795,2165],{"class":85},[68,27797,27798],{"class":872},"\" stable\"",[68,27800,26704],{"class":102},[68,27802,26273],{"class":92},[68,27804,27805,27808,27811,27814,27817],{"class":70,"line":280},[68,27806,27807],{"class":587},"  sudo",[68,27809,27810],{"class":872}," tee",[68,27812,27813],{"class":872}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[68,27815,27816],{"class":102}," >",[68,27818,27819],{"class":872}," \u002Fdev\u002Fnull\n",[19,27821,27822],{},"最后安装",[58,27824,27826],{"className":25416,"code":27825,"language":25418,"meta":63,"style":63},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[65,27827,27828,27837],{"__ignoreMap":63},[68,27829,27830,27832,27834],{"class":70,"line":71},[68,27831,26171],{"class":587},[68,27833,27670],{"class":872},[68,27835,27836],{"class":872}," update\n",[68,27838,27839,27841,27843,27845,27848,27851,27854,27857],{"class":70,"line":78},[68,27840,26171],{"class":587},[68,27842,27670],{"class":872},[68,27844,25428],{"class":872},[68,27846,27847],{"class":872}," docker-ce",[68,27849,27850],{"class":872}," docker-ce-cli",[68,27852,27853],{"class":872}," containerd.io",[68,27855,27856],{"class":872}," docker-buildx-plugin",[68,27858,27859],{"class":872}," docker-compose-plugin\n",[23593,27861,27863],{"id":27862},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27865,27866,27867,27870,27871,27874],{},"查看自己自己包管理工具版本（dnf是 ",[1890,27868,27869],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1890,27872,27873],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[58,27876,27878],{"className":25416,"code":27877,"language":25418,"meta":63,"style":63},"dnf --version\n",[65,27879,27880],{"__ignoreMap":63},[68,27881,27882,27885],{"class":70,"line":71},[68,27883,27884],{"class":587},"dnf",[68,27886,27887],{"class":92}," --version\n",[19,27889,27613,27890,27894],{},[1974,27891,27618],{"href":27892,"rel":27893},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25459]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27896,27897],{},"如果你之前安装过 docker，请先删掉",[58,27899,27901],{"className":25416,"code":27900,"language":25418,"meta":63,"style":63},"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",[65,27902,27903,27917,27924,27931,27938,27945,27952,27959,27966,27973],{"__ignoreMap":63},[68,27904,27905,27907,27910,27912,27915],{"class":70,"line":71},[68,27906,26171],{"class":587},[68,27908,27909],{"class":872}," dnf",[68,27911,27673],{"class":872},[68,27913,27914],{"class":872}," docker",[68,27916,26273],{"class":92},[68,27918,27919,27922],{"class":70,"line":78},[68,27920,27921],{"class":872},"                  docker-client",[68,27923,26273],{"class":92},[68,27925,27926,27929],{"class":70,"line":89},[68,27927,27928],{"class":872},"                  docker-client-latest",[68,27930,26273],{"class":92},[68,27932,27933,27936],{"class":70,"line":115},[68,27934,27935],{"class":872},"                  docker-common",[68,27937,26273],{"class":92},[68,27939,27940,27943],{"class":70,"line":280},[68,27941,27942],{"class":872},"                  docker-latest",[68,27944,26273],{"class":92},[68,27946,27947,27950],{"class":70,"line":301},[68,27948,27949],{"class":872},"                  docker-latest-logrotate",[68,27951,26273],{"class":92},[68,27953,27954,27957],{"class":70,"line":320},[68,27955,27956],{"class":872},"                  docker-logrotate",[68,27958,26273],{"class":92},[68,27960,27961,27964],{"class":70,"line":2915},[68,27962,27963],{"class":872},"                  docker-selinux",[68,27965,26273],{"class":92},[68,27967,27968,27971],{"class":70,"line":2921},[68,27969,27970],{"class":872},"                  docker-engine-selinux",[68,27972,26273],{"class":92},[68,27974,27975],{"class":70,"line":2933},[68,27976,27977],{"class":872},"                  docker-engine\n",[19,27979,27980],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[58,27982,27984],{"className":25416,"code":27983,"language":25418,"meta":63,"style":63},"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",[65,27985,27986,28000,28015],{"__ignoreMap":63},[68,27987,27988,27990,27992,27995,27997],{"class":70,"line":71},[68,27989,26171],{"class":587},[68,27991,27909],{"class":872},[68,27993,27994],{"class":92}," -y",[68,27996,25428],{"class":872},[68,27998,27999],{"class":872}," dnf-plugins-core\n",[68,28001,28002,28004,28006,28009,28012],{"class":70,"line":78},[68,28003,26171],{"class":587},[68,28005,27909],{"class":872},[68,28007,28008],{"class":872}," config-manager",[68,28010,28011],{"class":872}," addrepo",[68,28013,28014],{"class":92}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[68,28016,28017,28019,28022,28025,28028],{"class":70,"line":89},[68,28018,26171],{"class":587},[68,28020,28021],{"class":872}," sed",[68,28023,28024],{"class":92}," -i",[68,28026,28027],{"class":872}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[68,28029,28030],{"class":872}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28032,28033],{},"最后安装：",[58,28035,28037],{"className":25416,"code":28036,"language":25418,"meta":63,"style":63},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[65,28038,28039],{"__ignoreMap":63},[68,28040,28041,28043,28045,28047,28049,28051,28053,28055],{"class":70,"line":71},[68,28042,26171],{"class":587},[68,28044,27909],{"class":872},[68,28046,25428],{"class":872},[68,28048,27847],{"class":872},[68,28050,27850],{"class":872},[68,28052,27853],{"class":872},[68,28054,27856],{"class":872},[68,28056,27859],{"class":872},[43,28058,28060],{"id":28059},"_22配置环境","2.2.配置环境",[23593,28062,28064,28067],{"id":28063},"_221检查-docker-服务状态",[1890,28065,28066],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28069,28070],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[58,28072,28074],{"className":25416,"code":28073,"language":25418,"meta":63,"style":63},"systemctl status docker\n",[65,28075,28076],{"__ignoreMap":63},[68,28077,28078,28081,28084],{"class":70,"line":71},[68,28079,28080],{"class":587},"systemctl",[68,28082,28083],{"class":872}," status",[68,28085,28086],{"class":872}," docker\n",[23593,28088,28090,28067],{"id":28089},"_222启动-docker-服务",[1890,28091,28092],{},"2.2.2.启动 Docker 服务",[19,28094,28095],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[58,28097,28099],{"className":25416,"code":28098,"language":25418,"meta":63,"style":63},"sudo systemctl start docker\n",[65,28100,28101],{"__ignoreMap":63},[68,28102,28103,28105,28108,28110],{"class":70,"line":71},[68,28104,26171],{"class":587},[68,28106,28107],{"class":872}," systemctl",[68,28109,5783],{"class":872},[68,28111,28086],{"class":872},[23593,28113,28115,28067],{"id":28114},"_223设置-docker-开机自启",[1890,28116,28117],{},"2.2.3.设置 Docker 开机自启",[19,28119,28120],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[58,28122,28124],{"className":25416,"code":28123,"language":25418,"meta":63,"style":63},"sudo systemctl enable docker\n",[65,28125,28126],{"__ignoreMap":63},[68,28127,28128,28130,28132,28135],{"class":70,"line":71},[68,28129,26171],{"class":587},[68,28131,28107],{"class":872},[68,28133,28134],{"class":872}," enable",[68,28136,28086],{"class":872},[23593,28138,28140,15392,28143,15392,28148,28067],{"id":28139},"_224将用户添加到-docker-组",[1890,28141,28142],{},"2.2.4.将用户添加到",[1890,28144,28145],{},[65,28146,28147],{},"docker",[1890,28149,28150],{},"组",[19,28152,28153,28154,28156],{},"使用以下命令将当前用户添加到 ",[65,28155,28147],{}," 组：",[58,28158,28160],{"className":25416,"code":28159,"language":25418,"meta":63,"style":63},"sudo usermod -aG docker $USER\n",[65,28161,28162],{"__ignoreMap":63},[68,28163,28164,28166,28169,28172,28174],{"class":70,"line":71},[68,28165,26171],{"class":587},[68,28167,28168],{"class":872}," usermod",[68,28170,28171],{"class":92}," -aG",[68,28173,27914],{"class":872},[68,28175,28176],{"class":85}," $USER\n",[23593,28178,28180,28067],{"id":28179},"_225退出并重新登录",[1890,28181,28182],{},"2.2.5.退出并重新登录",[19,28184,28185],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[58,28187,28189],{"className":25416,"code":28188,"language":25418,"meta":63,"style":63},"newgrp docker\n",[65,28190,28191],{"__ignoreMap":63},[68,28192,28193,28196],{"class":70,"line":71},[68,28194,28195],{"class":587},"newgrp",[68,28197,28086],{"class":872},[23593,28199,28201,28067],{"id":28200},"_226重新启动-docker-服务如果需要",[1890,28202,28203],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28205,28206],{},"确保 Docker 服务正在运行，可以使用以下命令：",[58,28208,28209],{"className":25416,"code":28098,"language":25418,"meta":63,"style":63},[65,28210,28211],{"__ignoreMap":63},[68,28212,28213,28215,28217,28219],{"class":70,"line":71},[68,28214,26171],{"class":587},[68,28216,28107],{"class":872},[68,28218,5783],{"class":872},[68,28220,28086],{"class":872},[23593,28222,28224,28067],{"id":28223},"_227重启电脑后检查-docker-服务状态",[1890,28225,28226],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28228,28229],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[58,28231,28233],{"className":25416,"code":28232,"language":25418,"meta":63,"style":63},"sudo reboot\nsystemctl status docker\n",[65,28234,28235,28242],{"__ignoreMap":63},[68,28236,28237,28239],{"class":70,"line":71},[68,28238,26171],{"class":587},[68,28240,28241],{"class":872}," reboot\n",[68,28243,28244,28246,28248],{"class":70,"line":78},[68,28245,28080],{"class":587},[68,28247,28083],{"class":872},[68,28249,28086],{"class":872},[19,28251,28252],{},[38,28253],{"alt":63,"src":28254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28256,28257],{},"第三行显示enabled说明开机自启动成功",[19,28259,28260],{},"按q退出",[43,28262,28264],{"id":28263},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28266,28267],{},"优先使用linux来使用docker是比较好的",[19,28269,28270],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28272,28273],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28275,28276,28277],{},"官方下载安装:",[1974,28278,28279],{"href":28279,"rel":28280},"https:\u002F\u002Fwww.docker.com\u002F",[25459],[19,28282,28283],{},"Windows的Docker显卡直通与USB直通:",[19,28285,28286],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28288,28289],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28291,28292],{},[38,28293],{"alt":63,"src":28294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28296,28297],{},[38,28298],{"alt":63,"src":28299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28301,28302],{},[38,28303],{"alt":63,"src":28304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1652,28306,28307],{},"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":63,"searchDepth":78,"depth":78,"links":28309},[28310,28311,28312],{"id":27587,"depth":89,"text":27588},{"id":28059,"depth":89,"text":28060},{"id":28263,"depth":89,"text":28264},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27579,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28319,"title":28320,"body":28321,"description":28328,"extension":1677,"meta":29021,"navigation":1679,"path":29022,"seo":29023,"stem":29024,"__hash__":29025},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28322,"toc":29015},[28323,28326,28329,28333,28338,28343,28346,28374,28379,28388,28391,28396,28400,28407,28412,28418,28422,28425,28429,28434,28526,28531,28549,28554,28575,28580,28596,28600,28605,28634,28639,28685,28690,28734,28742,28759,28764,28780,28785,28799,28802,28805,28808,28811,28840,28843,28848,28852,28855,28858,28864,28867,28870,28873,28935,28942,28947,28950,28968,28972,28975,28992,28995,28998,29012],[10,28324,28320],{"id":28325},"_3docker直通",[19,28327,28328],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[43,28330,28332],{"id":28331},"_31usb直通","3.1.USB直通",[19,28334,28335],{},[38,28336],{"alt":63,"src":28337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[48,28339,28340],{},[51,28341,28342],{},"方法一(不是很推荐新手)：",[19,28344,28345],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[58,28347,28349],{"className":25416,"code":28348,"language":25418,"meta":63,"style":63},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[65,28350,28351,28359,28364],{"__ignoreMap":63},[68,28352,28353,28356],{"class":70,"line":71},[68,28354,28355],{"class":587},"ls",[68,28357,28358],{"class":872}," \u002Fdev\n",[68,28360,28361],{"class":70,"line":78},[68,28362,28363],{"class":74},"#例如\n",[68,28365,28366,28369,28371],{"class":70,"line":89},[68,28367,28368],{"class":85},"--device",[68,28370,869],{"class":102},[68,28372,28373],{"class":872},"\u002Fdev\u002Ftty_USB0\n",[48,28375,28376],{"start":78},[51,28377,28378],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[58,28380,28382],{"className":25416,"code":28381,"language":25418,"meta":63,"style":63},"--privileged\n",[65,28383,28384],{"__ignoreMap":63},[68,28385,28386],{"class":70,"line":71},[68,28387,28381],{"class":587},[19,28389,28390],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28392,28393],{},[38,28394],{"alt":63,"src":28395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[43,28397,28399],{"id":28398},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28401,28402,28403,28406],{},"NVIDIA Container Toolkit使用户 ",[1890,28404,28405],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28408,28409],{},[38,28410],{"alt":63,"src":28411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28413,28414],{},[1974,28415,28416],{"href":28416,"rel":28417},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25459],[23593,28419,28421],{"id":28420},"_321安装","3.2.1.安装",[19,28423,28424],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24505,28426,28428],{"id":28427},"_3211ubuntu","3.2.1.1.Ubuntu",[48,28430,28431],{},[51,28432,28433],{},"配置存储库 并更新",[58,28435,28437],{"className":25416,"code":28436,"language":25418,"meta":63,"style":63},"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",[65,28438,28439,28468,28488,28500,28512,28518],{"__ignoreMap":63},[68,28440,28441,28444,28447,28450,28452,28454,28457,28460,28463,28466],{"class":70,"line":71},[68,28442,28443],{"class":587},"curl",[68,28445,28446],{"class":92}," -fsSL",[68,28448,28449],{"class":872}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[68,28451,26704],{"class":102},[68,28453,27667],{"class":587},[68,28455,28456],{"class":872}," gpg",[68,28458,28459],{"class":92}," --dearmor",[68,28461,28462],{"class":92}," -o",[68,28464,28465],{"class":872}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[68,28467,26273],{"class":92},[68,28469,28470,28473,28475,28478,28481,28484,28486],{"class":70,"line":78},[68,28471,28472],{"class":85},"  && ",[68,28474,28443],{"class":587},[68,28476,28477],{"class":92}," -s",[68,28479,28480],{"class":92}," -L",[68,28482,28483],{"class":872}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[68,28485,26704],{"class":102},[68,28487,26273],{"class":92},[68,28489,28490,28493,28496,28498],{"class":70,"line":89},[68,28491,28492],{"class":587},"    sed",[68,28494,28495],{"class":872}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[68,28497,26704],{"class":102},[68,28499,26273],{"class":92},[68,28501,28502,28505,28507,28510],{"class":70,"line":115},[68,28503,28504],{"class":587},"    sudo",[68,28506,27810],{"class":872},[68,28508,28509],{"class":872}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[68,28511,26273],{"class":92},[68,28513,28514,28516],{"class":70,"line":280},[68,28515,28472],{"class":85},[68,28517,27769],{"class":92},[68,28519,28520,28522,28524],{"class":70,"line":301},[68,28521,28504],{"class":587},[68,28523,27670],{"class":872},[68,28525,27836],{"class":872},[48,28527,28528],{"start":78},[51,28529,28530],{},"安装nvidia-docker2",[58,28532,28534],{"className":25416,"code":28533,"language":25418,"meta":63,"style":63},"sudo apt-get install -y nvidia-docker2\n",[65,28535,28536],{"__ignoreMap":63},[68,28537,28538,28540,28542,28544,28546],{"class":70,"line":71},[68,28539,26171],{"class":587},[68,28541,27670],{"class":872},[68,28543,25428],{"class":872},[68,28545,27994],{"class":92},[68,28547,28548],{"class":872}," nvidia-docker2\n",[48,28550,28551],{"start":89},[51,28552,28553],{},"使用nvidia-ctk命令配置container runtime",[58,28555,28557],{"className":25416,"code":28556,"language":25418,"meta":63,"style":63},"sudo nvidia-ctk runtime configure --runtime=docker\n",[65,28558,28559],{"__ignoreMap":63},[68,28560,28561,28563,28566,28569,28572],{"class":70,"line":71},[68,28562,26171],{"class":587},[68,28564,28565],{"class":872}," nvidia-ctk",[68,28567,28568],{"class":872}," runtime",[68,28570,28571],{"class":872}," configure",[68,28573,28574],{"class":92}," --runtime=docker\n",[48,28576,28577],{"start":115},[51,28578,28579],{},"重启docker服务:",[58,28581,28583],{"className":25416,"code":28582,"language":25418,"meta":63,"style":63},"sudo systemctl restart docker\n",[65,28584,28585],{"__ignoreMap":63},[68,28586,28587,28589,28591,28594],{"class":70,"line":71},[68,28588,26171],{"class":587},[68,28590,28107],{"class":872},[68,28592,28593],{"class":872}," restart",[68,28595,28086],{"class":872},[24505,28597,28599],{"id":28598},"_3212fedora","3.2.1.2.Fedora",[48,28601,28602],{},[51,28603,28604],{},"配置存储库",[58,28606,28608],{"className":25416,"code":28607,"language":25418,"meta":63,"style":63},"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",[65,28609,28610,28625],{"__ignoreMap":63},[68,28611,28612,28614,28616,28618,28621,28623],{"class":70,"line":71},[68,28613,28443],{"class":587},[68,28615,28477],{"class":92},[68,28617,28480],{"class":92},[68,28619,28620],{"class":872}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[68,28622,26704],{"class":102},[68,28624,26273],{"class":92},[68,28626,28627,28629,28631],{"class":70,"line":78},[68,28628,26171],{"class":587},[68,28630,27810],{"class":872},[68,28632,28633],{"class":872}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[48,28635,28636],{"start":78},[51,28637,28638],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[58,28640,28642],{"className":25416,"code":28641,"language":25418,"meta":63,"style":63},"# 如果是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",[65,28643,28644,28649,28663,28667,28672],{"__ignoreMap":63},[68,28645,28646],{"class":70,"line":71},[68,28647,28648],{"class":74},"# 如果是RHEL或者Rocky（DNF4）\n",[68,28650,28651,28653,28655,28657,28660],{"class":70,"line":78},[68,28652,26171],{"class":587},[68,28654,27909],{"class":872},[68,28656,28008],{"class":872},[68,28658,28659],{"class":92}," --add-repo",[68,28661,28662],{"class":872}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[68,28664,28665],{"class":70,"line":89},[68,28666,4000],{"emptyLinePlaceholder":1679},[68,28668,28669],{"class":70,"line":115},[68,28670,28671],{"class":74},"# 如果是Feodra41+（DNF5）\n",[68,28673,28674,28676,28678,28680,28682],{"class":70,"line":280},[68,28675,26171],{"class":587},[68,28677,27909],{"class":872},[68,28679,28008],{"class":872},[68,28681,28011],{"class":872},[68,28683,28684],{"class":92}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[48,28686,28687],{"start":89},[51,28688,28689],{},"安装NVIDIA Container Toolki包",[58,28691,28693],{"className":25416,"code":28692,"language":25418,"meta":63,"style":63},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[65,28694,28695,28700,28713,28717,28722],{"__ignoreMap":63},[68,28696,28697],{"class":70,"line":71},[68,28698,28699],{"class":74},"# 如果是RHEL或者Rocky\n",[68,28701,28702,28704,28706,28708,28710],{"class":70,"line":78},[68,28703,26171],{"class":587},[68,28705,27909],{"class":872},[68,28707,25428],{"class":872},[68,28709,27994],{"class":92},[68,28711,28712],{"class":872}," nvidia-container-toolkit\n",[68,28714,28715],{"class":70,"line":89},[68,28716,4000],{"emptyLinePlaceholder":1679},[68,28718,28719],{"class":70,"line":115},[68,28720,28721],{"class":74},"# 如果是Fedora\n",[68,28723,28724,28726,28728,28730,28732],{"class":70,"line":280},[68,28725,26171],{"class":587},[68,28727,27909],{"class":872},[68,28729,25428],{"class":872},[68,28731,27994],{"class":92},[68,28733,28712],{"class":872},[48,28735,28736],{"start":115},[51,28737,28738,28739,28741],{},"安装nvidia-docker2 ： 在Fedora上使用",[65,28740,27884],{},"进行安装",[58,28743,28745],{"className":25416,"code":28744,"language":25418,"meta":63,"style":63},"sudo dnf install -y nvidia-docker2\n",[65,28746,28747],{"__ignoreMap":63},[68,28748,28749,28751,28753,28755,28757],{"class":70,"line":71},[68,28750,26171],{"class":587},[68,28752,27909],{"class":872},[68,28754,25428],{"class":872},[68,28756,27994],{"class":92},[68,28758,28548],{"class":872},[48,28760,28761],{"start":280},[51,28762,28763],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[58,28765,28766],{"className":25416,"code":28556,"language":25418,"meta":63,"style":63},[65,28767,28768],{"__ignoreMap":63},[68,28769,28770,28772,28774,28776,28778],{"class":70,"line":71},[68,28771,26171],{"class":587},[68,28773,28565],{"class":872},[68,28775,28568],{"class":872},[68,28777,28571],{"class":872},[68,28779,28574],{"class":92},[48,28781,28782],{"start":301},[51,28783,28784],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[58,28786,28787],{"className":25416,"code":28582,"language":25418,"meta":63,"style":63},[65,28788,28789],{"__ignoreMap":63},[68,28790,28791,28793,28795,28797],{"class":70,"line":71},[68,28792,26171],{"class":587},[68,28794,28107],{"class":872},[68,28796,28593],{"class":872},[68,28798,28086],{"class":872},[19,28800,28801],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28803,28804],{},"方法：",[19,28806,28807],{},"1️⃣nvidia-smi",[19,28809,28810],{},"2️⃣运行nvidia cuda 容器进行测试",[58,28812,28814],{"className":25416,"code":28813,"language":25418,"meta":63,"style":63},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[65,28815,28816],{"__ignoreMap":63},[68,28817,28818,28820,28822,28825,28828,28831,28834,28837],{"class":70,"line":71},[68,28819,26171],{"class":587},[68,28821,27914],{"class":872},[68,28823,28824],{"class":872}," run",[68,28826,28827],{"class":92}," --rm",[68,28829,28830],{"class":92}," --gpus",[68,28832,28833],{"class":872}," all",[68,28835,28836],{"class":872}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[68,28838,28839],{"class":872}," nvidia-smi\n",[19,28841,28842],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28844,28845],{},[38,28846],{"alt":63,"src":28847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[43,28849,28851],{"id":28850},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28853,28854],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28856,28857],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28859,28860],{},[1974,28861,28862],{"href":28862,"rel":28863},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25459],[19,28865,28866],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28868,28869],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28871,28872],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[120,28874,28875,28891],{},[123,28876,28877],{},[126,28878,28879,28882,28885,28888],{},[129,28880,28881],{"align":131},"镜像类型",[129,28883,28884],{"align":131},"适用场景",[129,28886,28887],{"align":131},"示例标签",[129,28889,28890],{"align":131},"大小",[137,28892,28893,28907,28921],{},[126,28894,28895,28898,28901,28904],{},[142,28896,28897],{"align":131},"base",[142,28899,28900],{"align":131},"仅需 CUDA 运行时库",[142,28902,28903],{"align":131},"12.4.0-base-ubuntu22.04",[142,28905,28906],{"align":131},"~240MB",[126,28908,28909,28912,28915,28918],{},[142,28910,28911],{"align":131},"runtime",[142,28913,28914],{"align":131},"部署编译后的应用（含数学库）",[142,28916,28917],{"align":131},"12.4.0-runtime-ubuntu22.04",[142,28919,28920],{"align":131},"~2GB",[126,28922,28923,28926,28929,28932],{},[142,28924,28925],{"align":131},"devel",[142,28927,28928],{"align":131},"开发环境（含编译工具）",[142,28930,28931],{"align":131},"12.4.0-devel-ubuntu22.04",[142,28933,28934],{"align":131},"~3GB",[19,28936,28937,28938,28941],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[65,28939,28940],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28943,28944],{},[38,28945],{"alt":63,"src":28946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28948,28949],{},"在dockerfile里就可以开头这么写：",[58,28951,28953],{"className":25416,"code":28952,"language":25418,"meta":63,"style":63},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[65,28954,28955,28960],{"__ignoreMap":63},[68,28956,28957],{"class":70,"line":71},[68,28958,28959],{"class":74},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[68,28961,28962,28965],{"class":70,"line":78},[68,28963,28964],{"class":587},"FROM",[68,28966,28967],{"class":872}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[43,28969,28971],{"id":28970},"_34配置以太网","3.4.配置以太网",[19,28973,28974],{},"指定网络模式",[58,28976,28978],{"className":25416,"code":28977,"language":25418,"meta":63,"style":63},"--net=host \\\n",[65,28979,28980],{"__ignoreMap":63},[68,28981,28982,28985,28987,28990],{"class":70,"line":71},[68,28983,28984],{"class":85},"--net",[68,28986,869],{"class":102},[68,28988,28989],{"class":872},"host",[68,28991,26273],{"class":587},[19,28993,28994],{},"启动参数里加上这行即可。具体在下方",[19,28996,28997],{},"--net选项：指定网络模式，该选项有以下参数可选：",[168,28999,29000,29003,29006,29009],{},[51,29001,29002],{},"--net=bridge:默认选项，表示连接到默认的网桥",[51,29004,29005],{},"--net=host:容器使用宿主机的网络",[51,29007,29008],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[51,29010,29011],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1652,29013,29014],{},"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":63,"searchDepth":78,"depth":78,"links":29016},[29017,29018,29019,29020],{"id":28331,"depth":89,"text":28332},{"id":28398,"depth":89,"text":28399},{"id":28850,"depth":89,"text":28851},{"id":28970,"depth":89,"text":28971},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28320,"description":28328},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29027,"title":29028,"body":29029,"description":29036,"extension":1677,"meta":29042,"navigation":1679,"path":29043,"seo":29044,"stem":29045,"__hash__":29046},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29030,"toc":29040},[29031,29034,29037],[10,29032,29028],{"id":29033},"_4dockerhub换源",[19,29035,29036],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29038,29039],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":63,"searchDepth":78,"depth":78,"links":29041},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29028,"description":29036},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29048,"title":29049,"body":29050,"description":63,"extension":1677,"meta":30061,"navigation":1679,"path":30062,"seo":30063,"stem":30064,"__hash__":30065},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29051,"toc":30056},[29052,29055,29059,29065,29069,29072,29411,29414,29417,29420,29425,29430,29433,29436,29439,29442,29461,29464,29475,29481,29663,29673,29689,29952,29954,29979,29994,30003,30053],[10,29053,29049],{"id":29054},"_5docker命令学习",[43,29056,29058],{"id":29057},"_51参考文档","5.1.参考文档",[19,29060,29061],{},[1974,29062,29063],{"href":29063,"rel":29064},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25459],[43,29066,29068],{"id":29067},"_52常用命令","5.2.常用命令",[19,29070,29071],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[120,29073,29074,29086],{},[123,29075,29076],{},[126,29077,29078,29081,29083],{},[129,29079,29080],{"align":131},"命令",[129,29082,1032],{"align":131},[129,29084,29085],{"align":131},"示例",[137,29087,29088,29099,29110,29121,29132,29143,29154,29165,29175,29186,29197,29208,29218,29229,29240,29251,29261,29271,29281,29291,29302,29313,29324,29335,29346,29357,29367,29378,29389,29400],{},[126,29089,29090,29093,29096],{},[142,29091,29092],{"align":131},"docker run",[142,29094,29095],{"align":131},"创建并启动一个新的容器。",[142,29097,29098],{"align":131},"docker run -it ubuntu bash",[126,29100,29101,29104,29107],{},[142,29102,29103],{"align":131},"docker build",[142,29105,29106],{"align":131},"通过指定的 Dockerfile 创建一个新的镜像。",[142,29108,29109],{"align":131},"docker build -t myimage .",[126,29111,29112,29115,29118],{},[142,29113,29114],{"align":131},"docker pull",[142,29116,29117],{"align":131},"从 Docker 仓库拉取镜像。",[142,29119,29120],{"align":131},"docker pull ubuntu",[126,29122,29123,29126,29129],{},[142,29124,29125],{"align":131},"docker push",[142,29127,29128],{"align":131},"将本地镜像推送到 Docker 仓库。",[142,29130,29131],{"align":131},"docker push myimage",[126,29133,29134,29137,29140],{},[142,29135,29136],{"align":131},"docker stop",[142,29138,29139],{"align":131},"停止一个正在运行的容器。",[142,29141,29142],{"align":131},"docker stop container_id",[126,29144,29145,29148,29151],{},[142,29146,29147],{"align":131},"docker start",[142,29149,29150],{"align":131},"启动一个已经存在的容器。",[142,29152,29153],{"align":131},"docker start container_id",[126,29155,29156,29159,29162],{},[142,29157,29158],{"align":131},"docker restart",[142,29160,29161],{"align":131},"重新启动容器。",[142,29163,29164],{"align":131},"docker restart container_id",[126,29166,29167,29170,29173],{},[142,29168,29169],{"align":131},"docker ps",[142,29171,29172],{"align":131},"列出当前正在运行的容器。",[142,29174,29169],{"align":131},[126,29176,29177,29180,29183],{},[142,29178,29179],{"align":131},"docker rm",[142,29181,29182],{"align":131},"删除一个或多个停止的容器。",[142,29184,29185],{"align":131},"docker rm container_id",[126,29187,29188,29191,29194],{},[142,29189,29190],{"align":131},"docker exec",[142,29192,29193],{"align":131},"在一个正在运行的容器中执行命令。",[142,29195,29196],{"align":131},"docker exec -it container_id bash",[126,29198,29199,29202,29205],{},[142,29200,29201],{"align":131},"docker logs",[142,29203,29204],{"align":131},"查看容器的日志输出。",[142,29206,29207],{"align":131},"docker logs container_id",[126,29209,29210,29213,29216],{},[142,29211,29212],{"align":131},"docker images",[142,29214,29215],{"align":131},"列出本地所有镜像。",[142,29217,29212],{"align":131},[126,29219,29220,29223,29226],{},[142,29221,29222],{"align":131},"docker rmi",[142,29224,29225],{"align":131},"删除一个或多个镜像。",[142,29227,29228],{"align":131},"docker rmi myimage",[126,29230,29231,29234,29237],{},[142,29232,29233],{"align":131},"docker network",[142,29235,29236],{"align":131},"管理 Docker 网络。",[142,29238,29239],{"align":131},"docker network ls",[126,29241,29242,29245,29248],{},[142,29243,29244],{"align":131},"docker volume",[142,29246,29247],{"align":131},"管理 Docker 数据卷。",[142,29249,29250],{"align":131},"docker volume ls",[126,29252,29253,29256,29259],{},[142,29254,29255],{"align":131},"docker-compose up",[142,29257,29258],{"align":131},"启动 docker-compose.yml 中定义的所有服务。",[142,29260,29255],{"align":131},[126,29262,29263,29266,29269],{},[142,29264,29265],{"align":131},"docker-compose down",[142,29267,29268],{"align":131},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[142,29270,29265],{"align":131},[126,29272,29273,29276,29279],{},[142,29274,29275],{"align":131},"docker info",[142,29277,29278],{"align":131},"显示 Docker 系统的详细信息。",[142,29280,29275],{"align":131},[126,29282,29283,29286,29289],{},[142,29284,29285],{"align":131},"docker stats",[142,29287,29288],{"align":131},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[142,29290,29285],{"align":131},[126,29292,29293,29296,29299],{},[142,29294,29295],{"align":131},"docker inspect",[142,29297,29298],{"align":131},"查看容器或镜像的详细信息（JSON 格式）。",[142,29300,29301],{"align":131},"docker inspect container_id",[126,29303,29304,29307,29310],{},[142,29305,29306],{"align":131},"docker save",[142,29308,29309],{"align":131},"将一个镜像保存为 tar 文件。",[142,29311,29312],{"align":131},"docker save -o myimage.tar myimage",[126,29314,29315,29318,29321],{},[142,29316,29317],{"align":131},"docker load",[142,29319,29320],{"align":131},"从 tar 文件中加载镜像。",[142,29322,29323],{"align":131},"docker load -i myimage.tar",[126,29325,29326,29329,29332],{},[142,29327,29328],{"align":131},"docker tag",[142,29330,29331],{"align":131},"为镜像添加标签（tag）。",[142,29333,29334],{"align":131},"docker tag myimage myimage:v1",[126,29336,29337,29340,29343],{},[142,29338,29339],{"align":131},"docker buildx build",[142,29341,29342],{"align":131},"使用 Buildx 构建多架构镜像。",[142,29344,29345],{"align":131},"docker buildx build -t myimage .",[126,29347,29348,29351,29354],{},[142,29349,29350],{"align":131},"docker buildx create",[142,29352,29353],{"align":131},"创建一个新的 Buildx 构建实例。",[142,29355,29356],{"align":131},"docker buildx create –use",[126,29358,29359,29362,29365],{},[142,29360,29361],{"align":131},"docker buildx ls",[142,29363,29364],{"align":131},"列出所有可用的 Buildx 构建实例。",[142,29366,29361],{"align":131},[126,29368,29369,29372,29375],{},[142,29370,29371],{"align":131},"docker buildx use",[142,29373,29374],{"align":131},"设置当前的 Buildx 构建实例。",[142,29376,29377],{"align":131},"docker buildx use mybuilder",[126,29379,29380,29383,29386],{},[142,29381,29382],{"align":131},"docker buildx bake",[142,29384,29385],{"align":131},"使用 Bake 文件批量构建镜像。",[142,29387,29388],{"align":131},"docker buildx bake -f bake.hcl",[126,29390,29391,29394,29397],{},[142,29392,29393],{"align":131},"docker buildx build –push",[142,29395,29396],{"align":131},"构建镜像并推送到镜像仓库。",[142,29398,29399],{"align":131},"docker buildx build –push -t myimage .",[126,29401,29402,29405,29408],{},[142,29403,29404],{"align":131},"docker buildx build –platform",[142,29406,29407],{"align":131},"构建镜像并为多个平台生成支持。",[142,29409,29410],{"align":131},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29412,29413],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29415,29416],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29418,29419],{},"docker images 可以查看已经下载的镜像",[19,29421,29422],{},[38,29423],{"alt":63,"src":29424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29426,29427],{},[1890,29428,29429],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29431,29432],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29434,29435],{},"docker container logs 查看容器日志",[19,29437,29438],{},"docker top 查看容器里的进程",[19,29440,29441],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[58,29443,29445],{"className":25416,"code":29444,"language":25418,"meta":63,"style":63},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[65,29446,29447],{"__ignoreMap":63},[68,29448,29449,29452,29455,29458],{"class":70,"line":71},[68,29450,29451],{"class":587},"如：docker",[68,29453,29454],{"class":872}," cp",[68,29456,29457],{"class":872}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[68,29459,29460],{"class":872}," \u002Fmydata\u002Fnginx\n",[19,29462,29463],{},"docker run时在启动容器的时候会有几个常用的选项：",[168,29465,29466,29469,29472],{},[51,29467,29468],{},"-d选项：表示后台运行",[51,29470,29471],{},"-P选项：随机端口映射",[51,29473,29474],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[43,29476,29478],{"id":29477},"_53run命令的参数非常重要",[1890,29479,29480],{},"5.3.run命令的参数（非常重要）",[120,29482,29483,29496],{},[123,29484,29485],{},[126,29486,29487,29490,29493],{},[129,29488,29489],{"align":131},"参数\u002F配置",[129,29491,29492],{"align":131},"功能说明",[129,29494,29495],{"align":131},"重要性与参考依据",[137,29497,29498,29509,29520,29531,29542,29553,29564,29575,29586,29597,29608,29619,29630,29641,29652],{},[126,29499,29500,29503,29506],{},[142,29501,29502],{"align":131},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[142,29504,29505],{"align":131},"指定容器名称，便于后续管理",[142,29507,29508],{"align":131},"替代随机生成的容器名。",[126,29510,29511,29514,29517],{},[142,29512,29513],{"align":131},"–gpus all",[142,29515,29516],{"align":131},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[142,29518,29519],{"align":131},"用于CUDA加速等GPU依赖任务。",[126,29521,29522,29525,29528],{},[142,29523,29524],{"align":131},"-e NVIDIA_DRIVER_CAPABILITIES=all",[142,29526,29527],{"align":131},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[142,29529,29530],{"align":131},"确保容器内GPU功能完整67。",[126,29532,29533,29536,29539],{},[142,29534,29535],{"align":131},"-dit",[142,29537,29538],{"align":131},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[142,29540,29541],{"align":131},"允许容器在后台运行并支持交互操作。",[126,29543,29544,29547,29550],{},[142,29545,29546],{"align":131},"–privileged",[142,29548,29549],{"align":131},"赋予容器完全主机权限（可访问设备、内核模块等）",[142,29551,29552],{"align":131},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[126,29554,29555,29558,29561],{},[142,29556,29557],{"align":131},"–net=host",[142,29559,29560],{"align":131},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[142,29562,29563],{"align":131},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[126,29565,29566,29569,29572],{},[142,29567,29568],{"align":131},"–group-add audio–group-add video–group-add dialout",[142,29570,29571],{"align":131},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[142,29573,29574],{"align":131},"避免权限问题（如避免无法调用摄像头、麦克风）。",[126,29576,29577,29580,29583],{},[142,29578,29579],{"align":131},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[142,29581,29582],{"align":131},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[142,29584,29585],{"align":131},"支持容器内运行图形界面应用（如OpenCV可视化）。",[126,29587,29588,29591,29594],{},[142,29589,29590],{"align":131},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[142,29592,29593],{"align":131},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[142,29595,29596],{"align":131},"实现容器内图形显示。",[126,29598,29599,29602,29605],{},[142,29600,29601],{"align":131},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[142,29603,29604],{"align":131},"挂载X11认证文件（只读）",[142,29606,29607],{"align":131},"确保容器有权连接宿主机显示服务。",[126,29609,29610,29613,29616],{},[142,29611,29612],{"align":131},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[142,29614,29615],{"align":131},"挂载Wayland显示协议相关目录",[142,29617,29618],{"align":131},"支持Wayland协议的图形显示。",[126,29620,29621,29624,29627],{},[142,29622,29623],{"align":131},"–ulimit nofile=1024:524288",[142,29625,29626],{"align":131},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[142,29628,29629],{"align":131},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[126,29631,29632,29635,29638],{},[142,29633,29634],{"align":131},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[142,29636,29637],{"align":131},"挂载宿主机用户目录到容器内同名路径",[142,29639,29640],{"align":131},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[126,29642,29643,29646,29649],{},[142,29644,29645],{"align":131},"-w \u002Fhome\u002Ftungchiahui",[142,29647,29648],{"align":131},"设置容器启动后的默认工作目录",[142,29650,29651],{"align":131},"直接进入项目路径，方便执行命令2324。",[126,29653,29654,29657,29660],{},[142,29655,29656],{"align":131},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[142,29658,29659],{"align":131},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[142,29661,29662],{"align":131},"提供预配置的深度学习与机器人开发环境。",[19,29664,29665,29666,29668,29669,29672],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[65,29667,26171],{},"加不加",[65,29670,29671],{},"sudo -E","都无所谓。",[19,29674,29675,29676,29678,29679,29681,29682,29685,29686,29688],{},"用户已经被加到docker组了，不用",[65,29677,26171],{},"也行跑，其次，",[65,29680,26171],{},"运行的话，你的",[65,29683,29684],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[65,29687,29684],{},"更不可能变了。",[58,29690,29692],{"className":25416,"code":29691,"language":25418,"meta":63,"style":63},"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",[65,29693,29694,29707,29717,29727,29739,29746,29753,29760,29770,29779,29788,29802,29814,29826,29835,29845,29854,29869,29902,29929,29940,29947],{"__ignoreMap":63},[68,29695,29696,29698,29700,29702,29705],{"class":70,"line":71},[68,29697,26171],{"class":587},[68,29699,27914],{"class":872},[68,29701,28824],{"class":872},[68,29703,29704],{"class":92}," --name=ros_opencv_cuda",[68,29706,26273],{"class":92},[68,29708,29709,29712,29715],{"class":70,"line":78},[68,29710,29711],{"class":85},"--gpus ",[68,29713,29714],{"class":872},"all",[68,29716,26273],{"class":92},[68,29718,29719,29722,29725],{"class":70,"line":89},[68,29720,29721],{"class":85},"-e ",[68,29723,29724],{"class":872},"NVIDIA_DRIVER_CAPABILITIES=all",[68,29726,26273],{"class":92},[68,29728,29729,29731,29734,29737],{"class":70,"line":115},[68,29730,29721],{"class":85},[68,29732,29733],{"class":872},"DISPLAY=",[68,29735,29736],{"class":85},"$DISPLAY ",[68,29738,27769],{"class":92},[68,29740,29741,29744],{"class":70,"line":280},[68,29742,29743],{"class":85},"-dit ",[68,29745,27769],{"class":92},[68,29747,29748,29751],{"class":70,"line":301},[68,29749,29750],{"class":85},"--privileged ",[68,29752,27769],{"class":92},[68,29754,29755,29758],{"class":70,"line":320},[68,29756,29757],{"class":85},"--net=host ",[68,29759,27769],{"class":92},[68,29761,29762,29765,29768],{"class":70,"line":2915},[68,29763,29764],{"class":85},"--group-add ",[68,29766,29767],{"class":872},"audio",[68,29769,26273],{"class":92},[68,29771,29772,29774,29777],{"class":70,"line":2921},[68,29773,29764],{"class":85},[68,29775,29776],{"class":872},"video",[68,29778,26273],{"class":92},[68,29780,29781,29783,29786],{"class":70,"line":2933},[68,29782,29764],{"class":85},[68,29784,29785],{"class":872},"dialout",[68,29787,26273],{"class":92},[68,29789,29790,29792,29795,29797,29800],{"class":70,"line":3214},[68,29791,29721],{"class":85},[68,29793,29794],{"class":872},"XAUTHORITY=",[68,29796,29684],{"class":85},[68,29798,29799],{"class":872},"\u002F.Xauthority",[68,29801,26273],{"class":92},[68,29803,29804,29806,29809,29812],{"class":70,"line":3219},[68,29805,29721],{"class":85},[68,29807,29808],{"class":872},"WAYLAND_DISPLAY=",[68,29810,29811],{"class":85},"$WAYLAND_DISPLAY ",[68,29813,27769],{"class":92},[68,29815,29816,29818,29821,29824],{"class":70,"line":3225},[68,29817,29721],{"class":85},[68,29819,29820],{"class":872},"XDG_RUNTIME_DIR=",[68,29822,29823],{"class":85},"$XDG_RUNTIME_DIR ",[68,29825,27769],{"class":92},[68,29827,29828,29830,29833],{"class":70,"line":3230},[68,29829,29721],{"class":85},[68,29831,29832],{"class":872},"QT_QPA_PLATFORM=xcb",[68,29834,26273],{"class":92},[68,29836,29837,29840,29843],{"class":70,"line":3244},[68,29838,29839],{"class":85},"-v ",[68,29841,29842],{"class":872},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[68,29844,26273],{"class":92},[68,29846,29847,29849,29852],{"class":70,"line":3249},[68,29848,29839],{"class":85},[68,29850,29851],{"class":872},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[68,29853,26273],{"class":92},[68,29855,29856,29859,29862,29864,29867],{"class":70,"line":3255},[68,29857,29858],{"class":85},"-v $HOME",[68,29860,29861],{"class":872},"\u002F.Xauthority:",[68,29863,29684],{"class":85},[68,29865,29866],{"class":872},"\u002F.Xauthority:ro",[68,29868,26273],{"class":92},[68,29870,29871,29873,29876,29878,29881,29884,29886,29889,29891,29893,29895,29897,29900],{"class":70,"line":3276},[68,29872,29839],{"class":85},[68,29874,29875],{"class":872},"\u002Frun\u002Fuser\u002F",[68,29877,26694],{"class":85},[68,29879,29880],{"class":587},"id",[68,29882,29883],{"class":92}," -u",[68,29885,2165],{"class":85},[68,29887,29888],{"class":872},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[68,29890,26694],{"class":85},[68,29892,29880],{"class":587},[68,29894,29883],{"class":92},[68,29896,2165],{"class":85},[68,29898,29899],{"class":872},"\u002Fwayland-0",[68,29901,26273],{"class":92},[68,29903,29904,29906,29908,29910,29912,29914,29916,29919,29921,29923,29925,29927],{"class":70,"line":3281},[68,29905,29839],{"class":85},[68,29907,29875],{"class":872},[68,29909,26694],{"class":85},[68,29911,29880],{"class":587},[68,29913,29883],{"class":92},[68,29915,2165],{"class":85},[68,29917,29918],{"class":872},":\u002Frun\u002Fuser\u002F",[68,29920,26694],{"class":85},[68,29922,29880],{"class":587},[68,29924,29883],{"class":92},[68,29926,15311],{"class":85},[68,29928,27769],{"class":92},[68,29930,29931,29933,29935,29938],{"class":70,"line":3295},[68,29932,29858],{"class":85},[68,29934,2595],{"class":872},[68,29936,29937],{"class":85},"$HOME ",[68,29939,27769],{"class":92},[68,29941,29942,29945],{"class":70,"line":3300},[68,29943,29944],{"class":85},"-w $HOME ",[68,29946,27769],{"class":92},[68,29948,29949],{"class":70,"line":3329},[68,29950,29951],{"class":85},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29953,1210],{},[48,29955,29956,29964,29967,29970],{},[51,29957,29958,15392,29960,29963],{},[65,29959,29724],{},[65,29961,29962],{},"--gpus all","没有英伟达显卡请注释。",[51,29965,29966],{},"--name后面请自己为容器起名。",[51,29968,29969],{},"最后一行仓库名称请你自己找对应的镜像填上。",[51,29971,29972,29973,29978],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25148,29974,29975],{},[1890,29976,29977],{},"请不要加","。",[58,29980,29982],{"className":25416,"code":29981,"language":25418,"meta":63,"style":63},"--ulimit nofile=1024:524288 \\\n",[65,29983,29984],{"__ignoreMap":63},[68,29985,29986,29989,29992],{"class":70,"line":71},[68,29987,29988],{"class":587},"--ulimit",[68,29990,29991],{"class":872}," nofile=1024:524288",[68,29993,26273],{"class":92},[19,29995,29996,29997,30002],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25148,29998,29999],{},[1890,30000,30001],{},"不建议","**.**",[58,30004,30006],{"className":25416,"code":30005,"language":25418,"meta":63,"style":63},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[65,30007,30008,30035,30044],{"__ignoreMap":63},[68,30009,30010,30013,30016,30018,30020,30022,30024,30026,30028,30031,30033],{"class":70,"line":71},[68,30011,30012],{"class":587},"--user",[68,30014,30015],{"class":85}," $(",[68,30017,29880],{"class":587},[68,30019,29883],{"class":92},[68,30021,2165],{"class":85},[68,30023,2595],{"class":872},[68,30025,26694],{"class":85},[68,30027,29880],{"class":587},[68,30029,30030],{"class":92}," -g",[68,30032,15311],{"class":85},[68,30034,27769],{"class":92},[68,30036,30037,30039,30042],{"class":70,"line":78},[68,30038,29839],{"class":85},[68,30040,30041],{"class":872},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[68,30043,26273],{"class":92},[68,30045,30046,30048,30051],{"class":70,"line":89},[68,30047,29839],{"class":85},[68,30049,30050],{"class":872},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[68,30052,26273],{"class":92},[1652,30054,30055],{},"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":63,"searchDepth":78,"depth":78,"links":30057},[30058,30059,30060],{"id":29057,"depth":89,"text":29058},{"id":29067,"depth":89,"text":29068},{"id":29477,"depth":89,"text":29480},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29049,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30067,"title":30068,"body":30069,"description":63,"extension":1677,"meta":31692,"navigation":1679,"path":31693,"seo":31694,"stem":31695,"__hash__":31696},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30070,"toc":31687},[30071,30074,30078,30081,30303,30307,30311,30314,30420,30425,30428,30433,30436,30441,30444,30449,30452,30464,30467,30472,30479,30507,30514,30590,30595,30598,30621,30623,30698,30703,30706,30710,30718,30723,30728,30732,30743,30749,30752,30755,30779,30782,30785,30813,30816,30819,31284,31287,31292,31297,31301,31324,31329,31333,31337,31340,31343,31346,31373,31376,31379,31397,31400,31403,31425,31433,31438,31443,31447,31450,31453,31456,31459,31504,31507,31525,31528,31533,31536,31557,31560,31616,31619,31624,31628,31631,31638,31641,31644,31649,31652,31668,31671,31684],[10,30072,30068],{"id":30073},"_6手动创建docker镜像",[43,30075,30077],{"id":30076},"_61dockerfile","6.1.DockerFile",[19,30079,30080],{},"常用命令：",[120,30082,30083,30094],{},[123,30084,30085],{},[126,30086,30087,30090,30092],{},[129,30088,30089],{"align":131},"指令",[129,30091,27463],{"align":131},[129,30093,29085],{"align":131},[137,30095,30096,30106,30122,30133,30144,30155,30166,30177,30188,30202,30216,30227,30241,30252,30263,30277,30292],{},[126,30097,30098,30100,30103],{},[142,30099,28964],{"align":131},[142,30101,30102],{"align":131},"指定基础镜像，是 Dockerfile 的起点",[142,30104,30105],{"align":131},"FROM ubuntu:22.04",[126,30107,30108,30111,30114],{},[142,30109,30110],{"align":131},"LABEL",[142,30112,30113],{"align":131},"添加元数据（如作者、版本等）",[142,30115,30116,30117,30121],{"align":131},"LABEL maintainer=”",[1974,30118,30120],{"href":30119},"mailto:you@example.com","you@example.com","”",[126,30123,30124,30127,30130],{},[142,30125,30126],{"align":131},"ENV",[142,30128,30129],{"align":131},"设置环境变量",[142,30131,30132],{"align":131},"ENV PORT=8080",[126,30134,30135,30138,30141],{},[142,30136,30137],{"align":131},"ARG",[142,30139,30140],{"align":131},"构建参数，只在构建期间可用",[142,30142,30143],{"align":131},"ARG VERSION=1.0",[126,30145,30146,30149,30152],{},[142,30147,30148],{"align":131},"RUN",[142,30150,30151],{"align":131},"构建镜像时运行命令",[142,30153,30154],{"align":131},"RUN apt-get update && apt-get install -y curl",[126,30156,30157,30160,30163],{},[142,30158,30159],{"align":131},"COPY",[142,30161,30162],{"align":131},"复制文件到镜像中",[142,30164,30165],{"align":131},"COPY . \u002Fapp",[126,30167,30168,30171,30174],{},[142,30169,30170],{"align":131},"ADD",[142,30172,30173],{"align":131},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[142,30175,30176],{"align":131},"ADD archive.tar.gz \u002Fdata\u002F",[126,30178,30179,30182,30185],{},[142,30180,30181],{"align":131},"WORKDIR",[142,30183,30184],{"align":131},"设置工作目录",[142,30186,30187],{"align":131},"WORKDIR \u002Fopt",[126,30189,30190,30193,30196],{},[142,30191,30192],{"align":131},"CMD",[142,30194,30195],{"align":131},"设置容器启动时默认命令（可被 docker run 覆盖）",[142,30197,30198,30199],{"align":131},"CMD ",[68,30200,30201],{},"“node”, “index.js”",[126,30203,30204,30207,30210],{},[142,30205,30206],{"align":131},"ENTRYPOINT",[142,30208,30209],{"align":131},"设置容器启动时固定命令（通常用于 CLI 工具等）",[142,30211,30212,30213],{"align":131},"ENTRYPOINT ",[68,30214,30215],{},"“python3”",[126,30217,30218,30221,30224],{},[142,30219,30220],{"align":131},"EXPOSE",[142,30222,30223],{"align":131},"声明镜像内服务监听的端口（不会自动映射）",[142,30225,30226],{"align":131},"EXPOSE 80",[126,30228,30229,30232,30235],{},[142,30230,30231],{"align":131},"VOLUME",[142,30233,30234],{"align":131},"声明数据卷挂载点",[142,30236,30237,30238],{"align":131},"VOLUME ",[68,30239,30240],{},"“\u002Fdata”",[126,30242,30243,30246,30249],{},[142,30244,30245],{"align":131},"USER",[142,30247,30248],{"align":131},"设置后续命令执行的用户",[142,30250,30251],{"align":131},"USER appuser",[126,30253,30254,30257,30260],{},[142,30255,30256],{"align":131},"ONBUILD",[142,30258,30259],{"align":131},"当镜像作为其他镜像基础镜像时触发的构建指令",[142,30261,30262],{"align":131},"ONBUILD COPY . \u002Fsrc",[126,30264,30265,30268,30271],{},[142,30266,30267],{"align":131},"SHELL",[142,30269,30270],{"align":131},"更改默认 shell，比如将 sh -c 改为 bash -c",[142,30272,30273,30274],{"align":131},"SHELL ",[68,30275,30276],{},"“\u002Fbin\u002Fbash”, “-c”",[126,30278,30279,30282,30285],{},[142,30280,30281],{"align":131},"HEALTHCHECK",[142,30283,30284],{"align":131},"定义容器运行时的健康检查命令",[142,30286,30287,30288],{"align":131},"`HEALTHCHECK CMD curl –fail ",[1974,30289,30290],{"href":30290,"rel":30291},"http:\u002F\u002Flocalhost:8080",[25459],[126,30293,30294,30297,30300],{},[142,30295,30296],{"align":131},"STOPSIGNAL",[142,30298,30299],{"align":131},"容器停止时发送的信号",[142,30301,30302],{"align":131},"STOPSIGNAL SIGKILL",[43,30304,30306],{"id":30305},"_62自己创建容器","6.2.自己创建容器",[23593,30308,30310],{"id":30309},"_621手动创建","6.2.1.手动创建",[19,30312,30313],{},"在x86电脑上编译x86的：",[58,30315,30317],{"className":25416,"code":30316,"language":25418,"meta":63,"style":63},"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",[65,30318,30319,30335,30339,30352,30356,30369,30373,30386,30390,30403,30407],{"__ignoreMap":63},[68,30320,30321,30323,30326,30329,30332],{"class":70,"line":71},[68,30322,28147],{"class":587},[68,30324,30325],{"class":872}," build",[68,30327,30328],{"class":92}," -t",[68,30330,30331],{"class":872}," ros-melodic-cuda118-cudnn8-bionic:latest",[68,30333,30334],{"class":872}," .\n",[68,30336,30337],{"class":70,"line":78},[68,30338,4000],{"emptyLinePlaceholder":1679},[68,30340,30341,30343,30345,30347,30350],{"class":70,"line":89},[68,30342,28147],{"class":587},[68,30344,30325],{"class":872},[68,30346,30328],{"class":92},[68,30348,30349],{"class":872}," ros-noetic-focal:latest",[68,30351,30334],{"class":872},[68,30353,30354],{"class":70,"line":115},[68,30355,4000],{"emptyLinePlaceholder":1679},[68,30357,30358,30360,30362,30364,30367],{"class":70,"line":280},[68,30359,28147],{"class":587},[68,30361,30325],{"class":872},[68,30363,30328],{"class":92},[68,30365,30366],{"class":872}," ros-humble-jammy:latest",[68,30368,30334],{"class":872},[68,30370,30371],{"class":70,"line":301},[68,30372,4000],{"emptyLinePlaceholder":1679},[68,30374,30375,30377,30379,30381,30384],{"class":70,"line":320},[68,30376,28147],{"class":587},[68,30378,30325],{"class":872},[68,30380,30328],{"class":92},[68,30382,30383],{"class":872}," ros-jazzy-noble:latest",[68,30385,30334],{"class":872},[68,30387,30388],{"class":70,"line":2915},[68,30389,4000],{"emptyLinePlaceholder":1679},[68,30391,30392,30394,30396,30398,30401],{"class":70,"line":2921},[68,30393,28147],{"class":587},[68,30395,30325],{"class":872},[68,30397,30328],{"class":92},[68,30399,30400],{"class":872}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[68,30402,30334],{"class":872},[68,30404,30405],{"class":70,"line":2933},[68,30406,4000],{"emptyLinePlaceholder":1679},[68,30408,30409,30411,30413,30415,30418],{"class":70,"line":3214},[68,30410,28147],{"class":587},[68,30412,30325],{"class":872},[68,30414,30328],{"class":92},[68,30416,30417],{"class":872}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[68,30419,30334],{"class":872},[19,30421,30422],{},[38,30423],{"alt":63,"src":30424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30426,30427],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30429,30430],{},[38,30431],{"alt":63,"src":30432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30434,30435],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[48,30437,30438],{},[51,30439,30440],{},"创建 Docker Hub 账户",[19,30442,30443],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[48,30445,30446],{"start":78},[51,30447,30448],{},"登录 Docker Hub",[19,30450,30451],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[58,30453,30455],{"className":25416,"code":30454,"language":25418,"meta":63,"style":63},"docker login\n",[65,30456,30457],{"__ignoreMap":63},[68,30458,30459,30461],{"class":70,"line":71},[68,30460,28147],{"class":587},[68,30462,30463],{"class":872}," login\n",[19,30465,30466],{},"输入你的 Docker Hub 用户名和密码进行验证。",[48,30468,30469],{},[51,30470,30471],{},"为你的镜像打标签",[19,30473,30474,30475,30478],{},"Docker Hub 使用 ",[65,30476,30477],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[58,30480,30482],{"className":25416,"code":30481,"language":25418,"meta":63,"style":63},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[65,30483,30484],{"__ignoreMap":63},[68,30485,30486,30488,30491,30493,30496,30499,30502,30504],{"class":70,"line":71},[68,30487,28147],{"class":587},[68,30489,30490],{"class":872}," tag",[68,30492,30383],{"class":872},[68,30494,30495],{"class":102}," \u003C",[68,30497,30498],{"class":872},"你的用户",[68,30500,30501],{"class":85},"名",[68,30503,2695],{"class":102},[68,30505,30506],{"class":872},"\u002Fros-jazzy-noble:latest\n",[19,30508,30509,30510,30513],{},"例如，如果你的 Docker Hub 用户名是 ",[65,30511,30512],{},"tungchiahui","，你应该执行：",[58,30515,30517],{"className":25416,"code":30516,"language":25418,"meta":63,"style":63},"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",[65,30518,30519,30530,30534,30545,30549,30560,30564,30575,30579],{"__ignoreMap":63},[68,30520,30521,30523,30525,30527],{"class":70,"line":71},[68,30522,28147],{"class":587},[68,30524,30490],{"class":872},[68,30526,30349],{"class":872},[68,30528,30529],{"class":872}," tungchiahui\u002Fros-noetic-focal:latest\n",[68,30531,30532],{"class":70,"line":78},[68,30533,4000],{"emptyLinePlaceholder":1679},[68,30535,30536,30538,30540,30542],{"class":70,"line":89},[68,30537,28147],{"class":587},[68,30539,30490],{"class":872},[68,30541,30366],{"class":872},[68,30543,30544],{"class":872}," tungchiahui\u002Fros-humble-jammy:latest\n",[68,30546,30547],{"class":70,"line":115},[68,30548,4000],{"emptyLinePlaceholder":1679},[68,30550,30551,30553,30555,30557],{"class":70,"line":280},[68,30552,28147],{"class":587},[68,30554,30490],{"class":872},[68,30556,30383],{"class":872},[68,30558,30559],{"class":872}," tungchiahui\u002Fros-jazzy-noble:latest\n",[68,30561,30562],{"class":70,"line":301},[68,30563,4000],{"emptyLinePlaceholder":1679},[68,30565,30566,30568,30570,30572],{"class":70,"line":320},[68,30567,28147],{"class":587},[68,30569,30490],{"class":872},[68,30571,30400],{"class":872},[68,30573,30574],{"class":872}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[68,30576,30577],{"class":70,"line":2915},[68,30578,4000],{"emptyLinePlaceholder":1679},[68,30580,30581,30583,30585,30587],{"class":70,"line":2921},[68,30582,28147],{"class":587},[68,30584,30490],{"class":872},[68,30586,30417],{"class":872},[68,30588,30589],{"class":872}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[48,30591,30592],{"start":78},[51,30593,30594],{},"推送镜像到 Docker Hub",[19,30596,30597],{},"使用以下命令将镜像推送到 Docker Hub：",[58,30599,30601],{"className":25416,"code":30600,"language":25418,"meta":63,"style":63},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[65,30602,30603],{"__ignoreMap":63},[68,30604,30605,30607,30610,30612,30614,30616,30618],{"class":70,"line":71},[68,30606,28147],{"class":587},[68,30608,30609],{"class":872}," push",[68,30611,30495],{"class":102},[68,30613,30498],{"class":872},[68,30615,30501],{"class":85},[68,30617,2695],{"class":102},[68,30619,30620],{"class":872},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30622,16230],{},[58,30624,30626],{"className":25416,"code":30625,"language":25418,"meta":63,"style":63},"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",[65,30627,30628,30636,30640,30648,30652,30660,30664,30673,30677,30685,30689],{"__ignoreMap":63},[68,30629,30630,30632,30634],{"class":70,"line":71},[68,30631,28147],{"class":587},[68,30633,30609],{"class":872},[68,30635,30529],{"class":872},[68,30637,30638],{"class":70,"line":78},[68,30639,4000],{"emptyLinePlaceholder":1679},[68,30641,30642,30644,30646],{"class":70,"line":89},[68,30643,28147],{"class":587},[68,30645,30609],{"class":872},[68,30647,30544],{"class":872},[68,30649,30650],{"class":70,"line":115},[68,30651,4000],{"emptyLinePlaceholder":1679},[68,30653,30654,30656,30658],{"class":70,"line":280},[68,30655,28147],{"class":587},[68,30657,30609],{"class":872},[68,30659,30559],{"class":872},[68,30661,30662],{"class":70,"line":301},[68,30663,4000],{"emptyLinePlaceholder":1679},[68,30665,30666,30668,30670],{"class":70,"line":320},[68,30667,28147],{"class":587},[68,30669,30609],{"class":872},[68,30671,30672],{"class":872}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[68,30674,30675],{"class":70,"line":2915},[68,30676,4000],{"emptyLinePlaceholder":1679},[68,30678,30679,30681,30683],{"class":70,"line":2921},[68,30680,28147],{"class":587},[68,30682,30609],{"class":872},[68,30684,30589],{"class":872},[68,30686,30687],{"class":70,"line":2933},[68,30688,4000],{"emptyLinePlaceholder":1679},[68,30690,30691,30693,30695],{"class":70,"line":3214},[68,30692,28147],{"class":587},[68,30694,30609],{"class":872},[68,30696,30697],{"class":872}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[48,30699,30700],{"start":89},[51,30701,30702],{},"验证推送成功",[19,30704,30705],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30707,30708],{},[1890,30709,5383],{},[168,30711,30712,30715],{},[51,30713,30714],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[51,30716,30717],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30719,30720],{},[38,30721],{"alt":63,"src":30722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30724,30725],{},[38,30726],{"alt":63,"src":30727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23593,30729,30731],{"id":30730},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30733,30734,30735,30738,30739,30742],{},"如果您想在 ",[1890,30736,30737],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1890,30740,30741],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30744,30745,30746],{},"1. ",[1890,30747,30748],{},"启用 Docker 跨平台构建",[19,30750,30751],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30753,30754],{},"第一步：启用 buildx（只需执行一次）",[58,30756,30758],{"className":25416,"code":30757,"language":25418,"meta":63,"style":63},"docker buildx create --name multiarch_builder --use\n",[65,30759,30760],{"__ignoreMap":63},[68,30761,30762,30764,30767,30770,30773,30776],{"class":70,"line":71},[68,30763,28147],{"class":587},[68,30765,30766],{"class":872}," buildx",[68,30768,30769],{"class":872}," create",[68,30771,30772],{"class":92}," --name",[68,30774,30775],{"class":872}," multiarch_builder",[68,30777,30778],{"class":92}," --use\n",[19,30780,30781],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30783,30784],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[58,30786,30788],{"className":25416,"code":30787,"language":25418,"meta":63,"style":63},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[65,30789,30790],{"__ignoreMap":63},[68,30791,30792,30794,30796,30798,30801,30804,30807,30810],{"class":70,"line":71},[68,30793,28147],{"class":587},[68,30795,28824],{"class":872},[68,30797,28827],{"class":92},[68,30799,30800],{"class":92}," --privileged",[68,30802,30803],{"class":872}," multiarch\u002Fqemu-user-static",[68,30805,30806],{"class":92}," --reset",[68,30808,30809],{"class":92}," -p",[68,30811,30812],{"class":872}," yes\n",[19,30814,30815],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30817,30818],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[58,30820,30822],{"className":25416,"code":30821,"language":25418,"meta":63,"style":63},"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",[65,30823,30824,30866,30870,30875,30885,30895,30904,30910,30914,30918,30928,30936,30945,30951,30955,30959,30969,30977,30986,30992,30996,31000,31010,31018,31027,31033,31037,31041,31051,31059,31068,31074,31078,31082,31092,31100,31109,31115,31119,31123,31133,31141,31150,31156,31160,31164,31174,31182,31191,31197,31201,31205,31215,31223,31232,31238,31242,31246,31257,31265,31274,31280],{"__ignoreMap":63},[68,30825,30826,30828,30830,30832,30835,30838,30840,30842,30845,30847,30849,30851,30853,30856,30859,30861,30864],{"class":70,"line":71},[68,30827,28147],{"class":587},[68,30829,30766],{"class":872},[68,30831,30325],{"class":872},[68,30833,30834],{"class":92}," --platform",[68,30836,30837],{"class":872}," linux\u002Famd64,linux\u002Farm64",[68,30839,30328],{"class":92},[68,30841,30495],{"class":102},[68,30843,30844],{"class":872},"你的镜像",[68,30846,30501],{"class":85},[68,30848,2695],{"class":102},[68,30850,2595],{"class":872},[68,30852,861],{"class":102},[68,30854,30855],{"class":872},"标",[68,30857,30858],{"class":85},"签",[68,30860,2695],{"class":102},[68,30862,30863],{"class":92}," --push",[68,30865,30334],{"class":872},[68,30867,30868],{"class":70,"line":78},[68,30869,4000],{"emptyLinePlaceholder":1679},[68,30871,30872],{"class":70,"line":89},[68,30873,30874],{"class":74},"# 例子：\n",[68,30876,30877,30879,30881,30883],{"class":70,"line":115},[68,30878,28147],{"class":587},[68,30880,30766],{"class":872},[68,30882,30325],{"class":872},[68,30884,26273],{"class":92},[68,30886,30887,30890,30893],{"class":70,"line":280},[68,30888,30889],{"class":85},"--platform ",[68,30891,30892],{"class":872},"linux\u002Famd64,linux\u002Farm64",[68,30894,26273],{"class":92},[68,30896,30897,30899,30902],{"class":70,"line":301},[68,30898,30328],{"class":92},[68,30900,30901],{"class":872}," tungchiahui\u002Fros:noetic-focal",[68,30903,26273],{"class":92},[68,30905,30906,30908],{"class":70,"line":320},[68,30907,30863],{"class":92},[68,30909,26273],{"class":92},[68,30911,30912],{"class":70,"line":2915},[68,30913,30334],{"class":872},[68,30915,30916],{"class":70,"line":2921},[68,30917,4000],{"emptyLinePlaceholder":1679},[68,30919,30920,30922,30924,30926],{"class":70,"line":2933},[68,30921,28147],{"class":587},[68,30923,30766],{"class":872},[68,30925,30325],{"class":872},[68,30927,26273],{"class":92},[68,30929,30930,30932,30934],{"class":70,"line":3214},[68,30931,30889],{"class":85},[68,30933,30892],{"class":872},[68,30935,26273],{"class":92},[68,30937,30938,30940,30943],{"class":70,"line":3219},[68,30939,30328],{"class":92},[68,30941,30942],{"class":872}," tungchiahui\u002Fros:humble-jammy",[68,30944,26273],{"class":92},[68,30946,30947,30949],{"class":70,"line":3225},[68,30948,30863],{"class":92},[68,30950,26273],{"class":92},[68,30952,30953],{"class":70,"line":3230},[68,30954,30334],{"class":872},[68,30956,30957],{"class":70,"line":3244},[68,30958,4000],{"emptyLinePlaceholder":1679},[68,30960,30961,30963,30965,30967],{"class":70,"line":3249},[68,30962,28147],{"class":587},[68,30964,30766],{"class":872},[68,30966,30325],{"class":872},[68,30968,26273],{"class":92},[68,30970,30971,30973,30975],{"class":70,"line":3255},[68,30972,30889],{"class":85},[68,30974,30892],{"class":872},[68,30976,26273],{"class":92},[68,30978,30979,30981,30984],{"class":70,"line":3276},[68,30980,30328],{"class":92},[68,30982,30983],{"class":872}," tungchiahui\u002Fros:jazzy-noble",[68,30985,26273],{"class":92},[68,30987,30988,30990],{"class":70,"line":3281},[68,30989,30863],{"class":92},[68,30991,26273],{"class":92},[68,30993,30994],{"class":70,"line":3295},[68,30995,30334],{"class":872},[68,30997,30998],{"class":70,"line":3300},[68,30999,4000],{"emptyLinePlaceholder":1679},[68,31001,31002,31004,31006,31008],{"class":70,"line":3329},[68,31003,27914],{"class":587},[68,31005,30766],{"class":872},[68,31007,30325],{"class":872},[68,31009,26273],{"class":92},[68,31011,31012,31014,31016],{"class":70,"line":3334},[68,31013,30889],{"class":85},[68,31015,30892],{"class":872},[68,31017,26273],{"class":92},[68,31019,31020,31022,31025],{"class":70,"line":3351},[68,31021,30328],{"class":92},[68,31023,31024],{"class":872}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[68,31026,26273],{"class":92},[68,31028,31029,31031],{"class":70,"line":3356},[68,31030,30863],{"class":92},[68,31032,26273],{"class":92},[68,31034,31035],{"class":70,"line":3361},[68,31036,30334],{"class":872},[68,31038,31039],{"class":70,"line":3366},[68,31040,4000],{"emptyLinePlaceholder":1679},[68,31042,31043,31045,31047,31049],{"class":70,"line":3380},[68,31044,28147],{"class":587},[68,31046,30766],{"class":872},[68,31048,30325],{"class":872},[68,31050,26273],{"class":92},[68,31052,31053,31055,31057],{"class":70,"line":3385},[68,31054,30889],{"class":85},[68,31056,30892],{"class":872},[68,31058,26273],{"class":92},[68,31060,31061,31063,31066],{"class":70,"line":4177},[68,31062,30328],{"class":92},[68,31064,31065],{"class":872}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[68,31067,26273],{"class":92},[68,31069,31070,31072],{"class":70,"line":4191},[68,31071,30863],{"class":92},[68,31073,26273],{"class":92},[68,31075,31076],{"class":70,"line":4199},[68,31077,30334],{"class":872},[68,31079,31080],{"class":70,"line":4204},[68,31081,4000],{"emptyLinePlaceholder":1679},[68,31083,31084,31086,31088,31090],{"class":70,"line":4210},[68,31085,27914],{"class":587},[68,31087,30766],{"class":872},[68,31089,30325],{"class":872},[68,31091,26273],{"class":92},[68,31093,31094,31096,31098],{"class":70,"line":4216},[68,31095,30889],{"class":85},[68,31097,30892],{"class":872},[68,31099,26273],{"class":92},[68,31101,31102,31104,31107],{"class":70,"line":4221},[68,31103,30328],{"class":92},[68,31105,31106],{"class":872}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[68,31108,26273],{"class":92},[68,31110,31111,31113],{"class":70,"line":9547},[68,31112,30863],{"class":92},[68,31114,26273],{"class":92},[68,31116,31117],{"class":70,"line":9571},[68,31118,30334],{"class":872},[68,31120,31121],{"class":70,"line":9576},[68,31122,4000],{"emptyLinePlaceholder":1679},[68,31124,31125,31127,31129,31131],{"class":70,"line":9582},[68,31126,28147],{"class":587},[68,31128,30766],{"class":872},[68,31130,30325],{"class":872},[68,31132,26273],{"class":92},[68,31134,31135,31137,31139],{"class":70,"line":9609},[68,31136,30889],{"class":85},[68,31138,30892],{"class":872},[68,31140,26273],{"class":92},[68,31142,31143,31145,31148],{"class":70,"line":9614},[68,31144,30328],{"class":92},[68,31146,31147],{"class":872}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[68,31149,26273],{"class":92},[68,31151,31152,31154],{"class":70,"line":9620},[68,31153,30863],{"class":92},[68,31155,26273],{"class":92},[68,31157,31158],{"class":70,"line":9632},[68,31159,30334],{"class":872},[68,31161,31162],{"class":70,"line":9644},[68,31163,4000],{"emptyLinePlaceholder":1679},[68,31165,31166,31168,31170,31172],{"class":70,"line":9656},[68,31167,28147],{"class":587},[68,31169,30766],{"class":872},[68,31171,30325],{"class":872},[68,31173,26273],{"class":92},[68,31175,31176,31178,31180],{"class":70,"line":11314},[68,31177,30889],{"class":85},[68,31179,30892],{"class":872},[68,31181,26273],{"class":92},[68,31183,31184,31186,31189],{"class":70,"line":11339},[68,31185,30328],{"class":92},[68,31187,31188],{"class":872}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[68,31190,26273],{"class":92},[68,31192,31193,31195],{"class":70,"line":11362},[68,31194,30863],{"class":92},[68,31196,26273],{"class":92},[68,31198,31199],{"class":70,"line":11386},[68,31200,30334],{"class":872},[68,31202,31203],{"class":70,"line":11391},[68,31204,4000],{"emptyLinePlaceholder":1679},[68,31206,31207,31209,31211,31213],{"class":70,"line":11396},[68,31208,27914],{"class":587},[68,31210,30766],{"class":872},[68,31212,30325],{"class":872},[68,31214,26273],{"class":92},[68,31216,31217,31219,31221],{"class":70,"line":11401},[68,31218,30889],{"class":85},[68,31220,30892],{"class":872},[68,31222,26273],{"class":92},[68,31224,31225,31227,31230],{"class":70,"line":11410},[68,31226,30328],{"class":92},[68,31228,31229],{"class":872}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[68,31231,26273],{"class":92},[68,31233,31234,31236],{"class":70,"line":11415},[68,31235,30863],{"class":92},[68,31237,26273],{"class":92},[68,31239,31240],{"class":70,"line":11421},[68,31241,30334],{"class":872},[68,31243,31244],{"class":70,"line":11442},[68,31245,4000],{"emptyLinePlaceholder":1679},[68,31247,31248,31251,31253,31255],{"class":70,"line":11448},[68,31249,31250],{"class":587},"  docker",[68,31252,30766],{"class":872},[68,31254,30325],{"class":872},[68,31256,26273],{"class":92},[68,31258,31259,31261,31263],{"class":70,"line":11462},[68,31260,30889],{"class":85},[68,31262,30892],{"class":872},[68,31264,26273],{"class":92},[68,31266,31267,31269,31272],{"class":70,"line":11468},[68,31268,30328],{"class":92},[68,31270,31271],{"class":872}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[68,31273,26273],{"class":92},[68,31275,31276,31278],{"class":70,"line":11495},[68,31277,30863],{"class":92},[68,31279,26273],{"class":92},[68,31281,31282],{"class":70,"line":11504},[68,31283,30334],{"class":872},[19,31285,31286],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31288,31289],{},[38,31290],{"alt":63,"src":31291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31293,31294],{},[38,31295],{"alt":63,"src":31296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23593,31298,31300],{"id":31299},"_623清除构建缓存","6.2.3.清除构建缓存",[58,31302,31304],{"className":25416,"code":31303,"language":25418,"meta":63,"style":63},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[65,31305,31306,31311],{"__ignoreMap":63},[68,31307,31308],{"class":70,"line":71},[68,31309,31310],{"class":74},"# 清理BuildKit构建缓存\n",[68,31312,31313,31315,31318,31321],{"class":70,"line":78},[68,31314,28147],{"class":587},[68,31316,31317],{"class":872}," builder",[68,31319,31320],{"class":872}," prune",[68,31322,31323],{"class":92}," -f\n",[19,31325,31326],{},[38,31327],{"alt":63,"src":31328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[43,31330,31332],{"id":31331},"_63补充","6.3.补充",[23593,31334,31336],{"id":31335},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31338,31339],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31341,31342],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31344,31345],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[58,31347,31349],{"className":25416,"code":31348,"language":25418,"meta":63,"style":63},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[65,31350,31351,31358],{"__ignoreMap":63},[68,31352,31353,31355],{"class":70,"line":71},[68,31354,28964],{"class":587},[68,31356,31357],{"class":872}," nginx\n",[68,31359,31360,31362,31365,31368,31370],{"class":70,"line":78},[68,31361,30148],{"class":587},[68,31363,31364],{"class":872}," echo",[68,31366,31367],{"class":872}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[68,31369,27816],{"class":102},[68,31371,31372],{"class":872}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31374,31375],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31377,31378],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[58,31380,31382],{"className":25416,"code":31381,"language":25418,"meta":63,"style":63},"docker build -t nginx:tuling .\n",[65,31383,31384],{"__ignoreMap":63},[68,31385,31386,31388,31390,31392,31395],{"class":70,"line":71},[68,31387,28147],{"class":587},[68,31389,30325],{"class":872},[68,31391,30328],{"class":92},[68,31393,31394],{"class":872}," nginx:tuling",[68,31396,30334],{"class":872},[19,31398,31399],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31401,31402],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[58,31404,31406],{"className":25416,"code":31405,"language":25418,"meta":63,"style":63},"docker run -d -p 92:80 nginx:tuling\n",[65,31407,31408],{"__ignoreMap":63},[68,31409,31410,31412,31414,31417,31419,31422],{"class":70,"line":71},[68,31411,28147],{"class":587},[68,31413,28824],{"class":872},[68,31415,31416],{"class":92}," -d",[68,31418,30809],{"class":92},[68,31420,31421],{"class":872}," 92:80",[68,31423,31424],{"class":872}," nginx:tuling\n",[19,31426,31427,31428],{},"4、访问 ",[1974,31429,31432],{"href":31430,"rel":31431},"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",[25459],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31434,31435],{},[38,31436],{"alt":63,"src":31437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31439,31440],{},[38,31441],{"alt":63,"src":31442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23593,31444,31446],{"id":31445},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31448,31449],{},"只需要知道大体流程即可",[19,31451,31452],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31454,31455],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31457,31458],{},"2、在Dockerfile中添加以下内容",[58,31460,31462],{"className":27685,"code":31461,"language":27687,"meta":63,"style":63},"# 基于哪个镜像\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",[65,31463,31464,31469,31474,31479,31484,31489,31494,31499],{"__ignoreMap":63},[68,31465,31466],{"class":70,"line":71},[68,31467,31468],{},"# 基于哪个镜像\n",[68,31470,31471],{"class":70,"line":78},[68,31472,31473],{},"From java:8\n",[68,31475,31476],{"class":70,"line":89},[68,31477,31478],{},"# 复制文件到容器\n",[68,31480,31481],{"class":70,"line":115},[68,31482,31483],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[68,31485,31486],{"class":70,"line":280},[68,31487,31488],{},"# 声明需要暴露的端口\n",[68,31490,31491],{"class":70,"line":301},[68,31492,31493],{},"EXPOSE 8877\n",[68,31495,31496],{"class":70,"line":320},[68,31497,31498],{},"# 配置容器启动后执行的命令\n",[68,31500,31501],{"class":70,"line":2915},[68,31502,31503],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31505,31506],{},"3、使用docker build命令构建镜像",[58,31508,31510],{"className":25416,"code":31509,"language":25418,"meta":63,"style":63},"docker build -t tulingmall-member:0.0.5 .\n",[65,31511,31512],{"__ignoreMap":63},[68,31513,31514,31516,31518,31520,31523],{"class":70,"line":71},[68,31515,28147],{"class":587},[68,31517,30325],{"class":872},[68,31519,30328],{"class":92},[68,31521,31522],{"class":872}," tulingmall-member:0.0.5",[68,31524,30334],{"class":872},[19,31526,31527],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31529,31530],{},[38,31531],{"alt":63,"src":31532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31534,31535],{},"4、启动镜像，加-d可在后台启动",[58,31537,31539],{"className":25416,"code":31538,"language":25418,"meta":63,"style":63},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[65,31540,31541],{"__ignoreMap":63},[68,31542,31543,31545,31547,31549,31551,31554],{"class":70,"line":71},[68,31544,28147],{"class":587},[68,31546,28824],{"class":872},[68,31548,31416],{"class":92},[68,31550,30809],{"class":92},[68,31552,31553],{"class":872}," 8877:8877",[68,31555,31556],{"class":872}," tulingmall-member:0.0.5\n",[19,31558,31559],{},"加上JVM参数：",[58,31561,31563],{"className":25416,"code":31562,"language":25418,"meta":63,"style":63},"# --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",[65,31564,31565,31570,31585,31595,31604,31611],{"__ignoreMap":63},[68,31566,31567],{"class":70,"line":71},[68,31568,31569],{"class":74},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[68,31571,31572,31574,31576,31579,31581,31583],{"class":70,"line":78},[68,31573,28147],{"class":587},[68,31575,28824],{"class":872},[68,31577,31578],{"class":92},"  -d",[68,31580,30809],{"class":92},[68,31582,31553],{"class":872},[68,31584,26273],{"class":92},[68,31586,31587,31589,31592],{"class":70,"line":89},[68,31588,29721],{"class":85},[68,31590,31591],{"class":872},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[68,31593,31594],{"class":92},"  \\\n",[68,31596,31597,31599,31602],{"class":70,"line":115},[68,31598,29721],{"class":85},[68,31600,31601],{"class":872},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[68,31603,31594],{"class":92},[68,31605,31606,31609],{"class":70,"line":280},[68,31607,31608],{"class":85},"--cap-add=SYS_PTRACE  ",[68,31610,27769],{"class":92},[68,31612,31613],{"class":70,"line":301},[68,31614,31615],{"class":85},"tulingmall-member:0.0.5\n",[19,31617,31618],{},"5、访问会员服务接口",[19,31620,31621],{},[38,31622],{"alt":63,"src":31623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23593,31625,31627],{"id":31626},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31629,31630],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31632,31633,31634],{},"阿里云docker镜像仓库：",[1974,31635,31636],{"href":31636,"rel":31637},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25459],[19,31639,31640],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31642,31643],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31645,31646],{},[38,31647],{"alt":63,"src":31648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31650,31651],{},"要把镜像推送到镜像仓库",[58,31653,31655],{"className":25416,"code":31654,"language":25418,"meta":63,"style":63},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[65,31656,31657],{"__ignoreMap":63},[68,31658,31659,31661,31663,31665],{"class":70,"line":71},[68,31660,28147],{"class":587},[68,31662,30490],{"class":872},[68,31664,31522],{"class":872},[68,31666,31667],{"class":872}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31669,31670],{},"最后将镜像推送到远程仓库",[58,31672,31674],{"className":25416,"code":31673,"language":25418,"meta":63,"style":63},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[65,31675,31676],{"__ignoreMap":63},[68,31677,31678,31680,31682],{"class":70,"line":71},[68,31679,28147],{"class":587},[68,31681,30609],{"class":872},[68,31683,31667],{"class":872},[1652,31685,31686],{},"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":63,"searchDepth":78,"depth":78,"links":31688},[31689,31690,31691],{"id":30076,"depth":89,"text":30077},{"id":30305,"depth":89,"text":30306},{"id":31331,"depth":89,"text":31332},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30068,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31698,"title":31699,"body":31700,"description":63,"extension":1677,"meta":31843,"navigation":1679,"path":31844,"seo":31845,"stem":31846,"__hash__":31847},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31701,"toc":31841},[31702,31705,31710,31715,31718,31723,31728,31731,31736,31741,31744,31749,31752,31755,31758,31761,31764,31767,31787,31809,31812,31815,31835,31838],[10,31703,31699],{"id":31704},"_7vscode远程开发",[48,31706,31707],{},[51,31708,31709],{},"插件1：微软Docker工具",[19,31711,31712],{},[38,31713],{"alt":63,"src":31714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31716,31717],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31719,31720],{},[38,31721],{"alt":63,"src":31722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[48,31724,31725],{"start":78},[51,31726,31727],{},"插件2：微软Docker远程开发工具",[19,31729,31730],{},"下面这是远程开发的插件。",[19,31732,31733],{},[38,31734],{"alt":63,"src":31735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31737,31738],{},[38,31739],{"alt":63,"src":31740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31742,31743],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31745,31746],{},[38,31747],{"alt":63,"src":31748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31750,31751],{},"安装完拓展之后，vscode进行链接：",[19,31753,31754],{},"1.按ctrl+shift+p",[19,31756,31757],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31759,31760],{},"3.选择目前运行的容器",[19,31762,31763],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31765,31766],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[58,31768,31770],{"className":25416,"code":31769,"language":25418,"meta":63,"style":63},"docker run -v 主机目录:容器目录 image-name\n",[65,31771,31772],{"__ignoreMap":63},[68,31773,31774,31776,31778,31781,31784],{"class":70,"line":71},[68,31775,28147],{"class":587},[68,31777,28824],{"class":872},[68,31779,31780],{"class":92}," -v",[68,31782,31783],{"class":872}," 主机目录:容器目录",[68,31785,31786],{"class":872}," image-name\n",[58,31788,31790],{"className":25416,"code":31789,"language":25418,"meta":63,"style":63},"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",[65,31791,31792],{"__ignoreMap":63},[68,31793,31794,31796,31798,31801,31803,31806],{"class":70,"line":71},[68,31795,28147],{"class":587},[68,31797,28824],{"class":872},[68,31799,31800],{"class":92}," -it",[68,31802,31780],{"class":92},[68,31804,31805],{"class":872}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[68,31807,31808],{"class":872}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31810,31811],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31813,31814],{},"查看挂载情况：",[58,31816,31818],{"className":25416,"code":31817,"language":25418,"meta":63,"style":63},"mount | grep -i project\n",[65,31819,31820],{"__ignoreMap":63},[68,31821,31822,31825,31827,31830,31832],{"class":70,"line":71},[68,31823,31824],{"class":587},"mount",[68,31826,26704],{"class":102},[68,31828,31829],{"class":587}," grep",[68,31831,28024],{"class":92},[68,31833,31834],{"class":872}," project\n",[19,31836,31837],{},"也可以通过ls来进行查看",[1652,31839,31840],{},"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":63,"searchDepth":78,"depth":78,"links":31842},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31699,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31849,"title":31850,"body":31851,"description":1676,"extension":1677,"meta":31855,"navigation":1679,"path":31857,"seo":31858,"stem":31859,"__hash__":31860},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31852,"toc":31853},[],{"title":63,"searchDepth":78,"depth":78,"links":31854},[],{"category":31856},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31850,"description":1676},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31862,"title":31863,"body":31864,"description":1676,"extension":1677,"meta":31868,"navigation":1679,"path":31869,"seo":31870,"stem":31871,"__hash__":31872},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31865,"toc":31866},[],{"title":63,"searchDepth":78,"depth":78,"links":31867},[],{"category":31856},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31863,"description":1676},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31874,"title":31875,"body":31876,"description":1676,"extension":1677,"meta":32169,"navigation":1679,"path":32170,"seo":32171,"stem":32172,"__hash__":32173},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31877,"toc":32167},[31878,31881,31889,31904,31909,31960,31963,31969,32156,32161,32164],[10,31879,31875],{"id":31880},"_1验证深度学习环境",[19,31882,31883,31884],{},"关于环境的安装，看",[1974,31885,31888],{"href":31886,"rel":31887},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25459],"Pytorch-->深度学习",[19,31890,31891,31892,31895,31896,31899,31900,31903],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[65,31893,31894],{},"pytorch-cuda=12.4"," 是一个“ ",[1890,31897,31898],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1890,31901,31902],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31905,31906],{},[38,31907],{"alt":63,"src":31908},"\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",[58,31910,31912],{"className":25416,"code":31911,"language":25418,"meta":63,"style":63},"# 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",[65,31913,31914,31919],{"__ignoreMap":63},[68,31915,31916],{"class":70,"line":71},[68,31917,31918],{"class":74},"# CUDA 12.4\n",[68,31920,31921,31924,31926,31929,31932,31935,31938,31941,31943,31946,31949,31952,31955,31957],{"class":70,"line":78},[68,31922,31923],{"class":587},"conda",[68,31925,25428],{"class":872},[68,31927,31928],{"class":872}," pytorch==",[68,31930,31931],{"class":92},"2.5.1",[68,31933,31934],{"class":872}," torchvision==",[68,31936,31937],{"class":92},"0.20.1",[68,31939,31940],{"class":872}," torchaudio==",[68,31942,31931],{"class":92},[68,31944,31945],{"class":872}," pytorch-cuda=",[68,31947,31948],{"class":92},"12.4",[68,31950,31951],{"class":92}," -c",[68,31953,31954],{"class":872}," pytorch",[68,31956,31951],{"class":92},[68,31958,31959],{"class":872}," nvidia\n",[19,31961,31962],{},"）：",[19,31964,31965],{},[1974,31966,31967],{"href":31967,"rel":31968},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25459],[58,31970,31974],{"className":31971,"code":31972,"language":31973,"meta":63,"style":63},"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",[65,31975,31976,31981,31989,31994,32004,32020,32025,32035,32072,32079,32091,32107,32112,32122,32134,32144],{"__ignoreMap":63},[68,31977,31978],{"class":70,"line":71},[68,31979,31980],{"class":74},"# 对深度学习环境进行测试\n",[68,31982,31983,31986],{"class":70,"line":78},[68,31984,31985],{"class":102},"import",[68,31987,31988],{"class":85}," torch\n",[68,31990,31991],{"class":70,"line":89},[68,31992,31993],{"class":74},"# 查看cuda是否被激活\n",[68,31995,31996,31999,32001],{"class":70,"line":115},[68,31997,31998],{"class":85},"flag",[68,32000,869],{"class":102},[68,32002,32003],{"class":85},"torch.cuda.is_available()\n",[68,32005,32006,32009,32011,32014,32017],{"class":70,"line":280},[68,32007,32008],{"class":92},"print",[68,32010,997],{"class":85},[68,32012,32013],{"class":872},"\"cuda:\"",[68,32015,32016],{"class":85},", flag)   ",[68,32018,32019],{"class":74},"#返回true的话说明被激活\n",[68,32021,32022],{"class":70,"line":301},[68,32023,32024],{"class":74},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[68,32026,32027,32030,32032],{"class":70,"line":320},[68,32028,32029],{"class":85},"ngpu",[68,32031,869],{"class":102},[68,32033,32034],{"class":92},"1\n",[68,32036,32037,32040,32042,32045,32048,32050,32053,32056,32059,32061,32063,32065,32067,32070],{"class":70,"line":2915},[68,32038,32039],{"class":85},"device",[68,32041,869],{"class":102},[68,32043,32044],{"class":85},"torch.device(",[68,32046,32047],{"class":872},"\"cuda:0\"",[68,32049,3306],{"class":102},[68,32051,32052],{"class":85},"(torch.cuda.is_available() ",[68,32054,32055],{"class":102},"and",[68,32057,32058],{"class":85}," ngpu",[68,32060,2695],{"class":102},[68,32062,600],{"class":92},[68,32064,15311],{"class":85},[68,32066,3303],{"class":102},[68,32068,32069],{"class":872}," \"cpu\"",[68,32071,1757],{"class":85},[68,32073,32074,32076],{"class":70,"line":2921},[68,32075,32008],{"class":92},[68,32077,32078],{"class":85},"(device)\n",[68,32080,32081,32083,32086,32088],{"class":70,"line":2933},[68,32082,32008],{"class":92},[68,32084,32085],{"class":85},"(torch.cuda.get_device_name(",[68,32087,600],{"class":92},[68,32089,32090],{"class":85},"))\n",[68,32092,32093,32095,32098,32100,32102,32104],{"class":70,"line":3214},[68,32094,32008],{"class":92},[68,32096,32097],{"class":85},"(torch.rand(",[68,32099,288],{"class":92},[68,32101,2114],{"class":85},[68,32103,288],{"class":92},[68,32105,32106],{"class":85},").cuda())\n",[68,32108,32109],{"class":70,"line":3219},[68,32110,32111],{"class":74},"# 查看cuda和cudnn的版本\n",[68,32113,32114,32117,32119],{"class":70,"line":3225},[68,32115,32116],{"class":85},"cuda_version",[68,32118,869],{"class":102},[68,32120,32121],{"class":85},"torch.version.cuda\n",[68,32123,32124,32126,32128,32131],{"class":70,"line":3230},[68,32125,32008],{"class":92},[68,32127,997],{"class":85},[68,32129,32130],{"class":872},"\"cuda version\"",[68,32132,32133],{"class":85},",cuda_version)\n",[68,32135,32136,32139,32141],{"class":70,"line":3244},[68,32137,32138],{"class":85},"cudnn_version",[68,32140,869],{"class":102},[68,32142,32143],{"class":85},"torch.backends.cudnn.version()\n",[68,32145,32146,32148,32150,32153],{"class":70,"line":3249},[68,32147,32008],{"class":92},[68,32149,997],{"class":85},[68,32151,32152],{"class":872},"\"cudnn version\"",[68,32154,32155],{"class":85},",cudnn_version)\n",[19,32157,32158],{},[38,32159],{"alt":63,"src":32160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,32162,32163],{},"cuda:0 指的是一块显卡",[1652,32165,32166],{},"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":63,"searchDepth":78,"depth":78,"links":32168},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31875,"description":1676},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32175,"title":32176,"body":32177,"description":1676,"extension":1677,"meta":51981,"navigation":1679,"path":51982,"seo":51983,"stem":51984,"__hash__":51985},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32178,"toc":51975},[32179,32182,32186,32190,32193,32198,32203,32206,32211,32216,32221,32224,32228,32233,32237,32242,32245,32250,32253,32256,32259,32262,32267,32270,32275,32280,32285,32290,32293,32297,32300,32305,32909,32914,32917,32922,32925,32928,33392,33395,33398,33401,33404,35455,35458,35463,35468,36263,36266,36271,37049,37053,38712,38716,39430,39434,39438,39443,39448,39453,39456,39461,39466,39471,39476,39481,39485,39490,40772,40777,40780,40783,40786,40941,40944,40947,42163,42168,42863,42867,42871,42876,42881,42884,42889,42894,42899,42904,42909,42914,42919,42924,42929,42934,42939,42944,42949,42954,42959,42964,42969,42974,42979,42984,42989,42994,42999,43004,43009,43014,43019,43024,43029,43034,43038,43042,43045,44523,44527,46174,46178,46872,46876,46879,46882,47426,47429,47433,47436,48833,48837,48840,49418,51205,51209,51212,51972],[10,32180,32176],{"id":32181},"_2经典神经网络",[43,32183,32185],{"id":32184},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23593,32187,32189],{"id":32188},"_211原理介绍","2.1.1.原理介绍",[19,32191,32192],{},"LeNet-5",[48,32194,32195],{},[51,32196,32197],{},"原理",[19,32199,32200],{},[38,32201],{"alt":63,"src":32202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,32204,32205],{},"B是batch批次；C是channel通道",[48,32207,32208],{"start":78},[51,32209,32210],{},"网络参数详细",[19,32212,32213],{},[38,32214],{"alt":63,"src":32215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,32217,32218],{},[38,32219],{"alt":63,"src":32220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,32222,32223],{},"AlexNet",[48,32225,32226],{},[51,32227,32197],{},[19,32229,32230],{},[38,32231],{"alt":63,"src":32232},"\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",[48,32234,32235],{"start":78},[51,32236,32210],{},[19,32238,32239],{},[38,32240],{"alt":63,"src":32241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,32243,32244],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32246,32247],{},[38,32248],{"alt":63,"src":32249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,32251,32252],{},"数据处理中的图像增强操作:",[19,32254,32255],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32257,32258],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32260,32261],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32263,32264],{},[38,32265],{"alt":63,"src":32266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,32268,32269],{},"提升网络精确度的方法：LRN正则化",[19,32271,32272],{},[38,32273],{"alt":63,"src":32274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,32276,32277],{},[38,32278],{"alt":63,"src":32279},"\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",[48,32281,32282],{"start":89},[51,32283,32284],{},"AlexNet的总结",[19,32286,32287],{},[38,32288],{"alt":63,"src":32289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,32291,32292],{},"比LeNet模型要深一丢丢",[23593,32294,32296],{"id":32295},"_212代码实现","2.1.2.代码实现",[19,32298,32299],{},"（1）LeNet",[48,32301,32302],{},[51,32303,32304],{},"模型搭建",[58,32306,32308],{"className":31971,"code":32307,"language":31973,"meta":63,"style":63},"# 导入库\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",[65,32309,32310,32315,32321,32326,32339,32344,32356,32360,32380,32385,32390,32401,32406,32425,32429,32434,32483,32495,32500,32529,32564,32591,32596,32608,32613,32633,32652,32671,32675,32680,32690,32707,32718,32733,32744,32755,32770,32785,32796,32803,32807,32821,32826,32849,32854,32859,32864,32868,32873,32878,32888],{"__ignoreMap":63},[68,32311,32312],{"class":70,"line":71},[68,32313,32314],{"class":74},"# 导入库\n",[68,32316,32317,32319],{"class":70,"line":78},[68,32318,31985],{"class":102},[68,32320,31988],{"class":85},[68,32322,32323],{"class":70,"line":89},[68,32324,32325],{"class":74},"# 导入神经网络层\n",[68,32327,32328,32331,32334,32336],{"class":70,"line":115},[68,32329,32330],{"class":102},"from",[68,32332,32333],{"class":85}," torch ",[68,32335,31985],{"class":102},[68,32337,32338],{"class":85}," nn\n",[68,32340,32341],{"class":70,"line":280},[68,32342,32343],{"class":74},"# 导入展示神经网络参数的包\n",[68,32345,32346,32348,32351,32353],{"class":70,"line":301},[68,32347,32330],{"class":102},[68,32349,32350],{"class":85}," torchsummary ",[68,32352,31985],{"class":102},[68,32354,32355],{"class":85}," summary\n",[68,32357,32358],{"class":70,"line":320},[68,32359,4000],{"emptyLinePlaceholder":1679},[68,32361,32362,32364,32367,32369,32372,32374,32377],{"class":70,"line":2915},[68,32363,16291],{"class":102},[68,32365,32366],{"class":587}," LeNet",[68,32368,997],{"class":85},[68,32370,32371],{"class":587},"nn",[68,32373,2294],{"class":85},[68,32375,32376],{"class":587},"Module",[68,32378,32379],{"class":85},"):\n",[68,32381,32382],{"class":70,"line":2921},[68,32383,32384],{"class":74},"    # 模型初始化:\n",[68,32386,32387],{"class":70,"line":2933},[68,32388,32389],{"class":74},"    # 定义一些网络层和激活函数\n",[68,32391,32392,32395,32398],{"class":70,"line":3214},[68,32393,32394],{"class":102},"    def",[68,32396,32397],{"class":92}," __init__",[68,32399,32400],{"class":85},"(self):\n",[68,32402,32403],{"class":70,"line":3219},[68,32404,32405],{"class":74},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[68,32407,32408,32411,32414,32417,32420,32423],{"class":70,"line":3225},[68,32409,32410],{"class":92},"        super",[68,32412,32413],{"class":85},"(LeNet,",[68,32415,32416],{"class":92},"self",[68,32418,32419],{"class":85},").",[68,32421,32422],{"class":92},"__init__",[68,32424,3577],{"class":85},[68,32426,32427],{"class":70,"line":3230},[68,32428,4000],{"emptyLinePlaceholder":1679},[68,32430,32431],{"class":70,"line":3244},[68,32432,32433],{"class":74},"        # 定义网络层\n",[68,32435,32436,32439,32442,32444,32447,32450,32452,32454,32456,32459,32461,32463,32465,32468,32470,32472,32474,32477,32479,32481],{"class":70,"line":3249},[68,32437,32438],{"class":92},"        self",[68,32440,32441],{"class":85},".c1",[68,32443,869],{"class":102},[68,32445,32446],{"class":85},"nn.Conv2d(",[68,32448,32449],{"class":6815},"in_channels",[68,32451,869],{"class":102},[68,32453,99],{"class":92},[68,32455,2114],{"class":85},[68,32457,32458],{"class":6815},"out_channels",[68,32460,869],{"class":102},[68,32462,2080],{"class":92},[68,32464,2114],{"class":85},[68,32466,32467],{"class":6815},"kernel_size",[68,32469,869],{"class":102},[68,32471,2055],{"class":92},[68,32473,2114],{"class":85},[68,32475,32476],{"class":6815},"padding",[68,32478,869],{"class":102},[68,32480,267],{"class":92},[68,32482,1757],{"class":85},[68,32484,32485,32487,32490,32492],{"class":70,"line":3255},[68,32486,32438],{"class":92},[68,32488,32489],{"class":85},".sig",[68,32491,869],{"class":102},[68,32493,32494],{"class":85},"nn.Sigmoid()\n",[68,32496,32497],{"class":70,"line":3276},[68,32498,32499],{"class":74},"        # 定义池化\n",[68,32501,32502,32504,32507,32509,32512,32514,32516,32518,32520,32523,32525,32527],{"class":70,"line":3281},[68,32503,32438],{"class":92},[68,32505,32506],{"class":85},".s2",[68,32508,869],{"class":102},[68,32510,32511],{"class":85},"nn.AvgPool2d(",[68,32513,32467],{"class":6815},[68,32515,869],{"class":102},[68,32517,267],{"class":92},[68,32519,2114],{"class":85},[68,32521,32522],{"class":6815},"stride",[68,32524,869],{"class":102},[68,32526,267],{"class":92},[68,32528,1757],{"class":85},[68,32530,32531,32533,32536,32538,32540,32542,32544,32546,32548,32550,32552,32554,32556,32558,32560,32562],{"class":70,"line":3295},[68,32532,32438],{"class":92},[68,32534,32535],{"class":85},".c3",[68,32537,869],{"class":102},[68,32539,32446],{"class":85},[68,32541,32449],{"class":6815},[68,32543,869],{"class":102},[68,32545,2080],{"class":92},[68,32547,2114],{"class":85},[68,32549,32458],{"class":6815},[68,32551,869],{"class":102},[68,32553,2337],{"class":92},[68,32555,2114],{"class":85},[68,32557,32467],{"class":6815},[68,32559,869],{"class":102},[68,32561,2055],{"class":92},[68,32563,1757],{"class":85},[68,32565,32566,32568,32571,32573,32575,32577,32579,32581,32583,32585,32587,32589],{"class":70,"line":3300},[68,32567,32438],{"class":92},[68,32569,32570],{"class":85},".s4",[68,32572,869],{"class":102},[68,32574,32511],{"class":85},[68,32576,32467],{"class":6815},[68,32578,869],{"class":102},[68,32580,267],{"class":92},[68,32582,2114],{"class":85},[68,32584,32522],{"class":6815},[68,32586,869],{"class":102},[68,32588,267],{"class":92},[68,32590,1757],{"class":85},[68,32592,32593],{"class":70,"line":3329},[68,32594,32595],{"class":74},"        # 定义平展层\n",[68,32597,32598,32600,32603,32605],{"class":70,"line":3334},[68,32599,32438],{"class":92},[68,32601,32602],{"class":85},".flatten",[68,32604,869],{"class":102},[68,32606,32607],{"class":85},"nn.Flatten()\n",[68,32609,32610],{"class":70,"line":3351},[68,32611,32612],{"class":74},"        # 定义全连接层\n",[68,32614,32615,32617,32620,32622,32625,32627,32629,32631],{"class":70,"line":3356},[68,32616,32438],{"class":92},[68,32618,32619],{"class":85},".f5",[68,32621,869],{"class":102},[68,32623,32624],{"class":85},"nn.Linear(",[68,32626,5586],{"class":92},[68,32628,2114],{"class":85},[68,32630,2553],{"class":92},[68,32632,1757],{"class":85},[68,32634,32635,32637,32640,32642,32644,32646,32648,32650],{"class":70,"line":3361},[68,32636,32438],{"class":92},[68,32638,32639],{"class":85},".f6",[68,32641,869],{"class":102},[68,32643,32624],{"class":85},[68,32645,2553],{"class":92},[68,32647,2114],{"class":85},[68,32649,2447],{"class":92},[68,32651,1757],{"class":85},[68,32653,32654,32656,32659,32661,32663,32665,32667,32669],{"class":70,"line":3366},[68,32655,32438],{"class":92},[68,32657,32658],{"class":85},".f7",[68,32660,869],{"class":102},[68,32662,32624],{"class":85},[68,32664,2447],{"class":92},[68,32666,2114],{"class":85},[68,32668,2182],{"class":92},[68,32670,1757],{"class":85},[68,32672,32673],{"class":70,"line":3380},[68,32674,4000],{"emptyLinePlaceholder":1679},[68,32676,32677],{"class":70,"line":3385},[68,32678,32679],{"class":74},"    # 写工具->写前向传播\n",[68,32681,32682,32684,32687],{"class":70,"line":4177},[68,32683,32394],{"class":102},[68,32685,32686],{"class":587}," forward",[68,32688,32689],{"class":85},"(self,x):\n",[68,32691,32692,32695,32697,32699,32702,32704],{"class":70,"line":4191},[68,32693,32694],{"class":85},"        x",[68,32696,869],{"class":102},[68,32698,32416],{"class":92},[68,32700,32701],{"class":85},".sig(",[68,32703,32416],{"class":92},[68,32705,32706],{"class":85},".c1(x))\n",[68,32708,32709,32711,32713,32715],{"class":70,"line":4199},[68,32710,32694],{"class":85},[68,32712,869],{"class":102},[68,32714,32416],{"class":92},[68,32716,32717],{"class":85},".s2(x)\n",[68,32719,32720,32722,32724,32726,32728,32730],{"class":70,"line":4204},[68,32721,32694],{"class":85},[68,32723,869],{"class":102},[68,32725,32416],{"class":92},[68,32727,32701],{"class":85},[68,32729,32416],{"class":92},[68,32731,32732],{"class":85},".c3(x))\n",[68,32734,32735,32737,32739,32741],{"class":70,"line":4210},[68,32736,32694],{"class":85},[68,32738,869],{"class":102},[68,32740,32416],{"class":92},[68,32742,32743],{"class":85},".s4(x)\n",[68,32745,32746,32748,32750,32752],{"class":70,"line":4216},[68,32747,32694],{"class":85},[68,32749,869],{"class":102},[68,32751,32416],{"class":92},[68,32753,32754],{"class":85},".flatten(x)\n",[68,32756,32757,32759,32761,32763,32765,32767],{"class":70,"line":4221},[68,32758,32694],{"class":85},[68,32760,869],{"class":102},[68,32762,32416],{"class":92},[68,32764,32701],{"class":85},[68,32766,32416],{"class":92},[68,32768,32769],{"class":85},".f5(x))\n",[68,32771,32772,32774,32776,32778,32780,32782],{"class":70,"line":9547},[68,32773,32694],{"class":85},[68,32775,869],{"class":102},[68,32777,32416],{"class":92},[68,32779,32701],{"class":85},[68,32781,32416],{"class":92},[68,32783,32784],{"class":85},".f6(x))\n",[68,32786,32787,32789,32791,32793],{"class":70,"line":9571},[68,32788,32694],{"class":85},[68,32790,869],{"class":102},[68,32792,32416],{"class":92},[68,32794,32795],{"class":85},".f7(x)\n",[68,32797,32798,32800],{"class":70,"line":9576},[68,32799,16349],{"class":102},[68,32801,32802],{"class":85}," x\n",[68,32804,32805],{"class":70,"line":9582},[68,32806,4000],{"emptyLinePlaceholder":1679},[68,32808,32809,32811,32814,32816,32819],{"class":70,"line":9609},[68,32810,3134],{"class":102},[68,32812,32813],{"class":92}," __name__",[68,32815,4548],{"class":102},[68,32817,32818],{"class":872},"\"__main__\"",[68,32820,5338],{"class":85},[68,32822,32823],{"class":70,"line":9614},[68,32824,32825],{"class":74},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[68,32827,32828,32831,32833,32835,32838,32840,32843,32845,32847],{"class":70,"line":9620},[68,32829,32830],{"class":85},"    device",[68,32832,869],{"class":102},[68,32834,32044],{"class":85},[68,32836,32837],{"class":872},"\"cuda\"",[68,32839,3306],{"class":102},[68,32841,32842],{"class":85}," torch.cuda.is_available() ",[68,32844,3303],{"class":102},[68,32846,32069],{"class":872},[68,32848,1757],{"class":85},[68,32850,32851],{"class":70,"line":9632},[68,32852,32853],{"class":74},"    # 如果就是想指定用cpu用下方代码:\n",[68,32855,32856],{"class":70,"line":9644},[68,32857,32858],{"class":74},"    # device=\"cpu\"\n",[68,32860,32861],{"class":70,"line":9656},[68,32862,32863],{"class":74},"    # print(device)\n",[68,32865,32866],{"class":70,"line":11314},[68,32867,4000],{"emptyLinePlaceholder":1679},[68,32869,32870],{"class":70,"line":11339},[68,32871,32872],{"class":74},"    # 实例化模型\n",[68,32874,32875],{"class":70,"line":11362},[68,32876,32877],{"class":74},"    # 将模型放到设备中去运行\n",[68,32879,32880,32883,32885],{"class":70,"line":11386},[68,32881,32882],{"class":85},"    model",[68,32884,869],{"class":102},[68,32886,32887],{"class":85},"LeNet().to(device)\n",[68,32889,32890,32893,32896,32898,32900,32902,32904,32906],{"class":70,"line":11391},[68,32891,32892],{"class":92},"    print",[68,32894,32895],{"class":85},"(summary(model,(",[68,32897,99],{"class":92},[68,32899,2114],{"class":85},[68,32901,2637],{"class":92},[68,32903,2114],{"class":85},[68,32905,2637],{"class":92},[68,32907,32908],{"class":85},")))\n",[19,32910,32911],{},[38,32912],{"alt":63,"src":32913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,32915,32916],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[48,32918,32919],{"start":78},[51,32920,32921],{},"训练",[19,32923,32924],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32926,32927],{},"在训练之前可以将数据展示看一下",[58,32929,32931],{"className":31971,"code":32930,"language":31973,"meta":63,"style":63},"# 建立画图的函数，用于展示数据\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",[65,32932,32933,32938,32943,32955,32967,32980,32985,32997,33002,33014,33019,33031,33035,33039,33060,33072,33077,33098,33109,33113,33118,33136,33147,33152,33163,33168,33179,33183,33188,33203,33216,33221,33226,33239,33252,33265,33270,33274,33279,33299,33316,33336,33349,33362,33372,33387],{"__ignoreMap":63},[68,32934,32935],{"class":70,"line":71},[68,32936,32937],{"class":74},"# 建立画图的函数，用于展示数据\n",[68,32939,32940],{"class":70,"line":78},[68,32941,32942],{"class":74},"# torchvision中包含很多内置的数据集\n",[68,32944,32945,32947,32950,32952],{"class":70,"line":89},[68,32946,32330],{"class":102},[68,32948,32949],{"class":85}," sklearn.externals.array_api_compat.torch ",[68,32951,31985],{"class":102},[68,32953,32954],{"class":85}," squeeze\n",[68,32956,32957,32959,32962,32964],{"class":70,"line":115},[68,32958,32330],{"class":102},[68,32960,32961],{"class":85}," torchvision.datasets ",[68,32963,31985],{"class":102},[68,32965,32966],{"class":85}," FashionMNIST\n",[68,32968,32969,32971,32974,32977],{"class":70,"line":280},[68,32970,31985],{"class":102},[68,32972,32973],{"class":85}," numpy ",[68,32975,32976],{"class":102},"as",[68,32978,32979],{"class":85}," np\n",[68,32981,32982],{"class":70,"line":301},[68,32983,32984],{"class":74},"# 引入处理数据集的包\n",[68,32986,32987,32989,32992,32994],{"class":70,"line":320},[68,32988,32330],{"class":102},[68,32990,32991],{"class":85}," torchvision ",[68,32993,31985],{"class":102},[68,32995,32996],{"class":85}," transforms\n",[68,32998,32999],{"class":70,"line":2915},[68,33000,33001],{"class":74},"# 从torch库中引入数据处理的包\n",[68,33003,33004,33006,33009,33011],{"class":70,"line":2921},[68,33005,31985],{"class":102},[68,33007,33008],{"class":85}," torch.utils.data ",[68,33010,32976],{"class":102},[68,33012,33013],{"class":85}," Data\n",[68,33015,33016],{"class":70,"line":2933},[68,33017,33018],{"class":74},"# 导入画图的库\n",[68,33020,33021,33023,33026,33028],{"class":70,"line":3214},[68,33022,31985],{"class":102},[68,33024,33025],{"class":85}," matplotlib.pyplot ",[68,33027,32976],{"class":102},[68,33029,33030],{"class":85}," plt\n",[68,33032,33033],{"class":70,"line":3219},[68,33034,4000],{"emptyLinePlaceholder":1679},[68,33036,33037],{"class":70,"line":3225},[68,33038,4000],{"emptyLinePlaceholder":1679},[68,33040,33041,33044,33046,33049,33052,33054,33057],{"class":70,"line":3230},[68,33042,33043],{"class":85},"train_data",[68,33045,869],{"class":102},[68,33047,33048],{"class":85},"FashionMNIST(",[68,33050,33051],{"class":6815},"root",[68,33053,869],{"class":102},[68,33055,33056],{"class":872},"'.\u002Fdata'",[68,33058,33059],{"class":85},",\n",[68,33061,33062,33065,33067,33070],{"class":70,"line":3244},[68,33063,33064],{"class":6815},"                        train",[68,33066,869],{"class":102},[68,33068,33069],{"class":92},"True",[68,33071,33059],{"class":85},[68,33073,33074],{"class":70,"line":3249},[68,33075,33076],{"class":74},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[68,33078,33079,33082,33084,33087,33090,33092,33095],{"class":70,"line":3255},[68,33080,33081],{"class":6815},"                        transform",[68,33083,869],{"class":102},[68,33085,33086],{"class":85},"transforms.Compose([transforms.Resize(",[68,33088,33089],{"class":6815},"size",[68,33091,869],{"class":102},[68,33093,33094],{"class":92},"224",[68,33096,33097],{"class":85},"),transforms.ToTensor()]),\n",[68,33099,33100,33103,33105,33107],{"class":70,"line":3276},[68,33101,33102],{"class":6815},"                        download",[68,33104,869],{"class":102},[68,33106,33069],{"class":92},[68,33108,1757],{"class":85},[68,33110,33111],{"class":70,"line":3281},[68,33112,4000],{"emptyLinePlaceholder":1679},[68,33114,33115],{"class":70,"line":3295},[68,33116,33117],{"class":74},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[68,33119,33120,33123,33125,33128,33131,33133],{"class":70,"line":3300},[68,33121,33122],{"class":85},"train_loader",[68,33124,869],{"class":102},[68,33126,33127],{"class":85},"Data.DataLoader(",[68,33129,33130],{"class":6815},"dataset",[68,33132,869],{"class":102},[68,33134,33135],{"class":85},"train_data,\n",[68,33137,33138,33141,33143,33145],{"class":70,"line":3329},[68,33139,33140],{"class":6815},"                             batch_size",[68,33142,869],{"class":102},[68,33144,1940],{"class":92},[68,33146,33059],{"class":85},[68,33148,33149],{"class":70,"line":3334},[68,33150,33151],{"class":74},"                             # 数据是否打乱\n",[68,33153,33154,33157,33159,33161],{"class":70,"line":3351},[68,33155,33156],{"class":6815},"                             shuffle",[68,33158,869],{"class":102},[68,33160,33069],{"class":92},[68,33162,33059],{"class":85},[68,33164,33165],{"class":70,"line":3356},[68,33166,33167],{"class":74},"                             # 规定加载数据的进程\n",[68,33169,33170,33173,33175,33177],{"class":70,"line":3361},[68,33171,33172],{"class":6815},"                             num_workers",[68,33174,869],{"class":102},[68,33176,600],{"class":92},[68,33178,1757],{"class":85},[68,33180,33181],{"class":70,"line":3366},[68,33182,4000],{"emptyLinePlaceholder":1679},[68,33184,33185],{"class":70,"line":3380},[68,33186,33187],{"class":74},"# 获得一个batch的数据\n",[68,33189,33190,33192,33195,33197,33200],{"class":70,"line":3385},[68,33191,4624],{"class":102},[68,33193,33194],{"class":85}," step,(b_x,b_y) ",[68,33196,27637],{"class":102},[68,33198,33199],{"class":92}," enumerate",[68,33201,33202],{"class":85},"(train_loader):\n",[68,33204,33205,33207,33210,33212,33214],{"class":70,"line":4177},[68,33206,4700],{"class":102},[68,33208,33209],{"class":85}," step ",[68,33211,2695],{"class":102},[68,33213,5692],{"class":92},[68,33215,5338],{"class":85},[68,33217,33218],{"class":70,"line":4191},[68,33219,33220],{"class":102},"        break\n",[68,33222,33223],{"class":70,"line":4199},[68,33224,33225],{"class":74},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[68,33227,33228,33231,33233,33236],{"class":70,"line":4204},[68,33229,33230],{"class":85},"batch_x",[68,33232,869],{"class":102},[68,33234,33235],{"class":85},"b_x.squeeze().numpy()  ",[68,33237,33238],{"class":74},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[68,33240,33241,33244,33246,33249],{"class":70,"line":4210},[68,33242,33243],{"class":85},"batch_y",[68,33245,869],{"class":102},[68,33247,33248],{"class":85},"b_y.numpy()   ",[68,33250,33251],{"class":74},"#将张量转换成功numpy数组\n",[68,33253,33254,33257,33259,33262],{"class":70,"line":4216},[68,33255,33256],{"class":85},"class_label",[68,33258,869],{"class":102},[68,33260,33261],{"class":85},"train_data.classes  ",[68,33263,33264],{"class":74},"#训练集标签\n",[68,33266,33267],{"class":70,"line":4221},[68,33268,33269],{"class":74},"# print(class_label)\n",[68,33271,33272],{"class":70,"line":9547},[68,33273,4000],{"emptyLinePlaceholder":1679},[68,33275,33276],{"class":70,"line":9571},[68,33277,33278],{"class":74},"# 可视化一个batch的图像\n",[68,33280,33281,33284,33287,33289,33291,33293,33295,33297],{"class":70,"line":9576},[68,33282,33283],{"class":85},"plt.figure(",[68,33285,33286],{"class":6815},"figsize",[68,33288,869],{"class":102},[68,33290,997],{"class":85},[68,33292,2234],{"class":92},[68,33294,2114],{"class":85},[68,33296,2055],{"class":92},[68,33298,32090],{"class":85},[68,33300,33301,33303,33306,33308,33311,33313],{"class":70,"line":9582},[68,33302,4624],{"class":102},[68,33304,33305],{"class":85}," ii ",[68,33307,27637],{"class":102},[68,33309,33310],{"class":85}," np.arange(",[68,33312,8957],{"class":92},[68,33314,33315],{"class":85},"(batch_y)):\n",[68,33317,33318,33321,33323,33325,33327,33330,33332,33334],{"class":70,"line":9609},[68,33319,33320],{"class":85},"    plt.subplot(",[68,33322,2029],{"class":92},[68,33324,2114],{"class":85},[68,33326,2337],{"class":92},[68,33328,33329],{"class":85},",ii ",[68,33331,2217],{"class":102},[68,33333,1112],{"class":92},[68,33335,1757],{"class":85},[68,33337,33338,33341,33344,33346],{"class":70,"line":9614},[68,33339,33340],{"class":85},"    plt.imshow(batch_x[ii,:,:],",[68,33342,33343],{"class":6815},"cmap",[68,33345,869],{"class":102},[68,33347,33348],{"class":85},"plt.cm.gray)\n",[68,33350,33351,33354,33356,33358,33360],{"class":70,"line":9620},[68,33352,33353],{"class":85},"    plt.title(class_label[batch_y[ii]],",[68,33355,33089],{"class":6815},[68,33357,869],{"class":102},[68,33359,2182],{"class":92},[68,33361,1757],{"class":85},[68,33363,33364,33367,33370],{"class":70,"line":9632},[68,33365,33366],{"class":85},"    plt.axis(",[68,33368,33369],{"class":872},"\"off\"",[68,33371,1757],{"class":85},[68,33373,33374,33377,33380,33382,33385],{"class":70,"line":9644},[68,33375,33376],{"class":85},"    plt.subplots_adjust(",[68,33378,33379],{"class":6815},"wspace",[68,33381,869],{"class":102},[68,33383,33384],{"class":92},"0.05",[68,33386,1757],{"class":85},[68,33388,33389],{"class":70,"line":9656},[68,33390,33391],{"class":85},"plt.show()\n",[19,33393,33394],{},"用matplotlib进行展示的过程可以后续再补",[19,33396,33397],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33399,33400],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33402,33403],{},"模型训练：",[58,33405,33407],{"className":31971,"code":33406,"language":31973,"meta":63,"style":63},"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",[65,33408,33409,33416,33423,33427,33439,33445,33456,33466,33476,33486,33496,33501,33513,33523,33527,33531,33536,33547,33560,33571,33588,33599,33638,33654,33666,33677,33682,33693,33709,33720,33731,33742,33749,33753,33758,33763,33767,33772,33782,33803,33807,33811,33816,33821,33826,33846,33850,33855,33865,33869,33874,33883,33888,33893,33898,33908,33912,33916,33921,33926,33936,33941,33951,33956,33965,33970,33979,33984,33993,33997,34002,34012,34016,34020,34025,34040,34068,34083,34087,34092,34097,34106,34111,34120,34125,34134,34139,34148,34153,34162,34167,34176,34181,34194,34199,34209,34214,34224,34230,34236,34242,34248,34259,34265,34285,34291,34302,34308,34314,34320,34326,34332,34338,34344,34364,34370,34386,34392,34406,34412,34427,34433,34442,34448,34457,34463,34469,34478,34484,34495,34501,34520,34526,34537,34543,34563,34579,34585,34599,34605,34611,34622,34628,34634,34644,34650,34661,34667,34677,34682,34688,34737,34784,34789,34795,34814,34820,34840,34846,34852,34862,34867,34873,34889,34934,34940,34946,34952,34963,34969,34975,34981,34999,35013,35022,35031,35040,35049,35055,35061,35069,35074,35080,35091,35097,35117,35123,35129,35135,35152,35158,35164,35170,35176,35182,35209,35233,35239,35245,35251,35262,35273,35279,35296,35319,35342,35348,35353,35362,35372,35378,35383,35389,35402,35408,35419,35430,35449],{"__ignoreMap":63},[68,33410,33411,33413],{"class":70,"line":71},[68,33412,31985],{"class":102},[68,33414,33415],{"class":85}," copy\n",[68,33417,33418,33420],{"class":70,"line":78},[68,33419,31985],{"class":102},[68,33421,33422],{"class":85}," time\n",[68,33424,33425],{"class":70,"line":89},[68,33426,4000],{"emptyLinePlaceholder":1679},[68,33428,33429,33431,33434,33436],{"class":70,"line":115},[68,33430,31985],{"class":102},[68,33432,33433],{"class":85}," pandas ",[68,33435,32976],{"class":102},[68,33437,33438],{"class":85}," pd\n",[68,33440,33441,33443],{"class":70,"line":280},[68,33442,31985],{"class":102},[68,33444,31988],{"class":85},[68,33446,33447,33449,33451,33453],{"class":70,"line":301},[68,33448,32330],{"class":102},[68,33450,33008],{"class":85},[68,33452,31985],{"class":102},[68,33454,33455],{"class":85}," Dataset\n",[68,33457,33458,33460,33462,33464],{"class":70,"line":320},[68,33459,32330],{"class":102},[68,33461,32961],{"class":85},[68,33463,31985],{"class":102},[68,33465,32966],{"class":85},[68,33467,33468,33470,33472,33474],{"class":70,"line":2915},[68,33469,32330],{"class":102},[68,33471,32991],{"class":85},[68,33473,31985],{"class":102},[68,33475,32996],{"class":85},[68,33477,33478,33480,33482,33484],{"class":70,"line":2921},[68,33479,31985],{"class":102},[68,33481,33008],{"class":85},[68,33483,32976],{"class":102},[68,33485,33013],{"class":85},[68,33487,33488,33490,33492,33494],{"class":70,"line":2933},[68,33489,31985],{"class":102},[68,33491,33025],{"class":85},[68,33493,32976],{"class":102},[68,33495,33030],{"class":85},[68,33497,33498],{"class":70,"line":3214},[68,33499,33500],{"class":74},"# 导入模型\n",[68,33502,33503,33505,33508,33510],{"class":70,"line":3219},[68,33504,32330],{"class":102},[68,33506,33507],{"class":85}," model ",[68,33509,31985],{"class":102},[68,33511,33512],{"class":85}," LeNet\n",[68,33514,33515,33517,33519,33521],{"class":70,"line":3225},[68,33516,32330],{"class":102},[68,33518,32333],{"class":85},[68,33520,31985],{"class":102},[68,33522,32338],{"class":85},[68,33524,33525],{"class":70,"line":3230},[68,33526,4000],{"emptyLinePlaceholder":1679},[68,33528,33529],{"class":70,"line":3244},[68,33530,4000],{"emptyLinePlaceholder":1679},[68,33532,33533],{"class":70,"line":3249},[68,33534,33535],{"class":74},"# 处理训练集与验证集函数--->划分数据集\n",[68,33537,33538,33541,33544],{"class":70,"line":3255},[68,33539,33540],{"class":102},"def",[68,33542,33543],{"class":587}," train_val_data_process",[68,33545,33546],{"class":85},"():\n",[68,33548,33549,33552,33554,33556,33558],{"class":70,"line":3276},[68,33550,33551],{"class":85},"    train_data",[68,33553,869],{"class":102},[68,33555,33048],{"class":85},[68,33557,33056],{"class":872},[68,33559,33059],{"class":85},[68,33561,33562,33565,33567,33569],{"class":70,"line":3281},[68,33563,33564],{"class":6815},"                            train",[68,33566,869],{"class":102},[68,33568,33069],{"class":92},[68,33570,33059],{"class":85},[68,33572,33573,33576,33578,33580,33582,33584,33586],{"class":70,"line":3295},[68,33574,33575],{"class":6815},"                            transform",[68,33577,869],{"class":102},[68,33579,33086],{"class":85},[68,33581,33089],{"class":6815},[68,33583,869],{"class":102},[68,33585,2637],{"class":92},[68,33587,33097],{"class":85},[68,33589,33590,33593,33595,33597],{"class":70,"line":3300},[68,33591,33592],{"class":6815},"                            download",[68,33594,869],{"class":102},[68,33596,33069],{"class":92},[68,33598,1757],{"class":85},[68,33600,33601,33604,33606,33609,33612,33614,33617,33619,33621,33624,33626,33628,33631,33633,33635],{"class":70,"line":3329},[68,33602,33603],{"class":85},"    train_data,val_data",[68,33605,869],{"class":102},[68,33607,33608],{"class":85},"Data.random_split(train_data,[",[68,33610,33611],{"class":92},"round",[68,33613,997],{"class":85},[68,33615,33616],{"class":92},"0.8",[68,33618,2191],{"class":102},[68,33620,8957],{"class":92},[68,33622,33623],{"class":85},"(train_data)),",[68,33625,33611],{"class":92},[68,33627,997],{"class":85},[68,33629,33630],{"class":92},"0.2",[68,33632,2191],{"class":102},[68,33634,8957],{"class":92},[68,33636,33637],{"class":85},"(train_data))])\n",[68,33639,33640,33643,33645,33648,33650,33652],{"class":70,"line":3334},[68,33641,33642],{"class":85},"    train_dataloader ",[68,33644,869],{"class":102},[68,33646,33647],{"class":85}," Data.DataLoader(",[68,33649,33130],{"class":6815},[68,33651,869],{"class":102},[68,33653,33135],{"class":85},[68,33655,33656,33659,33661,33664],{"class":70,"line":3351},[68,33657,33658],{"class":6815},"                                       batch_size",[68,33660,869],{"class":102},[68,33662,33663],{"class":92},"128",[68,33665,33059],{"class":85},[68,33667,33668,33671,33673,33675],{"class":70,"line":3356},[68,33669,33670],{"class":6815},"                                       shuffle",[68,33672,869],{"class":102},[68,33674,33069],{"class":92},[68,33676,33059],{"class":85},[68,33678,33679],{"class":70,"line":3361},[68,33680,33681],{"class":74},"                                       # 规定8个进程\n",[68,33683,33684,33687,33689,33691],{"class":70,"line":3366},[68,33685,33686],{"class":6815},"                                       num_workers",[68,33688,869],{"class":102},[68,33690,2131],{"class":92},[68,33692,1757],{"class":85},[68,33694,33695,33698,33700,33702,33704,33706],{"class":70,"line":3380},[68,33696,33697],{"class":85},"    val_dataloader",[68,33699,869],{"class":102},[68,33701,33127],{"class":85},[68,33703,33130],{"class":6815},[68,33705,869],{"class":102},[68,33707,33708],{"class":85},"val_data,\n",[68,33710,33711,33714,33716,33718],{"class":70,"line":3385},[68,33712,33713],{"class":6815},"                                   batch_size",[68,33715,869],{"class":102},[68,33717,33663],{"class":92},[68,33719,33059],{"class":85},[68,33721,33722,33725,33727,33729],{"class":70,"line":4177},[68,33723,33724],{"class":6815},"                                   shuffle",[68,33726,869],{"class":102},[68,33728,33069],{"class":92},[68,33730,33059],{"class":85},[68,33732,33733,33736,33738,33740],{"class":70,"line":4191},[68,33734,33735],{"class":6815},"                                   num_workers",[68,33737,869],{"class":102},[68,33739,2131],{"class":92},[68,33741,1757],{"class":85},[68,33743,33744,33746],{"class":70,"line":4199},[68,33745,5689],{"class":102},[68,33747,33748],{"class":85}," train_dataloader,val_dataloader\n",[68,33750,33751],{"class":70,"line":4204},[68,33752,4000],{"emptyLinePlaceholder":1679},[68,33754,33755],{"class":70,"line":4210},[68,33756,33757],{"class":74},"# 验证是否出错\n",[68,33759,33760],{"class":70,"line":4216},[68,33761,33762],{"class":74},"# train_val_data_process()\n",[68,33764,33765],{"class":70,"line":4221},[68,33766,4000],{"emptyLinePlaceholder":1679},[68,33768,33769],{"class":70,"line":9547},[68,33770,33771],{"class":74},"# 定义模型训练函数\n",[68,33773,33774,33776,33779],{"class":70,"line":9571},[68,33775,33540],{"class":102},[68,33777,33778],{"class":587}," train_model_process",[68,33780,33781],{"class":85},"(model,train_dataloader,val_dataloader,num_epochs):\n",[68,33783,33784,33786,33788,33790,33792,33794,33796,33798,33801],{"class":70,"line":9576},[68,33785,32830],{"class":85},[68,33787,869],{"class":102},[68,33789,32044],{"class":85},[68,33791,32837],{"class":872},[68,33793,3306],{"class":102},[68,33795,32842],{"class":85},[68,33797,3303],{"class":102},[68,33799,33800],{"class":872}," 'cpu'",[68,33802,1757],{"class":85},[68,33804,33805],{"class":70,"line":9582},[68,33806,4000],{"emptyLinePlaceholder":1679},[68,33808,33809],{"class":70,"line":9609},[68,33810,4000],{"emptyLinePlaceholder":1679},[68,33812,33813],{"class":70,"line":9614},[68,33814,33815],{"class":74},"    # 定义优化器\n",[68,33817,33818],{"class":70,"line":9620},[68,33819,33820],{"class":74},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[68,33822,33823],{"class":70,"line":9632},[68,33824,33825],{"class":74},"    # lr为学习率\n",[68,33827,33828,33831,33833,33836,33839,33841,33844],{"class":70,"line":9644},[68,33829,33830],{"class":85},"    optimizer",[68,33832,869],{"class":102},[68,33834,33835],{"class":85},"torch.optim.Adam(model.parameters(),",[68,33837,33838],{"class":6815},"lr",[68,33840,869],{"class":102},[68,33842,33843],{"class":92},"0.001",[68,33845,1757],{"class":85},[68,33847,33848],{"class":70,"line":9656},[68,33849,4000],{"emptyLinePlaceholder":1679},[68,33851,33852],{"class":70,"line":11314},[68,33853,33854],{"class":74},"    # 定义损失函数使用交叉熵损失函数\n",[68,33856,33857,33860,33862],{"class":70,"line":11339},[68,33858,33859],{"class":85},"    criterion",[68,33861,869],{"class":102},[68,33863,33864],{"class":85},"nn.CrossEntropyLoss()\n",[68,33866,33867],{"class":70,"line":11362},[68,33868,4000],{"emptyLinePlaceholder":1679},[68,33870,33871],{"class":70,"line":11386},[68,33872,33873],{"class":74},"    # 将模型放到GPU中进行训练\n",[68,33875,33876,33878,33880],{"class":70,"line":11391},[68,33877,32882],{"class":85},[68,33879,869],{"class":102},[68,33881,33882],{"class":85},"model.to(device)\n",[68,33884,33885],{"class":70,"line":11396},[68,33886,33887],{"class":74},"    # 复制当前模型的参数\n",[68,33889,33890],{"class":70,"line":11401},[68,33891,33892],{"class":74},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[68,33894,33895],{"class":70,"line":11410},[68,33896,33897],{"class":74},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[68,33899,33900,33903,33905],{"class":70,"line":11415},[68,33901,33902],{"class":85},"    best_model_wts",[68,33904,869],{"class":102},[68,33906,33907],{"class":85},"copy.deepcopy(model.state_dict())\n",[68,33909,33910],{"class":70,"line":11421},[68,33911,4000],{"emptyLinePlaceholder":1679},[68,33913,33914],{"class":70,"line":11442},[68,33915,4000],{"emptyLinePlaceholder":1679},[68,33917,33918],{"class":70,"line":11448},[68,33919,33920],{"class":74},"    # 初始化参数\n",[68,33922,33923],{"class":70,"line":11462},[68,33924,33925],{"class":74},"    # 最高准确度\n",[68,33927,33928,33931,33933],{"class":70,"line":11468},[68,33929,33930],{"class":85},"    best_acc",[68,33932,869],{"class":102},[68,33934,33935],{"class":92},"0.0\n",[68,33937,33938],{"class":70,"line":11495},[68,33939,33940],{"class":74},"    # 训练集损失列表\n",[68,33942,33943,33946,33948],{"class":70,"line":11504},[68,33944,33945],{"class":85},"    train_loss_all",[68,33947,869],{"class":102},[68,33949,33950],{"class":85},"[]\n",[68,33952,33953],{"class":70,"line":11510},[68,33954,33955],{"class":74},"    # 验证集函数列表\n",[68,33957,33958,33961,33963],{"class":70,"line":11518},[68,33959,33960],{"class":85},"    val_loss_all",[68,33962,869],{"class":102},[68,33964,33950],{"class":85},[68,33966,33967],{"class":70,"line":11523},[68,33968,33969],{"class":74},"    # 训练集准确度列表\n",[68,33971,33972,33975,33977],{"class":70,"line":18199},[68,33973,33974],{"class":85},"    train_acc_all",[68,33976,869],{"class":102},[68,33978,33950],{"class":85},[68,33980,33981],{"class":70,"line":18205},[68,33982,33983],{"class":74},"    # 验证集准确度列表\n",[68,33985,33986,33989,33991],{"class":70,"line":18228},[68,33987,33988],{"class":85},"    val_acc_all",[68,33990,869],{"class":102},[68,33992,33950],{"class":85},[68,33994,33995],{"class":70,"line":18234},[68,33996,4000],{"emptyLinePlaceholder":1679},[68,33998,33999],{"class":70,"line":18257},[68,34000,34001],{"class":74},"    # 保存当前时间--->方便看每轮训练的时间\n",[68,34003,34004,34007,34009],{"class":70,"line":18271},[68,34005,34006],{"class":85},"    since",[68,34008,869],{"class":102},[68,34010,34011],{"class":85},"time.time()\n",[68,34013,34014],{"class":70,"line":18291},[68,34015,4000],{"emptyLinePlaceholder":1679},[68,34017,34018],{"class":70,"line":18297},[68,34019,4000],{"emptyLinePlaceholder":1679},[68,34021,34022],{"class":70,"line":18308},[68,34023,34024],{"class":74},"    # 准备工作完成--->开始训练模型\n",[68,34026,34027,34029,34032,34034,34037],{"class":70,"line":18331},[68,34028,4800],{"class":102},[68,34030,34031],{"class":85}," epoch ",[68,34033,27637],{"class":102},[68,34035,34036],{"class":92}," range",[68,34038,34039],{"class":85},"(num_epochs):\n",[68,34041,34042,34045,34047,34050,34053,34055,34057,34059,34062,34064,34066],{"class":70,"line":18353},[68,34043,34044],{"class":92},"        print",[68,34046,997],{"class":85},[68,34048,34049],{"class":872},"\"Epoch ",[68,34051,34052],{"class":92},"{}",[68,34054,2320],{"class":872},[68,34056,34052],{"class":92},[68,34058,1987],{"class":872},[68,34060,34061],{"class":85},".format(epoch,num_epochs",[68,34063,2268],{"class":102},[68,34065,99],{"class":92},[68,34067,32090],{"class":85},[68,34069,34070,34072,34074,34077,34079,34081],{"class":70,"line":18358},[68,34071,34044],{"class":92},[68,34073,997],{"class":85},[68,34075,34076],{"class":872},"\"-\"",[68,34078,2191],{"class":102},[68,34080,2182],{"class":92},[68,34082,1757],{"class":85},[68,34084,34085],{"class":70,"line":18364},[68,34086,4000],{"emptyLinePlaceholder":1679},[68,34088,34089],{"class":70,"line":18378},[68,34090,34091],{"class":74},"        # 初始化参数\n",[68,34093,34094],{"class":70,"line":18391},[68,34095,34096],{"class":74},"        # 训练集损失函数\n",[68,34098,34099,34102,34104],{"class":70,"line":18396},[68,34100,34101],{"class":85},"        train_loss",[68,34103,869],{"class":102},[68,34105,33935],{"class":92},[68,34107,34108],{"class":70,"line":18410},[68,34109,34110],{"class":74},"        # 训练集准确度\n",[68,34112,34113,34116,34118],{"class":70,"line":18415},[68,34114,34115],{"class":85},"        train_corrects",[68,34117,869],{"class":102},[68,34119,4684],{"class":92},[68,34121,34122],{"class":70,"line":18421},[68,34123,34124],{"class":74},"        # 验证集损失函数\n",[68,34126,34127,34130,34132],{"class":70,"line":18426},[68,34128,34129],{"class":85},"        val_loss",[68,34131,869],{"class":102},[68,34133,33935],{"class":92},[68,34135,34136],{"class":70,"line":18440},[68,34137,34138],{"class":74},"        # 验证集准确度\n",[68,34140,34141,34144,34146],{"class":70,"line":18445},[68,34142,34143],{"class":85},"        val_corrects",[68,34145,869],{"class":102},[68,34147,4684],{"class":92},[68,34149,34150],{"class":70,"line":18450},[68,34151,34152],{"class":74},"        # 训练集样本数量\n",[68,34154,34155,34158,34160],{"class":70,"line":18464},[68,34156,34157],{"class":85},"        train_num",[68,34159,869],{"class":102},[68,34161,4684],{"class":92},[68,34163,34164],{"class":70,"line":18476},[68,34165,34166],{"class":74},"        # 验证集样本数量\n",[68,34168,34169,34172,34174],{"class":70,"line":18481},[68,34170,34171],{"class":85},"        val_num",[68,34173,869],{"class":102},[68,34175,4684],{"class":92},[68,34177,34178],{"class":70,"line":18494},[68,34179,34180],{"class":74},"        # 将数据放到设备,并开始训练\n",[68,34182,34183,34185,34187,34189,34191],{"class":70,"line":18499},[68,34184,5002],{"class":102},[68,34186,33194],{"class":85},[68,34188,27637],{"class":102},[68,34190,33199],{"class":92},[68,34192,34193],{"class":85},"(train_dataloader):\n",[68,34195,34196],{"class":70,"line":18504},[68,34197,34198],{"class":74},"            # 将特征放入到训练设备\n",[68,34200,34201,34204,34206],{"class":70,"line":18509},[68,34202,34203],{"class":85},"            b_x",[68,34205,869],{"class":102},[68,34207,34208],{"class":85},"b_x.to(device)\n",[68,34210,34211],{"class":70,"line":18522},[68,34212,34213],{"class":74},"            # 将标签放入到训练设备当中\n",[68,34215,34216,34219,34221],{"class":70,"line":18527},[68,34217,34218],{"class":85},"            b_y",[68,34220,869],{"class":102},[68,34222,34223],{"class":85},"b_y.to(device)\n",[68,34225,34227],{"class":70,"line":34226},98,[68,34228,34229],{"class":74},"            # 设置模型为训练模式\n",[68,34231,34233],{"class":70,"line":34232},99,[68,34234,34235],{"class":85},"            model.train()\n",[68,34237,34239],{"class":70,"line":34238},100,[68,34240,34241],{"class":74},"            # 将数据放到模型当中,开始前向传播\n",[68,34243,34245],{"class":70,"line":34244},101,[68,34246,34247],{"class":74},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[68,34249,34251,34254,34256],{"class":70,"line":34250},102,[68,34252,34253],{"class":85},"            output",[68,34255,869],{"class":102},[68,34257,34258],{"class":85},"model(b_x)\n",[68,34260,34262],{"class":70,"line":34261},103,[68,34263,34264],{"class":74},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[68,34266,34268,34271,34273,34276,34279,34281,34283],{"class":70,"line":34267},104,[68,34269,34270],{"class":85},"            pre_lab",[68,34272,869],{"class":102},[68,34274,34275],{"class":85},"torch.argmax(output,",[68,34277,34278],{"class":6815},"dim",[68,34280,869],{"class":102},[68,34282,99],{"class":92},[68,34284,1757],{"class":85},[68,34286,34288],{"class":70,"line":34287},105,[68,34289,34290],{"class":74},"            # 计算每一个batch的损失函数\n",[68,34292,34294,34297,34299],{"class":70,"line":34293},106,[68,34295,34296],{"class":85},"            loss",[68,34298,869],{"class":102},[68,34300,34301],{"class":85},"criterion(output,b_y)\n",[68,34303,34305],{"class":70,"line":34304},107,[68,34306,34307],{"class":74},"            # 将梯度初始化为0\n",[68,34309,34311],{"class":70,"line":34310},108,[68,34312,34313],{"class":85},"            optimizer.zero_grad()\n",[68,34315,34317],{"class":70,"line":34316},109,[68,34318,34319],{"class":74},"            # 梯度置为0后再进行反向传播\n",[68,34321,34323],{"class":70,"line":34322},110,[68,34324,34325],{"class":85},"            loss.backward()\n",[68,34327,34329],{"class":70,"line":34328},111,[68,34330,34331],{"class":74},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[68,34333,34335],{"class":70,"line":34334},112,[68,34336,34337],{"class":85},"            optimizer.step()\n",[68,34339,34341],{"class":70,"line":34340},113,[68,34342,34343],{"class":74},"            # loss.item()指的是batch的平均损失\n",[68,34345,34347,34350,34352,34355,34357,34360,34362],{"class":70,"line":34346},114,[68,34348,34349],{"class":85},"            train_loss",[68,34351,11075],{"class":102},[68,34353,34354],{"class":85},"loss.item()",[68,34356,2191],{"class":102},[68,34358,34359],{"class":85},"b_x.size(",[68,34361,600],{"class":92},[68,34363,1757],{"class":85},[68,34365,34367],{"class":70,"line":34366},115,[68,34368,34369],{"class":74},"            # 计算每个批次中正确预测的数量\n",[68,34371,34373,34376,34378,34381,34383],{"class":70,"line":34372},116,[68,34374,34375],{"class":85},"            train_corrects",[68,34377,11075],{"class":102},[68,34379,34380],{"class":85},"torch.sum(pre_lab",[68,34382,4548],{"class":102},[68,34384,34385],{"class":85},"b_y.data)\n",[68,34387,34389],{"class":70,"line":34388},117,[68,34390,34391],{"class":74},"            # 计算目前为止一共处理了多少样本\n",[68,34393,34395,34398,34400,34402,34404],{"class":70,"line":34394},118,[68,34396,34397],{"class":85},"            train_num",[68,34399,11075],{"class":102},[68,34401,34359],{"class":85},[68,34403,600],{"class":92},[68,34405,1757],{"class":85},[68,34407,34409],{"class":70,"line":34408},119,[68,34410,34411],{"class":74},"        # 验证数据\n",[68,34413,34415,34417,34420,34422,34424],{"class":70,"line":34414},120,[68,34416,5002],{"class":102},[68,34418,34419],{"class":85}," step ,(b_x,b_y) ",[68,34421,27637],{"class":102},[68,34423,33199],{"class":92},[68,34425,34426],{"class":85},"(val_dataloader):\n",[68,34428,34430],{"class":70,"line":34429},121,[68,34431,34432],{"class":74},"            # 将特征放到验证设备当中\n",[68,34434,34436,34438,34440],{"class":70,"line":34435},122,[68,34437,34203],{"class":85},[68,34439,869],{"class":102},[68,34441,34208],{"class":85},[68,34443,34445],{"class":70,"line":34444},123,[68,34446,34447],{"class":74},"            # 将标签放到放到训练设备当中\n",[68,34449,34451,34453,34455],{"class":70,"line":34450},124,[68,34452,34218],{"class":85},[68,34454,869],{"class":102},[68,34456,34223],{"class":85},[68,34458,34460],{"class":70,"line":34459},125,[68,34461,34462],{"class":74},"            # 开启验证模式，设置模型为评估模式\n",[68,34464,34466],{"class":70,"line":34465},126,[68,34467,34468],{"class":85},"            model.eval()\n",[68,34470,34472,34475],{"class":70,"line":34471},127,[68,34473,34474],{"class":102},"            with",[68,34476,34477],{"class":85}," torch.no_grad():\n",[68,34479,34481],{"class":70,"line":34480},128,[68,34482,34483],{"class":74},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[68,34485,34487,34490,34492],{"class":70,"line":34486},129,[68,34488,34489],{"class":85},"                output ",[68,34491,869],{"class":102},[68,34493,34494],{"class":85}," model(b_x)\n",[68,34496,34498],{"class":70,"line":34497},130,[68,34499,34500],{"class":74},"                # 查找每一行中最大值对应的下标\n",[68,34502,34504,34507,34509,34512,34514,34516,34518],{"class":70,"line":34503},131,[68,34505,34506],{"class":85},"                pre_lab ",[68,34508,869],{"class":102},[68,34510,34511],{"class":85}," torch.argmax(output, ",[68,34513,34278],{"class":6815},[68,34515,869],{"class":102},[68,34517,99],{"class":92},[68,34519,1757],{"class":85},[68,34521,34523],{"class":70,"line":34522},132,[68,34524,34525],{"class":74},"                # 计算验证集上的当前 batch 损失\n",[68,34527,34529,34532,34534],{"class":70,"line":34528},133,[68,34530,34531],{"class":85},"                val_batch_loss ",[68,34533,869],{"class":102},[68,34535,34536],{"class":85}," criterion(output, b_y)\n",[68,34538,34540],{"class":70,"line":34539},134,[68,34541,34542],{"class":74},"                # 对损失函数进行累加（按样本数加权）\n",[68,34544,34546,34549,34551,34554,34556,34559,34561],{"class":70,"line":34545},135,[68,34547,34548],{"class":85},"                val_loss ",[68,34550,11075],{"class":102},[68,34552,34553],{"class":85}," val_batch_loss.item() ",[68,34555,2191],{"class":102},[68,34557,34558],{"class":85}," b_x.size(",[68,34560,600],{"class":92},[68,34562,1757],{"class":85},[68,34564,34566,34569,34571,34574,34576],{"class":70,"line":34565},136,[68,34567,34568],{"class":85},"                val_corrects ",[68,34570,11075],{"class":102},[68,34572,34573],{"class":85}," torch.sum(pre_lab ",[68,34575,4548],{"class":102},[68,34577,34578],{"class":85}," b_y.data)\n",[68,34580,34582],{"class":70,"line":34581},137,[68,34583,34584],{"class":74},"                # 当前用于验证的样本数量\n",[68,34586,34588,34591,34593,34595,34597],{"class":70,"line":34587},138,[68,34589,34590],{"class":85},"            val_num ",[68,34592,11075],{"class":102},[68,34594,34558],{"class":85},[68,34596,600],{"class":92},[68,34598,1757],{"class":85},[68,34600,34602],{"class":70,"line":34601},139,[68,34603,34604],{"class":74},"        # 计算并保存每一次迭代的loss值和准确率\n",[68,34606,34608],{"class":70,"line":34607},140,[68,34609,34610],{"class":74},"        # 计算并保存训练集的loss值\n",[68,34612,34614,34617,34619],{"class":70,"line":34613},141,[68,34615,34616],{"class":85},"        train_loss_all.append(train_loss",[68,34618,2320],{"class":102},[68,34620,34621],{"class":85},"train_num)\n",[68,34623,34625],{"class":70,"line":34624},142,[68,34626,34627],{"class":74},"        # 取双精度\n",[68,34629,34631],{"class":70,"line":34630},143,[68,34632,34633],{"class":74},"        # 计算并保存训练集的准确率\n",[68,34635,34637,34640,34642],{"class":70,"line":34636},144,[68,34638,34639],{"class":85},"        train_acc_all.append(train_corrects.double().item()",[68,34641,2320],{"class":102},[68,34643,34621],{"class":85},[68,34645,34647],{"class":70,"line":34646},145,[68,34648,34649],{"class":74},"        # 计算并保存验证集的loss值\n",[68,34651,34653,34656,34658],{"class":70,"line":34652},146,[68,34654,34655],{"class":85},"        val_loss_all.append(val_loss",[68,34657,2320],{"class":102},[68,34659,34660],{"class":85},"val_num)\n",[68,34662,34664],{"class":70,"line":34663},147,[68,34665,34666],{"class":74},"        # 计算并保存验证集的准确率\n",[68,34668,34670,34673,34675],{"class":70,"line":34669},148,[68,34671,34672],{"class":85},"        val_acc_all.append(val_corrects.double().item()",[68,34674,2320],{"class":102},[68,34676,34660],{"class":85},[68,34678,34680],{"class":70,"line":34679},149,[68,34681,4000],{"emptyLinePlaceholder":1679},[68,34683,34685],{"class":70,"line":34684},150,[68,34686,34687],{"class":74},"        # 打印训练一轮的loss值和准确率\n",[68,34689,34691,34693,34695,34697,34699,34702,34704,34707,34709,34712,34714,34716,34718,34720,34723,34725,34727,34730,34732,34734],{"class":70,"line":34690},151,[68,34692,34044],{"class":92},[68,34694,997],{"class":85},[68,34696,5191],{"class":872},[68,34698,34052],{"class":92},[68,34700,34701],{"class":872},"train loss:",[68,34703,2632],{"class":92},[68,34705,34706],{"class":102},":.4f",[68,34708,2681],{"class":92},[68,34710,34711],{"class":872}," train acc:",[68,34713,2632],{"class":92},[68,34715,34706],{"class":102},[68,34717,2681],{"class":92},[68,34719,5191],{"class":872},[68,34721,34722],{"class":85},".format(epoch,train_loss_all[",[68,34724,2268],{"class":102},[68,34726,99],{"class":92},[68,34728,34729],{"class":85},"],train_acc_all[",[68,34731,2268],{"class":102},[68,34733,99],{"class":92},[68,34735,34736],{"class":85},"]))\n",[68,34738,34740,34742,34744,34746,34748,34751,34753,34755,34757,34760,34762,34764,34766,34768,34771,34773,34775,34778,34780,34782],{"class":70,"line":34739},152,[68,34741,34044],{"class":92},[68,34743,997],{"class":85},[68,34745,5191],{"class":872},[68,34747,34052],{"class":92},[68,34749,34750],{"class":872},"val loss:",[68,34752,2632],{"class":92},[68,34754,34706],{"class":102},[68,34756,2681],{"class":92},[68,34758,34759],{"class":872}," val acc:",[68,34761,2632],{"class":92},[68,34763,34706],{"class":102},[68,34765,2681],{"class":92},[68,34767,5191],{"class":872},[68,34769,34770],{"class":85},".format(epoch,val_loss_all[",[68,34772,2268],{"class":102},[68,34774,99],{"class":92},[68,34776,34777],{"class":85},"],val_acc_all[",[68,34779,2268],{"class":102},[68,34781,99],{"class":92},[68,34783,34736],{"class":85},[68,34785,34787],{"class":70,"line":34786},153,[68,34788,4000],{"emptyLinePlaceholder":1679},[68,34790,34792],{"class":70,"line":34791},154,[68,34793,34794],{"class":74},"        # 判断准确度--->保存最优模型\n",[68,34796,34798,34800,34803,34805,34807,34809,34811],{"class":70,"line":34797},155,[68,34799,4097],{"class":102},[68,34801,34802],{"class":85}," val_acc_all[",[68,34804,2268],{"class":102},[68,34806,99],{"class":92},[68,34808,2675],{"class":85},[68,34810,2695],{"class":102},[68,34812,34813],{"class":85},"best_acc:\n",[68,34815,34817],{"class":70,"line":34816},156,[68,34818,34819],{"class":74},"            # 保存当前模型准确度\n",[68,34821,34823,34826,34828,34830,34833,34835,34837],{"class":70,"line":34822},157,[68,34824,34825],{"class":85},"            best_acc:",[68,34827,1790],{"class":92},[68,34829,869],{"class":102},[68,34831,34832],{"class":85},"val_acc_all[",[68,34834,2268],{"class":102},[68,34836,99],{"class":92},[68,34838,34839],{"class":85},"]\n",[68,34841,34843],{"class":70,"line":34842},158,[68,34844,34845],{"class":74},"            # 保存当前的准确度\n",[68,34847,34849],{"class":70,"line":34848},159,[68,34850,34851],{"class":74},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[68,34853,34855,34858,34860],{"class":70,"line":34854},160,[68,34856,34857],{"class":85},"            best_model_wts",[68,34859,869],{"class":102},[68,34861,33907],{"class":85},[68,34863,34865],{"class":70,"line":34864},161,[68,34866,4000],{"emptyLinePlaceholder":1679},[68,34868,34870],{"class":70,"line":34869},162,[68,34871,34872],{"class":74},"        # 计算耗时\n",[68,34874,34876,34879,34881,34884,34886],{"class":70,"line":34875},163,[68,34877,34878],{"class":85},"        time_use",[68,34880,869],{"class":102},[68,34882,34883],{"class":85},"time.time()",[68,34885,2268],{"class":102},[68,34887,34888],{"class":85},"since\n",[68,34890,34892,34894,34896,34899,34901,34904,34906,34908,34910,34912,34914,34917,34920,34923,34925,34928,34930,34932],{"class":70,"line":34891},164,[68,34893,34044],{"class":92},[68,34895,997],{"class":85},[68,34897,34898],{"class":872},"'训练和验证耗费的时间",[68,34900,2632],{"class":92},[68,34902,34903],{"class":102},":.0f",[68,34905,2681],{"class":92},[68,34907,2280],{"class":872},[68,34909,2632],{"class":92},[68,34911,34903],{"class":102},[68,34913,2681],{"class":92},[68,34915,34916],{"class":872},"s'",[68,34918,34919],{"class":85},".format(time_use",[68,34921,34922],{"class":102},"\u002F\u002F",[68,34924,2643],{"class":92},[68,34926,34927],{"class":85},",time_use",[68,34929,2064],{"class":102},[68,34931,2643],{"class":92},[68,34933,32090],{"class":85},[68,34935,34937],{"class":70,"line":34936},165,[68,34938,34939],{"class":74},"    # 选择最优参数\n",[68,34941,34943],{"class":70,"line":34942},166,[68,34944,34945],{"class":74},"    # 加载最高准确率下的模型参数\n",[68,34947,34949],{"class":70,"line":34948},167,[68,34950,34951],{"class":74},"    # model.load_state_dict(best_model_wts)\n",[68,34953,34955,34958,34961],{"class":70,"line":34954},168,[68,34956,34957],{"class":85},"    torch.save(model.state_dict(best_model_wts), ",[68,34959,34960],{"class":872},"'.\u002Fbest_model.pth'",[68,34962,1757],{"class":85},[68,34964,34966],{"class":70,"line":34965},169,[68,34967,34968],{"class":74},"    # 或者写成\n",[68,34970,34972],{"class":70,"line":34971},170,[68,34973,34974],{"class":74},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[68,34976,34978],{"class":70,"line":34977},171,[68,34979,34980],{"class":74},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[68,34982,34984,34987,34989,34992,34995,34997],{"class":70,"line":34983},172,[68,34985,34986],{"class":85},"    train_process",[68,34988,869],{"class":102},[68,34990,34991],{"class":85},"pd.DataFrame(",[68,34993,34994],{"class":6815},"data",[68,34996,869],{"class":102},[68,34998,3149],{"class":85},[68,35000,35002,35005,35007,35010],{"class":70,"line":35001},173,[68,35003,35004],{"class":872},"        \"epoch\"",[68,35006,2595],{"class":85},[68,35008,35009],{"class":92},"range",[68,35011,35012],{"class":85},"(num_epochs),\n",[68,35014,35016,35019],{"class":70,"line":35015},174,[68,35017,35018],{"class":872},"        \"train_loss_all\"",[68,35020,35021],{"class":85},":train_loss_all,\n",[68,35023,35025,35028],{"class":70,"line":35024},175,[68,35026,35027],{"class":872},"        \"val_loss_all\"",[68,35029,35030],{"class":85},":val_loss_all,\n",[68,35032,35034,35037],{"class":70,"line":35033},176,[68,35035,35036],{"class":872},"        \"train_acc_all\"",[68,35038,35039],{"class":85},":train_acc_all,\n",[68,35041,35043,35046],{"class":70,"line":35042},177,[68,35044,35045],{"class":872},"        \"val_acc_all\"",[68,35047,35048],{"class":85},":val_acc_all\n",[68,35050,35052],{"class":70,"line":35051},178,[68,35053,35054],{"class":85},"    })\n",[68,35056,35058],{"class":70,"line":35057},179,[68,35059,35060],{"class":74},"    # 返回训练保存的过程\n",[68,35062,35064,35066],{"class":70,"line":35063},180,[68,35065,5689],{"class":102},[68,35067,35068],{"class":85}," train_process\n",[68,35070,35072],{"class":70,"line":35071},181,[68,35073,4000],{"emptyLinePlaceholder":1679},[68,35075,35077],{"class":70,"line":35076},182,[68,35078,35079],{"class":74},"# 将loss值和精度按照图片的形式展示出来\n",[68,35081,35083,35085,35088],{"class":70,"line":35082},183,[68,35084,33540],{"class":102},[68,35086,35087],{"class":587}," matplot_acc_loss",[68,35089,35090],{"class":85},"(train_process):\n",[68,35092,35094],{"class":70,"line":35093},184,[68,35095,35096],{"class":74},"    # 设置图的大小\n",[68,35098,35100,35103,35105,35107,35109,35111,35113,35115],{"class":70,"line":35099},185,[68,35101,35102],{"class":85},"    plt.figure(",[68,35104,33286],{"class":6815},[68,35106,869],{"class":102},[68,35108,997],{"class":85},[68,35110,2234],{"class":92},[68,35112,2114],{"class":85},[68,35114,2029],{"class":92},[68,35116,32090],{"class":85},[68,35118,35120],{"class":70,"line":35119},186,[68,35121,35122],{"class":74},"    # 设置图中有几张图\n",[68,35124,35126],{"class":70,"line":35125},187,[68,35127,35128],{"class":74},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[68,35130,35132],{"class":70,"line":35131},188,[68,35133,35134],{"class":74},"    # ①loss图\n",[68,35136,35138,35140,35142,35144,35146,35148,35150],{"class":70,"line":35137},189,[68,35139,33320],{"class":85},[68,35141,99],{"class":92},[68,35143,2114],{"class":85},[68,35145,267],{"class":92},[68,35147,2114],{"class":85},[68,35149,99],{"class":92},[68,35151,1757],{"class":85},[68,35153,35155],{"class":70,"line":35154},190,[68,35156,35157],{"class":74},"    # 补充:\n",[68,35159,35161],{"class":70,"line":35160},191,[68,35162,35163],{"class":74},"    # plt.subplot(nrows, ncols, index)\n",[68,35165,35167],{"class":70,"line":35166},192,[68,35168,35169],{"class":74},"    # nrows：行数\n",[68,35171,35173],{"class":70,"line":35172},193,[68,35174,35175],{"class":74},"    # ncols：列数\n",[68,35177,35179],{"class":70,"line":35178},194,[68,35180,35181],{"class":74},"    # index：目前选中第几个子图（从1开始）\n",[68,35183,35185,35188,35191,35194,35197,35199,35202,35204,35207],{"class":70,"line":35184},195,[68,35186,35187],{"class":85},"    plt.plot(train_process[",[68,35189,35190],{"class":872},"\"epoch\"",[68,35192,35193],{"class":85},"],train_process.train_loss_all,",[68,35195,35196],{"class":872},"'ro-'",[68,35198,2114],{"class":85},[68,35200,35201],{"class":6815},"label",[68,35203,869],{"class":102},[68,35205,35206],{"class":872},"'train loss'",[68,35208,1757],{"class":85},[68,35210,35212,35214,35216,35219,35222,35224,35226,35228,35231],{"class":70,"line":35211},196,[68,35213,35187],{"class":85},[68,35215,35190],{"class":872},[68,35217,35218],{"class":85},"],train_process.val_loss_all,",[68,35220,35221],{"class":872},"'bs--'",[68,35223,2114],{"class":85},[68,35225,35201],{"class":6815},[68,35227,869],{"class":102},[68,35229,35230],{"class":872},"'val loss'",[68,35232,1757],{"class":85},[68,35234,35236],{"class":70,"line":35235},197,[68,35237,35238],{"class":74},"    # 添加一个图例\n",[68,35240,35242],{"class":70,"line":35241},198,[68,35243,35244],{"class":85},"    plt.legend()\n",[68,35246,35248],{"class":70,"line":35247},199,[68,35249,35250],{"class":74},"    # 给轴添加标签\n",[68,35252,35254,35257,35260],{"class":70,"line":35253},200,[68,35255,35256],{"class":85},"    plt.xlabel(",[68,35258,35259],{"class":872},"'epoch'",[68,35261,1757],{"class":85},[68,35263,35265,35268,35271],{"class":70,"line":35264},201,[68,35266,35267],{"class":85},"    plt.ylabel(",[68,35269,35270],{"class":872},"'loss'",[68,35272,1757],{"class":85},[68,35274,35276],{"class":70,"line":35275},202,[68,35277,35278],{"class":74},"    # ②准确度图\n",[68,35280,35282,35284,35286,35288,35290,35292,35294],{"class":70,"line":35281},203,[68,35283,33320],{"class":85},[68,35285,99],{"class":92},[68,35287,2114],{"class":85},[68,35289,267],{"class":92},[68,35291,2114],{"class":85},[68,35293,267],{"class":92},[68,35295,1757],{"class":85},[68,35297,35299,35301,35303,35306,35308,35310,35312,35314,35317],{"class":70,"line":35298},204,[68,35300,35187],{"class":85},[68,35302,35190],{"class":872},[68,35304,35305],{"class":85},"],train_process.train_acc_all,",[68,35307,35196],{"class":872},[68,35309,2114],{"class":85},[68,35311,35201],{"class":6815},[68,35313,869],{"class":102},[68,35315,35316],{"class":872},"'train acc'",[68,35318,1757],{"class":85},[68,35320,35322,35324,35326,35329,35331,35333,35335,35337,35340],{"class":70,"line":35321},205,[68,35323,35187],{"class":85},[68,35325,35190],{"class":872},[68,35327,35328],{"class":85},"],train_process.val_acc_all,",[68,35330,35221],{"class":872},[68,35332,2114],{"class":85},[68,35334,35201],{"class":6815},[68,35336,869],{"class":102},[68,35338,35339],{"class":872},"'val acc'",[68,35341,1757],{"class":85},[68,35343,35345],{"class":70,"line":35344},206,[68,35346,35347],{"class":74},"    # 添加图例\n",[68,35349,35351],{"class":70,"line":35350},207,[68,35352,35244],{"class":85},[68,35354,35356,35358,35360],{"class":70,"line":35355},208,[68,35357,35256],{"class":85},[68,35359,35190],{"class":872},[68,35361,1757],{"class":85},[68,35363,35365,35367,35370],{"class":70,"line":35364},209,[68,35366,35267],{"class":85},[68,35368,35369],{"class":872},"\"acc\"",[68,35371,1757],{"class":85},[68,35373,35375],{"class":70,"line":35374},210,[68,35376,35377],{"class":85},"    plt.show()\n",[68,35379,35381],{"class":70,"line":35380},211,[68,35382,4000],{"emptyLinePlaceholder":1679},[68,35384,35386],{"class":70,"line":35385},212,[68,35387,35388],{"class":74},"# 正式开始训练:\n",[68,35390,35392,35394,35396,35398,35400],{"class":70,"line":35391},213,[68,35393,3134],{"class":102},[68,35395,32813],{"class":92},[68,35397,4548],{"class":102},[68,35399,32818],{"class":872},[68,35401,5338],{"class":85},[68,35403,35405],{"class":70,"line":35404},214,[68,35406,35407],{"class":74},"    # 将模型实例化\n",[68,35409,35411,35414,35416],{"class":70,"line":35410},215,[68,35412,35413],{"class":85},"    LeNet",[68,35415,869],{"class":102},[68,35417,35418],{"class":85},"LeNet()\n",[68,35420,35422,35425,35427],{"class":70,"line":35421},216,[68,35423,35424],{"class":85},"    train_dataloader,val_dataloader",[68,35426,869],{"class":102},[68,35428,35429],{"class":85},"train_val_data_process()\n",[68,35431,35433,35435,35437,35440,35443,35445,35447],{"class":70,"line":35432},217,[68,35434,34986],{"class":85},[68,35436,869],{"class":102},[68,35438,35439],{"class":85},"train_model_process(LeNet,train_dataloader,val_dataloader,",[68,35441,35442],{"class":6815},"num_epochs",[68,35444,869],{"class":102},[68,35446,2436],{"class":92},[68,35448,1757],{"class":85},[68,35450,35452],{"class":70,"line":35451},218,[68,35453,35454],{"class":85},"    matplot_acc_loss(train_process)\n",[19,35456,35457],{},"画图的补充点学习：",[19,35459,35460],{},[38,35461],{"alt":63,"src":35462},"\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",[48,35464,35465],{"start":89},[51,35466,35467],{},"测试",[58,35469,35471],{"className":31971,"code":35470,"language":31973,"meta":63,"style":63},"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",[65,35472,35473,35479,35489,35501,35511,35516,35526,35536,35540,35545,35554,35571,35583,35600,35611,35627,35632,35643,35654,35665,35672,35676,35681,35691,35696,35713,35721,35725,35730,35739,35748,35752,35757,35762,35767,35774,35779,35791,35801,35811,35816,35820,35825,35834,35839,35855,35860,35865,35870,35884,35889,35903,35907,35912,35927,35932,35944,35948,35953,35965,35970,35978,35983,35988,35998,36003,36012,36017,36022,36026,36031,36036,36052,36060,36065,36070,36129,36135,36140,36151,36159,36167,36171,36176,36180,36185,36193,36198,36214,36219,36229,36239],{"__ignoreMap":63},[68,35474,35475,35477],{"class":70,"line":71},[68,35476,31985],{"class":102},[68,35478,31988],{"class":85},[68,35480,35481,35483,35485,35487],{"class":70,"line":78},[68,35482,31985],{"class":102},[68,35484,33008],{"class":85},[68,35486,32976],{"class":102},[68,35488,33013],{"class":85},[68,35490,35491,35493,35496,35498],{"class":70,"line":89},[68,35492,32330],{"class":102},[68,35494,35495],{"class":85}," jupyter_client.consoleapp ",[68,35497,31985],{"class":102},[68,35499,35500],{"class":85}," classes\n",[68,35502,35503,35505,35507,35509],{"class":70,"line":115},[68,35504,32330],{"class":102},[68,35506,32991],{"class":85},[68,35508,31985],{"class":102},[68,35510,32996],{"class":85},[68,35512,35513],{"class":70,"line":280},[68,35514,35515],{"class":74},"# 导入数据集\n",[68,35517,35518,35520,35522,35524],{"class":70,"line":301},[68,35519,32330],{"class":102},[68,35521,32961],{"class":85},[68,35523,31985],{"class":102},[68,35525,32966],{"class":85},[68,35527,35528,35530,35532,35534],{"class":70,"line":320},[68,35529,32330],{"class":102},[68,35531,33507],{"class":85},[68,35533,31985],{"class":102},[68,35535,33512],{"class":85},[68,35537,35538],{"class":70,"line":2915},[68,35539,4000],{"emptyLinePlaceholder":1679},[68,35541,35542],{"class":70,"line":2921},[68,35543,35544],{"class":74},"# 测试数据处理\n",[68,35546,35547,35549,35552],{"class":70,"line":2933},[68,35548,33540],{"class":102},[68,35550,35551],{"class":587}," test_data_process",[68,35553,33546],{"class":85},[68,35555,35556,35559,35561,35563,35565,35567,35569],{"class":70,"line":3214},[68,35557,35558],{"class":85},"    test_data",[68,35560,869],{"class":102},[68,35562,33048],{"class":85},[68,35564,33051],{"class":6815},[68,35566,869],{"class":102},[68,35568,33056],{"class":872},[68,35570,33059],{"class":85},[68,35572,35573,35576,35578,35581],{"class":70,"line":3219},[68,35574,35575],{"class":6815},"                           train",[68,35577,869],{"class":102},[68,35579,35580],{"class":92},"False",[68,35582,33059],{"class":85},[68,35584,35585,35588,35590,35592,35594,35596,35598],{"class":70,"line":3225},[68,35586,35587],{"class":6815},"                           transform",[68,35589,869],{"class":102},[68,35591,33086],{"class":85},[68,35593,33089],{"class":6815},[68,35595,869],{"class":102},[68,35597,2637],{"class":92},[68,35599,33097],{"class":85},[68,35601,35602,35605,35607,35609],{"class":70,"line":3230},[68,35603,35604],{"class":6815},"                           download",[68,35606,869],{"class":102},[68,35608,33069],{"class":92},[68,35610,1757],{"class":85},[68,35612,35613,35616,35618,35620,35622,35624],{"class":70,"line":3244},[68,35614,35615],{"class":85},"    test_dataloader",[68,35617,869],{"class":102},[68,35619,33127],{"class":85},[68,35621,33130],{"class":6815},[68,35623,869],{"class":102},[68,35625,35626],{"class":85},"test_data,\n",[68,35628,35629],{"class":70,"line":3249},[68,35630,35631],{"class":74},"                                    # 这里是一张一张进行测试\n",[68,35633,35634,35637,35639,35641],{"class":70,"line":3255},[68,35635,35636],{"class":6815},"                                    batch_size",[68,35638,869],{"class":102},[68,35640,99],{"class":92},[68,35642,33059],{"class":85},[68,35644,35645,35648,35650,35652],{"class":70,"line":3276},[68,35646,35647],{"class":6815},"                                    shuffle",[68,35649,869],{"class":102},[68,35651,33069],{"class":92},[68,35653,33059],{"class":85},[68,35655,35656,35659,35661,35663],{"class":70,"line":3281},[68,35657,35658],{"class":6815},"                                    num_workers",[68,35660,869],{"class":102},[68,35662,600],{"class":92},[68,35664,1757],{"class":85},[68,35666,35667,35669],{"class":70,"line":3295},[68,35668,5689],{"class":102},[68,35670,35671],{"class":85}," test_dataloader\n",[68,35673,35674],{"class":70,"line":3300},[68,35675,4000],{"emptyLinePlaceholder":1679},[68,35677,35678],{"class":70,"line":3329},[68,35679,35680],{"class":74},"# 定义模型测试函数\n",[68,35682,35683,35685,35688],{"class":70,"line":3334},[68,35684,33540],{"class":102},[68,35686,35687],{"class":587}," test_model_process",[68,35689,35690],{"class":85},"(model,test_dataloader):\n",[68,35692,35693],{"class":70,"line":3351},[68,35694,35695],{"class":74},"    # 将模型放到设备当中，先进行判断\n",[68,35697,35698,35700,35702,35704,35706,35708,35710],{"class":70,"line":3356},[68,35699,32830],{"class":85},[68,35701,869],{"class":102},[68,35703,32837],{"class":872},[68,35705,3306],{"class":102},[68,35707,32842],{"class":85},[68,35709,3303],{"class":102},[68,35711,35712],{"class":872}," \"cpu\"\n",[68,35714,35715,35717,35719],{"class":70,"line":3361},[68,35716,32882],{"class":85},[68,35718,869],{"class":102},[68,35720,33882],{"class":85},[68,35722,35723],{"class":70,"line":3366},[68,35724,4000],{"emptyLinePlaceholder":1679},[68,35726,35727],{"class":70,"line":3380},[68,35728,35729],{"class":74},"    # 设置初始化参数\n",[68,35731,35732,35735,35737],{"class":70,"line":3385},[68,35733,35734],{"class":85},"    test_corrects",[68,35736,869],{"class":102},[68,35738,33935],{"class":92},[68,35740,35741,35744,35746],{"class":70,"line":4177},[68,35742,35743],{"class":85},"    test_num",[68,35745,869],{"class":102},[68,35747,4684],{"class":92},[68,35749,35750],{"class":70,"line":4191},[68,35751,4000],{"emptyLinePlaceholder":1679},[68,35753,35754],{"class":70,"line":4199},[68,35755,35756],{"class":74},"    # 进行模型测试\n",[68,35758,35759],{"class":70,"line":4204},[68,35760,35761],{"class":74},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[68,35763,35764],{"class":70,"line":4210},[68,35765,35766],{"class":74},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[68,35768,35769,35772],{"class":70,"line":4216},[68,35770,35771],{"class":102},"    with",[68,35773,34477],{"class":85},[68,35775,35776],{"class":70,"line":4221},[68,35777,35778],{"class":74},"        # 从数据中进行\n",[68,35780,35781,35783,35786,35788],{"class":70,"line":9547},[68,35782,5002],{"class":102},[68,35784,35785],{"class":85}," test_data_x,test_data_y ",[68,35787,27637],{"class":102},[68,35789,35790],{"class":85}," test_dataloader:\n",[68,35792,35793,35796,35798],{"class":70,"line":9571},[68,35794,35795],{"class":85},"            test_data_x",[68,35797,869],{"class":102},[68,35799,35800],{"class":85},"test_data_x.to(device)\n",[68,35802,35803,35806,35808],{"class":70,"line":9576},[68,35804,35805],{"class":85},"            test_data_y",[68,35807,869],{"class":102},[68,35809,35810],{"class":85},"test_data_y.to(device)\n",[68,35812,35813],{"class":70,"line":9582},[68,35814,35815],{"class":74},"            # 设置为验证模式\n",[68,35817,35818],{"class":70,"line":9609},[68,35819,34468],{"class":85},[68,35821,35822],{"class":70,"line":9614},[68,35823,35824],{"class":74},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[68,35826,35827,35829,35831],{"class":70,"line":9620},[68,35828,34253],{"class":85},[68,35830,869],{"class":102},[68,35832,35833],{"class":85},"model(test_data_x)\n",[68,35835,35836],{"class":70,"line":9632},[68,35837,35838],{"class":74},"            # 查找每一行中最大值对应的下标\n",[68,35840,35841,35843,35845,35847,35849,35851,35853],{"class":70,"line":9644},[68,35842,34270],{"class":85},[68,35844,869],{"class":102},[68,35846,34275],{"class":85},[68,35848,34278],{"class":6815},[68,35850,869],{"class":102},[68,35852,99],{"class":92},[68,35854,1757],{"class":85},[68,35856,35857],{"class":70,"line":9656},[68,35858,35859],{"class":74},"            # 计算正确率\n",[68,35861,35862],{"class":70,"line":11314},[68,35863,35864],{"class":74},"            # .data表示是一个不带梯度信息的tensor\n",[68,35866,35867],{"class":70,"line":11339},[68,35868,35869],{"class":74},"            # 如果预测正确，则准确度test_corrects加1\n",[68,35871,35872,35875,35877,35879,35881],{"class":70,"line":11362},[68,35873,35874],{"class":85},"            test_corrects",[68,35876,11075],{"class":102},[68,35878,34380],{"class":85},[68,35880,4548],{"class":102},[68,35882,35883],{"class":85},"test_data_y.data)\n",[68,35885,35886],{"class":70,"line":11386},[68,35887,35888],{"class":74},"            # 将所有的测试样本进行累计\n",[68,35890,35891,35894,35896,35899,35901],{"class":70,"line":11391},[68,35892,35893],{"class":85},"            test_num",[68,35895,11075],{"class":102},[68,35897,35898],{"class":85},"test_data_x.size(",[68,35900,600],{"class":92},[68,35902,1757],{"class":85},[68,35904,35905],{"class":70,"line":11396},[68,35906,4000],{"emptyLinePlaceholder":1679},[68,35908,35909],{"class":70,"line":11401},[68,35910,35911],{"class":74},"        # 计算准确度\n",[68,35913,35914,35917,35919,35922,35924],{"class":70,"line":11410},[68,35915,35916],{"class":85},"        test_acc",[68,35918,869],{"class":102},[68,35920,35921],{"class":85},"test_corrects.double().item()",[68,35923,2320],{"class":102},[68,35925,35926],{"class":85},"test_num\n",[68,35928,35929],{"class":70,"line":11415},[68,35930,35931],{"class":74},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[68,35933,35934,35936,35938,35941],{"class":70,"line":11421},[68,35935,34044],{"class":92},[68,35937,997],{"class":85},[68,35939,35940],{"class":872},"\"测试的准确率：\"",[68,35942,35943],{"class":85},",test_acc)\n",[68,35945,35946],{"class":70,"line":11442},[68,35947,4000],{"emptyLinePlaceholder":1679},[68,35949,35950],{"class":70,"line":11448},[68,35951,35952],{"class":74},"# 实现模型的测试功能\n",[68,35954,35955,35957,35959,35961,35963],{"class":70,"line":11462},[68,35956,3134],{"class":102},[68,35958,32813],{"class":92},[68,35960,4548],{"class":102},[68,35962,32818],{"class":872},[68,35964,5338],{"class":85},[68,35966,35967],{"class":70,"line":11468},[68,35968,35969],{"class":74},"    # 加载模型\n",[68,35971,35972,35974,35976],{"class":70,"line":11495},[68,35973,32882],{"class":85},[68,35975,869],{"class":102},[68,35977,35418],{"class":85},[68,35979,35980],{"class":70,"line":11504},[68,35981,35982],{"class":74},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[68,35984,35985],{"class":70,"line":11510},[68,35986,35987],{"class":74},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[68,35989,35990,35993,35996],{"class":70,"line":11518},[68,35991,35992],{"class":85},"    model.load_state_dict(torch.load(",[68,35994,35995],{"class":872},"'best_model.pth'",[68,35997,32090],{"class":85},[68,35999,36000],{"class":70,"line":11523},[68,36001,36002],{"class":74},"    # 数据加载\n",[68,36004,36005,36007,36009],{"class":70,"line":18199},[68,36006,35615],{"class":85},[68,36008,869],{"class":102},[68,36010,36011],{"class":85},"test_data_process()\n",[68,36013,36014],{"class":70,"line":18205},[68,36015,36016],{"class":74},"    # 加载模型测试的函数\n",[68,36018,36019],{"class":70,"line":18228},[68,36020,36021],{"class":85},"    test_model_process(model,test_dataloader)\n",[68,36023,36024],{"class":70,"line":18234},[68,36025,4000],{"emptyLinePlaceholder":1679},[68,36027,36028],{"class":70,"line":18257},[68,36029,36030],{"class":74},"    # 验证集推理实现：\n",[68,36032,36033],{"class":70,"line":18271},[68,36034,36035],{"class":74},"    # 加载数据加载的更详细一些\n",[68,36037,36038,36040,36042,36044,36046,36048,36050],{"class":70,"line":18291},[68,36039,32830],{"class":85},[68,36041,869],{"class":102},[68,36043,32837],{"class":872},[68,36045,3306],{"class":102},[68,36047,32842],{"class":85},[68,36049,3303],{"class":102},[68,36051,35712],{"class":872},[68,36053,36054,36056,36058],{"class":70,"line":18297},[68,36055,32882],{"class":85},[68,36057,869],{"class":102},[68,36059,33882],{"class":85},[68,36061,36062],{"class":70,"line":18308},[68,36063,36064],{"class":74},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[68,36066,36067],{"class":70,"line":18331},[68,36068,36069],{"class":74},"    # 顺序不可改变\n",[68,36071,36072,36075,36077,36079,36082,36084,36087,36089,36092,36094,36097,36099,36102,36104,36107,36109,36112,36114,36117,36119,36122,36124,36127],{"class":70,"line":18353},[68,36073,36074],{"class":85},"    classes",[68,36076,869],{"class":102},[68,36078,2626],{"class":85},[68,36080,36081],{"class":872},"'T-shirt\u002Ftop'",[68,36083,2114],{"class":85},[68,36085,36086],{"class":872},"'Trouser'",[68,36088,2114],{"class":85},[68,36090,36091],{"class":872},"'Pullover'",[68,36093,2114],{"class":85},[68,36095,36096],{"class":872},"'Dress'",[68,36098,2114],{"class":85},[68,36100,36101],{"class":872},"'Coat'",[68,36103,2114],{"class":85},[68,36105,36106],{"class":872},"'Sandal'",[68,36108,2114],{"class":85},[68,36110,36111],{"class":872},"'Shirt'",[68,36113,2114],{"class":85},[68,36115,36116],{"class":872},"'Sneaker'",[68,36118,2114],{"class":85},[68,36120,36121],{"class":872},"'Bag'",[68,36123,2114],{"class":85},[68,36125,36126],{"class":872},"'Ankle boot'",[68,36128,34839],{"class":85},[68,36130,36131,36133],{"class":70,"line":18358},[68,36132,35771],{"class":102},[68,36134,34477],{"class":85},[68,36136,36137],{"class":70,"line":18364},[68,36138,36139],{"class":74},"        # 将数据和标签都放到设备当中\n",[68,36141,36142,36144,36147,36149],{"class":70,"line":18378},[68,36143,5002],{"class":102},[68,36145,36146],{"class":85}," b_x,b_y ",[68,36148,27637],{"class":102},[68,36150,35790],{"class":85},[68,36152,36153,36155,36157],{"class":70,"line":18391},[68,36154,34203],{"class":85},[68,36156,869],{"class":102},[68,36158,34208],{"class":85},[68,36160,36161,36163,36165],{"class":70,"line":18396},[68,36162,34218],{"class":85},[68,36164,869],{"class":102},[68,36166,34223],{"class":85},[68,36168,36169],{"class":70,"line":18410},[68,36170,4000],{"emptyLinePlaceholder":1679},[68,36172,36173],{"class":70,"line":18415},[68,36174,36175],{"class":74},"            # 设置模型为验证模式\n",[68,36177,36178],{"class":70,"line":18421},[68,36179,34468],{"class":85},[68,36181,36182],{"class":70,"line":18426},[68,36183,36184],{"class":74},"            # 模型推理结果\n",[68,36186,36187,36189,36191],{"class":70,"line":18440},[68,36188,34253],{"class":85},[68,36190,869],{"class":102},[68,36192,34258],{"class":85},[68,36194,36195],{"class":70,"line":18445},[68,36196,36197],{"class":74},"            # 获取最大下标，最大下标就是类别号\n",[68,36199,36200,36202,36204,36206,36208,36210,36212],{"class":70,"line":18450},[68,36201,34270],{"class":85},[68,36203,869],{"class":102},[68,36205,34275],{"class":85},[68,36207,34278],{"class":6815},[68,36209,869],{"class":102},[68,36211,99],{"class":92},[68,36213,1757],{"class":85},[68,36215,36216],{"class":70,"line":18464},[68,36217,36218],{"class":74},"            # 取出张量中的数值\n",[68,36220,36221,36224,36226],{"class":70,"line":18476},[68,36222,36223],{"class":85},"            result",[68,36225,869],{"class":102},[68,36227,36228],{"class":85},"pre_lab.item()\n",[68,36230,36231,36234,36236],{"class":70,"line":18481},[68,36232,36233],{"class":85},"            label",[68,36235,869],{"class":102},[68,36237,36238],{"class":85},"b_y.item()\n",[68,36240,36241,36244,36246,36249,36252,36255,36257,36260],{"class":70,"line":18494},[68,36242,36243],{"class":92},"            print",[68,36245,997],{"class":85},[68,36247,36248],{"class":872},"\"预测值：\"",[68,36250,36251],{"class":85},",classes[result],",[68,36253,36254],{"class":872},"\"------\"",[68,36256,2114],{"class":85},[68,36258,36259],{"class":872},"\"真实值：\"",[68,36261,36262],{"class":85},",classes[label])\n",[19,36264,36265],{},"（2）AlexNet",[48,36267,36268],{},[51,36269,36270],{},"神经网络构建",[58,36272,36274],{"className":31971,"code":36273,"language":31973,"meta":63,"style":63},"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",[65,36275,36276,36282,36292,36302,36314,36318,36335,36343,36358,36370,36412,36439,36482,36508,36552,36595,36638,36665,36669,36679,36684,36712,36731,36750,36754,36759,36767,36782,36792,36806,36816,36831,36846,36861,36872,36876,36881,36891,36906,36911,36925,36940,36952,36957,36968,36973,36979,36984,36996,37016,37021,37030],{"__ignoreMap":63},[68,36277,36278,36280],{"class":70,"line":71},[68,36279,31985],{"class":102},[68,36281,31988],{"class":85},[68,36283,36284,36286,36288,36290],{"class":70,"line":78},[68,36285,32330],{"class":102},[68,36287,32333],{"class":85},[68,36289,31985],{"class":102},[68,36291,32338],{"class":85},[68,36293,36294,36296,36298,36300],{"class":70,"line":89},[68,36295,32330],{"class":102},[68,36297,32350],{"class":85},[68,36299,31985],{"class":102},[68,36301,32355],{"class":85},[68,36303,36304,36306,36309,36311],{"class":70,"line":115},[68,36305,31985],{"class":102},[68,36307,36308],{"class":85}," torch.nn.functional ",[68,36310,32976],{"class":102},[68,36312,36313],{"class":85}," F\n",[68,36315,36316],{"class":70,"line":280},[68,36317,4000],{"emptyLinePlaceholder":1679},[68,36319,36320,36322,36325,36327,36329,36331,36333],{"class":70,"line":301},[68,36321,16291],{"class":102},[68,36323,36324],{"class":587}," AlexNet",[68,36326,997],{"class":85},[68,36328,32371],{"class":587},[68,36330,2294],{"class":85},[68,36332,32376],{"class":587},[68,36334,32379],{"class":85},[68,36336,36337,36339,36341],{"class":70,"line":320},[68,36338,32394],{"class":102},[68,36340,32397],{"class":92},[68,36342,32400],{"class":85},[68,36344,36345,36347,36350,36352,36354,36356],{"class":70,"line":2915},[68,36346,32410],{"class":92},[68,36348,36349],{"class":85},"(AlexNet,",[68,36351,32416],{"class":92},[68,36353,32419],{"class":85},[68,36355,32422],{"class":92},[68,36357,3577],{"class":85},[68,36359,36360,36362,36365,36367],{"class":70,"line":2921},[68,36361,32438],{"class":92},[68,36363,36364],{"class":85},".ReLu",[68,36366,869],{"class":102},[68,36368,36369],{"class":85},"nn.ReLU()\n",[68,36371,36372,36374,36376,36378,36380,36382,36384,36386,36388,36390,36392,36394,36396,36398,36400,36402,36404,36406,36408,36410],{"class":70,"line":2933},[68,36373,32438],{"class":92},[68,36375,32441],{"class":85},[68,36377,869],{"class":102},[68,36379,32446],{"class":85},[68,36381,32449],{"class":6815},[68,36383,869],{"class":102},[68,36385,99],{"class":92},[68,36387,2114],{"class":85},[68,36389,32458],{"class":6815},[68,36391,869],{"class":102},[68,36393,1946],{"class":92},[68,36395,2114],{"class":85},[68,36397,32467],{"class":6815},[68,36399,869],{"class":102},[68,36401,2208],{"class":92},[68,36403,2114],{"class":85},[68,36405,32522],{"class":6815},[68,36407,869],{"class":102},[68,36409,2029],{"class":92},[68,36411,1757],{"class":85},[68,36413,36414,36416,36418,36420,36423,36425,36427,36429,36431,36433,36435,36437],{"class":70,"line":3214},[68,36415,32438],{"class":92},[68,36417,32506],{"class":85},[68,36419,869],{"class":102},[68,36421,36422],{"class":85},"nn.MaxPool2d(",[68,36424,32467],{"class":6815},[68,36426,869],{"class":102},[68,36428,288],{"class":92},[68,36430,2114],{"class":85},[68,36432,32522],{"class":6815},[68,36434,869],{"class":102},[68,36436,267],{"class":92},[68,36438,1757],{"class":85},[68,36440,36441,36443,36445,36447,36449,36451,36453,36455,36457,36459,36461,36464,36466,36468,36470,36472,36474,36476,36478,36480],{"class":70,"line":3219},[68,36442,32438],{"class":92},[68,36444,32535],{"class":85},[68,36446,869],{"class":102},[68,36448,32446],{"class":85},[68,36450,32449],{"class":6815},[68,36452,869],{"class":102},[68,36454,1946],{"class":92},[68,36456,2114],{"class":85},[68,36458,32458],{"class":6815},[68,36460,869],{"class":102},[68,36462,36463],{"class":92},"256",[68,36465,2114],{"class":85},[68,36467,32467],{"class":6815},[68,36469,869],{"class":102},[68,36471,2055],{"class":92},[68,36473,2114],{"class":85},[68,36475,32476],{"class":6815},[68,36477,869],{"class":102},[68,36479,267],{"class":92},[68,36481,1757],{"class":85},[68,36483,36484,36486,36488,36490,36492,36494,36496,36498,36500,36502,36504,36506],{"class":70,"line":3225},[68,36485,32438],{"class":92},[68,36487,32570],{"class":85},[68,36489,869],{"class":102},[68,36491,36422],{"class":85},[68,36493,32467],{"class":6815},[68,36495,869],{"class":102},[68,36497,288],{"class":92},[68,36499,2114],{"class":85},[68,36501,32522],{"class":6815},[68,36503,869],{"class":102},[68,36505,267],{"class":92},[68,36507,1757],{"class":85},[68,36509,36510,36512,36515,36517,36519,36521,36523,36525,36527,36529,36531,36534,36536,36538,36540,36542,36544,36546,36548,36550],{"class":70,"line":3230},[68,36511,32438],{"class":92},[68,36513,36514],{"class":85},".c5",[68,36516,869],{"class":102},[68,36518,32446],{"class":85},[68,36520,32449],{"class":6815},[68,36522,869],{"class":102},[68,36524,36463],{"class":92},[68,36526,2114],{"class":85},[68,36528,32458],{"class":6815},[68,36530,869],{"class":102},[68,36532,36533],{"class":92},"384",[68,36535,2114],{"class":85},[68,36537,32467],{"class":6815},[68,36539,869],{"class":102},[68,36541,288],{"class":92},[68,36543,2114],{"class":85},[68,36545,32476],{"class":6815},[68,36547,869],{"class":102},[68,36549,99],{"class":92},[68,36551,1757],{"class":85},[68,36553,36554,36556,36559,36561,36563,36565,36567,36569,36571,36573,36575,36577,36579,36581,36583,36585,36587,36589,36591,36593],{"class":70,"line":3244},[68,36555,32438],{"class":92},[68,36557,36558],{"class":85},".c6",[68,36560,869],{"class":102},[68,36562,32446],{"class":85},[68,36564,32449],{"class":6815},[68,36566,869],{"class":102},[68,36568,36533],{"class":92},[68,36570,2114],{"class":85},[68,36572,32458],{"class":6815},[68,36574,869],{"class":102},[68,36576,36533],{"class":92},[68,36578,2114],{"class":85},[68,36580,32467],{"class":6815},[68,36582,869],{"class":102},[68,36584,288],{"class":92},[68,36586,2114],{"class":85},[68,36588,32476],{"class":6815},[68,36590,869],{"class":102},[68,36592,99],{"class":92},[68,36594,1757],{"class":85},[68,36596,36597,36599,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636],{"class":70,"line":3249},[68,36598,32438],{"class":92},[68,36600,36601],{"class":85},".c7",[68,36603,869],{"class":102},[68,36605,32446],{"class":85},[68,36607,32449],{"class":6815},[68,36609,869],{"class":102},[68,36611,36533],{"class":92},[68,36613,2114],{"class":85},[68,36615,32458],{"class":6815},[68,36617,869],{"class":102},[68,36619,36463],{"class":92},[68,36621,2114],{"class":85},[68,36623,32467],{"class":6815},[68,36625,869],{"class":102},[68,36627,288],{"class":92},[68,36629,2114],{"class":85},[68,36631,32476],{"class":6815},[68,36633,869],{"class":102},[68,36635,99],{"class":92},[68,36637,1757],{"class":85},[68,36639,36640,36642,36645,36647,36649,36651,36653,36655,36657,36659,36661,36663],{"class":70,"line":3255},[68,36641,32438],{"class":92},[68,36643,36644],{"class":85},".s8",[68,36646,869],{"class":102},[68,36648,36422],{"class":85},[68,36650,32467],{"class":6815},[68,36652,869],{"class":102},[68,36654,288],{"class":92},[68,36656,2114],{"class":85},[68,36658,32522],{"class":6815},[68,36660,869],{"class":102},[68,36662,267],{"class":92},[68,36664,1757],{"class":85},[68,36666,36667],{"class":70,"line":3276},[68,36668,32595],{"class":74},[68,36670,36671,36673,36675,36677],{"class":70,"line":3281},[68,36672,32438],{"class":92},[68,36674,32602],{"class":85},[68,36676,869],{"class":102},[68,36678,32607],{"class":85},[68,36680,36681],{"class":70,"line":3295},[68,36682,36683],{"class":74},"       # 定义全连接层\n",[68,36685,36686,36688,36691,36693,36695,36697,36699,36701,36703,36705,36707,36710],{"class":70,"line":3300},[68,36687,32438],{"class":92},[68,36689,36690],{"class":85},".f1",[68,36692,869],{"class":102},[68,36694,32624],{"class":85},[68,36696,2080],{"class":92},[68,36698,2191],{"class":102},[68,36700,2080],{"class":92},[68,36702,2191],{"class":102},[68,36704,36463],{"class":92},[68,36706,2114],{"class":85},[68,36708,36709],{"class":92},"4096",[68,36711,1757],{"class":85},[68,36713,36714,36716,36719,36721,36723,36725,36727,36729],{"class":70,"line":3329},[68,36715,32438],{"class":92},[68,36717,36718],{"class":85},".f2",[68,36720,869],{"class":102},[68,36722,32624],{"class":85},[68,36724,36709],{"class":92},[68,36726,2114],{"class":85},[68,36728,36709],{"class":92},[68,36730,1757],{"class":85},[68,36732,36733,36735,36738,36740,36742,36744,36746,36748],{"class":70,"line":3334},[68,36734,32438],{"class":92},[68,36736,36737],{"class":85},".f3",[68,36739,869],{"class":102},[68,36741,32624],{"class":85},[68,36743,36709],{"class":92},[68,36745,2114],{"class":85},[68,36747,2182],{"class":92},[68,36749,1757],{"class":85},[68,36751,36752],{"class":70,"line":3351},[68,36753,4000],{"emptyLinePlaceholder":1679},[68,36755,36756],{"class":70,"line":3356},[68,36757,36758],{"class":74},"    # 定义前向传播\n",[68,36760,36761,36763,36765],{"class":70,"line":3361},[68,36762,32394],{"class":102},[68,36764,32686],{"class":587},[68,36766,32689],{"class":85},[68,36768,36769,36771,36773,36775,36778,36780],{"class":70,"line":3366},[68,36770,32694],{"class":85},[68,36772,869],{"class":102},[68,36774,32416],{"class":92},[68,36776,36777],{"class":85},".ReLu(",[68,36779,32416],{"class":92},[68,36781,32706],{"class":85},[68,36783,36784,36786,36788,36790],{"class":70,"line":3380},[68,36785,32694],{"class":85},[68,36787,869],{"class":102},[68,36789,32416],{"class":92},[68,36791,32717],{"class":85},[68,36793,36794,36796,36798,36800,36802,36804],{"class":70,"line":3385},[68,36795,32694],{"class":85},[68,36797,869],{"class":102},[68,36799,32416],{"class":92},[68,36801,36777],{"class":85},[68,36803,32416],{"class":92},[68,36805,32732],{"class":85},[68,36807,36808,36810,36812,36814],{"class":70,"line":4177},[68,36809,32694],{"class":85},[68,36811,869],{"class":102},[68,36813,32416],{"class":92},[68,36815,32743],{"class":85},[68,36817,36818,36820,36822,36824,36826,36828],{"class":70,"line":4191},[68,36819,32694],{"class":85},[68,36821,869],{"class":102},[68,36823,32416],{"class":92},[68,36825,36777],{"class":85},[68,36827,32416],{"class":92},[68,36829,36830],{"class":85},".c5(x))\n",[68,36832,36833,36835,36837,36839,36841,36843],{"class":70,"line":4199},[68,36834,32694],{"class":85},[68,36836,869],{"class":102},[68,36838,32416],{"class":92},[68,36840,36777],{"class":85},[68,36842,32416],{"class":92},[68,36844,36845],{"class":85},".c6(x))\n",[68,36847,36848,36850,36852,36854,36856,36858],{"class":70,"line":4204},[68,36849,32694],{"class":85},[68,36851,869],{"class":102},[68,36853,32416],{"class":92},[68,36855,36777],{"class":85},[68,36857,32416],{"class":92},[68,36859,36860],{"class":85},".c7(x))\n",[68,36862,36863,36865,36867,36869],{"class":70,"line":4210},[68,36864,32694],{"class":85},[68,36866,869],{"class":102},[68,36868,32416],{"class":92},[68,36870,36871],{"class":85},".s8(x)\n",[68,36873,36874],{"class":70,"line":4216},[68,36875,4000],{"emptyLinePlaceholder":1679},[68,36877,36878],{"class":70,"line":4221},[68,36879,36880],{"class":74},"        # 展平加线性全连接层\n",[68,36882,36883,36885,36887,36889],{"class":70,"line":9547},[68,36884,32694],{"class":85},[68,36886,869],{"class":102},[68,36888,32416],{"class":92},[68,36890,32754],{"class":85},[68,36892,36893,36895,36897,36899,36901,36903],{"class":70,"line":9571},[68,36894,32694],{"class":85},[68,36896,869],{"class":102},[68,36898,32416],{"class":92},[68,36900,36777],{"class":85},[68,36902,32416],{"class":92},[68,36904,36905],{"class":85},".f1(x))\n",[68,36907,36908],{"class":70,"line":9576},[68,36909,36910],{"class":74},"        # 还需要dropout对神经元随机进行失活\n",[68,36912,36913,36915,36917,36920,36923],{"class":70,"line":9582},[68,36914,32694],{"class":85},[68,36916,869],{"class":102},[68,36918,36919],{"class":85},"F.dropout(x,",[68,36921,36922],{"class":92},"0.5",[68,36924,1757],{"class":85},[68,36926,36927,36929,36931,36933,36935,36937],{"class":70,"line":9609},[68,36928,32694],{"class":85},[68,36930,869],{"class":102},[68,36932,32416],{"class":92},[68,36934,36777],{"class":85},[68,36936,32416],{"class":92},[68,36938,36939],{"class":85},".f2(x))\n",[68,36941,36942,36944,36946,36948,36950],{"class":70,"line":9614},[68,36943,32694],{"class":85},[68,36945,869],{"class":102},[68,36947,36919],{"class":85},[68,36949,36922],{"class":92},[68,36951,1757],{"class":85},[68,36953,36954],{"class":70,"line":9620},[68,36955,36956],{"class":74},"        # 直接输出\n",[68,36958,36959,36961,36963,36965],{"class":70,"line":9632},[68,36960,32694],{"class":85},[68,36962,869],{"class":102},[68,36964,32416],{"class":92},[68,36966,36967],{"class":85},".f3(x)\n",[68,36969,36970],{"class":70,"line":9644},[68,36971,36972],{"class":74},"        # 前向传播输出\n",[68,36974,36975,36977],{"class":70,"line":9656},[68,36976,16349],{"class":102},[68,36978,32802],{"class":85},[68,36980,36981],{"class":70,"line":11314},[68,36982,36983],{"class":74},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[68,36985,36986,36988,36990,36992,36994],{"class":70,"line":11339},[68,36987,3134],{"class":102},[68,36989,32813],{"class":92},[68,36991,4548],{"class":102},[68,36993,32818],{"class":872},[68,36995,5338],{"class":85},[68,36997,36998,37000,37002,37004,37006,37008,37010,37012,37014],{"class":70,"line":11362},[68,36999,32830],{"class":85},[68,37001,869],{"class":102},[68,37003,32044],{"class":85},[68,37005,32837],{"class":872},[68,37007,3306],{"class":102},[68,37009,32842],{"class":85},[68,37011,3303],{"class":102},[68,37013,32069],{"class":872},[68,37015,1757],{"class":85},[68,37017,37018],{"class":70,"line":11386},[68,37019,37020],{"class":74},"    # 模型实例化，然后将实例化的模型放到设备中\n",[68,37022,37023,37025,37027],{"class":70,"line":11391},[68,37024,32882],{"class":85},[68,37026,869],{"class":102},[68,37028,37029],{"class":85},"AlexNet().to(device)\n",[68,37031,37032,37034,37036,37038,37040,37043,37045,37047],{"class":70,"line":11396},[68,37033,32892],{"class":92},[68,37035,32895],{"class":85},[68,37037,99],{"class":92},[68,37039,2114],{"class":85},[68,37041,37042],{"class":92},"227",[68,37044,2114],{"class":85},[68,37046,37042],{"class":92},[68,37048,32908],{"class":85},[48,37050,37051],{"start":78},[51,37052,32921],{},[58,37054,37056],{"className":31971,"code":37055,"language":31973,"meta":63,"style":63},"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",[65,37057,37058,37064,37070,37080,37086,37096,37106,37116,37126,37136,37140,37151,37161,37165,37169,37173,37181,37193,37203,37219,37229,37261,37275,37285,37295,37299,37309,37323,37333,37343,37353,37359,37363,37367,37371,37375,37379,37387,37407,37411,37415,37419,37423,37427,37443,37447,37451,37459,37463,37467,37475,37479,37483,37487,37495,37499,37503,37507,37511,37519,37523,37531,37535,37543,37547,37555,37559,37567,37571,37575,37583,37587,37591,37595,37607,37631,37645,37649,37653,37657,37665,37669,37677,37681,37689,37693,37701,37705,37713,37717,37725,37729,37741,37745,37753,37757,37765,37769,37773,37777,37781,37789,37793,37809,37813,37821,37825,37829,37833,37837,37841,37845,37849,37865,37869,37881,37885,37897,37901,37913,37917,37925,37929,37937,37941,37945,37950,37956,37960,37969,37973,37990,37994,38003,38007,38025,38038,38043,38056,38060,38064,38072,38076,38080,38088,38092,38100,38104,38112,38116,38120,38162,38204,38208,38212,38228,38232,38248,38252,38256,38264,38268,38272,38284,38322,38327,38332,38341,38345,38359,38369,38375,38381,38387,38393,38397,38401,38407,38411,38415,38423,38427,38445,38449,38453,38457,38473,38477,38481,38485,38489,38493,38513,38533,38537,38541,38545,38553,38561,38565,38581,38601,38621,38625,38629,38637,38645,38649,38653,38657,38669,38673,38683,38691,38708],{"__ignoreMap":63},[68,37059,37060,37062],{"class":70,"line":71},[68,37061,31985],{"class":102},[68,37063,33415],{"class":85},[68,37065,37066,37068],{"class":70,"line":78},[68,37067,31985],{"class":102},[68,37069,33422],{"class":85},[68,37071,37072,37074,37076,37078],{"class":70,"line":89},[68,37073,31985],{"class":102},[68,37075,33433],{"class":85},[68,37077,32976],{"class":102},[68,37079,33438],{"class":85},[68,37081,37082,37084],{"class":70,"line":115},[68,37083,31985],{"class":102},[68,37085,31988],{"class":85},[68,37087,37088,37090,37092,37094],{"class":70,"line":280},[68,37089,32330],{"class":102},[68,37091,33008],{"class":85},[68,37093,31985],{"class":102},[68,37095,33455],{"class":85},[68,37097,37098,37100,37102,37104],{"class":70,"line":301},[68,37099,32330],{"class":102},[68,37101,32961],{"class":85},[68,37103,31985],{"class":102},[68,37105,32966],{"class":85},[68,37107,37108,37110,37112,37114],{"class":70,"line":320},[68,37109,32330],{"class":102},[68,37111,32991],{"class":85},[68,37113,31985],{"class":102},[68,37115,32996],{"class":85},[68,37117,37118,37120,37122,37124],{"class":70,"line":2915},[68,37119,31985],{"class":102},[68,37121,33008],{"class":85},[68,37123,32976],{"class":102},[68,37125,33013],{"class":85},[68,37127,37128,37130,37132,37134],{"class":70,"line":2921},[68,37129,31985],{"class":102},[68,37131,33025],{"class":85},[68,37133,32976],{"class":102},[68,37135,33030],{"class":85},[68,37137,37138],{"class":70,"line":2933},[68,37139,33500],{"class":74},[68,37141,37142,37144,37146,37148],{"class":70,"line":3214},[68,37143,32330],{"class":102},[68,37145,33507],{"class":85},[68,37147,31985],{"class":102},[68,37149,37150],{"class":85}," AlexNet\n",[68,37152,37153,37155,37157,37159],{"class":70,"line":3219},[68,37154,32330],{"class":102},[68,37156,32333],{"class":85},[68,37158,31985],{"class":102},[68,37160,32338],{"class":85},[68,37162,37163],{"class":70,"line":3225},[68,37164,4000],{"emptyLinePlaceholder":1679},[68,37166,37167],{"class":70,"line":3230},[68,37168,4000],{"emptyLinePlaceholder":1679},[68,37170,37171],{"class":70,"line":3244},[68,37172,33535],{"class":74},[68,37174,37175,37177,37179],{"class":70,"line":3249},[68,37176,33540],{"class":102},[68,37178,33543],{"class":587},[68,37180,33546],{"class":85},[68,37182,37183,37185,37187,37189,37191],{"class":70,"line":3255},[68,37184,33551],{"class":85},[68,37186,869],{"class":102},[68,37188,33048],{"class":85},[68,37190,33056],{"class":872},[68,37192,33059],{"class":85},[68,37194,37195,37197,37199,37201],{"class":70,"line":3276},[68,37196,33564],{"class":6815},[68,37198,869],{"class":102},[68,37200,33069],{"class":92},[68,37202,33059],{"class":85},[68,37204,37205,37207,37209,37211,37213,37215,37217],{"class":70,"line":3281},[68,37206,33575],{"class":6815},[68,37208,869],{"class":102},[68,37210,33086],{"class":85},[68,37212,33089],{"class":6815},[68,37214,869],{"class":102},[68,37216,37042],{"class":92},[68,37218,33097],{"class":85},[68,37220,37221,37223,37225,37227],{"class":70,"line":3295},[68,37222,33592],{"class":6815},[68,37224,869],{"class":102},[68,37226,33069],{"class":92},[68,37228,1757],{"class":85},[68,37230,37231,37233,37235,37237,37239,37241,37243,37245,37247,37249,37251,37253,37255,37257,37259],{"class":70,"line":3300},[68,37232,33603],{"class":85},[68,37234,869],{"class":102},[68,37236,33608],{"class":85},[68,37238,33611],{"class":92},[68,37240,997],{"class":85},[68,37242,33616],{"class":92},[68,37244,2191],{"class":102},[68,37246,8957],{"class":92},[68,37248,33623],{"class":85},[68,37250,33611],{"class":92},[68,37252,997],{"class":85},[68,37254,33630],{"class":92},[68,37256,2191],{"class":102},[68,37258,8957],{"class":92},[68,37260,33637],{"class":85},[68,37262,37263,37265,37267,37269,37271,37273],{"class":70,"line":3329},[68,37264,33642],{"class":85},[68,37266,869],{"class":102},[68,37268,33647],{"class":85},[68,37270,33130],{"class":6815},[68,37272,869],{"class":102},[68,37274,33135],{"class":85},[68,37276,37277,37279,37281,37283],{"class":70,"line":3334},[68,37278,33658],{"class":6815},[68,37280,869],{"class":102},[68,37282,33663],{"class":92},[68,37284,33059],{"class":85},[68,37286,37287,37289,37291,37293],{"class":70,"line":3351},[68,37288,33670],{"class":6815},[68,37290,869],{"class":102},[68,37292,33069],{"class":92},[68,37294,33059],{"class":85},[68,37296,37297],{"class":70,"line":3356},[68,37298,33681],{"class":74},[68,37300,37301,37303,37305,37307],{"class":70,"line":3361},[68,37302,33686],{"class":6815},[68,37304,869],{"class":102},[68,37306,2131],{"class":92},[68,37308,1757],{"class":85},[68,37310,37311,37313,37315,37317,37319,37321],{"class":70,"line":3366},[68,37312,33697],{"class":85},[68,37314,869],{"class":102},[68,37316,33127],{"class":85},[68,37318,33130],{"class":6815},[68,37320,869],{"class":102},[68,37322,33708],{"class":85},[68,37324,37325,37327,37329,37331],{"class":70,"line":3380},[68,37326,33713],{"class":6815},[68,37328,869],{"class":102},[68,37330,33663],{"class":92},[68,37332,33059],{"class":85},[68,37334,37335,37337,37339,37341],{"class":70,"line":3385},[68,37336,33724],{"class":6815},[68,37338,869],{"class":102},[68,37340,33069],{"class":92},[68,37342,33059],{"class":85},[68,37344,37345,37347,37349,37351],{"class":70,"line":4177},[68,37346,33735],{"class":6815},[68,37348,869],{"class":102},[68,37350,2131],{"class":92},[68,37352,1757],{"class":85},[68,37354,37355,37357],{"class":70,"line":4191},[68,37356,5689],{"class":102},[68,37358,33748],{"class":85},[68,37360,37361],{"class":70,"line":4199},[68,37362,4000],{"emptyLinePlaceholder":1679},[68,37364,37365],{"class":70,"line":4204},[68,37366,33757],{"class":74},[68,37368,37369],{"class":70,"line":4210},[68,37370,33762],{"class":74},[68,37372,37373],{"class":70,"line":4216},[68,37374,4000],{"emptyLinePlaceholder":1679},[68,37376,37377],{"class":70,"line":4221},[68,37378,33771],{"class":74},[68,37380,37381,37383,37385],{"class":70,"line":9547},[68,37382,33540],{"class":102},[68,37384,33778],{"class":587},[68,37386,33781],{"class":85},[68,37388,37389,37391,37393,37395,37397,37399,37401,37403,37405],{"class":70,"line":9571},[68,37390,32830],{"class":85},[68,37392,869],{"class":102},[68,37394,32044],{"class":85},[68,37396,32837],{"class":872},[68,37398,3306],{"class":102},[68,37400,32842],{"class":85},[68,37402,3303],{"class":102},[68,37404,33800],{"class":872},[68,37406,1757],{"class":85},[68,37408,37409],{"class":70,"line":9576},[68,37410,4000],{"emptyLinePlaceholder":1679},[68,37412,37413],{"class":70,"line":9582},[68,37414,4000],{"emptyLinePlaceholder":1679},[68,37416,37417],{"class":70,"line":9609},[68,37418,33815],{"class":74},[68,37420,37421],{"class":70,"line":9614},[68,37422,33820],{"class":74},[68,37424,37425],{"class":70,"line":9620},[68,37426,33825],{"class":74},[68,37428,37429,37431,37433,37435,37437,37439,37441],{"class":70,"line":9632},[68,37430,33830],{"class":85},[68,37432,869],{"class":102},[68,37434,33835],{"class":85},[68,37436,33838],{"class":6815},[68,37438,869],{"class":102},[68,37440,33843],{"class":92},[68,37442,1757],{"class":85},[68,37444,37445],{"class":70,"line":9644},[68,37446,4000],{"emptyLinePlaceholder":1679},[68,37448,37449],{"class":70,"line":9656},[68,37450,33854],{"class":74},[68,37452,37453,37455,37457],{"class":70,"line":11314},[68,37454,33859],{"class":85},[68,37456,869],{"class":102},[68,37458,33864],{"class":85},[68,37460,37461],{"class":70,"line":11339},[68,37462,4000],{"emptyLinePlaceholder":1679},[68,37464,37465],{"class":70,"line":11362},[68,37466,33873],{"class":74},[68,37468,37469,37471,37473],{"class":70,"line":11386},[68,37470,32882],{"class":85},[68,37472,869],{"class":102},[68,37474,33882],{"class":85},[68,37476,37477],{"class":70,"line":11391},[68,37478,33887],{"class":74},[68,37480,37481],{"class":70,"line":11396},[68,37482,33892],{"class":74},[68,37484,37485],{"class":70,"line":11401},[68,37486,33897],{"class":74},[68,37488,37489,37491,37493],{"class":70,"line":11410},[68,37490,33902],{"class":85},[68,37492,869],{"class":102},[68,37494,33907],{"class":85},[68,37496,37497],{"class":70,"line":11415},[68,37498,4000],{"emptyLinePlaceholder":1679},[68,37500,37501],{"class":70,"line":11421},[68,37502,4000],{"emptyLinePlaceholder":1679},[68,37504,37505],{"class":70,"line":11442},[68,37506,33920],{"class":74},[68,37508,37509],{"class":70,"line":11448},[68,37510,33925],{"class":74},[68,37512,37513,37515,37517],{"class":70,"line":11462},[68,37514,33930],{"class":85},[68,37516,869],{"class":102},[68,37518,33935],{"class":92},[68,37520,37521],{"class":70,"line":11468},[68,37522,33940],{"class":74},[68,37524,37525,37527,37529],{"class":70,"line":11495},[68,37526,33945],{"class":85},[68,37528,869],{"class":102},[68,37530,33950],{"class":85},[68,37532,37533],{"class":70,"line":11504},[68,37534,33955],{"class":74},[68,37536,37537,37539,37541],{"class":70,"line":11510},[68,37538,33960],{"class":85},[68,37540,869],{"class":102},[68,37542,33950],{"class":85},[68,37544,37545],{"class":70,"line":11518},[68,37546,33969],{"class":74},[68,37548,37549,37551,37553],{"class":70,"line":11523},[68,37550,33974],{"class":85},[68,37552,869],{"class":102},[68,37554,33950],{"class":85},[68,37556,37557],{"class":70,"line":18199},[68,37558,33983],{"class":74},[68,37560,37561,37563,37565],{"class":70,"line":18205},[68,37562,33988],{"class":85},[68,37564,869],{"class":102},[68,37566,33950],{"class":85},[68,37568,37569],{"class":70,"line":18228},[68,37570,4000],{"emptyLinePlaceholder":1679},[68,37572,37573],{"class":70,"line":18234},[68,37574,34001],{"class":74},[68,37576,37577,37579,37581],{"class":70,"line":18257},[68,37578,34006],{"class":85},[68,37580,869],{"class":102},[68,37582,34011],{"class":85},[68,37584,37585],{"class":70,"line":18271},[68,37586,4000],{"emptyLinePlaceholder":1679},[68,37588,37589],{"class":70,"line":18291},[68,37590,4000],{"emptyLinePlaceholder":1679},[68,37592,37593],{"class":70,"line":18297},[68,37594,34024],{"class":74},[68,37596,37597,37599,37601,37603,37605],{"class":70,"line":18308},[68,37598,4800],{"class":102},[68,37600,34031],{"class":85},[68,37602,27637],{"class":102},[68,37604,34036],{"class":92},[68,37606,34039],{"class":85},[68,37608,37609,37611,37613,37615,37617,37619,37621,37623,37625,37627,37629],{"class":70,"line":18331},[68,37610,34044],{"class":92},[68,37612,997],{"class":85},[68,37614,34049],{"class":872},[68,37616,34052],{"class":92},[68,37618,2320],{"class":872},[68,37620,34052],{"class":92},[68,37622,1987],{"class":872},[68,37624,34061],{"class":85},[68,37626,2268],{"class":102},[68,37628,99],{"class":92},[68,37630,32090],{"class":85},[68,37632,37633,37635,37637,37639,37641,37643],{"class":70,"line":18353},[68,37634,34044],{"class":92},[68,37636,997],{"class":85},[68,37638,34076],{"class":872},[68,37640,2191],{"class":102},[68,37642,2182],{"class":92},[68,37644,1757],{"class":85},[68,37646,37647],{"class":70,"line":18358},[68,37648,4000],{"emptyLinePlaceholder":1679},[68,37650,37651],{"class":70,"line":18364},[68,37652,34091],{"class":74},[68,37654,37655],{"class":70,"line":18378},[68,37656,34096],{"class":74},[68,37658,37659,37661,37663],{"class":70,"line":18391},[68,37660,34101],{"class":85},[68,37662,869],{"class":102},[68,37664,33935],{"class":92},[68,37666,37667],{"class":70,"line":18396},[68,37668,34110],{"class":74},[68,37670,37671,37673,37675],{"class":70,"line":18410},[68,37672,34115],{"class":85},[68,37674,869],{"class":102},[68,37676,4684],{"class":92},[68,37678,37679],{"class":70,"line":18415},[68,37680,34124],{"class":74},[68,37682,37683,37685,37687],{"class":70,"line":18421},[68,37684,34129],{"class":85},[68,37686,869],{"class":102},[68,37688,33935],{"class":92},[68,37690,37691],{"class":70,"line":18426},[68,37692,34138],{"class":74},[68,37694,37695,37697,37699],{"class":70,"line":18440},[68,37696,34143],{"class":85},[68,37698,869],{"class":102},[68,37700,4684],{"class":92},[68,37702,37703],{"class":70,"line":18445},[68,37704,34152],{"class":74},[68,37706,37707,37709,37711],{"class":70,"line":18450},[68,37708,34157],{"class":85},[68,37710,869],{"class":102},[68,37712,4684],{"class":92},[68,37714,37715],{"class":70,"line":18464},[68,37716,34166],{"class":74},[68,37718,37719,37721,37723],{"class":70,"line":18476},[68,37720,34171],{"class":85},[68,37722,869],{"class":102},[68,37724,4684],{"class":92},[68,37726,37727],{"class":70,"line":18481},[68,37728,34180],{"class":74},[68,37730,37731,37733,37735,37737,37739],{"class":70,"line":18494},[68,37732,5002],{"class":102},[68,37734,33194],{"class":85},[68,37736,27637],{"class":102},[68,37738,33199],{"class":92},[68,37740,34193],{"class":85},[68,37742,37743],{"class":70,"line":18499},[68,37744,34198],{"class":74},[68,37746,37747,37749,37751],{"class":70,"line":18504},[68,37748,34203],{"class":85},[68,37750,869],{"class":102},[68,37752,34208],{"class":85},[68,37754,37755],{"class":70,"line":18509},[68,37756,34213],{"class":74},[68,37758,37759,37761,37763],{"class":70,"line":18522},[68,37760,34218],{"class":85},[68,37762,869],{"class":102},[68,37764,34223],{"class":85},[68,37766,37767],{"class":70,"line":18527},[68,37768,34229],{"class":74},[68,37770,37771],{"class":70,"line":34226},[68,37772,34235],{"class":85},[68,37774,37775],{"class":70,"line":34232},[68,37776,34241],{"class":74},[68,37778,37779],{"class":70,"line":34238},[68,37780,34247],{"class":74},[68,37782,37783,37785,37787],{"class":70,"line":34244},[68,37784,34253],{"class":85},[68,37786,869],{"class":102},[68,37788,34258],{"class":85},[68,37790,37791],{"class":70,"line":34250},[68,37792,34264],{"class":74},[68,37794,37795,37797,37799,37801,37803,37805,37807],{"class":70,"line":34261},[68,37796,34270],{"class":85},[68,37798,869],{"class":102},[68,37800,34275],{"class":85},[68,37802,34278],{"class":6815},[68,37804,869],{"class":102},[68,37806,99],{"class":92},[68,37808,1757],{"class":85},[68,37810,37811],{"class":70,"line":34267},[68,37812,34290],{"class":74},[68,37814,37815,37817,37819],{"class":70,"line":34287},[68,37816,34296],{"class":85},[68,37818,869],{"class":102},[68,37820,34301],{"class":85},[68,37822,37823],{"class":70,"line":34293},[68,37824,34307],{"class":74},[68,37826,37827],{"class":70,"line":34304},[68,37828,34313],{"class":85},[68,37830,37831],{"class":70,"line":34310},[68,37832,34319],{"class":74},[68,37834,37835],{"class":70,"line":34316},[68,37836,34325],{"class":85},[68,37838,37839],{"class":70,"line":34322},[68,37840,34331],{"class":74},[68,37842,37843],{"class":70,"line":34328},[68,37844,34337],{"class":85},[68,37846,37847],{"class":70,"line":34334},[68,37848,34343],{"class":74},[68,37850,37851,37853,37855,37857,37859,37861,37863],{"class":70,"line":34340},[68,37852,34349],{"class":85},[68,37854,11075],{"class":102},[68,37856,34354],{"class":85},[68,37858,2191],{"class":102},[68,37860,34359],{"class":85},[68,37862,600],{"class":92},[68,37864,1757],{"class":85},[68,37866,37867],{"class":70,"line":34346},[68,37868,34369],{"class":74},[68,37870,37871,37873,37875,37877,37879],{"class":70,"line":34366},[68,37872,34375],{"class":85},[68,37874,11075],{"class":102},[68,37876,34380],{"class":85},[68,37878,4548],{"class":102},[68,37880,34385],{"class":85},[68,37882,37883],{"class":70,"line":34372},[68,37884,34391],{"class":74},[68,37886,37887,37889,37891,37893,37895],{"class":70,"line":34388},[68,37888,34397],{"class":85},[68,37890,11075],{"class":102},[68,37892,34359],{"class":85},[68,37894,600],{"class":92},[68,37896,1757],{"class":85},[68,37898,37899],{"class":70,"line":34394},[68,37900,34411],{"class":74},[68,37902,37903,37905,37907,37909,37911],{"class":70,"line":34408},[68,37904,5002],{"class":102},[68,37906,34419],{"class":85},[68,37908,27637],{"class":102},[68,37910,33199],{"class":92},[68,37912,34426],{"class":85},[68,37914,37915],{"class":70,"line":34414},[68,37916,34432],{"class":74},[68,37918,37919,37921,37923],{"class":70,"line":34429},[68,37920,34203],{"class":85},[68,37922,869],{"class":102},[68,37924,34208],{"class":85},[68,37926,37927],{"class":70,"line":34435},[68,37928,34447],{"class":74},[68,37930,37931,37933,37935],{"class":70,"line":34444},[68,37932,34218],{"class":85},[68,37934,869],{"class":102},[68,37936,34223],{"class":85},[68,37938,37939],{"class":70,"line":34450},[68,37940,34462],{"class":74},[68,37942,37943],{"class":70,"line":34459},[68,37944,34468],{"class":85},[68,37946,37947],{"class":70,"line":34465},[68,37948,37949],{"class":74},"            # 验证时不计算梯度以节省内存\u002F计算\n",[68,37951,37952,37954],{"class":70,"line":34471},[68,37953,34474],{"class":102},[68,37955,34477],{"class":85},[68,37957,37958],{"class":70,"line":34480},[68,37959,34483],{"class":74},[68,37961,37962,37965,37967],{"class":70,"line":34486},[68,37963,37964],{"class":85},"                output",[68,37966,869],{"class":102},[68,37968,34258],{"class":85},[68,37970,37971],{"class":70,"line":34497},[68,37972,34500],{"class":74},[68,37974,37975,37978,37980,37982,37984,37986,37988],{"class":70,"line":34503},[68,37976,37977],{"class":85},"                pre_lab",[68,37979,869],{"class":102},[68,37981,34275],{"class":85},[68,37983,34278],{"class":6815},[68,37985,869],{"class":102},[68,37987,99],{"class":92},[68,37989,1757],{"class":85},[68,37991,37992],{"class":70,"line":34522},[68,37993,34525],{"class":74},[68,37995,37996,37999,38001],{"class":70,"line":34528},[68,37997,37998],{"class":85},"                val_batch_loss",[68,38000,869],{"class":102},[68,38002,34301],{"class":85},[68,38004,38005],{"class":70,"line":34539},[68,38006,34542],{"class":74},[68,38008,38009,38012,38014,38017,38019,38021,38023],{"class":70,"line":34545},[68,38010,38011],{"class":85},"                val_loss",[68,38013,11075],{"class":102},[68,38015,38016],{"class":85},"val_batch_loss.item()",[68,38018,2191],{"class":102},[68,38020,34359],{"class":85},[68,38022,600],{"class":92},[68,38024,1757],{"class":85},[68,38026,38027,38030,38032,38034,38036],{"class":70,"line":34565},[68,38028,38029],{"class":85},"                val_corrects",[68,38031,11075],{"class":102},[68,38033,34380],{"class":85},[68,38035,4548],{"class":102},[68,38037,34385],{"class":85},[68,38039,38040],{"class":70,"line":34581},[68,38041,38042],{"class":74},"            # 当前用于验证的样本数量\n",[68,38044,38045,38048,38050,38052,38054],{"class":70,"line":34587},[68,38046,38047],{"class":85},"            val_num",[68,38049,11075],{"class":102},[68,38051,34359],{"class":85},[68,38053,600],{"class":92},[68,38055,1757],{"class":85},[68,38057,38058],{"class":70,"line":34601},[68,38059,34604],{"class":74},[68,38061,38062],{"class":70,"line":34607},[68,38063,34610],{"class":74},[68,38065,38066,38068,38070],{"class":70,"line":34613},[68,38067,34616],{"class":85},[68,38069,2320],{"class":102},[68,38071,34621],{"class":85},[68,38073,38074],{"class":70,"line":34624},[68,38075,34627],{"class":74},[68,38077,38078],{"class":70,"line":34630},[68,38079,34633],{"class":74},[68,38081,38082,38084,38086],{"class":70,"line":34636},[68,38083,34639],{"class":85},[68,38085,2320],{"class":102},[68,38087,34621],{"class":85},[68,38089,38090],{"class":70,"line":34646},[68,38091,34649],{"class":74},[68,38093,38094,38096,38098],{"class":70,"line":34652},[68,38095,34655],{"class":85},[68,38097,2320],{"class":102},[68,38099,34660],{"class":85},[68,38101,38102],{"class":70,"line":34663},[68,38103,34666],{"class":74},[68,38105,38106,38108,38110],{"class":70,"line":34669},[68,38107,34672],{"class":85},[68,38109,2320],{"class":102},[68,38111,34660],{"class":85},[68,38113,38114],{"class":70,"line":34679},[68,38115,4000],{"emptyLinePlaceholder":1679},[68,38117,38118],{"class":70,"line":34684},[68,38119,34687],{"class":74},[68,38121,38122,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160],{"class":70,"line":34690},[68,38123,34044],{"class":92},[68,38125,997],{"class":85},[68,38127,5191],{"class":872},[68,38129,34052],{"class":92},[68,38131,34701],{"class":872},[68,38133,2632],{"class":92},[68,38135,34706],{"class":102},[68,38137,2681],{"class":92},[68,38139,34711],{"class":872},[68,38141,2632],{"class":92},[68,38143,34706],{"class":102},[68,38145,2681],{"class":92},[68,38147,5191],{"class":872},[68,38149,34722],{"class":85},[68,38151,2268],{"class":102},[68,38153,99],{"class":92},[68,38155,34729],{"class":85},[68,38157,2268],{"class":102},[68,38159,99],{"class":92},[68,38161,34736],{"class":85},[68,38163,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202],{"class":70,"line":34739},[68,38165,34044],{"class":92},[68,38167,997],{"class":85},[68,38169,5191],{"class":872},[68,38171,34052],{"class":92},[68,38173,34750],{"class":872},[68,38175,2632],{"class":92},[68,38177,34706],{"class":102},[68,38179,2681],{"class":92},[68,38181,34759],{"class":872},[68,38183,2632],{"class":92},[68,38185,34706],{"class":102},[68,38187,2681],{"class":92},[68,38189,5191],{"class":872},[68,38191,34770],{"class":85},[68,38193,2268],{"class":102},[68,38195,99],{"class":92},[68,38197,34777],{"class":85},[68,38199,2268],{"class":102},[68,38201,99],{"class":92},[68,38203,34736],{"class":85},[68,38205,38206],{"class":70,"line":34786},[68,38207,4000],{"emptyLinePlaceholder":1679},[68,38209,38210],{"class":70,"line":34791},[68,38211,34794],{"class":74},[68,38213,38214,38216,38218,38220,38222,38224,38226],{"class":70,"line":34797},[68,38215,4097],{"class":102},[68,38217,34802],{"class":85},[68,38219,2268],{"class":102},[68,38221,99],{"class":92},[68,38223,2675],{"class":85},[68,38225,2695],{"class":102},[68,38227,34813],{"class":85},[68,38229,38230],{"class":70,"line":34816},[68,38231,34819],{"class":74},[68,38233,38234,38236,38238,38240,38242,38244,38246],{"class":70,"line":34822},[68,38235,34825],{"class":85},[68,38237,1790],{"class":92},[68,38239,869],{"class":102},[68,38241,34832],{"class":85},[68,38243,2268],{"class":102},[68,38245,99],{"class":92},[68,38247,34839],{"class":85},[68,38249,38250],{"class":70,"line":34842},[68,38251,34845],{"class":74},[68,38253,38254],{"class":70,"line":34848},[68,38255,34851],{"class":74},[68,38257,38258,38260,38262],{"class":70,"line":34854},[68,38259,34857],{"class":85},[68,38261,869],{"class":102},[68,38263,33907],{"class":85},[68,38265,38266],{"class":70,"line":34864},[68,38267,4000],{"emptyLinePlaceholder":1679},[68,38269,38270],{"class":70,"line":34869},[68,38271,34872],{"class":74},[68,38273,38274,38276,38278,38280,38282],{"class":70,"line":34875},[68,38275,34878],{"class":85},[68,38277,869],{"class":102},[68,38279,34883],{"class":85},[68,38281,2268],{"class":102},[68,38283,34888],{"class":85},[68,38285,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320],{"class":70,"line":34891},[68,38287,34044],{"class":92},[68,38289,997],{"class":85},[68,38291,34898],{"class":872},[68,38293,2632],{"class":92},[68,38295,34903],{"class":102},[68,38297,2681],{"class":92},[68,38299,2280],{"class":872},[68,38301,2632],{"class":92},[68,38303,34903],{"class":102},[68,38305,2681],{"class":92},[68,38307,34916],{"class":872},[68,38309,34919],{"class":85},[68,38311,34922],{"class":102},[68,38313,2643],{"class":92},[68,38315,34927],{"class":85},[68,38317,2064],{"class":102},[68,38319,2643],{"class":92},[68,38321,32090],{"class":85},[68,38323,38324],{"class":70,"line":34936},[68,38325,38326],{"class":74},"    # 选择最优参数并保存\n",[68,38328,38329],{"class":70,"line":34942},[68,38330,38331],{"class":74},"    # 保存最佳模型权重字典\n",[68,38333,38334,38337,38339],{"class":70,"line":34948},[68,38335,38336],{"class":85},"    torch.save(best_model_wts,",[68,38338,34960],{"class":872},[68,38340,1757],{"class":85},[68,38342,38343],{"class":70,"line":34954},[68,38344,34980],{"class":74},[68,38346,38347,38349,38351,38353,38355,38357],{"class":70,"line":34965},[68,38348,34986],{"class":85},[68,38350,869],{"class":102},[68,38352,34991],{"class":85},[68,38354,34994],{"class":6815},[68,38356,869],{"class":102},[68,38358,3149],{"class":85},[68,38360,38361,38363,38365,38367],{"class":70,"line":34971},[68,38362,35004],{"class":872},[68,38364,2595],{"class":85},[68,38366,35009],{"class":92},[68,38368,35012],{"class":85},[68,38370,38371,38373],{"class":70,"line":34977},[68,38372,35018],{"class":872},[68,38374,35021],{"class":85},[68,38376,38377,38379],{"class":70,"line":34983},[68,38378,35027],{"class":872},[68,38380,35030],{"class":85},[68,38382,38383,38385],{"class":70,"line":35001},[68,38384,35036],{"class":872},[68,38386,35039],{"class":85},[68,38388,38389,38391],{"class":70,"line":35015},[68,38390,35045],{"class":872},[68,38392,35048],{"class":85},[68,38394,38395],{"class":70,"line":35024},[68,38396,35054],{"class":85},[68,38398,38399],{"class":70,"line":35033},[68,38400,35060],{"class":74},[68,38402,38403,38405],{"class":70,"line":35042},[68,38404,5689],{"class":102},[68,38406,35068],{"class":85},[68,38408,38409],{"class":70,"line":35051},[68,38410,4000],{"emptyLinePlaceholder":1679},[68,38412,38413],{"class":70,"line":35057},[68,38414,35079],{"class":74},[68,38416,38417,38419,38421],{"class":70,"line":35063},[68,38418,33540],{"class":102},[68,38420,35087],{"class":587},[68,38422,35090],{"class":85},[68,38424,38425],{"class":70,"line":35071},[68,38426,35096],{"class":74},[68,38428,38429,38431,38433,38435,38437,38439,38441,38443],{"class":70,"line":35076},[68,38430,35102],{"class":85},[68,38432,33286],{"class":6815},[68,38434,869],{"class":102},[68,38436,997],{"class":85},[68,38438,2234],{"class":92},[68,38440,2114],{"class":85},[68,38442,2029],{"class":92},[68,38444,32090],{"class":85},[68,38446,38447],{"class":70,"line":35082},[68,38448,35122],{"class":74},[68,38450,38451],{"class":70,"line":35093},[68,38452,35128],{"class":74},[68,38454,38455],{"class":70,"line":35099},[68,38456,35134],{"class":74},[68,38458,38459,38461,38463,38465,38467,38469,38471],{"class":70,"line":35119},[68,38460,33320],{"class":85},[68,38462,99],{"class":92},[68,38464,2114],{"class":85},[68,38466,267],{"class":92},[68,38468,2114],{"class":85},[68,38470,99],{"class":92},[68,38472,1757],{"class":85},[68,38474,38475],{"class":70,"line":35125},[68,38476,35157],{"class":74},[68,38478,38479],{"class":70,"line":35131},[68,38480,35163],{"class":74},[68,38482,38483],{"class":70,"line":35137},[68,38484,35169],{"class":74},[68,38486,38487],{"class":70,"line":35154},[68,38488,35175],{"class":74},[68,38490,38491],{"class":70,"line":35160},[68,38492,35181],{"class":74},[68,38494,38495,38497,38499,38501,38503,38505,38507,38509,38511],{"class":70,"line":35166},[68,38496,35187],{"class":85},[68,38498,35190],{"class":872},[68,38500,35193],{"class":85},[68,38502,35196],{"class":872},[68,38504,2114],{"class":85},[68,38506,35201],{"class":6815},[68,38508,869],{"class":102},[68,38510,35206],{"class":872},[68,38512,1757],{"class":85},[68,38514,38515,38517,38519,38521,38523,38525,38527,38529,38531],{"class":70,"line":35172},[68,38516,35187],{"class":85},[68,38518,35190],{"class":872},[68,38520,35218],{"class":85},[68,38522,35221],{"class":872},[68,38524,2114],{"class":85},[68,38526,35201],{"class":6815},[68,38528,869],{"class":102},[68,38530,35230],{"class":872},[68,38532,1757],{"class":85},[68,38534,38535],{"class":70,"line":35178},[68,38536,35238],{"class":74},[68,38538,38539],{"class":70,"line":35184},[68,38540,35244],{"class":85},[68,38542,38543],{"class":70,"line":35211},[68,38544,35250],{"class":74},[68,38546,38547,38549,38551],{"class":70,"line":35235},[68,38548,35256],{"class":85},[68,38550,35259],{"class":872},[68,38552,1757],{"class":85},[68,38554,38555,38557,38559],{"class":70,"line":35241},[68,38556,35267],{"class":85},[68,38558,35270],{"class":872},[68,38560,1757],{"class":85},[68,38562,38563],{"class":70,"line":35247},[68,38564,35278],{"class":74},[68,38566,38567,38569,38571,38573,38575,38577,38579],{"class":70,"line":35253},[68,38568,33320],{"class":85},[68,38570,99],{"class":92},[68,38572,2114],{"class":85},[68,38574,267],{"class":92},[68,38576,2114],{"class":85},[68,38578,267],{"class":92},[68,38580,1757],{"class":85},[68,38582,38583,38585,38587,38589,38591,38593,38595,38597,38599],{"class":70,"line":35264},[68,38584,35187],{"class":85},[68,38586,35190],{"class":872},[68,38588,35305],{"class":85},[68,38590,35196],{"class":872},[68,38592,2114],{"class":85},[68,38594,35201],{"class":6815},[68,38596,869],{"class":102},[68,38598,35316],{"class":872},[68,38600,1757],{"class":85},[68,38602,38603,38605,38607,38609,38611,38613,38615,38617,38619],{"class":70,"line":35275},[68,38604,35187],{"class":85},[68,38606,35190],{"class":872},[68,38608,35328],{"class":85},[68,38610,35221],{"class":872},[68,38612,2114],{"class":85},[68,38614,35201],{"class":6815},[68,38616,869],{"class":102},[68,38618,35339],{"class":872},[68,38620,1757],{"class":85},[68,38622,38623],{"class":70,"line":35281},[68,38624,35347],{"class":74},[68,38626,38627],{"class":70,"line":35298},[68,38628,35244],{"class":85},[68,38630,38631,38633,38635],{"class":70,"line":35321},[68,38632,35256],{"class":85},[68,38634,35190],{"class":872},[68,38636,1757],{"class":85},[68,38638,38639,38641,38643],{"class":70,"line":35344},[68,38640,35267],{"class":85},[68,38642,35369],{"class":872},[68,38644,1757],{"class":85},[68,38646,38647],{"class":70,"line":35350},[68,38648,35377],{"class":85},[68,38650,38651],{"class":70,"line":35355},[68,38652,4000],{"emptyLinePlaceholder":1679},[68,38654,38655],{"class":70,"line":35364},[68,38656,35388],{"class":74},[68,38658,38659,38661,38663,38665,38667],{"class":70,"line":35374},[68,38660,3134],{"class":102},[68,38662,32813],{"class":92},[68,38664,4548],{"class":102},[68,38666,32818],{"class":872},[68,38668,5338],{"class":85},[68,38670,38671],{"class":70,"line":35380},[68,38672,35407],{"class":74},[68,38674,38675,38678,38680],{"class":70,"line":35385},[68,38676,38677],{"class":85},"    AlexNet",[68,38679,869],{"class":102},[68,38681,38682],{"class":85},"AlexNet()\n",[68,38684,38685,38687,38689],{"class":70,"line":35391},[68,38686,35424],{"class":85},[68,38688,869],{"class":102},[68,38690,35429],{"class":85},[68,38692,38693,38695,38697,38700,38702,38704,38706],{"class":70,"line":35404},[68,38694,34986],{"class":85},[68,38696,869],{"class":102},[68,38698,38699],{"class":85},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[68,38701,35442],{"class":6815},[68,38703,869],{"class":102},[68,38705,2436],{"class":92},[68,38707,1757],{"class":85},[68,38709,38710],{"class":70,"line":35410},[68,38711,35454],{"class":85},[48,38713,38714],{"start":89},[51,38715,35467],{},[58,38717,38719],{"className":31971,"code":38718,"language":31973,"meta":63,"style":63},"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",[65,38720,38721,38727,38737,38747,38757,38761,38771,38781,38792,38796,38800,38804,38812,38828,38838,38854,38864,38878,38882,38892,38902,38912,38918,38922,38926,38934,38938,38954,38962,38966,38970,38978,38986,38990,38994,38998,39002,39008,39012,39022,39030,39038,39042,39046,39050,39058,39062,39078,39082,39086,39090,39102,39106,39118,39122,39126,39138,39142,39152,39156,39160,39172,39176,39184,39188,39192,39200,39204,39212,39216,39220,39224,39228,39232,39248,39256,39260,39264,39312,39318,39322,39332,39340,39348,39352,39356,39360,39364,39372,39376,39392,39396,39404,39412],{"__ignoreMap":63},[68,38722,38723,38725],{"class":70,"line":71},[68,38724,31985],{"class":102},[68,38726,31988],{"class":85},[68,38728,38729,38731,38733,38735],{"class":70,"line":78},[68,38730,31985],{"class":102},[68,38732,33008],{"class":85},[68,38734,32976],{"class":102},[68,38736,33013],{"class":85},[68,38738,38739,38741,38743,38745],{"class":70,"line":89},[68,38740,32330],{"class":102},[68,38742,35495],{"class":85},[68,38744,31985],{"class":102},[68,38746,35500],{"class":85},[68,38748,38749,38751,38753,38755],{"class":70,"line":115},[68,38750,32330],{"class":102},[68,38752,32991],{"class":85},[68,38754,31985],{"class":102},[68,38756,32996],{"class":85},[68,38758,38759],{"class":70,"line":280},[68,38760,35515],{"class":74},[68,38762,38763,38765,38767,38769],{"class":70,"line":301},[68,38764,32330],{"class":102},[68,38766,32961],{"class":85},[68,38768,31985],{"class":102},[68,38770,32966],{"class":85},[68,38772,38773,38775,38777,38779],{"class":70,"line":320},[68,38774,32330],{"class":102},[68,38776,33507],{"class":85},[68,38778,31985],{"class":102},[68,38780,37150],{"class":85},[68,38782,38783,38785,38788,38790],{"class":70,"line":2915},[68,38784,32330],{"class":102},[68,38786,38787],{"class":85}," 练习.AlexNet.model ",[68,38789,31985],{"class":102},[68,38791,37150],{"class":85},[68,38793,38794],{"class":70,"line":2921},[68,38795,4000],{"emptyLinePlaceholder":1679},[68,38797,38798],{"class":70,"line":2933},[68,38799,4000],{"emptyLinePlaceholder":1679},[68,38801,38802],{"class":70,"line":3214},[68,38803,35544],{"class":74},[68,38805,38806,38808,38810],{"class":70,"line":3219},[68,38807,33540],{"class":102},[68,38809,35551],{"class":587},[68,38811,33546],{"class":85},[68,38813,38814,38816,38818,38820,38822,38824,38826],{"class":70,"line":3225},[68,38815,35558],{"class":85},[68,38817,869],{"class":102},[68,38819,33048],{"class":85},[68,38821,33051],{"class":6815},[68,38823,869],{"class":102},[68,38825,33056],{"class":872},[68,38827,33059],{"class":85},[68,38829,38830,38832,38834,38836],{"class":70,"line":3230},[68,38831,35575],{"class":6815},[68,38833,869],{"class":102},[68,38835,35580],{"class":92},[68,38837,33059],{"class":85},[68,38839,38840,38842,38844,38846,38848,38850,38852],{"class":70,"line":3244},[68,38841,35587],{"class":6815},[68,38843,869],{"class":102},[68,38845,33086],{"class":85},[68,38847,33089],{"class":6815},[68,38849,869],{"class":102},[68,38851,37042],{"class":92},[68,38853,33097],{"class":85},[68,38855,38856,38858,38860,38862],{"class":70,"line":3249},[68,38857,35604],{"class":6815},[68,38859,869],{"class":102},[68,38861,33069],{"class":92},[68,38863,1757],{"class":85},[68,38865,38866,38868,38870,38872,38874,38876],{"class":70,"line":3255},[68,38867,35615],{"class":85},[68,38869,869],{"class":102},[68,38871,33127],{"class":85},[68,38873,33130],{"class":6815},[68,38875,869],{"class":102},[68,38877,35626],{"class":85},[68,38879,38880],{"class":70,"line":3276},[68,38881,35631],{"class":74},[68,38883,38884,38886,38888,38890],{"class":70,"line":3281},[68,38885,35636],{"class":6815},[68,38887,869],{"class":102},[68,38889,99],{"class":92},[68,38891,33059],{"class":85},[68,38893,38894,38896,38898,38900],{"class":70,"line":3295},[68,38895,35647],{"class":6815},[68,38897,869],{"class":102},[68,38899,33069],{"class":92},[68,38901,33059],{"class":85},[68,38903,38904,38906,38908,38910],{"class":70,"line":3300},[68,38905,35658],{"class":6815},[68,38907,869],{"class":102},[68,38909,600],{"class":92},[68,38911,1757],{"class":85},[68,38913,38914,38916],{"class":70,"line":3329},[68,38915,5689],{"class":102},[68,38917,35671],{"class":85},[68,38919,38920],{"class":70,"line":3334},[68,38921,4000],{"emptyLinePlaceholder":1679},[68,38923,38924],{"class":70,"line":3351},[68,38925,35680],{"class":74},[68,38927,38928,38930,38932],{"class":70,"line":3356},[68,38929,33540],{"class":102},[68,38931,35687],{"class":587},[68,38933,35690],{"class":85},[68,38935,38936],{"class":70,"line":3361},[68,38937,35695],{"class":74},[68,38939,38940,38942,38944,38946,38948,38950,38952],{"class":70,"line":3366},[68,38941,32830],{"class":85},[68,38943,869],{"class":102},[68,38945,32837],{"class":872},[68,38947,3306],{"class":102},[68,38949,32842],{"class":85},[68,38951,3303],{"class":102},[68,38953,35712],{"class":872},[68,38955,38956,38958,38960],{"class":70,"line":3380},[68,38957,32882],{"class":85},[68,38959,869],{"class":102},[68,38961,33882],{"class":85},[68,38963,38964],{"class":70,"line":3385},[68,38965,4000],{"emptyLinePlaceholder":1679},[68,38967,38968],{"class":70,"line":4177},[68,38969,35729],{"class":74},[68,38971,38972,38974,38976],{"class":70,"line":4191},[68,38973,35734],{"class":85},[68,38975,869],{"class":102},[68,38977,33935],{"class":92},[68,38979,38980,38982,38984],{"class":70,"line":4199},[68,38981,35743],{"class":85},[68,38983,869],{"class":102},[68,38985,4684],{"class":92},[68,38987,38988],{"class":70,"line":4204},[68,38989,4000],{"emptyLinePlaceholder":1679},[68,38991,38992],{"class":70,"line":4210},[68,38993,35756],{"class":74},[68,38995,38996],{"class":70,"line":4216},[68,38997,35761],{"class":74},[68,38999,39000],{"class":70,"line":4221},[68,39001,35766],{"class":74},[68,39003,39004,39006],{"class":70,"line":9547},[68,39005,35771],{"class":102},[68,39007,34477],{"class":85},[68,39009,39010],{"class":70,"line":9571},[68,39011,35778],{"class":74},[68,39013,39014,39016,39018,39020],{"class":70,"line":9576},[68,39015,5002],{"class":102},[68,39017,35785],{"class":85},[68,39019,27637],{"class":102},[68,39021,35790],{"class":85},[68,39023,39024,39026,39028],{"class":70,"line":9582},[68,39025,35795],{"class":85},[68,39027,869],{"class":102},[68,39029,35800],{"class":85},[68,39031,39032,39034,39036],{"class":70,"line":9609},[68,39033,35805],{"class":85},[68,39035,869],{"class":102},[68,39037,35810],{"class":85},[68,39039,39040],{"class":70,"line":9614},[68,39041,35815],{"class":74},[68,39043,39044],{"class":70,"line":9620},[68,39045,34468],{"class":85},[68,39047,39048],{"class":70,"line":9632},[68,39049,35824],{"class":74},[68,39051,39052,39054,39056],{"class":70,"line":9644},[68,39053,34253],{"class":85},[68,39055,869],{"class":102},[68,39057,35833],{"class":85},[68,39059,39060],{"class":70,"line":9656},[68,39061,35838],{"class":74},[68,39063,39064,39066,39068,39070,39072,39074,39076],{"class":70,"line":11314},[68,39065,34270],{"class":85},[68,39067,869],{"class":102},[68,39069,34275],{"class":85},[68,39071,34278],{"class":6815},[68,39073,869],{"class":102},[68,39075,99],{"class":92},[68,39077,1757],{"class":85},[68,39079,39080],{"class":70,"line":11339},[68,39081,35859],{"class":74},[68,39083,39084],{"class":70,"line":11362},[68,39085,35864],{"class":74},[68,39087,39088],{"class":70,"line":11386},[68,39089,35869],{"class":74},[68,39091,39092,39094,39096,39098,39100],{"class":70,"line":11391},[68,39093,35874],{"class":85},[68,39095,11075],{"class":102},[68,39097,34380],{"class":85},[68,39099,4548],{"class":102},[68,39101,35883],{"class":85},[68,39103,39104],{"class":70,"line":11396},[68,39105,35888],{"class":74},[68,39107,39108,39110,39112,39114,39116],{"class":70,"line":11401},[68,39109,35893],{"class":85},[68,39111,11075],{"class":102},[68,39113,35898],{"class":85},[68,39115,600],{"class":92},[68,39117,1757],{"class":85},[68,39119,39120],{"class":70,"line":11410},[68,39121,4000],{"emptyLinePlaceholder":1679},[68,39123,39124],{"class":70,"line":11415},[68,39125,35911],{"class":74},[68,39127,39128,39130,39132,39134,39136],{"class":70,"line":11421},[68,39129,35916],{"class":85},[68,39131,869],{"class":102},[68,39133,35921],{"class":85},[68,39135,2320],{"class":102},[68,39137,35926],{"class":85},[68,39139,39140],{"class":70,"line":11442},[68,39141,35931],{"class":74},[68,39143,39144,39146,39148,39150],{"class":70,"line":11448},[68,39145,34044],{"class":92},[68,39147,997],{"class":85},[68,39149,35940],{"class":872},[68,39151,35943],{"class":85},[68,39153,39154],{"class":70,"line":11462},[68,39155,4000],{"emptyLinePlaceholder":1679},[68,39157,39158],{"class":70,"line":11468},[68,39159,35952],{"class":74},[68,39161,39162,39164,39166,39168,39170],{"class":70,"line":11495},[68,39163,3134],{"class":102},[68,39165,32813],{"class":92},[68,39167,4548],{"class":102},[68,39169,32818],{"class":872},[68,39171,5338],{"class":85},[68,39173,39174],{"class":70,"line":11504},[68,39175,35969],{"class":74},[68,39177,39178,39180,39182],{"class":70,"line":11510},[68,39179,32882],{"class":85},[68,39181,869],{"class":102},[68,39183,38682],{"class":85},[68,39185,39186],{"class":70,"line":11518},[68,39187,35982],{"class":74},[68,39189,39190],{"class":70,"line":11523},[68,39191,35987],{"class":74},[68,39193,39194,39196,39198],{"class":70,"line":18199},[68,39195,35992],{"class":85},[68,39197,35995],{"class":872},[68,39199,32090],{"class":85},[68,39201,39202],{"class":70,"line":18205},[68,39203,36002],{"class":74},[68,39205,39206,39208,39210],{"class":70,"line":18228},[68,39207,35615],{"class":85},[68,39209,869],{"class":102},[68,39211,36011],{"class":85},[68,39213,39214],{"class":70,"line":18234},[68,39215,36016],{"class":74},[68,39217,39218],{"class":70,"line":18257},[68,39219,36021],{"class":85},[68,39221,39222],{"class":70,"line":18271},[68,39223,4000],{"emptyLinePlaceholder":1679},[68,39225,39226],{"class":70,"line":18291},[68,39227,36030],{"class":74},[68,39229,39230],{"class":70,"line":18297},[68,39231,36035],{"class":74},[68,39233,39234,39236,39238,39240,39242,39244,39246],{"class":70,"line":18308},[68,39235,32830],{"class":85},[68,39237,869],{"class":102},[68,39239,32837],{"class":872},[68,39241,3306],{"class":102},[68,39243,32842],{"class":85},[68,39245,3303],{"class":102},[68,39247,35712],{"class":872},[68,39249,39250,39252,39254],{"class":70,"line":18331},[68,39251,32882],{"class":85},[68,39253,869],{"class":102},[68,39255,33882],{"class":85},[68,39257,39258],{"class":70,"line":18353},[68,39259,36064],{"class":74},[68,39261,39262],{"class":70,"line":18358},[68,39263,36069],{"class":74},[68,39265,39266,39268,39270,39272,39274,39276,39278,39280,39282,39284,39286,39288,39290,39292,39294,39296,39298,39300,39302,39304,39306,39308,39310],{"class":70,"line":18364},[68,39267,36074],{"class":85},[68,39269,869],{"class":102},[68,39271,2626],{"class":85},[68,39273,36081],{"class":872},[68,39275,2114],{"class":85},[68,39277,36086],{"class":872},[68,39279,2114],{"class":85},[68,39281,36091],{"class":872},[68,39283,2114],{"class":85},[68,39285,36096],{"class":872},[68,39287,2114],{"class":85},[68,39289,36101],{"class":872},[68,39291,2114],{"class":85},[68,39293,36106],{"class":872},[68,39295,2114],{"class":85},[68,39297,36111],{"class":872},[68,39299,2114],{"class":85},[68,39301,36116],{"class":872},[68,39303,2114],{"class":85},[68,39305,36121],{"class":872},[68,39307,2114],{"class":85},[68,39309,36126],{"class":872},[68,39311,34839],{"class":85},[68,39313,39314,39316],{"class":70,"line":18378},[68,39315,35771],{"class":102},[68,39317,34477],{"class":85},[68,39319,39320],{"class":70,"line":18391},[68,39321,36139],{"class":74},[68,39323,39324,39326,39328,39330],{"class":70,"line":18396},[68,39325,5002],{"class":102},[68,39327,36146],{"class":85},[68,39329,27637],{"class":102},[68,39331,35790],{"class":85},[68,39333,39334,39336,39338],{"class":70,"line":18410},[68,39335,34203],{"class":85},[68,39337,869],{"class":102},[68,39339,34208],{"class":85},[68,39341,39342,39344,39346],{"class":70,"line":18415},[68,39343,34218],{"class":85},[68,39345,869],{"class":102},[68,39347,34223],{"class":85},[68,39349,39350],{"class":70,"line":18421},[68,39351,4000],{"emptyLinePlaceholder":1679},[68,39353,39354],{"class":70,"line":18426},[68,39355,36175],{"class":74},[68,39357,39358],{"class":70,"line":18440},[68,39359,34468],{"class":85},[68,39361,39362],{"class":70,"line":18445},[68,39363,36184],{"class":74},[68,39365,39366,39368,39370],{"class":70,"line":18450},[68,39367,34253],{"class":85},[68,39369,869],{"class":102},[68,39371,34258],{"class":85},[68,39373,39374],{"class":70,"line":18464},[68,39375,36197],{"class":74},[68,39377,39378,39380,39382,39384,39386,39388,39390],{"class":70,"line":18476},[68,39379,34270],{"class":85},[68,39381,869],{"class":102},[68,39383,34275],{"class":85},[68,39385,34278],{"class":6815},[68,39387,869],{"class":102},[68,39389,99],{"class":92},[68,39391,1757],{"class":85},[68,39393,39394],{"class":70,"line":18481},[68,39395,36218],{"class":74},[68,39397,39398,39400,39402],{"class":70,"line":18494},[68,39399,36223],{"class":85},[68,39401,869],{"class":102},[68,39403,36228],{"class":85},[68,39405,39406,39408,39410],{"class":70,"line":18499},[68,39407,36233],{"class":85},[68,39409,869],{"class":102},[68,39411,36238],{"class":85},[68,39413,39414,39416,39418,39420,39422,39424,39426,39428],{"class":70,"line":18504},[68,39415,36243],{"class":92},[68,39417,997],{"class":85},[68,39419,36248],{"class":872},[68,39421,36251],{"class":85},[68,39423,36254],{"class":872},[68,39425,2114],{"class":85},[68,39427,36259],{"class":872},[68,39429,36262],{"class":85},[43,39431,39433],{"id":39432},"_22vgg","2.2.VGG",[23593,39435,39437],{"id":39436},"_221原理","2.2.1.原理",[19,39439,39440],{},[38,39441],{"alt":63,"src":39442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,39444,39445],{},[38,39446],{"alt":63,"src":39447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,39449,39450],{},[38,39451],{"alt":63,"src":39452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,39454,39455],{},"参数详细描述：",[19,39457,39458],{},[38,39459],{"alt":63,"src":39460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,39462,39463],{},[38,39464],{"alt":63,"src":39465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,39467,39468],{},[38,39469],{"alt":63,"src":39470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,39472,39473],{},[38,39474],{"alt":63,"src":39475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,39477,39478],{},[38,39479],{"alt":63,"src":39480},"\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",[23593,39482,39484],{"id":39483},"_222代码实现","2.2.2.代码实现",[48,39486,39487],{},[51,39488,39489],{},"网络搭建",[58,39491,39493],{"className":31971,"code":39492,"language":31973,"meta":63,"style":63},"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",[65,39494,39495,39501,39513,39523,39533,39537,39554,39562,39581,39586,39591,39603,39641,39646,39682,39686,39715,39720,39725,39736,39772,39776,39812,39816,39844,39848,39853,39864,39900,39904,39940,39944,39980,39984,40012,40016,40021,40032,40069,40073,40109,40113,40149,40153,40181,40185,40190,40201,40237,40241,40277,40281,40317,40321,40349,40353,40358,40369,40374,40379,40384,40405,40409,40421,40425,40437,40441,40445,40450,40455,40470,40475,40485,40490,40505,40510,40529,40534,40543,40548,40558,40563,40568,40582,40587,40601,40609,40613,40617,40625,40636,40647,40658,40669,40680,40691,40697,40701,40706,40719,40739,40745,40754],{"__ignoreMap":63},[68,39496,39497,39499],{"class":70,"line":71},[68,39498,31985],{"class":102},[68,39500,31988],{"class":85},[68,39502,39503,39505,39508,39510],{"class":70,"line":78},[68,39504,32330],{"class":102},[68,39506,39507],{"class":85}," sympy.core.sympify ",[68,39509,31985],{"class":102},[68,39511,39512],{"class":85}," kernS\n",[68,39514,39515,39517,39519,39521],{"class":70,"line":89},[68,39516,32330],{"class":102},[68,39518,32333],{"class":85},[68,39520,31985],{"class":102},[68,39522,32338],{"class":85},[68,39524,39525,39527,39529,39531],{"class":70,"line":115},[68,39526,32330],{"class":102},[68,39528,32350],{"class":85},[68,39530,31985],{"class":102},[68,39532,32355],{"class":85},[68,39534,39535],{"class":70,"line":280},[68,39536,4000],{"emptyLinePlaceholder":1679},[68,39538,39539,39541,39544,39546,39548,39550,39552],{"class":70,"line":301},[68,39540,16291],{"class":102},[68,39542,39543],{"class":587}," VGG16",[68,39545,997],{"class":85},[68,39547,32371],{"class":587},[68,39549,2294],{"class":85},[68,39551,32376],{"class":587},[68,39553,32379],{"class":85},[68,39555,39556,39558,39560],{"class":70,"line":320},[68,39557,32394],{"class":102},[68,39559,32397],{"class":92},[68,39561,32400],{"class":85},[68,39563,39564,39566,39568,39571,39573,39575,39577,39579],{"class":70,"line":2915},[68,39565,32410],{"class":92},[68,39567,997],{"class":85},[68,39569,39570],{"class":92},"VGG16",[68,39572,1002],{"class":85},[68,39574,32416],{"class":92},[68,39576,32419],{"class":85},[68,39578,32422],{"class":92},[68,39580,3577],{"class":85},[68,39582,39583],{"class":70,"line":2921},[68,39584,39585],{"class":74},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[68,39587,39588],{"class":70,"line":2933},[68,39589,39590],{"class":74},"        # 这里用的是灰度图\n",[68,39592,39593,39595,39598,39600],{"class":70,"line":3214},[68,39594,32438],{"class":92},[68,39596,39597],{"class":85},".block1",[68,39599,869],{"class":102},[68,39601,39602],{"class":85},"nn.Sequential(\n",[68,39604,39605,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638],{"class":70,"line":3219},[68,39606,39607],{"class":85},"            nn.Conv2d(",[68,39609,32449],{"class":6815},[68,39611,869],{"class":102},[68,39613,99],{"class":92},[68,39615,2114],{"class":85},[68,39617,32458],{"class":6815},[68,39619,869],{"class":102},[68,39621,1940],{"class":92},[68,39623,2114],{"class":85},[68,39625,32467],{"class":6815},[68,39627,869],{"class":102},[68,39629,288],{"class":92},[68,39631,2114],{"class":85},[68,39633,32476],{"class":6815},[68,39635,869],{"class":102},[68,39637,99],{"class":92},[68,39639,39640],{"class":85},"),\n",[68,39642,39643],{"class":70,"line":3225},[68,39644,39645],{"class":85},"            nn.ReLU(),\n",[68,39647,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680],{"class":70,"line":3230},[68,39649,39607],{"class":85},[68,39651,32449],{"class":6815},[68,39653,869],{"class":102},[68,39655,1940],{"class":92},[68,39657,2114],{"class":85},[68,39659,32458],{"class":6815},[68,39661,869],{"class":102},[68,39663,1940],{"class":92},[68,39665,2114],{"class":85},[68,39667,32467],{"class":6815},[68,39669,869],{"class":102},[68,39671,288],{"class":92},[68,39673,2114],{"class":85},[68,39675,32476],{"class":6815},[68,39677,869],{"class":102},[68,39679,99],{"class":92},[68,39681,39640],{"class":85},[68,39683,39684],{"class":70,"line":3244},[68,39685,39645],{"class":85},[68,39687,39688,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713],{"class":70,"line":3249},[68,39689,39690],{"class":85},"            nn.MaxPool2d(",[68,39692,32467],{"class":6815},[68,39694,869],{"class":102},[68,39696,267],{"class":92},[68,39698,2114],{"class":85},[68,39700,32522],{"class":6815},[68,39702,869],{"class":102},[68,39704,267],{"class":92},[68,39706,2114],{"class":85},[68,39708,32476],{"class":6815},[68,39710,869],{"class":102},[68,39712,600],{"class":92},[68,39714,1757],{"class":85},[68,39716,39717],{"class":70,"line":3255},[68,39718,39719],{"class":85},"        )\n",[68,39721,39722],{"class":70,"line":3276},[68,39723,39724],{"class":74},"        # 第二层\n",[68,39726,39727,39729,39732,39734],{"class":70,"line":3281},[68,39728,32438],{"class":92},[68,39730,39731],{"class":85},".block2",[68,39733,869],{"class":102},[68,39735,39602],{"class":85},[68,39737,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760,39762,39764,39766,39768,39770],{"class":70,"line":3295},[68,39739,39607],{"class":85},[68,39741,32449],{"class":6815},[68,39743,869],{"class":102},[68,39745,1940],{"class":92},[68,39747,2114],{"class":85},[68,39749,32458],{"class":6815},[68,39751,869],{"class":102},[68,39753,33663],{"class":92},[68,39755,2114],{"class":85},[68,39757,32467],{"class":6815},[68,39759,869],{"class":102},[68,39761,288],{"class":92},[68,39763,2114],{"class":85},[68,39765,32476],{"class":6815},[68,39767,869],{"class":102},[68,39769,99],{"class":92},[68,39771,39640],{"class":85},[68,39773,39774],{"class":70,"line":3300},[68,39775,39645],{"class":85},[68,39777,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810],{"class":70,"line":3329},[68,39779,39607],{"class":85},[68,39781,32449],{"class":6815},[68,39783,869],{"class":102},[68,39785,33663],{"class":92},[68,39787,2114],{"class":85},[68,39789,32458],{"class":6815},[68,39791,869],{"class":102},[68,39793,33663],{"class":92},[68,39795,2114],{"class":85},[68,39797,32467],{"class":6815},[68,39799,869],{"class":102},[68,39801,288],{"class":92},[68,39803,2114],{"class":85},[68,39805,32476],{"class":6815},[68,39807,869],{"class":102},[68,39809,99],{"class":92},[68,39811,39640],{"class":85},[68,39813,39814],{"class":70,"line":3334},[68,39815,39645],{"class":85},[68,39817,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840,39842],{"class":70,"line":3351},[68,39819,39690],{"class":85},[68,39821,32467],{"class":6815},[68,39823,869],{"class":102},[68,39825,267],{"class":92},[68,39827,2114],{"class":85},[68,39829,32522],{"class":6815},[68,39831,869],{"class":102},[68,39833,267],{"class":92},[68,39835,2114],{"class":85},[68,39837,32476],{"class":6815},[68,39839,869],{"class":102},[68,39841,600],{"class":92},[68,39843,1757],{"class":85},[68,39845,39846],{"class":70,"line":3356},[68,39847,39719],{"class":85},[68,39849,39850],{"class":70,"line":3361},[68,39851,39852],{"class":74},"        # 第三层\n",[68,39854,39855,39857,39860,39862],{"class":70,"line":3366},[68,39856,32438],{"class":92},[68,39858,39859],{"class":85},".block3",[68,39861,869],{"class":102},[68,39863,39602],{"class":85},[68,39865,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898],{"class":70,"line":3380},[68,39867,39607],{"class":85},[68,39869,32449],{"class":6815},[68,39871,869],{"class":102},[68,39873,33663],{"class":92},[68,39875,2114],{"class":85},[68,39877,32458],{"class":6815},[68,39879,869],{"class":102},[68,39881,36463],{"class":92},[68,39883,2114],{"class":85},[68,39885,32467],{"class":6815},[68,39887,869],{"class":102},[68,39889,288],{"class":92},[68,39891,2114],{"class":85},[68,39893,32476],{"class":6815},[68,39895,869],{"class":102},[68,39897,99],{"class":92},[68,39899,39640],{"class":85},[68,39901,39902],{"class":70,"line":3385},[68,39903,39645],{"class":85},[68,39905,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938],{"class":70,"line":4177},[68,39907,39607],{"class":85},[68,39909,32449],{"class":6815},[68,39911,869],{"class":102},[68,39913,36463],{"class":92},[68,39915,2114],{"class":85},[68,39917,32458],{"class":6815},[68,39919,869],{"class":102},[68,39921,36463],{"class":92},[68,39923,2114],{"class":85},[68,39925,32467],{"class":6815},[68,39927,869],{"class":102},[68,39929,288],{"class":92},[68,39931,2114],{"class":85},[68,39933,32476],{"class":6815},[68,39935,869],{"class":102},[68,39937,99],{"class":92},[68,39939,39640],{"class":85},[68,39941,39942],{"class":70,"line":4191},[68,39943,39645],{"class":85},[68,39945,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978],{"class":70,"line":4199},[68,39947,39607],{"class":85},[68,39949,32449],{"class":6815},[68,39951,869],{"class":102},[68,39953,36463],{"class":92},[68,39955,2114],{"class":85},[68,39957,32458],{"class":6815},[68,39959,869],{"class":102},[68,39961,36463],{"class":92},[68,39963,2114],{"class":85},[68,39965,32467],{"class":6815},[68,39967,869],{"class":102},[68,39969,288],{"class":92},[68,39971,2114],{"class":85},[68,39973,32476],{"class":6815},[68,39975,869],{"class":102},[68,39977,99],{"class":92},[68,39979,39640],{"class":85},[68,39981,39982],{"class":70,"line":4204},[68,39983,39645],{"class":85},[68,39985,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010],{"class":70,"line":4210},[68,39987,39690],{"class":85},[68,39989,32467],{"class":6815},[68,39991,869],{"class":102},[68,39993,267],{"class":92},[68,39995,2114],{"class":85},[68,39997,32522],{"class":6815},[68,39999,869],{"class":102},[68,40001,267],{"class":92},[68,40003,2114],{"class":85},[68,40005,32476],{"class":6815},[68,40007,869],{"class":102},[68,40009,600],{"class":92},[68,40011,1757],{"class":85},[68,40013,40014],{"class":70,"line":4216},[68,40015,39719],{"class":85},[68,40017,40018],{"class":70,"line":4221},[68,40019,40020],{"class":74},"        # 第四层\n",[68,40022,40023,40025,40028,40030],{"class":70,"line":9547},[68,40024,32438],{"class":92},[68,40026,40027],{"class":85},".block4",[68,40029,869],{"class":102},[68,40031,39602],{"class":85},[68,40033,40034,40036,40038,40040,40042,40044,40046,40048,40051,40053,40055,40057,40059,40061,40063,40065,40067],{"class":70,"line":9571},[68,40035,39607],{"class":85},[68,40037,32449],{"class":6815},[68,40039,869],{"class":102},[68,40041,36463],{"class":92},[68,40043,2114],{"class":85},[68,40045,32458],{"class":6815},[68,40047,869],{"class":102},[68,40049,40050],{"class":92},"512",[68,40052,2114],{"class":85},[68,40054,32467],{"class":6815},[68,40056,869],{"class":102},[68,40058,288],{"class":92},[68,40060,2114],{"class":85},[68,40062,32476],{"class":6815},[68,40064,869],{"class":102},[68,40066,99],{"class":92},[68,40068,39640],{"class":85},[68,40070,40071],{"class":70,"line":9576},[68,40072,39645],{"class":85},[68,40074,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107],{"class":70,"line":9582},[68,40076,39607],{"class":85},[68,40078,32449],{"class":6815},[68,40080,869],{"class":102},[68,40082,40050],{"class":92},[68,40084,2114],{"class":85},[68,40086,32458],{"class":6815},[68,40088,869],{"class":102},[68,40090,40050],{"class":92},[68,40092,2114],{"class":85},[68,40094,32467],{"class":6815},[68,40096,869],{"class":102},[68,40098,288],{"class":92},[68,40100,2114],{"class":85},[68,40102,32476],{"class":6815},[68,40104,869],{"class":102},[68,40106,99],{"class":92},[68,40108,39640],{"class":85},[68,40110,40111],{"class":70,"line":9609},[68,40112,39645],{"class":85},[68,40114,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147],{"class":70,"line":9614},[68,40116,39607],{"class":85},[68,40118,32449],{"class":6815},[68,40120,869],{"class":102},[68,40122,40050],{"class":92},[68,40124,2114],{"class":85},[68,40126,32458],{"class":6815},[68,40128,869],{"class":102},[68,40130,40050],{"class":92},[68,40132,2114],{"class":85},[68,40134,32467],{"class":6815},[68,40136,869],{"class":102},[68,40138,288],{"class":92},[68,40140,2114],{"class":85},[68,40142,32476],{"class":6815},[68,40144,869],{"class":102},[68,40146,99],{"class":92},[68,40148,39640],{"class":85},[68,40150,40151],{"class":70,"line":9620},[68,40152,39645],{"class":85},[68,40154,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179],{"class":70,"line":9632},[68,40156,39690],{"class":85},[68,40158,32467],{"class":6815},[68,40160,869],{"class":102},[68,40162,267],{"class":92},[68,40164,2114],{"class":85},[68,40166,32522],{"class":6815},[68,40168,869],{"class":102},[68,40170,267],{"class":92},[68,40172,2114],{"class":85},[68,40174,32476],{"class":6815},[68,40176,869],{"class":102},[68,40178,600],{"class":92},[68,40180,1757],{"class":85},[68,40182,40183],{"class":70,"line":9644},[68,40184,39719],{"class":85},[68,40186,40187],{"class":70,"line":9656},[68,40188,40189],{"class":74},"        # 第五层\n",[68,40191,40192,40194,40197,40199],{"class":70,"line":11314},[68,40193,32438],{"class":92},[68,40195,40196],{"class":85},".block5",[68,40198,869],{"class":102},[68,40200,39602],{"class":85},[68,40202,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235],{"class":70,"line":11339},[68,40204,39607],{"class":85},[68,40206,32449],{"class":6815},[68,40208,869],{"class":102},[68,40210,40050],{"class":92},[68,40212,2114],{"class":85},[68,40214,32458],{"class":6815},[68,40216,869],{"class":102},[68,40218,40050],{"class":92},[68,40220,2114],{"class":85},[68,40222,32467],{"class":6815},[68,40224,869],{"class":102},[68,40226,288],{"class":92},[68,40228,2114],{"class":85},[68,40230,32476],{"class":6815},[68,40232,869],{"class":102},[68,40234,99],{"class":92},[68,40236,39640],{"class":85},[68,40238,40239],{"class":70,"line":11362},[68,40240,39645],{"class":85},[68,40242,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275],{"class":70,"line":11386},[68,40244,39607],{"class":85},[68,40246,32449],{"class":6815},[68,40248,869],{"class":102},[68,40250,40050],{"class":92},[68,40252,2114],{"class":85},[68,40254,32458],{"class":6815},[68,40256,869],{"class":102},[68,40258,40050],{"class":92},[68,40260,2114],{"class":85},[68,40262,32467],{"class":6815},[68,40264,869],{"class":102},[68,40266,288],{"class":92},[68,40268,2114],{"class":85},[68,40270,32476],{"class":6815},[68,40272,869],{"class":102},[68,40274,99],{"class":92},[68,40276,39640],{"class":85},[68,40278,40279],{"class":70,"line":11391},[68,40280,39645],{"class":85},[68,40282,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315],{"class":70,"line":11396},[68,40284,39607],{"class":85},[68,40286,32449],{"class":6815},[68,40288,869],{"class":102},[68,40290,40050],{"class":92},[68,40292,2114],{"class":85},[68,40294,32458],{"class":6815},[68,40296,869],{"class":102},[68,40298,40050],{"class":92},[68,40300,2114],{"class":85},[68,40302,32467],{"class":6815},[68,40304,869],{"class":102},[68,40306,288],{"class":92},[68,40308,2114],{"class":85},[68,40310,32476],{"class":6815},[68,40312,869],{"class":102},[68,40314,99],{"class":92},[68,40316,39640],{"class":85},[68,40318,40319],{"class":70,"line":11401},[68,40320,39645],{"class":85},[68,40322,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347],{"class":70,"line":11410},[68,40324,39690],{"class":85},[68,40326,32467],{"class":6815},[68,40328,869],{"class":102},[68,40330,267],{"class":92},[68,40332,2114],{"class":85},[68,40334,32522],{"class":6815},[68,40336,869],{"class":102},[68,40338,267],{"class":92},[68,40340,2114],{"class":85},[68,40342,32476],{"class":6815},[68,40344,869],{"class":102},[68,40346,600],{"class":92},[68,40348,1757],{"class":85},[68,40350,40351],{"class":70,"line":11415},[68,40352,39719],{"class":85},[68,40354,40355],{"class":70,"line":11421},[68,40356,40357],{"class":74},"        # 全连接层\n",[68,40359,40360,40362,40365,40367],{"class":70,"line":11442},[68,40361,32438],{"class":92},[68,40363,40364],{"class":85},".block6",[68,40366,869],{"class":102},[68,40368,39602],{"class":85},[68,40370,40371],{"class":70,"line":11448},[68,40372,40373],{"class":74},"            # 平展操作\n",[68,40375,40376],{"class":70,"line":11462},[68,40377,40378],{"class":74},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[68,40380,40381],{"class":70,"line":11468},[68,40382,40383],{"class":85},"            nn.Flatten(),\n",[68,40385,40386,40389,40391,40393,40395,40397,40399,40401,40403],{"class":70,"line":11495},[68,40387,40388],{"class":85},"            nn.Linear(",[68,40390,2105],{"class":92},[68,40392,2191],{"class":102},[68,40394,2105],{"class":92},[68,40396,2191],{"class":102},[68,40398,40050],{"class":92},[68,40400,2114],{"class":85},[68,40402,36463],{"class":92},[68,40404,39640],{"class":85},[68,40406,40407],{"class":70,"line":11504},[68,40408,39645],{"class":85},[68,40410,40411,40413,40415,40417,40419],{"class":70,"line":11510},[68,40412,40388],{"class":85},[68,40414,36463],{"class":92},[68,40416,2114],{"class":85},[68,40418,33663],{"class":92},[68,40420,39640],{"class":85},[68,40422,40423],{"class":70,"line":11518},[68,40424,39645],{"class":85},[68,40426,40427,40429,40431,40433,40435],{"class":70,"line":11523},[68,40428,40388],{"class":85},[68,40430,33663],{"class":92},[68,40432,2114],{"class":85},[68,40434,2182],{"class":92},[68,40436,1757],{"class":85},[68,40438,40439],{"class":70,"line":18199},[68,40440,39719],{"class":85},[68,40442,40443],{"class":70,"line":18205},[68,40444,4000],{"emptyLinePlaceholder":1679},[68,40446,40447],{"class":70,"line":18228},[68,40448,40449],{"class":74},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[68,40451,40452],{"class":70,"line":18234},[68,40453,40454],{"class":74},"        # 循环遍历模型\n",[68,40456,40457,40459,40462,40464,40467],{"class":70,"line":18257},[68,40458,5002],{"class":102},[68,40460,40461],{"class":85}," m ",[68,40463,27637],{"class":102},[68,40465,40466],{"class":92}," self",[68,40468,40469],{"class":85},".modules():\n",[68,40471,40472],{"class":70,"line":18271},[68,40473,40474],{"class":74},"            # print(m)\n",[68,40476,40477,40479,40482],{"class":70,"line":18291},[68,40478,6241],{"class":102},[68,40480,40481],{"class":92}," isinstance",[68,40483,40484],{"class":85},"(m,nn.Conv2d):\n",[68,40486,40487],{"class":70,"line":18297},[68,40488,40489],{"class":74},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[68,40491,40492,40495,40498,40500,40503],{"class":70,"line":18308},[68,40493,40494],{"class":85},"                nn.init.kaiming_normal_(m.weight,",[68,40496,40497],{"class":6815},"nonlinearity",[68,40499,869],{"class":102},[68,40501,40502],{"class":872},"'relu'",[68,40504,1757],{"class":85},[68,40506,40507],{"class":70,"line":18331},[68,40508,40509],{"class":74},"                # 判断b参数是否存在\n",[68,40511,40512,40515,40518,40521,40524,40527],{"class":70,"line":18353},[68,40513,40514],{"class":102},"                if",[68,40516,40517],{"class":85}," m.bias ",[68,40519,40520],{"class":102},"is",[68,40522,40523],{"class":102}," not",[68,40525,40526],{"class":92}," None",[68,40528,5338],{"class":85},[68,40530,40531],{"class":70,"line":18358},[68,40532,40533],{"class":74},"                    # 如果参数不存在的化初始化b=0\n",[68,40535,40536,40539,40541],{"class":70,"line":18364},[68,40537,40538],{"class":85},"                    nn.init.constant_(m.bias,",[68,40540,600],{"class":92},[68,40542,1757],{"class":85},[68,40544,40545],{"class":70,"line":18378},[68,40546,40547],{"class":74},"            # 全连接层初始化\n",[68,40549,40550,40553,40555],{"class":70,"line":18391},[68,40551,40552],{"class":102},"            elif",[68,40554,40481],{"class":92},[68,40556,40557],{"class":85},"(m,nn.Linear):\n",[68,40559,40560],{"class":70,"line":18396},[68,40561,40562],{"class":74},"                # 这个初始化方法是利用的是正太分布的方式\n",[68,40564,40565],{"class":70,"line":18410},[68,40566,40567],{"class":74},"                # 均值为0，方差为0.01\n",[68,40569,40570,40573,40575,40577,40580],{"class":70,"line":18415},[68,40571,40572],{"class":85},"                nn.init.normal_(m.weight,",[68,40574,600],{"class":92},[68,40576,2114],{"class":85},[68,40578,40579],{"class":92},"0.01",[68,40581,1757],{"class":85},[68,40583,40584],{"class":70,"line":18421},[68,40585,40586],{"class":74},"                # 初始化b参数\n",[68,40588,40589,40591,40593,40595,40597,40599],{"class":70,"line":18426},[68,40590,40514],{"class":102},[68,40592,40517],{"class":85},[68,40594,40520],{"class":102},[68,40596,40523],{"class":102},[68,40598,40526],{"class":92},[68,40600,5338],{"class":85},[68,40602,40603,40605,40607],{"class":70,"line":18440},[68,40604,40538],{"class":85},[68,40606,600],{"class":92},[68,40608,1757],{"class":85},[68,40610,40611],{"class":70,"line":18445},[68,40612,4000],{"emptyLinePlaceholder":1679},[68,40614,40615],{"class":70,"line":18450},[68,40616,36758],{"class":74},[68,40618,40619,40621,40623],{"class":70,"line":18464},[68,40620,32394],{"class":102},[68,40622,32686],{"class":587},[68,40624,32689],{"class":85},[68,40626,40627,40629,40631,40633],{"class":70,"line":18476},[68,40628,32694],{"class":85},[68,40630,869],{"class":102},[68,40632,32416],{"class":92},[68,40634,40635],{"class":85},".block1(x)\n",[68,40637,40638,40640,40642,40644],{"class":70,"line":18481},[68,40639,32694],{"class":85},[68,40641,869],{"class":102},[68,40643,32416],{"class":92},[68,40645,40646],{"class":85},".block2(x)\n",[68,40648,40649,40651,40653,40655],{"class":70,"line":18494},[68,40650,32694],{"class":85},[68,40652,869],{"class":102},[68,40654,32416],{"class":92},[68,40656,40657],{"class":85},".block3(x)\n",[68,40659,40660,40662,40664,40666],{"class":70,"line":18499},[68,40661,32694],{"class":85},[68,40663,869],{"class":102},[68,40665,32416],{"class":92},[68,40667,40668],{"class":85},".block4(x)\n",[68,40670,40671,40673,40675,40677],{"class":70,"line":18504},[68,40672,32694],{"class":85},[68,40674,869],{"class":102},[68,40676,32416],{"class":92},[68,40678,40679],{"class":85},".block5(x)\n",[68,40681,40682,40684,40686,40688],{"class":70,"line":18509},[68,40683,32694],{"class":85},[68,40685,869],{"class":102},[68,40687,32416],{"class":92},[68,40689,40690],{"class":85},".block6(x)\n",[68,40692,40693,40695],{"class":70,"line":18522},[68,40694,16349],{"class":102},[68,40696,32802],{"class":85},[68,40698,40699],{"class":70,"line":18527},[68,40700,4000],{"emptyLinePlaceholder":1679},[68,40702,40703],{"class":70,"line":34226},[68,40704,40705],{"class":74},"# 验证模型\n",[68,40707,40708,40710,40712,40714,40717],{"class":70,"line":34232},[68,40709,3134],{"class":102},[68,40711,32813],{"class":92},[68,40713,4548],{"class":102},[68,40715,40716],{"class":872},"'__main__'",[68,40718,5338],{"class":85},[68,40720,40721,40723,40725,40727,40729,40731,40733,40735,40737],{"class":70,"line":34238},[68,40722,32830],{"class":85},[68,40724,869],{"class":102},[68,40726,32044],{"class":85},[68,40728,32837],{"class":872},[68,40730,3306],{"class":102},[68,40732,32842],{"class":85},[68,40734,3303],{"class":102},[68,40736,32069],{"class":872},[68,40738,1757],{"class":85},[68,40740,40741,40743],{"class":70,"line":34244},[68,40742,32892],{"class":92},[68,40744,32078],{"class":85},[68,40746,40747,40749,40751],{"class":70,"line":34250},[68,40748,32882],{"class":85},[68,40750,869],{"class":102},[68,40752,40753],{"class":85},"VGG16().to(device)\n",[68,40755,40756,40758,40760,40762,40764,40766,40768,40770],{"class":70,"line":34261},[68,40757,32892],{"class":92},[68,40759,32895],{"class":85},[68,40761,99],{"class":92},[68,40763,2114],{"class":85},[68,40765,33094],{"class":92},[68,40767,2114],{"class":85},[68,40769,33094],{"class":92},[68,40771,32908],{"class":85},[48,40773,40774],{"start":78},[51,40775,40776],{},"训练代码",[19,40778,40779],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40781,40782],{},"解决方式:",[19,40784,40785],{},"①权重初始化",[58,40787,40789],{"className":31971,"code":40788,"language":31973,"meta":63,"style":63},"# 权重初始化,保证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",[65,40790,40791,40796,40801,40813,40818,40826,40831,40844,40849,40863,40868,40877,40882,40891,40896,40901,40914,40919,40933],{"__ignoreMap":63},[68,40792,40793],{"class":70,"line":71},[68,40794,40795],{"class":74},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[68,40797,40798],{"class":70,"line":78},[68,40799,40800],{"class":74},"# 循环遍历模型\n",[68,40802,40803,40805,40807,40809,40811],{"class":70,"line":89},[68,40804,4624],{"class":102},[68,40806,40461],{"class":85},[68,40808,27637],{"class":102},[68,40810,40466],{"class":92},[68,40812,40469],{"class":85},[68,40814,40815],{"class":70,"line":115},[68,40816,40817],{"class":74},"    # print(m)\n",[68,40819,40820,40822,40824],{"class":70,"line":280},[68,40821,4700],{"class":102},[68,40823,40481],{"class":92},[68,40825,40484],{"class":85},[68,40827,40828],{"class":70,"line":301},[68,40829,40830],{"class":74},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[68,40832,40833,40836,40838,40840,40842],{"class":70,"line":320},[68,40834,40835],{"class":85},"        nn.init.kaiming_normal_(m.weight,",[68,40837,40497],{"class":6815},[68,40839,869],{"class":102},[68,40841,40502],{"class":872},[68,40843,1757],{"class":85},[68,40845,40846],{"class":70,"line":2915},[68,40847,40848],{"class":74},"        # 判断b参数是否存在\n",[68,40850,40851,40853,40855,40857,40859,40861],{"class":70,"line":2921},[68,40852,4097],{"class":102},[68,40854,40517],{"class":85},[68,40856,40520],{"class":102},[68,40858,40523],{"class":102},[68,40860,40526],{"class":92},[68,40862,5338],{"class":85},[68,40864,40865],{"class":70,"line":2933},[68,40866,40867],{"class":74},"            # 如果参数不存在的化初始化b=0\n",[68,40869,40870,40873,40875],{"class":70,"line":3214},[68,40871,40872],{"class":85},"            nn.init.constant_(m.bias,",[68,40874,600],{"class":92},[68,40876,1757],{"class":85},[68,40878,40879],{"class":70,"line":3219},[68,40880,40881],{"class":74},"    # 全连接层初始化\n",[68,40883,40884,40887,40889],{"class":70,"line":3225},[68,40885,40886],{"class":102},"    elif",[68,40888,40481],{"class":92},[68,40890,40557],{"class":85},[68,40892,40893],{"class":70,"line":3230},[68,40894,40895],{"class":74},"        # 这个初始化方法是利用的是正太分布的方式\n",[68,40897,40898],{"class":70,"line":3244},[68,40899,40900],{"class":74},"        # 均值为0，方差为0.01\n",[68,40902,40903,40906,40908,40910,40912],{"class":70,"line":3249},[68,40904,40905],{"class":85},"        nn.init.normal_(m.weight,",[68,40907,600],{"class":92},[68,40909,2114],{"class":85},[68,40911,40579],{"class":92},[68,40913,1757],{"class":85},[68,40915,40916],{"class":70,"line":3255},[68,40917,40918],{"class":74},"        # 初始化b参数\n",[68,40920,40921,40923,40925,40927,40929,40931],{"class":70,"line":3276},[68,40922,4097],{"class":102},[68,40924,40517],{"class":85},[68,40926,40520],{"class":102},[68,40928,40523],{"class":102},[68,40930,40526],{"class":92},[68,40932,5338],{"class":85},[68,40934,40935,40937,40939],{"class":70,"line":3281},[68,40936,40872],{"class":85},[68,40938,600],{"class":92},[68,40940,1757],{"class":85},[19,40942,40943],{},"②尽可能地增加批次",[19,40945,40946],{},"训练完整代码：",[58,40948,40949],{"className":31971,"code":39492,"language":31973,"meta":63,"style":63},[65,40950,40951,40957,40967,40977,40987,40991,41007,41015,41033,41037,41041,41051,41087,41091,41127,41131,41159,41163,41167,41177,41213,41217,41253,41257,41285,41289,41293,41303,41339,41343,41379,41383,41419,41423,41451,41455,41459,41469,41505,41509,41545,41549,41585,41589,41617,41621,41625,41635,41671,41675,41711,41715,41751,41755,41783,41787,41791,41801,41805,41809,41813,41833,41837,41849,41853,41865,41869,41873,41877,41881,41893,41897,41905,41909,41921,41925,41939,41943,41951,41955,41963,41967,41971,41983,41987,42001,42009,42013,42017,42025,42035,42045,42055,42065,42075,42085,42091,42095,42099,42111,42131,42137,42145],{"__ignoreMap":63},[68,40952,40953,40955],{"class":70,"line":71},[68,40954,31985],{"class":102},[68,40956,31988],{"class":85},[68,40958,40959,40961,40963,40965],{"class":70,"line":78},[68,40960,32330],{"class":102},[68,40962,39507],{"class":85},[68,40964,31985],{"class":102},[68,40966,39512],{"class":85},[68,40968,40969,40971,40973,40975],{"class":70,"line":89},[68,40970,32330],{"class":102},[68,40972,32333],{"class":85},[68,40974,31985],{"class":102},[68,40976,32338],{"class":85},[68,40978,40979,40981,40983,40985],{"class":70,"line":115},[68,40980,32330],{"class":102},[68,40982,32350],{"class":85},[68,40984,31985],{"class":102},[68,40986,32355],{"class":85},[68,40988,40989],{"class":70,"line":280},[68,40990,4000],{"emptyLinePlaceholder":1679},[68,40992,40993,40995,40997,40999,41001,41003,41005],{"class":70,"line":301},[68,40994,16291],{"class":102},[68,40996,39543],{"class":587},[68,40998,997],{"class":85},[68,41000,32371],{"class":587},[68,41002,2294],{"class":85},[68,41004,32376],{"class":587},[68,41006,32379],{"class":85},[68,41008,41009,41011,41013],{"class":70,"line":320},[68,41010,32394],{"class":102},[68,41012,32397],{"class":92},[68,41014,32400],{"class":85},[68,41016,41017,41019,41021,41023,41025,41027,41029,41031],{"class":70,"line":2915},[68,41018,32410],{"class":92},[68,41020,997],{"class":85},[68,41022,39570],{"class":92},[68,41024,1002],{"class":85},[68,41026,32416],{"class":92},[68,41028,32419],{"class":85},[68,41030,32422],{"class":92},[68,41032,3577],{"class":85},[68,41034,41035],{"class":70,"line":2921},[68,41036,39585],{"class":74},[68,41038,41039],{"class":70,"line":2933},[68,41040,39590],{"class":74},[68,41042,41043,41045,41047,41049],{"class":70,"line":3214},[68,41044,32438],{"class":92},[68,41046,39597],{"class":85},[68,41048,869],{"class":102},[68,41050,39602],{"class":85},[68,41052,41053,41055,41057,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077,41079,41081,41083,41085],{"class":70,"line":3219},[68,41054,39607],{"class":85},[68,41056,32449],{"class":6815},[68,41058,869],{"class":102},[68,41060,99],{"class":92},[68,41062,2114],{"class":85},[68,41064,32458],{"class":6815},[68,41066,869],{"class":102},[68,41068,1940],{"class":92},[68,41070,2114],{"class":85},[68,41072,32467],{"class":6815},[68,41074,869],{"class":102},[68,41076,288],{"class":92},[68,41078,2114],{"class":85},[68,41080,32476],{"class":6815},[68,41082,869],{"class":102},[68,41084,99],{"class":92},[68,41086,39640],{"class":85},[68,41088,41089],{"class":70,"line":3225},[68,41090,39645],{"class":85},[68,41092,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125],{"class":70,"line":3230},[68,41094,39607],{"class":85},[68,41096,32449],{"class":6815},[68,41098,869],{"class":102},[68,41100,1940],{"class":92},[68,41102,2114],{"class":85},[68,41104,32458],{"class":6815},[68,41106,869],{"class":102},[68,41108,1940],{"class":92},[68,41110,2114],{"class":85},[68,41112,32467],{"class":6815},[68,41114,869],{"class":102},[68,41116,288],{"class":92},[68,41118,2114],{"class":85},[68,41120,32476],{"class":6815},[68,41122,869],{"class":102},[68,41124,99],{"class":92},[68,41126,39640],{"class":85},[68,41128,41129],{"class":70,"line":3244},[68,41130,39645],{"class":85},[68,41132,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157],{"class":70,"line":3249},[68,41134,39690],{"class":85},[68,41136,32467],{"class":6815},[68,41138,869],{"class":102},[68,41140,267],{"class":92},[68,41142,2114],{"class":85},[68,41144,32522],{"class":6815},[68,41146,869],{"class":102},[68,41148,267],{"class":92},[68,41150,2114],{"class":85},[68,41152,32476],{"class":6815},[68,41154,869],{"class":102},[68,41156,600],{"class":92},[68,41158,1757],{"class":85},[68,41160,41161],{"class":70,"line":3255},[68,41162,39719],{"class":85},[68,41164,41165],{"class":70,"line":3276},[68,41166,39724],{"class":74},[68,41168,41169,41171,41173,41175],{"class":70,"line":3281},[68,41170,32438],{"class":92},[68,41172,39731],{"class":85},[68,41174,869],{"class":102},[68,41176,39602],{"class":85},[68,41178,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197,41199,41201,41203,41205,41207,41209,41211],{"class":70,"line":3295},[68,41180,39607],{"class":85},[68,41182,32449],{"class":6815},[68,41184,869],{"class":102},[68,41186,1940],{"class":92},[68,41188,2114],{"class":85},[68,41190,32458],{"class":6815},[68,41192,869],{"class":102},[68,41194,33663],{"class":92},[68,41196,2114],{"class":85},[68,41198,32467],{"class":6815},[68,41200,869],{"class":102},[68,41202,288],{"class":92},[68,41204,2114],{"class":85},[68,41206,32476],{"class":6815},[68,41208,869],{"class":102},[68,41210,99],{"class":92},[68,41212,39640],{"class":85},[68,41214,41215],{"class":70,"line":3300},[68,41216,39645],{"class":85},[68,41218,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243,41245,41247,41249,41251],{"class":70,"line":3329},[68,41220,39607],{"class":85},[68,41222,32449],{"class":6815},[68,41224,869],{"class":102},[68,41226,33663],{"class":92},[68,41228,2114],{"class":85},[68,41230,32458],{"class":6815},[68,41232,869],{"class":102},[68,41234,33663],{"class":92},[68,41236,2114],{"class":85},[68,41238,32467],{"class":6815},[68,41240,869],{"class":102},[68,41242,288],{"class":92},[68,41244,2114],{"class":85},[68,41246,32476],{"class":6815},[68,41248,869],{"class":102},[68,41250,99],{"class":92},[68,41252,39640],{"class":85},[68,41254,41255],{"class":70,"line":3334},[68,41256,39645],{"class":85},[68,41258,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281,41283],{"class":70,"line":3351},[68,41260,39690],{"class":85},[68,41262,32467],{"class":6815},[68,41264,869],{"class":102},[68,41266,267],{"class":92},[68,41268,2114],{"class":85},[68,41270,32522],{"class":6815},[68,41272,869],{"class":102},[68,41274,267],{"class":92},[68,41276,2114],{"class":85},[68,41278,32476],{"class":6815},[68,41280,869],{"class":102},[68,41282,600],{"class":92},[68,41284,1757],{"class":85},[68,41286,41287],{"class":70,"line":3356},[68,41288,39719],{"class":85},[68,41290,41291],{"class":70,"line":3361},[68,41292,39852],{"class":74},[68,41294,41295,41297,41299,41301],{"class":70,"line":3366},[68,41296,32438],{"class":92},[68,41298,39859],{"class":85},[68,41300,869],{"class":102},[68,41302,39602],{"class":85},[68,41304,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327,41329,41331,41333,41335,41337],{"class":70,"line":3380},[68,41306,39607],{"class":85},[68,41308,32449],{"class":6815},[68,41310,869],{"class":102},[68,41312,33663],{"class":92},[68,41314,2114],{"class":85},[68,41316,32458],{"class":6815},[68,41318,869],{"class":102},[68,41320,36463],{"class":92},[68,41322,2114],{"class":85},[68,41324,32467],{"class":6815},[68,41326,869],{"class":102},[68,41328,288],{"class":92},[68,41330,2114],{"class":85},[68,41332,32476],{"class":6815},[68,41334,869],{"class":102},[68,41336,99],{"class":92},[68,41338,39640],{"class":85},[68,41340,41341],{"class":70,"line":3385},[68,41342,39645],{"class":85},[68,41344,41345,41347,41349,41351,41353,41355,41357,41359,41361,41363,41365,41367,41369,41371,41373,41375,41377],{"class":70,"line":4177},[68,41346,39607],{"class":85},[68,41348,32449],{"class":6815},[68,41350,869],{"class":102},[68,41352,36463],{"class":92},[68,41354,2114],{"class":85},[68,41356,32458],{"class":6815},[68,41358,869],{"class":102},[68,41360,36463],{"class":92},[68,41362,2114],{"class":85},[68,41364,32467],{"class":6815},[68,41366,869],{"class":102},[68,41368,288],{"class":92},[68,41370,2114],{"class":85},[68,41372,32476],{"class":6815},[68,41374,869],{"class":102},[68,41376,99],{"class":92},[68,41378,39640],{"class":85},[68,41380,41381],{"class":70,"line":4191},[68,41382,39645],{"class":85},[68,41384,41385,41387,41389,41391,41393,41395,41397,41399,41401,41403,41405,41407,41409,41411,41413,41415,41417],{"class":70,"line":4199},[68,41386,39607],{"class":85},[68,41388,32449],{"class":6815},[68,41390,869],{"class":102},[68,41392,36463],{"class":92},[68,41394,2114],{"class":85},[68,41396,32458],{"class":6815},[68,41398,869],{"class":102},[68,41400,36463],{"class":92},[68,41402,2114],{"class":85},[68,41404,32467],{"class":6815},[68,41406,869],{"class":102},[68,41408,288],{"class":92},[68,41410,2114],{"class":85},[68,41412,32476],{"class":6815},[68,41414,869],{"class":102},[68,41416,99],{"class":92},[68,41418,39640],{"class":85},[68,41420,41421],{"class":70,"line":4204},[68,41422,39645],{"class":85},[68,41424,41425,41427,41429,41431,41433,41435,41437,41439,41441,41443,41445,41447,41449],{"class":70,"line":4210},[68,41426,39690],{"class":85},[68,41428,32467],{"class":6815},[68,41430,869],{"class":102},[68,41432,267],{"class":92},[68,41434,2114],{"class":85},[68,41436,32522],{"class":6815},[68,41438,869],{"class":102},[68,41440,267],{"class":92},[68,41442,2114],{"class":85},[68,41444,32476],{"class":6815},[68,41446,869],{"class":102},[68,41448,600],{"class":92},[68,41450,1757],{"class":85},[68,41452,41453],{"class":70,"line":4216},[68,41454,39719],{"class":85},[68,41456,41457],{"class":70,"line":4221},[68,41458,40020],{"class":74},[68,41460,41461,41463,41465,41467],{"class":70,"line":9547},[68,41462,32438],{"class":92},[68,41464,40027],{"class":85},[68,41466,869],{"class":102},[68,41468,39602],{"class":85},[68,41470,41471,41473,41475,41477,41479,41481,41483,41485,41487,41489,41491,41493,41495,41497,41499,41501,41503],{"class":70,"line":9571},[68,41472,39607],{"class":85},[68,41474,32449],{"class":6815},[68,41476,869],{"class":102},[68,41478,36463],{"class":92},[68,41480,2114],{"class":85},[68,41482,32458],{"class":6815},[68,41484,869],{"class":102},[68,41486,40050],{"class":92},[68,41488,2114],{"class":85},[68,41490,32467],{"class":6815},[68,41492,869],{"class":102},[68,41494,288],{"class":92},[68,41496,2114],{"class":85},[68,41498,32476],{"class":6815},[68,41500,869],{"class":102},[68,41502,99],{"class":92},[68,41504,39640],{"class":85},[68,41506,41507],{"class":70,"line":9576},[68,41508,39645],{"class":85},[68,41510,41511,41513,41515,41517,41519,41521,41523,41525,41527,41529,41531,41533,41535,41537,41539,41541,41543],{"class":70,"line":9582},[68,41512,39607],{"class":85},[68,41514,32449],{"class":6815},[68,41516,869],{"class":102},[68,41518,40050],{"class":92},[68,41520,2114],{"class":85},[68,41522,32458],{"class":6815},[68,41524,869],{"class":102},[68,41526,40050],{"class":92},[68,41528,2114],{"class":85},[68,41530,32467],{"class":6815},[68,41532,869],{"class":102},[68,41534,288],{"class":92},[68,41536,2114],{"class":85},[68,41538,32476],{"class":6815},[68,41540,869],{"class":102},[68,41542,99],{"class":92},[68,41544,39640],{"class":85},[68,41546,41547],{"class":70,"line":9609},[68,41548,39645],{"class":85},[68,41550,41551,41553,41555,41557,41559,41561,41563,41565,41567,41569,41571,41573,41575,41577,41579,41581,41583],{"class":70,"line":9614},[68,41552,39607],{"class":85},[68,41554,32449],{"class":6815},[68,41556,869],{"class":102},[68,41558,40050],{"class":92},[68,41560,2114],{"class":85},[68,41562,32458],{"class":6815},[68,41564,869],{"class":102},[68,41566,40050],{"class":92},[68,41568,2114],{"class":85},[68,41570,32467],{"class":6815},[68,41572,869],{"class":102},[68,41574,288],{"class":92},[68,41576,2114],{"class":85},[68,41578,32476],{"class":6815},[68,41580,869],{"class":102},[68,41582,99],{"class":92},[68,41584,39640],{"class":85},[68,41586,41587],{"class":70,"line":9620},[68,41588,39645],{"class":85},[68,41590,41591,41593,41595,41597,41599,41601,41603,41605,41607,41609,41611,41613,41615],{"class":70,"line":9632},[68,41592,39690],{"class":85},[68,41594,32467],{"class":6815},[68,41596,869],{"class":102},[68,41598,267],{"class":92},[68,41600,2114],{"class":85},[68,41602,32522],{"class":6815},[68,41604,869],{"class":102},[68,41606,267],{"class":92},[68,41608,2114],{"class":85},[68,41610,32476],{"class":6815},[68,41612,869],{"class":102},[68,41614,600],{"class":92},[68,41616,1757],{"class":85},[68,41618,41619],{"class":70,"line":9644},[68,41620,39719],{"class":85},[68,41622,41623],{"class":70,"line":9656},[68,41624,40189],{"class":74},[68,41626,41627,41629,41631,41633],{"class":70,"line":11314},[68,41628,32438],{"class":92},[68,41630,40196],{"class":85},[68,41632,869],{"class":102},[68,41634,39602],{"class":85},[68,41636,41637,41639,41641,41643,41645,41647,41649,41651,41653,41655,41657,41659,41661,41663,41665,41667,41669],{"class":70,"line":11339},[68,41638,39607],{"class":85},[68,41640,32449],{"class":6815},[68,41642,869],{"class":102},[68,41644,40050],{"class":92},[68,41646,2114],{"class":85},[68,41648,32458],{"class":6815},[68,41650,869],{"class":102},[68,41652,40050],{"class":92},[68,41654,2114],{"class":85},[68,41656,32467],{"class":6815},[68,41658,869],{"class":102},[68,41660,288],{"class":92},[68,41662,2114],{"class":85},[68,41664,32476],{"class":6815},[68,41666,869],{"class":102},[68,41668,99],{"class":92},[68,41670,39640],{"class":85},[68,41672,41673],{"class":70,"line":11362},[68,41674,39645],{"class":85},[68,41676,41677,41679,41681,41683,41685,41687,41689,41691,41693,41695,41697,41699,41701,41703,41705,41707,41709],{"class":70,"line":11386},[68,41678,39607],{"class":85},[68,41680,32449],{"class":6815},[68,41682,869],{"class":102},[68,41684,40050],{"class":92},[68,41686,2114],{"class":85},[68,41688,32458],{"class":6815},[68,41690,869],{"class":102},[68,41692,40050],{"class":92},[68,41694,2114],{"class":85},[68,41696,32467],{"class":6815},[68,41698,869],{"class":102},[68,41700,288],{"class":92},[68,41702,2114],{"class":85},[68,41704,32476],{"class":6815},[68,41706,869],{"class":102},[68,41708,99],{"class":92},[68,41710,39640],{"class":85},[68,41712,41713],{"class":70,"line":11391},[68,41714,39645],{"class":85},[68,41716,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745,41747,41749],{"class":70,"line":11396},[68,41718,39607],{"class":85},[68,41720,32449],{"class":6815},[68,41722,869],{"class":102},[68,41724,40050],{"class":92},[68,41726,2114],{"class":85},[68,41728,32458],{"class":6815},[68,41730,869],{"class":102},[68,41732,40050],{"class":92},[68,41734,2114],{"class":85},[68,41736,32467],{"class":6815},[68,41738,869],{"class":102},[68,41740,288],{"class":92},[68,41742,2114],{"class":85},[68,41744,32476],{"class":6815},[68,41746,869],{"class":102},[68,41748,99],{"class":92},[68,41750,39640],{"class":85},[68,41752,41753],{"class":70,"line":11401},[68,41754,39645],{"class":85},[68,41756,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781],{"class":70,"line":11410},[68,41758,39690],{"class":85},[68,41760,32467],{"class":6815},[68,41762,869],{"class":102},[68,41764,267],{"class":92},[68,41766,2114],{"class":85},[68,41768,32522],{"class":6815},[68,41770,869],{"class":102},[68,41772,267],{"class":92},[68,41774,2114],{"class":85},[68,41776,32476],{"class":6815},[68,41778,869],{"class":102},[68,41780,600],{"class":92},[68,41782,1757],{"class":85},[68,41784,41785],{"class":70,"line":11415},[68,41786,39719],{"class":85},[68,41788,41789],{"class":70,"line":11421},[68,41790,40357],{"class":74},[68,41792,41793,41795,41797,41799],{"class":70,"line":11442},[68,41794,32438],{"class":92},[68,41796,40364],{"class":85},[68,41798,869],{"class":102},[68,41800,39602],{"class":85},[68,41802,41803],{"class":70,"line":11448},[68,41804,40373],{"class":74},[68,41806,41807],{"class":70,"line":11462},[68,41808,40378],{"class":74},[68,41810,41811],{"class":70,"line":11468},[68,41812,40383],{"class":85},[68,41814,41815,41817,41819,41821,41823,41825,41827,41829,41831],{"class":70,"line":11495},[68,41816,40388],{"class":85},[68,41818,2105],{"class":92},[68,41820,2191],{"class":102},[68,41822,2105],{"class":92},[68,41824,2191],{"class":102},[68,41826,40050],{"class":92},[68,41828,2114],{"class":85},[68,41830,36463],{"class":92},[68,41832,39640],{"class":85},[68,41834,41835],{"class":70,"line":11504},[68,41836,39645],{"class":85},[68,41838,41839,41841,41843,41845,41847],{"class":70,"line":11510},[68,41840,40388],{"class":85},[68,41842,36463],{"class":92},[68,41844,2114],{"class":85},[68,41846,33663],{"class":92},[68,41848,39640],{"class":85},[68,41850,41851],{"class":70,"line":11518},[68,41852,39645],{"class":85},[68,41854,41855,41857,41859,41861,41863],{"class":70,"line":11523},[68,41856,40388],{"class":85},[68,41858,33663],{"class":92},[68,41860,2114],{"class":85},[68,41862,2182],{"class":92},[68,41864,1757],{"class":85},[68,41866,41867],{"class":70,"line":18199},[68,41868,39719],{"class":85},[68,41870,41871],{"class":70,"line":18205},[68,41872,4000],{"emptyLinePlaceholder":1679},[68,41874,41875],{"class":70,"line":18228},[68,41876,40449],{"class":74},[68,41878,41879],{"class":70,"line":18234},[68,41880,40454],{"class":74},[68,41882,41883,41885,41887,41889,41891],{"class":70,"line":18257},[68,41884,5002],{"class":102},[68,41886,40461],{"class":85},[68,41888,27637],{"class":102},[68,41890,40466],{"class":92},[68,41892,40469],{"class":85},[68,41894,41895],{"class":70,"line":18271},[68,41896,40474],{"class":74},[68,41898,41899,41901,41903],{"class":70,"line":18291},[68,41900,6241],{"class":102},[68,41902,40481],{"class":92},[68,41904,40484],{"class":85},[68,41906,41907],{"class":70,"line":18297},[68,41908,40489],{"class":74},[68,41910,41911,41913,41915,41917,41919],{"class":70,"line":18308},[68,41912,40494],{"class":85},[68,41914,40497],{"class":6815},[68,41916,869],{"class":102},[68,41918,40502],{"class":872},[68,41920,1757],{"class":85},[68,41922,41923],{"class":70,"line":18331},[68,41924,40509],{"class":74},[68,41926,41927,41929,41931,41933,41935,41937],{"class":70,"line":18353},[68,41928,40514],{"class":102},[68,41930,40517],{"class":85},[68,41932,40520],{"class":102},[68,41934,40523],{"class":102},[68,41936,40526],{"class":92},[68,41938,5338],{"class":85},[68,41940,41941],{"class":70,"line":18358},[68,41942,40533],{"class":74},[68,41944,41945,41947,41949],{"class":70,"line":18364},[68,41946,40538],{"class":85},[68,41948,600],{"class":92},[68,41950,1757],{"class":85},[68,41952,41953],{"class":70,"line":18378},[68,41954,40547],{"class":74},[68,41956,41957,41959,41961],{"class":70,"line":18391},[68,41958,40552],{"class":102},[68,41960,40481],{"class":92},[68,41962,40557],{"class":85},[68,41964,41965],{"class":70,"line":18396},[68,41966,40562],{"class":74},[68,41968,41969],{"class":70,"line":18410},[68,41970,40567],{"class":74},[68,41972,41973,41975,41977,41979,41981],{"class":70,"line":18415},[68,41974,40572],{"class":85},[68,41976,600],{"class":92},[68,41978,2114],{"class":85},[68,41980,40579],{"class":92},[68,41982,1757],{"class":85},[68,41984,41985],{"class":70,"line":18421},[68,41986,40586],{"class":74},[68,41988,41989,41991,41993,41995,41997,41999],{"class":70,"line":18426},[68,41990,40514],{"class":102},[68,41992,40517],{"class":85},[68,41994,40520],{"class":102},[68,41996,40523],{"class":102},[68,41998,40526],{"class":92},[68,42000,5338],{"class":85},[68,42002,42003,42005,42007],{"class":70,"line":18440},[68,42004,40538],{"class":85},[68,42006,600],{"class":92},[68,42008,1757],{"class":85},[68,42010,42011],{"class":70,"line":18445},[68,42012,4000],{"emptyLinePlaceholder":1679},[68,42014,42015],{"class":70,"line":18450},[68,42016,36758],{"class":74},[68,42018,42019,42021,42023],{"class":70,"line":18464},[68,42020,32394],{"class":102},[68,42022,32686],{"class":587},[68,42024,32689],{"class":85},[68,42026,42027,42029,42031,42033],{"class":70,"line":18476},[68,42028,32694],{"class":85},[68,42030,869],{"class":102},[68,42032,32416],{"class":92},[68,42034,40635],{"class":85},[68,42036,42037,42039,42041,42043],{"class":70,"line":18481},[68,42038,32694],{"class":85},[68,42040,869],{"class":102},[68,42042,32416],{"class":92},[68,42044,40646],{"class":85},[68,42046,42047,42049,42051,42053],{"class":70,"line":18494},[68,42048,32694],{"class":85},[68,42050,869],{"class":102},[68,42052,32416],{"class":92},[68,42054,40657],{"class":85},[68,42056,42057,42059,42061,42063],{"class":70,"line":18499},[68,42058,32694],{"class":85},[68,42060,869],{"class":102},[68,42062,32416],{"class":92},[68,42064,40668],{"class":85},[68,42066,42067,42069,42071,42073],{"class":70,"line":18504},[68,42068,32694],{"class":85},[68,42070,869],{"class":102},[68,42072,32416],{"class":92},[68,42074,40679],{"class":85},[68,42076,42077,42079,42081,42083],{"class":70,"line":18509},[68,42078,32694],{"class":85},[68,42080,869],{"class":102},[68,42082,32416],{"class":92},[68,42084,40690],{"class":85},[68,42086,42087,42089],{"class":70,"line":18522},[68,42088,16349],{"class":102},[68,42090,32802],{"class":85},[68,42092,42093],{"class":70,"line":18527},[68,42094,4000],{"emptyLinePlaceholder":1679},[68,42096,42097],{"class":70,"line":34226},[68,42098,40705],{"class":74},[68,42100,42101,42103,42105,42107,42109],{"class":70,"line":34232},[68,42102,3134],{"class":102},[68,42104,32813],{"class":92},[68,42106,4548],{"class":102},[68,42108,40716],{"class":872},[68,42110,5338],{"class":85},[68,42112,42113,42115,42117,42119,42121,42123,42125,42127,42129],{"class":70,"line":34238},[68,42114,32830],{"class":85},[68,42116,869],{"class":102},[68,42118,32044],{"class":85},[68,42120,32837],{"class":872},[68,42122,3306],{"class":102},[68,42124,32842],{"class":85},[68,42126,3303],{"class":102},[68,42128,32069],{"class":872},[68,42130,1757],{"class":85},[68,42132,42133,42135],{"class":70,"line":34244},[68,42134,32892],{"class":92},[68,42136,32078],{"class":85},[68,42138,42139,42141,42143],{"class":70,"line":34250},[68,42140,32882],{"class":85},[68,42142,869],{"class":102},[68,42144,40753],{"class":85},[68,42146,42147,42149,42151,42153,42155,42157,42159,42161],{"class":70,"line":34261},[68,42148,32892],{"class":92},[68,42150,32895],{"class":85},[68,42152,99],{"class":92},[68,42154,2114],{"class":85},[68,42156,33094],{"class":92},[68,42158,2114],{"class":85},[68,42160,33094],{"class":92},[68,42162,32908],{"class":85},[48,42164,42165],{"start":89},[51,42166,42167],{},"测试代码",[58,42169,42171],{"className":31971,"code":42170,"language":31973,"meta":63,"style":63},"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",[65,42172,42173,42179,42189,42199,42203,42213,42224,42228,42232,42236,42244,42260,42270,42286,42296,42310,42314,42324,42334,42344,42350,42354,42358,42366,42370,42386,42394,42398,42402,42410,42418,42422,42426,42430,42434,42440,42444,42454,42462,42470,42474,42478,42482,42490,42494,42510,42514,42518,42522,42534,42538,42550,42554,42558,42570,42574,42584,42588,42592,42604,42608,42617,42621,42625,42633,42637,42645,42649,42653,42657,42661,42665,42681,42689,42693,42697,42745,42751,42755,42765,42773,42781,42785,42789,42793,42797,42805,42809,42825,42829,42837,42845],{"__ignoreMap":63},[68,42174,42175,42177],{"class":70,"line":71},[68,42176,31985],{"class":102},[68,42178,31988],{"class":85},[68,42180,42181,42183,42185,42187],{"class":70,"line":78},[68,42182,31985],{"class":102},[68,42184,33008],{"class":85},[68,42186,32976],{"class":102},[68,42188,33013],{"class":85},[68,42190,42191,42193,42195,42197],{"class":70,"line":89},[68,42192,32330],{"class":102},[68,42194,32991],{"class":85},[68,42196,31985],{"class":102},[68,42198,32996],{"class":85},[68,42200,42201],{"class":70,"line":115},[68,42202,35515],{"class":74},[68,42204,42205,42207,42209,42211],{"class":70,"line":280},[68,42206,32330],{"class":102},[68,42208,32961],{"class":85},[68,42210,31985],{"class":102},[68,42212,32966],{"class":85},[68,42214,42215,42217,42219,42221],{"class":70,"line":301},[68,42216,32330],{"class":102},[68,42218,33507],{"class":85},[68,42220,31985],{"class":102},[68,42222,42223],{"class":92}," VGG16\n",[68,42225,42226],{"class":70,"line":320},[68,42227,4000],{"emptyLinePlaceholder":1679},[68,42229,42230],{"class":70,"line":2915},[68,42231,4000],{"emptyLinePlaceholder":1679},[68,42233,42234],{"class":70,"line":2921},[68,42235,35544],{"class":74},[68,42237,42238,42240,42242],{"class":70,"line":2933},[68,42239,33540],{"class":102},[68,42241,35551],{"class":587},[68,42243,33546],{"class":85},[68,42245,42246,42248,42250,42252,42254,42256,42258],{"class":70,"line":3214},[68,42247,35558],{"class":85},[68,42249,869],{"class":102},[68,42251,33048],{"class":85},[68,42253,33051],{"class":6815},[68,42255,869],{"class":102},[68,42257,33056],{"class":872},[68,42259,33059],{"class":85},[68,42261,42262,42264,42266,42268],{"class":70,"line":3219},[68,42263,35575],{"class":6815},[68,42265,869],{"class":102},[68,42267,35580],{"class":92},[68,42269,33059],{"class":85},[68,42271,42272,42274,42276,42278,42280,42282,42284],{"class":70,"line":3225},[68,42273,35587],{"class":6815},[68,42275,869],{"class":102},[68,42277,33086],{"class":85},[68,42279,33089],{"class":6815},[68,42281,869],{"class":102},[68,42283,33094],{"class":92},[68,42285,33097],{"class":85},[68,42287,42288,42290,42292,42294],{"class":70,"line":3230},[68,42289,35604],{"class":6815},[68,42291,869],{"class":102},[68,42293,33069],{"class":92},[68,42295,1757],{"class":85},[68,42297,42298,42300,42302,42304,42306,42308],{"class":70,"line":3244},[68,42299,35615],{"class":85},[68,42301,869],{"class":102},[68,42303,33127],{"class":85},[68,42305,33130],{"class":6815},[68,42307,869],{"class":102},[68,42309,35626],{"class":85},[68,42311,42312],{"class":70,"line":3249},[68,42313,35631],{"class":74},[68,42315,42316,42318,42320,42322],{"class":70,"line":3255},[68,42317,35636],{"class":6815},[68,42319,869],{"class":102},[68,42321,99],{"class":92},[68,42323,33059],{"class":85},[68,42325,42326,42328,42330,42332],{"class":70,"line":3276},[68,42327,35647],{"class":6815},[68,42329,869],{"class":102},[68,42331,33069],{"class":92},[68,42333,33059],{"class":85},[68,42335,42336,42338,42340,42342],{"class":70,"line":3281},[68,42337,35658],{"class":6815},[68,42339,869],{"class":102},[68,42341,600],{"class":92},[68,42343,1757],{"class":85},[68,42345,42346,42348],{"class":70,"line":3295},[68,42347,5689],{"class":102},[68,42349,35671],{"class":85},[68,42351,42352],{"class":70,"line":3300},[68,42353,4000],{"emptyLinePlaceholder":1679},[68,42355,42356],{"class":70,"line":3329},[68,42357,35680],{"class":74},[68,42359,42360,42362,42364],{"class":70,"line":3334},[68,42361,33540],{"class":102},[68,42363,35687],{"class":587},[68,42365,35690],{"class":85},[68,42367,42368],{"class":70,"line":3351},[68,42369,35695],{"class":74},[68,42371,42372,42374,42376,42378,42380,42382,42384],{"class":70,"line":3356},[68,42373,32830],{"class":85},[68,42375,869],{"class":102},[68,42377,32837],{"class":872},[68,42379,3306],{"class":102},[68,42381,32842],{"class":85},[68,42383,3303],{"class":102},[68,42385,35712],{"class":872},[68,42387,42388,42390,42392],{"class":70,"line":3361},[68,42389,32882],{"class":85},[68,42391,869],{"class":102},[68,42393,33882],{"class":85},[68,42395,42396],{"class":70,"line":3366},[68,42397,4000],{"emptyLinePlaceholder":1679},[68,42399,42400],{"class":70,"line":3380},[68,42401,35729],{"class":74},[68,42403,42404,42406,42408],{"class":70,"line":3385},[68,42405,35734],{"class":85},[68,42407,869],{"class":102},[68,42409,33935],{"class":92},[68,42411,42412,42414,42416],{"class":70,"line":4177},[68,42413,35743],{"class":85},[68,42415,869],{"class":102},[68,42417,4684],{"class":92},[68,42419,42420],{"class":70,"line":4191},[68,42421,4000],{"emptyLinePlaceholder":1679},[68,42423,42424],{"class":70,"line":4199},[68,42425,35756],{"class":74},[68,42427,42428],{"class":70,"line":4204},[68,42429,35761],{"class":74},[68,42431,42432],{"class":70,"line":4210},[68,42433,35766],{"class":74},[68,42435,42436,42438],{"class":70,"line":4216},[68,42437,35771],{"class":102},[68,42439,34477],{"class":85},[68,42441,42442],{"class":70,"line":4221},[68,42443,35778],{"class":74},[68,42445,42446,42448,42450,42452],{"class":70,"line":9547},[68,42447,5002],{"class":102},[68,42449,35785],{"class":85},[68,42451,27637],{"class":102},[68,42453,35790],{"class":85},[68,42455,42456,42458,42460],{"class":70,"line":9571},[68,42457,35795],{"class":85},[68,42459,869],{"class":102},[68,42461,35800],{"class":85},[68,42463,42464,42466,42468],{"class":70,"line":9576},[68,42465,35805],{"class":85},[68,42467,869],{"class":102},[68,42469,35810],{"class":85},[68,42471,42472],{"class":70,"line":9582},[68,42473,35815],{"class":74},[68,42475,42476],{"class":70,"line":9609},[68,42477,34468],{"class":85},[68,42479,42480],{"class":70,"line":9614},[68,42481,35824],{"class":74},[68,42483,42484,42486,42488],{"class":70,"line":9620},[68,42485,34253],{"class":85},[68,42487,869],{"class":102},[68,42489,35833],{"class":85},[68,42491,42492],{"class":70,"line":9632},[68,42493,35838],{"class":74},[68,42495,42496,42498,42500,42502,42504,42506,42508],{"class":70,"line":9644},[68,42497,34270],{"class":85},[68,42499,869],{"class":102},[68,42501,34275],{"class":85},[68,42503,34278],{"class":6815},[68,42505,869],{"class":102},[68,42507,99],{"class":92},[68,42509,1757],{"class":85},[68,42511,42512],{"class":70,"line":9656},[68,42513,35859],{"class":74},[68,42515,42516],{"class":70,"line":11314},[68,42517,35864],{"class":74},[68,42519,42520],{"class":70,"line":11339},[68,42521,35869],{"class":74},[68,42523,42524,42526,42528,42530,42532],{"class":70,"line":11362},[68,42525,35874],{"class":85},[68,42527,11075],{"class":102},[68,42529,34380],{"class":85},[68,42531,4548],{"class":102},[68,42533,35883],{"class":85},[68,42535,42536],{"class":70,"line":11386},[68,42537,35888],{"class":74},[68,42539,42540,42542,42544,42546,42548],{"class":70,"line":11391},[68,42541,35893],{"class":85},[68,42543,11075],{"class":102},[68,42545,35898],{"class":85},[68,42547,600],{"class":92},[68,42549,1757],{"class":85},[68,42551,42552],{"class":70,"line":11396},[68,42553,4000],{"emptyLinePlaceholder":1679},[68,42555,42556],{"class":70,"line":11401},[68,42557,35911],{"class":74},[68,42559,42560,42562,42564,42566,42568],{"class":70,"line":11410},[68,42561,35916],{"class":85},[68,42563,869],{"class":102},[68,42565,35921],{"class":85},[68,42567,2320],{"class":102},[68,42569,35926],{"class":85},[68,42571,42572],{"class":70,"line":11415},[68,42573,35931],{"class":74},[68,42575,42576,42578,42580,42582],{"class":70,"line":11421},[68,42577,34044],{"class":92},[68,42579,997],{"class":85},[68,42581,35940],{"class":872},[68,42583,35943],{"class":85},[68,42585,42586],{"class":70,"line":11442},[68,42587,4000],{"emptyLinePlaceholder":1679},[68,42589,42590],{"class":70,"line":11448},[68,42591,35952],{"class":74},[68,42593,42594,42596,42598,42600,42602],{"class":70,"line":11462},[68,42595,3134],{"class":102},[68,42597,32813],{"class":92},[68,42599,4548],{"class":102},[68,42601,32818],{"class":872},[68,42603,5338],{"class":85},[68,42605,42606],{"class":70,"line":11468},[68,42607,35969],{"class":74},[68,42609,42610,42612,42614],{"class":70,"line":11495},[68,42611,32882],{"class":85},[68,42613,869],{"class":102},[68,42615,42616],{"class":85},"VGG16()\n",[68,42618,42619],{"class":70,"line":11504},[68,42620,35982],{"class":74},[68,42622,42623],{"class":70,"line":11510},[68,42624,35987],{"class":74},[68,42626,42627,42629,42631],{"class":70,"line":11518},[68,42628,35992],{"class":85},[68,42630,35995],{"class":872},[68,42632,32090],{"class":85},[68,42634,42635],{"class":70,"line":11523},[68,42636,36002],{"class":74},[68,42638,42639,42641,42643],{"class":70,"line":18199},[68,42640,35615],{"class":85},[68,42642,869],{"class":102},[68,42644,36011],{"class":85},[68,42646,42647],{"class":70,"line":18205},[68,42648,36016],{"class":74},[68,42650,42651],{"class":70,"line":18228},[68,42652,36021],{"class":85},[68,42654,42655],{"class":70,"line":18234},[68,42656,4000],{"emptyLinePlaceholder":1679},[68,42658,42659],{"class":70,"line":18257},[68,42660,36030],{"class":74},[68,42662,42663],{"class":70,"line":18271},[68,42664,36035],{"class":74},[68,42666,42667,42669,42671,42673,42675,42677,42679],{"class":70,"line":18291},[68,42668,32830],{"class":85},[68,42670,869],{"class":102},[68,42672,32837],{"class":872},[68,42674,3306],{"class":102},[68,42676,32842],{"class":85},[68,42678,3303],{"class":102},[68,42680,35712],{"class":872},[68,42682,42683,42685,42687],{"class":70,"line":18297},[68,42684,32882],{"class":85},[68,42686,869],{"class":102},[68,42688,33882],{"class":85},[68,42690,42691],{"class":70,"line":18308},[68,42692,36064],{"class":74},[68,42694,42695],{"class":70,"line":18331},[68,42696,36069],{"class":74},[68,42698,42699,42701,42703,42705,42707,42709,42711,42713,42715,42717,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743],{"class":70,"line":18353},[68,42700,36074],{"class":85},[68,42702,869],{"class":102},[68,42704,2626],{"class":85},[68,42706,36081],{"class":872},[68,42708,2114],{"class":85},[68,42710,36086],{"class":872},[68,42712,2114],{"class":85},[68,42714,36091],{"class":872},[68,42716,2114],{"class":85},[68,42718,36096],{"class":872},[68,42720,2114],{"class":85},[68,42722,36101],{"class":872},[68,42724,2114],{"class":85},[68,42726,36106],{"class":872},[68,42728,2114],{"class":85},[68,42730,36111],{"class":872},[68,42732,2114],{"class":85},[68,42734,36116],{"class":872},[68,42736,2114],{"class":85},[68,42738,36121],{"class":872},[68,42740,2114],{"class":85},[68,42742,36126],{"class":872},[68,42744,34839],{"class":85},[68,42746,42747,42749],{"class":70,"line":18358},[68,42748,35771],{"class":102},[68,42750,34477],{"class":85},[68,42752,42753],{"class":70,"line":18364},[68,42754,36139],{"class":74},[68,42756,42757,42759,42761,42763],{"class":70,"line":18378},[68,42758,5002],{"class":102},[68,42760,36146],{"class":85},[68,42762,27637],{"class":102},[68,42764,35790],{"class":85},[68,42766,42767,42769,42771],{"class":70,"line":18391},[68,42768,34203],{"class":85},[68,42770,869],{"class":102},[68,42772,34208],{"class":85},[68,42774,42775,42777,42779],{"class":70,"line":18396},[68,42776,34218],{"class":85},[68,42778,869],{"class":102},[68,42780,34223],{"class":85},[68,42782,42783],{"class":70,"line":18410},[68,42784,4000],{"emptyLinePlaceholder":1679},[68,42786,42787],{"class":70,"line":18415},[68,42788,36175],{"class":74},[68,42790,42791],{"class":70,"line":18421},[68,42792,34468],{"class":85},[68,42794,42795],{"class":70,"line":18426},[68,42796,36184],{"class":74},[68,42798,42799,42801,42803],{"class":70,"line":18440},[68,42800,34253],{"class":85},[68,42802,869],{"class":102},[68,42804,34258],{"class":85},[68,42806,42807],{"class":70,"line":18445},[68,42808,36197],{"class":74},[68,42810,42811,42813,42815,42817,42819,42821,42823],{"class":70,"line":18450},[68,42812,34270],{"class":85},[68,42814,869],{"class":102},[68,42816,34275],{"class":85},[68,42818,34278],{"class":6815},[68,42820,869],{"class":102},[68,42822,99],{"class":92},[68,42824,1757],{"class":85},[68,42826,42827],{"class":70,"line":18464},[68,42828,36218],{"class":74},[68,42830,42831,42833,42835],{"class":70,"line":18476},[68,42832,36223],{"class":85},[68,42834,869],{"class":102},[68,42836,36228],{"class":85},[68,42838,42839,42841,42843],{"class":70,"line":18481},[68,42840,36233],{"class":85},[68,42842,869],{"class":102},[68,42844,36238],{"class":85},[68,42846,42847,42849,42851,42853,42855,42857,42859,42861],{"class":70,"line":18494},[68,42848,36243],{"class":92},[68,42850,997],{"class":85},[68,42852,36248],{"class":872},[68,42854,36251],{"class":85},[68,42856,36254],{"class":872},[68,42858,2114],{"class":85},[68,42860,36259],{"class":872},[68,42862,36262],{"class":85},[43,42864,42866],{"id":42865},"_23googlenet","2.3.GoogLeNet",[23593,42868,42870],{"id":42869},"_231原理","2.3.1.原理",[48,42872,42873],{},[51,42874,42875],{},"网络结构",[19,42877,42878],{},[38,42879],{"alt":63,"src":42880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,42882,42883],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42885,42886],{},[38,42887],{"alt":63,"src":42888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,42890,42891],{},[38,42892],{"alt":63,"src":42893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,42895,42896],{},[38,42897],{"alt":63,"src":42898},"\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",[48,42900,42901],{"start":78},[51,42902,42903],{},"1x1卷积的优点",[19,42905,42906],{},[38,42907],{"alt":63,"src":42908},"\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",[48,42910,42911],{"start":89},[51,42912,42913],{},"全局平均池化层优点",[19,42915,42916],{},[38,42917],{"alt":63,"src":42918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,42920,42921],{},[38,42922],{"alt":63,"src":42923},"\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",[48,42925,42926],{"start":115},[51,42927,42928],{},"参数详细描述",[19,42930,42931],{},[38,42932],{"alt":63,"src":42933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,42935,42936],{},[38,42937],{"alt":63,"src":42938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,42940,42941],{},[38,42942],{"alt":63,"src":42943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,42945,42946],{},[38,42947],{"alt":63,"src":42948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,42950,42951],{},[38,42952],{"alt":63,"src":42953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,42955,42956],{},[38,42957],{"alt":63,"src":42958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42960,42961],{},[38,42962],{"alt":63,"src":42963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42965,42966],{},[38,42967],{"alt":63,"src":42968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42970,42971],{},[38,42972],{"alt":63,"src":42973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42975,42976],{},[38,42977],{"alt":63,"src":42978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42980,42981],{},[38,42982],{"alt":63,"src":42983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42985,42986],{},[38,42987],{"alt":63,"src":42988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42990,42991],{},[38,42992],{"alt":63,"src":42993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,42995,42996],{},[38,42997],{"alt":63,"src":42998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,43000,43001],{},[38,43002],{"alt":63,"src":43003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,43005,43006],{},[38,43007],{"alt":63,"src":43008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,43010,43011],{},[38,43012],{"alt":63,"src":43013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,43015,43016],{},[38,43017],{"alt":63,"src":43018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,43020,43021],{},[38,43022],{"alt":63,"src":43023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,43025,43026],{},[38,43027],{"alt":63,"src":43028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,43030,43031],{},[38,43032],{"alt":63,"src":43033},"\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",[23593,43035,43037],{"id":43036},"_232代码实现","2.3.2.代码实现",[48,43039,43040],{},[51,43041,32304],{},[19,43043,43044],{},"根据原理一步一步搭建即可",[58,43046,43048],{"className":31971,"code":43047,"language":31973,"meta":63,"style":63},"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",[65,43049,43050,43056,43066,43076,43080,43097,43106,43121,43131,43136,43169,43174,43211,43258,43263,43299,43346,43351,43356,43391,43423,43427,43435,43451,43475,43500,43521,43526,43541,43545,43549,43554,43571,43576,43585,43600,43611,43655,43659,43687,43691,43702,43730,43734,43771,43775,43803,43807,43818,43854,43886,43914,43918,43929,43963,43995,44027,44060,44094,44122,44126,44137,44170,44202,44216,44220,44233,44237,44242,44254,44262,44284,44289,44294,44299,44304,44309,44314,44328,44336,44345,44358,44373,44382,44386,44394,44405,44416,44427,44438,44449,44455,44459,44464,44476,44496,44505],{"__ignoreMap":63},[68,43051,43052,43054],{"class":70,"line":71},[68,43053,31985],{"class":102},[68,43055,31988],{"class":85},[68,43057,43058,43060,43062,43064],{"class":70,"line":78},[68,43059,32330],{"class":102},[68,43061,32333],{"class":85},[68,43063,31985],{"class":102},[68,43065,32338],{"class":85},[68,43067,43068,43070,43072,43074],{"class":70,"line":89},[68,43069,32330],{"class":102},[68,43071,32350],{"class":85},[68,43073,31985],{"class":102},[68,43075,32355],{"class":85},[68,43077,43078],{"class":70,"line":115},[68,43079,4000],{"emptyLinePlaceholder":1679},[68,43081,43082,43084,43087,43089,43091,43093,43095],{"class":70,"line":280},[68,43083,16291],{"class":102},[68,43085,43086],{"class":587}," Inception",[68,43088,997],{"class":85},[68,43090,32371],{"class":587},[68,43092,2294],{"class":85},[68,43094,32376],{"class":587},[68,43096,32379],{"class":85},[68,43098,43099,43101,43103],{"class":70,"line":301},[68,43100,32394],{"class":102},[68,43102,32397],{"class":92},[68,43104,43105],{"class":85},"(self,in_channels,c1,c2,c3,c4):\n",[68,43107,43108,43110,43113,43115,43117,43119],{"class":70,"line":320},[68,43109,32410],{"class":92},[68,43111,43112],{"class":85},"(Inception,",[68,43114,32416],{"class":92},[68,43116,32419],{"class":85},[68,43118,32422],{"class":92},[68,43120,3577],{"class":85},[68,43122,43123,43125,43127,43129],{"class":70,"line":2915},[68,43124,32438],{"class":92},[68,43126,36364],{"class":85},[68,43128,869],{"class":102},[68,43130,36369],{"class":85},[68,43132,43133],{"class":70,"line":2921},[68,43134,43135],{"class":74},"        # 路线1：定义1*1卷积\n",[68,43137,43138,43140,43143,43145,43147,43149,43151,43154,43156,43158,43161,43163,43165,43167],{"class":70,"line":2933},[68,43139,32438],{"class":92},[68,43141,43142],{"class":85},".p1_1",[68,43144,869],{"class":102},[68,43146,32446],{"class":85},[68,43148,32449],{"class":6815},[68,43150,869],{"class":102},[68,43152,43153],{"class":85},"in_channels,",[68,43155,32458],{"class":6815},[68,43157,869],{"class":102},[68,43159,43160],{"class":85},"c1,",[68,43162,32467],{"class":6815},[68,43164,869],{"class":102},[68,43166,99],{"class":92},[68,43168,1757],{"class":85},[68,43170,43171],{"class":70,"line":3214},[68,43172,43173],{"class":74},"        # 路线2：定义1*1卷积和3*3\n",[68,43175,43176,43178,43181,43183,43185,43187,43189,43191,43193,43195,43198,43200,43203,43205,43207,43209],{"class":70,"line":3219},[68,43177,32438],{"class":92},[68,43179,43180],{"class":85},".p2_1",[68,43182,869],{"class":102},[68,43184,32446],{"class":85},[68,43186,32449],{"class":6815},[68,43188,869],{"class":102},[68,43190,43153],{"class":85},[68,43192,32458],{"class":6815},[68,43194,869],{"class":102},[68,43196,43197],{"class":85},"c2[",[68,43199,600],{"class":92},[68,43201,43202],{"class":85},"],",[68,43204,32467],{"class":6815},[68,43206,869],{"class":102},[68,43208,99],{"class":92},[68,43210,1757],{"class":85},[68,43212,43213,43215,43218,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244,43246,43248,43250,43252,43254,43256],{"class":70,"line":3225},[68,43214,32438],{"class":92},[68,43216,43217],{"class":85},".p2_2",[68,43219,869],{"class":102},[68,43221,32446],{"class":85},[68,43223,32449],{"class":6815},[68,43225,869],{"class":102},[68,43227,43197],{"class":85},[68,43229,600],{"class":92},[68,43231,43202],{"class":85},[68,43233,32458],{"class":6815},[68,43235,869],{"class":102},[68,43237,43197],{"class":85},[68,43239,99],{"class":92},[68,43241,43202],{"class":85},[68,43243,32467],{"class":6815},[68,43245,869],{"class":102},[68,43247,288],{"class":92},[68,43249,2114],{"class":85},[68,43251,32476],{"class":6815},[68,43253,869],{"class":102},[68,43255,99],{"class":92},[68,43257,1757],{"class":85},[68,43259,43260],{"class":70,"line":3230},[68,43261,43262],{"class":74},"        # 路线3：定义1*1卷积和5*5\n",[68,43264,43265,43267,43270,43272,43274,43276,43278,43280,43282,43284,43287,43289,43291,43293,43295,43297],{"class":70,"line":3244},[68,43266,32438],{"class":92},[68,43268,43269],{"class":85},".p3_1",[68,43271,869],{"class":102},[68,43273,32446],{"class":85},[68,43275,32449],{"class":6815},[68,43277,869],{"class":102},[68,43279,43153],{"class":85},[68,43281,32458],{"class":6815},[68,43283,869],{"class":102},[68,43285,43286],{"class":85},"c3[",[68,43288,600],{"class":92},[68,43290,43202],{"class":85},[68,43292,32467],{"class":6815},[68,43294,869],{"class":102},[68,43296,99],{"class":92},[68,43298,1757],{"class":85},[68,43300,43301,43303,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328,43330,43332,43334,43336,43338,43340,43342,43344],{"class":70,"line":3249},[68,43302,32438],{"class":92},[68,43304,43305],{"class":85},".p3_2",[68,43307,869],{"class":102},[68,43309,32446],{"class":85},[68,43311,32449],{"class":6815},[68,43313,869],{"class":102},[68,43315,43286],{"class":85},[68,43317,600],{"class":92},[68,43319,43202],{"class":85},[68,43321,32458],{"class":6815},[68,43323,869],{"class":102},[68,43325,43286],{"class":85},[68,43327,99],{"class":92},[68,43329,43202],{"class":85},[68,43331,32467],{"class":6815},[68,43333,869],{"class":102},[68,43335,2055],{"class":92},[68,43337,2114],{"class":85},[68,43339,32476],{"class":6815},[68,43341,869],{"class":102},[68,43343,267],{"class":92},[68,43345,1757],{"class":85},[68,43347,43348],{"class":70,"line":3255},[68,43349,43350],{"class":74},"        # 路线4：定义3*3最大池化和1*1卷积\n",[68,43352,43353],{"class":70,"line":3276},[68,43354,43355],{"class":74},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[68,43357,43358,43360,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383,43385,43387,43389],{"class":70,"line":3281},[68,43359,32438],{"class":92},[68,43361,43362],{"class":85},".p4_1",[68,43364,869],{"class":102},[68,43366,36422],{"class":85},[68,43368,32467],{"class":6815},[68,43370,869],{"class":102},[68,43372,288],{"class":92},[68,43374,2114],{"class":85},[68,43376,32522],{"class":6815},[68,43378,869],{"class":102},[68,43380,99],{"class":92},[68,43382,2114],{"class":85},[68,43384,32476],{"class":6815},[68,43386,869],{"class":102},[68,43388,99],{"class":92},[68,43390,1757],{"class":85},[68,43392,43393,43395,43398,43400,43402,43404,43406,43408,43410,43412,43415,43417,43419,43421],{"class":70,"line":3295},[68,43394,32438],{"class":92},[68,43396,43397],{"class":85},".p4_2",[68,43399,869],{"class":102},[68,43401,32446],{"class":85},[68,43403,32449],{"class":6815},[68,43405,869],{"class":102},[68,43407,43153],{"class":85},[68,43409,32458],{"class":6815},[68,43411,869],{"class":102},[68,43413,43414],{"class":85},"c4,",[68,43416,32467],{"class":6815},[68,43418,869],{"class":102},[68,43420,99],{"class":92},[68,43422,1757],{"class":85},[68,43424,43425],{"class":70,"line":3300},[68,43426,4000],{"emptyLinePlaceholder":1679},[68,43428,43429,43431,43433],{"class":70,"line":3329},[68,43430,32394],{"class":102},[68,43432,32686],{"class":587},[68,43434,32689],{"class":85},[68,43436,43437,43440,43442,43444,43446,43448],{"class":70,"line":3334},[68,43438,43439],{"class":85},"        p1",[68,43441,869],{"class":102},[68,43443,32416],{"class":92},[68,43445,36777],{"class":85},[68,43447,32416],{"class":92},[68,43449,43450],{"class":85},".p1_1(x))\n",[68,43452,43453,43455,43457,43459,43461,43463,43466,43468,43470,43472],{"class":70,"line":3351},[68,43454,8684],{"class":85},[68,43456,869],{"class":102},[68,43458,32416],{"class":92},[68,43460,36777],{"class":85},[68,43462,32416],{"class":92},[68,43464,43465],{"class":85},".p2_2(",[68,43467,32416],{"class":92},[68,43469,36777],{"class":85},[68,43471,32416],{"class":92},[68,43473,43474],{"class":85},".p2_1(x))))\n",[68,43476,43477,43480,43482,43484,43486,43488,43491,43493,43495,43497],{"class":70,"line":3356},[68,43478,43479],{"class":85},"        p3",[68,43481,869],{"class":102},[68,43483,32416],{"class":92},[68,43485,36777],{"class":85},[68,43487,32416],{"class":92},[68,43489,43490],{"class":85},".p3_2(",[68,43492,32416],{"class":92},[68,43494,36777],{"class":85},[68,43496,32416],{"class":92},[68,43498,43499],{"class":85},".p3_1(x))))\n",[68,43501,43502,43505,43507,43509,43511,43513,43516,43518],{"class":70,"line":3361},[68,43503,43504],{"class":85},"        p4",[68,43506,869],{"class":102},[68,43508,32416],{"class":92},[68,43510,36777],{"class":85},[68,43512,32416],{"class":92},[68,43514,43515],{"class":85},".p4_2(",[68,43517,32416],{"class":92},[68,43519,43520],{"class":85},".p4_1(x)))\n",[68,43522,43523],{"class":70,"line":3366},[68,43524,43525],{"class":74},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[68,43527,43528,43530,43533,43535,43537,43539],{"class":70,"line":3380},[68,43529,16349],{"class":102},[68,43531,43532],{"class":85}," torch.cat((p1,p2,p3,p4),",[68,43534,34278],{"class":6815},[68,43536,869],{"class":102},[68,43538,99],{"class":92},[68,43540,1757],{"class":85},[68,43542,43543],{"class":70,"line":3385},[68,43544,4000],{"emptyLinePlaceholder":1679},[68,43546,43547],{"class":70,"line":4177},[68,43548,4000],{"emptyLinePlaceholder":1679},[68,43550,43551],{"class":70,"line":4191},[68,43552,43553],{"class":74},"# 搭建GoogLeNet网络\n",[68,43555,43556,43558,43561,43563,43565,43567,43569],{"class":70,"line":4199},[68,43557,16291],{"class":102},[68,43559,43560],{"class":587}," GoogLeNet",[68,43562,997],{"class":85},[68,43564,32371],{"class":587},[68,43566,2294],{"class":85},[68,43568,32376],{"class":587},[68,43570,32379],{"class":85},[68,43572,43573],{"class":70,"line":4204},[68,43574,43575],{"class":74},"    # 必须把Inception导入到里边\n",[68,43577,43578,43580,43582],{"class":70,"line":4210},[68,43579,32394],{"class":102},[68,43581,32397],{"class":92},[68,43583,43584],{"class":85},"(self,Inception):\n",[68,43586,43587,43589,43592,43594,43596,43598],{"class":70,"line":4216},[68,43588,32410],{"class":92},[68,43590,43591],{"class":85},"(GoogLeNet,",[68,43593,32416],{"class":92},[68,43595,32419],{"class":85},[68,43597,32422],{"class":92},[68,43599,3577],{"class":85},[68,43601,43602,43604,43607,43609],{"class":70,"line":4221},[68,43603,32438],{"class":92},[68,43605,43606],{"class":85},".b1",[68,43608,869],{"class":102},[68,43610,39602],{"class":85},[68,43612,43613,43615,43617,43619,43621,43623,43625,43627,43629,43631,43633,43635,43637,43639,43641,43643,43645,43647,43649,43651,43653],{"class":70,"line":9547},[68,43614,39607],{"class":85},[68,43616,32449],{"class":6815},[68,43618,869],{"class":102},[68,43620,99],{"class":92},[68,43622,2114],{"class":85},[68,43624,32458],{"class":6815},[68,43626,869],{"class":102},[68,43628,1940],{"class":92},[68,43630,2114],{"class":85},[68,43632,32467],{"class":6815},[68,43634,869],{"class":102},[68,43636,2105],{"class":92},[68,43638,2114],{"class":85},[68,43640,32522],{"class":6815},[68,43642,869],{"class":102},[68,43644,267],{"class":92},[68,43646,2114],{"class":85},[68,43648,32476],{"class":6815},[68,43650,869],{"class":102},[68,43652,288],{"class":92},[68,43654,39640],{"class":85},[68,43656,43657],{"class":70,"line":9571},[68,43658,39645],{"class":85},[68,43660,43661,43663,43665,43667,43669,43671,43673,43675,43677,43679,43681,43683,43685],{"class":70,"line":9576},[68,43662,39690],{"class":85},[68,43664,32467],{"class":6815},[68,43666,869],{"class":102},[68,43668,288],{"class":92},[68,43670,2114],{"class":85},[68,43672,32522],{"class":6815},[68,43674,869],{"class":102},[68,43676,267],{"class":92},[68,43678,2114],{"class":85},[68,43680,32476],{"class":6815},[68,43682,869],{"class":102},[68,43684,99],{"class":92},[68,43686,1757],{"class":85},[68,43688,43689],{"class":70,"line":9582},[68,43690,39719],{"class":85},[68,43692,43693,43695,43698,43700],{"class":70,"line":9609},[68,43694,32438],{"class":92},[68,43696,43697],{"class":85},".b2",[68,43699,869],{"class":102},[68,43701,39602],{"class":85},[68,43703,43704,43706,43708,43710,43712,43714,43716,43718,43720,43722,43724,43726,43728],{"class":70,"line":9614},[68,43705,39607],{"class":85},[68,43707,32449],{"class":6815},[68,43709,869],{"class":102},[68,43711,1940],{"class":92},[68,43713,2114],{"class":85},[68,43715,32458],{"class":6815},[68,43717,869],{"class":102},[68,43719,1940],{"class":92},[68,43721,2114],{"class":85},[68,43723,32467],{"class":6815},[68,43725,869],{"class":102},[68,43727,99],{"class":92},[68,43729,39640],{"class":85},[68,43731,43732],{"class":70,"line":9620},[68,43733,39645],{"class":85},[68,43735,43736,43738,43740,43742,43744,43746,43748,43750,43753,43755,43757,43759,43761,43763,43765,43767,43769],{"class":70,"line":9632},[68,43737,39607],{"class":85},[68,43739,32449],{"class":6815},[68,43741,869],{"class":102},[68,43743,1940],{"class":92},[68,43745,2114],{"class":85},[68,43747,32458],{"class":6815},[68,43749,869],{"class":102},[68,43751,43752],{"class":92},"192",[68,43754,2114],{"class":85},[68,43756,32467],{"class":6815},[68,43758,869],{"class":102},[68,43760,288],{"class":92},[68,43762,2114],{"class":85},[68,43764,32476],{"class":6815},[68,43766,869],{"class":102},[68,43768,99],{"class":92},[68,43770,39640],{"class":85},[68,43772,43773],{"class":70,"line":9644},[68,43774,39645],{"class":85},[68,43776,43777,43779,43781,43783,43785,43787,43789,43791,43793,43795,43797,43799,43801],{"class":70,"line":9656},[68,43778,39690],{"class":85},[68,43780,32467],{"class":6815},[68,43782,869],{"class":102},[68,43784,288],{"class":92},[68,43786,2114],{"class":85},[68,43788,32522],{"class":6815},[68,43790,869],{"class":102},[68,43792,267],{"class":92},[68,43794,2114],{"class":85},[68,43796,32476],{"class":6815},[68,43798,869],{"class":102},[68,43800,99],{"class":92},[68,43802,1757],{"class":85},[68,43804,43805],{"class":70,"line":11314},[68,43806,39719],{"class":85},[68,43808,43809,43811,43814,43816],{"class":70,"line":11339},[68,43810,32438],{"class":92},[68,43812,43813],{"class":85},".b3",[68,43815,869],{"class":102},[68,43817,39602],{"class":85},[68,43819,43820,43823,43825,43827,43829,43832,43834,43836,43838,43841,43843,43845,43847,43850,43852],{"class":70,"line":11362},[68,43821,43822],{"class":85},"            Inception(",[68,43824,43752],{"class":92},[68,43826,2114],{"class":85},[68,43828,1940],{"class":92},[68,43830,43831],{"class":85},",(",[68,43833,1946],{"class":92},[68,43835,2114],{"class":85},[68,43837,33663],{"class":92},[68,43839,43840],{"class":85},"),(",[68,43842,2337],{"class":92},[68,43844,2114],{"class":85},[68,43846,1934],{"class":92},[68,43848,43849],{"class":85},"),",[68,43851,1934],{"class":92},[68,43853,39640],{"class":85},[68,43855,43856,43858,43860,43862,43864,43866,43868,43870,43872,43874,43876,43878,43880,43882,43884],{"class":70,"line":11386},[68,43857,43822],{"class":85},[68,43859,36463],{"class":92},[68,43861,2114],{"class":85},[68,43863,33663],{"class":92},[68,43865,43831],{"class":85},[68,43867,33663],{"class":92},[68,43869,2114],{"class":85},[68,43871,43752],{"class":92},[68,43873,43840],{"class":85},[68,43875,1934],{"class":92},[68,43877,2114],{"class":85},[68,43879,1946],{"class":92},[68,43881,43849],{"class":85},[68,43883,1940],{"class":92},[68,43885,39640],{"class":85},[68,43887,43888,43890,43892,43894,43896,43898,43900,43902,43904,43906,43908,43910,43912],{"class":70,"line":11391},[68,43889,39690],{"class":85},[68,43891,32467],{"class":6815},[68,43893,869],{"class":102},[68,43895,288],{"class":92},[68,43897,2114],{"class":85},[68,43899,32522],{"class":6815},[68,43901,869],{"class":102},[68,43903,267],{"class":92},[68,43905,2114],{"class":85},[68,43907,32476],{"class":6815},[68,43909,869],{"class":102},[68,43911,99],{"class":92},[68,43913,1757],{"class":85},[68,43915,43916],{"class":70,"line":11396},[68,43917,39719],{"class":85},[68,43919,43920,43922,43925,43927],{"class":70,"line":11401},[68,43921,32438],{"class":92},[68,43923,43924],{"class":85},".b4",[68,43926,869],{"class":102},[68,43928,39602],{"class":85},[68,43930,43931,43933,43936,43938,43940,43942,43944,43946,43949,43951,43953,43955,43957,43959,43961],{"class":70,"line":11410},[68,43932,43822],{"class":85},[68,43934,43935],{"class":92},"480",[68,43937,2114],{"class":85},[68,43939,43752],{"class":92},[68,43941,43831],{"class":85},[68,43943,1946],{"class":92},[68,43945,2114],{"class":85},[68,43947,43948],{"class":92},"208",[68,43950,43840],{"class":85},[68,43952,2337],{"class":92},[68,43954,2114],{"class":85},[68,43956,2343],{"class":92},[68,43958,43849],{"class":85},[68,43960,1940],{"class":92},[68,43962,39640],{"class":85},[68,43964,43965,43967,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993],{"class":70,"line":11415},[68,43966,43822],{"class":85},[68,43968,40050],{"class":92},[68,43970,2114],{"class":85},[68,43972,22643],{"class":92},[68,43974,43831],{"class":85},[68,43976,2354],{"class":92},[68,43978,2114],{"class":85},[68,43980,33094],{"class":92},[68,43982,43840],{"class":85},[68,43984,2536],{"class":92},[68,43986,2114],{"class":85},[68,43988,1940],{"class":92},[68,43990,43849],{"class":85},[68,43992,1940],{"class":92},[68,43994,39640],{"class":85},[68,43996,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025],{"class":70,"line":11421},[68,43998,43822],{"class":85},[68,44000,40050],{"class":92},[68,44002,2114],{"class":85},[68,44004,33663],{"class":92},[68,44006,43831],{"class":85},[68,44008,33663],{"class":92},[68,44010,2114],{"class":85},[68,44012,36463],{"class":92},[68,44014,43840],{"class":85},[68,44016,2536],{"class":92},[68,44018,2114],{"class":85},[68,44020,1940],{"class":92},[68,44022,43849],{"class":85},[68,44024,1940],{"class":92},[68,44026,39640],{"class":85},[68,44028,44029,44031,44033,44035,44037,44039,44041,44043,44046,44048,44050,44052,44054,44056,44058],{"class":70,"line":11442},[68,44030,43822],{"class":85},[68,44032,40050],{"class":92},[68,44034,2114],{"class":85},[68,44036,2354],{"class":92},[68,44038,43831],{"class":85},[68,44040,33663],{"class":92},[68,44042,2114],{"class":85},[68,44044,44045],{"class":92},"288",[68,44047,43840],{"class":85},[68,44049,1934],{"class":92},[68,44051,2114],{"class":85},[68,44053,1940],{"class":92},[68,44055,43849],{"class":85},[68,44057,1940],{"class":92},[68,44059,39640],{"class":85},[68,44061,44062,44064,44067,44069,44071,44073,44075,44077,44080,44082,44084,44086,44088,44090,44092],{"class":70,"line":11448},[68,44063,43822],{"class":85},[68,44065,44066],{"class":92},"528",[68,44068,2114],{"class":85},[68,44070,36463],{"class":92},[68,44072,43831],{"class":85},[68,44074,22643],{"class":92},[68,44076,2114],{"class":85},[68,44078,44079],{"class":92},"320",[68,44081,43840],{"class":85},[68,44083,1934],{"class":92},[68,44085,2114],{"class":85},[68,44087,33663],{"class":92},[68,44089,43849],{"class":85},[68,44091,33663],{"class":92},[68,44093,39640],{"class":85},[68,44095,44096,44098,44100,44102,44104,44106,44108,44110,44112,44114,44116,44118,44120],{"class":70,"line":11462},[68,44097,39690],{"class":85},[68,44099,32467],{"class":6815},[68,44101,869],{"class":102},[68,44103,288],{"class":92},[68,44105,2114],{"class":85},[68,44107,32522],{"class":6815},[68,44109,869],{"class":102},[68,44111,267],{"class":92},[68,44113,2114],{"class":85},[68,44115,32476],{"class":6815},[68,44117,869],{"class":102},[68,44119,99],{"class":92},[68,44121,1757],{"class":85},[68,44123,44124],{"class":70,"line":11468},[68,44125,39719],{"class":85},[68,44127,44128,44130,44133,44135],{"class":70,"line":11495},[68,44129,32438],{"class":92},[68,44131,44132],{"class":85},".b5",[68,44134,869],{"class":102},[68,44136,39602],{"class":85},[68,44138,44139,44141,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168],{"class":70,"line":11504},[68,44140,43822],{"class":85},[68,44142,44143],{"class":92},"832",[68,44145,2114],{"class":85},[68,44147,36463],{"class":92},[68,44149,43831],{"class":85},[68,44151,22643],{"class":92},[68,44153,2114],{"class":85},[68,44155,44079],{"class":92},[68,44157,43840],{"class":85},[68,44159,1934],{"class":92},[68,44161,2114],{"class":85},[68,44163,33663],{"class":92},[68,44165,43849],{"class":85},[68,44167,33663],{"class":92},[68,44169,39640],{"class":85},[68,44171,44172,44174,44176,44178,44180,44182,44184,44186,44188,44190,44192,44194,44196,44198,44200],{"class":70,"line":11510},[68,44173,43822],{"class":85},[68,44175,44143],{"class":92},[68,44177,2114],{"class":85},[68,44179,36533],{"class":92},[68,44181,43831],{"class":85},[68,44183,43752],{"class":92},[68,44185,2114],{"class":85},[68,44187,36533],{"class":92},[68,44189,43840],{"class":85},[68,44191,2343],{"class":92},[68,44193,2114],{"class":85},[68,44195,33663],{"class":92},[68,44197,43849],{"class":85},[68,44199,33663],{"class":92},[68,44201,39640],{"class":85},[68,44203,44204,44207,44209,44211,44213],{"class":70,"line":11518},[68,44205,44206],{"class":85},"            nn.AdaptiveAvgPool2d((",[68,44208,99],{"class":92},[68,44210,2114],{"class":85},[68,44212,99],{"class":92},[68,44214,44215],{"class":85},")),\n",[68,44217,44218],{"class":70,"line":11523},[68,44219,40383],{"class":85},[68,44221,44222,44224,44227,44229,44231],{"class":70,"line":18199},[68,44223,40388],{"class":85},[68,44225,44226],{"class":92},"1024",[68,44228,2114],{"class":85},[68,44230,2182],{"class":92},[68,44232,1757],{"class":85},[68,44234,44235],{"class":70,"line":18205},[68,44236,39719],{"class":85},[68,44238,44239],{"class":70,"line":18228},[68,44240,44241],{"class":74},"        # 对模型参数初始化\n",[68,44243,44244,44246,44248,44250,44252],{"class":70,"line":18234},[68,44245,5002],{"class":102},[68,44247,40461],{"class":85},[68,44249,27637],{"class":102},[68,44251,40466],{"class":92},[68,44253,40469],{"class":85},[68,44255,44256,44258,44260],{"class":70,"line":18257},[68,44257,6241],{"class":102},[68,44259,40481],{"class":92},[68,44261,40484],{"class":85},[68,44263,44264,44266,44269,44271,44274,44276,44278,44280,44282],{"class":70,"line":18271},[68,44265,40494],{"class":85},[68,44267,44268],{"class":6815},"mode",[68,44270,869],{"class":102},[68,44272,44273],{"class":872},"'fan_out'",[68,44275,2114],{"class":85},[68,44277,40497],{"class":6815},[68,44279,869],{"class":102},[68,44281,40502],{"class":872},[68,44283,1757],{"class":85},[68,44285,44286],{"class":70,"line":18291},[68,44287,44288],{"class":74},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[68,44290,44291],{"class":70,"line":18297},[68,44292,44293],{"class":74},"                # ② mode = 'fan_out'决定使用的fan值：\n",[68,44295,44296],{"class":70,"line":18308},[68,44297,44298],{"class":74},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[68,44300,44301],{"class":70,"line":18331},[68,44302,44303],{"class":74},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[68,44305,44306],{"class":70,"line":18353},[68,44307,44308],{"class":74},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[68,44310,44311],{"class":70,"line":18358},[68,44312,44313],{"class":74},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[68,44315,44316,44318,44320,44322,44324,44326],{"class":70,"line":18364},[68,44317,40514],{"class":102},[68,44319,40517],{"class":85},[68,44321,40520],{"class":102},[68,44323,40523],{"class":102},[68,44325,40526],{"class":92},[68,44327,5338],{"class":85},[68,44329,44330,44332,44334],{"class":70,"line":18378},[68,44331,40538],{"class":85},[68,44333,600],{"class":92},[68,44335,1757],{"class":85},[68,44337,44338,44341,44343],{"class":70,"line":18391},[68,44339,44340],{"class":102},"                elif",[68,44342,40481],{"class":92},[68,44344,40557],{"class":85},[68,44346,44347,44350,44352,44354,44356],{"class":70,"line":18396},[68,44348,44349],{"class":85},"                    nn.init.normal_(m.weight,",[68,44351,600],{"class":92},[68,44353,2114],{"class":85},[68,44355,40579],{"class":92},[68,44357,1757],{"class":85},[68,44359,44360,44363,44365,44367,44369,44371],{"class":70,"line":18410},[68,44361,44362],{"class":102},"                    if",[68,44364,40517],{"class":85},[68,44366,40520],{"class":102},[68,44368,40523],{"class":102},[68,44370,40526],{"class":92},[68,44372,5338],{"class":85},[68,44374,44375,44378,44380],{"class":70,"line":18415},[68,44376,44377],{"class":85},"                        nn.init.constant_(m.bias,",[68,44379,600],{"class":92},[68,44381,1757],{"class":85},[68,44383,44384],{"class":70,"line":18421},[68,44385,36758],{"class":74},[68,44387,44388,44390,44392],{"class":70,"line":18426},[68,44389,32394],{"class":102},[68,44391,32686],{"class":587},[68,44393,32689],{"class":85},[68,44395,44396,44398,44400,44402],{"class":70,"line":18440},[68,44397,32694],{"class":85},[68,44399,869],{"class":102},[68,44401,32416],{"class":92},[68,44403,44404],{"class":85},".b1(x)\n",[68,44406,44407,44409,44411,44413],{"class":70,"line":18445},[68,44408,32694],{"class":85},[68,44410,869],{"class":102},[68,44412,32416],{"class":92},[68,44414,44415],{"class":85},".b2(x)\n",[68,44417,44418,44420,44422,44424],{"class":70,"line":18450},[68,44419,32694],{"class":85},[68,44421,869],{"class":102},[68,44423,32416],{"class":92},[68,44425,44426],{"class":85},".b3(x)\n",[68,44428,44429,44431,44433,44435],{"class":70,"line":18464},[68,44430,32694],{"class":85},[68,44432,869],{"class":102},[68,44434,32416],{"class":92},[68,44436,44437],{"class":85},".b4(x)\n",[68,44439,44440,44442,44444,44446],{"class":70,"line":18476},[68,44441,32694],{"class":85},[68,44443,869],{"class":102},[68,44445,32416],{"class":92},[68,44447,44448],{"class":85},".b5(x)\n",[68,44450,44451,44453],{"class":70,"line":18481},[68,44452,16349],{"class":102},[68,44454,32802],{"class":85},[68,44456,44457],{"class":70,"line":18494},[68,44458,4000],{"emptyLinePlaceholder":1679},[68,44460,44461],{"class":70,"line":18499},[68,44462,44463],{"class":74},"# 模型展示\n",[68,44465,44466,44468,44470,44472,44474],{"class":70,"line":18504},[68,44467,3134],{"class":102},[68,44469,32813],{"class":92},[68,44471,4548],{"class":102},[68,44473,32818],{"class":872},[68,44475,5338],{"class":85},[68,44477,44478,44480,44482,44484,44486,44488,44490,44492,44494],{"class":70,"line":18509},[68,44479,32830],{"class":85},[68,44481,869],{"class":102},[68,44483,32044],{"class":85},[68,44485,32837],{"class":872},[68,44487,3306],{"class":102},[68,44489,32842],{"class":85},[68,44491,3303],{"class":102},[68,44493,32069],{"class":872},[68,44495,1757],{"class":85},[68,44497,44498,44500,44502],{"class":70,"line":18522},[68,44499,32882],{"class":85},[68,44501,869],{"class":102},[68,44503,44504],{"class":85},"GoogLeNet(Inception).to(device)\n",[68,44506,44507,44509,44511,44513,44515,44517,44519,44521],{"class":70,"line":18527},[68,44508,32892],{"class":92},[68,44510,32895],{"class":85},[68,44512,99],{"class":92},[68,44514,2114],{"class":85},[68,44516,33094],{"class":92},[68,44518,2114],{"class":85},[68,44520,33094],{"class":92},[68,44522,32908],{"class":85},[48,44524,44525],{"start":78},[51,44526,40776],{},[58,44528,44530],{"className":31971,"code":44529,"language":31973,"meta":63,"style":63},"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",[65,44531,44532,44538,44544,44554,44560,44570,44580,44590,44600,44610,44614,44625,44635,44639,44643,44647,44655,44667,44677,44693,44703,44735,44749,44759,44769,44773,44783,44797,44807,44817,44827,44833,44837,44841,44845,44849,44853,44861,44881,44885,44889,44893,44897,44901,44917,44921,44925,44933,44937,44941,44949,44953,44957,44961,44969,44973,44977,44981,44985,44993,44997,45005,45009,45017,45021,45029,45033,45041,45045,45049,45057,45061,45065,45069,45081,45105,45119,45123,45127,45131,45139,45143,45151,45155,45163,45167,45175,45179,45187,45191,45199,45203,45215,45219,45227,45231,45239,45243,45247,45251,45255,45263,45267,45283,45287,45295,45299,45303,45307,45311,45315,45319,45323,45339,45343,45355,45359,45371,45375,45387,45391,45399,45403,45411,45415,45419,45423,45429,45433,45441,45445,45461,45465,45473,45477,45493,45505,45509,45521,45525,45529,45537,45541,45545,45553,45557,45565,45569,45577,45581,45585,45627,45669,45673,45677,45693,45697,45713,45717,45721,45729,45733,45737,45749,45787,45791,45795,45803,45807,45821,45831,45837,45843,45849,45855,45859,45863,45869,45873,45877,45885,45889,45907,45911,45915,45919,45935,45939,45943,45947,45951,45955,45975,45995,45999,46003,46007,46015,46023,46027,46043,46063,46083,46087,46091,46099,46107,46111,46115,46119,46131,46135,46145,46153,46170],{"__ignoreMap":63},[68,44533,44534,44536],{"class":70,"line":71},[68,44535,31985],{"class":102},[68,44537,33415],{"class":85},[68,44539,44540,44542],{"class":70,"line":78},[68,44541,31985],{"class":102},[68,44543,33422],{"class":85},[68,44545,44546,44548,44550,44552],{"class":70,"line":89},[68,44547,31985],{"class":102},[68,44549,33433],{"class":85},[68,44551,32976],{"class":102},[68,44553,33438],{"class":85},[68,44555,44556,44558],{"class":70,"line":115},[68,44557,31985],{"class":102},[68,44559,31988],{"class":85},[68,44561,44562,44564,44566,44568],{"class":70,"line":280},[68,44563,32330],{"class":102},[68,44565,33008],{"class":85},[68,44567,31985],{"class":102},[68,44569,33455],{"class":85},[68,44571,44572,44574,44576,44578],{"class":70,"line":301},[68,44573,32330],{"class":102},[68,44575,32961],{"class":85},[68,44577,31985],{"class":102},[68,44579,32966],{"class":85},[68,44581,44582,44584,44586,44588],{"class":70,"line":320},[68,44583,32330],{"class":102},[68,44585,32991],{"class":85},[68,44587,31985],{"class":102},[68,44589,32996],{"class":85},[68,44591,44592,44594,44596,44598],{"class":70,"line":2915},[68,44593,31985],{"class":102},[68,44595,33008],{"class":85},[68,44597,32976],{"class":102},[68,44599,33013],{"class":85},[68,44601,44602,44604,44606,44608],{"class":70,"line":2921},[68,44603,31985],{"class":102},[68,44605,33025],{"class":85},[68,44607,32976],{"class":102},[68,44609,33030],{"class":85},[68,44611,44612],{"class":70,"line":2933},[68,44613,33500],{"class":74},[68,44615,44616,44618,44620,44622],{"class":70,"line":3214},[68,44617,32330],{"class":102},[68,44619,33507],{"class":85},[68,44621,31985],{"class":102},[68,44623,44624],{"class":85}," GoogLeNet, Inception\n",[68,44626,44627,44629,44631,44633],{"class":70,"line":3219},[68,44628,32330],{"class":102},[68,44630,32333],{"class":85},[68,44632,31985],{"class":102},[68,44634,32338],{"class":85},[68,44636,44637],{"class":70,"line":3225},[68,44638,4000],{"emptyLinePlaceholder":1679},[68,44640,44641],{"class":70,"line":3230},[68,44642,4000],{"emptyLinePlaceholder":1679},[68,44644,44645],{"class":70,"line":3244},[68,44646,33535],{"class":74},[68,44648,44649,44651,44653],{"class":70,"line":3249},[68,44650,33540],{"class":102},[68,44652,33543],{"class":587},[68,44654,33546],{"class":85},[68,44656,44657,44659,44661,44663,44665],{"class":70,"line":3255},[68,44658,33551],{"class":85},[68,44660,869],{"class":102},[68,44662,33048],{"class":85},[68,44664,33056],{"class":872},[68,44666,33059],{"class":85},[68,44668,44669,44671,44673,44675],{"class":70,"line":3276},[68,44670,33564],{"class":6815},[68,44672,869],{"class":102},[68,44674,33069],{"class":92},[68,44676,33059],{"class":85},[68,44678,44679,44681,44683,44685,44687,44689,44691],{"class":70,"line":3281},[68,44680,33575],{"class":6815},[68,44682,869],{"class":102},[68,44684,33086],{"class":85},[68,44686,33089],{"class":6815},[68,44688,869],{"class":102},[68,44690,37042],{"class":92},[68,44692,33097],{"class":85},[68,44694,44695,44697,44699,44701],{"class":70,"line":3295},[68,44696,33592],{"class":6815},[68,44698,869],{"class":102},[68,44700,33069],{"class":92},[68,44702,1757],{"class":85},[68,44704,44705,44707,44709,44711,44713,44715,44717,44719,44721,44723,44725,44727,44729,44731,44733],{"class":70,"line":3300},[68,44706,33603],{"class":85},[68,44708,869],{"class":102},[68,44710,33608],{"class":85},[68,44712,33611],{"class":92},[68,44714,997],{"class":85},[68,44716,33616],{"class":92},[68,44718,2191],{"class":102},[68,44720,8957],{"class":92},[68,44722,33623],{"class":85},[68,44724,33611],{"class":92},[68,44726,997],{"class":85},[68,44728,33630],{"class":92},[68,44730,2191],{"class":102},[68,44732,8957],{"class":92},[68,44734,33637],{"class":85},[68,44736,44737,44739,44741,44743,44745,44747],{"class":70,"line":3329},[68,44738,33642],{"class":85},[68,44740,869],{"class":102},[68,44742,33647],{"class":85},[68,44744,33130],{"class":6815},[68,44746,869],{"class":102},[68,44748,33135],{"class":85},[68,44750,44751,44753,44755,44757],{"class":70,"line":3334},[68,44752,33658],{"class":6815},[68,44754,869],{"class":102},[68,44756,1934],{"class":92},[68,44758,33059],{"class":85},[68,44760,44761,44763,44765,44767],{"class":70,"line":3351},[68,44762,33670],{"class":6815},[68,44764,869],{"class":102},[68,44766,33069],{"class":92},[68,44768,33059],{"class":85},[68,44770,44771],{"class":70,"line":3356},[68,44772,33681],{"class":74},[68,44774,44775,44777,44779,44781],{"class":70,"line":3361},[68,44776,33686],{"class":6815},[68,44778,869],{"class":102},[68,44780,2131],{"class":92},[68,44782,1757],{"class":85},[68,44784,44785,44787,44789,44791,44793,44795],{"class":70,"line":3366},[68,44786,33697],{"class":85},[68,44788,869],{"class":102},[68,44790,33127],{"class":85},[68,44792,33130],{"class":6815},[68,44794,869],{"class":102},[68,44796,33708],{"class":85},[68,44798,44799,44801,44803,44805],{"class":70,"line":3380},[68,44800,33713],{"class":6815},[68,44802,869],{"class":102},[68,44804,1934],{"class":92},[68,44806,33059],{"class":85},[68,44808,44809,44811,44813,44815],{"class":70,"line":3385},[68,44810,33724],{"class":6815},[68,44812,869],{"class":102},[68,44814,33069],{"class":92},[68,44816,33059],{"class":85},[68,44818,44819,44821,44823,44825],{"class":70,"line":4177},[68,44820,33735],{"class":6815},[68,44822,869],{"class":102},[68,44824,2131],{"class":92},[68,44826,1757],{"class":85},[68,44828,44829,44831],{"class":70,"line":4191},[68,44830,5689],{"class":102},[68,44832,33748],{"class":85},[68,44834,44835],{"class":70,"line":4199},[68,44836,4000],{"emptyLinePlaceholder":1679},[68,44838,44839],{"class":70,"line":4204},[68,44840,33757],{"class":74},[68,44842,44843],{"class":70,"line":4210},[68,44844,33762],{"class":74},[68,44846,44847],{"class":70,"line":4216},[68,44848,4000],{"emptyLinePlaceholder":1679},[68,44850,44851],{"class":70,"line":4221},[68,44852,33771],{"class":74},[68,44854,44855,44857,44859],{"class":70,"line":9547},[68,44856,33540],{"class":102},[68,44858,33778],{"class":587},[68,44860,33781],{"class":85},[68,44862,44863,44865,44867,44869,44871,44873,44875,44877,44879],{"class":70,"line":9571},[68,44864,32830],{"class":85},[68,44866,869],{"class":102},[68,44868,32044],{"class":85},[68,44870,32837],{"class":872},[68,44872,3306],{"class":102},[68,44874,32842],{"class":85},[68,44876,3303],{"class":102},[68,44878,33800],{"class":872},[68,44880,1757],{"class":85},[68,44882,44883],{"class":70,"line":9576},[68,44884,4000],{"emptyLinePlaceholder":1679},[68,44886,44887],{"class":70,"line":9582},[68,44888,4000],{"emptyLinePlaceholder":1679},[68,44890,44891],{"class":70,"line":9609},[68,44892,33815],{"class":74},[68,44894,44895],{"class":70,"line":9614},[68,44896,33820],{"class":74},[68,44898,44899],{"class":70,"line":9620},[68,44900,33825],{"class":74},[68,44902,44903,44905,44907,44909,44911,44913,44915],{"class":70,"line":9632},[68,44904,33830],{"class":85},[68,44906,869],{"class":102},[68,44908,33835],{"class":85},[68,44910,33838],{"class":6815},[68,44912,869],{"class":102},[68,44914,33843],{"class":92},[68,44916,1757],{"class":85},[68,44918,44919],{"class":70,"line":9644},[68,44920,4000],{"emptyLinePlaceholder":1679},[68,44922,44923],{"class":70,"line":9656},[68,44924,33854],{"class":74},[68,44926,44927,44929,44931],{"class":70,"line":11314},[68,44928,33859],{"class":85},[68,44930,869],{"class":102},[68,44932,33864],{"class":85},[68,44934,44935],{"class":70,"line":11339},[68,44936,4000],{"emptyLinePlaceholder":1679},[68,44938,44939],{"class":70,"line":11362},[68,44940,33873],{"class":74},[68,44942,44943,44945,44947],{"class":70,"line":11386},[68,44944,32882],{"class":85},[68,44946,869],{"class":102},[68,44948,33882],{"class":85},[68,44950,44951],{"class":70,"line":11391},[68,44952,33887],{"class":74},[68,44954,44955],{"class":70,"line":11396},[68,44956,33892],{"class":74},[68,44958,44959],{"class":70,"line":11401},[68,44960,33897],{"class":74},[68,44962,44963,44965,44967],{"class":70,"line":11410},[68,44964,33902],{"class":85},[68,44966,869],{"class":102},[68,44968,33907],{"class":85},[68,44970,44971],{"class":70,"line":11415},[68,44972,4000],{"emptyLinePlaceholder":1679},[68,44974,44975],{"class":70,"line":11421},[68,44976,4000],{"emptyLinePlaceholder":1679},[68,44978,44979],{"class":70,"line":11442},[68,44980,33920],{"class":74},[68,44982,44983],{"class":70,"line":11448},[68,44984,33925],{"class":74},[68,44986,44987,44989,44991],{"class":70,"line":11462},[68,44988,33930],{"class":85},[68,44990,869],{"class":102},[68,44992,33935],{"class":92},[68,44994,44995],{"class":70,"line":11468},[68,44996,33940],{"class":74},[68,44998,44999,45001,45003],{"class":70,"line":11495},[68,45000,33945],{"class":85},[68,45002,869],{"class":102},[68,45004,33950],{"class":85},[68,45006,45007],{"class":70,"line":11504},[68,45008,33955],{"class":74},[68,45010,45011,45013,45015],{"class":70,"line":11510},[68,45012,33960],{"class":85},[68,45014,869],{"class":102},[68,45016,33950],{"class":85},[68,45018,45019],{"class":70,"line":11518},[68,45020,33969],{"class":74},[68,45022,45023,45025,45027],{"class":70,"line":11523},[68,45024,33974],{"class":85},[68,45026,869],{"class":102},[68,45028,33950],{"class":85},[68,45030,45031],{"class":70,"line":18199},[68,45032,33983],{"class":74},[68,45034,45035,45037,45039],{"class":70,"line":18205},[68,45036,33988],{"class":85},[68,45038,869],{"class":102},[68,45040,33950],{"class":85},[68,45042,45043],{"class":70,"line":18228},[68,45044,4000],{"emptyLinePlaceholder":1679},[68,45046,45047],{"class":70,"line":18234},[68,45048,34001],{"class":74},[68,45050,45051,45053,45055],{"class":70,"line":18257},[68,45052,34006],{"class":85},[68,45054,869],{"class":102},[68,45056,34011],{"class":85},[68,45058,45059],{"class":70,"line":18271},[68,45060,4000],{"emptyLinePlaceholder":1679},[68,45062,45063],{"class":70,"line":18291},[68,45064,4000],{"emptyLinePlaceholder":1679},[68,45066,45067],{"class":70,"line":18297},[68,45068,34024],{"class":74},[68,45070,45071,45073,45075,45077,45079],{"class":70,"line":18308},[68,45072,4800],{"class":102},[68,45074,34031],{"class":85},[68,45076,27637],{"class":102},[68,45078,34036],{"class":92},[68,45080,34039],{"class":85},[68,45082,45083,45085,45087,45089,45091,45093,45095,45097,45099,45101,45103],{"class":70,"line":18331},[68,45084,34044],{"class":92},[68,45086,997],{"class":85},[68,45088,34049],{"class":872},[68,45090,34052],{"class":92},[68,45092,2320],{"class":872},[68,45094,34052],{"class":92},[68,45096,1987],{"class":872},[68,45098,34061],{"class":85},[68,45100,2268],{"class":102},[68,45102,99],{"class":92},[68,45104,32090],{"class":85},[68,45106,45107,45109,45111,45113,45115,45117],{"class":70,"line":18353},[68,45108,34044],{"class":92},[68,45110,997],{"class":85},[68,45112,34076],{"class":872},[68,45114,2191],{"class":102},[68,45116,2182],{"class":92},[68,45118,1757],{"class":85},[68,45120,45121],{"class":70,"line":18358},[68,45122,4000],{"emptyLinePlaceholder":1679},[68,45124,45125],{"class":70,"line":18364},[68,45126,34091],{"class":74},[68,45128,45129],{"class":70,"line":18378},[68,45130,34096],{"class":74},[68,45132,45133,45135,45137],{"class":70,"line":18391},[68,45134,34101],{"class":85},[68,45136,869],{"class":102},[68,45138,33935],{"class":92},[68,45140,45141],{"class":70,"line":18396},[68,45142,34110],{"class":74},[68,45144,45145,45147,45149],{"class":70,"line":18410},[68,45146,34115],{"class":85},[68,45148,869],{"class":102},[68,45150,4684],{"class":92},[68,45152,45153],{"class":70,"line":18415},[68,45154,34124],{"class":74},[68,45156,45157,45159,45161],{"class":70,"line":18421},[68,45158,34129],{"class":85},[68,45160,869],{"class":102},[68,45162,33935],{"class":92},[68,45164,45165],{"class":70,"line":18426},[68,45166,34138],{"class":74},[68,45168,45169,45171,45173],{"class":70,"line":18440},[68,45170,34143],{"class":85},[68,45172,869],{"class":102},[68,45174,4684],{"class":92},[68,45176,45177],{"class":70,"line":18445},[68,45178,34152],{"class":74},[68,45180,45181,45183,45185],{"class":70,"line":18450},[68,45182,34157],{"class":85},[68,45184,869],{"class":102},[68,45186,4684],{"class":92},[68,45188,45189],{"class":70,"line":18464},[68,45190,34166],{"class":74},[68,45192,45193,45195,45197],{"class":70,"line":18476},[68,45194,34171],{"class":85},[68,45196,869],{"class":102},[68,45198,4684],{"class":92},[68,45200,45201],{"class":70,"line":18481},[68,45202,34180],{"class":74},[68,45204,45205,45207,45209,45211,45213],{"class":70,"line":18494},[68,45206,5002],{"class":102},[68,45208,33194],{"class":85},[68,45210,27637],{"class":102},[68,45212,33199],{"class":92},[68,45214,34193],{"class":85},[68,45216,45217],{"class":70,"line":18499},[68,45218,34198],{"class":74},[68,45220,45221,45223,45225],{"class":70,"line":18504},[68,45222,34203],{"class":85},[68,45224,869],{"class":102},[68,45226,34208],{"class":85},[68,45228,45229],{"class":70,"line":18509},[68,45230,34213],{"class":74},[68,45232,45233,45235,45237],{"class":70,"line":18522},[68,45234,34218],{"class":85},[68,45236,869],{"class":102},[68,45238,34223],{"class":85},[68,45240,45241],{"class":70,"line":18527},[68,45242,34229],{"class":74},[68,45244,45245],{"class":70,"line":34226},[68,45246,34235],{"class":85},[68,45248,45249],{"class":70,"line":34232},[68,45250,34241],{"class":74},[68,45252,45253],{"class":70,"line":34238},[68,45254,34247],{"class":74},[68,45256,45257,45259,45261],{"class":70,"line":34244},[68,45258,34253],{"class":85},[68,45260,869],{"class":102},[68,45262,34258],{"class":85},[68,45264,45265],{"class":70,"line":34250},[68,45266,34264],{"class":74},[68,45268,45269,45271,45273,45275,45277,45279,45281],{"class":70,"line":34261},[68,45270,34270],{"class":85},[68,45272,869],{"class":102},[68,45274,34275],{"class":85},[68,45276,34278],{"class":6815},[68,45278,869],{"class":102},[68,45280,99],{"class":92},[68,45282,1757],{"class":85},[68,45284,45285],{"class":70,"line":34267},[68,45286,34290],{"class":74},[68,45288,45289,45291,45293],{"class":70,"line":34287},[68,45290,34296],{"class":85},[68,45292,869],{"class":102},[68,45294,34301],{"class":85},[68,45296,45297],{"class":70,"line":34293},[68,45298,34307],{"class":74},[68,45300,45301],{"class":70,"line":34304},[68,45302,34313],{"class":85},[68,45304,45305],{"class":70,"line":34310},[68,45306,34319],{"class":74},[68,45308,45309],{"class":70,"line":34316},[68,45310,34325],{"class":85},[68,45312,45313],{"class":70,"line":34322},[68,45314,34331],{"class":74},[68,45316,45317],{"class":70,"line":34328},[68,45318,34337],{"class":85},[68,45320,45321],{"class":70,"line":34334},[68,45322,34343],{"class":74},[68,45324,45325,45327,45329,45331,45333,45335,45337],{"class":70,"line":34340},[68,45326,34349],{"class":85},[68,45328,11075],{"class":102},[68,45330,34354],{"class":85},[68,45332,2191],{"class":102},[68,45334,34359],{"class":85},[68,45336,600],{"class":92},[68,45338,1757],{"class":85},[68,45340,45341],{"class":70,"line":34346},[68,45342,34369],{"class":74},[68,45344,45345,45347,45349,45351,45353],{"class":70,"line":34366},[68,45346,34375],{"class":85},[68,45348,11075],{"class":102},[68,45350,34380],{"class":85},[68,45352,4548],{"class":102},[68,45354,34385],{"class":85},[68,45356,45357],{"class":70,"line":34372},[68,45358,34391],{"class":74},[68,45360,45361,45363,45365,45367,45369],{"class":70,"line":34388},[68,45362,34397],{"class":85},[68,45364,11075],{"class":102},[68,45366,34359],{"class":85},[68,45368,600],{"class":92},[68,45370,1757],{"class":85},[68,45372,45373],{"class":70,"line":34394},[68,45374,34411],{"class":74},[68,45376,45377,45379,45381,45383,45385],{"class":70,"line":34408},[68,45378,5002],{"class":102},[68,45380,34419],{"class":85},[68,45382,27637],{"class":102},[68,45384,33199],{"class":92},[68,45386,34426],{"class":85},[68,45388,45389],{"class":70,"line":34414},[68,45390,34432],{"class":74},[68,45392,45393,45395,45397],{"class":70,"line":34429},[68,45394,34203],{"class":85},[68,45396,869],{"class":102},[68,45398,34208],{"class":85},[68,45400,45401],{"class":70,"line":34435},[68,45402,34447],{"class":74},[68,45404,45405,45407,45409],{"class":70,"line":34444},[68,45406,34218],{"class":85},[68,45408,869],{"class":102},[68,45410,34223],{"class":85},[68,45412,45413],{"class":70,"line":34450},[68,45414,34462],{"class":74},[68,45416,45417],{"class":70,"line":34459},[68,45418,34468],{"class":85},[68,45420,45421],{"class":70,"line":34465},[68,45422,37949],{"class":74},[68,45424,45425,45427],{"class":70,"line":34471},[68,45426,34474],{"class":102},[68,45428,34477],{"class":85},[68,45430,45431],{"class":70,"line":34480},[68,45432,34483],{"class":74},[68,45434,45435,45437,45439],{"class":70,"line":34486},[68,45436,37964],{"class":85},[68,45438,869],{"class":102},[68,45440,34258],{"class":85},[68,45442,45443],{"class":70,"line":34497},[68,45444,34500],{"class":74},[68,45446,45447,45449,45451,45453,45455,45457,45459],{"class":70,"line":34503},[68,45448,37977],{"class":85},[68,45450,869],{"class":102},[68,45452,34275],{"class":85},[68,45454,34278],{"class":6815},[68,45456,869],{"class":102},[68,45458,99],{"class":92},[68,45460,1757],{"class":85},[68,45462,45463],{"class":70,"line":34522},[68,45464,34525],{"class":74},[68,45466,45467,45469,45471],{"class":70,"line":34528},[68,45468,37998],{"class":85},[68,45470,869],{"class":102},[68,45472,34301],{"class":85},[68,45474,45475],{"class":70,"line":34539},[68,45476,34542],{"class":74},[68,45478,45479,45481,45483,45485,45487,45489,45491],{"class":70,"line":34545},[68,45480,38011],{"class":85},[68,45482,11075],{"class":102},[68,45484,38016],{"class":85},[68,45486,2191],{"class":102},[68,45488,34359],{"class":85},[68,45490,600],{"class":92},[68,45492,1757],{"class":85},[68,45494,45495,45497,45499,45501,45503],{"class":70,"line":34565},[68,45496,38029],{"class":85},[68,45498,11075],{"class":102},[68,45500,34380],{"class":85},[68,45502,4548],{"class":102},[68,45504,34385],{"class":85},[68,45506,45507],{"class":70,"line":34581},[68,45508,38042],{"class":74},[68,45510,45511,45513,45515,45517,45519],{"class":70,"line":34587},[68,45512,38047],{"class":85},[68,45514,11075],{"class":102},[68,45516,34359],{"class":85},[68,45518,600],{"class":92},[68,45520,1757],{"class":85},[68,45522,45523],{"class":70,"line":34601},[68,45524,34604],{"class":74},[68,45526,45527],{"class":70,"line":34607},[68,45528,34610],{"class":74},[68,45530,45531,45533,45535],{"class":70,"line":34613},[68,45532,34616],{"class":85},[68,45534,2320],{"class":102},[68,45536,34621],{"class":85},[68,45538,45539],{"class":70,"line":34624},[68,45540,34627],{"class":74},[68,45542,45543],{"class":70,"line":34630},[68,45544,34633],{"class":74},[68,45546,45547,45549,45551],{"class":70,"line":34636},[68,45548,34639],{"class":85},[68,45550,2320],{"class":102},[68,45552,34621],{"class":85},[68,45554,45555],{"class":70,"line":34646},[68,45556,34649],{"class":74},[68,45558,45559,45561,45563],{"class":70,"line":34652},[68,45560,34655],{"class":85},[68,45562,2320],{"class":102},[68,45564,34660],{"class":85},[68,45566,45567],{"class":70,"line":34663},[68,45568,34666],{"class":74},[68,45570,45571,45573,45575],{"class":70,"line":34669},[68,45572,34672],{"class":85},[68,45574,2320],{"class":102},[68,45576,34660],{"class":85},[68,45578,45579],{"class":70,"line":34679},[68,45580,4000],{"emptyLinePlaceholder":1679},[68,45582,45583],{"class":70,"line":34684},[68,45584,34687],{"class":74},[68,45586,45587,45589,45591,45593,45595,45597,45599,45601,45603,45605,45607,45609,45611,45613,45615,45617,45619,45621,45623,45625],{"class":70,"line":34690},[68,45588,34044],{"class":92},[68,45590,997],{"class":85},[68,45592,5191],{"class":872},[68,45594,34052],{"class":92},[68,45596,34701],{"class":872},[68,45598,2632],{"class":92},[68,45600,34706],{"class":102},[68,45602,2681],{"class":92},[68,45604,34711],{"class":872},[68,45606,2632],{"class":92},[68,45608,34706],{"class":102},[68,45610,2681],{"class":92},[68,45612,5191],{"class":872},[68,45614,34722],{"class":85},[68,45616,2268],{"class":102},[68,45618,99],{"class":92},[68,45620,34729],{"class":85},[68,45622,2268],{"class":102},[68,45624,99],{"class":92},[68,45626,34736],{"class":85},[68,45628,45629,45631,45633,45635,45637,45639,45641,45643,45645,45647,45649,45651,45653,45655,45657,45659,45661,45663,45665,45667],{"class":70,"line":34739},[68,45630,34044],{"class":92},[68,45632,997],{"class":85},[68,45634,5191],{"class":872},[68,45636,34052],{"class":92},[68,45638,34750],{"class":872},[68,45640,2632],{"class":92},[68,45642,34706],{"class":102},[68,45644,2681],{"class":92},[68,45646,34759],{"class":872},[68,45648,2632],{"class":92},[68,45650,34706],{"class":102},[68,45652,2681],{"class":92},[68,45654,5191],{"class":872},[68,45656,34770],{"class":85},[68,45658,2268],{"class":102},[68,45660,99],{"class":92},[68,45662,34777],{"class":85},[68,45664,2268],{"class":102},[68,45666,99],{"class":92},[68,45668,34736],{"class":85},[68,45670,45671],{"class":70,"line":34786},[68,45672,4000],{"emptyLinePlaceholder":1679},[68,45674,45675],{"class":70,"line":34791},[68,45676,34794],{"class":74},[68,45678,45679,45681,45683,45685,45687,45689,45691],{"class":70,"line":34797},[68,45680,4097],{"class":102},[68,45682,34802],{"class":85},[68,45684,2268],{"class":102},[68,45686,99],{"class":92},[68,45688,2675],{"class":85},[68,45690,2695],{"class":102},[68,45692,34813],{"class":85},[68,45694,45695],{"class":70,"line":34816},[68,45696,34819],{"class":74},[68,45698,45699,45701,45703,45705,45707,45709,45711],{"class":70,"line":34822},[68,45700,34825],{"class":85},[68,45702,1790],{"class":92},[68,45704,869],{"class":102},[68,45706,34832],{"class":85},[68,45708,2268],{"class":102},[68,45710,99],{"class":92},[68,45712,34839],{"class":85},[68,45714,45715],{"class":70,"line":34842},[68,45716,34845],{"class":74},[68,45718,45719],{"class":70,"line":34848},[68,45720,34851],{"class":74},[68,45722,45723,45725,45727],{"class":70,"line":34854},[68,45724,34857],{"class":85},[68,45726,869],{"class":102},[68,45728,33907],{"class":85},[68,45730,45731],{"class":70,"line":34864},[68,45732,4000],{"emptyLinePlaceholder":1679},[68,45734,45735],{"class":70,"line":34869},[68,45736,34872],{"class":74},[68,45738,45739,45741,45743,45745,45747],{"class":70,"line":34875},[68,45740,34878],{"class":85},[68,45742,869],{"class":102},[68,45744,34883],{"class":85},[68,45746,2268],{"class":102},[68,45748,34888],{"class":85},[68,45750,45751,45753,45755,45757,45759,45761,45763,45765,45767,45769,45771,45773,45775,45777,45779,45781,45783,45785],{"class":70,"line":34891},[68,45752,34044],{"class":92},[68,45754,997],{"class":85},[68,45756,34898],{"class":872},[68,45758,2632],{"class":92},[68,45760,34903],{"class":102},[68,45762,2681],{"class":92},[68,45764,2280],{"class":872},[68,45766,2632],{"class":92},[68,45768,34903],{"class":102},[68,45770,2681],{"class":92},[68,45772,34916],{"class":872},[68,45774,34919],{"class":85},[68,45776,34922],{"class":102},[68,45778,2643],{"class":92},[68,45780,34927],{"class":85},[68,45782,2064],{"class":102},[68,45784,2643],{"class":92},[68,45786,32090],{"class":85},[68,45788,45789],{"class":70,"line":34936},[68,45790,38326],{"class":74},[68,45792,45793],{"class":70,"line":34942},[68,45794,38331],{"class":74},[68,45796,45797,45799,45801],{"class":70,"line":34948},[68,45798,38336],{"class":85},[68,45800,34960],{"class":872},[68,45802,1757],{"class":85},[68,45804,45805],{"class":70,"line":34954},[68,45806,34980],{"class":74},[68,45808,45809,45811,45813,45815,45817,45819],{"class":70,"line":34965},[68,45810,34986],{"class":85},[68,45812,869],{"class":102},[68,45814,34991],{"class":85},[68,45816,34994],{"class":6815},[68,45818,869],{"class":102},[68,45820,3149],{"class":85},[68,45822,45823,45825,45827,45829],{"class":70,"line":34971},[68,45824,35004],{"class":872},[68,45826,2595],{"class":85},[68,45828,35009],{"class":92},[68,45830,35012],{"class":85},[68,45832,45833,45835],{"class":70,"line":34977},[68,45834,35018],{"class":872},[68,45836,35021],{"class":85},[68,45838,45839,45841],{"class":70,"line":34983},[68,45840,35027],{"class":872},[68,45842,35030],{"class":85},[68,45844,45845,45847],{"class":70,"line":35001},[68,45846,35036],{"class":872},[68,45848,35039],{"class":85},[68,45850,45851,45853],{"class":70,"line":35015},[68,45852,35045],{"class":872},[68,45854,35048],{"class":85},[68,45856,45857],{"class":70,"line":35024},[68,45858,35054],{"class":85},[68,45860,45861],{"class":70,"line":35033},[68,45862,35060],{"class":74},[68,45864,45865,45867],{"class":70,"line":35042},[68,45866,5689],{"class":102},[68,45868,35068],{"class":85},[68,45870,45871],{"class":70,"line":35051},[68,45872,4000],{"emptyLinePlaceholder":1679},[68,45874,45875],{"class":70,"line":35057},[68,45876,35079],{"class":74},[68,45878,45879,45881,45883],{"class":70,"line":35063},[68,45880,33540],{"class":102},[68,45882,35087],{"class":587},[68,45884,35090],{"class":85},[68,45886,45887],{"class":70,"line":35071},[68,45888,35096],{"class":74},[68,45890,45891,45893,45895,45897,45899,45901,45903,45905],{"class":70,"line":35076},[68,45892,35102],{"class":85},[68,45894,33286],{"class":6815},[68,45896,869],{"class":102},[68,45898,997],{"class":85},[68,45900,2234],{"class":92},[68,45902,2114],{"class":85},[68,45904,2029],{"class":92},[68,45906,32090],{"class":85},[68,45908,45909],{"class":70,"line":35082},[68,45910,35122],{"class":74},[68,45912,45913],{"class":70,"line":35093},[68,45914,35128],{"class":74},[68,45916,45917],{"class":70,"line":35099},[68,45918,35134],{"class":74},[68,45920,45921,45923,45925,45927,45929,45931,45933],{"class":70,"line":35119},[68,45922,33320],{"class":85},[68,45924,99],{"class":92},[68,45926,2114],{"class":85},[68,45928,267],{"class":92},[68,45930,2114],{"class":85},[68,45932,99],{"class":92},[68,45934,1757],{"class":85},[68,45936,45937],{"class":70,"line":35125},[68,45938,35157],{"class":74},[68,45940,45941],{"class":70,"line":35131},[68,45942,35163],{"class":74},[68,45944,45945],{"class":70,"line":35137},[68,45946,35169],{"class":74},[68,45948,45949],{"class":70,"line":35154},[68,45950,35175],{"class":74},[68,45952,45953],{"class":70,"line":35160},[68,45954,35181],{"class":74},[68,45956,45957,45959,45961,45963,45965,45967,45969,45971,45973],{"class":70,"line":35166},[68,45958,35187],{"class":85},[68,45960,35190],{"class":872},[68,45962,35193],{"class":85},[68,45964,35196],{"class":872},[68,45966,2114],{"class":85},[68,45968,35201],{"class":6815},[68,45970,869],{"class":102},[68,45972,35206],{"class":872},[68,45974,1757],{"class":85},[68,45976,45977,45979,45981,45983,45985,45987,45989,45991,45993],{"class":70,"line":35172},[68,45978,35187],{"class":85},[68,45980,35190],{"class":872},[68,45982,35218],{"class":85},[68,45984,35221],{"class":872},[68,45986,2114],{"class":85},[68,45988,35201],{"class":6815},[68,45990,869],{"class":102},[68,45992,35230],{"class":872},[68,45994,1757],{"class":85},[68,45996,45997],{"class":70,"line":35178},[68,45998,35238],{"class":74},[68,46000,46001],{"class":70,"line":35184},[68,46002,35244],{"class":85},[68,46004,46005],{"class":70,"line":35211},[68,46006,35250],{"class":74},[68,46008,46009,46011,46013],{"class":70,"line":35235},[68,46010,35256],{"class":85},[68,46012,35259],{"class":872},[68,46014,1757],{"class":85},[68,46016,46017,46019,46021],{"class":70,"line":35241},[68,46018,35267],{"class":85},[68,46020,35270],{"class":872},[68,46022,1757],{"class":85},[68,46024,46025],{"class":70,"line":35247},[68,46026,35278],{"class":74},[68,46028,46029,46031,46033,46035,46037,46039,46041],{"class":70,"line":35253},[68,46030,33320],{"class":85},[68,46032,99],{"class":92},[68,46034,2114],{"class":85},[68,46036,267],{"class":92},[68,46038,2114],{"class":85},[68,46040,267],{"class":92},[68,46042,1757],{"class":85},[68,46044,46045,46047,46049,46051,46053,46055,46057,46059,46061],{"class":70,"line":35264},[68,46046,35187],{"class":85},[68,46048,35190],{"class":872},[68,46050,35305],{"class":85},[68,46052,35196],{"class":872},[68,46054,2114],{"class":85},[68,46056,35201],{"class":6815},[68,46058,869],{"class":102},[68,46060,35316],{"class":872},[68,46062,1757],{"class":85},[68,46064,46065,46067,46069,46071,46073,46075,46077,46079,46081],{"class":70,"line":35275},[68,46066,35187],{"class":85},[68,46068,35190],{"class":872},[68,46070,35328],{"class":85},[68,46072,35221],{"class":872},[68,46074,2114],{"class":85},[68,46076,35201],{"class":6815},[68,46078,869],{"class":102},[68,46080,35339],{"class":872},[68,46082,1757],{"class":85},[68,46084,46085],{"class":70,"line":35281},[68,46086,35347],{"class":74},[68,46088,46089],{"class":70,"line":35298},[68,46090,35244],{"class":85},[68,46092,46093,46095,46097],{"class":70,"line":35321},[68,46094,35256],{"class":85},[68,46096,35190],{"class":872},[68,46098,1757],{"class":85},[68,46100,46101,46103,46105],{"class":70,"line":35344},[68,46102,35267],{"class":85},[68,46104,35369],{"class":872},[68,46106,1757],{"class":85},[68,46108,46109],{"class":70,"line":35350},[68,46110,35377],{"class":85},[68,46112,46113],{"class":70,"line":35355},[68,46114,4000],{"emptyLinePlaceholder":1679},[68,46116,46117],{"class":70,"line":35364},[68,46118,35388],{"class":74},[68,46120,46121,46123,46125,46127,46129],{"class":70,"line":35374},[68,46122,3134],{"class":102},[68,46124,32813],{"class":92},[68,46126,4548],{"class":102},[68,46128,32818],{"class":872},[68,46130,5338],{"class":85},[68,46132,46133],{"class":70,"line":35380},[68,46134,35407],{"class":74},[68,46136,46137,46140,46142],{"class":70,"line":35385},[68,46138,46139],{"class":85},"    GoogLeNet",[68,46141,869],{"class":102},[68,46143,46144],{"class":85},"GoogLeNet(Inception)\n",[68,46146,46147,46149,46151],{"class":70,"line":35391},[68,46148,35424],{"class":85},[68,46150,869],{"class":102},[68,46152,35429],{"class":85},[68,46154,46155,46157,46159,46162,46164,46166,46168],{"class":70,"line":35404},[68,46156,34986],{"class":85},[68,46158,869],{"class":102},[68,46160,46161],{"class":85},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[68,46163,35442],{"class":6815},[68,46165,869],{"class":102},[68,46167,2686],{"class":92},[68,46169,1757],{"class":85},[68,46171,46172],{"class":70,"line":35410},[68,46173,35454],{"class":85},[48,46175,46176],{"start":89},[51,46177,42167],{},[58,46179,46181],{"className":31971,"code":46180,"language":31973,"meta":63,"style":63},"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",[65,46182,46183,46189,46199,46209,46213,46223,46234,46238,46242,46246,46254,46270,46280,46296,46306,46320,46324,46334,46344,46354,46360,46364,46368,46376,46380,46396,46404,46408,46412,46420,46428,46432,46436,46440,46444,46450,46454,46464,46472,46480,46484,46488,46492,46500,46504,46520,46524,46528,46532,46544,46548,46560,46564,46568,46580,46584,46594,46598,46602,46614,46618,46626,46630,46634,46642,46646,46654,46658,46662,46666,46670,46674,46690,46698,46702,46706,46754,46760,46764,46774,46782,46790,46794,46798,46802,46806,46814,46818,46834,46838,46846,46854],{"__ignoreMap":63},[68,46184,46185,46187],{"class":70,"line":71},[68,46186,31985],{"class":102},[68,46188,31988],{"class":85},[68,46190,46191,46193,46195,46197],{"class":70,"line":78},[68,46192,31985],{"class":102},[68,46194,33008],{"class":85},[68,46196,32976],{"class":102},[68,46198,33013],{"class":85},[68,46200,46201,46203,46205,46207],{"class":70,"line":89},[68,46202,32330],{"class":102},[68,46204,32991],{"class":85},[68,46206,31985],{"class":102},[68,46208,32996],{"class":85},[68,46210,46211],{"class":70,"line":115},[68,46212,35515],{"class":74},[68,46214,46215,46217,46219,46221],{"class":70,"line":280},[68,46216,32330],{"class":102},[68,46218,32961],{"class":85},[68,46220,31985],{"class":102},[68,46222,32966],{"class":85},[68,46224,46225,46227,46229,46231],{"class":70,"line":301},[68,46226,32330],{"class":102},[68,46228,33507],{"class":85},[68,46230,31985],{"class":102},[68,46232,46233],{"class":85}," GoogLeNet,Inception\n",[68,46235,46236],{"class":70,"line":320},[68,46237,4000],{"emptyLinePlaceholder":1679},[68,46239,46240],{"class":70,"line":2915},[68,46241,4000],{"emptyLinePlaceholder":1679},[68,46243,46244],{"class":70,"line":2921},[68,46245,35544],{"class":74},[68,46247,46248,46250,46252],{"class":70,"line":2933},[68,46249,33540],{"class":102},[68,46251,35551],{"class":587},[68,46253,33546],{"class":85},[68,46255,46256,46258,46260,46262,46264,46266,46268],{"class":70,"line":3214},[68,46257,35558],{"class":85},[68,46259,869],{"class":102},[68,46261,33048],{"class":85},[68,46263,33051],{"class":6815},[68,46265,869],{"class":102},[68,46267,33056],{"class":872},[68,46269,33059],{"class":85},[68,46271,46272,46274,46276,46278],{"class":70,"line":3219},[68,46273,35575],{"class":6815},[68,46275,869],{"class":102},[68,46277,35580],{"class":92},[68,46279,33059],{"class":85},[68,46281,46282,46284,46286,46288,46290,46292,46294],{"class":70,"line":3225},[68,46283,35587],{"class":6815},[68,46285,869],{"class":102},[68,46287,33086],{"class":85},[68,46289,33089],{"class":6815},[68,46291,869],{"class":102},[68,46293,37042],{"class":92},[68,46295,33097],{"class":85},[68,46297,46298,46300,46302,46304],{"class":70,"line":3230},[68,46299,35604],{"class":6815},[68,46301,869],{"class":102},[68,46303,33069],{"class":92},[68,46305,1757],{"class":85},[68,46307,46308,46310,46312,46314,46316,46318],{"class":70,"line":3244},[68,46309,35615],{"class":85},[68,46311,869],{"class":102},[68,46313,33127],{"class":85},[68,46315,33130],{"class":6815},[68,46317,869],{"class":102},[68,46319,35626],{"class":85},[68,46321,46322],{"class":70,"line":3249},[68,46323,35631],{"class":74},[68,46325,46326,46328,46330,46332],{"class":70,"line":3255},[68,46327,35636],{"class":6815},[68,46329,869],{"class":102},[68,46331,99],{"class":92},[68,46333,33059],{"class":85},[68,46335,46336,46338,46340,46342],{"class":70,"line":3276},[68,46337,35647],{"class":6815},[68,46339,869],{"class":102},[68,46341,33069],{"class":92},[68,46343,33059],{"class":85},[68,46345,46346,46348,46350,46352],{"class":70,"line":3281},[68,46347,35658],{"class":6815},[68,46349,869],{"class":102},[68,46351,600],{"class":92},[68,46353,1757],{"class":85},[68,46355,46356,46358],{"class":70,"line":3295},[68,46357,5689],{"class":102},[68,46359,35671],{"class":85},[68,46361,46362],{"class":70,"line":3300},[68,46363,4000],{"emptyLinePlaceholder":1679},[68,46365,46366],{"class":70,"line":3329},[68,46367,35680],{"class":74},[68,46369,46370,46372,46374],{"class":70,"line":3334},[68,46371,33540],{"class":102},[68,46373,35687],{"class":587},[68,46375,35690],{"class":85},[68,46377,46378],{"class":70,"line":3351},[68,46379,35695],{"class":74},[68,46381,46382,46384,46386,46388,46390,46392,46394],{"class":70,"line":3356},[68,46383,32830],{"class":85},[68,46385,869],{"class":102},[68,46387,32837],{"class":872},[68,46389,3306],{"class":102},[68,46391,32842],{"class":85},[68,46393,3303],{"class":102},[68,46395,35712],{"class":872},[68,46397,46398,46400,46402],{"class":70,"line":3361},[68,46399,32882],{"class":85},[68,46401,869],{"class":102},[68,46403,33882],{"class":85},[68,46405,46406],{"class":70,"line":3366},[68,46407,4000],{"emptyLinePlaceholder":1679},[68,46409,46410],{"class":70,"line":3380},[68,46411,35729],{"class":74},[68,46413,46414,46416,46418],{"class":70,"line":3385},[68,46415,35734],{"class":85},[68,46417,869],{"class":102},[68,46419,33935],{"class":92},[68,46421,46422,46424,46426],{"class":70,"line":4177},[68,46423,35743],{"class":85},[68,46425,869],{"class":102},[68,46427,4684],{"class":92},[68,46429,46430],{"class":70,"line":4191},[68,46431,4000],{"emptyLinePlaceholder":1679},[68,46433,46434],{"class":70,"line":4199},[68,46435,35756],{"class":74},[68,46437,46438],{"class":70,"line":4204},[68,46439,35761],{"class":74},[68,46441,46442],{"class":70,"line":4210},[68,46443,35766],{"class":74},[68,46445,46446,46448],{"class":70,"line":4216},[68,46447,35771],{"class":102},[68,46449,34477],{"class":85},[68,46451,46452],{"class":70,"line":4221},[68,46453,35778],{"class":74},[68,46455,46456,46458,46460,46462],{"class":70,"line":9547},[68,46457,5002],{"class":102},[68,46459,35785],{"class":85},[68,46461,27637],{"class":102},[68,46463,35790],{"class":85},[68,46465,46466,46468,46470],{"class":70,"line":9571},[68,46467,35795],{"class":85},[68,46469,869],{"class":102},[68,46471,35800],{"class":85},[68,46473,46474,46476,46478],{"class":70,"line":9576},[68,46475,35805],{"class":85},[68,46477,869],{"class":102},[68,46479,35810],{"class":85},[68,46481,46482],{"class":70,"line":9582},[68,46483,35815],{"class":74},[68,46485,46486],{"class":70,"line":9609},[68,46487,34468],{"class":85},[68,46489,46490],{"class":70,"line":9614},[68,46491,35824],{"class":74},[68,46493,46494,46496,46498],{"class":70,"line":9620},[68,46495,34253],{"class":85},[68,46497,869],{"class":102},[68,46499,35833],{"class":85},[68,46501,46502],{"class":70,"line":9632},[68,46503,35838],{"class":74},[68,46505,46506,46508,46510,46512,46514,46516,46518],{"class":70,"line":9644},[68,46507,34270],{"class":85},[68,46509,869],{"class":102},[68,46511,34275],{"class":85},[68,46513,34278],{"class":6815},[68,46515,869],{"class":102},[68,46517,99],{"class":92},[68,46519,1757],{"class":85},[68,46521,46522],{"class":70,"line":9656},[68,46523,35859],{"class":74},[68,46525,46526],{"class":70,"line":11314},[68,46527,35864],{"class":74},[68,46529,46530],{"class":70,"line":11339},[68,46531,35869],{"class":74},[68,46533,46534,46536,46538,46540,46542],{"class":70,"line":11362},[68,46535,35874],{"class":85},[68,46537,11075],{"class":102},[68,46539,34380],{"class":85},[68,46541,4548],{"class":102},[68,46543,35883],{"class":85},[68,46545,46546],{"class":70,"line":11386},[68,46547,35888],{"class":74},[68,46549,46550,46552,46554,46556,46558],{"class":70,"line":11391},[68,46551,35893],{"class":85},[68,46553,11075],{"class":102},[68,46555,35898],{"class":85},[68,46557,600],{"class":92},[68,46559,1757],{"class":85},[68,46561,46562],{"class":70,"line":11396},[68,46563,4000],{"emptyLinePlaceholder":1679},[68,46565,46566],{"class":70,"line":11401},[68,46567,35911],{"class":74},[68,46569,46570,46572,46574,46576,46578],{"class":70,"line":11410},[68,46571,35916],{"class":85},[68,46573,869],{"class":102},[68,46575,35921],{"class":85},[68,46577,2320],{"class":102},[68,46579,35926],{"class":85},[68,46581,46582],{"class":70,"line":11415},[68,46583,35931],{"class":74},[68,46585,46586,46588,46590,46592],{"class":70,"line":11421},[68,46587,34044],{"class":92},[68,46589,997],{"class":85},[68,46591,35940],{"class":872},[68,46593,35943],{"class":85},[68,46595,46596],{"class":70,"line":11442},[68,46597,4000],{"emptyLinePlaceholder":1679},[68,46599,46600],{"class":70,"line":11448},[68,46601,35952],{"class":74},[68,46603,46604,46606,46608,46610,46612],{"class":70,"line":11462},[68,46605,3134],{"class":102},[68,46607,32813],{"class":92},[68,46609,4548],{"class":102},[68,46611,32818],{"class":872},[68,46613,5338],{"class":85},[68,46615,46616],{"class":70,"line":11468},[68,46617,35969],{"class":74},[68,46619,46620,46622,46624],{"class":70,"line":11495},[68,46621,32882],{"class":85},[68,46623,869],{"class":102},[68,46625,46144],{"class":85},[68,46627,46628],{"class":70,"line":11504},[68,46629,35982],{"class":74},[68,46631,46632],{"class":70,"line":11510},[68,46633,35987],{"class":74},[68,46635,46636,46638,46640],{"class":70,"line":11518},[68,46637,35992],{"class":85},[68,46639,35995],{"class":872},[68,46641,32090],{"class":85},[68,46643,46644],{"class":70,"line":11523},[68,46645,36002],{"class":74},[68,46647,46648,46650,46652],{"class":70,"line":18199},[68,46649,35615],{"class":85},[68,46651,869],{"class":102},[68,46653,36011],{"class":85},[68,46655,46656],{"class":70,"line":18205},[68,46657,36016],{"class":74},[68,46659,46660],{"class":70,"line":18228},[68,46661,36021],{"class":85},[68,46663,46664],{"class":70,"line":18234},[68,46665,4000],{"emptyLinePlaceholder":1679},[68,46667,46668],{"class":70,"line":18257},[68,46669,36030],{"class":74},[68,46671,46672],{"class":70,"line":18271},[68,46673,36035],{"class":74},[68,46675,46676,46678,46680,46682,46684,46686,46688],{"class":70,"line":18291},[68,46677,32830],{"class":85},[68,46679,869],{"class":102},[68,46681,32837],{"class":872},[68,46683,3306],{"class":102},[68,46685,32842],{"class":85},[68,46687,3303],{"class":102},[68,46689,35712],{"class":872},[68,46691,46692,46694,46696],{"class":70,"line":18297},[68,46693,32882],{"class":85},[68,46695,869],{"class":102},[68,46697,33882],{"class":85},[68,46699,46700],{"class":70,"line":18308},[68,46701,36064],{"class":74},[68,46703,46704],{"class":70,"line":18331},[68,46705,36069],{"class":74},[68,46707,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752],{"class":70,"line":18353},[68,46709,36074],{"class":85},[68,46711,869],{"class":102},[68,46713,2626],{"class":85},[68,46715,36081],{"class":872},[68,46717,2114],{"class":85},[68,46719,36086],{"class":872},[68,46721,2114],{"class":85},[68,46723,36091],{"class":872},[68,46725,2114],{"class":85},[68,46727,36096],{"class":872},[68,46729,2114],{"class":85},[68,46731,36101],{"class":872},[68,46733,2114],{"class":85},[68,46735,36106],{"class":872},[68,46737,2114],{"class":85},[68,46739,36111],{"class":872},[68,46741,2114],{"class":85},[68,46743,36116],{"class":872},[68,46745,2114],{"class":85},[68,46747,36121],{"class":872},[68,46749,2114],{"class":85},[68,46751,36126],{"class":872},[68,46753,34839],{"class":85},[68,46755,46756,46758],{"class":70,"line":18358},[68,46757,35771],{"class":102},[68,46759,34477],{"class":85},[68,46761,46762],{"class":70,"line":18364},[68,46763,36139],{"class":74},[68,46765,46766,46768,46770,46772],{"class":70,"line":18378},[68,46767,5002],{"class":102},[68,46769,36146],{"class":85},[68,46771,27637],{"class":102},[68,46773,35790],{"class":85},[68,46775,46776,46778,46780],{"class":70,"line":18391},[68,46777,34203],{"class":85},[68,46779,869],{"class":102},[68,46781,34208],{"class":85},[68,46783,46784,46786,46788],{"class":70,"line":18396},[68,46785,34218],{"class":85},[68,46787,869],{"class":102},[68,46789,34223],{"class":85},[68,46791,46792],{"class":70,"line":18410},[68,46793,4000],{"emptyLinePlaceholder":1679},[68,46795,46796],{"class":70,"line":18415},[68,46797,36175],{"class":74},[68,46799,46800],{"class":70,"line":18421},[68,46801,34468],{"class":85},[68,46803,46804],{"class":70,"line":18426},[68,46805,36184],{"class":74},[68,46807,46808,46810,46812],{"class":70,"line":18440},[68,46809,34253],{"class":85},[68,46811,869],{"class":102},[68,46813,34258],{"class":85},[68,46815,46816],{"class":70,"line":18445},[68,46817,36197],{"class":74},[68,46819,46820,46822,46824,46826,46828,46830,46832],{"class":70,"line":18450},[68,46821,34270],{"class":85},[68,46823,869],{"class":102},[68,46825,34275],{"class":85},[68,46827,34278],{"class":6815},[68,46829,869],{"class":102},[68,46831,99],{"class":92},[68,46833,1757],{"class":85},[68,46835,46836],{"class":70,"line":18464},[68,46837,36218],{"class":74},[68,46839,46840,46842,46844],{"class":70,"line":18476},[68,46841,36223],{"class":85},[68,46843,869],{"class":102},[68,46845,36228],{"class":85},[68,46847,46848,46850,46852],{"class":70,"line":18481},[68,46849,36233],{"class":85},[68,46851,869],{"class":102},[68,46853,36238],{"class":85},[68,46855,46856,46858,46860,46862,46864,46866,46868,46870],{"class":70,"line":18494},[68,46857,36243],{"class":92},[68,46859,997],{"class":85},[68,46861,36248],{"class":872},[68,46863,36251],{"class":85},[68,46865,36254],{"class":872},[68,46867,2114],{"class":85},[68,46869,36259],{"class":872},[68,46871,36262],{"class":85},[43,46873,46875],{"id":46874},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46877,46878],{},"猫狗分类任务",[19,46880,46881],{},"划分数据集和验证集",[58,46883,46885],{"className":31971,"code":46884,"language":31973,"meta":63,"style":63},"# 创建脚本，用于划分数据集和验证集\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",[65,46886,46887,46892,46899,46904,46915,46922,46926,46936,46950,46959,46963,46968,46978,46998,47002,47007,47017,47028,47041,47045,47050,47059,47069,47080,47084,47089,47099,47103,47108,47113,47118,47123,47128,47132,47142,47169,47182,47194,47221,47226,47231,47245,47250,47262,47277,47292,47300,47304,47309,47315,47327,47340,47345,47350,47355,47405,47411,47415],{"__ignoreMap":63},[68,46888,46889],{"class":70,"line":71},[68,46890,46891],{"class":74},"# 创建脚本，用于划分数据集和验证集\n",[68,46893,46894,46896],{"class":70,"line":78},[68,46895,31985],{"class":102},[68,46897,46898],{"class":85}," os\n",[68,46900,46901],{"class":70,"line":89},[68,46902,46903],{"class":74},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[68,46905,46906,46908,46911,46913],{"class":70,"line":115},[68,46907,32330],{"class":102},[68,46909,46910],{"class":85}," shutil ",[68,46912,31985],{"class":102},[68,46914,33415],{"class":85},[68,46916,46917,46919],{"class":70,"line":280},[68,46918,31985],{"class":102},[68,46920,46921],{"class":85}," random\n",[68,46923,46924],{"class":70,"line":301},[68,46925,4000],{"emptyLinePlaceholder":1679},[68,46927,46928,46930,46933],{"class":70,"line":320},[68,46929,33540],{"class":102},[68,46931,46932],{"class":587}," mkfile",[68,46934,46935],{"class":85},"(file):\n",[68,46937,46938,46940,46942,46945,46948],{"class":70,"line":2915},[68,46939,4700],{"class":102},[68,46941,40523],{"class":102},[68,46943,46944],{"class":85}," os.path.exists(",[68,46946,46947],{"class":6815},"file",[68,46949,32379],{"class":85},[68,46951,46952,46955,46957],{"class":70,"line":2921},[68,46953,46954],{"class":85},"        os.makedirs(",[68,46956,46947],{"class":6815},[68,46958,1757],{"class":85},[68,46960,46961],{"class":70,"line":2933},[68,46962,4000],{"emptyLinePlaceholder":1679},[68,46964,46965],{"class":70,"line":3214},[68,46966,46967],{"class":74},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[68,46969,46970,46973,46975],{"class":70,"line":3219},[68,46971,46972],{"class":85},"file_path",[68,46974,869],{"class":102},[68,46976,46977],{"class":872},"'data_cat_dog'\n",[68,46979,46980,46983,46985,46988,46990,46993,46995],{"class":70,"line":3225},[68,46981,46982],{"class":85},"flower_class",[68,46984,869],{"class":102},[68,46986,46987],{"class":85},"[cla ",[68,46989,4624],{"class":102},[68,46991,46992],{"class":85}," cla ",[68,46994,27637],{"class":102},[68,46996,46997],{"class":85}," os.listdir(file_path)]\n",[68,46999,47000],{"class":70,"line":3230},[68,47001,4000],{"emptyLinePlaceholder":1679},[68,47003,47004],{"class":70,"line":3244},[68,47005,47006],{"class":74},"# 创建训练集train文件夹\n",[68,47008,47009,47012,47015],{"class":70,"line":3249},[68,47010,47011],{"class":85},"mkfile(",[68,47013,47014],{"class":872},"'data\u002Ftrain'",[68,47016,1757],{"class":85},[68,47018,47019,47021,47023,47025],{"class":70,"line":3255},[68,47020,4624],{"class":102},[68,47022,46992],{"class":85},[68,47024,27637],{"class":102},[68,47026,47027],{"class":85}," flower_class:\n",[68,47029,47030,47033,47036,47038],{"class":70,"line":3276},[68,47031,47032],{"class":85},"    mkfile(",[68,47034,47035],{"class":872},"'data\u002Ftrain\u002F'",[68,47037,2217],{"class":102},[68,47039,47040],{"class":85},"cla)\n",[68,47042,47043],{"class":70,"line":3281},[68,47044,4000],{"emptyLinePlaceholder":1679},[68,47046,47047],{"class":70,"line":3295},[68,47048,47049],{"class":74},"# 创建验证集val文件夹\n",[68,47051,47052,47054,47057],{"class":70,"line":3300},[68,47053,47011],{"class":85},[68,47055,47056],{"class":872},"'data\u002Ftest'",[68,47058,1757],{"class":85},[68,47060,47061,47063,47065,47067],{"class":70,"line":3329},[68,47062,4624],{"class":102},[68,47064,46992],{"class":85},[68,47066,27637],{"class":102},[68,47068,47027],{"class":85},[68,47070,47071,47073,47076,47078],{"class":70,"line":3334},[68,47072,47032],{"class":85},[68,47074,47075],{"class":872},"'data\u002Ftest\u002F'",[68,47077,2217],{"class":102},[68,47079,47040],{"class":85},[68,47081,47082],{"class":70,"line":3351},[68,47083,4000],{"emptyLinePlaceholder":1679},[68,47085,47086],{"class":70,"line":3356},[68,47087,47088],{"class":74},"# 划分比例，训练集：测试集=9：1\n",[68,47090,47091,47094,47096],{"class":70,"line":3361},[68,47092,47093],{"class":85},"split_rate",[68,47095,869],{"class":102},[68,47097,47098],{"class":92},"0.1\n",[68,47100,47101],{"class":70,"line":3366},[68,47102,4000],{"emptyLinePlaceholder":1679},[68,47104,47105],{"class":70,"line":3380},[68,47106,47107],{"class":74},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[68,47109,47110],{"class":70,"line":3385},[68,47111,47112],{"class":74},"# cla_path：当前类别的原始图片路径\n",[68,47114,47115],{"class":70,"line":4177},[68,47116,47117],{"class":74},"# images：当前类别下所有图片的文件名列表\n",[68,47119,47120],{"class":70,"line":4191},[68,47121,47122],{"class":74},"# num：该类别图片总数\n",[68,47124,47125],{"class":70,"line":4199},[68,47126,47127],{"class":74},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[68,47129,47130],{"class":70,"line":4204},[68,47131,4000],{"emptyLinePlaceholder":1679},[68,47133,47134,47136,47138,47140],{"class":70,"line":4210},[68,47135,4624],{"class":102},[68,47137,46992],{"class":85},[68,47139,27637],{"class":102},[68,47141,47027],{"class":85},[68,47143,47144,47147,47149,47152,47154,47157,47160,47162,47164,47166],{"class":70,"line":4216},[68,47145,47146],{"class":85},"    cla_path ",[68,47148,869],{"class":102},[68,47150,47151],{"class":85}," file_path ",[68,47153,2217],{"class":102},[68,47155,47156],{"class":872}," '\u002F'",[68,47158,47159],{"class":102}," +",[68,47161,46992],{"class":85},[68,47163,2217],{"class":102},[68,47165,47156],{"class":872},[68,47167,47168],{"class":74},"  # 某一类别的子目录\n",[68,47170,47171,47174,47176,47179],{"class":70,"line":4221},[68,47172,47173],{"class":85},"    images ",[68,47175,869],{"class":102},[68,47177,47178],{"class":85}," os.listdir(cla_path)  ",[68,47180,47181],{"class":74},"# iamges 列表存储了该目录下所有图像的名称\n",[68,47183,47184,47187,47189,47191],{"class":70,"line":9547},[68,47185,47186],{"class":85},"    num ",[68,47188,869],{"class":102},[68,47190,8930],{"class":92},[68,47192,47193],{"class":85},"(images)\n",[68,47195,47196,47199,47201,47204,47206,47208,47210,47213,47215,47218],{"class":70,"line":9571},[68,47197,47198],{"class":85},"    eval_index ",[68,47200,869],{"class":102},[68,47202,47203],{"class":85}," random.sample(images, ",[68,47205,2229],{"class":6815},[68,47207,869],{"class":102},[68,47209,1754],{"class":92},[68,47211,47212],{"class":85},"(num ",[68,47214,2191],{"class":102},[68,47216,47217],{"class":85}," split_rate))  ",[68,47219,47220],{"class":74},"# 从images列表中随机抽取 k 个图像名称\n",[68,47222,47223],{"class":70,"line":9576},[68,47224,47225],{"class":74},"    # 遍历该类别下的所有图片\n",[68,47227,47228],{"class":70,"line":9582},[68,47229,47230],{"class":74},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[68,47232,47233,47235,47238,47240,47242],{"class":70,"line":9609},[68,47234,4800],{"class":102},[68,47236,47237],{"class":85}," index, image ",[68,47239,27637],{"class":102},[68,47241,33199],{"class":92},[68,47243,47244],{"class":85},"(images):\n",[68,47246,47247],{"class":70,"line":9614},[68,47248,47249],{"class":74},"        # eval_index 中保存验证集val的图像名称\n",[68,47251,47252,47254,47257,47259],{"class":70,"line":9620},[68,47253,4097],{"class":102},[68,47255,47256],{"class":85}," image ",[68,47258,27637],{"class":102},[68,47260,47261],{"class":85}," eval_index:\n",[68,47263,47264,47267,47269,47272,47274],{"class":70,"line":9632},[68,47265,47266],{"class":85},"            image_path ",[68,47268,869],{"class":102},[68,47270,47271],{"class":85}," cla_path ",[68,47273,2217],{"class":102},[68,47275,47276],{"class":85}," image\n",[68,47278,47279,47282,47284,47287,47289],{"class":70,"line":9644},[68,47280,47281],{"class":85},"            new_path ",[68,47283,869],{"class":102},[68,47285,47286],{"class":872}," 'data\u002Ftest\u002F'",[68,47288,47159],{"class":102},[68,47290,47291],{"class":85}," cla\n",[68,47293,47294,47297],{"class":70,"line":9656},[68,47295,47296],{"class":85},"            copy(image_path, new_path)  ",[68,47298,47299],{"class":74},"# 将选中的图像复制到新路径\n",[68,47301,47302],{"class":70,"line":11314},[68,47303,4000],{"emptyLinePlaceholder":1679},[68,47305,47306],{"class":70,"line":11339},[68,47307,47308],{"class":74},"        # 其余的图像保存在训练集train中\n",[68,47310,47311,47313],{"class":70,"line":11362},[68,47312,4134],{"class":102},[68,47314,5338],{"class":85},[68,47316,47317,47319,47321,47323,47325],{"class":70,"line":11386},[68,47318,47266],{"class":85},[68,47320,869],{"class":102},[68,47322,47271],{"class":85},[68,47324,2217],{"class":102},[68,47326,47276],{"class":85},[68,47328,47329,47331,47333,47336,47338],{"class":70,"line":11391},[68,47330,47281],{"class":85},[68,47332,869],{"class":102},[68,47334,47335],{"class":872}," 'data\u002Ftrain\u002F'",[68,47337,47159],{"class":102},[68,47339,47291],{"class":85},[68,47341,47342],{"class":70,"line":11396},[68,47343,47344],{"class":85},"            copy(image_path, new_path)\n",[68,47346,47347],{"class":70,"line":11401},[68,47348,47349],{"class":74},"            # 打印进度条信息\n",[68,47351,47352],{"class":70,"line":11410},[68,47353,47354],{"class":74},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[68,47356,47357,47359,47361,47363,47366,47368,47370,47373,47375,47377,47379,47382,47385,47387,47389,47392,47395,47397,47399,47402],{"class":70,"line":11415},[68,47358,34044],{"class":92},[68,47360,997],{"class":85},[68,47362,1987],{"class":872},[68,47364,47365],{"class":92},"\\r",[68,47367,2626],{"class":872},[68,47369,34052],{"class":92},[68,47371,47372],{"class":872},"] processing [",[68,47374,34052],{"class":92},[68,47376,2320],{"class":872},[68,47378,34052],{"class":92},[68,47380,47381],{"class":872},"]\"",[68,47383,47384],{"class":85},".format(cla, index ",[68,47386,2217],{"class":102},[68,47388,1112],{"class":92},[68,47390,47391],{"class":85},", num), ",[68,47393,47394],{"class":6815},"end",[68,47396,869],{"class":102},[68,47398,9251],{"class":872},[68,47400,47401],{"class":85},")  ",[68,47403,47404],{"class":74},"# processing bar\n",[68,47406,47407,47409],{"class":70,"line":11421},[68,47408,32892],{"class":92},[68,47410,3577],{"class":85},[68,47412,47413],{"class":70,"line":11442},[68,47414,4000],{"emptyLinePlaceholder":1679},[68,47416,47417,47419,47421,47424],{"class":70,"line":11448},[68,47418,32008],{"class":92},[68,47420,997],{"class":85},[68,47422,47423],{"class":872},"\"processing done!\"",[68,47425,1757],{"class":85},[19,47427,47428],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23593,47430,47432],{"id":47431},"_242模型代码","2.4.2.模型代码",[19,47434,47435],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[58,47437,47439],{"className":31971,"code":47438,"language":31973,"meta":63,"style":63},"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",[65,47440,47441,47447,47457,47467,47471,47487,47495,47509,47519,47523,47553,47557,47591,47637,47641,47675,47721,47725,47729,47763,47793,47797,47805,47819,47841,47863,47881,47885,47899,47903,47907,47923,47927,47935,47949,47959,48003,48007,48035,48039,48049,48077,48081,48117,48121,48149,48153,48163,48195,48227,48255,48259,48269,48301,48333,48365,48397,48429,48457,48461,48471,48503,48535,48547,48551,48563,48567,48571,48583,48591,48611,48615,48619,48623,48627,48631,48635,48649,48657,48665,48677,48691,48699,48703,48711,48721,48731,48741,48751,48761,48767,48771,48775,48787,48807,48815],{"__ignoreMap":63},[68,47442,47443,47445],{"class":70,"line":71},[68,47444,31985],{"class":102},[68,47446,31988],{"class":85},[68,47448,47449,47451,47453,47455],{"class":70,"line":78},[68,47450,32330],{"class":102},[68,47452,32333],{"class":85},[68,47454,31985],{"class":102},[68,47456,32338],{"class":85},[68,47458,47459,47461,47463,47465],{"class":70,"line":89},[68,47460,32330],{"class":102},[68,47462,32350],{"class":85},[68,47464,31985],{"class":102},[68,47466,32355],{"class":85},[68,47468,47469],{"class":70,"line":115},[68,47470,4000],{"emptyLinePlaceholder":1679},[68,47472,47473,47475,47477,47479,47481,47483,47485],{"class":70,"line":280},[68,47474,16291],{"class":102},[68,47476,43086],{"class":587},[68,47478,997],{"class":85},[68,47480,32371],{"class":587},[68,47482,2294],{"class":85},[68,47484,32376],{"class":587},[68,47486,32379],{"class":85},[68,47488,47489,47491,47493],{"class":70,"line":301},[68,47490,32394],{"class":102},[68,47492,32397],{"class":92},[68,47494,43105],{"class":85},[68,47496,47497,47499,47501,47503,47505,47507],{"class":70,"line":320},[68,47498,32410],{"class":92},[68,47500,43112],{"class":85},[68,47502,32416],{"class":92},[68,47504,32419],{"class":85},[68,47506,32422],{"class":92},[68,47508,3577],{"class":85},[68,47510,47511,47513,47515,47517],{"class":70,"line":2915},[68,47512,32438],{"class":92},[68,47514,36364],{"class":85},[68,47516,869],{"class":102},[68,47518,36369],{"class":85},[68,47520,47521],{"class":70,"line":2921},[68,47522,43135],{"class":74},[68,47524,47525,47527,47529,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551],{"class":70,"line":2933},[68,47526,32438],{"class":92},[68,47528,43142],{"class":85},[68,47530,869],{"class":102},[68,47532,32446],{"class":85},[68,47534,32449],{"class":6815},[68,47536,869],{"class":102},[68,47538,43153],{"class":85},[68,47540,32458],{"class":6815},[68,47542,869],{"class":102},[68,47544,43160],{"class":85},[68,47546,32467],{"class":6815},[68,47548,869],{"class":102},[68,47550,99],{"class":92},[68,47552,1757],{"class":85},[68,47554,47555],{"class":70,"line":3214},[68,47556,43173],{"class":74},[68,47558,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577,47579,47581,47583,47585,47587,47589],{"class":70,"line":3219},[68,47560,32438],{"class":92},[68,47562,43180],{"class":85},[68,47564,869],{"class":102},[68,47566,32446],{"class":85},[68,47568,32449],{"class":6815},[68,47570,869],{"class":102},[68,47572,43153],{"class":85},[68,47574,32458],{"class":6815},[68,47576,869],{"class":102},[68,47578,43197],{"class":85},[68,47580,600],{"class":92},[68,47582,43202],{"class":85},[68,47584,32467],{"class":6815},[68,47586,869],{"class":102},[68,47588,99],{"class":92},[68,47590,1757],{"class":85},[68,47592,47593,47595,47597,47599,47601,47603,47605,47607,47609,47611,47613,47615,47617,47619,47621,47623,47625,47627,47629,47631,47633,47635],{"class":70,"line":3225},[68,47594,32438],{"class":92},[68,47596,43217],{"class":85},[68,47598,869],{"class":102},[68,47600,32446],{"class":85},[68,47602,32449],{"class":6815},[68,47604,869],{"class":102},[68,47606,43197],{"class":85},[68,47608,600],{"class":92},[68,47610,43202],{"class":85},[68,47612,32458],{"class":6815},[68,47614,869],{"class":102},[68,47616,43197],{"class":85},[68,47618,99],{"class":92},[68,47620,43202],{"class":85},[68,47622,32467],{"class":6815},[68,47624,869],{"class":102},[68,47626,288],{"class":92},[68,47628,2114],{"class":85},[68,47630,32476],{"class":6815},[68,47632,869],{"class":102},[68,47634,99],{"class":92},[68,47636,1757],{"class":85},[68,47638,47639],{"class":70,"line":3230},[68,47640,43262],{"class":74},[68,47642,47643,47645,47647,47649,47651,47653,47655,47657,47659,47661,47663,47665,47667,47669,47671,47673],{"class":70,"line":3244},[68,47644,32438],{"class":92},[68,47646,43269],{"class":85},[68,47648,869],{"class":102},[68,47650,32446],{"class":85},[68,47652,32449],{"class":6815},[68,47654,869],{"class":102},[68,47656,43153],{"class":85},[68,47658,32458],{"class":6815},[68,47660,869],{"class":102},[68,47662,43286],{"class":85},[68,47664,600],{"class":92},[68,47666,43202],{"class":85},[68,47668,32467],{"class":6815},[68,47670,869],{"class":102},[68,47672,99],{"class":92},[68,47674,1757],{"class":85},[68,47676,47677,47679,47681,47683,47685,47687,47689,47691,47693,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713,47715,47717,47719],{"class":70,"line":3249},[68,47678,32438],{"class":92},[68,47680,43305],{"class":85},[68,47682,869],{"class":102},[68,47684,32446],{"class":85},[68,47686,32449],{"class":6815},[68,47688,869],{"class":102},[68,47690,43286],{"class":85},[68,47692,600],{"class":92},[68,47694,43202],{"class":85},[68,47696,32458],{"class":6815},[68,47698,869],{"class":102},[68,47700,43286],{"class":85},[68,47702,99],{"class":92},[68,47704,43202],{"class":85},[68,47706,32467],{"class":6815},[68,47708,869],{"class":102},[68,47710,2055],{"class":92},[68,47712,2114],{"class":85},[68,47714,32476],{"class":6815},[68,47716,869],{"class":102},[68,47718,267],{"class":92},[68,47720,1757],{"class":85},[68,47722,47723],{"class":70,"line":3255},[68,47724,43350],{"class":74},[68,47726,47727],{"class":70,"line":3276},[68,47728,43355],{"class":74},[68,47730,47731,47733,47735,47737,47739,47741,47743,47745,47747,47749,47751,47753,47755,47757,47759,47761],{"class":70,"line":3281},[68,47732,32438],{"class":92},[68,47734,43362],{"class":85},[68,47736,869],{"class":102},[68,47738,36422],{"class":85},[68,47740,32467],{"class":6815},[68,47742,869],{"class":102},[68,47744,288],{"class":92},[68,47746,2114],{"class":85},[68,47748,32522],{"class":6815},[68,47750,869],{"class":102},[68,47752,99],{"class":92},[68,47754,2114],{"class":85},[68,47756,32476],{"class":6815},[68,47758,869],{"class":102},[68,47760,99],{"class":92},[68,47762,1757],{"class":85},[68,47764,47765,47767,47769,47771,47773,47775,47777,47779,47781,47783,47785,47787,47789,47791],{"class":70,"line":3295},[68,47766,32438],{"class":92},[68,47768,43397],{"class":85},[68,47770,869],{"class":102},[68,47772,32446],{"class":85},[68,47774,32449],{"class":6815},[68,47776,869],{"class":102},[68,47778,43153],{"class":85},[68,47780,32458],{"class":6815},[68,47782,869],{"class":102},[68,47784,43414],{"class":85},[68,47786,32467],{"class":6815},[68,47788,869],{"class":102},[68,47790,99],{"class":92},[68,47792,1757],{"class":85},[68,47794,47795],{"class":70,"line":3300},[68,47796,4000],{"emptyLinePlaceholder":1679},[68,47798,47799,47801,47803],{"class":70,"line":3329},[68,47800,32394],{"class":102},[68,47802,32686],{"class":587},[68,47804,32689],{"class":85},[68,47806,47807,47809,47811,47813,47815,47817],{"class":70,"line":3334},[68,47808,43439],{"class":85},[68,47810,869],{"class":102},[68,47812,32416],{"class":92},[68,47814,36777],{"class":85},[68,47816,32416],{"class":92},[68,47818,43450],{"class":85},[68,47820,47821,47823,47825,47827,47829,47831,47833,47835,47837,47839],{"class":70,"line":3351},[68,47822,8684],{"class":85},[68,47824,869],{"class":102},[68,47826,32416],{"class":92},[68,47828,36777],{"class":85},[68,47830,32416],{"class":92},[68,47832,43465],{"class":85},[68,47834,32416],{"class":92},[68,47836,36777],{"class":85},[68,47838,32416],{"class":92},[68,47840,43474],{"class":85},[68,47842,47843,47845,47847,47849,47851,47853,47855,47857,47859,47861],{"class":70,"line":3356},[68,47844,43479],{"class":85},[68,47846,869],{"class":102},[68,47848,32416],{"class":92},[68,47850,36777],{"class":85},[68,47852,32416],{"class":92},[68,47854,43490],{"class":85},[68,47856,32416],{"class":92},[68,47858,36777],{"class":85},[68,47860,32416],{"class":92},[68,47862,43499],{"class":85},[68,47864,47865,47867,47869,47871,47873,47875,47877,47879],{"class":70,"line":3361},[68,47866,43504],{"class":85},[68,47868,869],{"class":102},[68,47870,32416],{"class":92},[68,47872,36777],{"class":85},[68,47874,32416],{"class":92},[68,47876,43515],{"class":85},[68,47878,32416],{"class":92},[68,47880,43520],{"class":85},[68,47882,47883],{"class":70,"line":3366},[68,47884,43525],{"class":74},[68,47886,47887,47889,47891,47893,47895,47897],{"class":70,"line":3380},[68,47888,16349],{"class":102},[68,47890,43532],{"class":85},[68,47892,34278],{"class":6815},[68,47894,869],{"class":102},[68,47896,99],{"class":92},[68,47898,1757],{"class":85},[68,47900,47901],{"class":70,"line":3385},[68,47902,4000],{"emptyLinePlaceholder":1679},[68,47904,47905],{"class":70,"line":4177},[68,47906,43553],{"class":74},[68,47908,47909,47911,47913,47915,47917,47919,47921],{"class":70,"line":4191},[68,47910,16291],{"class":102},[68,47912,43560],{"class":587},[68,47914,997],{"class":85},[68,47916,32371],{"class":587},[68,47918,2294],{"class":85},[68,47920,32376],{"class":587},[68,47922,32379],{"class":85},[68,47924,47925],{"class":70,"line":4199},[68,47926,43575],{"class":74},[68,47928,47929,47931,47933],{"class":70,"line":4204},[68,47930,32394],{"class":102},[68,47932,32397],{"class":92},[68,47934,43584],{"class":85},[68,47936,47937,47939,47941,47943,47945,47947],{"class":70,"line":4210},[68,47938,32410],{"class":92},[68,47940,43591],{"class":85},[68,47942,32416],{"class":92},[68,47944,32419],{"class":85},[68,47946,32422],{"class":92},[68,47948,3577],{"class":85},[68,47950,47951,47953,47955,47957],{"class":70,"line":4216},[68,47952,32438],{"class":92},[68,47954,43606],{"class":85},[68,47956,869],{"class":102},[68,47958,39602],{"class":85},[68,47960,47961,47963,47965,47967,47969,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991,47993,47995,47997,47999,48001],{"class":70,"line":4221},[68,47962,39607],{"class":85},[68,47964,32449],{"class":6815},[68,47966,869],{"class":102},[68,47968,288],{"class":92},[68,47970,2114],{"class":85},[68,47972,32458],{"class":6815},[68,47974,869],{"class":102},[68,47976,1940],{"class":92},[68,47978,2114],{"class":85},[68,47980,32467],{"class":6815},[68,47982,869],{"class":102},[68,47984,2105],{"class":92},[68,47986,2114],{"class":85},[68,47988,32522],{"class":6815},[68,47990,869],{"class":102},[68,47992,267],{"class":92},[68,47994,2114],{"class":85},[68,47996,32476],{"class":6815},[68,47998,869],{"class":102},[68,48000,288],{"class":92},[68,48002,39640],{"class":85},[68,48004,48005],{"class":70,"line":9547},[68,48006,39645],{"class":85},[68,48008,48009,48011,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033],{"class":70,"line":9571},[68,48010,39690],{"class":85},[68,48012,32467],{"class":6815},[68,48014,869],{"class":102},[68,48016,288],{"class":92},[68,48018,2114],{"class":85},[68,48020,32522],{"class":6815},[68,48022,869],{"class":102},[68,48024,267],{"class":92},[68,48026,2114],{"class":85},[68,48028,32476],{"class":6815},[68,48030,869],{"class":102},[68,48032,99],{"class":92},[68,48034,1757],{"class":85},[68,48036,48037],{"class":70,"line":9576},[68,48038,39719],{"class":85},[68,48040,48041,48043,48045,48047],{"class":70,"line":9582},[68,48042,32438],{"class":92},[68,48044,43697],{"class":85},[68,48046,869],{"class":102},[68,48048,39602],{"class":85},[68,48050,48051,48053,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075],{"class":70,"line":9609},[68,48052,39607],{"class":85},[68,48054,32449],{"class":6815},[68,48056,869],{"class":102},[68,48058,1940],{"class":92},[68,48060,2114],{"class":85},[68,48062,32458],{"class":6815},[68,48064,869],{"class":102},[68,48066,1940],{"class":92},[68,48068,2114],{"class":85},[68,48070,32467],{"class":6815},[68,48072,869],{"class":102},[68,48074,99],{"class":92},[68,48076,39640],{"class":85},[68,48078,48079],{"class":70,"line":9614},[68,48080,39645],{"class":85},[68,48082,48083,48085,48087,48089,48091,48093,48095,48097,48099,48101,48103,48105,48107,48109,48111,48113,48115],{"class":70,"line":9620},[68,48084,39607],{"class":85},[68,48086,32449],{"class":6815},[68,48088,869],{"class":102},[68,48090,1940],{"class":92},[68,48092,2114],{"class":85},[68,48094,32458],{"class":6815},[68,48096,869],{"class":102},[68,48098,43752],{"class":92},[68,48100,2114],{"class":85},[68,48102,32467],{"class":6815},[68,48104,869],{"class":102},[68,48106,288],{"class":92},[68,48108,2114],{"class":85},[68,48110,32476],{"class":6815},[68,48112,869],{"class":102},[68,48114,99],{"class":92},[68,48116,39640],{"class":85},[68,48118,48119],{"class":70,"line":9632},[68,48120,39645],{"class":85},[68,48122,48123,48125,48127,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147],{"class":70,"line":9644},[68,48124,39690],{"class":85},[68,48126,32467],{"class":6815},[68,48128,869],{"class":102},[68,48130,288],{"class":92},[68,48132,2114],{"class":85},[68,48134,32522],{"class":6815},[68,48136,869],{"class":102},[68,48138,267],{"class":92},[68,48140,2114],{"class":85},[68,48142,32476],{"class":6815},[68,48144,869],{"class":102},[68,48146,99],{"class":92},[68,48148,1757],{"class":85},[68,48150,48151],{"class":70,"line":9656},[68,48152,39719],{"class":85},[68,48154,48155,48157,48159,48161],{"class":70,"line":11314},[68,48156,32438],{"class":92},[68,48158,43813],{"class":85},[68,48160,869],{"class":102},[68,48162,39602],{"class":85},[68,48164,48165,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193],{"class":70,"line":11339},[68,48166,43822],{"class":85},[68,48168,43752],{"class":92},[68,48170,2114],{"class":85},[68,48172,1940],{"class":92},[68,48174,43831],{"class":85},[68,48176,1946],{"class":92},[68,48178,2114],{"class":85},[68,48180,33663],{"class":92},[68,48182,43840],{"class":85},[68,48184,2337],{"class":92},[68,48186,2114],{"class":85},[68,48188,1934],{"class":92},[68,48190,43849],{"class":85},[68,48192,1934],{"class":92},[68,48194,39640],{"class":85},[68,48196,48197,48199,48201,48203,48205,48207,48209,48211,48213,48215,48217,48219,48221,48223,48225],{"class":70,"line":11362},[68,48198,43822],{"class":85},[68,48200,36463],{"class":92},[68,48202,2114],{"class":85},[68,48204,33663],{"class":92},[68,48206,43831],{"class":85},[68,48208,33663],{"class":92},[68,48210,2114],{"class":85},[68,48212,43752],{"class":92},[68,48214,43840],{"class":85},[68,48216,1934],{"class":92},[68,48218,2114],{"class":85},[68,48220,1946],{"class":92},[68,48222,43849],{"class":85},[68,48224,1940],{"class":92},[68,48226,39640],{"class":85},[68,48228,48229,48231,48233,48235,48237,48239,48241,48243,48245,48247,48249,48251,48253],{"class":70,"line":11386},[68,48230,39690],{"class":85},[68,48232,32467],{"class":6815},[68,48234,869],{"class":102},[68,48236,288],{"class":92},[68,48238,2114],{"class":85},[68,48240,32522],{"class":6815},[68,48242,869],{"class":102},[68,48244,267],{"class":92},[68,48246,2114],{"class":85},[68,48248,32476],{"class":6815},[68,48250,869],{"class":102},[68,48252,99],{"class":92},[68,48254,1757],{"class":85},[68,48256,48257],{"class":70,"line":11391},[68,48258,39719],{"class":85},[68,48260,48261,48263,48265,48267],{"class":70,"line":11396},[68,48262,32438],{"class":92},[68,48264,43924],{"class":85},[68,48266,869],{"class":102},[68,48268,39602],{"class":85},[68,48270,48271,48273,48275,48277,48279,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299],{"class":70,"line":11401},[68,48272,43822],{"class":85},[68,48274,43935],{"class":92},[68,48276,2114],{"class":85},[68,48278,43752],{"class":92},[68,48280,43831],{"class":85},[68,48282,1946],{"class":92},[68,48284,2114],{"class":85},[68,48286,43948],{"class":92},[68,48288,43840],{"class":85},[68,48290,2337],{"class":92},[68,48292,2114],{"class":85},[68,48294,2343],{"class":92},[68,48296,43849],{"class":85},[68,48298,1940],{"class":92},[68,48300,39640],{"class":85},[68,48302,48303,48305,48307,48309,48311,48313,48315,48317,48319,48321,48323,48325,48327,48329,48331],{"class":70,"line":11410},[68,48304,43822],{"class":85},[68,48306,40050],{"class":92},[68,48308,2114],{"class":85},[68,48310,22643],{"class":92},[68,48312,43831],{"class":85},[68,48314,2354],{"class":92},[68,48316,2114],{"class":85},[68,48318,33094],{"class":92},[68,48320,43840],{"class":85},[68,48322,2536],{"class":92},[68,48324,2114],{"class":85},[68,48326,1940],{"class":92},[68,48328,43849],{"class":85},[68,48330,1940],{"class":92},[68,48332,39640],{"class":85},[68,48334,48335,48337,48339,48341,48343,48345,48347,48349,48351,48353,48355,48357,48359,48361,48363],{"class":70,"line":11415},[68,48336,43822],{"class":85},[68,48338,40050],{"class":92},[68,48340,2114],{"class":85},[68,48342,33663],{"class":92},[68,48344,43831],{"class":85},[68,48346,33663],{"class":92},[68,48348,2114],{"class":85},[68,48350,36463],{"class":92},[68,48352,43840],{"class":85},[68,48354,2536],{"class":92},[68,48356,2114],{"class":85},[68,48358,1940],{"class":92},[68,48360,43849],{"class":85},[68,48362,1940],{"class":92},[68,48364,39640],{"class":85},[68,48366,48367,48369,48371,48373,48375,48377,48379,48381,48383,48385,48387,48389,48391,48393,48395],{"class":70,"line":11421},[68,48368,43822],{"class":85},[68,48370,40050],{"class":92},[68,48372,2114],{"class":85},[68,48374,2354],{"class":92},[68,48376,43831],{"class":85},[68,48378,33663],{"class":92},[68,48380,2114],{"class":85},[68,48382,44045],{"class":92},[68,48384,43840],{"class":85},[68,48386,1934],{"class":92},[68,48388,2114],{"class":85},[68,48390,1940],{"class":92},[68,48392,43849],{"class":85},[68,48394,1940],{"class":92},[68,48396,39640],{"class":85},[68,48398,48399,48401,48403,48405,48407,48409,48411,48413,48415,48417,48419,48421,48423,48425,48427],{"class":70,"line":11442},[68,48400,43822],{"class":85},[68,48402,44066],{"class":92},[68,48404,2114],{"class":85},[68,48406,36463],{"class":92},[68,48408,43831],{"class":85},[68,48410,22643],{"class":92},[68,48412,2114],{"class":85},[68,48414,44079],{"class":92},[68,48416,43840],{"class":85},[68,48418,1934],{"class":92},[68,48420,2114],{"class":85},[68,48422,33663],{"class":92},[68,48424,43849],{"class":85},[68,48426,33663],{"class":92},[68,48428,39640],{"class":85},[68,48430,48431,48433,48435,48437,48439,48441,48443,48445,48447,48449,48451,48453,48455],{"class":70,"line":11448},[68,48432,39690],{"class":85},[68,48434,32467],{"class":6815},[68,48436,869],{"class":102},[68,48438,288],{"class":92},[68,48440,2114],{"class":85},[68,48442,32522],{"class":6815},[68,48444,869],{"class":102},[68,48446,267],{"class":92},[68,48448,2114],{"class":85},[68,48450,32476],{"class":6815},[68,48452,869],{"class":102},[68,48454,99],{"class":92},[68,48456,1757],{"class":85},[68,48458,48459],{"class":70,"line":11462},[68,48460,39719],{"class":85},[68,48462,48463,48465,48467,48469],{"class":70,"line":11468},[68,48464,32438],{"class":92},[68,48466,44132],{"class":85},[68,48468,869],{"class":102},[68,48470,39602],{"class":85},[68,48472,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491,48493,48495,48497,48499,48501],{"class":70,"line":11495},[68,48474,43822],{"class":85},[68,48476,44143],{"class":92},[68,48478,2114],{"class":85},[68,48480,36463],{"class":92},[68,48482,43831],{"class":85},[68,48484,22643],{"class":92},[68,48486,2114],{"class":85},[68,48488,44079],{"class":92},[68,48490,43840],{"class":85},[68,48492,1934],{"class":92},[68,48494,2114],{"class":85},[68,48496,33663],{"class":92},[68,48498,43849],{"class":85},[68,48500,33663],{"class":92},[68,48502,39640],{"class":85},[68,48504,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533],{"class":70,"line":11504},[68,48506,43822],{"class":85},[68,48508,44143],{"class":92},[68,48510,2114],{"class":85},[68,48512,36533],{"class":92},[68,48514,43831],{"class":85},[68,48516,43752],{"class":92},[68,48518,2114],{"class":85},[68,48520,36533],{"class":92},[68,48522,43840],{"class":85},[68,48524,2343],{"class":92},[68,48526,2114],{"class":85},[68,48528,33663],{"class":92},[68,48530,43849],{"class":85},[68,48532,33663],{"class":92},[68,48534,39640],{"class":85},[68,48536,48537,48539,48541,48543,48545],{"class":70,"line":11510},[68,48538,44206],{"class":85},[68,48540,99],{"class":92},[68,48542,2114],{"class":85},[68,48544,99],{"class":92},[68,48546,44215],{"class":85},[68,48548,48549],{"class":70,"line":11518},[68,48550,40383],{"class":85},[68,48552,48553,48555,48557,48559,48561],{"class":70,"line":11523},[68,48554,40388],{"class":85},[68,48556,44226],{"class":92},[68,48558,2114],{"class":85},[68,48560,267],{"class":92},[68,48562,1757],{"class":85},[68,48564,48565],{"class":70,"line":18199},[68,48566,39719],{"class":85},[68,48568,48569],{"class":70,"line":18205},[68,48570,44241],{"class":74},[68,48572,48573,48575,48577,48579,48581],{"class":70,"line":18228},[68,48574,5002],{"class":102},[68,48576,40461],{"class":85},[68,48578,27637],{"class":102},[68,48580,40466],{"class":92},[68,48582,40469],{"class":85},[68,48584,48585,48587,48589],{"class":70,"line":18234},[68,48586,6241],{"class":102},[68,48588,40481],{"class":92},[68,48590,40484],{"class":85},[68,48592,48593,48595,48597,48599,48601,48603,48605,48607,48609],{"class":70,"line":18257},[68,48594,40494],{"class":85},[68,48596,44268],{"class":6815},[68,48598,869],{"class":102},[68,48600,44273],{"class":872},[68,48602,2114],{"class":85},[68,48604,40497],{"class":6815},[68,48606,869],{"class":102},[68,48608,40502],{"class":872},[68,48610,1757],{"class":85},[68,48612,48613],{"class":70,"line":18271},[68,48614,44288],{"class":74},[68,48616,48617],{"class":70,"line":18291},[68,48618,44293],{"class":74},[68,48620,48621],{"class":70,"line":18297},[68,48622,44298],{"class":74},[68,48624,48625],{"class":70,"line":18308},[68,48626,44303],{"class":74},[68,48628,48629],{"class":70,"line":18331},[68,48630,44308],{"class":74},[68,48632,48633],{"class":70,"line":18353},[68,48634,44313],{"class":74},[68,48636,48637,48639,48641,48643,48645,48647],{"class":70,"line":18358},[68,48638,40514],{"class":102},[68,48640,40517],{"class":85},[68,48642,40520],{"class":102},[68,48644,40523],{"class":102},[68,48646,40526],{"class":92},[68,48648,5338],{"class":85},[68,48650,48651,48653,48655],{"class":70,"line":18364},[68,48652,40538],{"class":85},[68,48654,600],{"class":92},[68,48656,1757],{"class":85},[68,48658,48659,48661,48663],{"class":70,"line":18378},[68,48660,44340],{"class":102},[68,48662,40481],{"class":92},[68,48664,40557],{"class":85},[68,48666,48667,48669,48671,48673,48675],{"class":70,"line":18391},[68,48668,44349],{"class":85},[68,48670,600],{"class":92},[68,48672,2114],{"class":85},[68,48674,40579],{"class":92},[68,48676,1757],{"class":85},[68,48678,48679,48681,48683,48685,48687,48689],{"class":70,"line":18396},[68,48680,44362],{"class":102},[68,48682,40517],{"class":85},[68,48684,40520],{"class":102},[68,48686,40523],{"class":102},[68,48688,40526],{"class":92},[68,48690,5338],{"class":85},[68,48692,48693,48695,48697],{"class":70,"line":18410},[68,48694,44377],{"class":85},[68,48696,600],{"class":92},[68,48698,1757],{"class":85},[68,48700,48701],{"class":70,"line":18415},[68,48702,36758],{"class":74},[68,48704,48705,48707,48709],{"class":70,"line":18421},[68,48706,32394],{"class":102},[68,48708,32686],{"class":587},[68,48710,32689],{"class":85},[68,48712,48713,48715,48717,48719],{"class":70,"line":18426},[68,48714,32694],{"class":85},[68,48716,869],{"class":102},[68,48718,32416],{"class":92},[68,48720,44404],{"class":85},[68,48722,48723,48725,48727,48729],{"class":70,"line":18440},[68,48724,32694],{"class":85},[68,48726,869],{"class":102},[68,48728,32416],{"class":92},[68,48730,44415],{"class":85},[68,48732,48733,48735,48737,48739],{"class":70,"line":18445},[68,48734,32694],{"class":85},[68,48736,869],{"class":102},[68,48738,32416],{"class":92},[68,48740,44426],{"class":85},[68,48742,48743,48745,48747,48749],{"class":70,"line":18450},[68,48744,32694],{"class":85},[68,48746,869],{"class":102},[68,48748,32416],{"class":92},[68,48750,44437],{"class":85},[68,48752,48753,48755,48757,48759],{"class":70,"line":18464},[68,48754,32694],{"class":85},[68,48756,869],{"class":102},[68,48758,32416],{"class":92},[68,48760,44448],{"class":85},[68,48762,48763,48765],{"class":70,"line":18476},[68,48764,16349],{"class":102},[68,48766,32802],{"class":85},[68,48768,48769],{"class":70,"line":18481},[68,48770,4000],{"emptyLinePlaceholder":1679},[68,48772,48773],{"class":70,"line":18494},[68,48774,44463],{"class":74},[68,48776,48777,48779,48781,48783,48785],{"class":70,"line":18499},[68,48778,3134],{"class":102},[68,48780,32813],{"class":92},[68,48782,4548],{"class":102},[68,48784,32818],{"class":872},[68,48786,5338],{"class":85},[68,48788,48789,48791,48793,48795,48797,48799,48801,48803,48805],{"class":70,"line":18504},[68,48790,32830],{"class":85},[68,48792,869],{"class":102},[68,48794,32044],{"class":85},[68,48796,32837],{"class":872},[68,48798,3306],{"class":102},[68,48800,32842],{"class":85},[68,48802,3303],{"class":102},[68,48804,32069],{"class":872},[68,48806,1757],{"class":85},[68,48808,48809,48811,48813],{"class":70,"line":18509},[68,48810,32882],{"class":85},[68,48812,869],{"class":102},[68,48814,44504],{"class":85},[68,48816,48817,48819,48821,48823,48825,48827,48829,48831],{"class":70,"line":18522},[68,48818,32892],{"class":92},[68,48820,32895],{"class":85},[68,48822,99],{"class":92},[68,48824,2114],{"class":85},[68,48826,33094],{"class":92},[68,48828,2114],{"class":85},[68,48830,33094],{"class":92},[68,48832,32908],{"class":85},[23593,48834,48836],{"id":48835},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48838,48839],{},"计算图片的均值与方差，用于训练中归一化处理操作",[58,48841,48843],{"className":31971,"code":48842,"language":31973,"meta":63,"style":63},"# 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",[65,48844,48845,48850,48863,48868,48874,48879,48889,48893,48898,48908,48912,48917,48927,48944,48948,48953,48965,48977,49008,49017,49027,49037,49041,49046,49061,49065,49070,49075,49080,49090,49095,49120,49124,49129,49144,49148,49161,49165,49170,49175,49180,49185,49190,49200,49210,49233,49241,49249,49257,49261,49273,49277,49282,49286,49290,49297,49317,49341,49348,49362,49367,49372,49376,49390,49394,49406],{"__ignoreMap":63},[68,48846,48847],{"class":70,"line":71},[68,48848,48849],{"class":74},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[68,48851,48852,48854,48857,48860],{"class":70,"line":78},[68,48853,32330],{"class":102},[68,48855,48856],{"class":92}," PIL",[68,48858,48859],{"class":102}," import",[68,48861,48862],{"class":85}," Image\n",[68,48864,48865],{"class":70,"line":89},[68,48866,48867],{"class":74},"# os 用来处理文件夹和文件路径\n",[68,48869,48870,48872],{"class":70,"line":115},[68,48871,31985],{"class":102},[68,48873,46898],{"class":85},[68,48875,48876],{"class":70,"line":280},[68,48877,48878],{"class":74},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[68,48880,48881,48883,48885,48887],{"class":70,"line":301},[68,48882,31985],{"class":102},[68,48884,32973],{"class":85},[68,48886,32976],{"class":102},[68,48888,32979],{"class":85},[68,48890,48891],{"class":70,"line":320},[68,48892,4000],{"emptyLinePlaceholder":1679},[68,48894,48895],{"class":70,"line":2915},[68,48896,48897],{"class":74},"# 文件夹路径，包含所有图片文件\n",[68,48899,48900,48903,48905],{"class":70,"line":2921},[68,48901,48902],{"class":85},"folder_path ",[68,48904,869],{"class":102},[68,48906,48907],{"class":872}," 'data_cat_dog'\n",[68,48909,48910],{"class":70,"line":2933},[68,48911,4000],{"emptyLinePlaceholder":1679},[68,48913,48914],{"class":70,"line":3214},[68,48915,48916],{"class":74},"# 初始化累积变量\n",[68,48918,48919,48922,48924],{"class":70,"line":3219},[68,48920,48921],{"class":85},"total_pixels ",[68,48923,869],{"class":102},[68,48925,48926],{"class":92}," 0\n",[68,48928,48929,48932,48934,48937,48939,48941],{"class":70,"line":3225},[68,48930,48931],{"class":85},"sum_normalized_pixel_values ",[68,48933,869],{"class":102},[68,48935,48936],{"class":85}," np.zeros(",[68,48938,288],{"class":92},[68,48940,47401],{"class":85},[68,48942,48943],{"class":74},"# 如果是RGB图像，需要三个通道的均值和方差\n",[68,48945,48946],{"class":70,"line":3230},[68,48947,4000],{"emptyLinePlaceholder":1679},[68,48949,48950],{"class":70,"line":3244},[68,48951,48952],{"class":74},"# 遍历文件夹中的图片文件\n",[68,48954,48955,48957,48960,48962],{"class":70,"line":3249},[68,48956,4624],{"class":102},[68,48958,48959],{"class":85}," root, dirs, files ",[68,48961,27637],{"class":102},[68,48963,48964],{"class":85}," os.walk(folder_path):\n",[68,48966,48967,48969,48972,48974],{"class":70,"line":3255},[68,48968,4800],{"class":102},[68,48970,48971],{"class":85}," filename ",[68,48973,27637],{"class":102},[68,48975,48976],{"class":85}," files:\n",[68,48978,48979,48981,48984,48987,48989,48992,48994,48997,48999,49002,49005],{"class":70,"line":3276},[68,48980,4097],{"class":102},[68,48982,48983],{"class":85}," filename.endswith((",[68,48985,48986],{"class":872},"'.jpg'",[68,48988,1002],{"class":85},[68,48990,48991],{"class":872},"'.jpeg'",[68,48993,1002],{"class":85},[68,48995,48996],{"class":872},"'.png'",[68,48998,1002],{"class":85},[68,49000,49001],{"class":872},"'.bmp'",[68,49003,49004],{"class":85},")):  ",[68,49006,49007],{"class":74},"# 可根据实际情况添加其他格式\n",[68,49009,49010,49012,49014],{"class":70,"line":3281},[68,49011,47266],{"class":85},[68,49013,869],{"class":102},[68,49015,49016],{"class":85}," os.path.join(root, filename)\n",[68,49018,49019,49022,49024],{"class":70,"line":3295},[68,49020,49021],{"class":85},"            image ",[68,49023,869],{"class":102},[68,49025,49026],{"class":85}," Image.open(image_path)\n",[68,49028,49029,49032,49034],{"class":70,"line":3300},[68,49030,49031],{"class":85},"            image_array ",[68,49033,869],{"class":102},[68,49035,49036],{"class":85}," np.array(image)\n",[68,49038,49039],{"class":70,"line":3329},[68,49040,4000],{"emptyLinePlaceholder":1679},[68,49042,49043],{"class":70,"line":3334},[68,49044,49045],{"class":74},"            # 归一化像素值到0-1之间\n",[68,49047,49048,49051,49053,49056,49058],{"class":70,"line":3351},[68,49049,49050],{"class":85},"            normalized_image_array ",[68,49052,869],{"class":102},[68,49054,49055],{"class":85}," image_array ",[68,49057,2320],{"class":102},[68,49059,49060],{"class":92}," 255.0\n",[68,49062,49063],{"class":70,"line":3356},[68,49064,4000],{"emptyLinePlaceholder":1679},[68,49066,49067],{"class":70,"line":3361},[68,49068,49069],{"class":74},"            # print(image_path)\n",[68,49071,49072],{"class":70,"line":3366},[68,49073,49074],{"class":74},"            # print(normalized_image_array.shape)\n",[68,49076,49077],{"class":70,"line":3380},[68,49078,49079],{"class":74},"            # 累积归一化后的像素值和像素数量\n",[68,49081,49082,49085,49087],{"class":70,"line":3385},[68,49083,49084],{"class":85},"            total_pixels ",[68,49086,11075],{"class":102},[68,49088,49089],{"class":85}," normalized_image_array.size\n",[68,49091,49092],{"class":70,"line":4177},[68,49093,49094],{"class":74},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[68,49096,49097,49100,49102,49105,49108,49110,49112,49114,49116,49118],{"class":70,"line":4191},[68,49098,49099],{"class":85},"            sum_normalized_pixel_values ",[68,49101,11075],{"class":102},[68,49103,49104],{"class":85}," np.sum(normalized_image_array, ",[68,49106,49107],{"class":6815},"axis",[68,49109,869],{"class":102},[68,49111,997],{"class":85},[68,49113,600],{"class":92},[68,49115,1002],{"class":85},[68,49117,99],{"class":92},[68,49119,32090],{"class":85},[68,49121,49122],{"class":70,"line":4199},[68,49123,4000],{"emptyLinePlaceholder":1679},[68,49125,49126],{"class":70,"line":4204},[68,49127,49128],{"class":74},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[68,49130,49131,49134,49136,49139,49141],{"class":70,"line":4210},[68,49132,49133],{"class":85},"mean ",[68,49135,869],{"class":102},[68,49137,49138],{"class":85}," sum_normalized_pixel_values ",[68,49140,2320],{"class":102},[68,49142,49143],{"class":85}," total_pixels\n",[68,49145,49146],{"class":70,"line":4216},[68,49147,4000],{"emptyLinePlaceholder":1679},[68,49149,49150,49153,49155,49157,49159],{"class":70,"line":4221},[68,49151,49152],{"class":85},"sum_squared_diff ",[68,49154,869],{"class":102},[68,49156,48936],{"class":85},[68,49158,288],{"class":92},[68,49160,1757],{"class":85},[68,49162,49163],{"class":70,"line":9547},[68,49164,4000],{"emptyLinePlaceholder":1679},[68,49166,49167],{"class":70,"line":9571},[68,49168,49169],{"class":74},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[68,49171,49172],{"class":70,"line":9576},[68,49173,49174],{"class":74},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[68,49176,49177],{"class":70,"line":9582},[68,49178,49179],{"class":74},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[68,49181,49182],{"class":70,"line":9609},[68,49183,49184],{"class":74},"# Image.open(image_path)：打开图片\n",[68,49186,49187],{"class":70,"line":9614},[68,49188,49189],{"class":74},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[68,49191,49192,49194,49196,49198],{"class":70,"line":9620},[68,49193,4624],{"class":102},[68,49195,48959],{"class":85},[68,49197,27637],{"class":102},[68,49199,48964],{"class":85},[68,49201,49202,49204,49206,49208],{"class":70,"line":9632},[68,49203,4800],{"class":102},[68,49205,48971],{"class":85},[68,49207,27637],{"class":102},[68,49209,48976],{"class":85},[68,49211,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230],{"class":70,"line":9644},[68,49213,4097],{"class":102},[68,49215,48983],{"class":85},[68,49217,48986],{"class":872},[68,49219,1002],{"class":85},[68,49221,48991],{"class":872},[68,49223,1002],{"class":85},[68,49225,48996],{"class":872},[68,49227,1002],{"class":85},[68,49229,49001],{"class":872},[68,49231,49232],{"class":85},")):\n",[68,49234,49235,49237,49239],{"class":70,"line":9656},[68,49236,47266],{"class":85},[68,49238,869],{"class":102},[68,49240,49016],{"class":85},[68,49242,49243,49245,49247],{"class":70,"line":11314},[68,49244,49021],{"class":85},[68,49246,869],{"class":102},[68,49248,49026],{"class":85},[68,49250,49251,49253,49255],{"class":70,"line":11339},[68,49252,49031],{"class":85},[68,49254,869],{"class":102},[68,49256,49036],{"class":85},[68,49258,49259],{"class":70,"line":11362},[68,49260,49045],{"class":74},[68,49262,49263,49265,49267,49269,49271],{"class":70,"line":11386},[68,49264,49050],{"class":85},[68,49266,869],{"class":102},[68,49268,49055],{"class":85},[68,49270,2320],{"class":102},[68,49272,49060],{"class":92},[68,49274,49275],{"class":70,"line":11391},[68,49276,49074],{"class":74},[68,49278,49279],{"class":70,"line":11396},[68,49280,49281],{"class":74},"            # print(mean.shape)\n",[68,49283,49284],{"class":70,"line":11401},[68,49285,49069],{"class":74},[68,49287,49288],{"class":70,"line":11410},[68,49289,4000],{"emptyLinePlaceholder":1679},[68,49291,49292,49295],{"class":70,"line":11415},[68,49293,49294],{"class":102},"            try",[68,49296,5338],{"class":85},[68,49298,49299,49302,49304,49307,49309,49312,49314],{"class":70,"line":11421},[68,49300,49301],{"class":85},"                diff ",[68,49303,869],{"class":102},[68,49305,49306],{"class":85}," (normalized_image_array ",[68,49308,2268],{"class":102},[68,49310,49311],{"class":85}," mean) ",[68,49313,12259],{"class":102},[68,49315,49316],{"class":92}," 2\n",[68,49318,49319,49322,49324,49327,49329,49331,49333,49335,49337,49339],{"class":70,"line":11442},[68,49320,49321],{"class":85},"                sum_squared_diff ",[68,49323,11075],{"class":102},[68,49325,49326],{"class":85}," np.sum(diff, ",[68,49328,49107],{"class":6815},[68,49330,869],{"class":102},[68,49332,997],{"class":85},[68,49334,600],{"class":92},[68,49336,1002],{"class":85},[68,49338,99],{"class":92},[68,49340,32090],{"class":85},[68,49342,49343,49346],{"class":70,"line":11448},[68,49344,49345],{"class":102},"            except",[68,49347,5338],{"class":85},[68,49349,49350,49353,49355,49357,49360],{"class":70,"line":11462},[68,49351,49352],{"class":92},"                print",[68,49354,997],{"class":85},[68,49356,1801],{"class":102},[68,49358,49359],{"class":872},"\"捕获到自定义异常\"",[68,49361,1757],{"class":85},[68,49363,49364],{"class":70,"line":11468},[68,49365,49366],{"class":74},"            # diff = (normalized_image_array - mean) ** 2\n",[68,49368,49369],{"class":70,"line":11495},[68,49370,49371],{"class":74},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[68,49373,49374],{"class":70,"line":11504},[68,49375,4000],{"emptyLinePlaceholder":1679},[68,49377,49378,49381,49383,49386,49388],{"class":70,"line":11510},[68,49379,49380],{"class":85},"variance ",[68,49382,869],{"class":102},[68,49384,49385],{"class":85}," sum_squared_diff ",[68,49387,2320],{"class":102},[68,49389,49143],{"class":85},[68,49391,49392],{"class":70,"line":11518},[68,49393,4000],{"emptyLinePlaceholder":1679},[68,49395,49396,49398,49400,49403],{"class":70,"line":11523},[68,49397,32008],{"class":92},[68,49399,997],{"class":85},[68,49401,49402],{"class":872},"\"Mean:\"",[68,49404,49405],{"class":85},", mean)\n",[68,49407,49408,49410,49412,49415],{"class":70,"line":18199},[68,49409,32008],{"class":92},[68,49411,997],{"class":85},[68,49413,49414],{"class":872},"\"Variance:\"",[68,49416,49417],{"class":85},", variance)\n",[58,49419,49421],{"className":31971,"code":49420,"language":31973,"meta":63,"style":63},"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",[65,49422,49423,49429,49435,49445,49451,49461,49475,49485,49495,49505,49509,49519,49529,49533,49537,49545,49550,49555,49574,49578,49583,49588,49593,49598,49639,49644,49654,49659,49672,49677,49682,49687,49692,49697,49701,49706,49711,49733,49737,49769,49783,49793,49803,49807,49817,49831,49841,49851,49861,49867,49871,49875,49879,49883,49887,49895,49915,49919,49923,49927,49931,49947,49951,49955,49963,49967,49971,49979,49983,49987,49991,49999,50003,50007,50011,50019,50023,50031,50035,50043,50047,50055,50059,50067,50071,50075,50083,50087,50091,50103,50127,50141,50145,50149,50153,50161,50165,50173,50177,50185,50189,50197,50201,50209,50213,50221,50225,50237,50241,50249,50253,50261,50265,50269,50273,50277,50285,50289,50305,50309,50317,50321,50325,50329,50333,50337,50341,50345,50361,50365,50377,50381,50393,50397,50409,50413,50421,50425,50433,50437,50441,50445,50451,50455,50463,50467,50483,50487,50495,50499,50515,50527,50531,50543,50547,50551,50559,50563,50567,50575,50579,50587,50591,50599,50603,50607,50649,50691,50695,50699,50715,50719,50735,50739,50743,50751,50755,50759,50771,50809,50813,50817,50825,50829,50843,50853,50859,50865,50871,50877,50881,50885,50891,50895,50899,50907,50911,50929,50933,50937,50941,50957,50961,50965,50969,50973,50977,50997,51017,51021,51025,51029,51037,51045,51049,51065,51085,51105,51109,51114,51123,51132,51137,51142,51147,51160,51165,51174,51183,51200],{"__ignoreMap":63},[68,49424,49425,49427],{"class":70,"line":71},[68,49426,31985],{"class":102},[68,49428,33415],{"class":85},[68,49430,49431,49433],{"class":70,"line":78},[68,49432,31985],{"class":102},[68,49434,33422],{"class":85},[68,49436,49437,49439,49441,49443],{"class":70,"line":89},[68,49438,31985],{"class":102},[68,49440,33433],{"class":85},[68,49442,32976],{"class":102},[68,49444,33438],{"class":85},[68,49446,49447,49449],{"class":70,"line":115},[68,49448,31985],{"class":102},[68,49450,31988],{"class":85},[68,49452,49453,49455,49457,49459],{"class":70,"line":280},[68,49454,32330],{"class":102},[68,49456,33008],{"class":85},[68,49458,31985],{"class":102},[68,49460,33455],{"class":85},[68,49462,49463,49465,49467,49469,49472],{"class":70,"line":301},[68,49464,32330],{"class":102},[68,49466,32961],{"class":85},[68,49468,31985],{"class":102},[68,49470,49471],{"class":85}," ImageFolder ",[68,49473,49474],{"class":74},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[68,49476,49477,49479,49481,49483],{"class":70,"line":320},[68,49478,32330],{"class":102},[68,49480,32991],{"class":85},[68,49482,31985],{"class":102},[68,49484,32996],{"class":85},[68,49486,49487,49489,49491,49493],{"class":70,"line":2915},[68,49488,31985],{"class":102},[68,49490,33008],{"class":85},[68,49492,32976],{"class":102},[68,49494,33013],{"class":85},[68,49496,49497,49499,49501,49503],{"class":70,"line":2921},[68,49498,31985],{"class":102},[68,49500,33025],{"class":85},[68,49502,32976],{"class":102},[68,49504,33030],{"class":85},[68,49506,49507],{"class":70,"line":2933},[68,49508,33500],{"class":74},[68,49510,49511,49513,49515,49517],{"class":70,"line":3214},[68,49512,32330],{"class":102},[68,49514,33507],{"class":85},[68,49516,31985],{"class":102},[68,49518,44624],{"class":85},[68,49520,49521,49523,49525,49527],{"class":70,"line":3219},[68,49522,32330],{"class":102},[68,49524,32333],{"class":85},[68,49526,31985],{"class":102},[68,49528,32338],{"class":85},[68,49530,49531],{"class":70,"line":3225},[68,49532,4000],{"emptyLinePlaceholder":1679},[68,49534,49535],{"class":70,"line":3230},[68,49536,33535],{"class":74},[68,49538,49539,49541,49543],{"class":70,"line":3244},[68,49540,33540],{"class":102},[68,49542,33543],{"class":587},[68,49544,33546],{"class":85},[68,49546,49547],{"class":70,"line":3249},[68,49548,49549],{"class":74},"    # 导入自己的数据集，并进行数据处理\n",[68,49551,49552],{"class":70,"line":3255},[68,49553,49554],{"class":74},"    # 定义数据集的路径\n",[68,49556,49557,49560,49562,49564,49566,49568,49572],{"class":70,"line":3276},[68,49558,49559],{"class":92},"    ROOT_PATH",[68,49561,869],{"class":102},[68,49563,2406],{"class":102},[68,49565,1987],{"class":872},[68,49567,2294],{"class":92},[68,49569,49571],{"class":49570},"sA_wV","\u002Fdata\u002Ftrain",[68,49573,26727],{"class":872},[68,49575,49576],{"class":70,"line":3281},[68,49577,4000],{"emptyLinePlaceholder":1679},[68,49579,49580],{"class":70,"line":3295},[68,49581,49582],{"class":74},"    # 定义归一化方法\n",[68,49584,49585],{"class":70,"line":3300},[68,49586,49587],{"class":74},"    # 这里需要先计算一下数据集的均值和方差\n",[68,49589,49590],{"class":70,"line":3329},[68,49591,49592],{"class":74},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[68,49594,49595],{"class":70,"line":3334},[68,49596,49597],{"class":74},"    # 第一个参数是均值，第二个参数是方差\n",[68,49599,49600,49603,49605,49608,49611,49613,49616,49618,49621,49624,49627,49629,49632,49634,49637],{"class":70,"line":3351},[68,49601,49602],{"class":85},"    normalize",[68,49604,869],{"class":102},[68,49606,49607],{"class":85},"transforms.Normalize([",[68,49609,49610],{"class":92},"0.162",[68,49612,2114],{"class":85},[68,49614,49615],{"class":92},"0.151",[68,49617,2114],{"class":85},[68,49619,49620],{"class":92},"0.138",[68,49622,49623],{"class":85},"],[",[68,49625,49626],{"class":92},"0.058",[68,49628,2114],{"class":85},[68,49630,49631],{"class":92},"0.052",[68,49633,2114],{"class":85},[68,49635,49636],{"class":92},"0.048",[68,49638,6256],{"class":85},[68,49640,49641],{"class":70,"line":3356},[68,49642,49643],{"class":74},"    # 定义数据集处理方法变量\n",[68,49645,49646,49649,49651],{"class":70,"line":3361},[68,49647,49648],{"class":85},"    train_transform",[68,49650,869],{"class":102},[68,49652,49653],{"class":85},"transforms.Compose([\n",[68,49655,49656],{"class":70,"line":3366},[68,49657,49658],{"class":74},"        # 调整图像大小为224*224\n",[68,49660,49661,49664,49666,49668,49670],{"class":70,"line":3380},[68,49662,49663],{"class":85},"        transforms.Resize((",[68,49665,33094],{"class":92},[68,49667,2114],{"class":85},[68,49669,33094],{"class":92},[68,49671,44215],{"class":85},[68,49673,49674],{"class":70,"line":3385},[68,49675,49676],{"class":74},"        # 将图像转换为张量\n",[68,49678,49679],{"class":70,"line":4177},[68,49680,49681],{"class":85},"        transforms.ToTensor(),\n",[68,49683,49684],{"class":70,"line":4191},[68,49685,49686],{"class":85},"        normalize])\n",[68,49688,49689],{"class":70,"line":4199},[68,49690,49691],{"class":74},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[68,49693,49694],{"class":70,"line":4204},[68,49695,49696],{"class":74},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[68,49698,49699],{"class":70,"line":4210},[68,49700,4000],{"emptyLinePlaceholder":1679},[68,49702,49703],{"class":70,"line":4216},[68,49704,49705],{"class":74},"    # 加载数据集\n",[68,49707,49708],{"class":70,"line":4221},[68,49709,49710],{"class":74},"    # 传入数据集路径与处理方法\n",[68,49712,49713,49715,49717,49720,49723,49725,49728,49730],{"class":70,"line":9547},[68,49714,33551],{"class":85},[68,49716,869],{"class":102},[68,49718,49719],{"class":85},"ImageFolder(",[68,49721,49722],{"class":92},"ROOT_PATH",[68,49724,2114],{"class":85},[68,49726,49727],{"class":6815},"transform",[68,49729,869],{"class":102},[68,49731,49732],{"class":85},"train_transform)\n",[68,49734,49735],{"class":70,"line":9571},[68,49736,4000],{"emptyLinePlaceholder":1679},[68,49738,49739,49741,49743,49745,49747,49749,49751,49753,49755,49757,49759,49761,49763,49765,49767],{"class":70,"line":9576},[68,49740,33603],{"class":85},[68,49742,869],{"class":102},[68,49744,33608],{"class":85},[68,49746,33611],{"class":92},[68,49748,997],{"class":85},[68,49750,33616],{"class":92},[68,49752,2191],{"class":102},[68,49754,8957],{"class":92},[68,49756,33623],{"class":85},[68,49758,33611],{"class":92},[68,49760,997],{"class":85},[68,49762,33630],{"class":92},[68,49764,2191],{"class":102},[68,49766,8957],{"class":92},[68,49768,33637],{"class":85},[68,49770,49771,49773,49775,49777,49779,49781],{"class":70,"line":9582},[68,49772,33642],{"class":85},[68,49774,869],{"class":102},[68,49776,33647],{"class":85},[68,49778,33130],{"class":6815},[68,49780,869],{"class":102},[68,49782,33135],{"class":85},[68,49784,49785,49787,49789,49791],{"class":70,"line":9609},[68,49786,33658],{"class":6815},[68,49788,869],{"class":102},[68,49790,1934],{"class":92},[68,49792,33059],{"class":85},[68,49794,49795,49797,49799,49801],{"class":70,"line":9614},[68,49796,33670],{"class":6815},[68,49798,869],{"class":102},[68,49800,33069],{"class":92},[68,49802,33059],{"class":85},[68,49804,49805],{"class":70,"line":9620},[68,49806,33681],{"class":74},[68,49808,49809,49811,49813,49815],{"class":70,"line":9632},[68,49810,33686],{"class":6815},[68,49812,869],{"class":102},[68,49814,2131],{"class":92},[68,49816,1757],{"class":85},[68,49818,49819,49821,49823,49825,49827,49829],{"class":70,"line":9644},[68,49820,33697],{"class":85},[68,49822,869],{"class":102},[68,49824,33127],{"class":85},[68,49826,33130],{"class":6815},[68,49828,869],{"class":102},[68,49830,33708],{"class":85},[68,49832,49833,49835,49837,49839],{"class":70,"line":9656},[68,49834,33713],{"class":6815},[68,49836,869],{"class":102},[68,49838,1934],{"class":92},[68,49840,33059],{"class":85},[68,49842,49843,49845,49847,49849],{"class":70,"line":11314},[68,49844,33724],{"class":6815},[68,49846,869],{"class":102},[68,49848,33069],{"class":92},[68,49850,33059],{"class":85},[68,49852,49853,49855,49857,49859],{"class":70,"line":11339},[68,49854,33735],{"class":6815},[68,49856,869],{"class":102},[68,49858,2131],{"class":92},[68,49860,1757],{"class":85},[68,49862,49863,49865],{"class":70,"line":11362},[68,49864,5689],{"class":102},[68,49866,33748],{"class":85},[68,49868,49869],{"class":70,"line":11386},[68,49870,4000],{"emptyLinePlaceholder":1679},[68,49872,49873],{"class":70,"line":11391},[68,49874,33757],{"class":74},[68,49876,49877],{"class":70,"line":11396},[68,49878,33762],{"class":74},[68,49880,49881],{"class":70,"line":11401},[68,49882,4000],{"emptyLinePlaceholder":1679},[68,49884,49885],{"class":70,"line":11410},[68,49886,33771],{"class":74},[68,49888,49889,49891,49893],{"class":70,"line":11415},[68,49890,33540],{"class":102},[68,49892,33778],{"class":587},[68,49894,33781],{"class":85},[68,49896,49897,49899,49901,49903,49905,49907,49909,49911,49913],{"class":70,"line":11421},[68,49898,32830],{"class":85},[68,49900,869],{"class":102},[68,49902,32044],{"class":85},[68,49904,32837],{"class":872},[68,49906,3306],{"class":102},[68,49908,32842],{"class":85},[68,49910,3303],{"class":102},[68,49912,33800],{"class":872},[68,49914,1757],{"class":85},[68,49916,49917],{"class":70,"line":11442},[68,49918,4000],{"emptyLinePlaceholder":1679},[68,49920,49921],{"class":70,"line":11448},[68,49922,33815],{"class":74},[68,49924,49925],{"class":70,"line":11462},[68,49926,33820],{"class":74},[68,49928,49929],{"class":70,"line":11468},[68,49930,33825],{"class":74},[68,49932,49933,49935,49937,49939,49941,49943,49945],{"class":70,"line":11495},[68,49934,33830],{"class":85},[68,49936,869],{"class":102},[68,49938,33835],{"class":85},[68,49940,33838],{"class":6815},[68,49942,869],{"class":102},[68,49944,33843],{"class":92},[68,49946,1757],{"class":85},[68,49948,49949],{"class":70,"line":11504},[68,49950,4000],{"emptyLinePlaceholder":1679},[68,49952,49953],{"class":70,"line":11510},[68,49954,33854],{"class":74},[68,49956,49957,49959,49961],{"class":70,"line":11518},[68,49958,33859],{"class":85},[68,49960,869],{"class":102},[68,49962,33864],{"class":85},[68,49964,49965],{"class":70,"line":11523},[68,49966,4000],{"emptyLinePlaceholder":1679},[68,49968,49969],{"class":70,"line":18199},[68,49970,33873],{"class":74},[68,49972,49973,49975,49977],{"class":70,"line":18205},[68,49974,32882],{"class":85},[68,49976,869],{"class":102},[68,49978,33882],{"class":85},[68,49980,49981],{"class":70,"line":18228},[68,49982,33887],{"class":74},[68,49984,49985],{"class":70,"line":18234},[68,49986,33892],{"class":74},[68,49988,49989],{"class":70,"line":18257},[68,49990,33897],{"class":74},[68,49992,49993,49995,49997],{"class":70,"line":18271},[68,49994,33902],{"class":85},[68,49996,869],{"class":102},[68,49998,33907],{"class":85},[68,50000,50001],{"class":70,"line":18291},[68,50002,4000],{"emptyLinePlaceholder":1679},[68,50004,50005],{"class":70,"line":18297},[68,50006,33920],{"class":74},[68,50008,50009],{"class":70,"line":18308},[68,50010,33925],{"class":74},[68,50012,50013,50015,50017],{"class":70,"line":18331},[68,50014,33930],{"class":85},[68,50016,869],{"class":102},[68,50018,33935],{"class":92},[68,50020,50021],{"class":70,"line":18353},[68,50022,33940],{"class":74},[68,50024,50025,50027,50029],{"class":70,"line":18358},[68,50026,33945],{"class":85},[68,50028,869],{"class":102},[68,50030,33950],{"class":85},[68,50032,50033],{"class":70,"line":18364},[68,50034,33955],{"class":74},[68,50036,50037,50039,50041],{"class":70,"line":18378},[68,50038,33960],{"class":85},[68,50040,869],{"class":102},[68,50042,33950],{"class":85},[68,50044,50045],{"class":70,"line":18391},[68,50046,33969],{"class":74},[68,50048,50049,50051,50053],{"class":70,"line":18396},[68,50050,33974],{"class":85},[68,50052,869],{"class":102},[68,50054,33950],{"class":85},[68,50056,50057],{"class":70,"line":18410},[68,50058,33983],{"class":74},[68,50060,50061,50063,50065],{"class":70,"line":18415},[68,50062,33988],{"class":85},[68,50064,869],{"class":102},[68,50066,33950],{"class":85},[68,50068,50069],{"class":70,"line":18421},[68,50070,4000],{"emptyLinePlaceholder":1679},[68,50072,50073],{"class":70,"line":18426},[68,50074,34001],{"class":74},[68,50076,50077,50079,50081],{"class":70,"line":18440},[68,50078,34006],{"class":85},[68,50080,869],{"class":102},[68,50082,34011],{"class":85},[68,50084,50085],{"class":70,"line":18445},[68,50086,4000],{"emptyLinePlaceholder":1679},[68,50088,50089],{"class":70,"line":18450},[68,50090,34024],{"class":74},[68,50092,50093,50095,50097,50099,50101],{"class":70,"line":18464},[68,50094,4800],{"class":102},[68,50096,34031],{"class":85},[68,50098,27637],{"class":102},[68,50100,34036],{"class":92},[68,50102,34039],{"class":85},[68,50104,50105,50107,50109,50111,50113,50115,50117,50119,50121,50123,50125],{"class":70,"line":18476},[68,50106,34044],{"class":92},[68,50108,997],{"class":85},[68,50110,34049],{"class":872},[68,50112,34052],{"class":92},[68,50114,2320],{"class":872},[68,50116,34052],{"class":92},[68,50118,1987],{"class":872},[68,50120,34061],{"class":85},[68,50122,2268],{"class":102},[68,50124,99],{"class":92},[68,50126,32090],{"class":85},[68,50128,50129,50131,50133,50135,50137,50139],{"class":70,"line":18481},[68,50130,34044],{"class":92},[68,50132,997],{"class":85},[68,50134,34076],{"class":872},[68,50136,2191],{"class":102},[68,50138,2182],{"class":92},[68,50140,1757],{"class":85},[68,50142,50143],{"class":70,"line":18494},[68,50144,4000],{"emptyLinePlaceholder":1679},[68,50146,50147],{"class":70,"line":18499},[68,50148,34091],{"class":74},[68,50150,50151],{"class":70,"line":18504},[68,50152,34096],{"class":74},[68,50154,50155,50157,50159],{"class":70,"line":18509},[68,50156,34101],{"class":85},[68,50158,869],{"class":102},[68,50160,33935],{"class":92},[68,50162,50163],{"class":70,"line":18522},[68,50164,34110],{"class":74},[68,50166,50167,50169,50171],{"class":70,"line":18527},[68,50168,34115],{"class":85},[68,50170,869],{"class":102},[68,50172,4684],{"class":92},[68,50174,50175],{"class":70,"line":34226},[68,50176,34124],{"class":74},[68,50178,50179,50181,50183],{"class":70,"line":34232},[68,50180,34129],{"class":85},[68,50182,869],{"class":102},[68,50184,33935],{"class":92},[68,50186,50187],{"class":70,"line":34238},[68,50188,34138],{"class":74},[68,50190,50191,50193,50195],{"class":70,"line":34244},[68,50192,34143],{"class":85},[68,50194,869],{"class":102},[68,50196,4684],{"class":92},[68,50198,50199],{"class":70,"line":34250},[68,50200,34152],{"class":74},[68,50202,50203,50205,50207],{"class":70,"line":34261},[68,50204,34157],{"class":85},[68,50206,869],{"class":102},[68,50208,4684],{"class":92},[68,50210,50211],{"class":70,"line":34267},[68,50212,34166],{"class":74},[68,50214,50215,50217,50219],{"class":70,"line":34287},[68,50216,34171],{"class":85},[68,50218,869],{"class":102},[68,50220,4684],{"class":92},[68,50222,50223],{"class":70,"line":34293},[68,50224,34180],{"class":74},[68,50226,50227,50229,50231,50233,50235],{"class":70,"line":34304},[68,50228,5002],{"class":102},[68,50230,33194],{"class":85},[68,50232,27637],{"class":102},[68,50234,33199],{"class":92},[68,50236,34193],{"class":85},[68,50238,50239],{"class":70,"line":34310},[68,50240,34198],{"class":74},[68,50242,50243,50245,50247],{"class":70,"line":34316},[68,50244,34203],{"class":85},[68,50246,869],{"class":102},[68,50248,34208],{"class":85},[68,50250,50251],{"class":70,"line":34322},[68,50252,34213],{"class":74},[68,50254,50255,50257,50259],{"class":70,"line":34328},[68,50256,34218],{"class":85},[68,50258,869],{"class":102},[68,50260,34223],{"class":85},[68,50262,50263],{"class":70,"line":34334},[68,50264,34229],{"class":74},[68,50266,50267],{"class":70,"line":34340},[68,50268,34235],{"class":85},[68,50270,50271],{"class":70,"line":34346},[68,50272,34241],{"class":74},[68,50274,50275],{"class":70,"line":34366},[68,50276,34247],{"class":74},[68,50278,50279,50281,50283],{"class":70,"line":34372},[68,50280,34253],{"class":85},[68,50282,869],{"class":102},[68,50284,34258],{"class":85},[68,50286,50287],{"class":70,"line":34388},[68,50288,34264],{"class":74},[68,50290,50291,50293,50295,50297,50299,50301,50303],{"class":70,"line":34394},[68,50292,34270],{"class":85},[68,50294,869],{"class":102},[68,50296,34275],{"class":85},[68,50298,34278],{"class":6815},[68,50300,869],{"class":102},[68,50302,99],{"class":92},[68,50304,1757],{"class":85},[68,50306,50307],{"class":70,"line":34408},[68,50308,34290],{"class":74},[68,50310,50311,50313,50315],{"class":70,"line":34414},[68,50312,34296],{"class":85},[68,50314,869],{"class":102},[68,50316,34301],{"class":85},[68,50318,50319],{"class":70,"line":34429},[68,50320,34307],{"class":74},[68,50322,50323],{"class":70,"line":34435},[68,50324,34313],{"class":85},[68,50326,50327],{"class":70,"line":34444},[68,50328,34319],{"class":74},[68,50330,50331],{"class":70,"line":34450},[68,50332,34325],{"class":85},[68,50334,50335],{"class":70,"line":34459},[68,50336,34331],{"class":74},[68,50338,50339],{"class":70,"line":34465},[68,50340,34337],{"class":85},[68,50342,50343],{"class":70,"line":34471},[68,50344,34343],{"class":74},[68,50346,50347,50349,50351,50353,50355,50357,50359],{"class":70,"line":34480},[68,50348,34349],{"class":85},[68,50350,11075],{"class":102},[68,50352,34354],{"class":85},[68,50354,2191],{"class":102},[68,50356,34359],{"class":85},[68,50358,600],{"class":92},[68,50360,1757],{"class":85},[68,50362,50363],{"class":70,"line":34486},[68,50364,34369],{"class":74},[68,50366,50367,50369,50371,50373,50375],{"class":70,"line":34497},[68,50368,34375],{"class":85},[68,50370,11075],{"class":102},[68,50372,34380],{"class":85},[68,50374,4548],{"class":102},[68,50376,34385],{"class":85},[68,50378,50379],{"class":70,"line":34503},[68,50380,34391],{"class":74},[68,50382,50383,50385,50387,50389,50391],{"class":70,"line":34522},[68,50384,34397],{"class":85},[68,50386,11075],{"class":102},[68,50388,34359],{"class":85},[68,50390,600],{"class":92},[68,50392,1757],{"class":85},[68,50394,50395],{"class":70,"line":34528},[68,50396,34411],{"class":74},[68,50398,50399,50401,50403,50405,50407],{"class":70,"line":34539},[68,50400,5002],{"class":102},[68,50402,34419],{"class":85},[68,50404,27637],{"class":102},[68,50406,33199],{"class":92},[68,50408,34426],{"class":85},[68,50410,50411],{"class":70,"line":34545},[68,50412,34432],{"class":74},[68,50414,50415,50417,50419],{"class":70,"line":34565},[68,50416,34203],{"class":85},[68,50418,869],{"class":102},[68,50420,34208],{"class":85},[68,50422,50423],{"class":70,"line":34581},[68,50424,34447],{"class":74},[68,50426,50427,50429,50431],{"class":70,"line":34587},[68,50428,34218],{"class":85},[68,50430,869],{"class":102},[68,50432,34223],{"class":85},[68,50434,50435],{"class":70,"line":34601},[68,50436,34462],{"class":74},[68,50438,50439],{"class":70,"line":34607},[68,50440,34468],{"class":85},[68,50442,50443],{"class":70,"line":34613},[68,50444,37949],{"class":74},[68,50446,50447,50449],{"class":70,"line":34624},[68,50448,34474],{"class":102},[68,50450,34477],{"class":85},[68,50452,50453],{"class":70,"line":34630},[68,50454,34483],{"class":74},[68,50456,50457,50459,50461],{"class":70,"line":34636},[68,50458,37964],{"class":85},[68,50460,869],{"class":102},[68,50462,34258],{"class":85},[68,50464,50465],{"class":70,"line":34646},[68,50466,34500],{"class":74},[68,50468,50469,50471,50473,50475,50477,50479,50481],{"class":70,"line":34652},[68,50470,37977],{"class":85},[68,50472,869],{"class":102},[68,50474,34275],{"class":85},[68,50476,34278],{"class":6815},[68,50478,869],{"class":102},[68,50480,99],{"class":92},[68,50482,1757],{"class":85},[68,50484,50485],{"class":70,"line":34663},[68,50486,34525],{"class":74},[68,50488,50489,50491,50493],{"class":70,"line":34669},[68,50490,37998],{"class":85},[68,50492,869],{"class":102},[68,50494,34301],{"class":85},[68,50496,50497],{"class":70,"line":34679},[68,50498,34542],{"class":74},[68,50500,50501,50503,50505,50507,50509,50511,50513],{"class":70,"line":34684},[68,50502,38011],{"class":85},[68,50504,11075],{"class":102},[68,50506,38016],{"class":85},[68,50508,2191],{"class":102},[68,50510,34359],{"class":85},[68,50512,600],{"class":92},[68,50514,1757],{"class":85},[68,50516,50517,50519,50521,50523,50525],{"class":70,"line":34690},[68,50518,38029],{"class":85},[68,50520,11075],{"class":102},[68,50522,34380],{"class":85},[68,50524,4548],{"class":102},[68,50526,34385],{"class":85},[68,50528,50529],{"class":70,"line":34739},[68,50530,38042],{"class":74},[68,50532,50533,50535,50537,50539,50541],{"class":70,"line":34786},[68,50534,38047],{"class":85},[68,50536,11075],{"class":102},[68,50538,34359],{"class":85},[68,50540,600],{"class":92},[68,50542,1757],{"class":85},[68,50544,50545],{"class":70,"line":34791},[68,50546,34604],{"class":74},[68,50548,50549],{"class":70,"line":34797},[68,50550,34610],{"class":74},[68,50552,50553,50555,50557],{"class":70,"line":34816},[68,50554,34616],{"class":85},[68,50556,2320],{"class":102},[68,50558,34621],{"class":85},[68,50560,50561],{"class":70,"line":34822},[68,50562,34627],{"class":74},[68,50564,50565],{"class":70,"line":34842},[68,50566,34633],{"class":74},[68,50568,50569,50571,50573],{"class":70,"line":34848},[68,50570,34639],{"class":85},[68,50572,2320],{"class":102},[68,50574,34621],{"class":85},[68,50576,50577],{"class":70,"line":34854},[68,50578,34649],{"class":74},[68,50580,50581,50583,50585],{"class":70,"line":34864},[68,50582,34655],{"class":85},[68,50584,2320],{"class":102},[68,50586,34660],{"class":85},[68,50588,50589],{"class":70,"line":34869},[68,50590,34666],{"class":74},[68,50592,50593,50595,50597],{"class":70,"line":34875},[68,50594,34672],{"class":85},[68,50596,2320],{"class":102},[68,50598,34660],{"class":85},[68,50600,50601],{"class":70,"line":34891},[68,50602,4000],{"emptyLinePlaceholder":1679},[68,50604,50605],{"class":70,"line":34936},[68,50606,34687],{"class":74},[68,50608,50609,50611,50613,50615,50617,50619,50621,50623,50625,50627,50629,50631,50633,50635,50637,50639,50641,50643,50645,50647],{"class":70,"line":34942},[68,50610,34044],{"class":92},[68,50612,997],{"class":85},[68,50614,5191],{"class":872},[68,50616,34052],{"class":92},[68,50618,34701],{"class":872},[68,50620,2632],{"class":92},[68,50622,34706],{"class":102},[68,50624,2681],{"class":92},[68,50626,34711],{"class":872},[68,50628,2632],{"class":92},[68,50630,34706],{"class":102},[68,50632,2681],{"class":92},[68,50634,5191],{"class":872},[68,50636,34722],{"class":85},[68,50638,2268],{"class":102},[68,50640,99],{"class":92},[68,50642,34729],{"class":85},[68,50644,2268],{"class":102},[68,50646,99],{"class":92},[68,50648,34736],{"class":85},[68,50650,50651,50653,50655,50657,50659,50661,50663,50665,50667,50669,50671,50673,50675,50677,50679,50681,50683,50685,50687,50689],{"class":70,"line":34948},[68,50652,34044],{"class":92},[68,50654,997],{"class":85},[68,50656,5191],{"class":872},[68,50658,34052],{"class":92},[68,50660,34750],{"class":872},[68,50662,2632],{"class":92},[68,50664,34706],{"class":102},[68,50666,2681],{"class":92},[68,50668,34759],{"class":872},[68,50670,2632],{"class":92},[68,50672,34706],{"class":102},[68,50674,2681],{"class":92},[68,50676,5191],{"class":872},[68,50678,34770],{"class":85},[68,50680,2268],{"class":102},[68,50682,99],{"class":92},[68,50684,34777],{"class":85},[68,50686,2268],{"class":102},[68,50688,99],{"class":92},[68,50690,34736],{"class":85},[68,50692,50693],{"class":70,"line":34954},[68,50694,4000],{"emptyLinePlaceholder":1679},[68,50696,50697],{"class":70,"line":34965},[68,50698,34794],{"class":74},[68,50700,50701,50703,50705,50707,50709,50711,50713],{"class":70,"line":34971},[68,50702,4097],{"class":102},[68,50704,34802],{"class":85},[68,50706,2268],{"class":102},[68,50708,99],{"class":92},[68,50710,2675],{"class":85},[68,50712,2695],{"class":102},[68,50714,34813],{"class":85},[68,50716,50717],{"class":70,"line":34977},[68,50718,34819],{"class":74},[68,50720,50721,50723,50725,50727,50729,50731,50733],{"class":70,"line":34983},[68,50722,34825],{"class":85},[68,50724,1790],{"class":92},[68,50726,869],{"class":102},[68,50728,34832],{"class":85},[68,50730,2268],{"class":102},[68,50732,99],{"class":92},[68,50734,34839],{"class":85},[68,50736,50737],{"class":70,"line":35001},[68,50738,34845],{"class":74},[68,50740,50741],{"class":70,"line":35015},[68,50742,34851],{"class":74},[68,50744,50745,50747,50749],{"class":70,"line":35024},[68,50746,34857],{"class":85},[68,50748,869],{"class":102},[68,50750,33907],{"class":85},[68,50752,50753],{"class":70,"line":35033},[68,50754,4000],{"emptyLinePlaceholder":1679},[68,50756,50757],{"class":70,"line":35042},[68,50758,34872],{"class":74},[68,50760,50761,50763,50765,50767,50769],{"class":70,"line":35051},[68,50762,34878],{"class":85},[68,50764,869],{"class":102},[68,50766,34883],{"class":85},[68,50768,2268],{"class":102},[68,50770,34888],{"class":85},[68,50772,50773,50775,50777,50779,50781,50783,50785,50787,50789,50791,50793,50795,50797,50799,50801,50803,50805,50807],{"class":70,"line":35057},[68,50774,34044],{"class":92},[68,50776,997],{"class":85},[68,50778,34898],{"class":872},[68,50780,2632],{"class":92},[68,50782,34903],{"class":102},[68,50784,2681],{"class":92},[68,50786,2280],{"class":872},[68,50788,2632],{"class":92},[68,50790,34903],{"class":102},[68,50792,2681],{"class":92},[68,50794,34916],{"class":872},[68,50796,34919],{"class":85},[68,50798,34922],{"class":102},[68,50800,2643],{"class":92},[68,50802,34927],{"class":85},[68,50804,2064],{"class":102},[68,50806,2643],{"class":92},[68,50808,32090],{"class":85},[68,50810,50811],{"class":70,"line":35063},[68,50812,38326],{"class":74},[68,50814,50815],{"class":70,"line":35071},[68,50816,38331],{"class":74},[68,50818,50819,50821,50823],{"class":70,"line":35076},[68,50820,38336],{"class":85},[68,50822,34960],{"class":872},[68,50824,1757],{"class":85},[68,50826,50827],{"class":70,"line":35082},[68,50828,34980],{"class":74},[68,50830,50831,50833,50835,50837,50839,50841],{"class":70,"line":35093},[68,50832,34986],{"class":85},[68,50834,869],{"class":102},[68,50836,34991],{"class":85},[68,50838,34994],{"class":6815},[68,50840,869],{"class":102},[68,50842,3149],{"class":85},[68,50844,50845,50847,50849,50851],{"class":70,"line":35099},[68,50846,35004],{"class":872},[68,50848,2595],{"class":85},[68,50850,35009],{"class":92},[68,50852,35012],{"class":85},[68,50854,50855,50857],{"class":70,"line":35119},[68,50856,35018],{"class":872},[68,50858,35021],{"class":85},[68,50860,50861,50863],{"class":70,"line":35125},[68,50862,35027],{"class":872},[68,50864,35030],{"class":85},[68,50866,50867,50869],{"class":70,"line":35131},[68,50868,35036],{"class":872},[68,50870,35039],{"class":85},[68,50872,50873,50875],{"class":70,"line":35137},[68,50874,35045],{"class":872},[68,50876,35048],{"class":85},[68,50878,50879],{"class":70,"line":35154},[68,50880,35054],{"class":85},[68,50882,50883],{"class":70,"line":35160},[68,50884,35060],{"class":74},[68,50886,50887,50889],{"class":70,"line":35166},[68,50888,5689],{"class":102},[68,50890,35068],{"class":85},[68,50892,50893],{"class":70,"line":35172},[68,50894,4000],{"emptyLinePlaceholder":1679},[68,50896,50897],{"class":70,"line":35178},[68,50898,35079],{"class":74},[68,50900,50901,50903,50905],{"class":70,"line":35184},[68,50902,33540],{"class":102},[68,50904,35087],{"class":587},[68,50906,35090],{"class":85},[68,50908,50909],{"class":70,"line":35211},[68,50910,35096],{"class":74},[68,50912,50913,50915,50917,50919,50921,50923,50925,50927],{"class":70,"line":35235},[68,50914,35102],{"class":85},[68,50916,33286],{"class":6815},[68,50918,869],{"class":102},[68,50920,997],{"class":85},[68,50922,2234],{"class":92},[68,50924,2114],{"class":85},[68,50926,2029],{"class":92},[68,50928,32090],{"class":85},[68,50930,50931],{"class":70,"line":35241},[68,50932,35122],{"class":74},[68,50934,50935],{"class":70,"line":35247},[68,50936,35128],{"class":74},[68,50938,50939],{"class":70,"line":35253},[68,50940,35134],{"class":74},[68,50942,50943,50945,50947,50949,50951,50953,50955],{"class":70,"line":35264},[68,50944,33320],{"class":85},[68,50946,99],{"class":92},[68,50948,2114],{"class":85},[68,50950,267],{"class":92},[68,50952,2114],{"class":85},[68,50954,99],{"class":92},[68,50956,1757],{"class":85},[68,50958,50959],{"class":70,"line":35275},[68,50960,35157],{"class":74},[68,50962,50963],{"class":70,"line":35281},[68,50964,35163],{"class":74},[68,50966,50967],{"class":70,"line":35298},[68,50968,35169],{"class":74},[68,50970,50971],{"class":70,"line":35321},[68,50972,35175],{"class":74},[68,50974,50975],{"class":70,"line":35344},[68,50976,35181],{"class":74},[68,50978,50979,50981,50983,50985,50987,50989,50991,50993,50995],{"class":70,"line":35350},[68,50980,35187],{"class":85},[68,50982,35190],{"class":872},[68,50984,35193],{"class":85},[68,50986,35196],{"class":872},[68,50988,2114],{"class":85},[68,50990,35201],{"class":6815},[68,50992,869],{"class":102},[68,50994,35206],{"class":872},[68,50996,1757],{"class":85},[68,50998,50999,51001,51003,51005,51007,51009,51011,51013,51015],{"class":70,"line":35355},[68,51000,35187],{"class":85},[68,51002,35190],{"class":872},[68,51004,35218],{"class":85},[68,51006,35221],{"class":872},[68,51008,2114],{"class":85},[68,51010,35201],{"class":6815},[68,51012,869],{"class":102},[68,51014,35230],{"class":872},[68,51016,1757],{"class":85},[68,51018,51019],{"class":70,"line":35364},[68,51020,35238],{"class":74},[68,51022,51023],{"class":70,"line":35374},[68,51024,35244],{"class":85},[68,51026,51027],{"class":70,"line":35380},[68,51028,35250],{"class":74},[68,51030,51031,51033,51035],{"class":70,"line":35385},[68,51032,35256],{"class":85},[68,51034,35259],{"class":872},[68,51036,1757],{"class":85},[68,51038,51039,51041,51043],{"class":70,"line":35391},[68,51040,35267],{"class":85},[68,51042,35270],{"class":872},[68,51044,1757],{"class":85},[68,51046,51047],{"class":70,"line":35404},[68,51048,35278],{"class":74},[68,51050,51051,51053,51055,51057,51059,51061,51063],{"class":70,"line":35410},[68,51052,33320],{"class":85},[68,51054,99],{"class":92},[68,51056,2114],{"class":85},[68,51058,267],{"class":92},[68,51060,2114],{"class":85},[68,51062,267],{"class":92},[68,51064,1757],{"class":85},[68,51066,51067,51069,51071,51073,51075,51077,51079,51081,51083],{"class":70,"line":35421},[68,51068,35187],{"class":85},[68,51070,35190],{"class":872},[68,51072,35305],{"class":85},[68,51074,35196],{"class":872},[68,51076,2114],{"class":85},[68,51078,35201],{"class":6815},[68,51080,869],{"class":102},[68,51082,35316],{"class":872},[68,51084,1757],{"class":85},[68,51086,51087,51089,51091,51093,51095,51097,51099,51101,51103],{"class":70,"line":35432},[68,51088,35187],{"class":85},[68,51090,35190],{"class":872},[68,51092,35328],{"class":85},[68,51094,35221],{"class":872},[68,51096,2114],{"class":85},[68,51098,35201],{"class":6815},[68,51100,869],{"class":102},[68,51102,35339],{"class":872},[68,51104,1757],{"class":85},[68,51106,51107],{"class":70,"line":35451},[68,51108,35347],{"class":74},[68,51110,51112],{"class":70,"line":51111},219,[68,51113,35244],{"class":85},[68,51115,51117,51119,51121],{"class":70,"line":51116},220,[68,51118,35256],{"class":85},[68,51120,35190],{"class":872},[68,51122,1757],{"class":85},[68,51124,51126,51128,51130],{"class":70,"line":51125},221,[68,51127,35267],{"class":85},[68,51129,35369],{"class":872},[68,51131,1757],{"class":85},[68,51133,51135],{"class":70,"line":51134},222,[68,51136,35377],{"class":85},[68,51138,51140],{"class":70,"line":51139},223,[68,51141,4000],{"emptyLinePlaceholder":1679},[68,51143,51145],{"class":70,"line":51144},224,[68,51146,35388],{"class":74},[68,51148,51150,51152,51154,51156,51158],{"class":70,"line":51149},225,[68,51151,3134],{"class":102},[68,51153,32813],{"class":92},[68,51155,4548],{"class":102},[68,51157,32818],{"class":872},[68,51159,5338],{"class":85},[68,51161,51163],{"class":70,"line":51162},226,[68,51164,35407],{"class":74},[68,51166,51168,51170,51172],{"class":70,"line":51167},227,[68,51169,46139],{"class":85},[68,51171,869],{"class":102},[68,51173,46144],{"class":85},[68,51175,51177,51179,51181],{"class":70,"line":51176},228,[68,51178,35424],{"class":85},[68,51180,869],{"class":102},[68,51182,35429],{"class":85},[68,51184,51186,51188,51190,51192,51194,51196,51198],{"class":70,"line":51185},229,[68,51187,34986],{"class":85},[68,51189,869],{"class":102},[68,51191,46161],{"class":85},[68,51193,35442],{"class":6815},[68,51195,869],{"class":102},[68,51197,2643],{"class":92},[68,51199,1757],{"class":85},[68,51201,51203],{"class":70,"line":51202},230,[68,51204,35454],{"class":85},[23593,51206,51208],{"id":51207},"_242测试代码","2.4.2.测试代码",[19,51210,51211],{},"使用测试集进行测试与推理",[58,51213,51215],{"className":31971,"code":51214,"language":31973,"meta":63,"style":63},"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",[65,51216,51217,51223,51233,51243,51254,51264,51268,51272,51280,51285,51289,51306,51310,51314,51318,51322,51326,51358,51362,51370,51374,51386,51390,51394,51398,51402,51406,51410,51414,51418,51436,51450,51454,51464,51474,51484,51490,51494,51498,51506,51510,51526,51534,51538,51542,51550,51558,51562,51566,51570,51574,51580,51584,51594,51602,51610,51614,51618,51622,51630,51634,51650,51654,51658,51662,51674,51678,51690,51694,51698,51710,51714,51724,51728,51732,51744,51748,51756,51760,51764,51772,51776,51784,51788,51792,51796,51800,51804,51820,51828,51832,51836,51854,51860,51864,51874,51882,51890,51894,51898,51902,51906,51914,51918,51934,51938,51946,51954],{"__ignoreMap":63},[68,51218,51219,51221],{"class":70,"line":71},[68,51220,31985],{"class":102},[68,51222,31988],{"class":85},[68,51224,51225,51227,51229,51231],{"class":70,"line":78},[68,51226,31985],{"class":102},[68,51228,33008],{"class":85},[68,51230,32976],{"class":102},[68,51232,33013],{"class":85},[68,51234,51235,51237,51239,51241],{"class":70,"line":89},[68,51236,32330],{"class":102},[68,51238,32991],{"class":85},[68,51240,31985],{"class":102},[68,51242,32996],{"class":85},[68,51244,51245,51247,51249,51251],{"class":70,"line":115},[68,51246,32330],{"class":102},[68,51248,32961],{"class":85},[68,51250,31985],{"class":102},[68,51252,51253],{"class":85}," ImageFolder\n",[68,51255,51256,51258,51260,51262],{"class":70,"line":280},[68,51257,32330],{"class":102},[68,51259,33507],{"class":85},[68,51261,31985],{"class":102},[68,51263,46233],{"class":85},[68,51265,51266],{"class":70,"line":301},[68,51267,4000],{"emptyLinePlaceholder":1679},[68,51269,51270],{"class":70,"line":320},[68,51271,35544],{"class":74},[68,51273,51274,51276,51278],{"class":70,"line":2915},[68,51275,33540],{"class":102},[68,51277,35551],{"class":587},[68,51279,33546],{"class":85},[68,51281,51282],{"class":70,"line":2921},[68,51283,51284],{"class":74},"   # 导入自己的数据集，并进行数据处理\n",[68,51286,51287],{"class":70,"line":2933},[68,51288,49554],{"class":74},[68,51290,51291,51293,51295,51297,51299,51301,51304],{"class":70,"line":3214},[68,51292,49559],{"class":92},[68,51294,869],{"class":102},[68,51296,2406],{"class":102},[68,51298,1987],{"class":872},[68,51300,2294],{"class":92},[68,51302,51303],{"class":49570},"\u002Fdata\u002Ftest",[68,51305,26727],{"class":872},[68,51307,51308],{"class":70,"line":3219},[68,51309,4000],{"emptyLinePlaceholder":1679},[68,51311,51312],{"class":70,"line":3225},[68,51313,49582],{"class":74},[68,51315,51316],{"class":70,"line":3230},[68,51317,49587],{"class":74},[68,51319,51320],{"class":70,"line":3244},[68,51321,49592],{"class":74},[68,51323,51324],{"class":70,"line":3249},[68,51325,49597],{"class":74},[68,51327,51328,51330,51332,51334,51336,51338,51340,51342,51344,51346,51348,51350,51352,51354,51356],{"class":70,"line":3255},[68,51329,49602],{"class":85},[68,51331,869],{"class":102},[68,51333,49607],{"class":85},[68,51335,49610],{"class":92},[68,51337,2114],{"class":85},[68,51339,49615],{"class":92},[68,51341,2114],{"class":85},[68,51343,49620],{"class":92},[68,51345,49623],{"class":85},[68,51347,49626],{"class":92},[68,51349,2114],{"class":85},[68,51351,49631],{"class":92},[68,51353,2114],{"class":85},[68,51355,49636],{"class":92},[68,51357,6256],{"class":85},[68,51359,51360],{"class":70,"line":3276},[68,51361,49643],{"class":74},[68,51363,51364,51366,51368],{"class":70,"line":3281},[68,51365,49648],{"class":85},[68,51367,869],{"class":102},[68,51369,49653],{"class":85},[68,51371,51372],{"class":70,"line":3295},[68,51373,49658],{"class":74},[68,51375,51376,51378,51380,51382,51384],{"class":70,"line":3300},[68,51377,49663],{"class":85},[68,51379,33094],{"class":92},[68,51381,2114],{"class":85},[68,51383,33094],{"class":92},[68,51385,44215],{"class":85},[68,51387,51388],{"class":70,"line":3329},[68,51389,49676],{"class":74},[68,51391,51392],{"class":70,"line":3334},[68,51393,49681],{"class":85},[68,51395,51396],{"class":70,"line":3351},[68,51397,49686],{"class":85},[68,51399,51400],{"class":70,"line":3356},[68,51401,49691],{"class":74},[68,51403,51404],{"class":70,"line":3361},[68,51405,49696],{"class":74},[68,51407,51408],{"class":70,"line":3366},[68,51409,4000],{"emptyLinePlaceholder":1679},[68,51411,51412],{"class":70,"line":3380},[68,51413,49705],{"class":74},[68,51415,51416],{"class":70,"line":3385},[68,51417,49710],{"class":74},[68,51419,51420,51422,51424,51426,51428,51430,51432,51434],{"class":70,"line":4177},[68,51421,35558],{"class":85},[68,51423,869],{"class":102},[68,51425,49719],{"class":85},[68,51427,49722],{"class":92},[68,51429,2114],{"class":85},[68,51431,49727],{"class":6815},[68,51433,869],{"class":102},[68,51435,49732],{"class":85},[68,51437,51438,51440,51442,51444,51446,51448],{"class":70,"line":4191},[68,51439,35615],{"class":85},[68,51441,869],{"class":102},[68,51443,33127],{"class":85},[68,51445,33130],{"class":6815},[68,51447,869],{"class":102},[68,51449,35626],{"class":85},[68,51451,51452],{"class":70,"line":4199},[68,51453,35631],{"class":74},[68,51455,51456,51458,51460,51462],{"class":70,"line":4204},[68,51457,35636],{"class":6815},[68,51459,869],{"class":102},[68,51461,99],{"class":92},[68,51463,33059],{"class":85},[68,51465,51466,51468,51470,51472],{"class":70,"line":4210},[68,51467,35647],{"class":6815},[68,51469,869],{"class":102},[68,51471,33069],{"class":92},[68,51473,33059],{"class":85},[68,51475,51476,51478,51480,51482],{"class":70,"line":4216},[68,51477,35658],{"class":6815},[68,51479,869],{"class":102},[68,51481,600],{"class":92},[68,51483,1757],{"class":85},[68,51485,51486,51488],{"class":70,"line":4221},[68,51487,5689],{"class":102},[68,51489,35671],{"class":85},[68,51491,51492],{"class":70,"line":9547},[68,51493,4000],{"emptyLinePlaceholder":1679},[68,51495,51496],{"class":70,"line":9571},[68,51497,35680],{"class":74},[68,51499,51500,51502,51504],{"class":70,"line":9576},[68,51501,33540],{"class":102},[68,51503,35687],{"class":587},[68,51505,35690],{"class":85},[68,51507,51508],{"class":70,"line":9582},[68,51509,35695],{"class":74},[68,51511,51512,51514,51516,51518,51520,51522,51524],{"class":70,"line":9609},[68,51513,32830],{"class":85},[68,51515,869],{"class":102},[68,51517,32837],{"class":872},[68,51519,3306],{"class":102},[68,51521,32842],{"class":85},[68,51523,3303],{"class":102},[68,51525,35712],{"class":872},[68,51527,51528,51530,51532],{"class":70,"line":9614},[68,51529,32882],{"class":85},[68,51531,869],{"class":102},[68,51533,33882],{"class":85},[68,51535,51536],{"class":70,"line":9620},[68,51537,4000],{"emptyLinePlaceholder":1679},[68,51539,51540],{"class":70,"line":9632},[68,51541,35729],{"class":74},[68,51543,51544,51546,51548],{"class":70,"line":9644},[68,51545,35734],{"class":85},[68,51547,869],{"class":102},[68,51549,33935],{"class":92},[68,51551,51552,51554,51556],{"class":70,"line":9656},[68,51553,35743],{"class":85},[68,51555,869],{"class":102},[68,51557,4684],{"class":92},[68,51559,51560],{"class":70,"line":11314},[68,51561,4000],{"emptyLinePlaceholder":1679},[68,51563,51564],{"class":70,"line":11339},[68,51565,35756],{"class":74},[68,51567,51568],{"class":70,"line":11362},[68,51569,35761],{"class":74},[68,51571,51572],{"class":70,"line":11386},[68,51573,35766],{"class":74},[68,51575,51576,51578],{"class":70,"line":11391},[68,51577,35771],{"class":102},[68,51579,34477],{"class":85},[68,51581,51582],{"class":70,"line":11396},[68,51583,35778],{"class":74},[68,51585,51586,51588,51590,51592],{"class":70,"line":11401},[68,51587,5002],{"class":102},[68,51589,35785],{"class":85},[68,51591,27637],{"class":102},[68,51593,35790],{"class":85},[68,51595,51596,51598,51600],{"class":70,"line":11410},[68,51597,35795],{"class":85},[68,51599,869],{"class":102},[68,51601,35800],{"class":85},[68,51603,51604,51606,51608],{"class":70,"line":11415},[68,51605,35805],{"class":85},[68,51607,869],{"class":102},[68,51609,35810],{"class":85},[68,51611,51612],{"class":70,"line":11421},[68,51613,35815],{"class":74},[68,51615,51616],{"class":70,"line":11442},[68,51617,34468],{"class":85},[68,51619,51620],{"class":70,"line":11448},[68,51621,35824],{"class":74},[68,51623,51624,51626,51628],{"class":70,"line":11462},[68,51625,34253],{"class":85},[68,51627,869],{"class":102},[68,51629,35833],{"class":85},[68,51631,51632],{"class":70,"line":11468},[68,51633,35838],{"class":74},[68,51635,51636,51638,51640,51642,51644,51646,51648],{"class":70,"line":11495},[68,51637,34270],{"class":85},[68,51639,869],{"class":102},[68,51641,34275],{"class":85},[68,51643,34278],{"class":6815},[68,51645,869],{"class":102},[68,51647,99],{"class":92},[68,51649,1757],{"class":85},[68,51651,51652],{"class":70,"line":11504},[68,51653,35859],{"class":74},[68,51655,51656],{"class":70,"line":11510},[68,51657,35864],{"class":74},[68,51659,51660],{"class":70,"line":11518},[68,51661,35869],{"class":74},[68,51663,51664,51666,51668,51670,51672],{"class":70,"line":11523},[68,51665,35874],{"class":85},[68,51667,11075],{"class":102},[68,51669,34380],{"class":85},[68,51671,4548],{"class":102},[68,51673,35883],{"class":85},[68,51675,51676],{"class":70,"line":18199},[68,51677,35888],{"class":74},[68,51679,51680,51682,51684,51686,51688],{"class":70,"line":18205},[68,51681,35893],{"class":85},[68,51683,11075],{"class":102},[68,51685,35898],{"class":85},[68,51687,600],{"class":92},[68,51689,1757],{"class":85},[68,51691,51692],{"class":70,"line":18228},[68,51693,4000],{"emptyLinePlaceholder":1679},[68,51695,51696],{"class":70,"line":18234},[68,51697,35911],{"class":74},[68,51699,51700,51702,51704,51706,51708],{"class":70,"line":18257},[68,51701,35916],{"class":85},[68,51703,869],{"class":102},[68,51705,35921],{"class":85},[68,51707,2320],{"class":102},[68,51709,35926],{"class":85},[68,51711,51712],{"class":70,"line":18271},[68,51713,35931],{"class":74},[68,51715,51716,51718,51720,51722],{"class":70,"line":18291},[68,51717,34044],{"class":92},[68,51719,997],{"class":85},[68,51721,35940],{"class":872},[68,51723,35943],{"class":85},[68,51725,51726],{"class":70,"line":18297},[68,51727,4000],{"emptyLinePlaceholder":1679},[68,51729,51730],{"class":70,"line":18308},[68,51731,35952],{"class":74},[68,51733,51734,51736,51738,51740,51742],{"class":70,"line":18331},[68,51735,3134],{"class":102},[68,51737,32813],{"class":92},[68,51739,4548],{"class":102},[68,51741,32818],{"class":872},[68,51743,5338],{"class":85},[68,51745,51746],{"class":70,"line":18353},[68,51747,35969],{"class":74},[68,51749,51750,51752,51754],{"class":70,"line":18358},[68,51751,32882],{"class":85},[68,51753,869],{"class":102},[68,51755,46144],{"class":85},[68,51757,51758],{"class":70,"line":18364},[68,51759,35982],{"class":74},[68,51761,51762],{"class":70,"line":18378},[68,51763,35987],{"class":74},[68,51765,51766,51768,51770],{"class":70,"line":18391},[68,51767,35992],{"class":85},[68,51769,35995],{"class":872},[68,51771,32090],{"class":85},[68,51773,51774],{"class":70,"line":18396},[68,51775,36002],{"class":74},[68,51777,51778,51780,51782],{"class":70,"line":18410},[68,51779,35615],{"class":85},[68,51781,869],{"class":102},[68,51783,36011],{"class":85},[68,51785,51786],{"class":70,"line":18415},[68,51787,36016],{"class":74},[68,51789,51790],{"class":70,"line":18421},[68,51791,36021],{"class":85},[68,51793,51794],{"class":70,"line":18426},[68,51795,4000],{"emptyLinePlaceholder":1679},[68,51797,51798],{"class":70,"line":18440},[68,51799,36030],{"class":74},[68,51801,51802],{"class":70,"line":18445},[68,51803,36035],{"class":74},[68,51805,51806,51808,51810,51812,51814,51816,51818],{"class":70,"line":18450},[68,51807,32830],{"class":85},[68,51809,869],{"class":102},[68,51811,32837],{"class":872},[68,51813,3306],{"class":102},[68,51815,32842],{"class":85},[68,51817,3303],{"class":102},[68,51819,35712],{"class":872},[68,51821,51822,51824,51826],{"class":70,"line":18464},[68,51823,32882],{"class":85},[68,51825,869],{"class":102},[68,51827,33882],{"class":85},[68,51829,51830],{"class":70,"line":18476},[68,51831,36064],{"class":74},[68,51833,51834],{"class":70,"line":18481},[68,51835,36069],{"class":74},[68,51837,51838,51840,51842,51844,51847,51849,51852],{"class":70,"line":18494},[68,51839,36074],{"class":85},[68,51841,869],{"class":102},[68,51843,2626],{"class":85},[68,51845,51846],{"class":872},"'猫'",[68,51848,2114],{"class":85},[68,51850,51851],{"class":872},"'狗'",[68,51853,34839],{"class":85},[68,51855,51856,51858],{"class":70,"line":18499},[68,51857,35771],{"class":102},[68,51859,34477],{"class":85},[68,51861,51862],{"class":70,"line":18504},[68,51863,36139],{"class":74},[68,51865,51866,51868,51870,51872],{"class":70,"line":18509},[68,51867,5002],{"class":102},[68,51869,36146],{"class":85},[68,51871,27637],{"class":102},[68,51873,35790],{"class":85},[68,51875,51876,51878,51880],{"class":70,"line":18522},[68,51877,34203],{"class":85},[68,51879,869],{"class":102},[68,51881,34208],{"class":85},[68,51883,51884,51886,51888],{"class":70,"line":18527},[68,51885,34218],{"class":85},[68,51887,869],{"class":102},[68,51889,34223],{"class":85},[68,51891,51892],{"class":70,"line":34226},[68,51893,4000],{"emptyLinePlaceholder":1679},[68,51895,51896],{"class":70,"line":34232},[68,51897,36175],{"class":74},[68,51899,51900],{"class":70,"line":34238},[68,51901,34468],{"class":85},[68,51903,51904],{"class":70,"line":34244},[68,51905,36184],{"class":74},[68,51907,51908,51910,51912],{"class":70,"line":34250},[68,51909,34253],{"class":85},[68,51911,869],{"class":102},[68,51913,34258],{"class":85},[68,51915,51916],{"class":70,"line":34261},[68,51917,36197],{"class":74},[68,51919,51920,51922,51924,51926,51928,51930,51932],{"class":70,"line":34267},[68,51921,34270],{"class":85},[68,51923,869],{"class":102},[68,51925,34275],{"class":85},[68,51927,34278],{"class":6815},[68,51929,869],{"class":102},[68,51931,99],{"class":92},[68,51933,1757],{"class":85},[68,51935,51936],{"class":70,"line":34287},[68,51937,36218],{"class":74},[68,51939,51940,51942,51944],{"class":70,"line":34293},[68,51941,36223],{"class":85},[68,51943,869],{"class":102},[68,51945,36228],{"class":85},[68,51947,51948,51950,51952],{"class":70,"line":34304},[68,51949,36233],{"class":85},[68,51951,869],{"class":102},[68,51953,36238],{"class":85},[68,51955,51956,51958,51960,51962,51964,51966,51968,51970],{"class":70,"line":34310},[68,51957,36243],{"class":92},[68,51959,997],{"class":85},[68,51961,36248],{"class":872},[68,51963,36251],{"class":85},[68,51965,36254],{"class":872},[68,51967,2114],{"class":85},[68,51969,36259],{"class":872},[68,51971,36262],{"class":85},[1652,51973,51974],{},"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":63,"searchDepth":78,"depth":78,"links":51976},[51977,51978,51979,51980],{"id":32184,"depth":89,"text":32185},{"id":39432,"depth":89,"text":39433},{"id":42865,"depth":89,"text":42866},{"id":46874,"depth":89,"text":46875},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32176,"description":1676},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51987,"title":51988,"body":51989,"description":1676,"extension":1677,"meta":51996,"navigation":1679,"path":51997,"seo":51998,"stem":51999,"__hash__":52000},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51990,"toc":51994},[51991],[10,51992,51988],{"id":51993},"_3yolo模型学习",{"title":63,"searchDepth":78,"depth":78,"links":51995},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51988,"description":1676},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52002,"title":52003,"body":52004,"description":52011,"extension":1677,"meta":52012,"navigation":1679,"path":52014,"seo":52015,"stem":52016,"__hash__":52017},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52005,"toc":52009},[52006],[19,52007,52008],{},"yolo模型还未补充",{"title":63,"searchDepth":78,"depth":78,"links":52010},[],"深度学习学习",{"category":52013},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52003,"description":52011},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52019,"title":52020,"body":52021,"description":1676,"extension":1677,"meta":52046,"navigation":1679,"path":52047,"seo":52048,"stem":52049,"__hash__":52050},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52022,"toc":52044},[52023,52026,52029,52034,52041],[10,52024,52020],{"id":52025},"_1工具",[19,52027,52028],{},"提示错误插件：有问题会提前报错",[19,52030,52031],{},[38,52032],{"alt":63,"src":52033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52035,52036],{},[1974,52037,52040],{"href":52038,"rel":52039},"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",[25459],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52042,52043],{},"alt键加上下箭头可以实现语句的移动",{"title":63,"searchDepth":78,"depth":78,"links":52045},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52020,"description":1676},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52052,"title":52053,"body":52054,"description":1676,"extension":1677,"meta":54910,"navigation":1679,"path":54911,"seo":54912,"stem":54913,"__hash__":54914},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52055,"toc":54861},[52056,52059,52063,52067,52072,52075,52080,52084,52091,52096,52103,52108,52115,52120,52124,52129,52132,52136,52141,52145,52150,52153,52156,52159,52162,52165,52168,52171,52174,52179,52184,52189,52193,52196,52199,52203,52208,52211,52219,52224,52241,52249,52254,52259,52264,52269,52274,52277,52282,52287,52291,52300,52305,52310,52314,52319,52322,52326,52331,52339,52344,52349,52352,52357,52362,52367,52370,52373,52376,52381,52386,52389,52394,52397,52402,52405,52408,52411,52416,52419,52422,52437,52442,52447,52452,52455,52458,52461,52475,52478,52483,52488,52491,52494,52497,52500,52503,52506,52509,52513,52517,52522,52526,52529,52534,52539,52542,52547,52550,52554,52559,52562,52565,52568,52571,52574,52577,52580,52583,52586,52590,52595,52600,52605,52608,52611,52615,52620,52623,52627,52630,52633,52638,52641,52644,52648,52652,52655,52660,52665,52668,52697,52702,52707,52712,52717,52721,52726,52730,52735,52738,52742,52746,52751,52755,52760,52765,52769,52774,52777,52779,52782,52787,52791,52796,52800,52804,52809,52814,52819,52824,52828,52833,52838,52843,52846,52849,52854,52857,52862,52867,52872,52877,52881,53680,53684,54027,54032,54035,54038,54041,54044,54047,54050,54053,54056,54058,54061,54063,54066,54070,54075,54078,54081,54084,54088,54093,54098,54118,54121,54125,54130,54135,54152,54156,54185,54189,54211,54213,54252,54260,54266,54270,54273,54276,54281,54286,54289,54292,54295,54300,54305,54308,54311,54314,54317,54320,54323,54326,54329,54332,54335,54338,54340,54343,54346,54349,54352,54355,54358,54361,54364,54368,54373,54376,54381,54384,54387,54390,54393,54396,54399,54402,54404,54407,54410,54413,54416,54419,54422,54426,54429,54438,54441,54446,54449,54454,54457,54460,54463,54466,54469,54472,54475,54479,54483,54486,54489,54494,54499,54504,54508,54513,54518,54521,54524,54527,54530,54533,54538,54541,54546,54548,54553,54556,54560,54565,54568,54571,54576,54580,54583,54588,54591,54594,54623,54628,54631,54634,54637,54640,54643,54647,54650,54736,54740,54743,54748,54753,54760,54763,54766,54769,54772,54775,54780,54785,54788,54791,54794,54797,54800,54803,54806,54809,54812,54814,54817,54821,54826,54831,54836,54839,54844,54849,54852,54855,54858],[10,52057,52053],{"id":52058},"_2基础语法",[14,52060,52062],{"id":52061},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[43,52064,52066],{"id":52065},"_211-js组成","2.1.1 js组成",[48,52068,52069],{},[51,52070,52071],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52073,52074],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[48,52076,52077],{"start":78},[51,52078,52079],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[43,52081,52083],{"id":52082},"_212-js书写位置","2.1.2 js书写位置",[48,52085,52086],{},[51,52087,52088],{},[1890,52089,52090],{},"内部 JavaScript",[19,52092,52093],{},[38,52094],{"alt":63,"src":52095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[48,52097,52098],{"start":78},[51,52099,52100],{},[1890,52101,52102],{},"外部 JavaScript",[19,52104,52105],{},[38,52106],{"alt":63,"src":52107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[48,52109,52110],{"start":89},[51,52111,52112],{},[1890,52113,52114],{},"内联 JavaScript",[19,52116,52117],{},[38,52118],{"alt":63,"src":52119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[43,52121,52123],{"id":52122},"_213-javascript注释","2.1.3 JavaScript注释",[19,52125,52126],{},[38,52127],{"alt":63,"src":52128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52130,52131],{},"alt+shift+a一定要记住！",[43,52133,52135],{"id":52134},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52137,52138],{},[38,52139],{"alt":63,"src":52140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[43,52142,52144],{"id":52143},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[48,52146,52147],{},[51,52148,52149],{},"输出语法：",[19,52151,52152],{},"①document.write('要出的内容')",[19,52154,52155],{},"向body内输出内容；",[19,52157,52158],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52160,52161],{},"②alert('要出的内容')",[19,52163,52164],{},"页面弹出警告对话框",[19,52166,52167],{},"③console.log('控制台打印')",[19,52169,52170],{},"控制台输出语法，程序员调试使用",[19,52172,52173],{},"输入log就行，自动生成：",[19,52175,52176],{},[38,52177],{"alt":63,"src":52178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[48,52180,52181],{"start":78},[51,52182,52183],{},"输入语法：",[19,52185,52186],{},[38,52187],{"alt":63,"src":52188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[43,52190,52192],{"id":52191},"_2116-字面量","21.1.6 字面量",[19,52194,52195],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52197,52198],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52200,52202],{"id":52201},"_22-变量","2.2 变量",[48,52204,52205],{},[51,52206,52207],{},"变量声明",[19,52209,52210],{},"let 变量名",[168,52212,52213,52216],{},[51,52214,52215],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[51,52217,52218],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[48,52220,52221],{"start":78},[51,52222,52223],{},"变量赋值",[58,52225,52229],{"className":52226,"code":52227,"language":52228,"meta":63,"style":63},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[65,52230,52231,52236],{"__ignoreMap":63},[68,52232,52233],{"class":70,"line":71},[68,52234,52235],{"class":85},"let age\n",[68,52237,52238],{"class":70,"line":78},[68,52239,52240],{"class":85},"age=18\n",[48,52242,52243,52246],{"start":89},[51,52244,52245],{},"连这些（变量的初始化）：let age=18",[51,52247,52248],{},"更新变量",[19,52250,52251],{},[38,52252],{"alt":63,"src":52253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[48,52255,52256],{"start":280},[51,52257,52258],{},"声明多个变量",[19,52260,52261],{},[38,52262],{"alt":63,"src":52263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[48,52265,52266],{"start":301},[51,52267,52268],{},"变量命名规则与规范",[19,52270,52271],{},[38,52272],{"alt":63,"src":52273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52275,52276],{},"遵守小驼峰！",[48,52278,52279],{"start":320},[51,52280,52281],{},"变量拓展-let和var的区别",[19,52283,52284],{},[38,52285],{"alt":63,"src":52286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52288,52290],{"id":52289},"_23-数组","2.3 数组",[58,52292,52294],{"className":52226,"code":52293,"language":52228,"meta":63,"style":63},"let arr = []\n",[65,52295,52296],{"__ignoreMap":63},[68,52297,52298],{"class":70,"line":71},[68,52299,52293],{"class":85},[19,52301,52302],{},[38,52303],{"alt":63,"src":52304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52306,52307],{},[38,52308],{"alt":63,"src":52309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52311,52313],{"id":52312},"_24-常量","2.4 常量",[19,52315,52316],{},[38,52317],{"alt":63,"src":52318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52320,52321],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52323,52325],{"id":52324},"_25-数据类型","2.5 数据类型",[19,52327,52328],{},[38,52329],{"alt":63,"src":52330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[48,52332,52333,52336],{},[51,52334,52335],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[51,52337,52338],{},"算数运算符：",[19,52340,52341],{},[38,52342],{"alt":63,"src":52343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[48,52345,52346],{"start":89},[51,52347,52348],{},"数字类型（Number）",[19,52350,52351],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52353,52354],{},[38,52355],{"alt":63,"src":52356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[48,52358,52359],{"start":115},[51,52360,52361],{},"字符串类型（string）",[19,52363,52364],{},[38,52365],{"alt":63,"src":52366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52368,52369],{},"反引号也是可以使用的",[19,52371,52372],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52374,52375],{},"例如：document.write(\"我今年\"+age+\"岁\")",[48,52377,52378],{"start":280},[51,52379,52380],{},"模板字符串",[19,52382,52383],{},[38,52384],{"alt":63,"src":52385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52387,52388],{},"类似于python的字符串格式化",[48,52390,52391],{"start":301},[51,52392,52393],{},"布尔类型",[19,52395,52396],{},"true 和 false",[48,52398,52399],{"start":320},[51,52400,52401],{},"未定义类型（underfined）",[19,52403,52404],{},"表示没有赋值",[19,52406,52407],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52409,52410],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[48,52412,52413],{"start":2915},[51,52414,52415],{},"null（空类型）",[19,52417,52418],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52420,52421],{},"赋值了，但是内容为空",[58,52423,52425],{"className":52226,"code":52424,"language":52228,"meta":63,"style":63},"typeof null\n输出的是'object'，是一个对象数据类型\n",[65,52426,52427,52432],{"__ignoreMap":63},[68,52428,52429],{"class":70,"line":71},[68,52430,52431],{"class":85},"typeof null\n",[68,52433,52434],{"class":70,"line":78},[68,52435,52436],{"class":85},"输出的是'object'，是一个对象数据类型\n",[48,52438,52439],{"start":2921},[51,52440,52441],{},"控制台检测数据类型",[19,52443,52444],{},[38,52445],{"alt":63,"src":52446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[48,52448,52449],{"start":2933},[51,52450,52451],{},"类型转换",[19,52453,52454],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52456,52457],{},"转换方式：隐式转换和显示转换",[19,52459,52460],{},"①隐式转换",[168,52462,52463,52466,52469,52472],{},[51,52464,52465],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[51,52467,52468],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[51,52470,52471],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[51,52473,52474],{},"任何数据和字符串相加结果都是字符串",[19,52476,52477],{},"②显示转换",[19,52479,52480],{},[38,52481],{"alt":63,"src":52482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52484,52485],{},[38,52486],{"alt":63,"src":52487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52489,52490],{},"在输入的时候要用好隐式转换，简单写起来",[19,52492,52493],{},"let num = +prompt(’请输入数字：‘)",[19,52495,52496],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52498,52499],{},"console.log(parseInt('12.333px'))",[19,52501,52502],{},"输出为：12",[19,52504,52505],{},"console.log(parseInt('a'a'a12.333px'))",[19,52507,52508],{},"输出：NaN",[14,52510,52512],{"id":52511},"_26-运算符","2.6 运算符",[43,52514,52516],{"id":52515},"_261-赋值运算符","2.6.1 赋值运算符",[19,52518,52519],{},[38,52520],{"alt":63,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[43,52523,52525],{"id":52524},"_262-一元运算符","2.6.2 一元运算符",[19,52527,52528],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52530,52531],{},[38,52532],{"alt":63,"src":52533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52535,52536],{},[38,52537],{"alt":63,"src":52538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52540,52541],{},"两者的区别：",[19,52543,52544],{},[38,52545],{"alt":63,"src":52546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52548,52549],{},"前置先自加；后置后加，代码执行完之后再加",[43,52551,52553],{"id":52552},"_263-比较运算符","2.6.3 比较运算符",[19,52555,52556],{},[38,52557],{"alt":63,"src":52558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52560,52561],{},"比较运算符也有隐式转换",[19,52563,52564],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52566,52567],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52569,52570],{},"要使用三等，开发的时候",[19,52572,52573],{},"NaN不等于任何人，包括它自己",[19,52575,52576],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52578,52579],{},"7\u002F10=0.7",[19,52581,52582],{},"最后：0.5+0.2=0.7",[19,52584,52585],{},"字符串比较，比较的是字符对应的ASCII码",[43,52587,52589],{"id":52588},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52591,52592],{},[38,52593],{"alt":63,"src":52594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52596,52597],{},[38,52598],{"alt":63,"src":52599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52601,52602],{},[38,52603],{"alt":63,"src":52604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52606,52607],{},"上述题目选D",[19,52609,52610],{},"与真2假1；或真1假2",[43,52612,52614],{"id":52613},"_265-运算符优先级","2.6.5 运算符优先级",[19,52616,52617],{},[38,52618],{"alt":63,"src":52619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52621,52622],{},"先算逻辑与，后算逻辑或",[14,52624,52626],{"id":52625},"_27-语句","2.7 语句",[19,52628,52629],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52631,52632],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52634,52635],{},[38,52636],{"alt":63,"src":52637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52639,52640],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52642,52643],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[43,52645,52647],{"id":52646},"_271-分支语句","2.7.1 分支语句",[23593,52649,52651],{"id":52650},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52653,52654],{},"if语句单行简单的话，可以不写{}，写在一行就行",[48,52656,52657],{},[51,52658,52659],{},"单分支语句",[19,52661,52662],{},[38,52663],{"alt":63,"src":52664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52666,52667],{},"除了0，所有数字都为真",[58,52669,52671],{"className":52226,"code":52670,"language":52228,"meta":63,"style":63},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[65,52672,52673,52678,52683,52688,52692],{"__ignoreMap":63},[68,52674,52675],{"class":70,"line":71},[68,52676,52677],{"class":85},"if（0) {\n",[68,52679,52680],{"class":70,"line":78},[68,52681,52682],{"class":85},"    let a=1\n",[68,52684,52685],{"class":70,"line":89},[68,52686,52687],{"class":85},"    alert(typeof a)\n",[68,52689,52690],{"class":70,"line":115},[68,52691,118],{"class":85},[68,52693,52694],{"class":70,"line":280},[68,52695,52696],{"class":85},"不输出，括号为假\n",[48,52698,52699],{"start":78},[51,52700,52701],{},"双分支语句",[19,52703,52704],{},[38,52705],{"alt":63,"src":52706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[48,52708,52709],{"start":89},[51,52710,52711],{},"多分支语句",[19,52713,52714],{},[38,52715],{"alt":63,"src":52716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23593,52718,52720],{"id":52719},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52722,52723],{},[38,52724],{"alt":63,"src":52725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23593,52727,52729],{"id":52728},"_2713-switch语句","2.7.1.3 switch语句",[19,52731,52732],{},[38,52733],{"alt":63,"src":52734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52736,52737],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[43,52739,52741],{"id":52740},"_272-循环语句","2.7.2 循环语句",[23593,52743,52745],{"id":52744},"_2721-断点演示","2.7.2.1 断点演示",[19,52747,52748],{},[38,52749],{"alt":63,"src":52750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23593,52752,52754],{"id":52753},"_2722-while循环","2.7.2.2 while循环",[19,52756,52757],{},[38,52758],{"alt":63,"src":52759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52761,52762],{},[38,52763],{"alt":63,"src":52764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23593,52766,52768],{"id":52767},"_2723-for循环","2.7.2.3 for循环",[19,52770,52771],{},[38,52772],{"alt":63,"src":52773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52775,52776],{},"for(;;) {",[19,52778,2681],{},[19,52780,52781],{},"表示无限循环",[19,52783,52784],{},[38,52785],{"alt":63,"src":52786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23593,52788,52790],{"id":52789},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52792,52793],{},[38,52794],{"alt":63,"src":52795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52797,52799],{"id":52798},"_28-数组","2.8 数组",[43,52801,52803],{"id":52802},"_281-基础认识","2.8.1 基础认识",[19,52805,52806],{},[38,52807],{"alt":63,"src":52808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52810,52811],{},[38,52812],{"alt":63,"src":52813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52815,52816],{},[38,52817],{"alt":63,"src":52818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52820,52821],{},[38,52822],{"alt":63,"src":52823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[43,52825,52827],{"id":52826},"_282-操作数组","2.8.2 操作数组",[19,52829,52830],{},[38,52831],{"alt":63,"src":52832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[48,52834,52835],{},[51,52836,52837],{},"添加元素",[19,52839,52840],{},[38,52841],{"alt":63,"src":52842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52844,52845],{},"console.log(arr.push('green'))",[19,52847,52848],{},"输出结果：为新数组的长度",[19,52850,52851],{},[38,52852],{"alt":63,"src":52853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52855,52856],{},"push用的非常多，一定要记住",[48,52858,52859],{},[51,52860,52861],{},"删除元素",[19,52863,52864],{},[38,52865],{"alt":63,"src":52866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52868,52869],{},[38,52870],{"alt":63,"src":52871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52873,52874],{},[38,52875],{"alt":63,"src":52876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[43,52878,52880],{"id":52879},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[58,52882,52884],{"className":52226,"code":52883,"language":52228,"meta":63,"style":63},"\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",[65,52885,52886,52899,52915,52919,52928,52946,52970,52992,53006,53014,53021,53032,53043,53047,53051,53058,53070,53084,53097,53115,53132,53146,53158,53170,53182,53186,53190,53200,53210,53222,53234,53246,53257,53261,53265,53277,53281,53295,53299,53303,53314,53328,53340,53354,53358,53367,53375,53379,53388,53392,53401,53406,53411,53424,53452,53457,53462,53487,53492,53496,53501,53506,53521,53525,53530,53560,53572,53588,53604,53618,53623,53630,53634,53639,53652,53660,53668,53672],{"__ignoreMap":63},[68,52887,52888,52891,52894,52897],{"class":70,"line":71},[68,52889,52890],{"class":85},"\u003C!",[68,52892,52893],{"class":81},"DOCTYPE",[68,52895,52896],{"class":587}," html",[68,52898,876],{"class":85},[68,52900,52901,52903,52905,52908,52910,52913],{"class":70,"line":78},[68,52902,861],{"class":85},[68,52904,52228],{"class":81},[68,52906,52907],{"class":587}," lang",[68,52909,869],{"class":85},[68,52911,52912],{"class":872},"\"en\"",[68,52914,876],{"class":85},[68,52916,52917],{"class":70,"line":89},[68,52918,4000],{"emptyLinePlaceholder":1679},[68,52920,52921,52923,52926],{"class":70,"line":115},[68,52922,861],{"class":85},[68,52924,52925],{"class":81},"head",[68,52927,876],{"class":85},[68,52929,52930,52933,52936,52939,52941,52944],{"class":70,"line":280},[68,52931,52932],{"class":85},"    \u003C",[68,52934,52935],{"class":81},"meta",[68,52937,52938],{"class":587}," charset",[68,52940,869],{"class":85},[68,52942,52943],{"class":872},"\"UTF-8\"",[68,52945,876],{"class":85},[68,52947,52948,52950,52952,52955,52957,52960,52963,52965,52968],{"class":70,"line":301},[68,52949,52932],{"class":85},[68,52951,52935],{"class":81},[68,52953,52954],{"class":587}," http-equiv",[68,52956,869],{"class":85},[68,52958,52959],{"class":872},"\"X-UA-Compatible\"",[68,52961,52962],{"class":587}," content",[68,52964,869],{"class":85},[68,52966,52967],{"class":872},"\"IE=edge\"",[68,52969,876],{"class":85},[68,52971,52972,52974,52976,52978,52980,52983,52985,52987,52990],{"class":70,"line":320},[68,52973,52932],{"class":85},[68,52975,52935],{"class":81},[68,52977,16516],{"class":587},[68,52979,869],{"class":85},[68,52981,52982],{"class":872},"\"viewport\"",[68,52984,52962],{"class":587},[68,52986,869],{"class":85},[68,52988,52989],{"class":872},"\"width=device-width, initial-scale=1.0\"",[68,52991,876],{"class":85},[68,52993,52994,52996,52999,53002,53004],{"class":70,"line":2915},[68,52995,52932],{"class":85},[68,52997,52998],{"class":81},"title",[68,53000,53001],{"class":85},">Document\u003C\u002F",[68,53003,52998],{"class":81},[68,53005,876],{"class":85},[68,53007,53008,53010,53012],{"class":70,"line":2921},[68,53009,52932],{"class":85},[68,53011,1652],{"class":81},[68,53013,876],{"class":85},[68,53015,53016,53019],{"class":70,"line":2933},[68,53017,53018],{"class":81},"        *",[68,53020,86],{"class":85},[68,53022,53023,53026,53028,53030],{"class":70,"line":3214},[68,53024,53025],{"class":92},"            margin",[68,53027,96],{"class":85},[68,53029,600],{"class":92},[68,53031,112],{"class":85},[68,53033,53034,53037,53039,53041],{"class":70,"line":3219},[68,53035,53036],{"class":92},"            padding",[68,53038,96],{"class":85},[68,53040,600],{"class":92},[68,53042,112],{"class":85},[68,53044,53045],{"class":70,"line":3225},[68,53046,4129],{"class":85},[68,53048,53049],{"class":70,"line":3230},[68,53050,4000],{"emptyLinePlaceholder":1679},[68,53052,53053,53056],{"class":70,"line":3244},[68,53054,53055],{"class":587},"        .box",[68,53057,86],{"class":85},[68,53059,53060,53063,53065,53068],{"class":70,"line":3249},[68,53061,53062],{"class":92},"            display",[68,53064,96],{"class":85},[68,53066,53067],{"class":92},"flex",[68,53069,112],{"class":85},[68,53071,53072,53075,53077,53080,53082],{"class":70,"line":3255},[68,53073,53074],{"class":92},"            width",[68,53076,96],{"class":85},[68,53078,53079],{"class":92},"700",[68,53081,103],{"class":102},[68,53083,112],{"class":85},[68,53085,53086,53089,53091,53093,53095],{"class":70,"line":3276},[68,53087,53088],{"class":92},"            height",[68,53090,96],{"class":85},[68,53092,5572],{"class":92},[68,53094,103],{"class":102},[68,53096,112],{"class":85},[68,53098,53099,53102,53104,53106,53108,53110,53113],{"class":70,"line":3281},[68,53100,53101],{"class":92},"            border-left",[68,53103,96],{"class":85},[68,53105,99],{"class":92},[68,53107,103],{"class":102},[68,53109,106],{"class":92},[68,53111,53112],{"class":92}," pink",[68,53114,112],{"class":85},[68,53116,53117,53120,53122,53124,53126,53128,53130],{"class":70,"line":3295},[68,53118,53119],{"class":92},"            border-bottom",[68,53121,96],{"class":85},[68,53123,99],{"class":92},[68,53125,103],{"class":102},[68,53127,106],{"class":92},[68,53129,53112],{"class":92},[68,53131,112],{"class":85},[68,53133,53134,53136,53138,53140,53142,53144],{"class":70,"line":3300},[68,53135,53025],{"class":92},[68,53137,96],{"class":85},[68,53139,2392],{"class":92},[68,53141,103],{"class":102},[68,53143,603],{"class":92},[68,53145,112],{"class":85},[68,53147,53148,53151,53153,53156],{"class":70,"line":3329},[68,53149,53150],{"class":92},"            justify-content",[68,53152,96],{"class":85},[68,53154,53155],{"class":92},"space-around",[68,53157,112],{"class":85},[68,53159,53160,53163,53165,53168],{"class":70,"line":3334},[68,53161,53162],{"class":92},"            align-items",[68,53164,96],{"class":85},[68,53166,53167],{"class":92},"flex-end",[68,53169,112],{"class":85},[68,53171,53172,53175,53177,53180],{"class":70,"line":3351},[68,53173,53174],{"class":92},"            text-align",[68,53176,96],{"class":85},[68,53178,53179],{"class":92},"center",[68,53181,112],{"class":85},[68,53183,53184],{"class":70,"line":3356},[68,53185,4129],{"class":85},[68,53187,53188],{"class":70,"line":3361},[68,53189,4000],{"emptyLinePlaceholder":1679},[68,53191,53192,53194,53196,53198],{"class":70,"line":3366},[68,53193,53055],{"class":587},[68,53195,2695],{"class":102},[68,53197,82],{"class":81},[68,53199,86],{"class":85},[68,53201,53202,53204,53206,53208],{"class":70,"line":3380},[68,53203,53062],{"class":92},[68,53205,96],{"class":85},[68,53207,53067],{"class":92},[68,53209,112],{"class":85},[68,53211,53212,53214,53216,53218,53220],{"class":70,"line":3385},[68,53213,53074],{"class":92},[68,53215,96],{"class":85},[68,53217,2392],{"class":92},[68,53219,103],{"class":102},[68,53221,112],{"class":85},[68,53223,53224,53227,53229,53232],{"class":70,"line":4177},[68,53225,53226],{"class":92},"            background-color",[68,53228,96],{"class":85},[68,53230,53231],{"class":92},"pink",[68,53233,112],{"class":85},[68,53235,53236,53239,53241,53244],{"class":70,"line":4191},[68,53237,53238],{"class":92},"            flex-direction",[68,53240,96],{"class":85},[68,53242,53243],{"class":92},"column",[68,53245,112],{"class":85},[68,53247,53248,53250,53252,53255],{"class":70,"line":4199},[68,53249,53150],{"class":92},[68,53251,96],{"class":85},[68,53253,53254],{"class":92},"space-between",[68,53256,112],{"class":85},[68,53258,53259],{"class":70,"line":4204},[68,53260,4129],{"class":85},[68,53262,53263],{"class":70,"line":4210},[68,53264,4000],{"emptyLinePlaceholder":1679},[68,53266,53267,53269,53272,53275],{"class":70,"line":4216},[68,53268,53055],{"class":587},[68,53270,53271],{"class":81}," div",[68,53273,53274],{"class":81}," span",[68,53276,86],{"class":85},[68,53278,53279],{"class":70,"line":4221},[68,53280,4000],{"emptyLinePlaceholder":1679},[68,53282,53283,53286,53288,53291,53293],{"class":70,"line":9547},[68,53284,53285],{"class":92},"            margin-top",[68,53287,96],{"class":85},[68,53289,53290],{"class":92},"-20",[68,53292,103],{"class":102},[68,53294,112],{"class":85},[68,53296,53297],{"class":70,"line":9571},[68,53298,4129],{"class":85},[68,53300,53301],{"class":70,"line":9576},[68,53302,4000],{"emptyLinePlaceholder":1679},[68,53304,53305,53307,53309,53312],{"class":70,"line":9582},[68,53306,53055],{"class":587},[68,53308,53271],{"class":81},[68,53310,53311],{"class":81}," h4",[68,53313,86],{"class":85},[68,53315,53316,53319,53321,53324,53326],{"class":70,"line":9609},[68,53317,53318],{"class":92},"            margin-bottom",[68,53320,96],{"class":85},[68,53322,53323],{"class":92},"-35",[68,53325,103],{"class":102},[68,53327,112],{"class":85},[68,53329,53330,53332,53334,53336,53338],{"class":70,"line":9614},[68,53331,53074],{"class":92},[68,53333,96],{"class":85},[68,53335,2092],{"class":92},[68,53337,103],{"class":102},[68,53339,112],{"class":85},[68,53341,53342,53345,53347,53350,53352],{"class":70,"line":9620},[68,53343,53344],{"class":92},"            margin-left",[68,53346,96],{"class":85},[68,53348,53349],{"class":92},"-10",[68,53351,103],{"class":102},[68,53353,112],{"class":85},[68,53355,53356],{"class":70,"line":9632},[68,53357,4129],{"class":85},[68,53359,53360,53363,53365],{"class":70,"line":9644},[68,53361,53362],{"class":85},"    \u003C\u002F",[68,53364,1652],{"class":81},[68,53366,876],{"class":85},[68,53368,53369,53371,53373],{"class":70,"line":9656},[68,53370,886],{"class":85},[68,53372,52925],{"class":81},[68,53374,876],{"class":85},[68,53376,53377],{"class":70,"line":11314},[68,53378,4000],{"emptyLinePlaceholder":1679},[68,53380,53381,53383,53386],{"class":70,"line":11339},[68,53382,861],{"class":85},[68,53384,53385],{"class":81},"body",[68,53387,876],{"class":85},[68,53389,53390],{"class":70,"line":11362},[68,53391,4000],{"emptyLinePlaceholder":1679},[68,53393,53394,53396,53399],{"class":70,"line":11386},[68,53395,52932],{"class":85},[68,53397,53398],{"class":81},"script",[68,53400,876],{"class":85},[68,53402,53403],{"class":70,"line":11391},[68,53404,53405],{"class":74},"        \u002F\u002F 1. 四次弹框效果\n",[68,53407,53408],{"class":70,"line":11396},[68,53409,53410],{"class":74},"        \u002F\u002F 声明一个新的数组\n",[68,53412,53413,53416,53419,53421],{"class":70,"line":11401},[68,53414,53415],{"class":102},"        let",[68,53417,53418],{"class":85}," arr ",[68,53420,869],{"class":102},[68,53422,53423],{"class":85}," []\n",[68,53425,53426,53428,53430,53433,53435,53437,53439,53441,53443,53446,53448,53450],{"class":70,"line":11410},[68,53427,5002],{"class":102},[68,53429,3260],{"class":85},[68,53431,53432],{"class":102},"let",[68,53434,11036],{"class":85},[68,53436,869],{"class":102},[68,53438,1112],{"class":92},[68,53440,11043],{"class":85},[68,53442,3190],{"class":102},[68,53444,53445],{"class":92}," 4",[68,53447,4813],{"class":85},[68,53449,3892],{"class":102},[68,53451,14039],{"class":85},[68,53453,53454],{"class":70,"line":11415},[68,53455,53456],{"class":74},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[68,53458,53459],{"class":70,"line":11421},[68,53460,53461],{"class":74},"            \u002F\u002F arr.push(num)\n",[68,53463,53464,53467,53470,53472,53475,53477,53480,53482,53485],{"class":70,"line":11442},[68,53465,53466],{"class":85},"            arr.",[68,53468,53469],{"class":587},"push",[68,53471,997],{"class":85},[68,53473,53474],{"class":587},"prompt",[68,53476,997],{"class":85},[68,53478,53479],{"class":872},"`请输入第${",[68,53481,2177],{"class":85},[68,53483,53484],{"class":872},"}季度的数据:`",[68,53486,32090],{"class":85},[68,53488,53489],{"class":70,"line":11448},[68,53490,53491],{"class":74},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[68,53493,53494],{"class":70,"line":11462},[68,53495,4129],{"class":85},[68,53497,53498],{"class":70,"line":11468},[68,53499,53500],{"class":74},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[68,53502,53503],{"class":70,"line":11495},[68,53504,53505],{"class":74},"        \u002F\u002F 盒子开头\n",[68,53507,53508,53511,53514,53516,53519],{"class":70,"line":11504},[68,53509,53510],{"class":85},"        document.",[68,53512,53513],{"class":587},"write",[68,53515,997],{"class":85},[68,53517,53518],{"class":872},"` \u003Cdiv class=\"box\">`",[68,53520,1757],{"class":85},[68,53522,53523],{"class":70,"line":11510},[68,53524,4000],{"emptyLinePlaceholder":1679},[68,53526,53527],{"class":70,"line":11518},[68,53528,53529],{"class":74},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[68,53531,53532,53534,53536,53538,53540,53542,53544,53546,53548,53551,53554,53556,53558],{"class":70,"line":11523},[68,53533,5002],{"class":102},[68,53535,3260],{"class":85},[68,53537,53432],{"class":102},[68,53539,11036],{"class":85},[68,53541,869],{"class":102},[68,53543,5692],{"class":92},[68,53545,11043],{"class":85},[68,53547,861],{"class":102},[68,53549,53550],{"class":85}," arr.",[68,53552,53553],{"class":92},"length",[68,53555,4813],{"class":85},[68,53557,3892],{"class":102},[68,53559,14039],{"class":85},[68,53561,53562,53565,53567,53569],{"class":70,"line":18199},[68,53563,53564],{"class":85},"            document.",[68,53566,53513],{"class":587},[68,53568,997],{"class":85},[68,53570,53571],{"class":872},"`\n",[68,53573,53574,53577,53579,53581,53583,53585],{"class":70,"line":18205},[68,53575,53576],{"class":872},"              \u003Cdiv style=\"height: ${",[68,53578,5479],{"class":85},[68,53580,2626],{"class":872},[68,53582,2177],{"class":85},[68,53584,2675],{"class":872},[68,53586,53587],{"class":872},"}px;\">\n",[68,53589,53590,53593,53595,53597,53599,53601],{"class":70,"line":18228},[68,53591,53592],{"class":872},"                \u003Cspan>${",[68,53594,5479],{"class":85},[68,53596,2626],{"class":872},[68,53598,2177],{"class":85},[68,53600,2675],{"class":872},[68,53602,53603],{"class":872},"}\u003C\u002Fspan>\n",[68,53605,53606,53609,53611,53613,53615],{"class":70,"line":18234},[68,53607,53608],{"class":872},"                \u003Ch4>第${",[68,53610,2177],{"class":85},[68,53612,47159],{"class":102},[68,53614,1112],{"class":92},[68,53616,53617],{"class":872},"}季度\u003C\u002Fh4>\n",[68,53619,53620],{"class":70,"line":18257},[68,53621,53622],{"class":872},"              \u003C\u002Fdiv>          \n",[68,53624,53625,53628],{"class":70,"line":18271},[68,53626,53627],{"class":872},"            `",[68,53629,1757],{"class":85},[68,53631,53632],{"class":70,"line":18291},[68,53633,4129],{"class":85},[68,53635,53636],{"class":70,"line":18297},[68,53637,53638],{"class":74},"        \u002F\u002F 盒子结尾\n",[68,53640,53641,53643,53645,53647,53650],{"class":70,"line":18308},[68,53642,53510],{"class":85},[68,53644,53513],{"class":587},[68,53646,997],{"class":85},[68,53648,53649],{"class":872},"` \u003C\u002Fdiv>`",[68,53651,1757],{"class":85},[68,53653,53654,53656,53658],{"class":70,"line":18331},[68,53655,53362],{"class":85},[68,53657,53398],{"class":81},[68,53659,876],{"class":85},[68,53661,53662,53664,53666],{"class":70,"line":18353},[68,53663,886],{"class":85},[68,53665,53385],{"class":81},[68,53667,876],{"class":85},[68,53669,53670],{"class":70,"line":18358},[68,53671,4000],{"emptyLinePlaceholder":1679},[68,53673,53674,53676,53678],{"class":70,"line":18364},[68,53675,886],{"class":85},[68,53677,52228],{"class":81},[68,53679,876],{"class":85},[43,53681,53683],{"id":53682},"_284-冒泡排序","2.8.4 冒泡排序",[58,53685,53687],{"className":52226,"code":53686,"language":52228,"meta":63,"style":63},"\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",[65,53688,53689,53699,53713,53717,53725,53740,53760,53772,53780,53784,53792,53800,53832,53865,53902,53907,53926,53931,53944,53959,53975,53979,53984,53988,53998,54007,54015,54019],{"__ignoreMap":63},[68,53690,53691,53693,53695,53697],{"class":70,"line":71},[68,53692,52890],{"class":85},[68,53694,52893],{"class":81},[68,53696,52896],{"class":587},[68,53698,876],{"class":85},[68,53700,53701,53703,53705,53707,53709,53711],{"class":70,"line":78},[68,53702,861],{"class":85},[68,53704,52228],{"class":81},[68,53706,52907],{"class":587},[68,53708,869],{"class":85},[68,53710,52912],{"class":872},[68,53712,876],{"class":85},[68,53714,53715],{"class":70,"line":89},[68,53716,4000],{"emptyLinePlaceholder":1679},[68,53718,53719,53721,53723],{"class":70,"line":115},[68,53720,861],{"class":85},[68,53722,52925],{"class":81},[68,53724,876],{"class":85},[68,53726,53727,53730,53732,53734,53736,53738],{"class":70,"line":280},[68,53728,53729],{"class":85},"  \u003C",[68,53731,52935],{"class":81},[68,53733,52938],{"class":587},[68,53735,869],{"class":85},[68,53737,52943],{"class":872},[68,53739,876],{"class":85},[68,53741,53742,53744,53746,53748,53750,53752,53754,53756,53758],{"class":70,"line":301},[68,53743,53729],{"class":85},[68,53745,52935],{"class":81},[68,53747,16516],{"class":587},[68,53749,869],{"class":85},[68,53751,52982],{"class":872},[68,53753,52962],{"class":587},[68,53755,869],{"class":85},[68,53757,52989],{"class":872},[68,53759,876],{"class":85},[68,53761,53762,53764,53766,53768,53770],{"class":70,"line":320},[68,53763,53729],{"class":85},[68,53765,52998],{"class":81},[68,53767,53001],{"class":85},[68,53769,52998],{"class":81},[68,53771,876],{"class":85},[68,53773,53774,53776,53778],{"class":70,"line":2915},[68,53775,886],{"class":85},[68,53777,52925],{"class":81},[68,53779,876],{"class":85},[68,53781,53782],{"class":70,"line":2921},[68,53783,4000],{"emptyLinePlaceholder":1679},[68,53785,53786,53788,53790],{"class":70,"line":2933},[68,53787,861],{"class":85},[68,53789,53385],{"class":81},[68,53791,876],{"class":85},[68,53793,53794,53796,53798],{"class":70,"line":3214},[68,53795,53729],{"class":85},[68,53797,53398],{"class":81},[68,53799,876],{"class":85},[68,53801,53802,53805,53807,53809,53812,53814,53816,53818,53820,53822,53824,53826,53828,53830],{"class":70,"line":3219},[68,53803,53804],{"class":102},"    let",[68,53806,53418],{"class":85},[68,53808,869],{"class":102},[68,53810,53811],{"class":85}," [",[68,53813,2055],{"class":92},[68,53815,1002],{"class":85},[68,53817,2029],{"class":92},[68,53819,1002],{"class":85},[68,53821,288],{"class":92},[68,53823,1002],{"class":85},[68,53825,267],{"class":92},[68,53827,1002],{"class":85},[68,53829,99],{"class":92},[68,53831,34839],{"class":85},[68,53833,53834,53836,53838,53840,53842,53844,53846,53848,53850,53852,53854,53857,53859,53861,53863],{"class":70,"line":3225},[68,53835,4800],{"class":102},[68,53837,3260],{"class":85},[68,53839,53432],{"class":102},[68,53841,11036],{"class":85},[68,53843,869],{"class":102},[68,53845,5692],{"class":92},[68,53847,11043],{"class":85},[68,53849,861],{"class":102},[68,53851,53550],{"class":85},[68,53853,53553],{"class":92},[68,53855,53856],{"class":102}," -",[68,53858,1112],{"class":92},[68,53860,4813],{"class":85},[68,53862,3892],{"class":102},[68,53864,14039],{"class":85},[68,53866,53867,53870,53872,53874,53876,53878,53880,53882,53884,53886,53888,53890,53892,53894,53896,53898,53900],{"class":70,"line":3230},[68,53868,53869],{"class":102},"      for",[68,53871,3260],{"class":85},[68,53873,53432],{"class":102},[68,53875,11098],{"class":85},[68,53877,869],{"class":102},[68,53879,5692],{"class":92},[68,53881,11105],{"class":85},[68,53883,861],{"class":102},[68,53885,53550],{"class":85},[68,53887,53553],{"class":92},[68,53889,53856],{"class":102},[68,53891,11036],{"class":85},[68,53893,2268],{"class":102},[68,53895,1112],{"class":92},[68,53897,11112],{"class":85},[68,53899,3892],{"class":102},[68,53901,14039],{"class":85},[68,53903,53904],{"class":70,"line":3244},[68,53905,53906],{"class":74},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[68,53908,53909,53911,53914,53916,53919,53921,53923],{"class":70,"line":3249},[68,53910,4097],{"class":102},[68,53912,53913],{"class":85}," (arr[j] ",[68,53915,2695],{"class":102},[68,53917,53918],{"class":85}," arr[j ",[68,53920,2217],{"class":102},[68,53922,1112],{"class":92},[68,53924,53925],{"class":85},"]) {\n",[68,53927,53928],{"class":70,"line":3255},[68,53929,53930],{"class":74},"          \u002F\u002F 交换两个变量\n",[68,53932,53933,53936,53939,53941],{"class":70,"line":3276},[68,53934,53935],{"class":102},"          let",[68,53937,53938],{"class":85}," tmp ",[68,53940,869],{"class":102},[68,53942,53943],{"class":85}," arr[j]\n",[68,53945,53946,53949,53951,53953,53955,53957],{"class":70,"line":3281},[68,53947,53948],{"class":85},"          arr[j] ",[68,53950,869],{"class":102},[68,53952,53918],{"class":85},[68,53954,2217],{"class":102},[68,53956,1112],{"class":92},[68,53958,34839],{"class":85},[68,53960,53961,53964,53966,53968,53970,53972],{"class":70,"line":3295},[68,53962,53963],{"class":85},"          arr[j ",[68,53965,2217],{"class":102},[68,53967,1112],{"class":92},[68,53969,6042],{"class":85},[68,53971,869],{"class":102},[68,53973,53974],{"class":85}," tmp\n",[68,53976,53977],{"class":70,"line":3300},[68,53978,4129],{"class":85},[68,53980,53981],{"class":70,"line":3329},[68,53982,53983],{"class":85},"      }\n",[68,53985,53986],{"class":70,"line":3334},[68,53987,3787],{"class":85},[68,53989,53990,53993,53995],{"class":70,"line":3351},[68,53991,53992],{"class":85},"    document.",[68,53994,53513],{"class":587},[68,53996,53997],{"class":85},"(arr)\n",[68,53999,54000,54003,54005],{"class":70,"line":3356},[68,54001,54002],{"class":85},"  \u003C\u002F",[68,54004,53398],{"class":81},[68,54006,876],{"class":85},[68,54008,54009,54011,54013],{"class":70,"line":3361},[68,54010,886],{"class":85},[68,54012,53385],{"class":81},[68,54014,876],{"class":85},[68,54016,54017],{"class":70,"line":3366},[68,54018,4000],{"emptyLinePlaceholder":1679},[68,54020,54021,54023,54025],{"class":70,"line":3380},[68,54022,886],{"class":85},[68,54024,52228],{"class":81},[68,54026,876],{"class":85},[19,54028,54029],{},[38,54030],{"alt":63,"src":54031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54033,54034],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54036,54037],{},"let arr = [4, 2, 5, 1, 3]",[19,54039,54040],{},"\u002F\u002F 1.升序排列写法",[19,54042,54043],{},"arr.sort(function (a, b) {",[19,54045,54046],{},"return a - b",[19,54048,54049],{},"})",[19,54051,54052],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54054,54055],{},"\u002F\u002F 降序排列写法",[19,54057,54043],{},[19,54059,54060],{},"return b - a",[19,54062,54049],{},[19,54064,54065],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54067,54069],{"id":54068},"_29-函数","2.9 函数",[19,54071,54072],{},[38,54073],{"alt":63,"src":54074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54076,54077],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54079,54080],{},"函数的声明用function",[19,54082,54083],{},"函数里边可以嵌套函数",[43,54085,54087],{"id":54086},"_291-函数传参","2.9.1 函数传参",[19,54089,54090],{},[38,54091],{"alt":63,"src":54092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54094,54095],{},[38,54096],{"alt":63,"src":54097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[168,54099,54100,54103,54106,54109,54112,54115],{},[51,54101,54102],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[51,54104,54105],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[51,54107,54108],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[51,54110,54111],{},"开发中尽量保持形参和实参个数一致",[51,54113,54114],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[51,54116,54117],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54119,54120],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[43,54122,54124],{"id":54123},"_292-函数的返回值","2.9.2 函数的返回值",[19,54126,54127],{},[38,54128],{"alt":63,"src":54129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54131,54132],{},[38,54133],{"alt":63,"src":54134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[168,54136,54137,54140,54143,54146,54149],{},[51,54138,54139],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[51,54141,54142],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[51,54144,54145],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[51,54147,54148],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[51,54150,54151],{},"断点调试:进入函数内部看执行过程F11",[43,54153,54155],{"id":54154},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[58,54157,54159],{"className":52226,"code":54158,"language":52228,"meta":63,"style":63},"    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",[65,54160,54161,54166,54171,54175,54180],{"__ignoreMap":63},[68,54162,54163],{"class":70,"line":71},[68,54164,54165],{"class":85},"    function fn(a, b) {\n",[68,54167,54168],{"class":70,"line":78},[68,54169,54170],{"class":85},"      console.log(a + b);\n",[68,54172,54173],{"class":70,"line":89},[68,54174,3787],{"class":85},[68,54176,54177],{"class":70,"line":115},[68,54178,54179],{"class":85},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[68,54181,54182],{"class":70,"line":280},[68,54183,54184],{"class":85},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[43,54186,54188],{"id":54187},"_294-作用域","2.9.4 作用域",[168,54190,54191,54197,54202,54205,54208],{},[51,54192,54193,54194],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1890,54195,54196],{},"作用域",[51,54198,54199],{},[1890,54200,54201],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[51,54203,54204],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[51,54206,54207],{},"函数内部可以直接所使用全局变量",[51,54209,54210],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54212,16230],{},[58,54214,54216],{"className":52226,"code":54215,"language":52228,"meta":63,"style":63},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[65,54217,54218,54223,54228,54232,54237,54242,54247],{"__ignoreMap":63},[68,54219,54220],{"class":70,"line":71},[68,54221,54222],{"class":85},"    function fun() {\n",[68,54224,54225],{"class":70,"line":78},[68,54226,54227],{"class":85},"      num = 10\n",[68,54229,54230],{"class":70,"line":89},[68,54231,3787],{"class":85},[68,54233,54234],{"class":70,"line":115},[68,54235,54236],{"class":85},"    fun()\n",[68,54238,54239],{"class":70,"line":280},[68,54240,54241],{"class":85},"    console.log(num)\n",[68,54243,54244],{"class":70,"line":301},[68,54245,54246],{"class":85},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[68,54248,54249],{"class":70,"line":320},[68,54250,54251],{"class":85},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[168,54253,54254,54257],{},[51,54255,54256],{},"函数内部的形参可以看做是局部变量",[51,54258,54259],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54261,54262,54263],{},"变量访问原则： ",[1890,54264,54265],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[43,54267,54269],{"id":54268},"_295-匿名函数","2.9.5 匿名函数",[19,54271,54272],{},"函数可以分为具名函数和匿名函数",[19,54274,54275],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[48,54277,54278],{},[51,54279,54280],{},"函数表达式",[19,54282,54283],{},[38,54284],{"alt":63,"src":54285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54287,54288],{},"里边也可以写参数",[19,54290,54291],{},"具名函数调用位置可以随意调整；",[19,54293,54294],{},"匿名函数函数表达式形式只能在声明后才可以使用",[48,54296,54297],{"start":78},[51,54298,54299],{},"立即执行函数",[19,54301,54302],{},[38,54303],{"alt":63,"src":54304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54306,54307],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54309,54310],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54312,54313],{},"(function () {})();",[19,54315,54316],{},"不要落下最后的;",[19,54318,54319],{},"立即执行函数必须要加;",[19,54321,54322],{},"分号写前写后都没问题",[19,54324,54325],{},"写前：",[19,54327,54328],{},"(function() {})()",[19,54330,54331],{},";(function () {})();",[19,54333,54334],{},"写后:",[19,54336,54337],{},"(function() {})();",[19,54339,54313],{},[19,54341,54342],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54344,54345],{},"还有一种写法：",[19,54347,54348],{},"(function(){}());",[19,54350,54351],{},"或者:",[19,54353,54354],{},"!function(){}();",[19,54356,54357],{},"立即执行函数有时候也是可以加名字的：",[19,54359,54360],{},"(function flexible(window,document) {}(window,document));",[19,54362,54363],{},"省一些调用方法",[43,54365,54367],{"id":54366},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54369,54370],{},[38,54371],{"alt":63,"src":54372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54374,54375],{},"这样就不用非得给x,y初始化了",[19,54377,54378],{},[38,54379],{"alt":63,"src":54380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54382,54383],{},"代码执行时先看左边",[19,54385,54386],{},"例如：console.log(false && 3+5)",[19,54388,54389],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54391,54392],{},"&&都是真时，就返回最后一个真值",[19,54394,54395],{},"console.log(11 && 22)",[19,54397,54398],{},"输出22",[19,54400,54401],{},"逻辑与：遇真则真",[19,54403,16230],{},[19,54405,54406],{},"let age=1",[19,54408,54409],{},"console.log(11 || age++)",[19,54411,54412],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54414,54415],{},"console.log(11 || 22)",[19,54417,54418],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54420,54421],{},"||如果都是假的话，就取最后一个假的值了",[43,54423,54425],{"id":54424},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54427,54428],{},"显示转换：",[19,54430,54431,54434,54435],{},[1890,54432,54433],{},"记忆","： ",[1890,54436,54437],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54439,54440],{},"空字符串为假，其他字符串全为真",[19,54442,54443],{},[38,54444],{"alt":63,"src":54445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54447,54448],{},"隐式转换：",[19,54450,54451],{},[38,54452],{"alt":63,"src":54453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54455,54456],{},"隐式转换:",[19,54458,54459],{},"null+3=3",[19,54461,54462],{},"undefined+3=NaN",[19,54464,54465],{},"null==undefined 输出true,他两个都当0看",[19,54467,54468],{},"null===undefined 输出false",[19,54470,54471],{},"undefined做任何操作都是NaN",[19,54473,54474],{},"NaN不等于NaN，NaN表示计算错误",[14,54476,54478],{"id":54477},"_210-对象","2.10 对象",[43,54480,54482],{"id":54481},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54484,54485],{},"对象也是一种数据类型，里边的数据是无序的",[19,54487,54488],{},"对象由属性和方法组成",[19,54490,54491],{},[38,54492],{"alt":63,"src":54493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54495,54496],{},[38,54497],{"alt":63,"src":54498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54500,54501],{},[38,54502],{"alt":63,"src":54503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[43,54505,54507],{"id":54506},"_2102-对象属性","2.10.2 对象属性",[19,54509,54510],{},[38,54511],{"alt":63,"src":54512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[48,54514,54515],{},[51,54516,54517],{},"查询对象",[19,54519,54520],{},"对象名.属性 goods.uname",[19,54522,54523],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54525,54526],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54528,54529],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54531,54532],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[48,54534,54535],{"start":78},[51,54536,54537],{},"重新赋值",[19,54539,54540],{},"对象名.属性=新值",[48,54542,54543],{"start":89},[51,54544,54545],{},"增加新数据",[19,54547,54540],{},[48,54549,54550],{"start":115},[51,54551,54552],{},"删除对象中的属性",[19,54554,54555],{},"delete 对象名.属性",[43,54557,54559],{"id":54558},"_2103-对象方法","2.10.3 对象方法",[19,54561,54562],{},[38,54563],{"alt":63,"src":54564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54566,54567],{},"后边跟的是匿名函数",[19,54569,54570],{},"对象外面的叫函数；对象内部的叫方法",[19,54572,54573],{},[38,54574],{"alt":63,"src":54575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[43,54577,54579],{"id":54578},"_2104-遍历对象","2.10.4 遍历对象",[19,54581,54582],{},"理解为加括号的python字典遍历",[19,54584,54585],{},[38,54586],{"alt":63,"src":54587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54589,54590],{},"k是字符串类型",[19,54592,54593],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[58,54595,54597],{"className":52226,"code":54596,"language":52228,"meta":63,"style":63},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[65,54598,54599,54604,54609,54614,54619],{"__ignoreMap":63},[68,54600,54601],{"class":70,"line":71},[68,54602,54603],{"class":85},"   let arr = [1, 2, 3]\n",[68,54605,54606],{"class":70,"line":78},[68,54607,54608],{"class":85},"    for (let k in arr) {\n",[68,54610,54611],{"class":70,"line":89},[68,54612,54613],{"class":85},"      console.log(k)\n",[68,54615,54616],{"class":70,"line":115},[68,54617,54618],{"class":85},"      console.log(arr[k])\n",[68,54620,54621],{"class":70,"line":280},[68,54622,3787],{"class":85},[19,54624,54625],{},[38,54626],{"alt":63,"src":54627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54629,54630],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54632,54633],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54635,54636],{},"for in 得到的k是属性名",[53398,54638,54639],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,54641,54642],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[43,54644,54646],{"id":54645},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54648,54649],{},"数组中放对象信息",[58,54651,54655],{"className":54652,"code":54653,"language":54654,"meta":63,"style":63},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[65,54656,54657,54665,54670,54675,54680,54685,54690,54695,54700,54705,54710,54715,54720,54724,54728],{"__ignoreMap":63},[68,54658,54659,54661,54663],{"class":70,"line":71},[68,54660,861],{"class":85},[68,54662,53398],{"class":81},[68,54664,876],{"class":85},[68,54666,54667],{"class":70,"line":78},[68,54668,54669],{"class":85},"    let students = [\n",[68,54671,54672],{"class":70,"line":89},[68,54673,54674],{"class":85},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[68,54676,54677],{"class":70,"line":115},[68,54678,54679],{"class":85},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[68,54681,54682],{"class":70,"line":280},[68,54683,54684],{"class":85},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[68,54686,54687],{"class":70,"line":301},[68,54688,54689],{"class":85},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[68,54691,54692],{"class":70,"line":320},[68,54693,54694],{"class":85},"    ]\n",[68,54696,54697],{"class":70,"line":2915},[68,54698,54699],{"class":85},"    for (let i = 0; i \u003C students.length; i++) {\n",[68,54701,54702],{"class":70,"line":2921},[68,54703,54704],{"class":85},"      for (let k in students[i]) {\n",[68,54706,54707],{"class":70,"line":2933},[68,54708,54709],{"class":85},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[68,54711,54712],{"class":70,"line":3214},[68,54713,54714],{"class":85},"        \u002F\u002F输出每个人的名字：\n",[68,54716,54717],{"class":70,"line":3219},[68,54718,54719],{"class":85},"        \u002F\u002Fconsole.log(students[i].name)\n",[68,54721,54722],{"class":70,"line":3225},[68,54723,53983],{"class":85},[68,54725,54726],{"class":70,"line":3230},[68,54727,3787],{"class":85},[68,54729,54730,54732,54734],{"class":70,"line":3244},[68,54731,54002],{"class":85},[68,54733,53398],{"class":81},[68,54735,876],{"class":85},[43,54737,54739],{"id":54738},"_2106-内置对象","2.10.6 内置对象",[19,54741,54742],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[48,54744,54745],{},[51,54746,54747],{},"数学对象Math",[19,54749,54750],{},[38,54751],{"alt":63,"src":54752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54754,54755],{},[1974,54756,54759],{"href":54757,"rel":54758},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25459],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54761,54762],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54764,54765],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54767,54768],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54770,54771],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54773,54774],{},"null属于对象数据类型",[48,54776,54777],{"start":78},[51,54778,54779],{},"生成任意范围随机数",[19,54781,54782],{},[38,54783],{"alt":63,"src":54784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54786,54787],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54789,54790],{},"乘以几就取不到几",[19,54792,54793],{},"取数组中的随机元素：",[19,54795,54796],{},"let arr = ['red', 'green', 'blue']",[19,54798,54799],{},"let random = Math.floor(Math.random() * arr.length)",[19,54801,54802],{},"console.log(arr[random])",[19,54804,54805],{},"这个函数得到的是全闭区间",[19,54807,54808],{},"function getRandom(N, M) {",[19,54810,54811],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54813,2681],{},[19,54815,54816],{},"console.log(getRandom(4, 8))",[43,54818,54820],{"id":54819},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54822,54823],{},[38,54824],{"alt":63,"src":54825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54827,54828],{},[38,54829],{"alt":63,"src":54830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54832,54833],{},[38,54834],{"alt":63,"src":54835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54837,54838],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54840,54841],{},[38,54842],{"alt":63,"src":54843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54845,54846],{},[38,54847],{"alt":63,"src":54848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54850,54851],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54853,54854],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54856,54857],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1652,54859,54860],{},"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":63,"searchDepth":78,"depth":78,"links":54862},[54863,54871,54872,54873,54874,54875,54882,54886,54892,54901],{"id":52061,"depth":78,"text":52062,"children":54864},[54865,54866,54867,54868,54869,54870],{"id":52065,"depth":89,"text":52066},{"id":52082,"depth":89,"text":52083},{"id":52122,"depth":89,"text":52123},{"id":52134,"depth":89,"text":52135},{"id":52143,"depth":89,"text":52144},{"id":52191,"depth":89,"text":52192},{"id":52201,"depth":78,"text":52202},{"id":52289,"depth":78,"text":52290},{"id":52312,"depth":78,"text":52313},{"id":52324,"depth":78,"text":52325},{"id":52511,"depth":78,"text":52512,"children":54876},[54877,54878,54879,54880,54881],{"id":52515,"depth":89,"text":52516},{"id":52524,"depth":89,"text":52525},{"id":52552,"depth":89,"text":52553},{"id":52588,"depth":89,"text":52589},{"id":52613,"depth":89,"text":52614},{"id":52625,"depth":78,"text":52626,"children":54883},[54884,54885],{"id":52646,"depth":89,"text":52647},{"id":52740,"depth":89,"text":52741},{"id":52798,"depth":78,"text":52799,"children":54887},[54888,54889,54890,54891],{"id":52802,"depth":89,"text":52803},{"id":52826,"depth":89,"text":52827},{"id":52879,"depth":89,"text":52880},{"id":53682,"depth":89,"text":53683},{"id":54068,"depth":78,"text":54069,"children":54893},[54894,54895,54896,54897,54898,54899,54900],{"id":54086,"depth":89,"text":54087},{"id":54123,"depth":89,"text":54124},{"id":54154,"depth":89,"text":54155},{"id":54187,"depth":89,"text":54188},{"id":54268,"depth":89,"text":54269},{"id":54366,"depth":89,"text":54367},{"id":54424,"depth":89,"text":54425},{"id":54477,"depth":78,"text":54478,"children":54902},[54903,54904,54905,54906,54907,54908,54909],{"id":54481,"depth":89,"text":54482},{"id":54506,"depth":89,"text":54507},{"id":54558,"depth":89,"text":54559},{"id":54578,"depth":89,"text":54579},{"id":54645,"depth":89,"text":54646},{"id":54738,"depth":89,"text":54739},{"id":54819,"depth":89,"text":54820},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52053,"description":1676},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54916,"title":54917,"body":54918,"description":1676,"extension":1677,"meta":78251,"navigation":1679,"path":78252,"seo":78253,"stem":78254,"__hash__":78255},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54919,"toc":78191},[54920,54923,54926,54929,54934,54937,54940,54943,54947,54951,54957,54962,54970,54977,54980,54984,54989,54994,54999,55002,55005,55016,55019,55023,55026,55029,55034,55039,55044,55047,55050,55141,55144,55149,55152,55157,55160,55163,55168,55171,55176,55180,55183,55197,55201,55206,55209,55212,55216,55221,55224,55228,55232,55237,55241,55246,55249,55252,55255,55258,55261,55264,55269,55274,55302,55305,55308,55311,55316,55319,55322,55325,55328,55332,55361,55365,55370,55375,55378,55381,55384,55389,55504,55509,55514,55675,55680,55683,55687,55692,55697,55700,55703,55706,55709,55712,55715,55718,55721,55724,55727,55730,55733,55736,55739,55741,55744,55747,55750,55755,55759,56156,56159,56165,56169,56174,57456,57461,57464,57467,57470,57475,58671,58675,58681,58686,58689,58694,58699,58703,58707,58712,58715,58720,58723,58726,58730,59638,59641,59645,59866,59869,59872,59875,60101,60104,60328,60331,60335,60340,60343,60346,60574,60577,60610,60613,60617,60622,60626,60629,60632,60635,60638,60641,60644,60647,60652,61932,61936,61939,63032,63036,63039,63042,63045,63048,63052,63055,63058,63060,63068,64548,64552,64555,64558,64561,64770,64773,64777,64781,64786,64791,64794,64797,64802,64806,64811,64814,64923,64927,64932,64937,64940,64943,64947,64952,64957,64962,64965,64968,64979,64982,64987,64992,64995,64998,65071,65075,65080,65083,65085,65096,65100,65105,66431,66434,66437,66440,66442,66445,66448,66451,66454,66457,66460,66463,66466,66469,66472,66475,66478,66480,66482,66485,66489,67582,67585,67588,67604,67618,67621,67626,67632,67637,67641,67645,67650,67654,67659,68101,68106,68109,68113,68118,68121,68124,68128,68133,68137,68142,68147,68151,68156,68161,68164,68169,68174,68178,68183,68188,68292,68295,68299,68304,68670,68673,68676,68679,68682,68685,68688,68691,68694,69990,69994,69999,70004,70007,70010,70013,70016,70018,70023,70028,70031,70035,70040,70045,70050,70053,70056,70059,70062,70065,70070,70073,70077,70082,70087,70091,70096,70099,70104,70107,70110,70113,70116,70119,70124,70127,70130,70133,70136,70140,70145,70148,70152,70157,70160,70163,70167,70196,70199,70203,70207,70212,70216,70221,70224,70227,70230,70233,70236,70239,70242,70245,70248,70251,70254,70257,70260,70263,70267,70272,70277,70280,70284,70288,70293,70296,70300,70303,70306,70311,70316,70321,70326,70331,70334,70337,70342,70347,70351,70356,70359,70364,70367,70370,70373,70376,70381,70384,70393,70397,70402,70405,70408,70412,70415,70420,70424,70427,70433,70439,70443,70469,70472,72033,72036,72529,72532,72537,72542,72547,72551,72556,72561,72566,72570,72575,72578,72581,72584,72587,72591,72594,72599,72602,72607,72611,72616,72619,72624,72629,72634,72637,72640,72645,72650,72653,72656,72660,72663,72668,72671,72676,72679,72684,72689,72694,72697,72702,72767,72770,72781,72785,72790,72962,72966,72971,72974,72977,72980,72984,72995,72999,73002,73007,73012,73015,73018,73021,73024,73027,73029,73032,73035,73038,73043,73046,73051,73054,73058,73061,73064,73078,73082,73085,73140,73145,73148,73151,73156,73159,73163,73168,73298,73302,73307,73312,73393,73398,73402,73405,73410,73415,73421,73424,73427,73430,73434,73439,73442,73453,73457,73474,76520,76524,76527,76530,76533,76554,76558,76561,76569,76572,76577,76580,76583,76588,76593,76597,76618,76622,76627,76630,76633,76636,76639,76643,76648,76651,76655,76660,76663,76668,76671,76676,76679,76684,77887,77891,77896,77899,77904,78188],[10,54921,54917],{"id":54922},"_3web-apis",[19,54924,54925],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54927,54928],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54930,54931],{},[38,54932],{"alt":63,"src":54933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54935,54936],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54938,54939],{},"建议数组和对象使用 const 来声明",[19,54941,54942],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54944,54946],{"id":54945},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[43,54948,54950],{"id":54949},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54952,54953,54956],{},[65,54954,54955],{},"document"," = HTML 文件解析后的对象化表示；",[19,54958,54959,54961],{},[65,54960,54955],{}," ≠ HTML 文件本身",[19,54963,54964,54969],{},[1890,54965,54966],{},[65,54967,54968],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54971,54972,54976],{},[1890,54973,54974],{},[65,54975,54955],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54978,54979],{},"document实际上为window.document的简写",[43,54981,54983],{"id":54982},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54985,54986],{},[38,54987],{"alt":63,"src":54988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54990,54991],{},[38,54992],{"alt":63,"src":54993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54995,54996],{},[38,54997],{"alt":63,"src":54998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55000,55001],{},"console.dir()",[19,55003,55004],{},"dir用来打印对象",[168,55006,55007,55010,55013],{},[51,55008,55009],{},"任何一个标签，都是一个对象",[51,55011,55012],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[51,55014,55015],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55017,55018],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[43,55020,55022],{"id":55021},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55024,55025],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55027,55028],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55030,55031],{},[1890,55032,55033],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[48,55035,55036],{},[51,55037,55038],{},"利用CSS选择器来获取标签元素",[19,55040,55041],{},[38,55042],{"alt":63,"src":55043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55045,55046],{},"里边的选择器必须必须加引号！！！",[19,55048,55049],{},"只选择第一个元素",[58,55051,55053],{"className":54652,"code":55052,"language":54654,"meta":63,"style":63},"\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",[65,55054,55055,55063,55083,55102,55110,55115,55120,55125,55133],{"__ignoreMap":63},[68,55056,55057,55059,55061],{"class":70,"line":71},[68,55058,861],{"class":85},[68,55060,53385],{"class":81},[68,55062,876],{"class":85},[68,55064,55065,55067,55069,55071,55073,55076,55079,55081],{"class":70,"line":78},[68,55066,53729],{"class":85},[68,55068,82],{"class":81},[68,55070,866],{"class":587},[68,55072,869],{"class":85},[68,55074,55075],{"class":872},"\"box\"",[68,55077,55078],{"class":85},">123\u003C\u002F",[68,55080,82],{"class":81},[68,55082,876],{"class":85},[68,55084,55085,55087,55089,55091,55093,55095,55098,55100],{"class":70,"line":89},[68,55086,53729],{"class":85},[68,55088,82],{"class":81},[68,55090,866],{"class":587},[68,55092,869],{"class":85},[68,55094,55075],{"class":872},[68,55096,55097],{"class":85},">456\u003C\u002F",[68,55099,82],{"class":81},[68,55101,876],{"class":85},[68,55103,55104,55106,55108],{"class":70,"line":115},[68,55105,53729],{"class":85},[68,55107,53398],{"class":81},[68,55109,876],{"class":85},[68,55111,55112],{"class":70,"line":280},[68,55113,55114],{"class":85},"    \u002F\u002F 1.获取匹配的第一个元素\n",[68,55116,55117],{"class":70,"line":301},[68,55118,55119],{"class":85},"    const box = document.querySelector('div')\n",[68,55121,55122],{"class":70,"line":320},[68,55123,55124],{"class":85},"    console.dir(box)\n",[68,55126,55127,55129,55131],{"class":70,"line":2915},[68,55128,54002],{"class":85},[68,55130,53398],{"class":81},[68,55132,876],{"class":85},[68,55134,55135,55137,55139],{"class":70,"line":2921},[68,55136,886],{"class":85},[68,55138,53385],{"class":81},[68,55140,876],{"class":85},[19,55142,55143],{},"只选123，不选456",[19,55145,55146],{},[38,55147],{"alt":63,"src":55148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55150,55151],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55153,55154],{},[38,55155],{"alt":63,"src":55156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55158,55159],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55161,55162],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[48,55164,55165],{"start":78},[51,55166,55167],{},"其他方法来获取标签元素",[19,55169,55170],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55172,55173],{},[38,55174],{"alt":63,"src":55175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[43,55177,55179],{"id":55178},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55181,55182],{},"设置修改DOM元素内容有两种方式：",[168,55184,55185,55188,55191,55194],{},[51,55186,55187],{},"元素.innerText=''",[51,55189,55190],{},"元素.innerHTML=''",[51,55192,55193],{},"不写字符串输出数字也是可以的",[51,55195,55196],{},"元素.innerHtml=1",[23593,55198,55200],{"id":55199},"_3131-innertext","3.1.3.1 innerText",[19,55202,55203],{},[38,55204],{"alt":63,"src":55205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55207,55208],{},"思路：实现了修改盒子中的内容！",[19,55210,55211],{},"它只显示纯文本，不解析标签",[23593,55213,55215],{"id":55214},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55217,55218],{},[38,55219],{"alt":63,"src":55220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55222,55223],{},"相比于innerText，他的强大之处在于可以解析标签",[43,55225,55227],{"id":55226},"_314-操作元素属性","3.1.4 操作元素属性",[23593,55229,55231],{"id":55230},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55233,55234],{},[38,55235],{"alt":63,"src":55236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23593,55238,55240],{"id":55239},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55242,55243],{},[38,55244],{"alt":63,"src":55245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55247,55248],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55250,55251],{},"div.style.backgroundColor = 'hotpink'",[19,55253,55254],{},"如果按照css的写法，-表示减，就会出错",[19,55256,55257],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55259,55260],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55262,55263],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55265,55266],{},[38,55267],{"alt":63,"src":55268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55270,55271],{},[38,55272],{"alt":63,"src":55273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[48,55275,55276,55279,55282,55285,55288,55291],{},[51,55277,55278],{},"className这个方式就是修改很多样式的时候来使用的！",[51,55280,55281],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[51,55283,55284],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[51,55286,55287],{},"className为属性名，如果还用class的话就导致与关键字冲突",[51,55289,55290],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[51,55292,55293,55294,55299],{},"解析标签的时候就变为了",[82,55295],{"className":55296},[55297,55298],"nav","box",[55300,55301],"br",{},[19,55303,55304],{},"例子：",[82,55306],{"className":55307},[55297],[53398,55309,55310],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55312,55313],{},[38,55314],{"alt":63,"src":55315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55317,55318],{},"追加和删除类名用classList",[19,55320,55321],{},"常用于类似于开关的操作",[19,55323,55324],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55326,55327],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23593,55329,55331],{"id":55330},"_3143-牢记点","3.1.4.3 牢记点",[48,55333,55334,55337,55340,55343,55346,55349,55352,55355,55358],{},[51,55335,55336],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[51,55338,55339],{},"使用style属性操作css时不要忘记引号",[51,55341,55342],{},"使用className或者classList时也不要忘记引号",[51,55344,55345],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[51,55347,55348],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[51,55350,55351],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[51,55353,55354],{},"若： let arr=['1','2',3] arr[0]=1",[51,55356,55357],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[51,55359,55360],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[43,55362,55364],{"id":55363},"_315-操作表单元素","3.1.5 操作表单元素",[48,55366,55367],{},[51,55368,55369],{},"天生的属性",[19,55371,55372],{},[38,55373],{"alt":63,"src":55374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55376,55377],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55379,55380],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55382,55383],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55385,55386],{},[38,55387],{"alt":63,"src":55388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[58,55390,55392],{"className":52226,"code":55391,"language":52228,"meta":63,"style":63},"在复选框中如果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",[65,55393,55394,55399,55431,55436,55441,55446,55451,55455,55460,55465,55482,55494,55499],{"__ignoreMap":63},[68,55395,55396],{"class":70,"line":71},[68,55397,55398],{"class":85},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[68,55400,55401,55403,55406,55409,55411,55414,55416,55418,55420,55422,55424,55426,55429],{"class":70,"line":78},[68,55402,861],{"class":85},[68,55404,55405],{"class":81},"input",[68,55407,55408],{"class":587}," type",[68,55410,869],{"class":85},[68,55412,55413],{"class":872},"\"checkbox\"",[68,55415,16516],{"class":587},[68,55417,869],{"class":85},[68,55419,9251],{"class":872},[68,55421,16555],{"class":587},[68,55423,869],{"class":85},[68,55425,9251],{"class":872},[68,55427,55428],{"class":587}," checked",[68,55430,876],{"class":85},[68,55432,55433],{"class":70,"line":89},[68,55434,55435],{"class":85},"不选的话：\n",[68,55437,55438],{"class":70,"line":115},[68,55439,55440],{"class":85},"const input = document.querySelector('input')\n",[68,55442,55443],{"class":70,"line":280},[68,55444,55445],{"class":85},"input.checked=false\n",[68,55447,55448],{"class":70,"line":301},[68,55449,55450],{"class":85},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[68,55452,55453],{"class":70,"line":320},[68,55454,4000],{"emptyLinePlaceholder":1679},[68,55456,55457],{"class":70,"line":2915},[68,55458,55459],{"class":85},"禁用按钮：\n",[68,55461,55462],{"class":70,"line":2921},[68,55463,55464],{"class":85},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[68,55466,55467,55469,55472,55475,55478,55480],{"class":70,"line":2933},[68,55468,861],{"class":85},[68,55470,55471],{"class":81},"button",[68,55473,55474],{"class":587}," disabled",[68,55476,55477],{"class":85},">点击\u003C\u002F",[68,55479,55471],{"class":81},[68,55481,876],{"class":85},[68,55483,55484,55486,55488,55490,55492],{"class":70,"line":3214},[68,55485,861],{"class":85},[68,55487,55471],{"class":81},[68,55489,55477],{"class":85},[68,55491,55471],{"class":81},[68,55493,876],{"class":85},[68,55495,55496],{"class":70,"line":3219},[68,55497,55498],{"class":85},"const bt = document.querySelector('button')\n",[68,55500,55501],{"class":70,"line":3225},[68,55502,55503],{"class":85},"bt.disabled = false\n",[48,55505,55506],{"start":78},[51,55507,55508],{},"自定义属性",[19,55510,55511],{},[38,55512],{"alt":63,"src":55513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[58,55515,55517],{"className":54652,"code":55516,"language":54654,"meta":63,"style":63},"\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",[65,55518,55519,55527,55555,55574,55593,55612,55631,55639,55644,55649,55654,55659,55667],{"__ignoreMap":63},[68,55520,55521,55523,55525],{"class":70,"line":71},[68,55522,861],{"class":85},[68,55524,53385],{"class":81},[68,55526,876],{"class":85},[68,55528,55529,55531,55533,55536,55538,55540,55543,55545,55548,55551,55553],{"class":70,"line":78},[68,55530,53729],{"class":85},[68,55532,82],{"class":81},[68,55534,55535],{"class":587}," data-id",[68,55537,869],{"class":85},[68,55539,5277],{"class":872},[68,55541,55542],{"class":587}," data-spm",[68,55544,869],{"class":85},[68,55546,55547],{"class":872},"\"我不知道\"",[68,55549,55550],{"class":85},">1\u003C\u002F",[68,55552,82],{"class":81},[68,55554,876],{"class":85},[68,55556,55557,55559,55561,55563,55565,55567,55570,55572],{"class":70,"line":89},[68,55558,53729],{"class":85},[68,55560,82],{"class":81},[68,55562,55535],{"class":587},[68,55564,869],{"class":85},[68,55566,5300],{"class":872},[68,55568,55569],{"class":85},">2\u003C\u002F",[68,55571,82],{"class":81},[68,55573,876],{"class":85},[68,55575,55576,55578,55580,55582,55584,55586,55589,55591],{"class":70,"line":115},[68,55577,53729],{"class":85},[68,55579,82],{"class":81},[68,55581,55535],{"class":587},[68,55583,869],{"class":85},[68,55585,5313],{"class":872},[68,55587,55588],{"class":85},">3\u003C\u002F",[68,55590,82],{"class":81},[68,55592,876],{"class":85},[68,55594,55595,55597,55599,55601,55603,55605,55608,55610],{"class":70,"line":280},[68,55596,53729],{"class":85},[68,55598,82],{"class":81},[68,55600,55535],{"class":587},[68,55602,869],{"class":85},[68,55604,5326],{"class":872},[68,55606,55607],{"class":85},">4\u003C\u002F",[68,55609,82],{"class":81},[68,55611,876],{"class":85},[68,55613,55614,55616,55618,55620,55622,55624,55627,55629],{"class":70,"line":301},[68,55615,53729],{"class":85},[68,55617,82],{"class":81},[68,55619,55535],{"class":587},[68,55621,869],{"class":85},[68,55623,5347],{"class":872},[68,55625,55626],{"class":85},">5\u003C\u002F",[68,55628,82],{"class":81},[68,55630,876],{"class":85},[68,55632,55633,55635,55637],{"class":70,"line":320},[68,55634,53729],{"class":85},[68,55636,53398],{"class":81},[68,55638,876],{"class":85},[68,55640,55641],{"class":70,"line":2915},[68,55642,55643],{"class":85},"    const one = document.querySelector('div')\n",[68,55645,55646],{"class":70,"line":2921},[68,55647,55648],{"class":85},"    console.log(one.dataset)\n",[68,55650,55651],{"class":70,"line":2933},[68,55652,55653],{"class":85},"    console.log(one.dataset.id)\n",[68,55655,55656],{"class":70,"line":3214},[68,55657,55658],{"class":85},"    console.log(one.dataset.spm)\n",[68,55660,55661,55663,55665],{"class":70,"line":3219},[68,55662,54002],{"class":85},[68,55664,53398],{"class":81},[68,55666,876],{"class":85},[68,55668,55669,55671,55673],{"class":70,"line":3225},[68,55670,886],{"class":85},[68,55672,53385],{"class":81},[68,55674,876],{"class":85},[19,55676,55677],{},[38,55678],{"alt":63,"src":55679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55681,55682],{},"document.querySelector选择的是第一个对象（元素）",[43,55684,55686],{"id":55685},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55688,55689],{},[38,55690],{"alt":63,"src":55691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55693,55694],{},[38,55695],{"alt":63,"src":55696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55698,55699],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53398,55701,55702],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55704,55705],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53398,55707,55708],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,55710,55711],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55713,55714],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55716,55717],{},"单位为毫秒！！！",[19,55719,55720],{},"可以搭配匿名函数来用！！！",[19,55722,55723],{},"setInterval(function () {",[19,55725,55726],{},"alert('两秒执行一次')",[19,55728,55729],{},"}, 2000)",[19,55731,55732],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55734,55735],{},"function fn() {",[19,55737,55738],{},"document.write(1)",[19,55740,2681],{},[19,55742,55743],{},"setInterval(fn, 1000)",[19,55745,55746],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55748,55749],{},"setInterval('fn()', 1000)",[19,55751,55752],{},[38,55753],{"alt":63,"src":55754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23593,55756,55758],{"id":55757},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[58,55760,55762],{"className":52226,"code":55761,"language":52228,"meta":63,"style":63},"\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",[65,55763,55764,55774,55788,55792,55800,55814,55834,55846,55854,55858,55866,55903,55908,55913,55918,55926,55934,55956,55964,55969,55991,55996,56001,56012,56017,56037,56045,56060,56075,56086,56091,56101,56111,56115,56124,56128,56136,56144,56148],{"__ignoreMap":63},[68,55765,55766,55768,55770,55772],{"class":70,"line":71},[68,55767,52890],{"class":85},[68,55769,52893],{"class":81},[68,55771,52896],{"class":587},[68,55773,876],{"class":85},[68,55775,55776,55778,55780,55782,55784,55786],{"class":70,"line":78},[68,55777,861],{"class":85},[68,55779,52228],{"class":81},[68,55781,52907],{"class":587},[68,55783,869],{"class":85},[68,55785,52912],{"class":872},[68,55787,876],{"class":85},[68,55789,55790],{"class":70,"line":89},[68,55791,4000],{"emptyLinePlaceholder":1679},[68,55793,55794,55796,55798],{"class":70,"line":115},[68,55795,861],{"class":85},[68,55797,52925],{"class":81},[68,55799,876],{"class":85},[68,55801,55802,55804,55806,55808,55810,55812],{"class":70,"line":280},[68,55803,53729],{"class":85},[68,55805,52935],{"class":81},[68,55807,52938],{"class":587},[68,55809,869],{"class":85},[68,55811,52943],{"class":872},[68,55813,876],{"class":85},[68,55815,55816,55818,55820,55822,55824,55826,55828,55830,55832],{"class":70,"line":301},[68,55817,53729],{"class":85},[68,55819,52935],{"class":81},[68,55821,16516],{"class":587},[68,55823,869],{"class":85},[68,55825,52982],{"class":872},[68,55827,52962],{"class":587},[68,55829,869],{"class":85},[68,55831,52989],{"class":872},[68,55833,876],{"class":85},[68,55835,55836,55838,55840,55842,55844],{"class":70,"line":320},[68,55837,53729],{"class":85},[68,55839,52998],{"class":81},[68,55841,53001],{"class":85},[68,55843,52998],{"class":81},[68,55845,876],{"class":85},[68,55847,55848,55850,55852],{"class":70,"line":2915},[68,55849,886],{"class":85},[68,55851,52925],{"class":81},[68,55853,876],{"class":85},[68,55855,55856],{"class":70,"line":2921},[68,55857,4000],{"emptyLinePlaceholder":1679},[68,55859,55860,55862,55864],{"class":70,"line":2933},[68,55861,861],{"class":85},[68,55863,53385],{"class":81},[68,55865,876],{"class":85},[68,55867,55868,55870,55873,55875,55877,55879,55881,55883,55885,55888,55890,55893,55896,55898,55901],{"class":70,"line":3214},[68,55869,53729],{"class":85},[68,55871,55872],{"class":81},"textarea",[68,55874,16516],{"class":587},[68,55876,869],{"class":85},[68,55878,9251],{"class":872},[68,55880,16555],{"class":587},[68,55882,869],{"class":85},[68,55884,9251],{"class":872},[68,55886,55887],{"class":587}," cols",[68,55889,869],{"class":85},[68,55891,55892],{"class":872},"\"30\"",[68,55894,55895],{"class":587}," rows",[68,55897,869],{"class":85},[68,55899,55900],{"class":872},"\"10\"",[68,55902,876],{"class":85},[68,55904,55905],{"class":70,"line":3219},[68,55906,55907],{"class":85},"        用户注册协议\n",[68,55909,55910],{"class":70,"line":3225},[68,55911,55912],{"class":85},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[68,55914,55915],{"class":70,"line":3230},[68,55916,55917],{"class":85},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[68,55919,55920,55922,55924],{"class":70,"line":3244},[68,55921,53362],{"class":85},[68,55923,55872],{"class":81},[68,55925,876],{"class":85},[68,55927,55928,55930,55932],{"class":70,"line":3249},[68,55929,53729],{"class":85},[68,55931,55300],{"class":81},[68,55933,876],{"class":85},[68,55935,55936,55938,55940,55942,55944,55947,55949,55952,55954],{"class":70,"line":3255},[68,55937,53729],{"class":85},[68,55939,55471],{"class":81},[68,55941,866],{"class":587},[68,55943,869],{"class":85},[68,55945,55946],{"class":872},"\"btn\"",[68,55948,55474],{"class":587},[68,55950,55951],{"class":85},">我已经阅读用户协议(5)\u003C\u002F",[68,55953,55471],{"class":81},[68,55955,876],{"class":85},[68,55957,55958,55960,55962],{"class":70,"line":3276},[68,55959,53729],{"class":85},[68,55961,53398],{"class":81},[68,55963,876],{"class":85},[68,55965,55966],{"class":70,"line":3281},[68,55967,55968],{"class":74},"    \u002F\u002F 1. 获取元素\n",[68,55970,55971,55973,55976,55978,55981,55984,55986,55989],{"class":70,"line":3295},[68,55972,12819],{"class":102},[68,55974,55975],{"class":92}," btn",[68,55977,15161],{"class":102},[68,55979,55980],{"class":85}," document.",[68,55982,55983],{"class":587},"querySelector",[68,55985,997],{"class":85},[68,55987,55988],{"class":872},"'.btn'",[68,55990,1757],{"class":85},[68,55992,55993],{"class":70,"line":3300},[68,55994,55995],{"class":74},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[68,55997,55998],{"class":70,"line":3329},[68,55999,56000],{"class":74},"    \u002F\u002F 2. 倒计时\n",[68,56002,56003,56005,56007,56009],{"class":70,"line":3334},[68,56004,53804],{"class":102},[68,56006,11036],{"class":85},[68,56008,869],{"class":102},[68,56010,56011],{"class":92}," 5\n",[68,56013,56014],{"class":70,"line":3351},[68,56015,56016],{"class":74},"    \u002F\u002F 2.1 开启定时器\n",[68,56018,56019,56021,56024,56026,56029,56031,56034],{"class":70,"line":3356},[68,56020,53804],{"class":102},[68,56022,56023],{"class":85}," n ",[68,56025,869],{"class":102},[68,56027,56028],{"class":587}," setInterval",[68,56030,997],{"class":85},[68,56032,56033],{"class":102},"function",[68,56035,56036],{"class":85}," () {\n",[68,56038,56039,56042],{"class":70,"line":3361},[68,56040,56041],{"class":85},"      i",[68,56043,56044],{"class":102},"--\n",[68,56046,56047,56050,56052,56055,56057],{"class":70,"line":3366},[68,56048,56049],{"class":85},"      btn.innerHTML ",[68,56051,869],{"class":102},[68,56053,56054],{"class":872}," `我已经阅读用户协议(${",[68,56056,2177],{"class":85},[68,56058,56059],{"class":872},"})`\n",[68,56061,56062,56065,56068,56071,56073],{"class":70,"line":3380},[68,56063,56064],{"class":102},"      if",[68,56066,56067],{"class":85}," (i ",[68,56069,56070],{"class":102},"===",[68,56072,5692],{"class":92},[68,56074,14039],{"class":85},[68,56076,56077,56080,56083],{"class":70,"line":3385},[68,56078,56079],{"class":587},"        clearInterval",[68,56081,56082],{"class":85},"(n)  ",[68,56084,56085],{"class":74},"\u002F\u002F 关闭定时器\n",[68,56087,56088],{"class":70,"line":4177},[68,56089,56090],{"class":74},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[68,56092,56093,56096,56098],{"class":70,"line":4191},[68,56094,56095],{"class":85},"        btn.disabled ",[68,56097,869],{"class":102},[68,56099,56100],{"class":92}," false\n",[68,56102,56103,56106,56108],{"class":70,"line":4199},[68,56104,56105],{"class":85},"        btn.innerHTML ",[68,56107,869],{"class":102},[68,56109,56110],{"class":872}," '同意'\n",[68,56112,56113],{"class":70,"line":4204},[68,56114,53983],{"class":85},[68,56116,56117,56120,56122],{"class":70,"line":4210},[68,56118,56119],{"class":85},"    }, ",[68,56121,8009],{"class":92},[68,56123,1757],{"class":85},[68,56125,56126],{"class":70,"line":4216},[68,56127,4000],{"emptyLinePlaceholder":1679},[68,56129,56130,56132,56134],{"class":70,"line":4221},[68,56131,54002],{"class":85},[68,56133,53398],{"class":81},[68,56135,876],{"class":85},[68,56137,56138,56140,56142],{"class":70,"line":9547},[68,56139,886],{"class":85},[68,56141,53385],{"class":81},[68,56143,876],{"class":85},[68,56145,56146],{"class":70,"line":9571},[68,56147,4000],{"emptyLinePlaceholder":1679},[68,56149,56150,56152,56154],{"class":70,"line":9576},[68,56151,886],{"class":85},[68,56153,52228],{"class":81},[68,56155,876],{"class":85},[19,56157,56158],{},"不要一直想着用死循环,避免死循环",[19,56160,56161,56164],{},[65,56162,56163],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23593,56166,56168],{"id":56167},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[48,56170,56171],{},[51,56172,56173],{},"法1",[58,56175,56177],{"className":52226,"code":56176,"language":52228,"meta":63,"style":63},"\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",[65,56178,56179,56189,56203,56207,56215,56229,56249,56261,56269,56275,56286,56297,56301,56305,56312,56324,56328,56332,56339,56351,56365,56378,56392,56396,56400,56407,56418,56429,56440,56452,56464,56476,56480,56484,56492,56502,56515,56527,56540,56544,56548,56555,56565,56577,56589,56600,56611,56621,56633,56645,56649,56653,56662,56674,56686,56714,56727,56731,56735,56742,56753,56757,56765,56773,56777,56785,56799,56814,56838,56846,56861,56874,56882,56903,56915,56927,56939,56951,56963,56975,56987,56996,57004,57012,57020,57032,57055,57074,57093,57112,57131,57150,57169,57189,57193,57213,57232,57252,57273,57284,57301,57311,57321,57331,57336,57341,57346,57351,57376,57389,57393,57416,57420,57428,57436,57444,57448],{"__ignoreMap":63},[68,56180,56181,56183,56185,56187],{"class":70,"line":71},[68,56182,52890],{"class":85},[68,56184,52893],{"class":81},[68,56186,52896],{"class":587},[68,56188,876],{"class":85},[68,56190,56191,56193,56195,56197,56199,56201],{"class":70,"line":78},[68,56192,861],{"class":85},[68,56194,52228],{"class":81},[68,56196,52907],{"class":587},[68,56198,869],{"class":85},[68,56200,52912],{"class":872},[68,56202,876],{"class":85},[68,56204,56205],{"class":70,"line":89},[68,56206,4000],{"emptyLinePlaceholder":1679},[68,56208,56209,56211,56213],{"class":70,"line":115},[68,56210,861],{"class":85},[68,56212,52925],{"class":81},[68,56214,876],{"class":85},[68,56216,56217,56219,56221,56223,56225,56227],{"class":70,"line":280},[68,56218,53729],{"class":85},[68,56220,52935],{"class":81},[68,56222,52938],{"class":587},[68,56224,869],{"class":85},[68,56226,52943],{"class":872},[68,56228,876],{"class":85},[68,56230,56231,56233,56235,56237,56239,56241,56243,56245,56247],{"class":70,"line":301},[68,56232,53729],{"class":85},[68,56234,52935],{"class":81},[68,56236,16516],{"class":587},[68,56238,869],{"class":85},[68,56240,52982],{"class":872},[68,56242,52962],{"class":587},[68,56244,869],{"class":85},[68,56246,52989],{"class":872},[68,56248,876],{"class":85},[68,56250,56251,56253,56255,56257,56259],{"class":70,"line":320},[68,56252,53729],{"class":85},[68,56254,52998],{"class":81},[68,56256,53001],{"class":85},[68,56258,52998],{"class":81},[68,56260,876],{"class":85},[68,56262,56263,56265,56267],{"class":70,"line":2915},[68,56264,53729],{"class":85},[68,56266,1652],{"class":81},[68,56268,876],{"class":85},[68,56270,56271,56273],{"class":70,"line":2921},[68,56272,8002],{"class":81},[68,56274,86],{"class":85},[68,56276,56277,56280,56282,56284],{"class":70,"line":2933},[68,56278,56279],{"class":92},"      padding",[68,56281,96],{"class":85},[68,56283,600],{"class":92},[68,56285,112],{"class":85},[68,56287,56288,56291,56293,56295],{"class":70,"line":3214},[68,56289,56290],{"class":92},"      margin",[68,56292,96],{"class":85},[68,56294,600],{"class":92},[68,56296,112],{"class":85},[68,56298,56299],{"class":70,"line":3219},[68,56300,3787],{"class":85},[68,56302,56303],{"class":70,"line":3225},[68,56304,4000],{"emptyLinePlaceholder":1679},[68,56306,56307,56310],{"class":70,"line":3230},[68,56308,56309],{"class":81},"    li",[68,56311,86],{"class":85},[68,56313,56314,56317,56319,56322],{"class":70,"line":3244},[68,56315,56316],{"class":92},"      list-style",[68,56318,96],{"class":85},[68,56320,56321],{"class":92},"none",[68,56323,112],{"class":85},[68,56325,56326],{"class":70,"line":3249},[68,56327,3787],{"class":85},[68,56329,56330],{"class":70,"line":3255},[68,56331,4000],{"emptyLinePlaceholder":1679},[68,56333,56334,56337],{"class":70,"line":3276},[68,56335,56336],{"class":587},"    .box",[68,56338,86],{"class":85},[68,56340,56341,56344,56346,56349],{"class":70,"line":3281},[68,56342,56343],{"class":92},"      position",[68,56345,96],{"class":85},[68,56347,56348],{"class":92},"relative",[68,56350,112],{"class":85},[68,56352,56353,56356,56358,56361,56363],{"class":70,"line":3295},[68,56354,56355],{"class":92},"      width",[68,56357,96],{"class":85},[68,56359,56360],{"class":92},"976",[68,56362,103],{"class":102},[68,56364,112],{"class":85},[68,56366,56367,56370,56372,56374,56376],{"class":70,"line":3300},[68,56368,56369],{"class":92},"      height",[68,56371,96],{"class":85},[68,56373,3142],{"class":92},[68,56375,103],{"class":102},[68,56377,112],{"class":85},[68,56379,56380,56382,56384,56386,56388,56390],{"class":70,"line":3329},[68,56381,56290],{"class":92},[68,56383,96],{"class":85},[68,56385,2047],{"class":92},[68,56387,103],{"class":102},[68,56389,603],{"class":92},[68,56391,112],{"class":85},[68,56393,56394],{"class":70,"line":3334},[68,56395,3787],{"class":85},[68,56397,56398],{"class":70,"line":3351},[68,56399,4000],{"emptyLinePlaceholder":1679},[68,56401,56402,56405],{"class":70,"line":3356},[68,56403,56404],{"class":587},"    .slider-footer",[68,56406,86],{"class":85},[68,56408,56409,56411,56413,56416],{"class":70,"line":3361},[68,56410,56343],{"class":92},[68,56412,96],{"class":85},[68,56414,56415],{"class":92},"absolute",[68,56417,112],{"class":85},[68,56419,56420,56423,56425,56427],{"class":70,"line":3366},[68,56421,56422],{"class":92},"      left",[68,56424,96],{"class":85},[68,56426,600],{"class":92},[68,56428,112],{"class":85},[68,56430,56431,56434,56436,56438],{"class":70,"line":3380},[68,56432,56433],{"class":92},"      bottom",[68,56435,96],{"class":85},[68,56437,600],{"class":92},[68,56439,112],{"class":85},[68,56441,56442,56444,56446,56448,56450],{"class":70,"line":3385},[68,56443,56355],{"class":92},[68,56445,96],{"class":85},[68,56447,2047],{"class":92},[68,56449,2064],{"class":102},[68,56451,112],{"class":85},[68,56453,56454,56456,56458,56460,56462],{"class":70,"line":4177},[68,56455,56369],{"class":92},[68,56457,96],{"class":85},[68,56459,2311],{"class":92},[68,56461,2064],{"class":102},[68,56463,112],{"class":85},[68,56465,56466,56469,56471,56474],{"class":70,"line":4191},[68,56467,56468],{"class":92},"      background-color",[68,56470,96],{"class":85},[68,56472,56473],{"class":92},"skyblue",[68,56475,112],{"class":85},[68,56477,56478],{"class":70,"line":4199},[68,56479,3787],{"class":85},[68,56481,56482],{"class":70,"line":4204},[68,56483,4000],{"emptyLinePlaceholder":1679},[68,56485,56486,56488,56490],{"class":70,"line":4210},[68,56487,56404],{"class":587},[68,56489,8424],{"class":81},[68,56491,86],{"class":85},[68,56493,56494,56496,56498,56500],{"class":70,"line":4216},[68,56495,56343],{"class":92},[68,56497,96],{"class":85},[68,56499,56415],{"class":92},[68,56501,112],{"class":85},[68,56503,56504,56507,56509,56511,56513],{"class":70,"line":4221},[68,56505,56506],{"class":92},"      font-size",[68,56508,96],{"class":85},[68,56510,2637],{"class":92},[68,56512,103],{"class":102},[68,56514,112],{"class":85},[68,56516,56517,56519,56521,56523,56525],{"class":70,"line":9547},[68,56518,56422],{"class":92},[68,56520,96],{"class":85},[68,56522,2436],{"class":92},[68,56524,103],{"class":102},[68,56526,112],{"class":85},[68,56528,56529,56532,56534,56536,56538],{"class":70,"line":9571},[68,56530,56531],{"class":92},"      top",[68,56533,96],{"class":85},[68,56535,2055],{"class":92},[68,56537,103],{"class":102},[68,56539,112],{"class":85},[68,56541,56542],{"class":70,"line":9576},[68,56543,3787],{"class":85},[68,56545,56546],{"class":70,"line":9582},[68,56547,4000],{"emptyLinePlaceholder":1679},[68,56549,56550,56553],{"class":70,"line":9609},[68,56551,56552],{"class":81},"    ul",[68,56554,86],{"class":85},[68,56556,56557,56559,56561,56563],{"class":70,"line":9614},[68,56558,56343],{"class":92},[68,56560,96],{"class":85},[68,56562,56415],{"class":92},[68,56564,112],{"class":85},[68,56566,56567,56569,56571,56573,56575],{"class":70,"line":9620},[68,56568,56531],{"class":92},[68,56570,96],{"class":85},[68,56572,2517],{"class":92},[68,56574,103],{"class":102},[68,56576,112],{"class":85},[68,56578,56579,56581,56583,56585,56587],{"class":70,"line":9632},[68,56580,56422],{"class":92},[68,56582,96],{"class":85},[68,56584,2436],{"class":92},[68,56586,103],{"class":102},[68,56588,112],{"class":85},[68,56590,56591,56594,56596,56598],{"class":70,"line":9644},[68,56592,56593],{"class":92},"      display",[68,56595,96],{"class":85},[68,56597,53067],{"class":92},[68,56599,112],{"class":85},[68,56601,56602,56605,56607,56609],{"class":70,"line":9656},[68,56603,56604],{"class":92},"      justify-content",[68,56606,96],{"class":85},[68,56608,53254],{"class":92},[68,56610,112],{"class":85},[68,56612,56613,56615,56617,56619],{"class":70,"line":11314},[68,56614,56343],{"class":92},[68,56616,96],{"class":85},[68,56618,56415],{"class":92},[68,56620,112],{"class":85},[68,56622,56623,56625,56627,56629,56631],{"class":70,"line":11339},[68,56624,56355],{"class":92},[68,56626,96],{"class":85},[68,56628,5591],{"class":92},[68,56630,103],{"class":102},[68,56632,112],{"class":85},[68,56634,56635,56637,56639,56641,56643],{"class":70,"line":11362},[68,56636,56369],{"class":92},[68,56638,96],{"class":85},[68,56640,2436],{"class":92},[68,56642,103],{"class":102},[68,56644,112],{"class":85},[68,56646,56647],{"class":70,"line":11386},[68,56648,3787],{"class":85},[68,56650,56651],{"class":70,"line":11391},[68,56652,4000],{"emptyLinePlaceholder":1679},[68,56654,56655,56657,56660],{"class":70,"line":11396},[68,56656,56552],{"class":81},[68,56658,56659],{"class":81}," li",[68,56661,86],{"class":85},[68,56663,56664,56666,56668,56670,56672],{"class":70,"line":11401},[68,56665,56355],{"class":92},[68,56667,96],{"class":85},[68,56669,2436],{"class":92},[68,56671,103],{"class":102},[68,56673,112],{"class":85},[68,56675,56676,56678,56680,56682,56684],{"class":70,"line":11410},[68,56677,56369],{"class":92},[68,56679,96],{"class":85},[68,56681,2436],{"class":92},[68,56683,103],{"class":102},[68,56685,112],{"class":85},[68,56687,56688,56690,56692,56695,56697,56699,56701,56703,56705,56707,56709,56712],{"class":70,"line":11415},[68,56689,56468],{"class":92},[68,56691,96],{"class":85},[68,56693,56694],{"class":92},"rgba",[68,56696,997],{"class":85},[68,56698,600],{"class":92},[68,56700,1002],{"class":85},[68,56702,600],{"class":92},[68,56704,1002],{"class":85},[68,56706,600],{"class":92},[68,56708,1002],{"class":85},[68,56710,56711],{"class":92},".4",[68,56713,1016],{"class":85},[68,56715,56716,56719,56721,56723,56725],{"class":70,"line":11421},[68,56717,56718],{"class":92},"      border-radius",[68,56720,96],{"class":85},[68,56722,2182],{"class":92},[68,56724,103],{"class":102},[68,56726,112],{"class":85},[68,56728,56729],{"class":70,"line":11442},[68,56730,3787],{"class":85},[68,56732,56733],{"class":70,"line":11448},[68,56734,4000],{"emptyLinePlaceholder":1679},[68,56736,56737,56740],{"class":70,"line":11462},[68,56738,56739],{"class":587},"    .activate",[68,56741,86],{"class":85},[68,56743,56744,56746,56748,56751],{"class":70,"line":11468},[68,56745,56468],{"class":92},[68,56747,96],{"class":85},[68,56749,56750],{"class":92},"#f7f7f7",[68,56752,112],{"class":85},[68,56754,56755],{"class":70,"line":11495},[68,56756,3787],{"class":85},[68,56758,56759,56761,56763],{"class":70,"line":11504},[68,56760,54002],{"class":85},[68,56762,1652],{"class":81},[68,56764,876],{"class":85},[68,56766,56767,56769,56771],{"class":70,"line":11510},[68,56768,886],{"class":85},[68,56770,52925],{"class":81},[68,56772,876],{"class":85},[68,56774,56775],{"class":70,"line":11518},[68,56776,4000],{"emptyLinePlaceholder":1679},[68,56778,56779,56781,56783],{"class":70,"line":11523},[68,56780,861],{"class":85},[68,56782,53385],{"class":81},[68,56784,876],{"class":85},[68,56786,56787,56789,56791,56793,56795,56797],{"class":70,"line":18199},[68,56788,53729],{"class":85},[68,56790,82],{"class":81},[68,56792,866],{"class":587},[68,56794,869],{"class":85},[68,56796,55075],{"class":872},[68,56798,876],{"class":85},[68,56800,56801,56803,56805,56807,56809,56812],{"class":70,"line":18205},[68,56802,52932],{"class":85},[68,56804,82],{"class":81},[68,56806,866],{"class":587},[68,56808,869],{"class":85},[68,56810,56811],{"class":872},"\"slider-wrapper\"",[68,56813,876],{"class":85},[68,56815,56816,56819,56821,56824,56826,56829,56832,56834,56836],{"class":70,"line":18228},[68,56817,56818],{"class":85},"      \u003C",[68,56820,38],{"class":81},[68,56822,56823],{"class":587}," src",[68,56825,869],{"class":85},[68,56827,56828],{"class":872},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[68,56830,56831],{"class":587}," alt",[68,56833,869],{"class":85},[68,56835,9251],{"class":872},[68,56837,876],{"class":85},[68,56839,56840,56842,56844],{"class":70,"line":18234},[68,56841,53362],{"class":85},[68,56843,82],{"class":81},[68,56845,876],{"class":85},[68,56847,56848,56850,56852,56854,56856,56859],{"class":70,"line":18257},[68,56849,52932],{"class":85},[68,56851,82],{"class":81},[68,56853,866],{"class":587},[68,56855,869],{"class":85},[68,56857,56858],{"class":872},"\"slider-footer\"",[68,56860,876],{"class":85},[68,56862,56863,56865,56867,56870,56872],{"class":70,"line":18271},[68,56864,56818],{"class":85},[68,56866,19],{"class":81},[68,56868,56869],{"class":85},">对人类来说会不会太超前了?\u003C\u002F",[68,56871,19],{"class":81},[68,56873,876],{"class":85},[68,56875,56876,56878,56880],{"class":70,"line":18291},[68,56877,56818],{"class":85},[68,56879,168],{"class":81},[68,56881,876],{"class":85},[68,56883,56884,56887,56889,56891,56893,56896,56899,56901],{"class":70,"line":18297},[68,56885,56886],{"class":85},"        \u003C",[68,56888,51],{"class":81},[68,56890,866],{"class":587},[68,56892,869],{"class":85},[68,56894,56895],{"class":872},"\"activate\"",[68,56897,56898],{"class":85},">\u003C\u002F",[68,56900,51],{"class":81},[68,56902,876],{"class":85},[68,56904,56905,56907,56909,56911,56913],{"class":70,"line":18308},[68,56906,56886],{"class":85},[68,56908,51],{"class":81},[68,56910,56898],{"class":85},[68,56912,51],{"class":81},[68,56914,876],{"class":85},[68,56916,56917,56919,56921,56923,56925],{"class":70,"line":18331},[68,56918,56886],{"class":85},[68,56920,51],{"class":81},[68,56922,56898],{"class":85},[68,56924,51],{"class":81},[68,56926,876],{"class":85},[68,56928,56929,56931,56933,56935,56937],{"class":70,"line":18353},[68,56930,56886],{"class":85},[68,56932,51],{"class":81},[68,56934,56898],{"class":85},[68,56936,51],{"class":81},[68,56938,876],{"class":85},[68,56940,56941,56943,56945,56947,56949],{"class":70,"line":18358},[68,56942,56886],{"class":85},[68,56944,51],{"class":81},[68,56946,56898],{"class":85},[68,56948,51],{"class":81},[68,56950,876],{"class":85},[68,56952,56953,56955,56957,56959,56961],{"class":70,"line":18364},[68,56954,56886],{"class":85},[68,56956,51],{"class":81},[68,56958,56898],{"class":85},[68,56960,51],{"class":81},[68,56962,876],{"class":85},[68,56964,56965,56967,56969,56971,56973],{"class":70,"line":18378},[68,56966,56886],{"class":85},[68,56968,51],{"class":81},[68,56970,56898],{"class":85},[68,56972,51],{"class":81},[68,56974,876],{"class":85},[68,56976,56977,56979,56981,56983,56985],{"class":70,"line":18391},[68,56978,56886],{"class":85},[68,56980,51],{"class":81},[68,56982,56898],{"class":85},[68,56984,51],{"class":81},[68,56986,876],{"class":85},[68,56988,56989,56992,56994],{"class":70,"line":18396},[68,56990,56991],{"class":85},"      \u003C\u002F",[68,56993,168],{"class":81},[68,56995,876],{"class":85},[68,56997,56998,57000,57002],{"class":70,"line":18410},[68,56999,53362],{"class":85},[68,57001,82],{"class":81},[68,57003,876],{"class":85},[68,57005,57006,57008,57010],{"class":70,"line":18415},[68,57007,54002],{"class":85},[68,57009,82],{"class":81},[68,57011,876],{"class":85},[68,57013,57014,57016,57018],{"class":70,"line":18421},[68,57015,53729],{"class":85},[68,57017,53398],{"class":81},[68,57019,876],{"class":85},[68,57021,57022,57024,57027,57029],{"class":70,"line":18426},[68,57023,12819],{"class":102},[68,57025,57026],{"class":92}," arrImage",[68,57028,15161],{"class":102},[68,57030,57031],{"class":85}," [\n",[68,57033,57034,57037,57040,57043,57046,57049,57052],{"class":70,"line":18440},[68,57035,57036],{"class":85},"      { url: ",[68,57038,57039],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[68,57041,57042],{"class":85},", title: ",[68,57044,57045],{"class":872},"'对人类来说会不会太超前了?'",[68,57047,57048],{"class":85},", color: ",[68,57050,57051],{"class":872},"'rgba(100,67,68)'",[68,57053,57054],{"class":85}," },\n",[68,57056,57057,57059,57062,57064,57067,57069,57072],{"class":70,"line":18445},[68,57058,57036],{"class":85},[68,57060,57061],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[68,57063,57042],{"class":85},[68,57065,57066],{"class":872},"'开启剑与雪的黑暗传说!'",[68,57068,57048],{"class":85},[68,57070,57071],{"class":872},"'rgba(43,35,26)'",[68,57073,57054],{"class":85},[68,57075,57076,57078,57081,57083,57086,57088,57091],{"class":70,"line":18450},[68,57077,57036],{"class":85},[68,57079,57080],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[68,57082,57042],{"class":85},[68,57084,57085],{"class":872},"'真正的jo厨出现了!'",[68,57087,57048],{"class":85},[68,57089,57090],{"class":872},"'rgba(36,31,33)'",[68,57092,57054],{"class":85},[68,57094,57095,57097,57100,57102,57105,57107,57110],{"class":70,"line":18464},[68,57096,57036],{"class":85},[68,57098,57099],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[68,57101,57042],{"class":85},[68,57103,57104],{"class":872},"'李玉刚:让世界通过b站看到东方大国文化'",[68,57106,57048],{"class":85},[68,57108,57109],{"class":872},"'rgba(139,98,66)'",[68,57111,57054],{"class":85},[68,57113,57114,57116,57119,57121,57124,57126,57129],{"class":70,"line":18476},[68,57115,57036],{"class":85},[68,57117,57118],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[68,57120,57042],{"class":85},[68,57122,57123],{"class":872},"'快来分享你的寒假日常吧'",[68,57125,57048],{"class":85},[68,57127,57128],{"class":872},"'rgba(67,90,92)'",[68,57130,57054],{"class":85},[68,57132,57133,57135,57138,57140,57143,57145,57148],{"class":70,"line":18481},[68,57134,57036],{"class":85},[68,57136,57137],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[68,57139,57042],{"class":85},[68,57141,57142],{"class":872},"'哔哩哔哩小年YEAR'",[68,57144,57048],{"class":85},[68,57146,57147],{"class":872},"'rgba(166,131,143)'",[68,57149,57054],{"class":85},[68,57151,57152,57154,57157,57159,57162,57164,57167],{"class":70,"line":18494},[68,57153,57036],{"class":85},[68,57155,57156],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[68,57158,57042],{"class":85},[68,57160,57161],{"class":872},"'一站式解决你的电脑配置问题'",[68,57163,57048],{"class":85},[68,57165,57166],{"class":872},"'rgba(53,29,25)'",[68,57168,57054],{"class":85},[68,57170,57171,57173,57176,57178,57181,57183,57186],{"class":70,"line":18499},[68,57172,57036],{"class":85},[68,57174,57175],{"class":872},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[68,57177,57042],{"class":85},[68,57179,57180],{"class":872},"'谁不想和小猫咪贴贴呢?'",[68,57182,57048],{"class":85},[68,57184,57185],{"class":872},"'rgba(99,72,114)'",[68,57187,57188],{"class":85}," }\n",[68,57190,57191],{"class":70,"line":18504},[68,57192,54694],{"class":85},[68,57194,57195,57197,57200,57202,57204,57206,57208,57211],{"class":70,"line":18509},[68,57196,12819],{"class":102},[68,57198,57199],{"class":92}," img",[68,57201,15161],{"class":102},[68,57203,55980],{"class":85},[68,57205,55983],{"class":587},[68,57207,997],{"class":85},[68,57209,57210],{"class":872},"'.slider-wrapper img'",[68,57212,1757],{"class":85},[68,57214,57215,57217,57219,57221,57223,57225,57227,57230],{"class":70,"line":18522},[68,57216,12819],{"class":102},[68,57218,8424],{"class":92},[68,57220,15161],{"class":102},[68,57222,55980],{"class":85},[68,57224,55983],{"class":587},[68,57226,997],{"class":85},[68,57228,57229],{"class":872},"'.slider-footer p'",[68,57231,1757],{"class":85},[68,57233,57234,57236,57239,57241,57243,57245,57247,57250],{"class":70,"line":18527},[68,57235,12819],{"class":102},[68,57237,57238],{"class":92}," color",[68,57240,15161],{"class":102},[68,57242,55980],{"class":85},[68,57244,55983],{"class":587},[68,57246,997],{"class":85},[68,57248,57249],{"class":872},"'.slider-footer'",[68,57251,1757],{"class":85},[68,57253,57254,57256,57259,57261,57263,57266,57268,57271],{"class":70,"line":34226},[68,57255,12819],{"class":102},[68,57257,57258],{"class":92}," lis",[68,57260,15161],{"class":102},[68,57262,55980],{"class":85},[68,57264,57265],{"class":587},"querySelectorAll",[68,57267,997],{"class":85},[68,57269,57270],{"class":872},"'.slider-footer ul li'",[68,57272,1757],{"class":85},[68,57274,57275,57277,57279,57281],{"class":70,"line":34232},[68,57276,53804],{"class":102},[68,57278,11036],{"class":85},[68,57280,869],{"class":102},[68,57282,57283],{"class":92}," 1\n",[68,57285,57286,57288,57291,57293,57295,57297,57299],{"class":70,"line":34238},[68,57287,53804],{"class":102},[68,57289,57290],{"class":85}," timer ",[68,57292,869],{"class":102},[68,57294,56028],{"class":587},[68,57296,997],{"class":85},[68,57298,56033],{"class":102},[68,57300,56036],{"class":85},[68,57302,57303,57306,57308],{"class":70,"line":34244},[68,57304,57305],{"class":85},"      img.src ",[68,57307,869],{"class":102},[68,57309,57310],{"class":85}," arrImage[i].url\n",[68,57312,57313,57316,57318],{"class":70,"line":34250},[68,57314,57315],{"class":85},"      p.innerHTML ",[68,57317,869],{"class":102},[68,57319,57320],{"class":85}," arrImage[i].title\n",[68,57322,57323,57326,57328],{"class":70,"line":34261},[68,57324,57325],{"class":85},"      color.style.backgroundColor ",[68,57327,869],{"class":102},[68,57329,57330],{"class":85}," arrImage[i].color\n",[68,57332,57333],{"class":70,"line":34267},[68,57334,57335],{"class":74},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[68,57337,57338],{"class":70,"line":34287},[68,57339,57340],{"class":74},"      \u002F\u002F li.classList.add('activate')\n",[68,57342,57343],{"class":70,"line":34293},[68,57344,57345],{"class":74},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[68,57347,57348],{"class":70,"line":34304},[68,57349,57350],{"class":74},"      \u002F\u002F lis[i].classList.remove('activate')\n",[68,57352,57353,57356,57358,57360,57363,57366,57369,57371,57374],{"class":70,"line":34310},[68,57354,57355],{"class":85},"      document.",[68,57357,55983],{"class":587},[68,57359,997],{"class":85},[68,57361,57362],{"class":872},"'.activate'",[68,57364,57365],{"class":85},")?.classList.",[68,57367,57368],{"class":587},"toggle",[68,57370,997],{"class":85},[68,57372,57373],{"class":872},"'activate'",[68,57375,1757],{"class":85},[68,57377,57378,57381,57383,57385,57387],{"class":70,"line":34316},[68,57379,57380],{"class":85},"      lis[i].classList.",[68,57382,6933],{"class":587},[68,57384,997],{"class":85},[68,57386,57373],{"class":872},[68,57388,1757],{"class":85},[68,57390,57391],{"class":70,"line":34322},[68,57392,4000],{"emptyLinePlaceholder":1679},[68,57394,57395,57398,57400,57402,57404,57406,57408,57410,57413],{"class":70,"line":34328},[68,57396,57397],{"class":85},"      i ",[68,57399,869],{"class":102},[68,57401,56067],{"class":85},[68,57403,2217],{"class":102},[68,57405,1112],{"class":92},[68,57407,15311],{"class":85},[68,57409,2064],{"class":102},[68,57411,57412],{"class":85}," arrImage.",[68,57414,57415],{"class":92},"length\n",[68,57417,57418],{"class":70,"line":34334},[68,57419,4000],{"emptyLinePlaceholder":1679},[68,57421,57422,57424,57426],{"class":70,"line":34340},[68,57423,56119],{"class":85},[68,57425,8009],{"class":92},[68,57427,1757],{"class":85},[68,57429,57430,57432,57434],{"class":70,"line":34346},[68,57431,54002],{"class":85},[68,57433,53398],{"class":81},[68,57435,876],{"class":85},[68,57437,57438,57440,57442],{"class":70,"line":34366},[68,57439,886],{"class":85},[68,57441,53385],{"class":81},[68,57443,876],{"class":85},[68,57445,57446],{"class":70,"line":34372},[68,57447,4000],{"emptyLinePlaceholder":1679},[68,57449,57450,57452,57454],{"class":70,"line":34388},[68,57451,886],{"class":85},[68,57453,52228],{"class":81},[68,57455,876],{"class":85},[19,57457,57458],{},[38,57459],{"alt":63,"src":57460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57462,57463],{},"?.就是短路保护,确保输出正常进行",[19,57465,57466],{},"不要忘记取余%,有时候可以用",[19,57468,57469],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[48,57471,57472],{"start":78},[51,57473,57474],{},"法2",[58,57476,57478],{"className":52226,"code":57477,"language":52228,"meta":63,"style":63},"\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",[65,57479,57480,57490,57504,57508,57516,57530,57550,57562,57570,57576,57586,57596,57600,57604,57610,57620,57624,57628,57634,57644,57656,57668,57682,57686,57690,57696,57706,57716,57726,57738,57750,57760,57764,57768,57776,57786,57798,57810,57822,57826,57830,57836,57846,57858,57870,57880,57890,57900,57912,57924,57928,57932,57940,57952,57964,57990,58002,58006,58010,58016,58026,58030,58038,58046,58050,58058,58072,58086,58106,58114,58128,58140,58148,58166,58178,58190,58202,58214,58226,58238,58250,58258,58266,58274,58282,58293,58309,58325,58341,58357,58373,58389,58405,58421,58425,58430,58448,58466,58476,58481,58486,58497,58503,58518,58527,58531,58536,58545,58550,58559,58564,58569,58574,58597,58627,58631,58639,58643,58651,58659,58663],{"__ignoreMap":63},[68,57481,57482,57484,57486,57488],{"class":70,"line":71},[68,57483,52890],{"class":85},[68,57485,52893],{"class":81},[68,57487,52896],{"class":587},[68,57489,876],{"class":85},[68,57491,57492,57494,57496,57498,57500,57502],{"class":70,"line":78},[68,57493,861],{"class":85},[68,57495,52228],{"class":81},[68,57497,52907],{"class":587},[68,57499,869],{"class":85},[68,57501,52912],{"class":872},[68,57503,876],{"class":85},[68,57505,57506],{"class":70,"line":89},[68,57507,4000],{"emptyLinePlaceholder":1679},[68,57509,57510,57512,57514],{"class":70,"line":115},[68,57511,861],{"class":85},[68,57513,52925],{"class":81},[68,57515,876],{"class":85},[68,57517,57518,57520,57522,57524,57526,57528],{"class":70,"line":280},[68,57519,53729],{"class":85},[68,57521,52935],{"class":81},[68,57523,52938],{"class":587},[68,57525,869],{"class":85},[68,57527,52943],{"class":872},[68,57529,876],{"class":85},[68,57531,57532,57534,57536,57538,57540,57542,57544,57546,57548],{"class":70,"line":301},[68,57533,53729],{"class":85},[68,57535,52935],{"class":81},[68,57537,16516],{"class":587},[68,57539,869],{"class":85},[68,57541,52982],{"class":872},[68,57543,52962],{"class":587},[68,57545,869],{"class":85},[68,57547,52989],{"class":872},[68,57549,876],{"class":85},[68,57551,57552,57554,57556,57558,57560],{"class":70,"line":320},[68,57553,53729],{"class":85},[68,57555,52998],{"class":81},[68,57557,53001],{"class":85},[68,57559,52998],{"class":81},[68,57561,876],{"class":85},[68,57563,57564,57566,57568],{"class":70,"line":2915},[68,57565,53729],{"class":85},[68,57567,1652],{"class":81},[68,57569,876],{"class":85},[68,57571,57572,57574],{"class":70,"line":2921},[68,57573,8002],{"class":81},[68,57575,86],{"class":85},[68,57577,57578,57580,57582,57584],{"class":70,"line":2933},[68,57579,56279],{"class":92},[68,57581,96],{"class":85},[68,57583,600],{"class":92},[68,57585,112],{"class":85},[68,57587,57588,57590,57592,57594],{"class":70,"line":3214},[68,57589,56290],{"class":92},[68,57591,96],{"class":85},[68,57593,600],{"class":92},[68,57595,112],{"class":85},[68,57597,57598],{"class":70,"line":3219},[68,57599,3787],{"class":85},[68,57601,57602],{"class":70,"line":3225},[68,57603,4000],{"emptyLinePlaceholder":1679},[68,57605,57606,57608],{"class":70,"line":3230},[68,57607,56309],{"class":81},[68,57609,86],{"class":85},[68,57611,57612,57614,57616,57618],{"class":70,"line":3244},[68,57613,56316],{"class":92},[68,57615,96],{"class":85},[68,57617,56321],{"class":92},[68,57619,112],{"class":85},[68,57621,57622],{"class":70,"line":3249},[68,57623,3787],{"class":85},[68,57625,57626],{"class":70,"line":3255},[68,57627,4000],{"emptyLinePlaceholder":1679},[68,57629,57630,57632],{"class":70,"line":3276},[68,57631,56336],{"class":587},[68,57633,86],{"class":85},[68,57635,57636,57638,57640,57642],{"class":70,"line":3281},[68,57637,56343],{"class":92},[68,57639,96],{"class":85},[68,57641,56348],{"class":92},[68,57643,112],{"class":85},[68,57645,57646,57648,57650,57652,57654],{"class":70,"line":3295},[68,57647,56355],{"class":92},[68,57649,96],{"class":85},[68,57651,56360],{"class":92},[68,57653,103],{"class":102},[68,57655,112],{"class":85},[68,57657,57658,57660,57662,57664,57666],{"class":70,"line":3300},[68,57659,56369],{"class":92},[68,57661,96],{"class":85},[68,57663,3142],{"class":92},[68,57665,103],{"class":102},[68,57667,112],{"class":85},[68,57669,57670,57672,57674,57676,57678,57680],{"class":70,"line":3329},[68,57671,56290],{"class":92},[68,57673,96],{"class":85},[68,57675,2047],{"class":92},[68,57677,103],{"class":102},[68,57679,603],{"class":92},[68,57681,112],{"class":85},[68,57683,57684],{"class":70,"line":3334},[68,57685,3787],{"class":85},[68,57687,57688],{"class":70,"line":3351},[68,57689,4000],{"emptyLinePlaceholder":1679},[68,57691,57692,57694],{"class":70,"line":3356},[68,57693,56404],{"class":587},[68,57695,86],{"class":85},[68,57697,57698,57700,57702,57704],{"class":70,"line":3361},[68,57699,56343],{"class":92},[68,57701,96],{"class":85},[68,57703,56415],{"class":92},[68,57705,112],{"class":85},[68,57707,57708,57710,57712,57714],{"class":70,"line":3366},[68,57709,56422],{"class":92},[68,57711,96],{"class":85},[68,57713,600],{"class":92},[68,57715,112],{"class":85},[68,57717,57718,57720,57722,57724],{"class":70,"line":3380},[68,57719,56433],{"class":92},[68,57721,96],{"class":85},[68,57723,600],{"class":92},[68,57725,112],{"class":85},[68,57727,57728,57730,57732,57734,57736],{"class":70,"line":3385},[68,57729,56355],{"class":92},[68,57731,96],{"class":85},[68,57733,2047],{"class":92},[68,57735,2064],{"class":102},[68,57737,112],{"class":85},[68,57739,57740,57742,57744,57746,57748],{"class":70,"line":4177},[68,57741,56369],{"class":92},[68,57743,96],{"class":85},[68,57745,2311],{"class":92},[68,57747,2064],{"class":102},[68,57749,112],{"class":85},[68,57751,57752,57754,57756,57758],{"class":70,"line":4191},[68,57753,56468],{"class":92},[68,57755,96],{"class":85},[68,57757,56473],{"class":92},[68,57759,112],{"class":85},[68,57761,57762],{"class":70,"line":4199},[68,57763,3787],{"class":85},[68,57765,57766],{"class":70,"line":4204},[68,57767,4000],{"emptyLinePlaceholder":1679},[68,57769,57770,57772,57774],{"class":70,"line":4210},[68,57771,56404],{"class":587},[68,57773,8424],{"class":81},[68,57775,86],{"class":85},[68,57777,57778,57780,57782,57784],{"class":70,"line":4216},[68,57779,56343],{"class":92},[68,57781,96],{"class":85},[68,57783,56415],{"class":92},[68,57785,112],{"class":85},[68,57787,57788,57790,57792,57794,57796],{"class":70,"line":4221},[68,57789,56506],{"class":92},[68,57791,96],{"class":85},[68,57793,2637],{"class":92},[68,57795,103],{"class":102},[68,57797,112],{"class":85},[68,57799,57800,57802,57804,57806,57808],{"class":70,"line":9547},[68,57801,56422],{"class":92},[68,57803,96],{"class":85},[68,57805,2436],{"class":92},[68,57807,103],{"class":102},[68,57809,112],{"class":85},[68,57811,57812,57814,57816,57818,57820],{"class":70,"line":9571},[68,57813,56531],{"class":92},[68,57815,96],{"class":85},[68,57817,2055],{"class":92},[68,57819,103],{"class":102},[68,57821,112],{"class":85},[68,57823,57824],{"class":70,"line":9576},[68,57825,3787],{"class":85},[68,57827,57828],{"class":70,"line":9582},[68,57829,4000],{"emptyLinePlaceholder":1679},[68,57831,57832,57834],{"class":70,"line":9609},[68,57833,56552],{"class":81},[68,57835,86],{"class":85},[68,57837,57838,57840,57842,57844],{"class":70,"line":9614},[68,57839,56343],{"class":92},[68,57841,96],{"class":85},[68,57843,56415],{"class":92},[68,57845,112],{"class":85},[68,57847,57848,57850,57852,57854,57856],{"class":70,"line":9620},[68,57849,56531],{"class":92},[68,57851,96],{"class":85},[68,57853,2517],{"class":92},[68,57855,103],{"class":102},[68,57857,112],{"class":85},[68,57859,57860,57862,57864,57866,57868],{"class":70,"line":9632},[68,57861,56422],{"class":92},[68,57863,96],{"class":85},[68,57865,2436],{"class":92},[68,57867,103],{"class":102},[68,57869,112],{"class":85},[68,57871,57872,57874,57876,57878],{"class":70,"line":9644},[68,57873,56593],{"class":92},[68,57875,96],{"class":85},[68,57877,53067],{"class":92},[68,57879,112],{"class":85},[68,57881,57882,57884,57886,57888],{"class":70,"line":9656},[68,57883,56604],{"class":92},[68,57885,96],{"class":85},[68,57887,53254],{"class":92},[68,57889,112],{"class":85},[68,57891,57892,57894,57896,57898],{"class":70,"line":11314},[68,57893,56343],{"class":92},[68,57895,96],{"class":85},[68,57897,56415],{"class":92},[68,57899,112],{"class":85},[68,57901,57902,57904,57906,57908,57910],{"class":70,"line":11339},[68,57903,56355],{"class":92},[68,57905,96],{"class":85},[68,57907,5591],{"class":92},[68,57909,103],{"class":102},[68,57911,112],{"class":85},[68,57913,57914,57916,57918,57920,57922],{"class":70,"line":11362},[68,57915,56369],{"class":92},[68,57917,96],{"class":85},[68,57919,2436],{"class":92},[68,57921,103],{"class":102},[68,57923,112],{"class":85},[68,57925,57926],{"class":70,"line":11386},[68,57927,3787],{"class":85},[68,57929,57930],{"class":70,"line":11391},[68,57931,4000],{"emptyLinePlaceholder":1679},[68,57933,57934,57936,57938],{"class":70,"line":11396},[68,57935,56552],{"class":81},[68,57937,56659],{"class":81},[68,57939,86],{"class":85},[68,57941,57942,57944,57946,57948,57950],{"class":70,"line":11401},[68,57943,56355],{"class":92},[68,57945,96],{"class":85},[68,57947,2436],{"class":92},[68,57949,103],{"class":102},[68,57951,112],{"class":85},[68,57953,57954,57956,57958,57960,57962],{"class":70,"line":11410},[68,57955,56369],{"class":92},[68,57957,96],{"class":85},[68,57959,2436],{"class":92},[68,57961,103],{"class":102},[68,57963,112],{"class":85},[68,57965,57966,57968,57970,57972,57974,57976,57978,57980,57982,57984,57986,57988],{"class":70,"line":11415},[68,57967,56468],{"class":92},[68,57969,96],{"class":85},[68,57971,56694],{"class":92},[68,57973,997],{"class":85},[68,57975,600],{"class":92},[68,57977,1002],{"class":85},[68,57979,600],{"class":92},[68,57981,1002],{"class":85},[68,57983,600],{"class":92},[68,57985,1002],{"class":85},[68,57987,56711],{"class":92},[68,57989,1016],{"class":85},[68,57991,57992,57994,57996,57998,58000],{"class":70,"line":11421},[68,57993,56718],{"class":92},[68,57995,96],{"class":85},[68,57997,2182],{"class":92},[68,57999,103],{"class":102},[68,58001,112],{"class":85},[68,58003,58004],{"class":70,"line":11442},[68,58005,3787],{"class":85},[68,58007,58008],{"class":70,"line":11448},[68,58009,4000],{"emptyLinePlaceholder":1679},[68,58011,58012,58014],{"class":70,"line":11462},[68,58013,56739],{"class":587},[68,58015,86],{"class":85},[68,58017,58018,58020,58022,58024],{"class":70,"line":11468},[68,58019,56468],{"class":92},[68,58021,96],{"class":85},[68,58023,56750],{"class":92},[68,58025,112],{"class":85},[68,58027,58028],{"class":70,"line":11495},[68,58029,3787],{"class":85},[68,58031,58032,58034,58036],{"class":70,"line":11504},[68,58033,54002],{"class":85},[68,58035,1652],{"class":81},[68,58037,876],{"class":85},[68,58039,58040,58042,58044],{"class":70,"line":11510},[68,58041,886],{"class":85},[68,58043,52925],{"class":81},[68,58045,876],{"class":85},[68,58047,58048],{"class":70,"line":11518},[68,58049,4000],{"emptyLinePlaceholder":1679},[68,58051,58052,58054,58056],{"class":70,"line":11523},[68,58053,861],{"class":85},[68,58055,53385],{"class":81},[68,58057,876],{"class":85},[68,58059,58060,58062,58064,58066,58068,58070],{"class":70,"line":18199},[68,58061,53729],{"class":85},[68,58063,82],{"class":81},[68,58065,866],{"class":587},[68,58067,869],{"class":85},[68,58069,55075],{"class":872},[68,58071,876],{"class":85},[68,58073,58074,58076,58078,58080,58082,58084],{"class":70,"line":18205},[68,58075,52932],{"class":85},[68,58077,82],{"class":81},[68,58079,866],{"class":587},[68,58081,869],{"class":85},[68,58083,56811],{"class":872},[68,58085,876],{"class":85},[68,58087,58088,58090,58092,58094,58096,58098,58100,58102,58104],{"class":70,"line":18228},[68,58089,56818],{"class":85},[68,58091,38],{"class":81},[68,58093,56823],{"class":587},[68,58095,869],{"class":85},[68,58097,56828],{"class":872},[68,58099,56831],{"class":587},[68,58101,869],{"class":85},[68,58103,9251],{"class":872},[68,58105,876],{"class":85},[68,58107,58108,58110,58112],{"class":70,"line":18234},[68,58109,53362],{"class":85},[68,58111,82],{"class":81},[68,58113,876],{"class":85},[68,58115,58116,58118,58120,58122,58124,58126],{"class":70,"line":18257},[68,58117,52932],{"class":85},[68,58119,82],{"class":81},[68,58121,866],{"class":587},[68,58123,869],{"class":85},[68,58125,56858],{"class":872},[68,58127,876],{"class":85},[68,58129,58130,58132,58134,58136,58138],{"class":70,"line":18271},[68,58131,56818],{"class":85},[68,58133,19],{"class":81},[68,58135,56869],{"class":85},[68,58137,19],{"class":81},[68,58139,876],{"class":85},[68,58141,58142,58144,58146],{"class":70,"line":18291},[68,58143,56818],{"class":85},[68,58145,168],{"class":81},[68,58147,876],{"class":85},[68,58149,58150,58152,58154,58156,58158,58160,58162,58164],{"class":70,"line":18297},[68,58151,56886],{"class":85},[68,58153,51],{"class":81},[68,58155,866],{"class":587},[68,58157,869],{"class":85},[68,58159,56895],{"class":872},[68,58161,56898],{"class":85},[68,58163,51],{"class":81},[68,58165,876],{"class":85},[68,58167,58168,58170,58172,58174,58176],{"class":70,"line":18308},[68,58169,56886],{"class":85},[68,58171,51],{"class":81},[68,58173,56898],{"class":85},[68,58175,51],{"class":81},[68,58177,876],{"class":85},[68,58179,58180,58182,58184,58186,58188],{"class":70,"line":18331},[68,58181,56886],{"class":85},[68,58183,51],{"class":81},[68,58185,56898],{"class":85},[68,58187,51],{"class":81},[68,58189,876],{"class":85},[68,58191,58192,58194,58196,58198,58200],{"class":70,"line":18353},[68,58193,56886],{"class":85},[68,58195,51],{"class":81},[68,58197,56898],{"class":85},[68,58199,51],{"class":81},[68,58201,876],{"class":85},[68,58203,58204,58206,58208,58210,58212],{"class":70,"line":18358},[68,58205,56886],{"class":85},[68,58207,51],{"class":81},[68,58209,56898],{"class":85},[68,58211,51],{"class":81},[68,58213,876],{"class":85},[68,58215,58216,58218,58220,58222,58224],{"class":70,"line":18364},[68,58217,56886],{"class":85},[68,58219,51],{"class":81},[68,58221,56898],{"class":85},[68,58223,51],{"class":81},[68,58225,876],{"class":85},[68,58227,58228,58230,58232,58234,58236],{"class":70,"line":18378},[68,58229,56886],{"class":85},[68,58231,51],{"class":81},[68,58233,56898],{"class":85},[68,58235,51],{"class":81},[68,58237,876],{"class":85},[68,58239,58240,58242,58244,58246,58248],{"class":70,"line":18391},[68,58241,56886],{"class":85},[68,58243,51],{"class":81},[68,58245,56898],{"class":85},[68,58247,51],{"class":81},[68,58249,876],{"class":85},[68,58251,58252,58254,58256],{"class":70,"line":18396},[68,58253,56991],{"class":85},[68,58255,168],{"class":81},[68,58257,876],{"class":85},[68,58259,58260,58262,58264],{"class":70,"line":18410},[68,58261,53362],{"class":85},[68,58263,82],{"class":81},[68,58265,876],{"class":85},[68,58267,58268,58270,58272],{"class":70,"line":18415},[68,58269,54002],{"class":85},[68,58271,82],{"class":81},[68,58273,876],{"class":85},[68,58275,58276,58278,58280],{"class":70,"line":18421},[68,58277,53729],{"class":85},[68,58279,53398],{"class":81},[68,58281,876],{"class":85},[68,58283,58284,58286,58289,58291],{"class":70,"line":18426},[68,58285,12819],{"class":102},[68,58287,58288],{"class":92}," sliderData",[68,58290,15161],{"class":102},[68,58292,57031],{"class":85},[68,58294,58295,58297,58299,58301,58303,58305,58307],{"class":70,"line":18440},[68,58296,57036],{"class":85},[68,58298,57039],{"class":872},[68,58300,57042],{"class":85},[68,58302,57045],{"class":872},[68,58304,57048],{"class":85},[68,58306,57051],{"class":872},[68,58308,57054],{"class":85},[68,58310,58311,58313,58315,58317,58319,58321,58323],{"class":70,"line":18445},[68,58312,57036],{"class":85},[68,58314,57061],{"class":872},[68,58316,57042],{"class":85},[68,58318,57066],{"class":872},[68,58320,57048],{"class":85},[68,58322,57071],{"class":872},[68,58324,57054],{"class":85},[68,58326,58327,58329,58331,58333,58335,58337,58339],{"class":70,"line":18450},[68,58328,57036],{"class":85},[68,58330,57080],{"class":872},[68,58332,57042],{"class":85},[68,58334,57085],{"class":872},[68,58336,57048],{"class":85},[68,58338,57090],{"class":872},[68,58340,57054],{"class":85},[68,58342,58343,58345,58347,58349,58351,58353,58355],{"class":70,"line":18464},[68,58344,57036],{"class":85},[68,58346,57099],{"class":872},[68,58348,57042],{"class":85},[68,58350,57104],{"class":872},[68,58352,57048],{"class":85},[68,58354,57109],{"class":872},[68,58356,57054],{"class":85},[68,58358,58359,58361,58363,58365,58367,58369,58371],{"class":70,"line":18476},[68,58360,57036],{"class":85},[68,58362,57118],{"class":872},[68,58364,57042],{"class":85},[68,58366,57123],{"class":872},[68,58368,57048],{"class":85},[68,58370,57128],{"class":872},[68,58372,57054],{"class":85},[68,58374,58375,58377,58379,58381,58383,58385,58387],{"class":70,"line":18481},[68,58376,57036],{"class":85},[68,58378,57137],{"class":872},[68,58380,57042],{"class":85},[68,58382,57142],{"class":872},[68,58384,57048],{"class":85},[68,58386,57147],{"class":872},[68,58388,57054],{"class":85},[68,58390,58391,58393,58395,58397,58399,58401,58403],{"class":70,"line":18494},[68,58392,57036],{"class":85},[68,58394,57156],{"class":872},[68,58396,57042],{"class":85},[68,58398,57161],{"class":872},[68,58400,57048],{"class":85},[68,58402,57166],{"class":872},[68,58404,57054],{"class":85},[68,58406,58407,58409,58411,58413,58415,58417,58419],{"class":70,"line":18499},[68,58408,57036],{"class":85},[68,58410,57175],{"class":872},[68,58412,57042],{"class":85},[68,58414,57180],{"class":872},[68,58416,57048],{"class":85},[68,58418,57185],{"class":872},[68,58420,57188],{"class":85},[68,58422,58423],{"class":70,"line":18504},[68,58424,54694],{"class":85},[68,58426,58427],{"class":70,"line":18509},[68,58428,58429],{"class":74},"    \u002F\u002F 1.获取元素\n",[68,58431,58432,58434,58436,58438,58440,58442,58444,58446],{"class":70,"line":18522},[68,58433,12819],{"class":102},[68,58435,57199],{"class":92},[68,58437,15161],{"class":102},[68,58439,55980],{"class":85},[68,58441,55983],{"class":587},[68,58443,997],{"class":85},[68,58445,57210],{"class":872},[68,58447,1757],{"class":85},[68,58449,58450,58452,58454,58456,58458,58460,58462,58464],{"class":70,"line":18527},[68,58451,12819],{"class":102},[68,58453,8424],{"class":92},[68,58455,15161],{"class":102},[68,58457,55980],{"class":85},[68,58459,55983],{"class":587},[68,58461,997],{"class":85},[68,58463,57229],{"class":872},[68,58465,1757],{"class":85},[68,58467,58468,58470,58472,58474],{"class":70,"line":34226},[68,58469,53804],{"class":102},[68,58471,11036],{"class":85},[68,58473,869],{"class":102},[68,58475,48926],{"class":92},[68,58477,58478],{"class":70,"line":34232},[68,58479,58480],{"class":74},"    \u002F\u002F 2.开启定时器\n",[68,58482,58483],{"class":70,"line":34238},[68,58484,58485],{"class":74},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[68,58487,58488,58491,58493,58495],{"class":70,"line":34244},[68,58489,58490],{"class":587},"    setInterval",[68,58492,997],{"class":85},[68,58494,56033],{"class":102},[68,58496,56036],{"class":85},[68,58498,58499,58501],{"class":70,"line":34250},[68,58500,56041],{"class":85},[68,58502,4302],{"class":102},[68,58504,58505,58507,58509,58511,58514,58516],{"class":70,"line":34261},[68,58506,56064],{"class":102},[68,58508,56067],{"class":85},[68,58510,3312],{"class":102},[68,58512,58513],{"class":85}," sliderData.",[68,58515,53553],{"class":92},[68,58517,14039],{"class":85},[68,58519,58520,58523,58525],{"class":70,"line":34267},[68,58521,58522],{"class":85},"        i ",[68,58524,869],{"class":102},[68,58526,48926],{"class":92},[68,58528,58529],{"class":70,"line":34287},[68,58530,53983],{"class":85},[68,58532,58533],{"class":70,"line":34293},[68,58534,58535],{"class":74},"      \u002F\u002F 更换图片路径\n",[68,58537,58538,58540,58542],{"class":70,"line":34304},[68,58539,57305],{"class":85},[68,58541,869],{"class":102},[68,58543,58544],{"class":85}," sliderData[i].url\n",[68,58546,58547],{"class":70,"line":34310},[68,58548,58549],{"class":74},"      \u002F\u002F 把文字写到p里面\n",[68,58551,58552,58554,58556],{"class":70,"line":34316},[68,58553,57315],{"class":85},[68,58555,869],{"class":102},[68,58557,58558],{"class":85}," sliderData[i].title\n",[68,58560,58561],{"class":70,"line":34322},[68,58562,58563],{"class":74},"      \u002F\u002F 小圆点\n",[68,58565,58566],{"class":70,"line":34328},[68,58567,58568],{"class":74},"      \u002F\u002F 先删除以前的active\n",[68,58570,58571],{"class":70,"line":34334},[68,58572,58573],{"class":74},"      \u002F\u002F 只让当前li添加active\n",[68,58575,58576,58578,58580,58582,58585,58588,58591,58593,58595],{"class":70,"line":34340},[68,58577,57355],{"class":85},[68,58579,55983],{"class":587},[68,58581,997],{"class":85},[68,58583,58584],{"class":872},"'.slider-footer .activate'",[68,58586,58587],{"class":85},").classList.",[68,58589,58590],{"class":587},"remove",[68,58592,997],{"class":85},[68,58594,57373],{"class":872},[68,58596,1757],{"class":85},[68,58598,58599,58601,58603,58605,58608,58610,58612,58614,58617,58619,58621,58623,58625],{"class":70,"line":34346},[68,58600,57355],{"class":85},[68,58602,55983],{"class":587},[68,58604,997],{"class":85},[68,58606,58607],{"class":872},"`.slider-footer ul li:nth-child(${",[68,58609,2177],{"class":85},[68,58611,47159],{"class":102},[68,58613,1112],{"class":92},[68,58615,58616],{"class":872},"})`",[68,58618,58587],{"class":85},[68,58620,6933],{"class":587},[68,58622,997],{"class":85},[68,58624,57373],{"class":872},[68,58626,1757],{"class":85},[68,58628,58629],{"class":70,"line":34366},[68,58630,4000],{"emptyLinePlaceholder":1679},[68,58632,58633,58635,58637],{"class":70,"line":34372},[68,58634,56119],{"class":85},[68,58636,8009],{"class":92},[68,58638,1757],{"class":85},[68,58640,58641],{"class":70,"line":34388},[68,58642,4000],{"emptyLinePlaceholder":1679},[68,58644,58645,58647,58649],{"class":70,"line":34394},[68,58646,54002],{"class":85},[68,58648,53398],{"class":81},[68,58650,876],{"class":85},[68,58652,58653,58655,58657],{"class":70,"line":34408},[68,58654,886],{"class":85},[68,58656,53385],{"class":81},[68,58658,876],{"class":85},[68,58660,58661],{"class":70,"line":34414},[68,58662,4000],{"emptyLinePlaceholder":1679},[68,58664,58665,58667,58669],{"class":70,"line":34429},[68,58666,886],{"class":85},[68,58668,52228],{"class":81},[68,58670,876],{"class":85},[43,58672,58674],{"id":58673},"_317-重要知识点","3.1.7 重要知识点",[19,58676,58677,58678],{},"浏览器在渲染文本时， ",[1890,58679,58680],{},"没有空格或换行符就没有“断行点”",[19,58682,58683],{},[38,58684],{"alt":63,"src":58685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58687,58688],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58690,58691],{},[38,58692],{"alt":63,"src":58693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58695,58696],{},[38,58697],{"alt":63,"src":58698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58700,58702],{"id":58701},"_32-dom事件基础","3.2 DOM事件基础",[43,58704,58706],{"id":58705},"_321-事件监听","3.2.1 事件监听",[19,58708,58709],{},[38,58710],{"alt":63,"src":58711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58713,58714],{},"事件监听有响应的发生",[19,58716,58717],{},[38,58718],{"alt":63,"src":58719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58721,58722],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58724,58725],{},"对于有名函数,要执行的函数名后边不要加()",[43,58727,58729],{"id":58728},"_322-随机点名案例","3.2.2 随机点名案例",[58,58731,58733],{"className":52226,"code":58732,"language":52228,"meta":63,"style":63},"\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",[65,58734,58735,58745,58759,58763,58771,58785,58805,58817,58825,58831,58841,58851,58855,58859,58866,58877,58881,58885,58891,58903,58917,58927,58939,58952,58956,58960,58967,58971,58984,58996,59008,59012,59016,59020,59027,59037,59041,59045,59054,59066,59078,59093,59097,59105,59113,59117,59125,59138,59152,59165,59185,59193,59208,59228,59248,59256,59260,59268,59273,59309,59329,59334,59353,59358,59369,59374,59385,59390,59409,59424,59429,59455,59465,59474,59479,59495,59500,59505,59510,59525,59529,59533,59538,59557,59574,59582,59587,59602,59606,59610,59618,59626,59630],{"__ignoreMap":63},[68,58736,58737,58739,58741,58743],{"class":70,"line":71},[68,58738,52890],{"class":85},[68,58740,52893],{"class":81},[68,58742,52896],{"class":587},[68,58744,876],{"class":85},[68,58746,58747,58749,58751,58753,58755,58757],{"class":70,"line":78},[68,58748,861],{"class":85},[68,58750,52228],{"class":81},[68,58752,52907],{"class":587},[68,58754,869],{"class":85},[68,58756,52912],{"class":872},[68,58758,876],{"class":85},[68,58760,58761],{"class":70,"line":89},[68,58762,4000],{"emptyLinePlaceholder":1679},[68,58764,58765,58767,58769],{"class":70,"line":115},[68,58766,861],{"class":85},[68,58768,52925],{"class":81},[68,58770,876],{"class":85},[68,58772,58773,58775,58777,58779,58781,58783],{"class":70,"line":280},[68,58774,53729],{"class":85},[68,58776,52935],{"class":81},[68,58778,52938],{"class":587},[68,58780,869],{"class":85},[68,58782,52943],{"class":872},[68,58784,876],{"class":85},[68,58786,58787,58789,58791,58793,58795,58797,58799,58801,58803],{"class":70,"line":301},[68,58788,53729],{"class":85},[68,58790,52935],{"class":81},[68,58792,16516],{"class":587},[68,58794,869],{"class":85},[68,58796,52982],{"class":872},[68,58798,52962],{"class":587},[68,58800,869],{"class":85},[68,58802,52989],{"class":872},[68,58804,876],{"class":85},[68,58806,58807,58809,58811,58813,58815],{"class":70,"line":320},[68,58808,53729],{"class":85},[68,58810,52998],{"class":81},[68,58812,53001],{"class":85},[68,58814,52998],{"class":81},[68,58816,876],{"class":85},[68,58818,58819,58821,58823],{"class":70,"line":2915},[68,58820,53729],{"class":85},[68,58822,1652],{"class":81},[68,58824,876],{"class":85},[68,58826,58827,58829],{"class":70,"line":2921},[68,58828,8002],{"class":81},[68,58830,86],{"class":85},[68,58832,58833,58835,58837,58839],{"class":70,"line":2933},[68,58834,56290],{"class":92},[68,58836,96],{"class":85},[68,58838,600],{"class":92},[68,58840,112],{"class":85},[68,58842,58843,58845,58847,58849],{"class":70,"line":3214},[68,58844,56279],{"class":92},[68,58846,96],{"class":85},[68,58848,600],{"class":92},[68,58850,112],{"class":85},[68,58852,58853],{"class":70,"line":3219},[68,58854,3787],{"class":85},[68,58856,58857],{"class":70,"line":3225},[68,58858,4000],{"emptyLinePlaceholder":1679},[68,58860,58861,58864],{"class":70,"line":3230},[68,58862,58863],{"class":81},"    h2",[68,58865,86],{"class":85},[68,58867,58868,58871,58873,58875],{"class":70,"line":3244},[68,58869,58870],{"class":92},"      text-align",[68,58872,96],{"class":85},[68,58874,53179],{"class":92},[68,58876,112],{"class":85},[68,58878,58879],{"class":70,"line":3249},[68,58880,3787],{"class":85},[68,58882,58883],{"class":70,"line":3255},[68,58884,4000],{"emptyLinePlaceholder":1679},[68,58886,58887,58889],{"class":70,"line":3276},[68,58888,56336],{"class":587},[68,58890,86],{"class":85},[68,58892,58893,58895,58897,58899,58901],{"class":70,"line":3281},[68,58894,56355],{"class":92},[68,58896,96],{"class":85},[68,58898,3142],{"class":92},[68,58900,103],{"class":102},[68,58902,112],{"class":85},[68,58904,58905,58907,58909,58911,58913,58915],{"class":70,"line":3295},[68,58906,56290],{"class":92},[68,58908,96],{"class":85},[68,58910,2392],{"class":92},[68,58912,103],{"class":102},[68,58914,603],{"class":92},[68,58916,112],{"class":85},[68,58918,58919,58921,58923,58925],{"class":70,"line":3300},[68,58920,56593],{"class":92},[68,58922,96],{"class":85},[68,58924,53067],{"class":92},[68,58926,112],{"class":85},[68,58928,58929,58931,58933,58935,58937],{"class":70,"line":3329},[68,58930,56506],{"class":92},[68,58932,96],{"class":85},[68,58934,2561],{"class":92},[68,58936,103],{"class":102},[68,58938,112],{"class":85},[68,58940,58941,58944,58946,58948,58950],{"class":70,"line":3334},[68,58942,58943],{"class":92},"      line-height",[68,58945,96],{"class":85},[68,58947,2137],{"class":92},[68,58949,103],{"class":102},[68,58951,112],{"class":85},[68,58953,58954],{"class":70,"line":3351},[68,58955,3787],{"class":85},[68,58957,58958],{"class":70,"line":3356},[68,58959,4000],{"emptyLinePlaceholder":1679},[68,58961,58962,58965],{"class":70,"line":3361},[68,58963,58964],{"class":587},"    .qs",[68,58966,86],{"class":85},[68,58968,58969],{"class":70,"line":3366},[68,58970,4000],{"emptyLinePlaceholder":1679},[68,58972,58973,58975,58977,58980,58982],{"class":70,"line":3380},[68,58974,56355],{"class":92},[68,58976,96],{"class":85},[68,58978,58979],{"class":92},"450",[68,58981,103],{"class":102},[68,58983,112],{"class":85},[68,58985,58986,58988,58990,58992,58994],{"class":70,"line":3385},[68,58987,56369],{"class":92},[68,58989,96],{"class":85},[68,58991,2137],{"class":92},[68,58993,103],{"class":102},[68,58995,112],{"class":85},[68,58997,58998,59001,59003,59006],{"class":70,"line":4177},[68,58999,59000],{"class":92},"      color",[68,59002,96],{"class":85},[68,59004,59005],{"class":92},"red",[68,59007,112],{"class":85},[68,59009,59010],{"class":70,"line":4191},[68,59011,4000],{"emptyLinePlaceholder":1679},[68,59013,59014],{"class":70,"line":4199},[68,59015,3787],{"class":85},[68,59017,59018],{"class":70,"line":4204},[68,59019,4000],{"emptyLinePlaceholder":1679},[68,59021,59022,59025],{"class":70,"line":4210},[68,59023,59024],{"class":587},"    .btns",[68,59026,86],{"class":85},[68,59028,59029,59031,59033,59035],{"class":70,"line":4216},[68,59030,58870],{"class":92},[68,59032,96],{"class":85},[68,59034,53179],{"class":92},[68,59036,112],{"class":85},[68,59038,59039],{"class":70,"line":4221},[68,59040,3787],{"class":85},[68,59042,59043],{"class":70,"line":9547},[68,59044,4000],{"emptyLinePlaceholder":1679},[68,59046,59047,59049,59052],{"class":70,"line":9571},[68,59048,59024],{"class":587},[68,59050,59051],{"class":81}," button",[68,59053,86],{"class":85},[68,59055,59056,59058,59060,59062,59064],{"class":70,"line":9576},[68,59057,56355],{"class":92},[68,59059,96],{"class":85},[68,59061,2553],{"class":92},[68,59063,103],{"class":102},[68,59065,112],{"class":85},[68,59067,59068,59070,59072,59074,59076],{"class":70,"line":9582},[68,59069,56369],{"class":92},[68,59071,96],{"class":85},[68,59073,2009],{"class":92},[68,59075,103],{"class":102},[68,59077,112],{"class":85},[68,59079,59080,59082,59084,59086,59089,59091],{"class":70,"line":9609},[68,59081,56290],{"class":92},[68,59083,96],{"class":85},[68,59085,600],{"class":92},[68,59087,59088],{"class":92}," 50",[68,59090,103],{"class":102},[68,59092,112],{"class":85},[68,59094,59095],{"class":70,"line":9614},[68,59096,3787],{"class":85},[68,59098,59099,59101,59103],{"class":70,"line":9620},[68,59100,54002],{"class":85},[68,59102,1652],{"class":81},[68,59104,876],{"class":85},[68,59106,59107,59109,59111],{"class":70,"line":9632},[68,59108,886],{"class":85},[68,59110,52925],{"class":81},[68,59112,876],{"class":85},[68,59114,59115],{"class":70,"line":9644},[68,59116,4000],{"emptyLinePlaceholder":1679},[68,59118,59119,59121,59123],{"class":70,"line":9656},[68,59120,861],{"class":85},[68,59122,53385],{"class":81},[68,59124,876],{"class":85},[68,59126,59127,59129,59131,59134,59136],{"class":70,"line":11314},[68,59128,53729],{"class":85},[68,59130,14],{"class":81},[68,59132,59133],{"class":85},">随机点名\u003C\u002F",[68,59135,14],{"class":81},[68,59137,876],{"class":85},[68,59139,59140,59142,59144,59146,59148,59150],{"class":70,"line":11339},[68,59141,53729],{"class":85},[68,59143,82],{"class":81},[68,59145,866],{"class":587},[68,59147,869],{"class":85},[68,59149,55075],{"class":872},[68,59151,876],{"class":85},[68,59153,59154,59156,59158,59161,59163],{"class":70,"line":11362},[68,59155,52932],{"class":85},[68,59157,68],{"class":81},[68,59159,59160],{"class":85},">名字是：\u003C\u002F",[68,59162,68],{"class":81},[68,59164,876],{"class":85},[68,59166,59167,59169,59171,59173,59175,59178,59181,59183],{"class":70,"line":11386},[68,59168,52932],{"class":85},[68,59170,82],{"class":81},[68,59172,866],{"class":587},[68,59174,869],{"class":85},[68,59176,59177],{"class":872},"\"qs\"",[68,59179,59180],{"class":85},">这里显示姓名\u003C\u002F",[68,59182,82],{"class":81},[68,59184,876],{"class":85},[68,59186,59187,59189,59191],{"class":70,"line":11391},[68,59188,54002],{"class":85},[68,59190,82],{"class":81},[68,59192,876],{"class":85},[68,59194,59195,59197,59199,59201,59203,59206],{"class":70,"line":11396},[68,59196,53729],{"class":85},[68,59198,82],{"class":81},[68,59200,866],{"class":587},[68,59202,869],{"class":85},[68,59204,59205],{"class":872},"\"btns\"",[68,59207,876],{"class":85},[68,59209,59210,59212,59214,59216,59218,59221,59224,59226],{"class":70,"line":11401},[68,59211,52932],{"class":85},[68,59213,55471],{"class":81},[68,59215,866],{"class":587},[68,59217,869],{"class":85},[68,59219,59220],{"class":872},"\"start\"",[68,59222,59223],{"class":85},">开始\u003C\u002F",[68,59225,55471],{"class":81},[68,59227,876],{"class":85},[68,59229,59230,59232,59234,59236,59238,59241,59244,59246],{"class":70,"line":11410},[68,59231,52932],{"class":85},[68,59233,55471],{"class":81},[68,59235,866],{"class":587},[68,59237,869],{"class":85},[68,59239,59240],{"class":872},"\"end\"",[68,59242,59243],{"class":85},">结束\u003C\u002F",[68,59245,55471],{"class":81},[68,59247,876],{"class":85},[68,59249,59250,59252,59254],{"class":70,"line":11415},[68,59251,54002],{"class":85},[68,59253,82],{"class":81},[68,59255,876],{"class":85},[68,59257,59258],{"class":70,"line":11421},[68,59259,4000],{"emptyLinePlaceholder":1679},[68,59261,59262,59264,59266],{"class":70,"line":11442},[68,59263,53729],{"class":85},[68,59265,53398],{"class":81},[68,59267,876],{"class":85},[68,59269,59270],{"class":70,"line":11448},[68,59271,59272],{"class":74},"    \u002F\u002F 数据数组\n",[68,59274,59275,59277,59280,59282,59284,59287,59289,59292,59294,59297,59299,59302,59304,59307],{"class":70,"line":11462},[68,59276,12819],{"class":102},[68,59278,59279],{"class":92}," arr",[68,59281,15161],{"class":102},[68,59283,53811],{"class":85},[68,59285,59286],{"class":872},"'马超'",[68,59288,1002],{"class":85},[68,59290,59291],{"class":872},"'黄忠'",[68,59293,1002],{"class":85},[68,59295,59296],{"class":872},"'赵云'",[68,59298,1002],{"class":85},[68,59300,59301],{"class":872},"'关羽'",[68,59303,1002],{"class":85},[68,59305,59306],{"class":872},"'张飞'",[68,59308,34839],{"class":85},[68,59310,59311,59313,59316,59318,59320,59322,59324,59327],{"class":70,"line":11468},[68,59312,12819],{"class":102},[68,59314,59315],{"class":92}," qs",[68,59317,15161],{"class":102},[68,59319,55980],{"class":85},[68,59321,55983],{"class":587},[68,59323,997],{"class":85},[68,59325,59326],{"class":872},"'.qs'",[68,59328,1757],{"class":85},[68,59330,59331],{"class":70,"line":11495},[68,59332,59333],{"class":74},"    \u002F\u002F 1.业务1.开始按钮模块\n",[68,59335,59336,59338,59340,59342,59344,59346,59348,59351],{"class":70,"line":11504},[68,59337,12819],{"class":102},[68,59339,5783],{"class":92},[68,59341,15161],{"class":102},[68,59343,55980],{"class":85},[68,59345,55983],{"class":587},[68,59347,997],{"class":85},[68,59349,59350],{"class":872},"'.start'",[68,59352,1757],{"class":85},[68,59354,59355],{"class":70,"line":11510},[68,59356,59357],{"class":74},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[68,59359,59360,59362,59365,59367],{"class":70,"line":11518},[68,59361,53804],{"class":102},[68,59363,59364],{"class":85}," timerId ",[68,59366,869],{"class":102},[68,59368,48926],{"class":92},[68,59370,59371],{"class":70,"line":11523},[68,59372,59373],{"class":74},"    \u002F\u002F 随机号要全局变量\n",[68,59375,59376,59378,59381,59383],{"class":70,"line":18199},[68,59377,53804],{"class":102},[68,59379,59380],{"class":85}," random ",[68,59382,869],{"class":102},[68,59384,48926],{"class":92},[68,59386,59387],{"class":70,"line":18205},[68,59388,59389],{"class":74},"    \u002F\u002F 1.1 添加点击事件\n",[68,59391,59392,59395,59398,59400,59403,59405,59407],{"class":70,"line":18228},[68,59393,59394],{"class":85},"    start.",[68,59396,59397],{"class":587},"addEventListener",[68,59399,997],{"class":85},[68,59401,59402],{"class":872},"'click'",[68,59404,1002],{"class":85},[68,59406,56033],{"class":102},[68,59408,56036],{"class":85},[68,59410,59411,59414,59416,59418,59420,59422],{"class":70,"line":18234},[68,59412,59413],{"class":85},"      timerId ",[68,59415,869],{"class":102},[68,59417,56028],{"class":587},[68,59419,997],{"class":85},[68,59421,56033],{"class":102},[68,59423,56036],{"class":85},[68,59425,59426],{"class":70,"line":18257},[68,59427,59428],{"class":74},"        \u002F\u002F 随机数\n",[68,59430,59431,59434,59436,59439,59442,59445,59447,59449,59451,59453],{"class":70,"line":18271},[68,59432,59433],{"class":85},"        random ",[68,59435,869],{"class":102},[68,59437,59438],{"class":587}," parseInt",[68,59440,59441],{"class":85},"(Math.",[68,59443,59444],{"class":587},"random",[68,59446,14647],{"class":85},[68,59448,2191],{"class":102},[68,59450,53550],{"class":85},[68,59452,53553],{"class":92},[68,59454,1757],{"class":85},[68,59456,59457,59460,59462],{"class":70,"line":18291},[68,59458,59459],{"class":85},"        qs.innerHTML ",[68,59461,869],{"class":102},[68,59463,59464],{"class":85}," arr[random]\n",[68,59466,59467,59470,59472],{"class":70,"line":18297},[68,59468,59469],{"class":85},"      }, ",[68,59471,2009],{"class":92},[68,59473,1757],{"class":85},[68,59475,59476],{"class":70,"line":18308},[68,59477,59478],{"class":74},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[68,59480,59481,59483,59486,59488,59491,59493],{"class":70,"line":18331},[68,59482,56064],{"class":102},[68,59484,59485],{"class":85}," (arr.",[68,59487,53553],{"class":92},[68,59489,59490],{"class":102}," ===",[68,59492,1112],{"class":92},[68,59494,14039],{"class":85},[68,59496,59497],{"class":70,"line":18353},[68,59498,59499],{"class":74},"        \u002F\u002F start.disabled = true\n",[68,59501,59502],{"class":70,"line":18358},[68,59503,59504],{"class":74},"        \u002F\u002F end.disabled = true\n",[68,59506,59507],{"class":70,"line":18364},[68,59508,59509],{"class":74},"        \u002F\u002F 可以合起来写\n",[68,59511,59512,59515,59517,59520,59522],{"class":70,"line":18378},[68,59513,59514],{"class":85},"        start.disabled ",[68,59516,869],{"class":102},[68,59518,59519],{"class":85}," end.disabled ",[68,59521,869],{"class":102},[68,59523,59524],{"class":92}," true\n",[68,59526,59527],{"class":70,"line":18391},[68,59528,53983],{"class":85},[68,59530,59531],{"class":70,"line":18396},[68,59532,35054],{"class":85},[68,59534,59535],{"class":70,"line":18410},[68,59536,59537],{"class":74},"    \u002F\u002F 1.2 关闭按钮模块\n",[68,59539,59540,59542,59544,59546,59548,59550,59552,59555],{"class":70,"line":18415},[68,59541,12819],{"class":102},[68,59543,5799],{"class":92},[68,59545,15161],{"class":102},[68,59547,55980],{"class":85},[68,59549,55983],{"class":587},[68,59551,997],{"class":85},[68,59553,59554],{"class":872},"'.end'",[68,59556,1757],{"class":85},[68,59558,59559,59562,59564,59566,59568,59570,59572],{"class":70,"line":18421},[68,59560,59561],{"class":85},"    end.",[68,59563,59397],{"class":587},[68,59565,997],{"class":85},[68,59567,59402],{"class":872},[68,59569,1002],{"class":85},[68,59571,56033],{"class":102},[68,59573,56036],{"class":85},[68,59575,59576,59579],{"class":70,"line":18426},[68,59577,59578],{"class":587},"      clearInterval",[68,59580,59581],{"class":85},"(timerId)\n",[68,59583,59584],{"class":70,"line":18440},[68,59585,59586],{"class":74},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[68,59588,59589,59592,59595,59598,59600],{"class":70,"line":18445},[68,59590,59591],{"class":85},"      arr.",[68,59593,59594],{"class":587},"splice",[68,59596,59597],{"class":85},"(random, ",[68,59599,99],{"class":92},[68,59601,1757],{"class":85},[68,59603,59604],{"class":70,"line":18450},[68,59605,35054],{"class":85},[68,59607,59608],{"class":70,"line":18464},[68,59609,4000],{"emptyLinePlaceholder":1679},[68,59611,59612,59614,59616],{"class":70,"line":18476},[68,59613,54002],{"class":85},[68,59615,53398],{"class":81},[68,59617,876],{"class":85},[68,59619,59620,59622,59624],{"class":70,"line":18481},[68,59621,886],{"class":85},[68,59623,53385],{"class":81},[68,59625,876],{"class":85},[68,59627,59628],{"class":70,"line":18494},[68,59629,4000],{"emptyLinePlaceholder":1679},[68,59631,59632,59634,59636],{"class":70,"line":18499},[68,59633,886],{"class":85},[68,59635,52228],{"class":81},[68,59637,876],{"class":85},[19,59639,59640],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[43,59642,59644],{"id":59643},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[58,59646,59648],{"className":52226,"code":59647,"language":52228,"meta":63,"style":63},"\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",[65,59649,59650,59660,59674,59678,59686,59700,59720,59732,59740,59744,59752,59764,59772,59791,59808,59824,59834,59838,59846,59854,59858],{"__ignoreMap":63},[68,59651,59652,59654,59656,59658],{"class":70,"line":71},[68,59653,52890],{"class":85},[68,59655,52893],{"class":81},[68,59657,52896],{"class":587},[68,59659,876],{"class":85},[68,59661,59662,59664,59666,59668,59670,59672],{"class":70,"line":78},[68,59663,861],{"class":85},[68,59665,52228],{"class":81},[68,59667,52907],{"class":587},[68,59669,869],{"class":85},[68,59671,52912],{"class":872},[68,59673,876],{"class":85},[68,59675,59676],{"class":70,"line":89},[68,59677,4000],{"emptyLinePlaceholder":1679},[68,59679,59680,59682,59684],{"class":70,"line":115},[68,59681,861],{"class":85},[68,59683,52925],{"class":81},[68,59685,876],{"class":85},[68,59687,59688,59690,59692,59694,59696,59698],{"class":70,"line":280},[68,59689,53729],{"class":85},[68,59691,52935],{"class":81},[68,59693,52938],{"class":587},[68,59695,869],{"class":85},[68,59697,52943],{"class":872},[68,59699,876],{"class":85},[68,59701,59702,59704,59706,59708,59710,59712,59714,59716,59718],{"class":70,"line":301},[68,59703,53729],{"class":85},[68,59705,52935],{"class":81},[68,59707,16516],{"class":587},[68,59709,869],{"class":85},[68,59711,52982],{"class":872},[68,59713,52962],{"class":587},[68,59715,869],{"class":85},[68,59717,52989],{"class":872},[68,59719,876],{"class":85},[68,59721,59722,59724,59726,59728,59730],{"class":70,"line":320},[68,59723,53729],{"class":85},[68,59725,52998],{"class":81},[68,59727,53001],{"class":85},[68,59729,52998],{"class":81},[68,59731,876],{"class":85},[68,59733,59734,59736,59738],{"class":70,"line":2915},[68,59735,886],{"class":85},[68,59737,52925],{"class":81},[68,59739,876],{"class":85},[68,59741,59742],{"class":70,"line":2921},[68,59743,4000],{"emptyLinePlaceholder":1679},[68,59745,59746,59748,59750],{"class":70,"line":2933},[68,59747,861],{"class":85},[68,59749,53385],{"class":81},[68,59751,876],{"class":85},[68,59753,59754,59756,59758,59760,59762],{"class":70,"line":3214},[68,59755,53729],{"class":85},[68,59757,55471],{"class":81},[68,59759,55477],{"class":85},[68,59761,55471],{"class":81},[68,59763,876],{"class":85},[68,59765,59766,59768,59770],{"class":70,"line":3219},[68,59767,53729],{"class":85},[68,59769,53398],{"class":81},[68,59771,876],{"class":85},[68,59773,59774,59776,59778,59780,59782,59784,59786,59789],{"class":70,"line":3225},[68,59775,12819],{"class":102},[68,59777,55975],{"class":92},[68,59779,15161],{"class":102},[68,59781,55980],{"class":85},[68,59783,55983],{"class":587},[68,59785,997],{"class":85},[68,59787,59788],{"class":872},"'button'",[68,59790,1757],{"class":85},[68,59792,59793,59796,59798,59800,59802,59804,59806],{"class":70,"line":3230},[68,59794,59795],{"class":85},"    btn.",[68,59797,59397],{"class":587},[68,59799,997],{"class":85},[68,59801,59402],{"class":872},[68,59803,1002],{"class":85},[68,59805,56033],{"class":102},[68,59807,56036],{"class":85},[68,59809,59810,59813,59815,59817,59820,59822],{"class":70,"line":3244},[68,59811,59812],{"class":102},"      const",[68,59814,3840],{"class":92},[68,59816,15161],{"class":102},[68,59818,59819],{"class":85}," Math.",[68,59821,59444],{"class":587},[68,59823,3577],{"class":85},[68,59825,59826,59829,59832],{"class":70,"line":3249},[68,59827,59828],{"class":85},"      console.",[68,59830,59831],{"class":587},"log",[68,59833,1764],{"class":85},[68,59835,59836],{"class":70,"line":3255},[68,59837,35054],{"class":85},[68,59839,59840,59842,59844],{"class":70,"line":3276},[68,59841,54002],{"class":85},[68,59843,53398],{"class":81},[68,59845,876],{"class":85},[68,59847,59848,59850,59852],{"class":70,"line":3281},[68,59849,886],{"class":85},[68,59851,53385],{"class":81},[68,59853,876],{"class":85},[68,59855,59856],{"class":70,"line":3295},[68,59857,4000],{"emptyLinePlaceholder":1679},[68,59859,59860,59862,59864],{"class":70,"line":3300},[68,59861,886],{"class":85},[68,59863,52228],{"class":81},[68,59865,876],{"class":85},[19,59867,59868],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59870,59871],{},"常量不可以重新赋值",[19,59873,59874],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[58,59876,59878],{"className":52226,"code":59877,"language":52228,"meta":63,"style":63},"\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",[65,59879,59880,59890,59904,59908,59916,59930,59950,59962,59970,59974,59982,59994,60002,60013,60031,60047,60061,60069,60073,60081,60089,60093],{"__ignoreMap":63},[68,59881,59882,59884,59886,59888],{"class":70,"line":71},[68,59883,52890],{"class":85},[68,59885,52893],{"class":81},[68,59887,52896],{"class":587},[68,59889,876],{"class":85},[68,59891,59892,59894,59896,59898,59900,59902],{"class":70,"line":78},[68,59893,861],{"class":85},[68,59895,52228],{"class":81},[68,59897,52907],{"class":587},[68,59899,869],{"class":85},[68,59901,52912],{"class":872},[68,59903,876],{"class":85},[68,59905,59906],{"class":70,"line":89},[68,59907,4000],{"emptyLinePlaceholder":1679},[68,59909,59910,59912,59914],{"class":70,"line":115},[68,59911,861],{"class":85},[68,59913,52925],{"class":81},[68,59915,876],{"class":85},[68,59917,59918,59920,59922,59924,59926,59928],{"class":70,"line":280},[68,59919,53729],{"class":85},[68,59921,52935],{"class":81},[68,59923,52938],{"class":587},[68,59925,869],{"class":85},[68,59927,52943],{"class":872},[68,59929,876],{"class":85},[68,59931,59932,59934,59936,59938,59940,59942,59944,59946,59948],{"class":70,"line":301},[68,59933,53729],{"class":85},[68,59935,52935],{"class":81},[68,59937,16516],{"class":587},[68,59939,869],{"class":85},[68,59941,52982],{"class":872},[68,59943,52962],{"class":587},[68,59945,869],{"class":85},[68,59947,52989],{"class":872},[68,59949,876],{"class":85},[68,59951,59952,59954,59956,59958,59960],{"class":70,"line":320},[68,59953,53729],{"class":85},[68,59955,52998],{"class":81},[68,59957,53001],{"class":85},[68,59959,52998],{"class":81},[68,59961,876],{"class":85},[68,59963,59964,59966,59968],{"class":70,"line":2915},[68,59965,886],{"class":85},[68,59967,52925],{"class":81},[68,59969,876],{"class":85},[68,59971,59972],{"class":70,"line":2921},[68,59973,4000],{"emptyLinePlaceholder":1679},[68,59975,59976,59978,59980],{"class":70,"line":2933},[68,59977,861],{"class":85},[68,59979,53385],{"class":81},[68,59981,876],{"class":85},[68,59983,59984,59986,59988,59990,59992],{"class":70,"line":3214},[68,59985,53729],{"class":85},[68,59987,55471],{"class":81},[68,59989,55477],{"class":85},[68,59991,55471],{"class":81},[68,59993,876],{"class":85},[68,59995,59996,59998,60000],{"class":70,"line":3219},[68,59997,53729],{"class":85},[68,59999,53398],{"class":81},[68,60001,876],{"class":85},[68,60003,60004,60006,60008,60010],{"class":70,"line":3225},[68,60005,12819],{"class":102},[68,60007,3840],{"class":92},[68,60009,15161],{"class":102},[68,60011,60012],{"class":92}," 10\n",[68,60014,60015,60017,60019,60021,60023,60025,60027,60029],{"class":70,"line":3230},[68,60016,12819],{"class":102},[68,60018,55975],{"class":92},[68,60020,15161],{"class":102},[68,60022,55980],{"class":85},[68,60024,55983],{"class":587},[68,60026,997],{"class":85},[68,60028,59788],{"class":872},[68,60030,1757],{"class":85},[68,60032,60033,60035,60037,60039,60041,60043,60045],{"class":70,"line":3244},[68,60034,59795],{"class":85},[68,60036,59397],{"class":587},[68,60038,997],{"class":85},[68,60040,59402],{"class":872},[68,60042,1002],{"class":85},[68,60044,56033],{"class":102},[68,60046,56036],{"class":85},[68,60048,60049,60051,60053,60055,60057,60059],{"class":70,"line":3249},[68,60050,59812],{"class":102},[68,60052,3840],{"class":92},[68,60054,15161],{"class":102},[68,60056,59819],{"class":85},[68,60058,59444],{"class":587},[68,60060,3577],{"class":85},[68,60062,60063,60065,60067],{"class":70,"line":3255},[68,60064,59828],{"class":85},[68,60066,59831],{"class":587},[68,60068,1764],{"class":85},[68,60070,60071],{"class":70,"line":3276},[68,60072,35054],{"class":85},[68,60074,60075,60077,60079],{"class":70,"line":3281},[68,60076,54002],{"class":85},[68,60078,53398],{"class":81},[68,60080,876],{"class":85},[68,60082,60083,60085,60087],{"class":70,"line":3295},[68,60084,886],{"class":85},[68,60086,53385],{"class":81},[68,60088,876],{"class":85},[68,60090,60091],{"class":70,"line":3300},[68,60092,4000],{"emptyLinePlaceholder":1679},[68,60094,60095,60097,60099],{"class":70,"line":3329},[68,60096,886],{"class":85},[68,60098,52228],{"class":81},[68,60100,876],{"class":85},[19,60102,60103],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[58,60105,60107],{"className":52226,"code":60106,"language":52228,"meta":63,"style":63},"\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",[65,60108,60109,60119,60133,60137,60145,60159,60179,60191,60199,60203,60211,60223,60231,60241,60259,60275,60288,60296,60300,60308,60316,60320],{"__ignoreMap":63},[68,60110,60111,60113,60115,60117],{"class":70,"line":71},[68,60112,52890],{"class":85},[68,60114,52893],{"class":81},[68,60116,52896],{"class":587},[68,60118,876],{"class":85},[68,60120,60121,60123,60125,60127,60129,60131],{"class":70,"line":78},[68,60122,861],{"class":85},[68,60124,52228],{"class":81},[68,60126,52907],{"class":587},[68,60128,869],{"class":85},[68,60130,52912],{"class":872},[68,60132,876],{"class":85},[68,60134,60135],{"class":70,"line":89},[68,60136,4000],{"emptyLinePlaceholder":1679},[68,60138,60139,60141,60143],{"class":70,"line":115},[68,60140,861],{"class":85},[68,60142,52925],{"class":81},[68,60144,876],{"class":85},[68,60146,60147,60149,60151,60153,60155,60157],{"class":70,"line":280},[68,60148,53729],{"class":85},[68,60150,52935],{"class":81},[68,60152,52938],{"class":587},[68,60154,869],{"class":85},[68,60156,52943],{"class":872},[68,60158,876],{"class":85},[68,60160,60161,60163,60165,60167,60169,60171,60173,60175,60177],{"class":70,"line":301},[68,60162,53729],{"class":85},[68,60164,52935],{"class":81},[68,60166,16516],{"class":587},[68,60168,869],{"class":85},[68,60170,52982],{"class":872},[68,60172,52962],{"class":587},[68,60174,869],{"class":85},[68,60176,52989],{"class":872},[68,60178,876],{"class":85},[68,60180,60181,60183,60185,60187,60189],{"class":70,"line":320},[68,60182,53729],{"class":85},[68,60184,52998],{"class":81},[68,60186,53001],{"class":85},[68,60188,52998],{"class":81},[68,60190,876],{"class":85},[68,60192,60193,60195,60197],{"class":70,"line":2915},[68,60194,886],{"class":85},[68,60196,52925],{"class":81},[68,60198,876],{"class":85},[68,60200,60201],{"class":70,"line":2921},[68,60202,4000],{"emptyLinePlaceholder":1679},[68,60204,60205,60207,60209],{"class":70,"line":2933},[68,60206,861],{"class":85},[68,60208,53385],{"class":81},[68,60210,876],{"class":85},[68,60212,60213,60215,60217,60219,60221],{"class":70,"line":3214},[68,60214,53729],{"class":85},[68,60216,55471],{"class":81},[68,60218,55477],{"class":85},[68,60220,55471],{"class":81},[68,60222,876],{"class":85},[68,60224,60225,60227,60229],{"class":70,"line":3219},[68,60226,53729],{"class":85},[68,60228,53398],{"class":81},[68,60230,876],{"class":85},[68,60232,60233,60235,60237,60239],{"class":70,"line":3225},[68,60234,12819],{"class":102},[68,60236,3840],{"class":92},[68,60238,15161],{"class":102},[68,60240,60012],{"class":92},[68,60242,60243,60245,60247,60249,60251,60253,60255,60257],{"class":70,"line":3230},[68,60244,12819],{"class":102},[68,60246,55975],{"class":92},[68,60248,15161],{"class":102},[68,60250,55980],{"class":85},[68,60252,55983],{"class":587},[68,60254,997],{"class":85},[68,60256,59788],{"class":872},[68,60258,1757],{"class":85},[68,60260,60261,60263,60265,60267,60269,60271,60273],{"class":70,"line":3244},[68,60262,59795],{"class":85},[68,60264,59397],{"class":587},[68,60266,997],{"class":85},[68,60268,59402],{"class":872},[68,60270,1002],{"class":85},[68,60272,56033],{"class":102},[68,60274,56036],{"class":85},[68,60276,60277,60280,60282,60284,60286],{"class":70,"line":3249},[68,60278,60279],{"class":85},"      num ",[68,60281,869],{"class":102},[68,60283,59819],{"class":85},[68,60285,59444],{"class":587},[68,60287,3577],{"class":85},[68,60289,60290,60292,60294],{"class":70,"line":3255},[68,60291,59828],{"class":85},[68,60293,59831],{"class":587},[68,60295,1764],{"class":85},[68,60297,60298],{"class":70,"line":3276},[68,60299,35054],{"class":85},[68,60301,60302,60304,60306],{"class":70,"line":3281},[68,60303,54002],{"class":85},[68,60305,53398],{"class":81},[68,60307,876],{"class":85},[68,60309,60310,60312,60314],{"class":70,"line":3295},[68,60311,886],{"class":85},[68,60313,53385],{"class":81},[68,60315,876],{"class":85},[68,60317,60318],{"class":70,"line":3300},[68,60319,4000],{"emptyLinePlaceholder":1679},[68,60321,60322,60324,60326],{"class":70,"line":3329},[68,60323,886],{"class":85},[68,60325,52228],{"class":81},[68,60327,876],{"class":85},[19,60329,60330],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[43,60332,60334],{"id":60333},"_324-事件监听版本","3.2.4 事件监听版本",[19,60336,60337],{},[38,60338],{"alt":63,"src":60339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60341,60342],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60344,60345],{},"这种方式会覆盖前边的事件监听:",[58,60347,60349],{"className":52226,"code":60348,"language":52228,"meta":63,"style":63},"\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",[65,60350,60351,60361,60375,60379,60387,60401,60421,60433,60441,60445,60453,60465,60473,60491,60505,60516,60520,60532,60542,60546,60554,60562,60566],{"__ignoreMap":63},[68,60352,60353,60355,60357,60359],{"class":70,"line":71},[68,60354,52890],{"class":85},[68,60356,52893],{"class":81},[68,60358,52896],{"class":587},[68,60360,876],{"class":85},[68,60362,60363,60365,60367,60369,60371,60373],{"class":70,"line":78},[68,60364,861],{"class":85},[68,60366,52228],{"class":81},[68,60368,52907],{"class":587},[68,60370,869],{"class":85},[68,60372,52912],{"class":872},[68,60374,876],{"class":85},[68,60376,60377],{"class":70,"line":89},[68,60378,4000],{"emptyLinePlaceholder":1679},[68,60380,60381,60383,60385],{"class":70,"line":115},[68,60382,861],{"class":85},[68,60384,52925],{"class":81},[68,60386,876],{"class":85},[68,60388,60389,60391,60393,60395,60397,60399],{"class":70,"line":280},[68,60390,53729],{"class":85},[68,60392,52935],{"class":81},[68,60394,52938],{"class":587},[68,60396,869],{"class":85},[68,60398,52943],{"class":872},[68,60400,876],{"class":85},[68,60402,60403,60405,60407,60409,60411,60413,60415,60417,60419],{"class":70,"line":301},[68,60404,53729],{"class":85},[68,60406,52935],{"class":81},[68,60408,16516],{"class":587},[68,60410,869],{"class":85},[68,60412,52982],{"class":872},[68,60414,52962],{"class":587},[68,60416,869],{"class":85},[68,60418,52989],{"class":872},[68,60420,876],{"class":85},[68,60422,60423,60425,60427,60429,60431],{"class":70,"line":320},[68,60424,53729],{"class":85},[68,60426,52998],{"class":81},[68,60428,53001],{"class":85},[68,60430,52998],{"class":81},[68,60432,876],{"class":85},[68,60434,60435,60437,60439],{"class":70,"line":2915},[68,60436,886],{"class":85},[68,60438,52925],{"class":81},[68,60440,876],{"class":85},[68,60442,60443],{"class":70,"line":2921},[68,60444,4000],{"emptyLinePlaceholder":1679},[68,60446,60447,60449,60451],{"class":70,"line":2933},[68,60448,861],{"class":85},[68,60450,53385],{"class":81},[68,60452,876],{"class":85},[68,60454,60455,60457,60459,60461,60463],{"class":70,"line":3214},[68,60456,53729],{"class":85},[68,60458,55471],{"class":81},[68,60460,55477],{"class":85},[68,60462,55471],{"class":81},[68,60464,876],{"class":85},[68,60466,60467,60469,60471],{"class":70,"line":3219},[68,60468,53729],{"class":85},[68,60470,53398],{"class":81},[68,60472,876],{"class":85},[68,60474,60475,60477,60479,60481,60483,60485,60487,60489],{"class":70,"line":3225},[68,60476,12819],{"class":102},[68,60478,55975],{"class":92},[68,60480,15161],{"class":102},[68,60482,55980],{"class":85},[68,60484,55983],{"class":587},[68,60486,997],{"class":85},[68,60488,59788],{"class":872},[68,60490,1757],{"class":85},[68,60492,60493,60495,60498,60500,60503],{"class":70,"line":3230},[68,60494,59795],{"class":85},[68,60496,60497],{"class":587},"onclick",[68,60499,15161],{"class":102},[68,60501,60502],{"class":102}," function",[68,60504,56036],{"class":85},[68,60506,60507,60510,60512,60514],{"class":70,"line":3244},[68,60508,60509],{"class":587},"      alert",[68,60511,997],{"class":85},[68,60513,2208],{"class":92},[68,60515,1757],{"class":85},[68,60517,60518],{"class":70,"line":3249},[68,60519,3787],{"class":85},[68,60521,60522,60524,60526,60528,60530],{"class":70,"line":3255},[68,60523,59795],{"class":85},[68,60525,60497],{"class":587},[68,60527,15161],{"class":102},[68,60529,60502],{"class":102},[68,60531,56036],{"class":85},[68,60533,60534,60536,60538,60540],{"class":70,"line":3276},[68,60535,60509],{"class":587},[68,60537,997],{"class":85},[68,60539,2486],{"class":92},[68,60541,1757],{"class":85},[68,60543,60544],{"class":70,"line":3281},[68,60545,3787],{"class":85},[68,60547,60548,60550,60552],{"class":70,"line":3295},[68,60549,54002],{"class":85},[68,60551,53398],{"class":81},[68,60553,876],{"class":85},[68,60555,60556,60558,60560],{"class":70,"line":3300},[68,60557,886],{"class":85},[68,60559,53385],{"class":81},[68,60561,876],{"class":85},[68,60563,60564],{"class":70,"line":3329},[68,60565,4000],{"emptyLinePlaceholder":1679},[68,60567,60568,60570,60572],{"class":70,"line":3334},[68,60569,886],{"class":85},[68,60571,52228],{"class":81},[68,60573,876],{"class":85},[19,60575,60576],{},"只要点击就输出结果为22,前边11被覆盖了",[58,60578,60580],{"className":52226,"code":60579,"language":52228,"meta":63,"style":63},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[65,60581,60582,60587,60592,60596,60601,60606],{"__ignoreMap":63},[68,60583,60584],{"class":70,"line":71},[68,60585,60586],{"class":85},"  btn.addEventListener('click', function () {\n",[68,60588,60589],{"class":70,"line":78},[68,60590,60591],{"class":85},"      alert(11)\n",[68,60593,60594],{"class":70,"line":89},[68,60595,35054],{"class":85},[68,60597,60598],{"class":70,"line":115},[68,60599,60600],{"class":85},"    btn.addEventListener('click', function () {\n",[68,60602,60603],{"class":70,"line":280},[68,60604,60605],{"class":85},"      alert(22)\n",[68,60607,60608],{"class":70,"line":301},[68,60609,35054],{"class":85},[19,60611,60612],{},"点击第一次输出11,第二次点击为22",[43,60614,60616],{"id":60615},"_325-事件类型","3.2.5 事件类型",[19,60618,60619],{},[38,60620],{"alt":63,"src":60621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23593,60623,60625],{"id":60624},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60627,60628],{},"补充知识:",[19,60630,60631],{},"轮播图自动播放模块,可以使用",[19,60633,60634],{},"let timerId = setInterval(function () {",[19,60636,60637],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60639,60640],{},"用js方法模拟进行点击事件,click必须加()",[19,60642,60643],{},"next.click()",[19,60645,60646],{},"}, 1000)",[19,60648,60649],{},[38,60650],{"alt":63,"src":60651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[58,60653,60655],{"className":54652,"code":60654,"language":54654,"meta":63,"style":63},"\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",[65,60656,60657,60661,60671,60685,60689,60697,60712,60732,60752,60765,60773,60778,60783,60787,60791,60796,60801,60806,60811,60815,60819,60824,60829,60834,60838,60842,60847,60851,60856,60861,60865,60869,60874,60879,60884,60889,60894,60898,60902,60907,60912,60917,60922,60927,60931,60935,60940,60945,60950,60955,60960,60965,60970,60975,60980,60985,60989,60993,60998,61003,61007,61011,61016,61021,61025,61030,61035,61039,61043,61048,61052,61057,61062,61066,61071,61075,61079,61084,61089,61094,61099,61104,61109,61114,61118,61122,61126,61131,61136,61141,61146,61150,61158,61166,61170,61178,61193,61207,61228,61236,61250,61263,61278,61297,61309,61321,61333,61345,61357,61369,61381,61389,61404,61428,61452,61460,61468,61476,61484,61489,61494,61499,61504,61509,61514,61519,61524,61529,61534,61538,61543,61548,61553,61558,61563,61568,61573,61578,61583,61587,61592,61597,61602,61607,61612,61617,61622,61627,61632,61637,61642,61647,61651,61655,61660,61665,61670,61674,61679,61684,61689,61694,61699,61703,61708,61712,61716,61720,61724,61728,61732,61737,61742,61747,61752,61757,61762,61767,61772,61777,61781,61785,61790,61795,61800,61805,61810,61814,61819,61824,61829,61834,61839,61844,61848,61852,61857,61861,61866,61870,61875,61880,61885,61890,61895,61900,61904,61912,61920,61924],{"__ignoreMap":63},[68,60658,60659],{"class":70,"line":71},[68,60660,4000],{"emptyLinePlaceholder":1679},[68,60662,60663,60665,60667,60669],{"class":70,"line":78},[68,60664,52890],{"class":85},[68,60666,52893],{"class":102},[68,60668,52896],{"class":92},[68,60670,876],{"class":85},[68,60672,60673,60675,60677,60679,60681,60683],{"class":70,"line":89},[68,60674,861],{"class":85},[68,60676,52228],{"class":81},[68,60678,52907],{"class":587},[68,60680,869],{"class":85},[68,60682,52912],{"class":872},[68,60684,876],{"class":85},[68,60686,60687],{"class":70,"line":115},[68,60688,4000],{"emptyLinePlaceholder":1679},[68,60690,60691,60693,60695],{"class":70,"line":280},[68,60692,861],{"class":85},[68,60694,52925],{"class":81},[68,60696,876],{"class":85},[68,60698,60699,60701,60703,60705,60707,60709],{"class":70,"line":301},[68,60700,53729],{"class":85},[68,60702,52935],{"class":81},[68,60704,52938],{"class":587},[68,60706,869],{"class":85},[68,60708,52943],{"class":872},[68,60710,60711],{"class":85}," \u002F>\n",[68,60713,60714,60716,60718,60720,60722,60724,60726,60728,60730],{"class":70,"line":320},[68,60715,53729],{"class":85},[68,60717,52935],{"class":81},[68,60719,52954],{"class":587},[68,60721,869],{"class":85},[68,60723,52959],{"class":872},[68,60725,52962],{"class":587},[68,60727,869],{"class":85},[68,60729,52967],{"class":872},[68,60731,60711],{"class":85},[68,60733,60734,60736,60738,60740,60742,60744,60746,60748,60750],{"class":70,"line":2915},[68,60735,53729],{"class":85},[68,60737,52935],{"class":81},[68,60739,16516],{"class":587},[68,60741,869],{"class":85},[68,60743,52982],{"class":872},[68,60745,52962],{"class":587},[68,60747,869],{"class":85},[68,60749,52989],{"class":872},[68,60751,60711],{"class":85},[68,60753,60754,60756,60758,60761,60763],{"class":70,"line":2921},[68,60755,53729],{"class":85},[68,60757,52998],{"class":81},[68,60759,60760],{"class":85},">轮播图点击切换\u003C\u002F",[68,60762,52998],{"class":81},[68,60764,876],{"class":85},[68,60766,60767,60769,60771],{"class":70,"line":2933},[68,60768,53729],{"class":85},[68,60770,1652],{"class":81},[68,60772,876],{"class":85},[68,60774,60775],{"class":70,"line":3214},[68,60776,60777],{"class":85},"    * {\n",[68,60779,60780],{"class":70,"line":3219},[68,60781,60782],{"class":85},"      box-sizing: border-box;\n",[68,60784,60785],{"class":70,"line":3225},[68,60786,3787],{"class":85},[68,60788,60789],{"class":70,"line":3230},[68,60790,4000],{"emptyLinePlaceholder":1679},[68,60792,60793],{"class":70,"line":3244},[68,60794,60795],{"class":85},"    .slider {\n",[68,60797,60798],{"class":70,"line":3249},[68,60799,60800],{"class":85},"      width: 560px;\n",[68,60802,60803],{"class":70,"line":3255},[68,60804,60805],{"class":85},"      height: 400px;\n",[68,60807,60808],{"class":70,"line":3276},[68,60809,60810],{"class":85},"      overflow: hidden;\n",[68,60812,60813],{"class":70,"line":3281},[68,60814,3787],{"class":85},[68,60816,60817],{"class":70,"line":3295},[68,60818,4000],{"emptyLinePlaceholder":1679},[68,60820,60821],{"class":70,"line":3300},[68,60822,60823],{"class":85},"    .slider-wrapper {\n",[68,60825,60826],{"class":70,"line":3329},[68,60827,60828],{"class":85},"      width: 100%;\n",[68,60830,60831],{"class":70,"line":3334},[68,60832,60833],{"class":85},"      height: 320px;\n",[68,60835,60836],{"class":70,"line":3351},[68,60837,3787],{"class":85},[68,60839,60840],{"class":70,"line":3356},[68,60841,4000],{"emptyLinePlaceholder":1679},[68,60843,60844],{"class":70,"line":3361},[68,60845,60846],{"class":85},"    .slider-wrapper img {\n",[68,60848,60849],{"class":70,"line":3366},[68,60850,60828],{"class":85},[68,60852,60853],{"class":70,"line":3380},[68,60854,60855],{"class":85},"      height: 100%;\n",[68,60857,60858],{"class":70,"line":3385},[68,60859,60860],{"class":85},"      display: block;\n",[68,60862,60863],{"class":70,"line":4177},[68,60864,3787],{"class":85},[68,60866,60867],{"class":70,"line":4191},[68,60868,4000],{"emptyLinePlaceholder":1679},[68,60870,60871],{"class":70,"line":4199},[68,60872,60873],{"class":85},"    .slider-footer {\n",[68,60875,60876],{"class":70,"line":4204},[68,60877,60878],{"class":85},"      height: 80px;\n",[68,60880,60881],{"class":70,"line":4210},[68,60882,60883],{"class":85},"      background-color: rgb(100, 67, 68);\n",[68,60885,60886],{"class":70,"line":4216},[68,60887,60888],{"class":85},"      padding: 12px 12px 0 12px;\n",[68,60890,60891],{"class":70,"line":4221},[68,60892,60893],{"class":85},"      position: relative;\n",[68,60895,60896],{"class":70,"line":9547},[68,60897,3787],{"class":85},[68,60899,60900],{"class":70,"line":9571},[68,60901,4000],{"emptyLinePlaceholder":1679},[68,60903,60904],{"class":70,"line":9576},[68,60905,60906],{"class":85},"    .slider-footer .toggle {\n",[68,60908,60909],{"class":70,"line":9582},[68,60910,60911],{"class":85},"      position: absolute;\n",[68,60913,60914],{"class":70,"line":9609},[68,60915,60916],{"class":85},"      right: 0;\n",[68,60918,60919],{"class":70,"line":9614},[68,60920,60921],{"class":85},"      top: 12px;\n",[68,60923,60924],{"class":70,"line":9620},[68,60925,60926],{"class":85},"      display: flex;\n",[68,60928,60929],{"class":70,"line":9632},[68,60930,3787],{"class":85},[68,60932,60933],{"class":70,"line":9644},[68,60934,4000],{"emptyLinePlaceholder":1679},[68,60936,60937],{"class":70,"line":9656},[68,60938,60939],{"class":85},"    .slider-footer .toggle button {\n",[68,60941,60942],{"class":70,"line":11314},[68,60943,60944],{"class":85},"      margin-right: 12px;\n",[68,60946,60947],{"class":70,"line":11339},[68,60948,60949],{"class":85},"      width: 28px;\n",[68,60951,60952],{"class":70,"line":11362},[68,60953,60954],{"class":85},"      height: 28px;\n",[68,60956,60957],{"class":70,"line":11386},[68,60958,60959],{"class":85},"      appearance: none;\n",[68,60961,60962],{"class":70,"line":11391},[68,60963,60964],{"class":85},"      border: none;\n",[68,60966,60967],{"class":70,"line":11396},[68,60968,60969],{"class":85},"      background: rgba(255, 255, 255, 0.1);\n",[68,60971,60972],{"class":70,"line":11401},[68,60973,60974],{"class":85},"      color: #fff;\n",[68,60976,60977],{"class":70,"line":11410},[68,60978,60979],{"class":85},"      border-radius: 4px;\n",[68,60981,60982],{"class":70,"line":11415},[68,60983,60984],{"class":85},"      cursor: pointer;\n",[68,60986,60987],{"class":70,"line":11421},[68,60988,3787],{"class":85},[68,60990,60991],{"class":70,"line":11442},[68,60992,4000],{"emptyLinePlaceholder":1679},[68,60994,60995],{"class":70,"line":11448},[68,60996,60997],{"class":85},"    .slider-footer .toggle button:hover {\n",[68,60999,61000],{"class":70,"line":11462},[68,61001,61002],{"class":85},"      background: rgba(255, 255, 255, 0.2);\n",[68,61004,61005],{"class":70,"line":11468},[68,61006,3787],{"class":85},[68,61008,61009],{"class":70,"line":11495},[68,61010,4000],{"emptyLinePlaceholder":1679},[68,61012,61013],{"class":70,"line":11504},[68,61014,61015],{"class":85},"    .slider-footer p {\n",[68,61017,61018],{"class":70,"line":11510},[68,61019,61020],{"class":85},"      margin: 0;\n",[68,61022,61023],{"class":70,"line":11518},[68,61024,60974],{"class":85},[68,61026,61027],{"class":70,"line":11523},[68,61028,61029],{"class":85},"      font-size: 18px;\n",[68,61031,61032],{"class":70,"line":18199},[68,61033,61034],{"class":85},"      margin-bottom: 10px;\n",[68,61036,61037],{"class":70,"line":18205},[68,61038,3787],{"class":85},[68,61040,61041],{"class":70,"line":18228},[68,61042,4000],{"emptyLinePlaceholder":1679},[68,61044,61045],{"class":70,"line":18234},[68,61046,61047],{"class":85},"    .slider-indicator {\n",[68,61049,61050],{"class":70,"line":18257},[68,61051,61020],{"class":85},[68,61053,61054],{"class":70,"line":18271},[68,61055,61056],{"class":85},"      padding: 0;\n",[68,61058,61059],{"class":70,"line":18291},[68,61060,61061],{"class":85},"      list-style: none;\n",[68,61063,61064],{"class":70,"line":18297},[68,61065,60926],{"class":85},[68,61067,61068],{"class":70,"line":18308},[68,61069,61070],{"class":85},"      align-items: center;\n",[68,61072,61073],{"class":70,"line":18331},[68,61074,3787],{"class":85},[68,61076,61077],{"class":70,"line":18353},[68,61078,4000],{"emptyLinePlaceholder":1679},[68,61080,61081],{"class":70,"line":18358},[68,61082,61083],{"class":85},"    .slider-indicator li {\n",[68,61085,61086],{"class":70,"line":18364},[68,61087,61088],{"class":85},"      width: 8px;\n",[68,61090,61091],{"class":70,"line":18378},[68,61092,61093],{"class":85},"      height: 8px;\n",[68,61095,61096],{"class":70,"line":18391},[68,61097,61098],{"class":85},"      margin: 4px;\n",[68,61100,61101],{"class":70,"line":18396},[68,61102,61103],{"class":85},"      border-radius: 50%;\n",[68,61105,61106],{"class":70,"line":18410},[68,61107,61108],{"class":85},"      background: #fff;\n",[68,61110,61111],{"class":70,"line":18415},[68,61112,61113],{"class":85},"      opacity: 0.4;\n",[68,61115,61116],{"class":70,"line":18421},[68,61117,60984],{"class":85},[68,61119,61120],{"class":70,"line":18426},[68,61121,3787],{"class":85},[68,61123,61124],{"class":70,"line":18440},[68,61125,4000],{"emptyLinePlaceholder":1679},[68,61127,61128],{"class":70,"line":18445},[68,61129,61130],{"class":85},"    .slider-indicator li.active {\n",[68,61132,61133],{"class":70,"line":18450},[68,61134,61135],{"class":85},"      width: 12px;\n",[68,61137,61138],{"class":70,"line":18464},[68,61139,61140],{"class":85},"      height: 12px;\n",[68,61142,61143],{"class":70,"line":18476},[68,61144,61145],{"class":85},"      opacity: 1;\n",[68,61147,61148],{"class":70,"line":18481},[68,61149,3787],{"class":85},[68,61151,61152,61154,61156],{"class":70,"line":18494},[68,61153,54002],{"class":85},[68,61155,1652],{"class":81},[68,61157,876],{"class":85},[68,61159,61160,61162,61164],{"class":70,"line":18499},[68,61161,886],{"class":85},[68,61163,52925],{"class":81},[68,61165,876],{"class":85},[68,61167,61168],{"class":70,"line":18504},[68,61169,4000],{"emptyLinePlaceholder":1679},[68,61171,61172,61174,61176],{"class":70,"line":18509},[68,61173,861],{"class":85},[68,61175,53385],{"class":81},[68,61177,876],{"class":85},[68,61179,61180,61182,61184,61186,61188,61191],{"class":70,"line":18522},[68,61181,53729],{"class":85},[68,61183,82],{"class":81},[68,61185,866],{"class":587},[68,61187,869],{"class":85},[68,61189,61190],{"class":872},"\"slider\"",[68,61192,876],{"class":85},[68,61194,61195,61197,61199,61201,61203,61205],{"class":70,"line":18527},[68,61196,52932],{"class":85},[68,61198,82],{"class":81},[68,61200,866],{"class":587},[68,61202,869],{"class":85},[68,61204,56811],{"class":872},[68,61206,876],{"class":85},[68,61208,61209,61211,61213,61215,61217,61220,61222,61224,61226],{"class":70,"line":34226},[68,61210,56818],{"class":85},[68,61212,38],{"class":81},[68,61214,56823],{"class":587},[68,61216,869],{"class":85},[68,61218,61219],{"class":872},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[68,61221,56831],{"class":587},[68,61223,869],{"class":85},[68,61225,9251],{"class":872},[68,61227,60711],{"class":85},[68,61229,61230,61232,61234],{"class":70,"line":34232},[68,61231,53362],{"class":85},[68,61233,82],{"class":81},[68,61235,876],{"class":85},[68,61237,61238,61240,61242,61244,61246,61248],{"class":70,"line":34238},[68,61239,52932],{"class":85},[68,61241,82],{"class":81},[68,61243,866],{"class":587},[68,61245,869],{"class":85},[68,61247,56858],{"class":872},[68,61249,876],{"class":85},[68,61251,61252,61254,61256,61259,61261],{"class":70,"line":34244},[68,61253,56818],{"class":85},[68,61255,19],{"class":81},[68,61257,61258],{"class":85},">对人类来说会不会太超前了？\u003C\u002F",[68,61260,19],{"class":81},[68,61262,876],{"class":85},[68,61264,61265,61267,61269,61271,61273,61276],{"class":70,"line":34250},[68,61266,56818],{"class":85},[68,61268,168],{"class":81},[68,61270,866],{"class":587},[68,61272,869],{"class":85},[68,61274,61275],{"class":872},"\"slider-indicator\"",[68,61277,876],{"class":85},[68,61279,61280,61282,61284,61286,61288,61291,61293,61295],{"class":70,"line":34261},[68,61281,56886],{"class":85},[68,61283,51],{"class":81},[68,61285,866],{"class":587},[68,61287,869],{"class":85},[68,61289,61290],{"class":872},"\"active\"",[68,61292,56898],{"class":85},[68,61294,51],{"class":81},[68,61296,876],{"class":85},[68,61298,61299,61301,61303,61305,61307],{"class":70,"line":34267},[68,61300,56886],{"class":85},[68,61302,51],{"class":81},[68,61304,56898],{"class":85},[68,61306,51],{"class":81},[68,61308,876],{"class":85},[68,61310,61311,61313,61315,61317,61319],{"class":70,"line":34287},[68,61312,56886],{"class":85},[68,61314,51],{"class":81},[68,61316,56898],{"class":85},[68,61318,51],{"class":81},[68,61320,876],{"class":85},[68,61322,61323,61325,61327,61329,61331],{"class":70,"line":34293},[68,61324,56886],{"class":85},[68,61326,51],{"class":81},[68,61328,56898],{"class":85},[68,61330,51],{"class":81},[68,61332,876],{"class":85},[68,61334,61335,61337,61339,61341,61343],{"class":70,"line":34304},[68,61336,56886],{"class":85},[68,61338,51],{"class":81},[68,61340,56898],{"class":85},[68,61342,51],{"class":81},[68,61344,876],{"class":85},[68,61346,61347,61349,61351,61353,61355],{"class":70,"line":34310},[68,61348,56886],{"class":85},[68,61350,51],{"class":81},[68,61352,56898],{"class":85},[68,61354,51],{"class":81},[68,61356,876],{"class":85},[68,61358,61359,61361,61363,61365,61367],{"class":70,"line":34316},[68,61360,56886],{"class":85},[68,61362,51],{"class":81},[68,61364,56898],{"class":85},[68,61366,51],{"class":81},[68,61368,876],{"class":85},[68,61370,61371,61373,61375,61377,61379],{"class":70,"line":34322},[68,61372,56886],{"class":85},[68,61374,51],{"class":81},[68,61376,56898],{"class":85},[68,61378,51],{"class":81},[68,61380,876],{"class":85},[68,61382,61383,61385,61387],{"class":70,"line":34328},[68,61384,56991],{"class":85},[68,61386,168],{"class":81},[68,61388,876],{"class":85},[68,61390,61391,61393,61395,61397,61399,61402],{"class":70,"line":34334},[68,61392,56818],{"class":85},[68,61394,82],{"class":81},[68,61396,866],{"class":587},[68,61398,869],{"class":85},[68,61400,61401],{"class":872},"\"toggle\"",[68,61403,876],{"class":85},[68,61405,61406,61408,61410,61412,61414,61417,61419,61422,61424,61426],{"class":70,"line":34340},[68,61407,56886],{"class":85},[68,61409,55471],{"class":81},[68,61411,866],{"class":587},[68,61413,869],{"class":85},[68,61415,61416],{"class":872},"\"prev\"",[68,61418,2695],{"class":85},[68,61420,61421],{"class":92},"&lt;",[68,61423,886],{"class":85},[68,61425,55471],{"class":81},[68,61427,876],{"class":85},[68,61429,61430,61432,61434,61436,61438,61441,61443,61446,61448,61450],{"class":70,"line":34346},[68,61431,56886],{"class":85},[68,61433,55471],{"class":81},[68,61435,866],{"class":587},[68,61437,869],{"class":85},[68,61439,61440],{"class":872},"\"next\"",[68,61442,2695],{"class":85},[68,61444,61445],{"class":92},"&gt;",[68,61447,886],{"class":85},[68,61449,55471],{"class":81},[68,61451,876],{"class":85},[68,61453,61454,61456,61458],{"class":70,"line":34366},[68,61455,56991],{"class":85},[68,61457,82],{"class":81},[68,61459,876],{"class":85},[68,61461,61462,61464,61466],{"class":70,"line":34372},[68,61463,53362],{"class":85},[68,61465,82],{"class":81},[68,61467,876],{"class":85},[68,61469,61470,61472,61474],{"class":70,"line":34388},[68,61471,54002],{"class":85},[68,61473,82],{"class":81},[68,61475,876],{"class":85},[68,61477,61478,61480,61482],{"class":70,"line":34394},[68,61479,53729],{"class":85},[68,61481,53398],{"class":81},[68,61483,876],{"class":85},[68,61485,61486],{"class":70,"line":34408},[68,61487,61488],{"class":85},"    \u002F\u002F 1. 初始数据\n",[68,61490,61491],{"class":70,"line":34414},[68,61492,61493],{"class":85},"    const data = [\n",[68,61495,61496],{"class":70,"line":34429},[68,61497,61498],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[68,61500,61501],{"class":70,"line":34435},[68,61502,61503],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[68,61505,61506],{"class":70,"line":34444},[68,61507,61508],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[68,61510,61511],{"class":70,"line":34450},[68,61512,61513],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[68,61515,61516],{"class":70,"line":34459},[68,61517,61518],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[68,61520,61521],{"class":70,"line":34465},[68,61522,61523],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[68,61525,61526],{"class":70,"line":34471},[68,61527,61528],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[68,61530,61531],{"class":70,"line":34480},[68,61532,61533],{"class":85},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[68,61535,61536],{"class":70,"line":34486},[68,61537,54694],{"class":85},[68,61539,61540],{"class":70,"line":34497},[68,61541,61542],{"class":85},"    \u002F\u002F 获取元素\n",[68,61544,61545],{"class":70,"line":34503},[68,61546,61547],{"class":85},"    const img = document.querySelector('.slider-wrapper img')\n",[68,61549,61550],{"class":70,"line":34522},[68,61551,61552],{"class":85},"    const p = document.querySelector('.slider-footer p')\n",[68,61554,61555],{"class":70,"line":34528},[68,61556,61557],{"class":85},"    const footer = document.querySelector('.slider-footer')\n",[68,61559,61560],{"class":70,"line":34539},[68,61561,61562],{"class":85},"    \u002F\u002F 1. 右按钮业务\n",[68,61564,61565],{"class":70,"line":34545},[68,61566,61567],{"class":85},"    \u002F\u002F 1.1 获取右侧按钮 \n",[68,61569,61570],{"class":70,"line":34565},[68,61571,61572],{"class":85},"    const next = document.querySelector('.next')\n",[68,61574,61575],{"class":70,"line":34581},[68,61576,61577],{"class":85},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[68,61579,61580],{"class":70,"line":34587},[68,61581,61582],{"class":85},"    \u002F\u002F 1.2 注册点击事件\n",[68,61584,61585],{"class":70,"line":34601},[68,61586,4000],{"emptyLinePlaceholder":1679},[68,61588,61589],{"class":70,"line":34607},[68,61590,61591],{"class":85},"    next.addEventListener('click', function () {\n",[68,61593,61594],{"class":70,"line":34613},[68,61595,61596],{"class":85},"      \u002F\u002F console.log(11)\n",[68,61598,61599],{"class":70,"line":34624},[68,61600,61601],{"class":85},"      i++\n",[68,61603,61604],{"class":70,"line":34630},[68,61605,61606],{"class":85},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[68,61608,61609],{"class":70,"line":34636},[68,61610,61611],{"class":85},"      \u002F\u002F if (i >= 8) {\n",[68,61613,61614],{"class":70,"line":34646},[68,61615,61616],{"class":85},"      \u002F\u002F   i = 0\n",[68,61618,61619],{"class":70,"line":34652},[68,61620,61621],{"class":85},"      \u002F\u002F }\n",[68,61623,61624],{"class":70,"line":34663},[68,61625,61626],{"class":85},"      i = i >= data.length ? 0 : i\n",[68,61628,61629],{"class":70,"line":34669},[68,61630,61631],{"class":85},"      \u002F\u002F 1.3 得到对应的对象\n",[68,61633,61634],{"class":70,"line":34679},[68,61635,61636],{"class":85},"      \u002F\u002F console.log(data[i])\n",[68,61638,61639],{"class":70,"line":34684},[68,61640,61641],{"class":85},"      \u002F\u002F 调用函数\n",[68,61643,61644],{"class":70,"line":34690},[68,61645,61646],{"class":85},"      toggle()\n",[68,61648,61649],{"class":70,"line":34739},[68,61650,35054],{"class":85},[68,61652,61653],{"class":70,"line":34786},[68,61654,4000],{"emptyLinePlaceholder":1679},[68,61656,61657],{"class":70,"line":34791},[68,61658,61659],{"class":85},"    \u002F\u002F 2. 左侧按钮业务\n",[68,61661,61662],{"class":70,"line":34797},[68,61663,61664],{"class":85},"    \u002F\u002F 2.1 获取左侧按钮 \n",[68,61666,61667],{"class":70,"line":34816},[68,61668,61669],{"class":85},"    const prev = document.querySelector('.prev')\n",[68,61671,61672],{"class":70,"line":34822},[68,61673,61582],{"class":85},[68,61675,61676],{"class":70,"line":34842},[68,61677,61678],{"class":85},"    prev.addEventListener('click', function () {\n",[68,61680,61681],{"class":70,"line":34848},[68,61682,61683],{"class":85},"      i--\n",[68,61685,61686],{"class":70,"line":34854},[68,61687,61688],{"class":85},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[68,61690,61691],{"class":70,"line":34864},[68,61692,61693],{"class":85},"      \u002F\u002F if (i \u003C 0) {\n",[68,61695,61696],{"class":70,"line":34869},[68,61697,61698],{"class":85},"      \u002F\u002F   i = 7\n",[68,61700,61701],{"class":70,"line":34875},[68,61702,61621],{"class":85},[68,61704,61705],{"class":70,"line":34891},[68,61706,61707],{"class":85},"      i = i \u003C 0 ? data.length - 1 : i\n",[68,61709,61710],{"class":70,"line":34936},[68,61711,61631],{"class":85},[68,61713,61714],{"class":70,"line":34942},[68,61715,61636],{"class":85},[68,61717,61718],{"class":70,"line":34948},[68,61719,61641],{"class":85},[68,61721,61722],{"class":70,"line":34954},[68,61723,61646],{"class":85},[68,61725,61726],{"class":70,"line":34965},[68,61727,35054],{"class":85},[68,61729,61730],{"class":70,"line":34971},[68,61731,4000],{"emptyLinePlaceholder":1679},[68,61733,61734],{"class":70,"line":34977},[68,61735,61736],{"class":85},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[68,61738,61739],{"class":70,"line":34983},[68,61740,61741],{"class":85},"    function toggle() {\n",[68,61743,61744],{"class":70,"line":35001},[68,61745,61746],{"class":85},"      \u002F\u002F 1.4 渲染对应的数据\n",[68,61748,61749],{"class":70,"line":35015},[68,61750,61751],{"class":85},"      img.src = data[i].url\n",[68,61753,61754],{"class":70,"line":35024},[68,61755,61756],{"class":85},"      p.innerHTML = data[i].title\n",[68,61758,61759],{"class":70,"line":35033},[68,61760,61761],{"class":85},"      footer.style.backgroundColor = data[i].color\n",[68,61763,61764],{"class":70,"line":35042},[68,61765,61766],{"class":85},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[68,61768,61769],{"class":70,"line":35051},[68,61770,61771],{"class":85},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[68,61773,61774],{"class":70,"line":35057},[68,61775,61776],{"class":85},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[68,61778,61779],{"class":70,"line":35063},[68,61780,3787],{"class":85},[68,61782,61783],{"class":70,"line":35071},[68,61784,4000],{"emptyLinePlaceholder":1679},[68,61786,61787],{"class":70,"line":35076},[68,61788,61789],{"class":85},"    \u002F\u002F 3. 自动播放模块\n",[68,61791,61792],{"class":70,"line":35082},[68,61793,61794],{"class":85},"    let timerId = setInterval(function () {\n",[68,61796,61797],{"class":70,"line":35093},[68,61798,61799],{"class":85},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[68,61801,61802],{"class":70,"line":35099},[68,61803,61804],{"class":85},"      next.click()\n",[68,61806,61807],{"class":70,"line":35119},[68,61808,61809],{"class":85},"    }, 1000)\n",[68,61811,61812],{"class":70,"line":35125},[68,61813,4000],{"emptyLinePlaceholder":1679},[68,61815,61816],{"class":70,"line":35131},[68,61817,61818],{"class":85},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[68,61820,61821],{"class":70,"line":35137},[68,61822,61823],{"class":85},"    const slider = document.querySelector('.slider')\n",[68,61825,61826],{"class":70,"line":35154},[68,61827,61828],{"class":85},"    \u002F\u002F 注册事件\n",[68,61830,61831],{"class":70,"line":35160},[68,61832,61833],{"class":85},"    slider.addEventListener('mouseenter', function () {\n",[68,61835,61836],{"class":70,"line":35166},[68,61837,61838],{"class":85},"      \u002F\u002F 停止定时器\n",[68,61840,61841],{"class":70,"line":35172},[68,61842,61843],{"class":85},"      clearInterval(timerId)\n",[68,61845,61846],{"class":70,"line":35178},[68,61847,35054],{"class":85},[68,61849,61850],{"class":70,"line":35184},[68,61851,4000],{"emptyLinePlaceholder":1679},[68,61853,61854],{"class":70,"line":35211},[68,61855,61856],{"class":85},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[68,61858,61859],{"class":70,"line":35235},[68,61860,61828],{"class":85},[68,61862,61863],{"class":70,"line":35241},[68,61864,61865],{"class":85},"    slider.addEventListener('mouseleave', function () {\n",[68,61867,61868],{"class":70,"line":35247},[68,61869,61838],{"class":85},[68,61871,61872],{"class":70,"line":35253},[68,61873,61874],{"class":85},"      if (timerId) clearInterval(timerId)\n",[68,61876,61877],{"class":70,"line":35264},[68,61878,61879],{"class":85},"      \u002F\u002F 开启定时器\n",[68,61881,61882],{"class":70,"line":35275},[68,61883,61884],{"class":85},"      timerId = setInterval(function () {\n",[68,61886,61887],{"class":70,"line":35281},[68,61888,61889],{"class":85},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[68,61891,61892],{"class":70,"line":35298},[68,61893,61894],{"class":85},"        next.click()\n",[68,61896,61897],{"class":70,"line":35321},[68,61898,61899],{"class":85},"      }, 1000)\n",[68,61901,61902],{"class":70,"line":35344},[68,61903,35054],{"class":85},[68,61905,61906,61908,61910],{"class":70,"line":35350},[68,61907,54002],{"class":85},[68,61909,53398],{"class":81},[68,61911,876],{"class":85},[68,61913,61914,61916,61918],{"class":70,"line":35355},[68,61915,886],{"class":85},[68,61917,53385],{"class":81},[68,61919,876],{"class":85},[68,61921,61922],{"class":70,"line":35364},[68,61923,4000],{"emptyLinePlaceholder":1679},[68,61925,61926,61928,61930],{"class":70,"line":35374},[68,61927,886],{"class":85},[68,61929,52228],{"class":81},[68,61931,876],{"class":85},[23593,61933,61935],{"id":61934},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61937,61938],{},"小米搜索框案例：",[58,61940,61942],{"className":52226,"code":61941,"language":52228,"meta":63,"style":63},"\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",[65,61943,61944,61954,61968,61972,61980,61994,62014,62034,62046,62054,62060,62070,62080,62092,62096,62100,62107,62111,62122,62126,62130,62137,62148,62161,62175,62179,62183,62192,62204,62216,62230,62243,62256,62274,62285,62289,62293,62302,62319,62323,62327,62334,62344,62354,62365,62378,62390,62406,62417,62429,62433,62437,62445,62456,62473,62485,62497,62508,62512,62516,62527,62538,62542,62550,62554,62562,62566,62574,62589,62612,62627,62658,62685,62712,62739,62766,62793,62820,62829,62837,62845,62850,62870,62890,62895,62900,62918,62923,62933,62938,62952,62957,62962,62979,62988,63000,63004,63012,63020,63024],{"__ignoreMap":63},[68,61945,61946,61948,61950,61952],{"class":70,"line":71},[68,61947,52890],{"class":85},[68,61949,52893],{"class":81},[68,61951,52896],{"class":587},[68,61953,876],{"class":85},[68,61955,61956,61958,61960,61962,61964,61966],{"class":70,"line":78},[68,61957,861],{"class":85},[68,61959,52228],{"class":81},[68,61961,52907],{"class":587},[68,61963,869],{"class":85},[68,61965,52912],{"class":872},[68,61967,876],{"class":85},[68,61969,61970],{"class":70,"line":89},[68,61971,4000],{"emptyLinePlaceholder":1679},[68,61973,61974,61976,61978],{"class":70,"line":115},[68,61975,861],{"class":85},[68,61977,52925],{"class":81},[68,61979,876],{"class":85},[68,61981,61982,61984,61986,61988,61990,61992],{"class":70,"line":280},[68,61983,52932],{"class":85},[68,61985,52935],{"class":81},[68,61987,52938],{"class":587},[68,61989,869],{"class":85},[68,61991,52943],{"class":872},[68,61993,876],{"class":85},[68,61995,61996,61998,62000,62002,62004,62006,62008,62010,62012],{"class":70,"line":301},[68,61997,52932],{"class":85},[68,61999,52935],{"class":81},[68,62001,52954],{"class":587},[68,62003,869],{"class":85},[68,62005,52959],{"class":872},[68,62007,52962],{"class":587},[68,62009,869],{"class":85},[68,62011,52967],{"class":872},[68,62013,876],{"class":85},[68,62015,62016,62018,62020,62022,62024,62026,62028,62030,62032],{"class":70,"line":320},[68,62017,52932],{"class":85},[68,62019,52935],{"class":81},[68,62021,16516],{"class":587},[68,62023,869],{"class":85},[68,62025,52982],{"class":872},[68,62027,52962],{"class":587},[68,62029,869],{"class":85},[68,62031,52989],{"class":872},[68,62033,876],{"class":85},[68,62035,62036,62038,62040,62042,62044],{"class":70,"line":2915},[68,62037,52932],{"class":85},[68,62039,52998],{"class":81},[68,62041,53001],{"class":85},[68,62043,52998],{"class":81},[68,62045,876],{"class":85},[68,62047,62048,62050,62052],{"class":70,"line":2921},[68,62049,52932],{"class":85},[68,62051,1652],{"class":81},[68,62053,876],{"class":85},[68,62055,62056,62058],{"class":70,"line":2933},[68,62057,53018],{"class":81},[68,62059,86],{"class":85},[68,62061,62062,62064,62066,62068],{"class":70,"line":3214},[68,62063,53025],{"class":92},[68,62065,96],{"class":85},[68,62067,600],{"class":92},[68,62069,112],{"class":85},[68,62071,62072,62074,62076,62078],{"class":70,"line":3219},[68,62073,53036],{"class":92},[68,62075,96],{"class":85},[68,62077,600],{"class":92},[68,62079,112],{"class":85},[68,62081,62082,62085,62087,62090],{"class":70,"line":3225},[68,62083,62084],{"class":92},"            box-sizing",[68,62086,96],{"class":85},[68,62088,62089],{"class":92},"border-box",[68,62091,112],{"class":85},[68,62093,62094],{"class":70,"line":3230},[68,62095,4129],{"class":85},[68,62097,62098],{"class":70,"line":3244},[68,62099,4000],{"emptyLinePlaceholder":1679},[68,62101,62102,62105],{"class":70,"line":3249},[68,62103,62104],{"class":81},"        ul",[68,62106,86],{"class":85},[68,62108,62109],{"class":70,"line":3255},[68,62110,4000],{"emptyLinePlaceholder":1679},[68,62112,62113,62116,62118,62120],{"class":70,"line":3276},[68,62114,62115],{"class":92},"            list-style",[68,62117,96],{"class":85},[68,62119,56321],{"class":92},[68,62121,112],{"class":85},[68,62123,62124],{"class":70,"line":3281},[68,62125,4129],{"class":85},[68,62127,62128],{"class":70,"line":3295},[68,62129,4000],{"emptyLinePlaceholder":1679},[68,62131,62132,62135],{"class":70,"line":3300},[68,62133,62134],{"class":587},"        .mi",[68,62136,86],{"class":85},[68,62138,62139,62142,62144,62146],{"class":70,"line":3329},[68,62140,62141],{"class":92},"            position",[68,62143,96],{"class":85},[68,62145,56348],{"class":92},[68,62147,112],{"class":85},[68,62149,62150,62152,62154,62157,62159],{"class":70,"line":3334},[68,62151,53074],{"class":92},[68,62153,96],{"class":85},[68,62155,62156],{"class":92},"223",[68,62158,103],{"class":102},[68,62160,112],{"class":85},[68,62162,62163,62165,62167,62169,62171,62173],{"class":70,"line":3351},[68,62164,53025],{"class":92},[68,62166,96],{"class":85},[68,62168,2047],{"class":92},[68,62170,103],{"class":102},[68,62172,603],{"class":92},[68,62174,112],{"class":85},[68,62176,62177],{"class":70,"line":3356},[68,62178,4129],{"class":85},[68,62180,62181],{"class":70,"line":3361},[68,62182,4000],{"emptyLinePlaceholder":1679},[68,62184,62185,62187,62190],{"class":70,"line":3366},[68,62186,62134],{"class":587},[68,62188,62189],{"class":81}," input",[68,62191,86],{"class":85},[68,62193,62194,62196,62198,62200,62202],{"class":70,"line":3380},[68,62195,53074],{"class":92},[68,62197,96],{"class":85},[68,62199,62156],{"class":92},[68,62201,103],{"class":102},[68,62203,112],{"class":85},[68,62205,62206,62208,62210,62212,62214],{"class":70,"line":3385},[68,62207,53088],{"class":92},[68,62209,96],{"class":85},[68,62211,2343],{"class":92},[68,62213,103],{"class":102},[68,62215,112],{"class":85},[68,62217,62218,62220,62222,62224,62226,62228],{"class":70,"line":4177},[68,62219,53036],{"class":92},[68,62221,96],{"class":85},[68,62223,600],{"class":92},[68,62225,989],{"class":92},[68,62227,103],{"class":102},[68,62229,112],{"class":85},[68,62231,62232,62235,62237,62239,62241],{"class":70,"line":4191},[68,62233,62234],{"class":92},"            font-size",[68,62236,96],{"class":85},[68,62238,2285],{"class":92},[68,62240,103],{"class":102},[68,62242,112],{"class":85},[68,62244,62245,62248,62250,62252,62254],{"class":70,"line":4199},[68,62246,62247],{"class":92},"            line-height",[68,62249,96],{"class":85},[68,62251,2343],{"class":92},[68,62253,103],{"class":102},[68,62255,112],{"class":85},[68,62257,62258,62261,62263,62265,62267,62269,62272],{"class":70,"line":4204},[68,62259,62260],{"class":92},"            border",[68,62262,96],{"class":85},[68,62264,99],{"class":92},[68,62266,103],{"class":102},[68,62268,106],{"class":92},[68,62270,62271],{"class":92}," #e0e0e0",[68,62273,112],{"class":85},[68,62275,62276,62279,62281,62283],{"class":70,"line":4210},[68,62277,62278],{"class":92},"            outline",[68,62280,96],{"class":85},[68,62282,56321],{"class":92},[68,62284,112],{"class":85},[68,62286,62287],{"class":70,"line":4216},[68,62288,4129],{"class":85},[68,62290,62291],{"class":70,"line":4221},[68,62292,4000],{"emptyLinePlaceholder":1679},[68,62294,62295,62297,62300],{"class":70,"line":9547},[68,62296,62134],{"class":587},[68,62298,62299],{"class":587}," .search",[68,62301,86],{"class":85},[68,62303,62304,62306,62308,62310,62312,62314,62317],{"class":70,"line":9571},[68,62305,62260],{"class":92},[68,62307,96],{"class":85},[68,62309,99],{"class":92},[68,62311,103],{"class":102},[68,62313,106],{"class":92},[68,62315,62316],{"class":92}," #ff6700",[68,62318,112],{"class":85},[68,62320,62321],{"class":70,"line":9576},[68,62322,4129],{"class":85},[68,62324,62325],{"class":70,"line":9582},[68,62326,4000],{"emptyLinePlaceholder":1679},[68,62328,62329,62332],{"class":70,"line":9609},[68,62330,62331],{"class":587},"        .result-list",[68,62333,86],{"class":85},[68,62335,62336,62338,62340,62342],{"class":70,"line":9614},[68,62337,53062],{"class":92},[68,62339,96],{"class":85},[68,62341,56321],{"class":92},[68,62343,112],{"class":85},[68,62345,62346,62348,62350,62352],{"class":70,"line":9620},[68,62347,62141],{"class":92},[68,62349,96],{"class":85},[68,62351,56415],{"class":92},[68,62353,112],{"class":85},[68,62355,62356,62359,62361,62363],{"class":70,"line":9632},[68,62357,62358],{"class":92},"            left",[68,62360,96],{"class":85},[68,62362,600],{"class":92},[68,62364,112],{"class":85},[68,62366,62367,62370,62372,62374,62376],{"class":70,"line":9644},[68,62368,62369],{"class":92},"            top",[68,62371,96],{"class":85},[68,62373,2343],{"class":92},[68,62375,103],{"class":102},[68,62377,112],{"class":85},[68,62379,62380,62382,62384,62386,62388],{"class":70,"line":9656},[68,62381,53074],{"class":92},[68,62383,96],{"class":85},[68,62385,62156],{"class":92},[68,62387,103],{"class":102},[68,62389,112],{"class":85},[68,62391,62392,62394,62396,62398,62400,62402,62404],{"class":70,"line":11314},[68,62393,62260],{"class":92},[68,62395,96],{"class":85},[68,62397,99],{"class":92},[68,62399,103],{"class":102},[68,62401,106],{"class":92},[68,62403,62316],{"class":92},[68,62405,112],{"class":85},[68,62407,62408,62411,62413,62415],{"class":70,"line":11339},[68,62409,62410],{"class":92},"            border-top",[68,62412,96],{"class":85},[68,62414,600],{"class":92},[68,62416,112],{"class":85},[68,62418,62419,62422,62424,62427],{"class":70,"line":11362},[68,62420,62421],{"class":92},"            background",[68,62423,96],{"class":85},[68,62425,62426],{"class":92},"#fff",[68,62428,112],{"class":85},[68,62430,62431],{"class":70,"line":11386},[68,62432,4129],{"class":85},[68,62434,62435],{"class":70,"line":11391},[68,62436,4000],{"emptyLinePlaceholder":1679},[68,62438,62439,62441,62443],{"class":70,"line":11396},[68,62440,62331],{"class":587},[68,62442,3002],{"class":81},[68,62444,86],{"class":85},[68,62446,62447,62449,62451,62454],{"class":70,"line":11401},[68,62448,53062],{"class":92},[68,62450,96],{"class":85},[68,62452,62453],{"class":92},"block",[68,62455,112],{"class":85},[68,62457,62458,62460,62462,62464,62466,62469,62471],{"class":70,"line":11410},[68,62459,53036],{"class":92},[68,62461,96],{"class":85},[68,62463,2080],{"class":92},[68,62465,103],{"class":102},[68,62467,62468],{"class":92}," 15",[68,62470,103],{"class":102},[68,62472,112],{"class":85},[68,62474,62475,62477,62479,62481,62483],{"class":70,"line":11415},[68,62476,62234],{"class":92},[68,62478,96],{"class":85},[68,62480,2234],{"class":92},[68,62482,103],{"class":102},[68,62484,112],{"class":85},[68,62486,62487,62490,62492,62495],{"class":70,"line":11421},[68,62488,62489],{"class":92},"            color",[68,62491,96],{"class":85},[68,62493,62494],{"class":92},"#424242",[68,62496,112],{"class":85},[68,62498,62499,62502,62504,62506],{"class":70,"line":11442},[68,62500,62501],{"class":92},"            text-decoration",[68,62503,96],{"class":85},[68,62505,56321],{"class":92},[68,62507,112],{"class":85},[68,62509,62510],{"class":70,"line":11448},[68,62511,4129],{"class":85},[68,62513,62514],{"class":70,"line":11462},[68,62515,4000],{"emptyLinePlaceholder":1679},[68,62517,62518,62520,62522,62525],{"class":70,"line":11468},[68,62519,62331],{"class":587},[68,62521,3002],{"class":81},[68,62523,62524],{"class":587},":hover",[68,62526,86],{"class":85},[68,62528,62529,62531,62533,62536],{"class":70,"line":11495},[68,62530,53226],{"class":92},[68,62532,96],{"class":85},[68,62534,62535],{"class":92},"#eee",[68,62537,112],{"class":85},[68,62539,62540],{"class":70,"line":11504},[68,62541,4129],{"class":85},[68,62543,62544,62546,62548],{"class":70,"line":11510},[68,62545,53362],{"class":85},[68,62547,1652],{"class":81},[68,62549,876],{"class":85},[68,62551,62552],{"class":70,"line":11518},[68,62553,4000],{"emptyLinePlaceholder":1679},[68,62555,62556,62558,62560],{"class":70,"line":11523},[68,62557,886],{"class":85},[68,62559,52925],{"class":81},[68,62561,876],{"class":85},[68,62563,62564],{"class":70,"line":18199},[68,62565,4000],{"emptyLinePlaceholder":1679},[68,62567,62568,62570,62572],{"class":70,"line":18205},[68,62569,861],{"class":85},[68,62571,53385],{"class":81},[68,62573,876],{"class":85},[68,62575,62576,62578,62580,62582,62584,62587],{"class":70,"line":18228},[68,62577,52932],{"class":85},[68,62579,82],{"class":81},[68,62581,866],{"class":587},[68,62583,869],{"class":85},[68,62585,62586],{"class":872},"\"mi\"",[68,62588,876],{"class":85},[68,62590,62591,62593,62595,62597,62599,62602,62605,62607,62610],{"class":70,"line":18234},[68,62592,56886],{"class":85},[68,62594,55405],{"class":81},[68,62596,55408],{"class":587},[68,62598,869],{"class":85},[68,62600,62601],{"class":872},"\"search\"",[68,62603,62604],{"class":587}," placeholder",[68,62606,869],{"class":85},[68,62608,62609],{"class":872},"\"小米笔记本\"",[68,62611,876],{"class":85},[68,62613,62614,62616,62618,62620,62622,62625],{"class":70,"line":18257},[68,62615,56886],{"class":85},[68,62617,168],{"class":81},[68,62619,866],{"class":587},[68,62621,869],{"class":85},[68,62623,62624],{"class":872},"\"result-list\"",[68,62626,876],{"class":85},[68,62628,62629,62632,62634,62637,62639,62642,62644,62647,62650,62652,62654,62656],{"class":70,"line":18271},[68,62630,62631],{"class":85},"            \u003C",[68,62633,51],{"class":81},[68,62635,62636],{"class":85},">\u003C",[68,62638,1974],{"class":81},[68,62640,62641],{"class":587}," href",[68,62643,869],{"class":85},[68,62645,62646],{"class":872},"\"#\"",[68,62648,62649],{"class":85},">全部商品\u003C\u002F",[68,62651,1974],{"class":81},[68,62653,56898],{"class":85},[68,62655,51],{"class":81},[68,62657,876],{"class":85},[68,62659,62660,62662,62664,62666,62668,62670,62672,62674,62677,62679,62681,62683],{"class":70,"line":18291},[68,62661,62631],{"class":85},[68,62663,51],{"class":81},[68,62665,62636],{"class":85},[68,62667,1974],{"class":81},[68,62669,62641],{"class":587},[68,62671,869],{"class":85},[68,62673,62646],{"class":872},[68,62675,62676],{"class":85},">小米11\u003C\u002F",[68,62678,1974],{"class":81},[68,62680,56898],{"class":85},[68,62682,51],{"class":81},[68,62684,876],{"class":85},[68,62686,62687,62689,62691,62693,62695,62697,62699,62701,62704,62706,62708,62710],{"class":70,"line":18297},[68,62688,62631],{"class":85},[68,62690,51],{"class":81},[68,62692,62636],{"class":85},[68,62694,1974],{"class":81},[68,62696,62641],{"class":587},[68,62698,869],{"class":85},[68,62700,62646],{"class":872},[68,62702,62703],{"class":85},">小米10S\u003C\u002F",[68,62705,1974],{"class":81},[68,62707,56898],{"class":85},[68,62709,51],{"class":81},[68,62711,876],{"class":85},[68,62713,62714,62716,62718,62720,62722,62724,62726,62728,62731,62733,62735,62737],{"class":70,"line":18308},[68,62715,62631],{"class":85},[68,62717,51],{"class":81},[68,62719,62636],{"class":85},[68,62721,1974],{"class":81},[68,62723,62641],{"class":587},[68,62725,869],{"class":85},[68,62727,62646],{"class":872},[68,62729,62730],{"class":85},">小米笔记本\u003C\u002F",[68,62732,1974],{"class":81},[68,62734,56898],{"class":85},[68,62736,51],{"class":81},[68,62738,876],{"class":85},[68,62740,62741,62743,62745,62747,62749,62751,62753,62755,62758,62760,62762,62764],{"class":70,"line":18331},[68,62742,62631],{"class":85},[68,62744,51],{"class":81},[68,62746,62636],{"class":85},[68,62748,1974],{"class":81},[68,62750,62641],{"class":587},[68,62752,869],{"class":85},[68,62754,62646],{"class":872},[68,62756,62757],{"class":85},">小米手机\u003C\u002F",[68,62759,1974],{"class":81},[68,62761,56898],{"class":85},[68,62763,51],{"class":81},[68,62765,876],{"class":85},[68,62767,62768,62770,62772,62774,62776,62778,62780,62782,62785,62787,62789,62791],{"class":70,"line":18353},[68,62769,62631],{"class":85},[68,62771,51],{"class":81},[68,62773,62636],{"class":85},[68,62775,1974],{"class":81},[68,62777,62641],{"class":587},[68,62779,869],{"class":85},[68,62781,62646],{"class":872},[68,62783,62784],{"class":85},">黑鲨4\u003C\u002F",[68,62786,1974],{"class":81},[68,62788,56898],{"class":85},[68,62790,51],{"class":81},[68,62792,876],{"class":85},[68,62794,62795,62797,62799,62801,62803,62805,62807,62809,62812,62814,62816,62818],{"class":70,"line":18358},[68,62796,62631],{"class":85},[68,62798,51],{"class":81},[68,62800,62636],{"class":85},[68,62802,1974],{"class":81},[68,62804,62641],{"class":587},[68,62806,869],{"class":85},[68,62808,62646],{"class":872},[68,62810,62811],{"class":85},">空调\u003C\u002F",[68,62813,1974],{"class":81},[68,62815,56898],{"class":85},[68,62817,51],{"class":81},[68,62819,876],{"class":85},[68,62821,62822,62825,62827],{"class":70,"line":18364},[68,62823,62824],{"class":85},"        \u003C\u002F",[68,62826,168],{"class":81},[68,62828,876],{"class":85},[68,62830,62831,62833,62835],{"class":70,"line":18378},[68,62832,53362],{"class":85},[68,62834,82],{"class":81},[68,62836,876],{"class":85},[68,62838,62839,62841,62843],{"class":70,"line":18391},[68,62840,52932],{"class":85},[68,62842,53398],{"class":81},[68,62844,876],{"class":85},[68,62846,62847],{"class":70,"line":18396},[68,62848,62849],{"class":74},"        \u002F\u002F 1. 获取元素\n",[68,62851,62852,62855,62857,62859,62861,62863,62865,62868],{"class":70,"line":18410},[68,62853,62854],{"class":102},"        const",[68,62856,62189],{"class":92},[68,62858,15161],{"class":102},[68,62860,55980],{"class":85},[68,62862,55983],{"class":587},[68,62864,997],{"class":85},[68,62866,62867],{"class":872},"'[type=search]'",[68,62869,1757],{"class":85},[68,62871,62872,62874,62877,62879,62881,62883,62885,62888],{"class":70,"line":18415},[68,62873,62854],{"class":102},[68,62875,62876],{"class":92}," ul",[68,62878,15161],{"class":102},[68,62880,55980],{"class":85},[68,62882,55983],{"class":587},[68,62884,997],{"class":85},[68,62886,62887],{"class":872},"'.result-list'",[68,62889,1757],{"class":85},[68,62891,62892],{"class":70,"line":18421},[68,62893,62894],{"class":74},"        \u002F\u002F console.log(input)\n",[68,62896,62897],{"class":70,"line":18426},[68,62898,62899],{"class":74},"        \u002F\u002F 2. 监听事件 获得焦点\n",[68,62901,62902,62905,62907,62909,62912,62914,62916],{"class":70,"line":18440},[68,62903,62904],{"class":85},"        input.",[68,62906,59397],{"class":587},[68,62908,997],{"class":85},[68,62910,62911],{"class":872},"'focus'",[68,62913,1002],{"class":85},[68,62915,56033],{"class":102},[68,62917,56036],{"class":85},[68,62919,62920],{"class":70,"line":18445},[68,62921,62922],{"class":74},"            \u002F\u002F ul显示\n",[68,62924,62925,62928,62930],{"class":70,"line":18450},[68,62926,62927],{"class":85},"            ul.style.display ",[68,62929,869],{"class":102},[68,62931,62932],{"class":872}," 'block'\n",[68,62934,62935],{"class":70,"line":18464},[68,62936,62937],{"class":74},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[68,62939,62940,62943,62945,62947,62950],{"class":70,"line":18476},[68,62941,62942],{"class":85},"            input.classList.",[68,62944,6933],{"class":587},[68,62946,997],{"class":85},[68,62948,62949],{"class":872},"'search'",[68,62951,1757],{"class":85},[68,62953,62954],{"class":70,"line":18481},[68,62955,62956],{"class":85},"        })\n",[68,62958,62959],{"class":70,"line":18494},[68,62960,62961],{"class":74},"        \u002F\u002F 3. 监听事件 失去焦点\n",[68,62963,62964,62966,62968,62970,62973,62975,62977],{"class":70,"line":18499},[68,62965,62904],{"class":85},[68,62967,59397],{"class":587},[68,62969,997],{"class":85},[68,62971,62972],{"class":872},"'blur'",[68,62974,1002],{"class":85},[68,62976,56033],{"class":102},[68,62978,56036],{"class":85},[68,62980,62981,62983,62985],{"class":70,"line":18504},[68,62982,62927],{"class":85},[68,62984,869],{"class":102},[68,62986,62987],{"class":872}," 'none'\n",[68,62989,62990,62992,62994,62996,62998],{"class":70,"line":18509},[68,62991,62942],{"class":85},[68,62993,58590],{"class":587},[68,62995,997],{"class":85},[68,62997,62949],{"class":872},[68,62999,1757],{"class":85},[68,63001,63002],{"class":70,"line":18522},[68,63003,62956],{"class":85},[68,63005,63006,63008,63010],{"class":70,"line":18527},[68,63007,53362],{"class":85},[68,63009,53398],{"class":81},[68,63011,876],{"class":85},[68,63013,63014,63016,63018],{"class":70,"line":34226},[68,63015,886],{"class":85},[68,63017,53385],{"class":81},[68,63019,876],{"class":85},[68,63021,63022],{"class":70,"line":34232},[68,63023,4000],{"emptyLinePlaceholder":1679},[68,63025,63026,63028,63030],{"class":70,"line":34238},[68,63027,886],{"class":85},[68,63029,52228],{"class":81},[68,63031,876],{"class":85},[23593,63033,63035],{"id":63034},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63037,63038],{},"评论字数统计案例",[19,63040,63041],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63043,63044],{},"牢记focus伪类选择器",[52935,63046],{"charSet":63047},"UTF-8",[52935,63049],{"name":63050,"content":63051},"viewport","width=device-width, initial-scale=1.0",[52998,63053,63054],{},"Document",[1652,63056,63057],{},"\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",[55405,63059],{"type":6786},[168,63061,63062,63065],{},[51,63063,63064],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[51,63066,63067],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[58,63069,63071],{"className":52226,"code":63070,"language":52228,"meta":63,"style":63},"\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",[65,63072,63073,63083,63097,63101,63109,63123,63143,63163,63176,63184,63191,63204,63218,63228,63238,63242,63246,63253,63265,63277,63289,63301,63330,63343,63347,63351,63360,63371,63383,63394,63405,63417,63428,63440,63456,63468,63472,63476,63487,63498,63508,63520,63524,63528,63536,63547,63557,63568,63580,63593,63605,63617,63621,63625,63634,63646,63657,63670,63681,63695,63699,63703,63710,63722,63734,63744,63748,63752,63761,63773,63783,63787,63791,63802,63812,63830,63843,63847,63851,63861,63871,63875,63879,63890,63901,63913,63925,63929,63933,63944,63955,63969,63973,63977,63988,63998,64010,64014,64022,64030,64034,64042,64057,64076,64116,64129,64137,64151,64171,64179,64194,64217,64235,64250,64270,64290,64310,64318,64326,64334,64342,64362,64382,64387,64404,64413,64417,64422,64438,64446,64450,64455,64472,64477,64502,64506,64510,64515,64520,64528,64536,64540],{"__ignoreMap":63},[68,63074,63075,63077,63079,63081],{"class":70,"line":71},[68,63076,52890],{"class":85},[68,63078,52893],{"class":81},[68,63080,52896],{"class":587},[68,63082,876],{"class":85},[68,63084,63085,63087,63089,63091,63093,63095],{"class":70,"line":78},[68,63086,861],{"class":85},[68,63088,52228],{"class":81},[68,63090,52907],{"class":587},[68,63092,869],{"class":85},[68,63094,52912],{"class":872},[68,63096,876],{"class":85},[68,63098,63099],{"class":70,"line":89},[68,63100,4000],{"emptyLinePlaceholder":1679},[68,63102,63103,63105,63107],{"class":70,"line":115},[68,63104,861],{"class":85},[68,63106,52925],{"class":81},[68,63108,876],{"class":85},[68,63110,63111,63113,63115,63117,63119,63121],{"class":70,"line":280},[68,63112,53729],{"class":85},[68,63114,52935],{"class":81},[68,63116,52938],{"class":587},[68,63118,869],{"class":85},[68,63120,52943],{"class":872},[68,63122,876],{"class":85},[68,63124,63125,63127,63129,63131,63133,63135,63137,63139,63141],{"class":70,"line":301},[68,63126,53729],{"class":85},[68,63128,52935],{"class":81},[68,63130,52954],{"class":587},[68,63132,869],{"class":85},[68,63134,52959],{"class":872},[68,63136,52962],{"class":587},[68,63138,869],{"class":85},[68,63140,52967],{"class":872},[68,63142,876],{"class":85},[68,63144,63145,63147,63149,63151,63153,63155,63157,63159,63161],{"class":70,"line":320},[68,63146,53729],{"class":85},[68,63148,52935],{"class":81},[68,63150,16516],{"class":587},[68,63152,869],{"class":85},[68,63154,52982],{"class":872},[68,63156,52962],{"class":587},[68,63158,869],{"class":85},[68,63160,52989],{"class":872},[68,63162,876],{"class":85},[68,63164,63165,63167,63169,63172,63174],{"class":70,"line":2915},[68,63166,53729],{"class":85},[68,63168,52998],{"class":81},[68,63170,63171],{"class":85},">评论回车发布\u003C\u002F",[68,63173,52998],{"class":81},[68,63175,876],{"class":85},[68,63177,63178,63180,63182],{"class":70,"line":2921},[68,63179,53729],{"class":85},[68,63181,1652],{"class":81},[68,63183,876],{"class":85},[68,63185,63186,63189],{"class":70,"line":2933},[68,63187,63188],{"class":587},"    .wrapper",[68,63190,86],{"class":85},[68,63192,63193,63196,63198,63200,63202],{"class":70,"line":3214},[68,63194,63195],{"class":92},"      min-width",[68,63197,96],{"class":85},[68,63199,5586],{"class":92},[68,63201,103],{"class":102},[68,63203,112],{"class":85},[68,63205,63206,63209,63211,63214,63216],{"class":70,"line":3219},[68,63207,63208],{"class":92},"      max-width",[68,63210,96],{"class":85},[68,63212,63213],{"class":92},"800",[68,63215,103],{"class":102},[68,63217,112],{"class":85},[68,63219,63220,63222,63224,63226],{"class":70,"line":3225},[68,63221,56593],{"class":92},[68,63223,96],{"class":85},[68,63225,53067],{"class":92},[68,63227,112],{"class":85},[68,63229,63230,63232,63234,63236],{"class":70,"line":3230},[68,63231,56604],{"class":92},[68,63233,96],{"class":85},[68,63235,53167],{"class":92},[68,63237,112],{"class":85},[68,63239,63240],{"class":70,"line":3244},[68,63241,3787],{"class":85},[68,63243,63244],{"class":70,"line":3249},[68,63245,4000],{"emptyLinePlaceholder":1679},[68,63247,63248,63251],{"class":70,"line":3255},[68,63249,63250],{"class":587},"    .avatar",[68,63252,86],{"class":85},[68,63254,63255,63257,63259,63261,63263],{"class":70,"line":3276},[68,63256,56355],{"class":92},[68,63258,96],{"class":85},[68,63260,2343],{"class":92},[68,63262,103],{"class":102},[68,63264,112],{"class":85},[68,63266,63267,63269,63271,63273,63275],{"class":70,"line":3281},[68,63268,56369],{"class":92},[68,63270,96],{"class":85},[68,63272,2343],{"class":92},[68,63274,103],{"class":102},[68,63276,112],{"class":85},[68,63278,63279,63281,63283,63285,63287],{"class":70,"line":3295},[68,63280,56718],{"class":92},[68,63282,96],{"class":85},[68,63284,2392],{"class":92},[68,63286,2064],{"class":102},[68,63288,112],{"class":85},[68,63290,63291,63294,63296,63299],{"class":70,"line":3300},[68,63292,63293],{"class":92},"      overflow",[68,63295,96],{"class":85},[68,63297,63298],{"class":92},"hidden",[68,63300,112],{"class":85},[68,63302,63303,63306,63308,63311,63313,63316,63318,63321,63323,63325,63328],{"class":70,"line":3329},[68,63304,63305],{"class":92},"      background",[68,63307,96],{"class":85},[68,63309,63310],{"class":92},"url",[68,63312,997],{"class":85},[68,63314,63315],{"class":6815},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[68,63317,15311],{"class":85},[68,63319,63320],{"class":92},"no-repeat",[68,63322,18739],{"class":92},[68,63324,26573],{"class":85},[68,63326,63327],{"class":92},"cover",[68,63329,112],{"class":85},[68,63331,63332,63335,63337,63339,63341],{"class":70,"line":3334},[68,63333,63334],{"class":92},"      margin-right",[68,63336,96],{"class":85},[68,63338,2436],{"class":92},[68,63340,103],{"class":102},[68,63342,112],{"class":85},[68,63344,63345],{"class":70,"line":3351},[68,63346,3787],{"class":85},[68,63348,63349],{"class":70,"line":3356},[68,63350,4000],{"emptyLinePlaceholder":1679},[68,63352,63353,63355,63358],{"class":70,"line":3361},[68,63354,63188],{"class":587},[68,63356,63357],{"class":81}," textarea",[68,63359,86],{"class":85},[68,63361,63362,63365,63367,63369],{"class":70,"line":3366},[68,63363,63364],{"class":92},"      outline",[68,63366,96],{"class":85},[68,63368,56321],{"class":92},[68,63370,112],{"class":85},[68,63372,63373,63376,63378,63381],{"class":70,"line":3380},[68,63374,63375],{"class":92},"      border-color",[68,63377,96],{"class":85},[68,63379,63380],{"class":92},"transparent",[68,63382,112],{"class":85},[68,63384,63385,63388,63390,63392],{"class":70,"line":3385},[68,63386,63387],{"class":92},"      resize",[68,63389,96],{"class":85},[68,63391,56321],{"class":92},[68,63393,112],{"class":85},[68,63395,63396,63398,63400,63403],{"class":70,"line":4177},[68,63397,63305],{"class":92},[68,63399,96],{"class":85},[68,63401,63402],{"class":92},"#f5f5f5",[68,63404,112],{"class":85},[68,63406,63407,63409,63411,63413,63415],{"class":70,"line":4191},[68,63408,56718],{"class":92},[68,63410,96],{"class":85},[68,63412,2029],{"class":92},[68,63414,103],{"class":102},[68,63416,112],{"class":85},[68,63418,63419,63422,63424,63426],{"class":70,"line":4199},[68,63420,63421],{"class":92},"      flex",[68,63423,96],{"class":85},[68,63425,99],{"class":92},[68,63427,112],{"class":85},[68,63429,63430,63432,63434,63436,63438],{"class":70,"line":4204},[68,63431,56279],{"class":92},[68,63433,96],{"class":85},[68,63435,2182],{"class":92},[68,63437,103],{"class":102},[68,63439,112],{"class":85},[68,63441,63442,63445,63447,63449,63452,63454],{"class":70,"line":4210},[68,63443,63444],{"class":92},"      transition",[68,63446,96],{"class":85},[68,63448,29714],{"class":92},[68,63450,63451],{"class":92}," 0.5",[68,63453,2431],{"class":102},[68,63455,112],{"class":85},[68,63457,63458,63460,63462,63464,63466],{"class":70,"line":4216},[68,63459,56369],{"class":92},[68,63461,96],{"class":85},[68,63463,2686],{"class":92},[68,63465,103],{"class":102},[68,63467,112],{"class":85},[68,63469,63470],{"class":70,"line":4221},[68,63471,3787],{"class":85},[68,63473,63474],{"class":70,"line":9547},[68,63475,4000],{"emptyLinePlaceholder":1679},[68,63477,63478,63480,63482,63485],{"class":70,"line":9571},[68,63479,63188],{"class":587},[68,63481,63357],{"class":81},[68,63483,63484],{"class":587},":focus",[68,63486,86],{"class":85},[68,63488,63489,63491,63493,63496],{"class":70,"line":9576},[68,63490,63375],{"class":92},[68,63492,96],{"class":85},[68,63494,63495],{"class":92},"#e4e4e4",[68,63497,112],{"class":85},[68,63499,63500,63502,63504,63506],{"class":70,"line":9582},[68,63501,63305],{"class":92},[68,63503,96],{"class":85},[68,63505,62426],{"class":92},[68,63507,112],{"class":85},[68,63509,63510,63512,63514,63516,63518],{"class":70,"line":9609},[68,63511,56369],{"class":92},[68,63513,96],{"class":85},[68,63515,2392],{"class":92},[68,63517,103],{"class":102},[68,63519,112],{"class":85},[68,63521,63522],{"class":70,"line":9614},[68,63523,3787],{"class":85},[68,63525,63526],{"class":70,"line":9620},[68,63527,4000],{"emptyLinePlaceholder":1679},[68,63529,63530,63532,63534],{"class":70,"line":9632},[68,63531,63188],{"class":587},[68,63533,59051],{"class":81},[68,63535,86],{"class":85},[68,63537,63538,63540,63542,63545],{"class":70,"line":9644},[68,63539,63305],{"class":92},[68,63541,96],{"class":85},[68,63543,63544],{"class":92},"#00aeec",[68,63546,112],{"class":85},[68,63548,63549,63551,63553,63555],{"class":70,"line":9656},[68,63550,59000],{"class":92},[68,63552,96],{"class":85},[68,63554,62426],{"class":92},[68,63556,112],{"class":85},[68,63558,63559,63562,63564,63566],{"class":70,"line":11314},[68,63560,63561],{"class":92},"      border",[68,63563,96],{"class":85},[68,63565,56321],{"class":92},[68,63567,112],{"class":85},[68,63569,63570,63572,63574,63576,63578],{"class":70,"line":11339},[68,63571,56718],{"class":92},[68,63573,96],{"class":85},[68,63575,2029],{"class":92},[68,63577,103],{"class":102},[68,63579,112],{"class":85},[68,63581,63582,63585,63587,63589,63591],{"class":70,"line":11362},[68,63583,63584],{"class":92},"      margin-left",[68,63586,96],{"class":85},[68,63588,2182],{"class":92},[68,63590,103],{"class":102},[68,63592,112],{"class":85},[68,63594,63595,63597,63599,63601,63603],{"class":70,"line":11386},[68,63596,56355],{"class":92},[68,63598,96],{"class":85},[68,63600,2092],{"class":92},[68,63602,103],{"class":102},[68,63604,112],{"class":85},[68,63606,63607,63610,63612,63615],{"class":70,"line":11391},[68,63608,63609],{"class":92},"      cursor",[68,63611,96],{"class":85},[68,63613,63614],{"class":92},"pointer",[68,63616,112],{"class":85},[68,63618,63619],{"class":70,"line":11396},[68,63620,3787],{"class":85},[68,63622,63623],{"class":70,"line":11401},[68,63624,4000],{"emptyLinePlaceholder":1679},[68,63626,63627,63629,63632],{"class":70,"line":11410},[68,63628,63188],{"class":587},[68,63630,63631],{"class":587}," .total",[68,63633,86],{"class":85},[68,63635,63636,63638,63640,63642,63644],{"class":70,"line":11415},[68,63637,63334],{"class":92},[68,63639,96],{"class":85},[68,63641,2348],{"class":92},[68,63643,103],{"class":102},[68,63645,112],{"class":85},[68,63647,63648,63650,63652,63655],{"class":70,"line":11421},[68,63649,59000],{"class":92},[68,63651,96],{"class":85},[68,63653,63654],{"class":92},"#999",[68,63656,112],{"class":85},[68,63658,63659,63662,63664,63666,63668],{"class":70,"line":11442},[68,63660,63661],{"class":92},"      margin-top",[68,63663,96],{"class":85},[68,63665,2055],{"class":92},[68,63667,103],{"class":102},[68,63669,112],{"class":85},[68,63671,63672,63675,63677,63679],{"class":70,"line":11448},[68,63673,63674],{"class":92},"      opacity",[68,63676,96],{"class":85},[68,63678,600],{"class":92},[68,63680,112],{"class":85},[68,63682,63683,63685,63687,63689,63691,63693],{"class":70,"line":11462},[68,63684,63444],{"class":92},[68,63686,96],{"class":85},[68,63688,29714],{"class":92},[68,63690,63451],{"class":92},[68,63692,2431],{"class":102},[68,63694,112],{"class":85},[68,63696,63697],{"class":70,"line":11468},[68,63698,3787],{"class":85},[68,63700,63701],{"class":70,"line":11495},[68,63702,4000],{"emptyLinePlaceholder":1679},[68,63704,63705,63708],{"class":70,"line":11504},[68,63706,63707],{"class":587},"    .list",[68,63709,86],{"class":85},[68,63711,63712,63714,63716,63718,63720],{"class":70,"line":11510},[68,63713,63195],{"class":92},[68,63715,96],{"class":85},[68,63717,5586],{"class":92},[68,63719,103],{"class":102},[68,63721,112],{"class":85},[68,63723,63724,63726,63728,63730,63732],{"class":70,"line":11518},[68,63725,63208],{"class":92},[68,63727,96],{"class":85},[68,63729,63213],{"class":92},[68,63731,103],{"class":102},[68,63733,112],{"class":85},[68,63735,63736,63738,63740,63742],{"class":70,"line":11523},[68,63737,56593],{"class":92},[68,63739,96],{"class":85},[68,63741,53067],{"class":92},[68,63743,112],{"class":85},[68,63745,63746],{"class":70,"line":18199},[68,63747,3787],{"class":85},[68,63749,63750],{"class":70,"line":18205},[68,63751,4000],{"emptyLinePlaceholder":1679},[68,63753,63754,63756,63759],{"class":70,"line":18228},[68,63755,63707],{"class":587},[68,63757,63758],{"class":587}," .item",[68,63760,86],{"class":85},[68,63762,63763,63765,63767,63769,63771],{"class":70,"line":18234},[68,63764,56355],{"class":92},[68,63766,96],{"class":85},[68,63768,2047],{"class":92},[68,63770,2064],{"class":102},[68,63772,112],{"class":85},[68,63774,63775,63777,63779,63781],{"class":70,"line":18257},[68,63776,56593],{"class":92},[68,63778,96],{"class":85},[68,63780,53067],{"class":92},[68,63782,112],{"class":85},[68,63784,63785],{"class":70,"line":18271},[68,63786,3787],{"class":85},[68,63788,63789],{"class":70,"line":18291},[68,63790,4000],{"emptyLinePlaceholder":1679},[68,63792,63793,63795,63797,63800],{"class":70,"line":18297},[68,63794,63707],{"class":587},[68,63796,63758],{"class":587},[68,63798,63799],{"class":587}," .info",[68,63801,86],{"class":85},[68,63803,63804,63806,63808,63810],{"class":70,"line":18308},[68,63805,63421],{"class":92},[68,63807,96],{"class":85},[68,63809,99],{"class":92},[68,63811,112],{"class":85},[68,63813,63814,63817,63819,63821,63823,63825,63828],{"class":70,"line":18331},[68,63815,63816],{"class":92},"      border-bottom",[68,63818,96],{"class":85},[68,63820,99],{"class":92},[68,63822,103],{"class":102},[68,63824,272],{"class":92},[68,63826,63827],{"class":92}," #e4e4e4",[68,63829,112],{"class":85},[68,63831,63832,63835,63837,63839,63841],{"class":70,"line":18353},[68,63833,63834],{"class":92},"      padding-bottom",[68,63836,96],{"class":85},[68,63838,2182],{"class":92},[68,63840,103],{"class":102},[68,63842,112],{"class":85},[68,63844,63845],{"class":70,"line":18358},[68,63846,3787],{"class":85},[68,63848,63849],{"class":70,"line":18364},[68,63850,4000],{"emptyLinePlaceholder":1679},[68,63852,63853,63855,63857,63859],{"class":70,"line":18378},[68,63854,63707],{"class":587},[68,63856,63758],{"class":587},[68,63858,8424],{"class":81},[68,63860,86],{"class":85},[68,63862,63863,63865,63867,63869],{"class":70,"line":18391},[68,63864,56290],{"class":92},[68,63866,96],{"class":85},[68,63868,600],{"class":92},[68,63870,112],{"class":85},[68,63872,63873],{"class":70,"line":18396},[68,63874,3787],{"class":85},[68,63876,63877],{"class":70,"line":18410},[68,63878,4000],{"emptyLinePlaceholder":1679},[68,63880,63881,63883,63885,63888],{"class":70,"line":18415},[68,63882,63707],{"class":587},[68,63884,63758],{"class":587},[68,63886,63887],{"class":587}," .name",[68,63889,86],{"class":85},[68,63891,63892,63894,63896,63899],{"class":70,"line":18421},[68,63893,59000],{"class":92},[68,63895,96],{"class":85},[68,63897,63898],{"class":92},"#FB7299",[68,63900,112],{"class":85},[68,63902,63903,63905,63907,63909,63911],{"class":70,"line":18426},[68,63904,56506],{"class":92},[68,63906,96],{"class":85},[68,63908,2285],{"class":92},[68,63910,103],{"class":102},[68,63912,112],{"class":85},[68,63914,63915,63918,63920,63923],{"class":70,"line":18440},[68,63916,63917],{"class":92},"      font-weight",[68,63919,96],{"class":85},[68,63921,63922],{"class":92},"bold",[68,63924,112],{"class":85},[68,63926,63927],{"class":70,"line":18445},[68,63928,3787],{"class":85},[68,63930,63931],{"class":70,"line":18450},[68,63932,4000],{"emptyLinePlaceholder":1679},[68,63934,63935,63937,63939,63942],{"class":70,"line":18464},[68,63936,63707],{"class":587},[68,63938,63758],{"class":587},[68,63940,63941],{"class":587}," .text",[68,63943,86],{"class":85},[68,63945,63946,63948,63950,63953],{"class":70,"line":18476},[68,63947,59000],{"class":92},[68,63949,96],{"class":85},[68,63951,63952],{"class":92},"#333",[68,63954,112],{"class":85},[68,63956,63957,63959,63961,63963,63965,63967],{"class":70,"line":18481},[68,63958,56279],{"class":92},[68,63960,96],{"class":85},[68,63962,2182],{"class":92},[68,63964,103],{"class":102},[68,63966,5692],{"class":92},[68,63968,112],{"class":85},[68,63970,63971],{"class":70,"line":18494},[68,63972,3787],{"class":85},[68,63974,63975],{"class":70,"line":18499},[68,63976,4000],{"emptyLinePlaceholder":1679},[68,63978,63979,63981,63983,63986],{"class":70,"line":18504},[68,63980,63707],{"class":587},[68,63982,63758],{"class":587},[68,63984,63985],{"class":587}," .time",[68,63987,86],{"class":85},[68,63989,63990,63992,63994,63996],{"class":70,"line":18509},[68,63991,59000],{"class":92},[68,63993,96],{"class":85},[68,63995,63654],{"class":92},[68,63997,112],{"class":85},[68,63999,64000,64002,64004,64006,64008],{"class":70,"line":18522},[68,64001,56506],{"class":92},[68,64003,96],{"class":85},[68,64005,2234],{"class":92},[68,64007,103],{"class":102},[68,64009,112],{"class":85},[68,64011,64012],{"class":70,"line":18527},[68,64013,3787],{"class":85},[68,64015,64016,64018,64020],{"class":70,"line":34226},[68,64017,54002],{"class":85},[68,64019,1652],{"class":81},[68,64021,876],{"class":85},[68,64023,64024,64026,64028],{"class":70,"line":34232},[68,64025,886],{"class":85},[68,64027,52925],{"class":81},[68,64029,876],{"class":85},[68,64031,64032],{"class":70,"line":34238},[68,64033,4000],{"emptyLinePlaceholder":1679},[68,64035,64036,64038,64040],{"class":70,"line":34244},[68,64037,861],{"class":85},[68,64039,53385],{"class":81},[68,64041,876],{"class":85},[68,64043,64044,64046,64048,64050,64052,64055],{"class":70,"line":34250},[68,64045,53729],{"class":85},[68,64047,82],{"class":81},[68,64049,866],{"class":587},[68,64051,869],{"class":85},[68,64053,64054],{"class":872},"\"wrapper\"",[68,64056,876],{"class":85},[68,64058,64059,64061,64063,64065,64067,64070,64072,64074],{"class":70,"line":34261},[68,64060,52932],{"class":85},[68,64062,2177],{"class":81},[68,64064,866],{"class":587},[68,64066,869],{"class":85},[68,64068,64069],{"class":872},"\"avatar\"",[68,64071,56898],{"class":85},[68,64073,2177],{"class":81},[68,64075,876],{"class":85},[68,64077,64078,64080,64082,64084,64086,64089,64091,64093,64096,64098,64100,64102,64105,64107,64110,64112,64114],{"class":70,"line":34267},[68,64079,52932],{"class":85},[68,64081,55872],{"class":81},[68,64083,16555],{"class":587},[68,64085,869],{"class":85},[68,64087,64088],{"class":872},"\"tx\"",[68,64090,62604],{"class":587},[68,64092,869],{"class":85},[68,64094,64095],{"class":872},"\"发一条友善的评论\"",[68,64097,55895],{"class":587},[68,64099,869],{"class":85},[68,64101,5300],{"class":872},[68,64103,64104],{"class":587}," maxlength",[68,64106,869],{"class":85},[68,64108,64109],{"class":872},"\"200\"",[68,64111,56898],{"class":85},[68,64113,55872],{"class":81},[68,64115,876],{"class":85},[68,64117,64118,64120,64122,64125,64127],{"class":70,"line":34287},[68,64119,52932],{"class":85},[68,64121,55471],{"class":81},[68,64123,64124],{"class":85},">发布\u003C\u002F",[68,64126,55471],{"class":81},[68,64128,876],{"class":85},[68,64130,64131,64133,64135],{"class":70,"line":34293},[68,64132,54002],{"class":85},[68,64134,82],{"class":81},[68,64136,876],{"class":85},[68,64138,64139,64141,64143,64145,64147,64149],{"class":70,"line":34304},[68,64140,53729],{"class":85},[68,64142,82],{"class":81},[68,64144,866],{"class":587},[68,64146,869],{"class":85},[68,64148,64054],{"class":872},[68,64150,876],{"class":85},[68,64152,64153,64155,64157,64159,64161,64164,64167,64169],{"class":70,"line":34310},[68,64154,52932],{"class":85},[68,64156,68],{"class":81},[68,64158,866],{"class":587},[68,64160,869],{"class":85},[68,64162,64163],{"class":872},"\"total\"",[68,64165,64166],{"class":85},">0\u002F200字\u003C\u002F",[68,64168,68],{"class":81},[68,64170,876],{"class":85},[68,64172,64173,64175,64177],{"class":70,"line":34316},[68,64174,54002],{"class":85},[68,64176,82],{"class":81},[68,64178,876],{"class":85},[68,64180,64181,64183,64185,64187,64189,64192],{"class":70,"line":34322},[68,64182,53729],{"class":85},[68,64184,82],{"class":81},[68,64186,866],{"class":587},[68,64188,869],{"class":85},[68,64190,64191],{"class":872},"\"list\"",[68,64193,876],{"class":85},[68,64195,64196,64198,64200,64202,64204,64207,64210,64212,64215],{"class":70,"line":34328},[68,64197,52932],{"class":85},[68,64199,82],{"class":81},[68,64201,866],{"class":587},[68,64203,869],{"class":85},[68,64205,64206],{"class":872},"\"item\"",[68,64208,64209],{"class":587}," style",[68,64211,869],{"class":85},[68,64213,64214],{"class":872},"\"display: none;\"",[68,64216,876],{"class":85},[68,64218,64219,64221,64223,64225,64227,64229,64231,64233],{"class":70,"line":34334},[68,64220,56818],{"class":85},[68,64222,2177],{"class":81},[68,64224,866],{"class":587},[68,64226,869],{"class":85},[68,64228,64069],{"class":872},[68,64230,56898],{"class":85},[68,64232,2177],{"class":81},[68,64234,876],{"class":85},[68,64236,64237,64239,64241,64243,64245,64248],{"class":70,"line":34340},[68,64238,56818],{"class":85},[68,64240,82],{"class":81},[68,64242,866],{"class":587},[68,64244,869],{"class":85},[68,64246,64247],{"class":872},"\"info\"",[68,64249,876],{"class":85},[68,64251,64252,64254,64256,64258,64260,64263,64266,64268],{"class":70,"line":34346},[68,64253,56886],{"class":85},[68,64255,19],{"class":81},[68,64257,866],{"class":587},[68,64259,869],{"class":85},[68,64261,64262],{"class":872},"\"name\"",[68,64264,64265],{"class":85},">清风徐来\u003C\u002F",[68,64267,19],{"class":81},[68,64269,876],{"class":85},[68,64271,64272,64274,64276,64278,64280,64283,64286,64288],{"class":70,"line":34366},[68,64273,56886],{"class":85},[68,64275,19],{"class":81},[68,64277,866],{"class":587},[68,64279,869],{"class":85},[68,64281,64282],{"class":872},"\"text\"",[68,64284,64285],{"class":85},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[68,64287,19],{"class":81},[68,64289,876],{"class":85},[68,64291,64292,64294,64296,64298,64300,64303,64306,64308],{"class":70,"line":34372},[68,64293,56886],{"class":85},[68,64295,19],{"class":81},[68,64297,866],{"class":587},[68,64299,869],{"class":85},[68,64301,64302],{"class":872},"\"time\"",[68,64304,64305],{"class":85},">2022-10-10 20:29:21\u003C\u002F",[68,64307,19],{"class":81},[68,64309,876],{"class":85},[68,64311,64312,64314,64316],{"class":70,"line":34388},[68,64313,56991],{"class":85},[68,64315,82],{"class":81},[68,64317,876],{"class":85},[68,64319,64320,64322,64324],{"class":70,"line":34394},[68,64321,53362],{"class":85},[68,64323,82],{"class":81},[68,64325,876],{"class":85},[68,64327,64328,64330,64332],{"class":70,"line":34408},[68,64329,54002],{"class":85},[68,64331,82],{"class":81},[68,64333,876],{"class":85},[68,64335,64336,64338,64340],{"class":70,"line":34414},[68,64337,53729],{"class":85},[68,64339,53398],{"class":81},[68,64341,876],{"class":85},[68,64343,64344,64346,64349,64351,64353,64355,64357,64360],{"class":70,"line":34429},[68,64345,12819],{"class":102},[68,64347,64348],{"class":92}," tx",[68,64350,15161],{"class":102},[68,64352,55980],{"class":85},[68,64354,55983],{"class":587},[68,64356,997],{"class":85},[68,64358,64359],{"class":872},"'#tx'",[68,64361,1757],{"class":85},[68,64363,64364,64366,64369,64371,64373,64375,64377,64380],{"class":70,"line":34435},[68,64365,12819],{"class":102},[68,64367,64368],{"class":92}," total",[68,64370,15161],{"class":102},[68,64372,55980],{"class":85},[68,64374,55983],{"class":587},[68,64376,997],{"class":85},[68,64378,64379],{"class":872},"'.total'",[68,64381,1757],{"class":85},[68,64383,64384],{"class":70,"line":34444},[68,64385,64386],{"class":74},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[68,64388,64389,64392,64394,64396,64398,64400,64402],{"class":70,"line":34450},[68,64390,64391],{"class":85},"    tx.",[68,64393,59397],{"class":587},[68,64395,997],{"class":85},[68,64397,62911],{"class":872},[68,64399,1002],{"class":85},[68,64401,56033],{"class":102},[68,64403,56036],{"class":85},[68,64405,64406,64409,64411],{"class":70,"line":34459},[68,64407,64408],{"class":85},"      total.style.opacity ",[68,64410,869],{"class":102},[68,64412,57283],{"class":92},[68,64414,64415],{"class":70,"line":34465},[68,64416,35054],{"class":85},[68,64418,64419],{"class":70,"line":34471},[68,64420,64421],{"class":74},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[68,64423,64424,64426,64428,64430,64432,64434,64436],{"class":70,"line":34480},[68,64425,64391],{"class":85},[68,64427,59397],{"class":587},[68,64429,997],{"class":85},[68,64431,62972],{"class":872},[68,64433,1002],{"class":85},[68,64435,56033],{"class":102},[68,64437,56036],{"class":85},[68,64439,64440,64442,64444],{"class":70,"line":34486},[68,64441,64408],{"class":85},[68,64443,869],{"class":102},[68,64445,48926],{"class":92},[68,64447,64448],{"class":70,"line":34497},[68,64449,35054],{"class":85},[68,64451,64452],{"class":70,"line":34503},[68,64453,64454],{"class":74},"    \u002F\u002F 3. 检测用户输入\n",[68,64456,64457,64459,64461,64463,64466,64468,64470],{"class":70,"line":34522},[68,64458,64391],{"class":85},[68,64460,59397],{"class":587},[68,64462,997],{"class":85},[68,64464,64465],{"class":872},"'input'",[68,64467,1002],{"class":85},[68,64469,56033],{"class":102},[68,64471,56036],{"class":85},[68,64473,64474],{"class":70,"line":34528},[68,64475,64476],{"class":74},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[68,64478,64479,64482,64484,64487,64490,64492,64495,64497,64499],{"class":70,"line":34539},[68,64480,64481],{"class":85},"      total.innerHTML ",[68,64483,869],{"class":102},[68,64485,64486],{"class":872}," `${",[68,64488,64489],{"class":85},"tx",[68,64491,2294],{"class":872},[68,64493,64494],{"class":85},"value",[68,64496,2294],{"class":872},[68,64498,53553],{"class":92},[68,64500,64501],{"class":872},"}\u002F200字`\n",[68,64503,64504],{"class":70,"line":34545},[68,64505,35054],{"class":85},[68,64507,64508],{"class":70,"line":34565},[68,64509,4000],{"emptyLinePlaceholder":1679},[68,64511,64512],{"class":70,"line":34581},[68,64513,64514],{"class":74},"    \u002F\u002F const str = 'andy'\n",[68,64516,64517],{"class":70,"line":34587},[68,64518,64519],{"class":74},"    \u002F\u002F console.log(str.length)\n",[68,64521,64522,64524,64526],{"class":70,"line":34601},[68,64523,54002],{"class":85},[68,64525,53398],{"class":81},[68,64527,876],{"class":85},[68,64529,64530,64532,64534],{"class":70,"line":34607},[68,64531,886],{"class":85},[68,64533,53385],{"class":81},[68,64535,876],{"class":85},[68,64537,64538],{"class":70,"line":34613},[68,64539,4000],{"emptyLinePlaceholder":1679},[68,64541,64542,64544,64546],{"class":70,"line":34624},[68,64543,886],{"class":85},[68,64545,52228],{"class":81},[68,64547,876],{"class":85},[23593,64549,64551],{"id":64550},"_3254-change事件","3.2.5.4 change事件",[19,64553,64554],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64556,64557],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64559,64560],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[58,64562,64564],{"className":52226,"code":64563,"language":52228,"meta":63,"style":63},"\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",[65,64565,64566,64576,64590,64594,64602,64616,64636,64648,64656,64660,64668,64682,64690,64708,64726,64738,64742,64750,64758,64762],{"__ignoreMap":63},[68,64567,64568,64570,64572,64574],{"class":70,"line":71},[68,64569,52890],{"class":85},[68,64571,52893],{"class":81},[68,64573,52896],{"class":587},[68,64575,876],{"class":85},[68,64577,64578,64580,64582,64584,64586,64588],{"class":70,"line":78},[68,64579,861],{"class":85},[68,64581,52228],{"class":81},[68,64583,52907],{"class":587},[68,64585,869],{"class":85},[68,64587,52912],{"class":872},[68,64589,876],{"class":85},[68,64591,64592],{"class":70,"line":89},[68,64593,4000],{"emptyLinePlaceholder":1679},[68,64595,64596,64598,64600],{"class":70,"line":115},[68,64597,861],{"class":85},[68,64599,52925],{"class":81},[68,64601,876],{"class":85},[68,64603,64604,64606,64608,64610,64612,64614],{"class":70,"line":280},[68,64605,53729],{"class":85},[68,64607,52935],{"class":81},[68,64609,52938],{"class":587},[68,64611,869],{"class":85},[68,64613,52943],{"class":872},[68,64615,876],{"class":85},[68,64617,64618,64620,64622,64624,64626,64628,64630,64632,64634],{"class":70,"line":301},[68,64619,53729],{"class":85},[68,64621,52935],{"class":81},[68,64623,16516],{"class":587},[68,64625,869],{"class":85},[68,64627,52982],{"class":872},[68,64629,52962],{"class":587},[68,64631,869],{"class":85},[68,64633,52989],{"class":872},[68,64635,876],{"class":85},[68,64637,64638,64640,64642,64644,64646],{"class":70,"line":320},[68,64639,53729],{"class":85},[68,64641,52998],{"class":81},[68,64643,53001],{"class":85},[68,64645,52998],{"class":81},[68,64647,876],{"class":85},[68,64649,64650,64652,64654],{"class":70,"line":2915},[68,64651,886],{"class":85},[68,64653,52925],{"class":81},[68,64655,876],{"class":85},[68,64657,64658],{"class":70,"line":2921},[68,64659,4000],{"emptyLinePlaceholder":1679},[68,64661,64662,64664,64666],{"class":70,"line":2933},[68,64663,861],{"class":85},[68,64665,53385],{"class":81},[68,64667,876],{"class":85},[68,64669,64670,64672,64674,64676,64678,64680],{"class":70,"line":3214},[68,64671,53729],{"class":85},[68,64673,55405],{"class":81},[68,64675,55408],{"class":587},[68,64677,869],{"class":85},[68,64679,64282],{"class":872},[68,64681,876],{"class":85},[68,64683,64684,64686,64688],{"class":70,"line":3219},[68,64685,53729],{"class":85},[68,64687,53398],{"class":81},[68,64689,876],{"class":85},[68,64691,64692,64694,64696,64698,64700,64702,64704,64706],{"class":70,"line":3225},[68,64693,12819],{"class":102},[68,64695,62189],{"class":92},[68,64697,15161],{"class":102},[68,64699,55980],{"class":85},[68,64701,55983],{"class":587},[68,64703,997],{"class":85},[68,64705,64465],{"class":872},[68,64707,1757],{"class":85},[68,64709,64710,64713,64715,64717,64720,64722,64724],{"class":70,"line":3230},[68,64711,64712],{"class":85},"    input.",[68,64714,59397],{"class":587},[68,64716,997],{"class":85},[68,64718,64719],{"class":872},"'change'",[68,64721,1002],{"class":85},[68,64723,56033],{"class":102},[68,64725,56036],{"class":85},[68,64727,64728,64730,64732,64734,64736],{"class":70,"line":3244},[68,64729,59828],{"class":85},[68,64731,59831],{"class":587},[68,64733,997],{"class":85},[68,64735,2329],{"class":92},[68,64737,1757],{"class":85},[68,64739,64740],{"class":70,"line":3249},[68,64741,35054],{"class":85},[68,64743,64744,64746,64748],{"class":70,"line":3255},[68,64745,54002],{"class":85},[68,64747,53398],{"class":81},[68,64749,876],{"class":85},[68,64751,64752,64754,64756],{"class":70,"line":3276},[68,64753,886],{"class":85},[68,64755,53385],{"class":81},[68,64757,876],{"class":85},[68,64759,64760],{"class":70,"line":3281},[68,64761,4000],{"emptyLinePlaceholder":1679},[68,64763,64764,64766,64768],{"class":70,"line":3295},[68,64765,886],{"class":85},[68,64767,52228],{"class":81},[68,64769,876],{"class":85},[19,64771,64772],{},"总结：内容发生改变才回去触发",[43,64774,64776],{"id":64775},"_326-事件对象","3.2.6 事件对象",[23593,64778,64780],{"id":64779},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64782,64783],{},[38,64784],{"alt":63,"src":64785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64787,64788],{},[38,64789],{"alt":63,"src":64790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64792,64793],{},"点击一次，就输出了事件对象，它是个对象",[19,64795,64796],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64798,64799],{},[38,64800],{"alt":63,"src":64801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23593,64803,64805],{"id":64804},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64807,64808],{},[38,64809],{"alt":63,"src":64810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64812,64813],{},"实现按特殊字符才是实现打印输出效果：",[58,64815,64817],{"className":54652,"code":64816,"language":54654,"meta":63,"style":63},"\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",[65,64818,64819,64827,64832,64846,64854,64859,64864,64869,64874,64879,64884,64889,64894,64899,64903,64907,64915],{"__ignoreMap":63},[68,64820,64821,64823,64825],{"class":70,"line":71},[68,64822,861],{"class":85},[68,64824,53385],{"class":81},[68,64826,876],{"class":85},[68,64828,64829],{"class":70,"line":78},[68,64830,64831],{"class":74},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[68,64833,64834,64836,64838,64840,64842,64844],{"class":70,"line":89},[68,64835,53729],{"class":85},[68,64837,55405],{"class":81},[68,64839,55408],{"class":587},[68,64841,869],{"class":85},[68,64843,64282],{"class":872},[68,64845,876],{"class":85},[68,64847,64848,64850,64852],{"class":70,"line":115},[68,64849,53729],{"class":85},[68,64851,53398],{"class":81},[68,64853,876],{"class":85},[68,64855,64856],{"class":70,"line":280},[68,64857,64858],{"class":85},"    \u002F\u002F const btn = document.querySelector('button')\n",[68,64860,64861],{"class":70,"line":301},[68,64862,64863],{"class":85},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[68,64865,64866],{"class":70,"line":320},[68,64867,64868],{"class":85},"    \u002F\u002F   console.log(e);\n",[68,64870,64871],{"class":70,"line":2915},[68,64872,64873],{"class":85},"    \u002F\u002F })\n",[68,64875,64876],{"class":70,"line":2921},[68,64877,64878],{"class":85},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[68,64880,64881],{"class":70,"line":2933},[68,64882,64883],{"class":85},"    const input = document.querySelector('input')\n",[68,64885,64886],{"class":70,"line":3214},[68,64887,64888],{"class":85},"    input.addEventListener('keyup', function (e) {\n",[68,64890,64891],{"class":70,"line":3219},[68,64892,64893],{"class":85},"      if (e.key === 'Enter') {\n",[68,64895,64896],{"class":70,"line":3225},[68,64897,64898],{"class":85},"        console.log('我按下了回车键')\n",[68,64900,64901],{"class":70,"line":3230},[68,64902,53983],{"class":85},[68,64904,64905],{"class":70,"line":3244},[68,64906,35054],{"class":85},[68,64908,64909,64911,64913],{"class":70,"line":3249},[68,64910,54002],{"class":85},[68,64912,53398],{"class":81},[68,64914,876],{"class":85},[68,64916,64917,64919,64921],{"class":70,"line":3255},[68,64918,886],{"class":85},[68,64920,53385],{"class":81},[68,64922,876],{"class":85},[23593,64924,64926],{"id":64925},"_3263-trim方法","3.2.6.3 trim方法",[19,64928,64929],{},[38,64930],{"alt":63,"src":64931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64933,64934],{},[38,64935],{"alt":63,"src":64936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64938,64939],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64941,64942],{},"str.trim()",[43,64944,64946],{"id":64945},"_327-环境对象","3.2.7 环境对象",[19,64948,64949],{},[38,64950],{"alt":63,"src":64951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64953,64954],{},[38,64955],{"alt":63,"src":64956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64958,64959],{},[38,64960],{"alt":63,"src":64961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64963,64964],{},"实际函数调用是window.fn()",[19,64966,64967],{},"普通函数里面this指向的是window",[168,64969,64970,64973,64976],{},[51,64971,64972],{},"在普通函数下，this指向的是window",[51,64974,64975],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[51,64977,64978],{},"箭头函数没有this",[19,64980,64981],{},"粗略记法就是：谁调用，this就指向谁",[19,64983,64984],{},[38,64985],{"alt":63,"src":64986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64988,64989],{},[38,64990],{"alt":63,"src":64991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64993,64994],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64996,64997],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[58,64999,65001],{"className":54652,"code":65000,"language":54654,"meta":63,"style":63},"\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",[65,65002,65003,65011,65023,65031,65036,65041,65046,65051,65055,65063],{"__ignoreMap":63},[68,65004,65005,65007,65009],{"class":70,"line":71},[68,65006,861],{"class":85},[68,65008,53385],{"class":81},[68,65010,876],{"class":85},[68,65012,65013,65015,65017,65019,65021],{"class":70,"line":78},[68,65014,53729],{"class":85},[68,65016,55471],{"class":81},[68,65018,55477],{"class":85},[68,65020,55471],{"class":81},[68,65022,876],{"class":85},[68,65024,65025,65027,65029],{"class":70,"line":89},[68,65026,53729],{"class":85},[68,65028,53398],{"class":81},[68,65030,876],{"class":85},[68,65032,65033],{"class":70,"line":115},[68,65034,65035],{"class":85},"    const button = document.querySelector('button')\n",[68,65037,65038],{"class":70,"line":280},[68,65039,65040],{"class":85},"    button.addEventListener('click', function () {\n",[68,65042,65043],{"class":70,"line":301},[68,65044,65045],{"class":85},"      \u002F\u002F console.log(this);\n",[68,65047,65048],{"class":70,"line":320},[68,65049,65050],{"class":85},"      this.style.color = 'pink'\n",[68,65052,65053],{"class":70,"line":2915},[68,65054,35054],{"class":85},[68,65056,65057,65059,65061],{"class":70,"line":2921},[68,65058,54002],{"class":85},[68,65060,53398],{"class":81},[68,65062,876],{"class":85},[68,65064,65065,65067,65069],{"class":70,"line":2933},[68,65066,886],{"class":85},[68,65068,53385],{"class":81},[68,65070,876],{"class":85},[43,65072,65074],{"id":65073},"_328-回调函数","3.2.8 回调函数",[19,65076,65077],{},[38,65078],{"alt":63,"src":65079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65081,65082],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65084,12930],{},[168,65086,65087,65090,65093],{},[51,65088,65089],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[51,65091,65092],{},"回调函数本质还是函数，只不过把它当成参数使用",[51,65094,65095],{},"使用匿名函数做为回调函数比较常见",[43,65097,65099],{"id":65098},"_329-tab栏切换","3.2.9 tab栏切换",[19,65101,65102],{},[38,65103],{"alt":63,"src":65104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[58,65106,65108],{"className":52226,"code":65107,"language":52228,"meta":63,"style":63},"\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",[65,65109,65110,65120,65134,65138,65146,65160,65180,65200,65213,65221,65227,65237,65247,65251,65255,65262,65275,65288,65300,65316,65320,65324,65331,65343,65355,65367,65377,65387,65391,65395,65404,65416,65427,65439,65443,65447,65455,65465,65475,65485,65489,65493,65503,65517,65529,65533,65537,65549,65560,65577,65587,65591,65595,65610,65621,65631,65635,65639,65646,65661,65665,65669,65677,65687,65691,65695,65704,65714,65718,65726,65734,65738,65746,65761,65776,65789,65797,65831,65858,65885,65912,65939,65947,65955,65970,66007,66042,66077,66112,66147,66155,66163,66171,66176,66181,66201,66206,66235,66240,66245,66263,66268,66273,66278,66300,66305,66321,66325,66330,66335,66356,66361,66390,66394,66399,66403,66411,66419,66423],{"__ignoreMap":63},[68,65111,65112,65114,65116,65118],{"class":70,"line":71},[68,65113,52890],{"class":85},[68,65115,52893],{"class":81},[68,65117,52896],{"class":587},[68,65119,876],{"class":85},[68,65121,65122,65124,65126,65128,65130,65132],{"class":70,"line":78},[68,65123,861],{"class":85},[68,65125,52228],{"class":81},[68,65127,52907],{"class":587},[68,65129,869],{"class":85},[68,65131,52912],{"class":872},[68,65133,876],{"class":85},[68,65135,65136],{"class":70,"line":89},[68,65137,4000],{"emptyLinePlaceholder":1679},[68,65139,65140,65142,65144],{"class":70,"line":115},[68,65141,861],{"class":85},[68,65143,52925],{"class":81},[68,65145,876],{"class":85},[68,65147,65148,65150,65152,65154,65156,65158],{"class":70,"line":280},[68,65149,53729],{"class":85},[68,65151,52935],{"class":81},[68,65153,52938],{"class":587},[68,65155,869],{"class":85},[68,65157,52943],{"class":872},[68,65159,60711],{"class":85},[68,65161,65162,65164,65166,65168,65170,65172,65174,65176,65178],{"class":70,"line":301},[68,65163,53729],{"class":85},[68,65165,52935],{"class":81},[68,65167,52954],{"class":587},[68,65169,869],{"class":85},[68,65171,52959],{"class":872},[68,65173,52962],{"class":587},[68,65175,869],{"class":85},[68,65177,52967],{"class":872},[68,65179,60711],{"class":85},[68,65181,65182,65184,65186,65188,65190,65192,65194,65196,65198],{"class":70,"line":320},[68,65183,53729],{"class":85},[68,65185,52935],{"class":81},[68,65187,16516],{"class":587},[68,65189,869],{"class":85},[68,65191,52982],{"class":872},[68,65193,52962],{"class":587},[68,65195,869],{"class":85},[68,65197,52989],{"class":872},[68,65199,60711],{"class":85},[68,65201,65202,65204,65206,65209,65211],{"class":70,"line":2915},[68,65203,53729],{"class":85},[68,65205,52998],{"class":81},[68,65207,65208],{"class":85},">tab栏切换\u003C\u002F",[68,65210,52998],{"class":81},[68,65212,876],{"class":85},[68,65214,65215,65217,65219],{"class":70,"line":2921},[68,65216,53729],{"class":85},[68,65218,1652],{"class":81},[68,65220,876],{"class":85},[68,65222,65223,65225],{"class":70,"line":2933},[68,65224,8002],{"class":81},[68,65226,86],{"class":85},[68,65228,65229,65231,65233,65235],{"class":70,"line":3214},[68,65230,56290],{"class":92},[68,65232,96],{"class":85},[68,65234,600],{"class":92},[68,65236,112],{"class":85},[68,65238,65239,65241,65243,65245],{"class":70,"line":3219},[68,65240,56279],{"class":92},[68,65242,96],{"class":85},[68,65244,600],{"class":92},[68,65246,112],{"class":85},[68,65248,65249],{"class":70,"line":3225},[68,65250,3787],{"class":85},[68,65252,65253],{"class":70,"line":3230},[68,65254,4000],{"emptyLinePlaceholder":1679},[68,65256,65257,65260],{"class":70,"line":3244},[68,65258,65259],{"class":587},"    .tab",[68,65261,86],{"class":85},[68,65263,65264,65266,65268,65271,65273],{"class":70,"line":3249},[68,65265,56355],{"class":92},[68,65267,96],{"class":85},[68,65269,65270],{"class":92},"590",[68,65272,103],{"class":102},[68,65274,112],{"class":85},[68,65276,65277,65279,65281,65284,65286],{"class":70,"line":3255},[68,65278,56369],{"class":92},[68,65280,96],{"class":85},[68,65282,65283],{"class":92},"340",[68,65285,103],{"class":102},[68,65287,112],{"class":85},[68,65289,65290,65292,65294,65296,65298],{"class":70,"line":3276},[68,65291,56290],{"class":92},[68,65293,96],{"class":85},[68,65295,2436],{"class":92},[68,65297,103],{"class":102},[68,65299,112],{"class":85},[68,65301,65302,65304,65306,65308,65310,65312,65314],{"class":70,"line":3281},[68,65303,63561],{"class":92},[68,65305,96],{"class":85},[68,65307,99],{"class":92},[68,65309,103],{"class":102},[68,65311,106],{"class":92},[68,65313,63827],{"class":92},[68,65315,112],{"class":85},[68,65317,65318],{"class":70,"line":3295},[68,65319,3787],{"class":85},[68,65321,65322],{"class":70,"line":3300},[68,65323,4000],{"emptyLinePlaceholder":1679},[68,65325,65326,65329],{"class":70,"line":3329},[68,65327,65328],{"class":587},"    .tab-nav",[68,65330,86],{"class":85},[68,65332,65333,65335,65337,65339,65341],{"class":70,"line":3334},[68,65334,56355],{"class":92},[68,65336,96],{"class":85},[68,65338,2047],{"class":92},[68,65340,2064],{"class":102},[68,65342,112],{"class":85},[68,65344,65345,65347,65349,65351,65353],{"class":70,"line":3351},[68,65346,56369],{"class":92},[68,65348,96],{"class":85},[68,65350,2643],{"class":92},[68,65352,103],{"class":102},[68,65354,112],{"class":85},[68,65356,65357,65359,65361,65363,65365],{"class":70,"line":3356},[68,65358,58943],{"class":92},[68,65360,96],{"class":85},[68,65362,2643],{"class":92},[68,65364,103],{"class":102},[68,65366,112],{"class":85},[68,65368,65369,65371,65373,65375],{"class":70,"line":3361},[68,65370,56593],{"class":92},[68,65372,96],{"class":85},[68,65374,53067],{"class":92},[68,65376,112],{"class":85},[68,65378,65379,65381,65383,65385],{"class":70,"line":3366},[68,65380,56604],{"class":92},[68,65382,96],{"class":85},[68,65384,53254],{"class":92},[68,65386,112],{"class":85},[68,65388,65389],{"class":70,"line":3380},[68,65390,3787],{"class":85},[68,65392,65393],{"class":70,"line":3385},[68,65394,4000],{"emptyLinePlaceholder":1679},[68,65396,65397,65399,65402],{"class":70,"line":4177},[68,65398,65328],{"class":587},[68,65400,65401],{"class":81}," h3",[68,65403,86],{"class":85},[68,65405,65406,65408,65410,65412,65414],{"class":70,"line":4191},[68,65407,56506],{"class":92},[68,65409,96],{"class":85},[68,65411,2536],{"class":92},[68,65413,103],{"class":102},[68,65415,112],{"class":85},[68,65417,65418,65420,65422,65425],{"class":70,"line":4199},[68,65419,63917],{"class":92},[68,65421,96],{"class":85},[68,65423,65424],{"class":92},"normal",[68,65426,112],{"class":85},[68,65428,65429,65431,65433,65435,65437],{"class":70,"line":4204},[68,65430,63584],{"class":92},[68,65432,96],{"class":85},[68,65434,2436],{"class":92},[68,65436,103],{"class":102},[68,65438,112],{"class":85},[68,65440,65441],{"class":70,"line":4210},[68,65442,3787],{"class":85},[68,65444,65445],{"class":70,"line":4216},[68,65446,4000],{"emptyLinePlaceholder":1679},[68,65448,65449,65451,65453],{"class":70,"line":4221},[68,65450,65328],{"class":587},[68,65452,62876],{"class":81},[68,65454,86],{"class":85},[68,65456,65457,65459,65461,65463],{"class":70,"line":9547},[68,65458,56316],{"class":92},[68,65460,96],{"class":85},[68,65462,56321],{"class":92},[68,65464,112],{"class":85},[68,65466,65467,65469,65471,65473],{"class":70,"line":9571},[68,65468,56593],{"class":92},[68,65470,96],{"class":85},[68,65472,53067],{"class":92},[68,65474,112],{"class":85},[68,65476,65477,65479,65481,65483],{"class":70,"line":9576},[68,65478,56604],{"class":92},[68,65480,96],{"class":85},[68,65482,53167],{"class":92},[68,65484,112],{"class":85},[68,65486,65487],{"class":70,"line":9582},[68,65488,3787],{"class":85},[68,65490,65491],{"class":70,"line":9609},[68,65492,4000],{"emptyLinePlaceholder":1679},[68,65494,65495,65497,65499,65501],{"class":70,"line":9614},[68,65496,65328],{"class":587},[68,65498,62876],{"class":81},[68,65500,56659],{"class":81},[68,65502,86],{"class":85},[68,65504,65505,65507,65509,65511,65513,65515],{"class":70,"line":9620},[68,65506,56290],{"class":92},[68,65508,96],{"class":85},[68,65510,600],{"class":92},[68,65512,10549],{"class":92},[68,65514,103],{"class":102},[68,65516,112],{"class":85},[68,65518,65519,65521,65523,65525,65527],{"class":70,"line":9632},[68,65520,56506],{"class":92},[68,65522,96],{"class":85},[68,65524,2285],{"class":92},[68,65526,103],{"class":102},[68,65528,112],{"class":85},[68,65530,65531],{"class":70,"line":9644},[68,65532,3787],{"class":85},[68,65534,65535],{"class":70,"line":9656},[68,65536,4000],{"emptyLinePlaceholder":1679},[68,65538,65539,65541,65543,65545,65547],{"class":70,"line":11314},[68,65540,65328],{"class":587},[68,65542,62876],{"class":81},[68,65544,56659],{"class":81},[68,65546,3002],{"class":81},[68,65548,86],{"class":85},[68,65550,65551,65554,65556,65558],{"class":70,"line":11339},[68,65552,65553],{"class":92},"      text-decoration",[68,65555,96],{"class":85},[68,65557,56321],{"class":92},[68,65559,112],{"class":85},[68,65561,65562,65564,65566,65568,65570,65572,65575],{"class":70,"line":11362},[68,65563,63816],{"class":92},[68,65565,96],{"class":85},[68,65567,267],{"class":92},[68,65569,103],{"class":102},[68,65571,106],{"class":92},[68,65573,65574],{"class":92}," transparent",[68,65576,112],{"class":85},[68,65578,65579,65581,65583,65585],{"class":70,"line":11386},[68,65580,59000],{"class":92},[68,65582,96],{"class":85},[68,65584,63952],{"class":92},[68,65586,112],{"class":85},[68,65588,65589],{"class":70,"line":11391},[68,65590,3787],{"class":85},[68,65592,65593],{"class":70,"line":11396},[68,65594,4000],{"emptyLinePlaceholder":1679},[68,65596,65597,65599,65601,65603,65605,65608],{"class":70,"line":11401},[68,65598,65328],{"class":587},[68,65600,62876],{"class":81},[68,65602,56659],{"class":81},[68,65604,3002],{"class":81},[68,65606,65607],{"class":587},".active",[68,65609,86],{"class":85},[68,65611,65612,65614,65616,65619],{"class":70,"line":11410},[68,65613,63375],{"class":92},[68,65615,96],{"class":85},[68,65617,65618],{"class":92},"#e1251b",[68,65620,112],{"class":85},[68,65622,65623,65625,65627,65629],{"class":70,"line":11415},[68,65624,59000],{"class":92},[68,65626,96],{"class":85},[68,65628,65618],{"class":92},[68,65630,112],{"class":85},[68,65632,65633],{"class":70,"line":11421},[68,65634,3787],{"class":85},[68,65636,65637],{"class":70,"line":11442},[68,65638,4000],{"emptyLinePlaceholder":1679},[68,65640,65641,65644],{"class":70,"line":11448},[68,65642,65643],{"class":587},"    .tab-content",[68,65645,86],{"class":85},[68,65647,65648,65650,65652,65654,65657,65659],{"class":70,"line":11462},[68,65649,56279],{"class":92},[68,65651,96],{"class":85},[68,65653,600],{"class":92},[68,65655,65656],{"class":92}," 16",[68,65658,103],{"class":102},[68,65660,112],{"class":85},[68,65662,65663],{"class":70,"line":11468},[68,65664,3787],{"class":85},[68,65666,65667],{"class":70,"line":11495},[68,65668,4000],{"emptyLinePlaceholder":1679},[68,65670,65671,65673,65675],{"class":70,"line":11504},[68,65672,65643],{"class":587},[68,65674,63758],{"class":587},[68,65676,86],{"class":85},[68,65678,65679,65681,65683,65685],{"class":70,"line":11510},[68,65680,56593],{"class":92},[68,65682,96],{"class":85},[68,65684,56321],{"class":92},[68,65686,112],{"class":85},[68,65688,65689],{"class":70,"line":11518},[68,65690,3787],{"class":85},[68,65692,65693],{"class":70,"line":11523},[68,65694,4000],{"emptyLinePlaceholder":1679},[68,65696,65697,65699,65702],{"class":70,"line":18199},[68,65698,65643],{"class":587},[68,65700,65701],{"class":587}," .item.active",[68,65703,86],{"class":85},[68,65705,65706,65708,65710,65712],{"class":70,"line":18205},[68,65707,56593],{"class":92},[68,65709,96],{"class":85},[68,65711,62453],{"class":92},[68,65713,112],{"class":85},[68,65715,65716],{"class":70,"line":18228},[68,65717,3787],{"class":85},[68,65719,65720,65722,65724],{"class":70,"line":18234},[68,65721,54002],{"class":85},[68,65723,1652],{"class":81},[68,65725,876],{"class":85},[68,65727,65728,65730,65732],{"class":70,"line":18257},[68,65729,886],{"class":85},[68,65731,52925],{"class":81},[68,65733,876],{"class":85},[68,65735,65736],{"class":70,"line":18271},[68,65737,4000],{"emptyLinePlaceholder":1679},[68,65739,65740,65742,65744],{"class":70,"line":18291},[68,65741,861],{"class":85},[68,65743,53385],{"class":81},[68,65745,876],{"class":85},[68,65747,65748,65750,65752,65754,65756,65759],{"class":70,"line":18297},[68,65749,53729],{"class":85},[68,65751,82],{"class":81},[68,65753,866],{"class":587},[68,65755,869],{"class":85},[68,65757,65758],{"class":872},"\"tab\"",[68,65760,876],{"class":85},[68,65762,65763,65765,65767,65769,65771,65774],{"class":70,"line":18308},[68,65764,52932],{"class":85},[68,65766,82],{"class":81},[68,65768,866],{"class":587},[68,65770,869],{"class":85},[68,65772,65773],{"class":872},"\"tab-nav\"",[68,65775,876],{"class":85},[68,65777,65778,65780,65782,65785,65787],{"class":70,"line":18331},[68,65779,56818],{"class":85},[68,65781,43],{"class":81},[68,65783,65784],{"class":85},">每日特价\u003C\u002F",[68,65786,43],{"class":81},[68,65788,876],{"class":85},[68,65790,65791,65793,65795],{"class":70,"line":18353},[68,65792,56818],{"class":85},[68,65794,168],{"class":81},[68,65796,876],{"class":85},[68,65798,65799,65801,65803,65805,65807,65809,65811,65813,65815,65817,65820,65823,65825,65827,65829],{"class":70,"line":18358},[68,65800,56886],{"class":85},[68,65802,51],{"class":81},[68,65804,62636],{"class":85},[68,65806,1974],{"class":81},[68,65808,866],{"class":587},[68,65810,869],{"class":85},[68,65812,61290],{"class":872},[68,65814,62641],{"class":587},[68,65816,869],{"class":85},[68,65818,65819],{"class":872},"\"javascript:;\"",[68,65821,65822],{"class":85},">精选\u003C\u002F",[68,65824,1974],{"class":81},[68,65826,56898],{"class":85},[68,65828,51],{"class":81},[68,65830,876],{"class":85},[68,65832,65833,65835,65837,65839,65841,65843,65845,65847,65850,65852,65854,65856],{"class":70,"line":18364},[68,65834,56886],{"class":85},[68,65836,51],{"class":81},[68,65838,62636],{"class":85},[68,65840,1974],{"class":81},[68,65842,62641],{"class":587},[68,65844,869],{"class":85},[68,65846,65819],{"class":872},[68,65848,65849],{"class":85},">美食\u003C\u002F",[68,65851,1974],{"class":81},[68,65853,56898],{"class":85},[68,65855,51],{"class":81},[68,65857,876],{"class":85},[68,65859,65860,65862,65864,65866,65868,65870,65872,65874,65877,65879,65881,65883],{"class":70,"line":18378},[68,65861,56886],{"class":85},[68,65863,51],{"class":81},[68,65865,62636],{"class":85},[68,65867,1974],{"class":81},[68,65869,62641],{"class":587},[68,65871,869],{"class":85},[68,65873,65819],{"class":872},[68,65875,65876],{"class":85},">百货\u003C\u002F",[68,65878,1974],{"class":81},[68,65880,56898],{"class":85},[68,65882,51],{"class":81},[68,65884,876],{"class":85},[68,65886,65887,65889,65891,65893,65895,65897,65899,65901,65904,65906,65908,65910],{"class":70,"line":18391},[68,65888,56886],{"class":85},[68,65890,51],{"class":81},[68,65892,62636],{"class":85},[68,65894,1974],{"class":81},[68,65896,62641],{"class":587},[68,65898,869],{"class":85},[68,65900,65819],{"class":872},[68,65902,65903],{"class":85},">个护\u003C\u002F",[68,65905,1974],{"class":81},[68,65907,56898],{"class":85},[68,65909,51],{"class":81},[68,65911,876],{"class":85},[68,65913,65914,65916,65918,65920,65922,65924,65926,65928,65931,65933,65935,65937],{"class":70,"line":18396},[68,65915,56886],{"class":85},[68,65917,51],{"class":81},[68,65919,62636],{"class":85},[68,65921,1974],{"class":81},[68,65923,62641],{"class":587},[68,65925,869],{"class":85},[68,65927,65819],{"class":872},[68,65929,65930],{"class":85},">预告\u003C\u002F",[68,65932,1974],{"class":81},[68,65934,56898],{"class":85},[68,65936,51],{"class":81},[68,65938,876],{"class":85},[68,65940,65941,65943,65945],{"class":70,"line":18410},[68,65942,56991],{"class":85},[68,65944,168],{"class":81},[68,65946,876],{"class":85},[68,65948,65949,65951,65953],{"class":70,"line":18415},[68,65950,53362],{"class":85},[68,65952,82],{"class":81},[68,65954,876],{"class":85},[68,65956,65957,65959,65961,65963,65965,65968],{"class":70,"line":18421},[68,65958,52932],{"class":85},[68,65960,82],{"class":81},[68,65962,866],{"class":587},[68,65964,869],{"class":85},[68,65966,65967],{"class":872},"\"tab-content\"",[68,65969,876],{"class":85},[68,65971,65972,65974,65976,65978,65980,65983,65985,65987,65989,65991,65994,65996,65998,66000,66003,66005],{"class":70,"line":18426},[68,65973,56818],{"class":85},[68,65975,82],{"class":81},[68,65977,866],{"class":587},[68,65979,869],{"class":85},[68,65981,65982],{"class":872},"\"item active\"",[68,65984,62636],{"class":85},[68,65986,38],{"class":81},[68,65988,56823],{"class":587},[68,65990,869],{"class":85},[68,65992,65993],{"class":872},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[68,65995,56831],{"class":587},[68,65997,869],{"class":85},[68,65999,9251],{"class":872},[68,66001,66002],{"class":85}," \u002F>\u003C\u002F",[68,66004,82],{"class":81},[68,66006,876],{"class":85},[68,66008,66009,66011,66013,66015,66017,66019,66021,66023,66025,66027,66030,66032,66034,66036,66038,66040],{"class":70,"line":18440},[68,66010,56818],{"class":85},[68,66012,82],{"class":81},[68,66014,866],{"class":587},[68,66016,869],{"class":85},[68,66018,64206],{"class":872},[68,66020,62636],{"class":85},[68,66022,38],{"class":81},[68,66024,56823],{"class":587},[68,66026,869],{"class":85},[68,66028,66029],{"class":872},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[68,66031,56831],{"class":587},[68,66033,869],{"class":85},[68,66035,9251],{"class":872},[68,66037,66002],{"class":85},[68,66039,82],{"class":81},[68,66041,876],{"class":85},[68,66043,66044,66046,66048,66050,66052,66054,66056,66058,66060,66062,66065,66067,66069,66071,66073,66075],{"class":70,"line":18445},[68,66045,56818],{"class":85},[68,66047,82],{"class":81},[68,66049,866],{"class":587},[68,66051,869],{"class":85},[68,66053,64206],{"class":872},[68,66055,62636],{"class":85},[68,66057,38],{"class":81},[68,66059,56823],{"class":587},[68,66061,869],{"class":85},[68,66063,66064],{"class":872},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[68,66066,56831],{"class":587},[68,66068,869],{"class":85},[68,66070,9251],{"class":872},[68,66072,66002],{"class":85},[68,66074,82],{"class":81},[68,66076,876],{"class":85},[68,66078,66079,66081,66083,66085,66087,66089,66091,66093,66095,66097,66100,66102,66104,66106,66108,66110],{"class":70,"line":18450},[68,66080,56818],{"class":85},[68,66082,82],{"class":81},[68,66084,866],{"class":587},[68,66086,869],{"class":85},[68,66088,64206],{"class":872},[68,66090,62636],{"class":85},[68,66092,38],{"class":81},[68,66094,56823],{"class":587},[68,66096,869],{"class":85},[68,66098,66099],{"class":872},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[68,66101,56831],{"class":587},[68,66103,869],{"class":85},[68,66105,9251],{"class":872},[68,66107,66002],{"class":85},[68,66109,82],{"class":81},[68,66111,876],{"class":85},[68,66113,66114,66116,66118,66120,66122,66124,66126,66128,66130,66132,66135,66137,66139,66141,66143,66145],{"class":70,"line":18464},[68,66115,56818],{"class":85},[68,66117,82],{"class":81},[68,66119,866],{"class":587},[68,66121,869],{"class":85},[68,66123,64206],{"class":872},[68,66125,62636],{"class":85},[68,66127,38],{"class":81},[68,66129,56823],{"class":587},[68,66131,869],{"class":85},[68,66133,66134],{"class":872},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[68,66136,56831],{"class":587},[68,66138,869],{"class":85},[68,66140,9251],{"class":872},[68,66142,66002],{"class":85},[68,66144,82],{"class":81},[68,66146,876],{"class":85},[68,66148,66149,66151,66153],{"class":70,"line":18476},[68,66150,53362],{"class":85},[68,66152,82],{"class":81},[68,66154,876],{"class":85},[68,66156,66157,66159,66161],{"class":70,"line":18481},[68,66158,54002],{"class":85},[68,66160,82],{"class":81},[68,66162,876],{"class":85},[68,66164,66165,66167,66169],{"class":70,"line":18494},[68,66166,53729],{"class":85},[68,66168,53398],{"class":81},[68,66170,876],{"class":85},[68,66172,66173],{"class":70,"line":18499},[68,66174,66175],{"class":74},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[68,66177,66178],{"class":70,"line":18504},[68,66179,66180],{"class":74},"    \u002F\u002F 1.1 获取 a 元素 \n",[68,66182,66183,66185,66188,66190,66192,66194,66196,66199],{"class":70,"line":18509},[68,66184,12819],{"class":102},[68,66186,66187],{"class":92}," as",[68,66189,15161],{"class":102},[68,66191,55980],{"class":85},[68,66193,57265],{"class":587},[68,66195,997],{"class":85},[68,66197,66198],{"class":872},"'.tab-nav a'",[68,66200,1757],{"class":85},[68,66202,66203],{"class":70,"line":18522},[68,66204,66205],{"class":74},"    \u002F\u002F console.log(as) \n",[68,66207,66208,66210,66212,66214,66216,66218,66220,66222,66224,66227,66229,66231,66233],{"class":70,"line":18527},[68,66209,4800],{"class":102},[68,66211,3260],{"class":85},[68,66213,53432],{"class":102},[68,66215,11036],{"class":85},[68,66217,869],{"class":102},[68,66219,5692],{"class":92},[68,66221,11043],{"class":85},[68,66223,861],{"class":102},[68,66225,66226],{"class":85}," as.",[68,66228,53553],{"class":92},[68,66230,4813],{"class":85},[68,66232,3892],{"class":102},[68,66234,14039],{"class":85},[68,66236,66237],{"class":70,"line":34226},[68,66238,66239],{"class":74},"      \u002F\u002F console.log(as[i])\n",[68,66241,66242],{"class":70,"line":34232},[68,66243,66244],{"class":74},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[68,66246,66247,66250,66252,66254,66257,66259,66261],{"class":70,"line":34238},[68,66248,66249],{"class":85},"      as[i].",[68,66251,59397],{"class":587},[68,66253,997],{"class":85},[68,66255,66256],{"class":872},"'mouseenter'",[68,66258,1002],{"class":85},[68,66260,56033],{"class":102},[68,66262,56036],{"class":85},[68,66264,66265],{"class":70,"line":34244},[68,66266,66267],{"class":74},"        \u002F\u002F console.log('鼠标经过')\n",[68,66269,66270],{"class":70,"line":34250},[68,66271,66272],{"class":74},"        \u002F\u002F 排他思想  \n",[68,66274,66275],{"class":70,"line":34261},[68,66276,66277],{"class":74},"        \u002F\u002F 干掉别人 移除类active\n",[68,66279,66280,66282,66284,66286,66289,66291,66293,66295,66298],{"class":70,"line":34267},[68,66281,53510],{"class":85},[68,66283,55983],{"class":587},[68,66285,997],{"class":85},[68,66287,66288],{"class":872},"'.tab-nav .active'",[68,66290,58587],{"class":85},[68,66292,58590],{"class":587},[68,66294,997],{"class":85},[68,66296,66297],{"class":872},"'active'",[68,66299,1757],{"class":85},[68,66301,66302],{"class":70,"line":34287},[68,66303,66304],{"class":74},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[68,66306,66307,66310,66313,66315,66317,66319],{"class":70,"line":34293},[68,66308,66309],{"class":92},"        this",[68,66311,66312],{"class":85},".classList.",[68,66314,6933],{"class":587},[68,66316,997],{"class":85},[68,66318,66297],{"class":872},[68,66320,1757],{"class":85},[68,66322,66323],{"class":70,"line":34304},[68,66324,4000],{"emptyLinePlaceholder":1679},[68,66326,66327],{"class":70,"line":34310},[68,66328,66329],{"class":74},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[68,66331,66332],{"class":70,"line":34316},[68,66333,66334],{"class":74},"        \u002F\u002F 干掉别人\n",[68,66336,66337,66339,66341,66343,66346,66348,66350,66352,66354],{"class":70,"line":34322},[68,66338,53510],{"class":85},[68,66340,55983],{"class":587},[68,66342,997],{"class":85},[68,66344,66345],{"class":872},"'.tab-content .active'",[68,66347,58587],{"class":85},[68,66349,58590],{"class":587},[68,66351,997],{"class":85},[68,66353,66297],{"class":872},[68,66355,1757],{"class":85},[68,66357,66358],{"class":70,"line":34328},[68,66359,66360],{"class":74},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[68,66362,66363,66365,66367,66369,66372,66374,66376,66378,66380,66382,66384,66386,66388],{"class":70,"line":34334},[68,66364,53510],{"class":85},[68,66366,55983],{"class":587},[68,66368,997],{"class":85},[68,66370,66371],{"class":872},"`.tab-content .item:nth-child(${",[68,66373,2177],{"class":85},[68,66375,47159],{"class":102},[68,66377,1112],{"class":92},[68,66379,58616],{"class":872},[68,66381,58587],{"class":85},[68,66383,6933],{"class":587},[68,66385,997],{"class":85},[68,66387,66297],{"class":872},[68,66389,1757],{"class":85},[68,66391,66392],{"class":70,"line":34340},[68,66393,4000],{"emptyLinePlaceholder":1679},[68,66395,66396],{"class":70,"line":34346},[68,66397,66398],{"class":85},"      })\n",[68,66400,66401],{"class":70,"line":34366},[68,66402,3787],{"class":85},[68,66404,66405,66407,66409],{"class":70,"line":34372},[68,66406,54002],{"class":85},[68,66408,53398],{"class":81},[68,66410,876],{"class":85},[68,66412,66413,66415,66417],{"class":70,"line":34388},[68,66414,886],{"class":85},[68,66416,53385],{"class":81},[68,66418,876],{"class":85},[68,66420,66421],{"class":70,"line":34394},[68,66422,4000],{"emptyLinePlaceholder":1679},[68,66424,66425,66427,66429],{"class":70,"line":34408},[68,66426,886],{"class":85},[68,66428,52228],{"class":81},[68,66430,876],{"class":85},[19,66432,66433],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66435,66436],{},"在监听事件中，this指向的就是他的调用者",[19,66438,66439],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66441,55304],{},[19,66443,66444],{},"(function () {",[19,66446,66447],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66449,66450],{},"list.addEventListener('click', function (e) {",[19,66452,66453],{},"if (e.target.tagName === 'A') {",[19,66455,66456],{},"\u002F\u002F 排他思想",[19,66458,66459],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66461,66462],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66464,66465],{},"\u002F\u002F console.log(old);",[19,66467,66468],{},"\u002F\u002F 判断",[19,66470,66471],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66473,66474],{},"if (old) old.classList.remove('active')",[19,66476,66477],{},"e.target.classList.add('active')",[19,66479,2681],{},[19,66481,54049],{},[19,66483,66484],{},"})();",[43,66486,66488],{"id":66487},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[58,66490,66492],{"className":52226,"code":66491,"language":52228,"meta":63,"style":63},"\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",[65,66493,66494,66504,66508,66516,66520,66534,66548,66560,66568,66574,66584,66594,66598,66602,66609,66620,66631,66648,66661,66675,66685,66689,66693,66700,66711,66729,66739,66751,66755,66759,66766,66783,66794,66806,66810,66814,66821,66833,66837,66845,66853,66857,66865,66873,66881,66896,66940,66948,66961,66974,66987,66995,67003,67011,67039,67047,67059,67072,67085,67093,67101,67109,67135,67143,67156,67168,67181,67189,67197,67205,67231,67239,67252,67264,67277,67285,67293,67301,67306,67326,67331,67351,67356,67373,67378,67386,67391,67420,67433,67437,67441,67446,67450,67478,67483,67500,67505,67510,67515,67520,67546,67550,67554,67562,67570,67574],{"__ignoreMap":63},[68,66495,66496,66498,66500,66502],{"class":70,"line":71},[68,66497,52890],{"class":85},[68,66499,52893],{"class":81},[68,66501,52896],{"class":587},[68,66503,876],{"class":85},[68,66505,66506],{"class":70,"line":78},[68,66507,4000],{"emptyLinePlaceholder":1679},[68,66509,66510,66512,66514],{"class":70,"line":89},[68,66511,861],{"class":85},[68,66513,52228],{"class":81},[68,66515,876],{"class":85},[68,66517,66518],{"class":70,"line":115},[68,66519,4000],{"emptyLinePlaceholder":1679},[68,66521,66522,66524,66526,66528,66530,66532],{"class":70,"line":280},[68,66523,861],{"class":85},[68,66525,52925],{"class":81},[68,66527,52907],{"class":587},[68,66529,869],{"class":85},[68,66531,52912],{"class":872},[68,66533,876],{"class":85},[68,66535,66536,66538,66540,66542,66544,66546],{"class":70,"line":301},[68,66537,53729],{"class":85},[68,66539,52935],{"class":81},[68,66541,52938],{"class":587},[68,66543,869],{"class":85},[68,66545,52943],{"class":872},[68,66547,876],{"class":85},[68,66549,66550,66552,66554,66556,66558],{"class":70,"line":320},[68,66551,53729],{"class":85},[68,66553,52998],{"class":81},[68,66555,56898],{"class":85},[68,66557,52998],{"class":81},[68,66559,876],{"class":85},[68,66561,66562,66564,66566],{"class":70,"line":2915},[68,66563,53729],{"class":85},[68,66565,1652],{"class":81},[68,66567,876],{"class":85},[68,66569,66570,66572],{"class":70,"line":2921},[68,66571,8002],{"class":81},[68,66573,86],{"class":85},[68,66575,66576,66578,66580,66582],{"class":70,"line":2933},[68,66577,56290],{"class":92},[68,66579,96],{"class":85},[68,66581,600],{"class":92},[68,66583,112],{"class":85},[68,66585,66586,66588,66590,66592],{"class":70,"line":3214},[68,66587,56279],{"class":92},[68,66589,96],{"class":85},[68,66591,600],{"class":92},[68,66593,112],{"class":85},[68,66595,66596],{"class":70,"line":3219},[68,66597,3787],{"class":85},[68,66599,66600],{"class":70,"line":3225},[68,66601,4000],{"emptyLinePlaceholder":1679},[68,66603,66604,66607],{"class":70,"line":3230},[68,66605,66606],{"class":81},"    table",[68,66608,86],{"class":85},[68,66610,66611,66614,66616,66618],{"class":70,"line":3244},[68,66612,66613],{"class":92},"      border-collapse",[68,66615,96],{"class":85},[68,66617,356],{"class":92},[68,66619,112],{"class":85},[68,66621,66622,66625,66627,66629],{"class":70,"line":3249},[68,66623,66624],{"class":92},"      border-spacing",[68,66626,96],{"class":85},[68,66628,600],{"class":92},[68,66630,112],{"class":85},[68,66632,66633,66635,66637,66639,66641,66643,66646],{"class":70,"line":3255},[68,66634,63561],{"class":92},[68,66636,96],{"class":85},[68,66638,99],{"class":92},[68,66640,103],{"class":102},[68,66642,106],{"class":92},[68,66644,66645],{"class":92}," #c0c0c0",[68,66647,112],{"class":85},[68,66649,66650,66652,66654,66657,66659],{"class":70,"line":3276},[68,66651,56355],{"class":92},[68,66653,96],{"class":85},[68,66655,66656],{"class":92},"500",[68,66658,103],{"class":102},[68,66660,112],{"class":85},[68,66662,66663,66665,66667,66669,66671,66673],{"class":70,"line":3281},[68,66664,56290],{"class":92},[68,66666,96],{"class":85},[68,66668,2047],{"class":92},[68,66670,103],{"class":102},[68,66672,603],{"class":92},[68,66674,112],{"class":85},[68,66676,66677,66679,66681,66683],{"class":70,"line":3295},[68,66678,58870],{"class":92},[68,66680,96],{"class":85},[68,66682,53179],{"class":92},[68,66684,112],{"class":85},[68,66686,66687],{"class":70,"line":3300},[68,66688,3787],{"class":85},[68,66690,66691],{"class":70,"line":3329},[68,66692,4000],{"emptyLinePlaceholder":1679},[68,66694,66695,66698],{"class":70,"line":3334},[68,66696,66697],{"class":81},"    th",[68,66699,86],{"class":85},[68,66701,66702,66704,66706,66709],{"class":70,"line":3351},[68,66703,56468],{"class":92},[68,66705,96],{"class":85},[68,66707,66708],{"class":92},"#09c",[68,66710,112],{"class":85},[68,66712,66713,66716,66718,66720,66722,66724,66727],{"class":70,"line":3356},[68,66714,66715],{"class":92},"      font",[68,66717,96],{"class":85},[68,66719,63922],{"class":92},[68,66721,65656],{"class":92},[68,66723,103],{"class":102},[68,66725,66726],{"class":872}," \"微软雅黑\"",[68,66728,112],{"class":85},[68,66730,66731,66733,66735,66737],{"class":70,"line":3361},[68,66732,59000],{"class":92},[68,66734,96],{"class":85},[68,66736,62426],{"class":92},[68,66738,112],{"class":85},[68,66740,66741,66743,66745,66747,66749],{"class":70,"line":3366},[68,66742,56369],{"class":92},[68,66744,96],{"class":85},[68,66746,2536],{"class":92},[68,66748,103],{"class":102},[68,66750,112],{"class":85},[68,66752,66753],{"class":70,"line":3380},[68,66754,3787],{"class":85},[68,66756,66757],{"class":70,"line":3385},[68,66758,4000],{"emptyLinePlaceholder":1679},[68,66760,66761,66764],{"class":70,"line":4177},[68,66762,66763],{"class":81},"    td",[68,66765,86],{"class":85},[68,66767,66768,66770,66772,66774,66776,66778,66781],{"class":70,"line":4191},[68,66769,63561],{"class":92},[68,66771,96],{"class":85},[68,66773,99],{"class":92},[68,66775,103],{"class":102},[68,66777,106],{"class":92},[68,66779,66780],{"class":92}," #d0d0d0",[68,66782,112],{"class":85},[68,66784,66785,66787,66789,66792],{"class":70,"line":4199},[68,66786,59000],{"class":92},[68,66788,96],{"class":85},[68,66790,66791],{"class":92},"#404060",[68,66793,112],{"class":85},[68,66795,66796,66798,66800,66802,66804],{"class":70,"line":4204},[68,66797,56279],{"class":92},[68,66799,96],{"class":85},[68,66801,2182],{"class":92},[68,66803,103],{"class":102},[68,66805,112],{"class":85},[68,66807,66808],{"class":70,"line":4210},[68,66809,3787],{"class":85},[68,66811,66812],{"class":70,"line":4216},[68,66813,4000],{"emptyLinePlaceholder":1679},[68,66815,66816,66819],{"class":70,"line":4221},[68,66817,66818],{"class":587},"    .allCheck",[68,66820,86],{"class":85},[68,66822,66823,66825,66827,66829,66831],{"class":70,"line":9547},[68,66824,56355],{"class":92},[68,66826,96],{"class":85},[68,66828,2348],{"class":92},[68,66830,103],{"class":102},[68,66832,112],{"class":85},[68,66834,66835],{"class":70,"line":9571},[68,66836,3787],{"class":85},[68,66838,66839,66841,66843],{"class":70,"line":9576},[68,66840,54002],{"class":85},[68,66842,1652],{"class":81},[68,66844,876],{"class":85},[68,66846,66847,66849,66851],{"class":70,"line":9582},[68,66848,886],{"class":85},[68,66850,52925],{"class":81},[68,66852,876],{"class":85},[68,66854,66855],{"class":70,"line":9609},[68,66856,4000],{"emptyLinePlaceholder":1679},[68,66858,66859,66861,66863],{"class":70,"line":9614},[68,66860,861],{"class":85},[68,66862,53385],{"class":81},[68,66864,876],{"class":85},[68,66866,66867,66869,66871],{"class":70,"line":9620},[68,66868,53729],{"class":85},[68,66870,120],{"class":81},[68,66872,876],{"class":85},[68,66874,66875,66877,66879],{"class":70,"line":9632},[68,66876,52932],{"class":85},[68,66878,126],{"class":81},[68,66880,876],{"class":85},[68,66882,66883,66885,66887,66889,66891,66894],{"class":70,"line":9644},[68,66884,56818],{"class":85},[68,66886,129],{"class":81},[68,66888,866],{"class":587},[68,66890,869],{"class":85},[68,66892,66893],{"class":872},"\"allCheck\"",[68,66895,876],{"class":85},[68,66897,66898,66900,66902,66904,66906,66908,66910,66912,66914,66916,66918,66921,66924,66926,66928,66930,66933,66936,66938],{"class":70,"line":9656},[68,66899,56886],{"class":85},[68,66901,55405],{"class":81},[68,66903,55408],{"class":587},[68,66905,869],{"class":85},[68,66907,55413],{"class":872},[68,66909,16516],{"class":587},[68,66911,869],{"class":85},[68,66913,9251],{"class":872},[68,66915,16555],{"class":587},[68,66917,869],{"class":85},[68,66919,66920],{"class":872},"\"checkAll\"",[68,66922,66923],{"class":85},"> \u003C",[68,66925,68],{"class":81},[68,66927,866],{"class":587},[68,66929,869],{"class":85},[68,66931,66932],{"class":872},"\"all\"",[68,66934,66935],{"class":85},">全选\u003C\u002F",[68,66937,68],{"class":81},[68,66939,876],{"class":85},[68,66941,66942,66944,66946],{"class":70,"line":11314},[68,66943,56991],{"class":85},[68,66945,129],{"class":81},[68,66947,876],{"class":85},[68,66949,66950,66952,66954,66957,66959],{"class":70,"line":11339},[68,66951,56818],{"class":85},[68,66953,129],{"class":81},[68,66955,66956],{"class":85},">商品\u003C\u002F",[68,66958,129],{"class":81},[68,66960,876],{"class":85},[68,66962,66963,66965,66967,66970,66972],{"class":70,"line":11362},[68,66964,56818],{"class":85},[68,66966,129],{"class":81},[68,66968,66969],{"class":85},">商家\u003C\u002F",[68,66971,129],{"class":81},[68,66973,876],{"class":85},[68,66975,66976,66978,66980,66983,66985],{"class":70,"line":11386},[68,66977,56818],{"class":85},[68,66979,129],{"class":81},[68,66981,66982],{"class":85},">价格\u003C\u002F",[68,66984,129],{"class":81},[68,66986,876],{"class":85},[68,66988,66989,66991,66993],{"class":70,"line":11391},[68,66990,53362],{"class":85},[68,66992,126],{"class":81},[68,66994,876],{"class":85},[68,66996,66997,66999,67001],{"class":70,"line":11396},[68,66998,52932],{"class":85},[68,67000,126],{"class":81},[68,67002,876],{"class":85},[68,67004,67005,67007,67009],{"class":70,"line":11401},[68,67006,56818],{"class":85},[68,67008,142],{"class":81},[68,67010,876],{"class":85},[68,67012,67013,67015,67017,67019,67021,67023,67025,67027,67030,67032,67034,67037],{"class":70,"line":11410},[68,67014,56886],{"class":85},[68,67016,55405],{"class":81},[68,67018,55408],{"class":587},[68,67020,869],{"class":85},[68,67022,55413],{"class":872},[68,67024,16516],{"class":587},[68,67026,869],{"class":85},[68,67028,67029],{"class":872},"\"check\"",[68,67031,866],{"class":587},[68,67033,869],{"class":85},[68,67035,67036],{"class":872},"\"ck\"",[68,67038,876],{"class":85},[68,67040,67041,67043,67045],{"class":70,"line":11415},[68,67042,56991],{"class":85},[68,67044,142],{"class":81},[68,67046,876],{"class":85},[68,67048,67049,67051,67053,67055,67057],{"class":70,"line":11421},[68,67050,56818],{"class":85},[68,67052,142],{"class":81},[68,67054,62757],{"class":85},[68,67056,142],{"class":81},[68,67058,876],{"class":85},[68,67060,67061,67063,67065,67068,67070],{"class":70,"line":11442},[68,67062,56818],{"class":85},[68,67064,142],{"class":81},[68,67066,67067],{"class":85},">小米\u003C\u002F",[68,67069,142],{"class":81},[68,67071,876],{"class":85},[68,67073,67074,67076,67078,67081,67083],{"class":70,"line":11448},[68,67075,56818],{"class":85},[68,67077,142],{"class":81},[68,67079,67080],{"class":85},">￥1999\u003C\u002F",[68,67082,142],{"class":81},[68,67084,876],{"class":85},[68,67086,67087,67089,67091],{"class":70,"line":11462},[68,67088,53362],{"class":85},[68,67090,126],{"class":81},[68,67092,876],{"class":85},[68,67094,67095,67097,67099],{"class":70,"line":11468},[68,67096,52932],{"class":85},[68,67098,126],{"class":81},[68,67100,876],{"class":85},[68,67102,67103,67105,67107],{"class":70,"line":11495},[68,67104,56818],{"class":85},[68,67106,142],{"class":81},[68,67108,876],{"class":85},[68,67110,67111,67113,67115,67117,67119,67121,67123,67125,67127,67129,67131,67133],{"class":70,"line":11504},[68,67112,56886],{"class":85},[68,67114,55405],{"class":81},[68,67116,55408],{"class":587},[68,67118,869],{"class":85},[68,67120,55413],{"class":872},[68,67122,16516],{"class":587},[68,67124,869],{"class":85},[68,67126,67029],{"class":872},[68,67128,866],{"class":587},[68,67130,869],{"class":85},[68,67132,67036],{"class":872},[68,67134,876],{"class":85},[68,67136,67137,67139,67141],{"class":70,"line":11510},[68,67138,56991],{"class":85},[68,67140,142],{"class":81},[68,67142,876],{"class":85},[68,67144,67145,67147,67149,67152,67154],{"class":70,"line":11518},[68,67146,56818],{"class":85},[68,67148,142],{"class":81},[68,67150,67151],{"class":85},">小米净水器\u003C\u002F",[68,67153,142],{"class":81},[68,67155,876],{"class":85},[68,67157,67158,67160,67162,67164,67166],{"class":70,"line":11523},[68,67159,56818],{"class":85},[68,67161,142],{"class":81},[68,67163,67067],{"class":85},[68,67165,142],{"class":81},[68,67167,876],{"class":85},[68,67169,67170,67172,67174,67177,67179],{"class":70,"line":18199},[68,67171,56818],{"class":85},[68,67173,142],{"class":81},[68,67175,67176],{"class":85},">￥4999\u003C\u002F",[68,67178,142],{"class":81},[68,67180,876],{"class":85},[68,67182,67183,67185,67187],{"class":70,"line":18205},[68,67184,53362],{"class":85},[68,67186,126],{"class":81},[68,67188,876],{"class":85},[68,67190,67191,67193,67195],{"class":70,"line":18228},[68,67192,52932],{"class":85},[68,67194,126],{"class":81},[68,67196,876],{"class":85},[68,67198,67199,67201,67203],{"class":70,"line":18234},[68,67200,56818],{"class":85},[68,67202,142],{"class":81},[68,67204,876],{"class":85},[68,67206,67207,67209,67211,67213,67215,67217,67219,67221,67223,67225,67227,67229],{"class":70,"line":18257},[68,67208,56886],{"class":85},[68,67210,55405],{"class":81},[68,67212,55408],{"class":587},[68,67214,869],{"class":85},[68,67216,55413],{"class":872},[68,67218,16516],{"class":587},[68,67220,869],{"class":85},[68,67222,67029],{"class":872},[68,67224,866],{"class":587},[68,67226,869],{"class":85},[68,67228,67036],{"class":872},[68,67230,876],{"class":85},[68,67232,67233,67235,67237],{"class":70,"line":18271},[68,67234,56991],{"class":85},[68,67236,142],{"class":81},[68,67238,876],{"class":85},[68,67240,67241,67243,67245,67248,67250],{"class":70,"line":18291},[68,67242,56818],{"class":85},[68,67244,142],{"class":81},[68,67246,67247],{"class":85},">小米电视\u003C\u002F",[68,67249,142],{"class":81},[68,67251,876],{"class":85},[68,67253,67254,67256,67258,67260,67262],{"class":70,"line":18297},[68,67255,56818],{"class":85},[68,67257,142],{"class":81},[68,67259,67067],{"class":85},[68,67261,142],{"class":81},[68,67263,876],{"class":85},[68,67265,67266,67268,67270,67273,67275],{"class":70,"line":18308},[68,67267,56818],{"class":85},[68,67269,142],{"class":81},[68,67271,67272],{"class":85},">￥5999\u003C\u002F",[68,67274,142],{"class":81},[68,67276,876],{"class":85},[68,67278,67279,67281,67283],{"class":70,"line":18331},[68,67280,53362],{"class":85},[68,67282,126],{"class":81},[68,67284,876],{"class":85},[68,67286,67287,67289,67291],{"class":70,"line":18353},[68,67288,54002],{"class":85},[68,67290,120],{"class":81},[68,67292,876],{"class":85},[68,67294,67295,67297,67299],{"class":70,"line":18358},[68,67296,53729],{"class":85},[68,67298,53398],{"class":81},[68,67300,876],{"class":85},[68,67302,67303],{"class":70,"line":18364},[68,67304,67305],{"class":74},"    \u002F\u002F 1. 获取大复选框\n",[68,67307,67308,67310,67313,67315,67317,67319,67321,67324],{"class":70,"line":18378},[68,67309,12819],{"class":102},[68,67311,67312],{"class":92}," checkAll",[68,67314,15161],{"class":102},[68,67316,55980],{"class":85},[68,67318,55983],{"class":587},[68,67320,997],{"class":85},[68,67322,67323],{"class":872},"'#checkAll'",[68,67325,1757],{"class":85},[68,67327,67328],{"class":70,"line":18391},[68,67329,67330],{"class":74},"    \u002F\u002F 2. 获取所有的小复选框\n",[68,67332,67333,67335,67338,67340,67342,67344,67346,67349],{"class":70,"line":18396},[68,67334,12819],{"class":102},[68,67336,67337],{"class":92}," cks",[68,67339,15161],{"class":102},[68,67341,55980],{"class":85},[68,67343,57265],{"class":587},[68,67345,997],{"class":85},[68,67347,67348],{"class":872},"'.ck'",[68,67350,1757],{"class":85},[68,67352,67353],{"class":70,"line":18410},[68,67354,67355],{"class":74},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[68,67357,67358,67361,67363,67365,67367,67369,67371],{"class":70,"line":18415},[68,67359,67360],{"class":85},"    checkAll.",[68,67362,59397],{"class":587},[68,67364,997],{"class":85},[68,67366,59402],{"class":872},[68,67368,1002],{"class":85},[68,67370,56033],{"class":102},[68,67372,56036],{"class":85},[68,67374,67375],{"class":70,"line":18421},[68,67376,67377],{"class":74},"      \u002F\u002F 得到当前大复选框的选中状态\n",[68,67379,67380,67383],{"class":70,"line":18426},[68,67381,67382],{"class":74},"      \u002F\u002F console.log(checkAll.checked)",[68,67384,67385],{"class":74},"  \u002F\u002F 得到 是 true 或者是 false\n",[68,67387,67388],{"class":70,"line":18440},[68,67389,67390],{"class":74},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[68,67392,67393,67395,67397,67399,67401,67403,67405,67407,67409,67412,67414,67416,67418],{"class":70,"line":18445},[68,67394,53869],{"class":102},[68,67396,3260],{"class":85},[68,67398,53432],{"class":102},[68,67400,11036],{"class":85},[68,67402,869],{"class":102},[68,67404,5692],{"class":92},[68,67406,11043],{"class":85},[68,67408,861],{"class":102},[68,67410,67411],{"class":85}," cks.",[68,67413,53553],{"class":92},[68,67415,4813],{"class":85},[68,67417,3892],{"class":102},[68,67419,14039],{"class":85},[68,67421,67422,67425,67427,67430],{"class":70,"line":18450},[68,67423,67424],{"class":85},"        cks[i].checked ",[68,67426,869],{"class":102},[68,67428,67429],{"class":92}," this",[68,67431,67432],{"class":85},".checked\n",[68,67434,67435],{"class":70,"line":18464},[68,67436,53983],{"class":85},[68,67438,67439],{"class":70,"line":18476},[68,67440,35054],{"class":85},[68,67442,67443],{"class":70,"line":18481},[68,67444,67445],{"class":74},"    \u002F\u002F 5. 小复选框控制大复选框\n",[68,67447,67448],{"class":70,"line":18494},[68,67449,4000],{"emptyLinePlaceholder":1679},[68,67451,67452,67454,67456,67458,67460,67462,67464,67466,67468,67470,67472,67474,67476],{"class":70,"line":18499},[68,67453,4800],{"class":102},[68,67455,3260],{"class":85},[68,67457,53432],{"class":102},[68,67459,11036],{"class":85},[68,67461,869],{"class":102},[68,67463,5692],{"class":92},[68,67465,11043],{"class":85},[68,67467,861],{"class":102},[68,67469,67411],{"class":85},[68,67471,53553],{"class":92},[68,67473,4813],{"class":85},[68,67475,3892],{"class":102},[68,67477,14039],{"class":85},[68,67479,67480],{"class":70,"line":18504},[68,67481,67482],{"class":74},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[68,67484,67485,67488,67490,67492,67494,67496,67498],{"class":70,"line":18509},[68,67486,67487],{"class":85},"      cks[i].",[68,67489,59397],{"class":587},[68,67491,997],{"class":85},[68,67493,59402],{"class":872},[68,67495,1002],{"class":85},[68,67497,56033],{"class":102},[68,67499,56036],{"class":85},[68,67501,67502],{"class":70,"line":18522},[68,67503,67504],{"class":74},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[68,67506,67507],{"class":70,"line":18527},[68,67508,67509],{"class":74},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[68,67511,67512],{"class":70,"line":34226},[68,67513,67514],{"class":74},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[68,67516,67517],{"class":70,"line":34232},[68,67518,67519],{"class":74},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[68,67521,67522,67525,67527,67529,67531,67533,67536,67538,67540,67542,67544],{"class":70,"line":34238},[68,67523,67524],{"class":85},"        checkAll.checked ",[68,67526,869],{"class":102},[68,67528,55980],{"class":85},[68,67530,57265],{"class":587},[68,67532,997],{"class":85},[68,67534,67535],{"class":872},"'.ck:checked'",[68,67537,32419],{"class":85},[68,67539,53553],{"class":92},[68,67541,59490],{"class":102},[68,67543,67411],{"class":85},[68,67545,57415],{"class":92},[68,67547,67548],{"class":70,"line":34244},[68,67549,66398],{"class":85},[68,67551,67552],{"class":70,"line":34250},[68,67553,3787],{"class":85},[68,67555,67556,67558,67560],{"class":70,"line":34261},[68,67557,54002],{"class":85},[68,67559,53398],{"class":81},[68,67561,876],{"class":85},[68,67563,67564,67566,67568],{"class":70,"line":34267},[68,67565,886],{"class":85},[68,67567,53385],{"class":81},[68,67569,876],{"class":85},[68,67571,67572],{"class":70,"line":34287},[68,67573,4000],{"emptyLinePlaceholder":1679},[68,67575,67576,67578,67580],{"class":70,"line":34293},[68,67577,886],{"class":85},[68,67579,52228],{"class":81},[68,67581,876],{"class":85},[19,67583,67584],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67586,67587],{},"用好之间比较得到的布尔值！！！",[19,67589,67590,67591,67594,67595,3260,67598,2320,67600,67603],{},"在 JS 里访问的时候，",[65,67592,67593],{},"checkbox.checked"," 是一个 ",[1890,67596,67597],{},"布尔值",[65,67599,2966],{},[65,67601,67602],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67605,67606,67607,67610,67611],{},"HTML 的 ",[65,67608,67609],{},"checked=\"checked\""," 只是 ",[1890,67612,67613,67614,67617],{},"初始值；JS 的 ",[65,67615,67616],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67619,67620],{},"：checked是一个伪类选择器",[19,67622,67623],{},[38,67624],{"alt":63,"src":67625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67627,67628,67631],{},[67629,67630],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67633,67634],{},[38,67635],{"alt":63,"src":67636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67638,67640],{"id":67639},"_33-dom事件进阶","3.3 DOM事件进阶",[43,67642,67644],{"id":67643},"_331-事件流","3.3.1 事件流",[19,67646,67647],{},[38,67648],{"alt":63,"src":67649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23593,67651,67653],{"id":67652},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67655,67656],{},[38,67657],{"alt":63,"src":67658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[58,67660,67662],{"className":52226,"code":67661,"language":52228,"meta":63,"style":63},"\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",[65,67663,67664,67674,67688,67692,67700,67714,67734,67746,67754,67761,67773,67785,67795,67799,67803,67810,67822,67834,67844,67848,67856,67864,67868,67876,67891,67910,67918,67926,67946,67966,67982,67993,68001,68018,68029,68037,68054,68065,68073,68081,68089,68093],{"__ignoreMap":63},[68,67665,67666,67668,67670,67672],{"class":70,"line":71},[68,67667,52890],{"class":85},[68,67669,52893],{"class":81},[68,67671,52896],{"class":587},[68,67673,876],{"class":85},[68,67675,67676,67678,67680,67682,67684,67686],{"class":70,"line":78},[68,67677,861],{"class":85},[68,67679,52228],{"class":81},[68,67681,52907],{"class":587},[68,67683,869],{"class":85},[68,67685,52912],{"class":872},[68,67687,876],{"class":85},[68,67689,67690],{"class":70,"line":89},[68,67691,4000],{"emptyLinePlaceholder":1679},[68,67693,67694,67696,67698],{"class":70,"line":115},[68,67695,861],{"class":85},[68,67697,52925],{"class":81},[68,67699,876],{"class":85},[68,67701,67702,67704,67706,67708,67710,67712],{"class":70,"line":280},[68,67703,53729],{"class":85},[68,67705,52935],{"class":81},[68,67707,52938],{"class":587},[68,67709,869],{"class":85},[68,67711,52943],{"class":872},[68,67713,876],{"class":85},[68,67715,67716,67718,67720,67722,67724,67726,67728,67730,67732],{"class":70,"line":301},[68,67717,53729],{"class":85},[68,67719,52935],{"class":81},[68,67721,16516],{"class":587},[68,67723,869],{"class":85},[68,67725,52982],{"class":872},[68,67727,52962],{"class":587},[68,67729,869],{"class":85},[68,67731,52989],{"class":872},[68,67733,876],{"class":85},[68,67735,67736,67738,67740,67742,67744],{"class":70,"line":320},[68,67737,53729],{"class":85},[68,67739,52998],{"class":81},[68,67741,53001],{"class":85},[68,67743,52998],{"class":81},[68,67745,876],{"class":85},[68,67747,67748,67750,67752],{"class":70,"line":2915},[68,67749,53729],{"class":85},[68,67751,1652],{"class":81},[68,67753,876],{"class":85},[68,67755,67756,67759],{"class":70,"line":2921},[68,67757,67758],{"class":587},"    .father",[68,67760,86],{"class":85},[68,67762,67763,67765,67767,67769,67771],{"class":70,"line":2933},[68,67764,56355],{"class":92},[68,67766,96],{"class":85},[68,67768,66656],{"class":92},[68,67770,103],{"class":102},[68,67772,112],{"class":85},[68,67774,67775,67777,67779,67781,67783],{"class":70,"line":3214},[68,67776,56369],{"class":92},[68,67778,96],{"class":85},[68,67780,66656],{"class":92},[68,67782,103],{"class":102},[68,67784,112],{"class":85},[68,67786,67787,67789,67791,67793],{"class":70,"line":3219},[68,67788,56468],{"class":92},[68,67790,96],{"class":85},[68,67792,53231],{"class":92},[68,67794,112],{"class":85},[68,67796,67797],{"class":70,"line":3225},[68,67798,3787],{"class":85},[68,67800,67801],{"class":70,"line":3230},[68,67802,4000],{"emptyLinePlaceholder":1679},[68,67804,67805,67808],{"class":70,"line":3244},[68,67806,67807],{"class":587},"    .son",[68,67809,86],{"class":85},[68,67811,67812,67814,67816,67818,67820],{"class":70,"line":3249},[68,67813,56355],{"class":92},[68,67815,96],{"class":85},[68,67817,3324],{"class":92},[68,67819,103],{"class":102},[68,67821,112],{"class":85},[68,67823,67824,67826,67828,67830,67832],{"class":70,"line":3255},[68,67825,56369],{"class":92},[68,67827,96],{"class":85},[68,67829,3324],{"class":92},[68,67831,103],{"class":102},[68,67833,112],{"class":85},[68,67835,67836,67838,67840,67842],{"class":70,"line":3276},[68,67837,56468],{"class":92},[68,67839,96],{"class":85},[68,67841,56473],{"class":92},[68,67843,112],{"class":85},[68,67845,67846],{"class":70,"line":3281},[68,67847,3787],{"class":85},[68,67849,67850,67852,67854],{"class":70,"line":3295},[68,67851,54002],{"class":85},[68,67853,1652],{"class":81},[68,67855,876],{"class":85},[68,67857,67858,67860,67862],{"class":70,"line":3300},[68,67859,886],{"class":85},[68,67861,52925],{"class":81},[68,67863,876],{"class":85},[68,67865,67866],{"class":70,"line":3329},[68,67867,4000],{"emptyLinePlaceholder":1679},[68,67869,67870,67872,67874],{"class":70,"line":3334},[68,67871,861],{"class":85},[68,67873,53385],{"class":81},[68,67875,876],{"class":85},[68,67877,67878,67880,67882,67884,67886,67889],{"class":70,"line":3351},[68,67879,53729],{"class":85},[68,67881,82],{"class":81},[68,67883,866],{"class":587},[68,67885,869],{"class":85},[68,67887,67888],{"class":872},"\"father\"",[68,67890,876],{"class":85},[68,67892,67893,67895,67897,67899,67901,67904,67906,67908],{"class":70,"line":3356},[68,67894,52932],{"class":85},[68,67896,82],{"class":81},[68,67898,866],{"class":587},[68,67900,869],{"class":85},[68,67902,67903],{"class":872},"\"son\"",[68,67905,56898],{"class":85},[68,67907,82],{"class":81},[68,67909,876],{"class":85},[68,67911,67912,67914,67916],{"class":70,"line":3361},[68,67913,54002],{"class":85},[68,67915,82],{"class":81},[68,67917,876],{"class":85},[68,67919,67920,67922,67924],{"class":70,"line":3366},[68,67921,53729],{"class":85},[68,67923,53398],{"class":81},[68,67925,876],{"class":85},[68,67927,67928,67930,67933,67935,67937,67939,67941,67944],{"class":70,"line":3380},[68,67929,12819],{"class":102},[68,67931,67932],{"class":92}," fa",[68,67934,15161],{"class":102},[68,67936,55980],{"class":85},[68,67938,55983],{"class":587},[68,67940,997],{"class":85},[68,67942,67943],{"class":872},"'.father'",[68,67945,1757],{"class":85},[68,67947,67948,67950,67953,67955,67957,67959,67961,67964],{"class":70,"line":3385},[68,67949,12819],{"class":102},[68,67951,67952],{"class":92}," son",[68,67954,15161],{"class":102},[68,67956,55980],{"class":85},[68,67958,55983],{"class":587},[68,67960,997],{"class":85},[68,67962,67963],{"class":872},"'.son'",[68,67965,1757],{"class":85},[68,67967,67968,67970,67972,67974,67976,67978,67980],{"class":70,"line":4177},[68,67969,53992],{"class":85},[68,67971,59397],{"class":587},[68,67973,997],{"class":85},[68,67975,59402],{"class":872},[68,67977,1002],{"class":85},[68,67979,56033],{"class":102},[68,67981,56036],{"class":85},[68,67983,67984,67986,67988,67991],{"class":70,"line":4191},[68,67985,60509],{"class":587},[68,67987,997],{"class":85},[68,67989,67990],{"class":872},"'woshiu1'",[68,67992,1757],{"class":85},[68,67994,67995,67997,67999],{"class":70,"line":4199},[68,67996,56119],{"class":85},[68,67998,2966],{"class":92},[68,68000,1757],{"class":85},[68,68002,68003,68006,68008,68010,68012,68014,68016],{"class":70,"line":4204},[68,68004,68005],{"class":85},"    fa.",[68,68007,59397],{"class":587},[68,68009,997],{"class":85},[68,68011,59402],{"class":872},[68,68013,1002],{"class":85},[68,68015,56033],{"class":102},[68,68017,56036],{"class":85},[68,68019,68020,68022,68024,68027],{"class":70,"line":4210},[68,68021,60509],{"class":587},[68,68023,997],{"class":85},[68,68025,68026],{"class":872},"'1'",[68,68028,1757],{"class":85},[68,68030,68031,68033,68035],{"class":70,"line":4216},[68,68032,56119],{"class":85},[68,68034,2966],{"class":92},[68,68036,1757],{"class":85},[68,68038,68039,68042,68044,68046,68048,68050,68052],{"class":70,"line":4221},[68,68040,68041],{"class":85},"    son.",[68,68043,59397],{"class":587},[68,68045,997],{"class":85},[68,68047,59402],{"class":872},[68,68049,1002],{"class":85},[68,68051,56033],{"class":102},[68,68053,56036],{"class":85},[68,68055,68056,68058,68060,68063],{"class":70,"line":9547},[68,68057,60509],{"class":587},[68,68059,997],{"class":85},[68,68061,68062],{"class":872},"'2'",[68,68064,1757],{"class":85},[68,68066,68067,68069,68071],{"class":70,"line":9571},[68,68068,56119],{"class":85},[68,68070,2966],{"class":92},[68,68072,1757],{"class":85},[68,68074,68075,68077,68079],{"class":70,"line":9576},[68,68076,54002],{"class":85},[68,68078,53398],{"class":81},[68,68080,876],{"class":85},[68,68082,68083,68085,68087],{"class":70,"line":9582},[68,68084,886],{"class":85},[68,68086,53385],{"class":81},[68,68088,876],{"class":85},[68,68090,68091],{"class":70,"line":9609},[68,68092,4000],{"emptyLinePlaceholder":1679},[68,68094,68095,68097,68099],{"class":70,"line":9614},[68,68096,886],{"class":85},[68,68098,52228],{"class":81},[68,68100,876],{"class":85},[19,68102,68103],{},[38,68104],{"alt":63,"src":68105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68107,68108],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23593,68110,68112],{"id":68111},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68114,68115],{},[38,68116],{"alt":63,"src":68117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68119,68120],{},"反着来",[19,68122,68123],{},"注意是同名事件，比如都是‘click’",[23593,68125,68127],{"id":68126},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68129,68130],{},[38,68131],{"alt":63,"src":68132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23593,68134,68136],{"id":68135},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68138,68139],{},[38,68140],{"alt":63,"src":68141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68143,68144],{},[38,68145],{"alt":63,"src":68146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23593,68148,68150],{"id":68149},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[48,68152,68153],{},[51,68154,68155],{},"事件类型的区别",[19,68157,68158],{},[38,68159],{"alt":63,"src":68160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68162,68163],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[48,68165,68166],{"start":78},[51,68167,68168],{},"注册事件的区别",[19,68170,68171],{},[38,68172],{"alt":63,"src":68173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23593,68175,68177],{"id":68176},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68179,68180],{},[38,68181],{"alt":63,"src":68182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68184,68185],{},[38,68186],{"alt":63,"src":68187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[58,68189,68191],{"className":54652,"code":68190,"language":54654,"meta":63,"style":63},"\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",[65,68192,68193,68201,68218,68241,68249,68254,68259,68264,68268,68276,68284],{"__ignoreMap":63},[68,68194,68195,68197,68199],{"class":70,"line":71},[68,68196,861],{"class":85},[68,68198,53385],{"class":81},[68,68200,876],{"class":85},[68,68202,68203,68205,68208,68211,68213,68216],{"class":70,"line":78},[68,68204,53729],{"class":85},[68,68206,68207],{"class":81},"form",[68,68209,68210],{"class":587}," action",[68,68212,869],{"class":85},[68,68214,68215],{"class":872},"\"http:\u002F\u002Fwww.itcast.cn\"",[68,68217,876],{"class":85},[68,68219,68220,68222,68224,68226,68228,68231,68234,68236,68239],{"class":70,"line":89},[68,68221,52932],{"class":85},[68,68223,55405],{"class":81},[68,68225,55408],{"class":587},[68,68227,869],{"class":85},[68,68229,68230],{"class":872},"\"submit\"",[68,68232,68233],{"class":587}," value",[68,68235,869],{"class":85},[68,68237,68238],{"class":872},"\"免费注册\"",[68,68240,876],{"class":85},[68,68242,68243,68245,68247],{"class":70,"line":115},[68,68244,52932],{"class":85},[68,68246,53398],{"class":81},[68,68248,876],{"class":85},[68,68250,68251],{"class":70,"line":280},[68,68252,68253],{"class":85},"      const form = document.querySelector('form')\n",[68,68255,68256],{"class":70,"line":301},[68,68257,68258],{"class":85},"      form.addEventListener('submit', function (e) {\n",[68,68260,68261],{"class":70,"line":320},[68,68262,68263],{"class":85},"        e.preventDefault()\n",[68,68265,68266],{"class":70,"line":2915},[68,68267,66398],{"class":85},[68,68269,68270,68272,68274],{"class":70,"line":2921},[68,68271,53362],{"class":85},[68,68273,53398],{"class":81},[68,68275,876],{"class":85},[68,68277,68278,68280,68282],{"class":70,"line":2933},[68,68279,54002],{"class":85},[68,68281,68207],{"class":81},[68,68283,876],{"class":85},[68,68285,68286,68288,68290],{"class":70,"line":3214},[68,68287,886],{"class":85},[68,68289,53385],{"class":81},[68,68291,876],{"class":85},[19,68293,68294],{},"点击不在跳转！！！",[43,68296,68298],{"id":68297},"_332-事件委托","3.3.2 事件委托",[19,68300,68301],{},[38,68302],{"alt":63,"src":68303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[58,68305,68307],{"className":52226,"code":68306,"language":52228,"meta":63,"style":63},"\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",[65,68308,68309,68319,68333,68337,68345,68359,68379,68391,68399,68403,68411,68419,68431,68443,68455,68467,68479,68492,68500,68508,68513,68532,68553,68558,68563,68568,68573,68582,68586,68596,68600,68605,68610,68624,68634,68638,68642,68650,68658,68662],{"__ignoreMap":63},[68,68310,68311,68313,68315,68317],{"class":70,"line":71},[68,68312,52890],{"class":85},[68,68314,52893],{"class":81},[68,68316,52896],{"class":587},[68,68318,876],{"class":85},[68,68320,68321,68323,68325,68327,68329,68331],{"class":70,"line":78},[68,68322,861],{"class":85},[68,68324,52228],{"class":81},[68,68326,52907],{"class":587},[68,68328,869],{"class":85},[68,68330,52912],{"class":872},[68,68332,876],{"class":85},[68,68334,68335],{"class":70,"line":89},[68,68336,4000],{"emptyLinePlaceholder":1679},[68,68338,68339,68341,68343],{"class":70,"line":115},[68,68340,861],{"class":85},[68,68342,52925],{"class":81},[68,68344,876],{"class":85},[68,68346,68347,68349,68351,68353,68355,68357],{"class":70,"line":280},[68,68348,53729],{"class":85},[68,68350,52935],{"class":81},[68,68352,52938],{"class":587},[68,68354,869],{"class":85},[68,68356,52943],{"class":872},[68,68358,876],{"class":85},[68,68360,68361,68363,68365,68367,68369,68371,68373,68375,68377],{"class":70,"line":301},[68,68362,53729],{"class":85},[68,68364,52935],{"class":81},[68,68366,16516],{"class":587},[68,68368,869],{"class":85},[68,68370,52982],{"class":872},[68,68372,52962],{"class":587},[68,68374,869],{"class":85},[68,68376,52989],{"class":872},[68,68378,876],{"class":85},[68,68380,68381,68383,68385,68387,68389],{"class":70,"line":320},[68,68382,53729],{"class":85},[68,68384,52998],{"class":81},[68,68386,53001],{"class":85},[68,68388,52998],{"class":81},[68,68390,876],{"class":85},[68,68392,68393,68395,68397],{"class":70,"line":2915},[68,68394,886],{"class":85},[68,68396,52925],{"class":81},[68,68398,876],{"class":85},[68,68400,68401],{"class":70,"line":2921},[68,68402,4000],{"emptyLinePlaceholder":1679},[68,68404,68405,68407,68409],{"class":70,"line":2933},[68,68406,861],{"class":85},[68,68408,53385],{"class":81},[68,68410,876],{"class":85},[68,68412,68413,68415,68417],{"class":70,"line":3214},[68,68414,53729],{"class":85},[68,68416,168],{"class":81},[68,68418,876],{"class":85},[68,68420,68421,68423,68425,68427,68429],{"class":70,"line":3219},[68,68422,52932],{"class":85},[68,68424,51],{"class":81},[68,68426,55550],{"class":85},[68,68428,51],{"class":81},[68,68430,876],{"class":85},[68,68432,68433,68435,68437,68439,68441],{"class":70,"line":3225},[68,68434,52932],{"class":85},[68,68436,51],{"class":81},[68,68438,55569],{"class":85},[68,68440,51],{"class":81},[68,68442,876],{"class":85},[68,68444,68445,68447,68449,68451,68453],{"class":70,"line":3230},[68,68446,52932],{"class":85},[68,68448,51],{"class":81},[68,68450,55588],{"class":85},[68,68452,51],{"class":81},[68,68454,876],{"class":85},[68,68456,68457,68459,68461,68463,68465],{"class":70,"line":3244},[68,68458,52932],{"class":85},[68,68460,51],{"class":81},[68,68462,55607],{"class":85},[68,68464,51],{"class":81},[68,68466,876],{"class":85},[68,68468,68469,68471,68473,68475,68477],{"class":70,"line":3249},[68,68470,52932],{"class":85},[68,68472,51],{"class":81},[68,68474,55626],{"class":85},[68,68476,51],{"class":81},[68,68478,876],{"class":85},[68,68480,68481,68483,68485,68488,68490],{"class":70,"line":3255},[68,68482,52932],{"class":85},[68,68484,19],{"class":81},[68,68486,68487],{"class":85},">我不需要变色\u003C\u002F",[68,68489,19],{"class":81},[68,68491,876],{"class":85},[68,68493,68494,68496,68498],{"class":70,"line":3276},[68,68495,54002],{"class":85},[68,68497,168],{"class":81},[68,68499,876],{"class":85},[68,68501,68502,68504,68506],{"class":70,"line":3281},[68,68503,53729],{"class":85},[68,68505,53398],{"class":81},[68,68507,876],{"class":85},[68,68509,68510],{"class":70,"line":3295},[68,68511,68512],{"class":74},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[68,68514,68515,68517,68519,68521,68523,68525,68527,68530],{"class":70,"line":3300},[68,68516,12819],{"class":102},[68,68518,62876],{"class":92},[68,68520,15161],{"class":102},[68,68522,55980],{"class":85},[68,68524,55983],{"class":587},[68,68526,997],{"class":85},[68,68528,68529],{"class":872},"'ul'",[68,68531,1757],{"class":85},[68,68533,68534,68537,68539,68541,68543,68545,68547,68549,68551],{"class":70,"line":3329},[68,68535,68536],{"class":85},"    ul.",[68,68538,59397],{"class":587},[68,68540,997],{"class":85},[68,68542,59402],{"class":872},[68,68544,1002],{"class":85},[68,68546,56033],{"class":102},[68,68548,3260],{"class":85},[68,68550,1821],{"class":6815},[68,68552,14039],{"class":85},[68,68554,68555],{"class":70,"line":3334},[68,68556,68557],{"class":74},"      \u002F\u002F alert(1)\n",[68,68559,68560],{"class":70,"line":3351},[68,68561,68562],{"class":74},"      \u002F\u002F e.target就是我们点击的对象\n",[68,68564,68565],{"class":70,"line":3356},[68,68566,68567],{"class":74},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[68,68569,68570],{"class":70,"line":3361},[68,68571,68572],{"class":74},"      \u002F\u002F e.target.style.color = 'red'\n",[68,68574,68575,68577,68579],{"class":70,"line":3366},[68,68576,59828],{"class":85},[68,68578,59831],{"class":587},[68,68580,68581],{"class":85},"(e)\n",[68,68583,68584],{"class":70,"line":3380},[68,68585,4000],{"emptyLinePlaceholder":1679},[68,68587,68588,68590,68593],{"class":70,"line":3385},[68,68589,59828],{"class":85},[68,68591,68592],{"class":587},"dir",[68,68594,68595],{"class":85},"(e.target)\n",[68,68597,68598],{"class":70,"line":4177},[68,68599,4000],{"emptyLinePlaceholder":1679},[68,68601,68602],{"class":70,"line":4191},[68,68603,68604],{"class":74},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[68,68606,68607],{"class":70,"line":4199},[68,68608,68609],{"class":74},"      \u002F\u002F 通过tagName来进行判断\n",[68,68611,68612,68614,68617,68619,68622],{"class":70,"line":4204},[68,68613,56064],{"class":102},[68,68615,68616],{"class":85}," (e.target.tagName ",[68,68618,56070],{"class":102},[68,68620,68621],{"class":872}," 'LI'",[68,68623,14039],{"class":85},[68,68625,68626,68629,68631],{"class":70,"line":4210},[68,68627,68628],{"class":85},"        e.target.style.color ",[68,68630,869],{"class":102},[68,68632,68633],{"class":872}," 'red'\n",[68,68635,68636],{"class":70,"line":4216},[68,68637,53983],{"class":85},[68,68639,68640],{"class":70,"line":4221},[68,68641,35054],{"class":85},[68,68643,68644,68646,68648],{"class":70,"line":9547},[68,68645,54002],{"class":85},[68,68647,53398],{"class":81},[68,68649,876],{"class":85},[68,68651,68652,68654,68656],{"class":70,"line":9571},[68,68653,886],{"class":85},[68,68655,53385],{"class":81},[68,68657,876],{"class":85},[68,68659,68660],{"class":70,"line":9576},[68,68661,4000],{"emptyLinePlaceholder":1679},[68,68663,68664,68666,68668],{"class":70,"line":9582},[68,68665,886],{"class":85},[68,68667,52228],{"class":81},[68,68669,876],{"class":85},[19,68671,68672],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68674,68675],{},"if(e.target.ragName==='P') {}",[19,68677,68678],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68680,68681],{},"通过事件委托的方式实现tab栏切换改造：",[19,68683,68684],{},"一定要记住自定义属性！！！！！！",[19,68686,68687],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68689,68690],{},"id是自定义的属性名",[19,68692,68693],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[58,68695,68697],{"className":52226,"code":68696,"language":52228,"meta":63,"style":63},"\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",[65,68698,68699,68709,68723,68727,68735,68749,68769,68789,68801,68809,68815,68825,68835,68839,68843,68849,68861,68873,68885,68901,68905,68909,68915,68927,68939,68951,68961,68971,68975,68979,68987,68999,69009,69021,69025,69029,69037,69047,69057,69067,69071,69075,69085,69099,69111,69115,69119,69131,69141,69157,69167,69171,69175,69189,69199,69209,69213,69217,69223,69237,69241,69245,69253,69263,69267,69271,69280,69290,69294,69302,69310,69314,69322,69336,69350,69362,69370,69409,69441,69473,69505,69537,69545,69553,69567,69601,69635,69669,69703,69737,69745,69753,69761,69766,69771,69790,69795,69815,69823,69828,69841,69862,69875,69879,69884,69889,69902,69922,69950,69954,69958,69962,69970,69978,69982],{"__ignoreMap":63},[68,68700,68701,68703,68705,68707],{"class":70,"line":71},[68,68702,52890],{"class":85},[68,68704,52893],{"class":81},[68,68706,52896],{"class":587},[68,68708,876],{"class":85},[68,68710,68711,68713,68715,68717,68719,68721],{"class":70,"line":78},[68,68712,861],{"class":85},[68,68714,52228],{"class":81},[68,68716,52907],{"class":587},[68,68718,869],{"class":85},[68,68720,52912],{"class":872},[68,68722,876],{"class":85},[68,68724,68725],{"class":70,"line":89},[68,68726,4000],{"emptyLinePlaceholder":1679},[68,68728,68729,68731,68733],{"class":70,"line":115},[68,68730,861],{"class":85},[68,68732,52925],{"class":81},[68,68734,876],{"class":85},[68,68736,68737,68739,68741,68743,68745,68747],{"class":70,"line":280},[68,68738,53729],{"class":85},[68,68740,52935],{"class":81},[68,68742,52938],{"class":587},[68,68744,869],{"class":85},[68,68746,52943],{"class":872},[68,68748,60711],{"class":85},[68,68750,68751,68753,68755,68757,68759,68761,68763,68765,68767],{"class":70,"line":301},[68,68752,53729],{"class":85},[68,68754,52935],{"class":81},[68,68756,52954],{"class":587},[68,68758,869],{"class":85},[68,68760,52959],{"class":872},[68,68762,52962],{"class":587},[68,68764,869],{"class":85},[68,68766,52967],{"class":872},[68,68768,60711],{"class":85},[68,68770,68771,68773,68775,68777,68779,68781,68783,68785,68787],{"class":70,"line":320},[68,68772,53729],{"class":85},[68,68774,52935],{"class":81},[68,68776,16516],{"class":587},[68,68778,869],{"class":85},[68,68780,52982],{"class":872},[68,68782,52962],{"class":587},[68,68784,869],{"class":85},[68,68786,52989],{"class":872},[68,68788,60711],{"class":85},[68,68790,68791,68793,68795,68797,68799],{"class":70,"line":2915},[68,68792,53729],{"class":85},[68,68794,52998],{"class":81},[68,68796,65208],{"class":85},[68,68798,52998],{"class":81},[68,68800,876],{"class":85},[68,68802,68803,68805,68807],{"class":70,"line":2921},[68,68804,53729],{"class":85},[68,68806,1652],{"class":81},[68,68808,876],{"class":85},[68,68810,68811,68813],{"class":70,"line":2933},[68,68812,8002],{"class":81},[68,68814,86],{"class":85},[68,68816,68817,68819,68821,68823],{"class":70,"line":3214},[68,68818,56290],{"class":92},[68,68820,96],{"class":85},[68,68822,600],{"class":92},[68,68824,112],{"class":85},[68,68826,68827,68829,68831,68833],{"class":70,"line":3219},[68,68828,56279],{"class":92},[68,68830,96],{"class":85},[68,68832,600],{"class":92},[68,68834,112],{"class":85},[68,68836,68837],{"class":70,"line":3225},[68,68838,3787],{"class":85},[68,68840,68841],{"class":70,"line":3230},[68,68842,4000],{"emptyLinePlaceholder":1679},[68,68844,68845,68847],{"class":70,"line":3244},[68,68846,65259],{"class":587},[68,68848,86],{"class":85},[68,68850,68851,68853,68855,68857,68859],{"class":70,"line":3249},[68,68852,56355],{"class":92},[68,68854,96],{"class":85},[68,68856,65270],{"class":92},[68,68858,103],{"class":102},[68,68860,112],{"class":85},[68,68862,68863,68865,68867,68869,68871],{"class":70,"line":3255},[68,68864,56369],{"class":92},[68,68866,96],{"class":85},[68,68868,65283],{"class":92},[68,68870,103],{"class":102},[68,68872,112],{"class":85},[68,68874,68875,68877,68879,68881,68883],{"class":70,"line":3276},[68,68876,56290],{"class":92},[68,68878,96],{"class":85},[68,68880,2436],{"class":92},[68,68882,103],{"class":102},[68,68884,112],{"class":85},[68,68886,68887,68889,68891,68893,68895,68897,68899],{"class":70,"line":3281},[68,68888,63561],{"class":92},[68,68890,96],{"class":85},[68,68892,99],{"class":92},[68,68894,103],{"class":102},[68,68896,106],{"class":92},[68,68898,63827],{"class":92},[68,68900,112],{"class":85},[68,68902,68903],{"class":70,"line":3295},[68,68904,3787],{"class":85},[68,68906,68907],{"class":70,"line":3300},[68,68908,4000],{"emptyLinePlaceholder":1679},[68,68910,68911,68913],{"class":70,"line":3329},[68,68912,65328],{"class":587},[68,68914,86],{"class":85},[68,68916,68917,68919,68921,68923,68925],{"class":70,"line":3334},[68,68918,56355],{"class":92},[68,68920,96],{"class":85},[68,68922,2047],{"class":92},[68,68924,2064],{"class":102},[68,68926,112],{"class":85},[68,68928,68929,68931,68933,68935,68937],{"class":70,"line":3351},[68,68930,56369],{"class":92},[68,68932,96],{"class":85},[68,68934,2643],{"class":92},[68,68936,103],{"class":102},[68,68938,112],{"class":85},[68,68940,68941,68943,68945,68947,68949],{"class":70,"line":3356},[68,68942,58943],{"class":92},[68,68944,96],{"class":85},[68,68946,2643],{"class":92},[68,68948,103],{"class":102},[68,68950,112],{"class":85},[68,68952,68953,68955,68957,68959],{"class":70,"line":3361},[68,68954,56593],{"class":92},[68,68956,96],{"class":85},[68,68958,53067],{"class":92},[68,68960,112],{"class":85},[68,68962,68963,68965,68967,68969],{"class":70,"line":3366},[68,68964,56604],{"class":92},[68,68966,96],{"class":85},[68,68968,53254],{"class":92},[68,68970,112],{"class":85},[68,68972,68973],{"class":70,"line":3380},[68,68974,3787],{"class":85},[68,68976,68977],{"class":70,"line":3385},[68,68978,4000],{"emptyLinePlaceholder":1679},[68,68980,68981,68983,68985],{"class":70,"line":4177},[68,68982,65328],{"class":587},[68,68984,65401],{"class":81},[68,68986,86],{"class":85},[68,68988,68989,68991,68993,68995,68997],{"class":70,"line":4191},[68,68990,56506],{"class":92},[68,68992,96],{"class":85},[68,68994,2536],{"class":92},[68,68996,103],{"class":102},[68,68998,112],{"class":85},[68,69000,69001,69003,69005,69007],{"class":70,"line":4199},[68,69002,63917],{"class":92},[68,69004,96],{"class":85},[68,69006,65424],{"class":92},[68,69008,112],{"class":85},[68,69010,69011,69013,69015,69017,69019],{"class":70,"line":4204},[68,69012,63584],{"class":92},[68,69014,96],{"class":85},[68,69016,2436],{"class":92},[68,69018,103],{"class":102},[68,69020,112],{"class":85},[68,69022,69023],{"class":70,"line":4210},[68,69024,3787],{"class":85},[68,69026,69027],{"class":70,"line":4216},[68,69028,4000],{"emptyLinePlaceholder":1679},[68,69030,69031,69033,69035],{"class":70,"line":4221},[68,69032,65328],{"class":587},[68,69034,62876],{"class":81},[68,69036,86],{"class":85},[68,69038,69039,69041,69043,69045],{"class":70,"line":9547},[68,69040,56316],{"class":92},[68,69042,96],{"class":85},[68,69044,56321],{"class":92},[68,69046,112],{"class":85},[68,69048,69049,69051,69053,69055],{"class":70,"line":9571},[68,69050,56593],{"class":92},[68,69052,96],{"class":85},[68,69054,53067],{"class":92},[68,69056,112],{"class":85},[68,69058,69059,69061,69063,69065],{"class":70,"line":9576},[68,69060,56604],{"class":92},[68,69062,96],{"class":85},[68,69064,53167],{"class":92},[68,69066,112],{"class":85},[68,69068,69069],{"class":70,"line":9582},[68,69070,3787],{"class":85},[68,69072,69073],{"class":70,"line":9609},[68,69074,4000],{"emptyLinePlaceholder":1679},[68,69076,69077,69079,69081,69083],{"class":70,"line":9614},[68,69078,65328],{"class":587},[68,69080,62876],{"class":81},[68,69082,56659],{"class":81},[68,69084,86],{"class":85},[68,69086,69087,69089,69091,69093,69095,69097],{"class":70,"line":9620},[68,69088,56290],{"class":92},[68,69090,96],{"class":85},[68,69092,600],{"class":92},[68,69094,10549],{"class":92},[68,69096,103],{"class":102},[68,69098,112],{"class":85},[68,69100,69101,69103,69105,69107,69109],{"class":70,"line":9632},[68,69102,56506],{"class":92},[68,69104,96],{"class":85},[68,69106,2285],{"class":92},[68,69108,103],{"class":102},[68,69110,112],{"class":85},[68,69112,69113],{"class":70,"line":9644},[68,69114,3787],{"class":85},[68,69116,69117],{"class":70,"line":9656},[68,69118,4000],{"emptyLinePlaceholder":1679},[68,69120,69121,69123,69125,69127,69129],{"class":70,"line":11314},[68,69122,65328],{"class":587},[68,69124,62876],{"class":81},[68,69126,56659],{"class":81},[68,69128,3002],{"class":81},[68,69130,86],{"class":85},[68,69132,69133,69135,69137,69139],{"class":70,"line":11339},[68,69134,65553],{"class":92},[68,69136,96],{"class":85},[68,69138,56321],{"class":92},[68,69140,112],{"class":85},[68,69142,69143,69145,69147,69149,69151,69153,69155],{"class":70,"line":11362},[68,69144,63816],{"class":92},[68,69146,96],{"class":85},[68,69148,267],{"class":92},[68,69150,103],{"class":102},[68,69152,106],{"class":92},[68,69154,65574],{"class":92},[68,69156,112],{"class":85},[68,69158,69159,69161,69163,69165],{"class":70,"line":11386},[68,69160,59000],{"class":92},[68,69162,96],{"class":85},[68,69164,63952],{"class":92},[68,69166,112],{"class":85},[68,69168,69169],{"class":70,"line":11391},[68,69170,3787],{"class":85},[68,69172,69173],{"class":70,"line":11396},[68,69174,4000],{"emptyLinePlaceholder":1679},[68,69176,69177,69179,69181,69183,69185,69187],{"class":70,"line":11401},[68,69178,65328],{"class":587},[68,69180,62876],{"class":81},[68,69182,56659],{"class":81},[68,69184,3002],{"class":81},[68,69186,65607],{"class":587},[68,69188,86],{"class":85},[68,69190,69191,69193,69195,69197],{"class":70,"line":11410},[68,69192,63375],{"class":92},[68,69194,96],{"class":85},[68,69196,65618],{"class":92},[68,69198,112],{"class":85},[68,69200,69201,69203,69205,69207],{"class":70,"line":11415},[68,69202,59000],{"class":92},[68,69204,96],{"class":85},[68,69206,65618],{"class":92},[68,69208,112],{"class":85},[68,69210,69211],{"class":70,"line":11421},[68,69212,3787],{"class":85},[68,69214,69215],{"class":70,"line":11442},[68,69216,4000],{"emptyLinePlaceholder":1679},[68,69218,69219,69221],{"class":70,"line":11448},[68,69220,65643],{"class":587},[68,69222,86],{"class":85},[68,69224,69225,69227,69229,69231,69233,69235],{"class":70,"line":11462},[68,69226,56279],{"class":92},[68,69228,96],{"class":85},[68,69230,600],{"class":92},[68,69232,65656],{"class":92},[68,69234,103],{"class":102},[68,69236,112],{"class":85},[68,69238,69239],{"class":70,"line":11468},[68,69240,3787],{"class":85},[68,69242,69243],{"class":70,"line":11495},[68,69244,4000],{"emptyLinePlaceholder":1679},[68,69246,69247,69249,69251],{"class":70,"line":11504},[68,69248,65643],{"class":587},[68,69250,63758],{"class":587},[68,69252,86],{"class":85},[68,69254,69255,69257,69259,69261],{"class":70,"line":11510},[68,69256,56593],{"class":92},[68,69258,96],{"class":85},[68,69260,56321],{"class":92},[68,69262,112],{"class":85},[68,69264,69265],{"class":70,"line":11518},[68,69266,3787],{"class":85},[68,69268,69269],{"class":70,"line":11523},[68,69270,4000],{"emptyLinePlaceholder":1679},[68,69272,69273,69275,69278],{"class":70,"line":18199},[68,69274,65643],{"class":587},[68,69276,69277],{"class":587}," .active",[68,69279,86],{"class":85},[68,69281,69282,69284,69286,69288],{"class":70,"line":18205},[68,69283,56593],{"class":92},[68,69285,96],{"class":85},[68,69287,62453],{"class":92},[68,69289,112],{"class":85},[68,69291,69292],{"class":70,"line":18228},[68,69293,3787],{"class":85},[68,69295,69296,69298,69300],{"class":70,"line":18234},[68,69297,54002],{"class":85},[68,69299,1652],{"class":81},[68,69301,876],{"class":85},[68,69303,69304,69306,69308],{"class":70,"line":18257},[68,69305,886],{"class":85},[68,69307,52925],{"class":81},[68,69309,876],{"class":85},[68,69311,69312],{"class":70,"line":18271},[68,69313,4000],{"emptyLinePlaceholder":1679},[68,69315,69316,69318,69320],{"class":70,"line":18291},[68,69317,861],{"class":85},[68,69319,53385],{"class":81},[68,69321,876],{"class":85},[68,69323,69324,69326,69328,69330,69332,69334],{"class":70,"line":18297},[68,69325,53729],{"class":85},[68,69327,82],{"class":81},[68,69329,866],{"class":587},[68,69331,869],{"class":85},[68,69333,65758],{"class":872},[68,69335,876],{"class":85},[68,69337,69338,69340,69342,69344,69346,69348],{"class":70,"line":18308},[68,69339,52932],{"class":85},[68,69341,82],{"class":81},[68,69343,866],{"class":587},[68,69345,869],{"class":85},[68,69347,65773],{"class":872},[68,69349,876],{"class":85},[68,69351,69352,69354,69356,69358,69360],{"class":70,"line":18331},[68,69353,56818],{"class":85},[68,69355,43],{"class":81},[68,69357,65784],{"class":85},[68,69359,43],{"class":81},[68,69361,876],{"class":85},[68,69363,69364,69366,69368],{"class":70,"line":18353},[68,69365,56818],{"class":85},[68,69367,168],{"class":81},[68,69369,876],{"class":85},[68,69371,69372,69374,69376,69378,69380,69382,69384,69386,69388,69390,69392,69394,69396,69399,69401,69403,69405,69407],{"class":70,"line":18358},[68,69373,56886],{"class":85},[68,69375,51],{"class":81},[68,69377,62636],{"class":85},[68,69379,1974],{"class":81},[68,69381,866],{"class":587},[68,69383,869],{"class":85},[68,69385,61290],{"class":872},[68,69387,62641],{"class":587},[68,69389,869],{"class":85},[68,69391,65819],{"class":872},[68,69393,55535],{"class":587},[68,69395,869],{"class":85},[68,69397,69398],{"class":872},"\"0\"",[68,69400,65822],{"class":85},[68,69402,1974],{"class":81},[68,69404,56898],{"class":85},[68,69406,51],{"class":81},[68,69408,876],{"class":85},[68,69410,69411,69413,69415,69417,69419,69421,69423,69425,69427,69429,69431,69433,69435,69437,69439],{"class":70,"line":18364},[68,69412,56886],{"class":85},[68,69414,51],{"class":81},[68,69416,62636],{"class":85},[68,69418,1974],{"class":81},[68,69420,62641],{"class":587},[68,69422,869],{"class":85},[68,69424,65819],{"class":872},[68,69426,55535],{"class":587},[68,69428,869],{"class":85},[68,69430,5277],{"class":872},[68,69432,65849],{"class":85},[68,69434,1974],{"class":81},[68,69436,56898],{"class":85},[68,69438,51],{"class":81},[68,69440,876],{"class":85},[68,69442,69443,69445,69447,69449,69451,69453,69455,69457,69459,69461,69463,69465,69467,69469,69471],{"class":70,"line":18378},[68,69444,56886],{"class":85},[68,69446,51],{"class":81},[68,69448,62636],{"class":85},[68,69450,1974],{"class":81},[68,69452,62641],{"class":587},[68,69454,869],{"class":85},[68,69456,65819],{"class":872},[68,69458,55535],{"class":587},[68,69460,869],{"class":85},[68,69462,5300],{"class":872},[68,69464,65876],{"class":85},[68,69466,1974],{"class":81},[68,69468,56898],{"class":85},[68,69470,51],{"class":81},[68,69472,876],{"class":85},[68,69474,69475,69477,69479,69481,69483,69485,69487,69489,69491,69493,69495,69497,69499,69501,69503],{"class":70,"line":18391},[68,69476,56886],{"class":85},[68,69478,51],{"class":81},[68,69480,62636],{"class":85},[68,69482,1974],{"class":81},[68,69484,62641],{"class":587},[68,69486,869],{"class":85},[68,69488,65819],{"class":872},[68,69490,55535],{"class":587},[68,69492,869],{"class":85},[68,69494,5313],{"class":872},[68,69496,65903],{"class":85},[68,69498,1974],{"class":81},[68,69500,56898],{"class":85},[68,69502,51],{"class":81},[68,69504,876],{"class":85},[68,69506,69507,69509,69511,69513,69515,69517,69519,69521,69523,69525,69527,69529,69531,69533,69535],{"class":70,"line":18396},[68,69508,56886],{"class":85},[68,69510,51],{"class":81},[68,69512,62636],{"class":85},[68,69514,1974],{"class":81},[68,69516,62641],{"class":587},[68,69518,869],{"class":85},[68,69520,65819],{"class":872},[68,69522,55535],{"class":587},[68,69524,869],{"class":85},[68,69526,5326],{"class":872},[68,69528,65930],{"class":85},[68,69530,1974],{"class":81},[68,69532,56898],{"class":85},[68,69534,51],{"class":81},[68,69536,876],{"class":85},[68,69538,69539,69541,69543],{"class":70,"line":18410},[68,69540,56991],{"class":85},[68,69542,168],{"class":81},[68,69544,876],{"class":85},[68,69546,69547,69549,69551],{"class":70,"line":18415},[68,69548,53362],{"class":85},[68,69550,82],{"class":81},[68,69552,876],{"class":85},[68,69554,69555,69557,69559,69561,69563,69565],{"class":70,"line":18421},[68,69556,52932],{"class":85},[68,69558,82],{"class":81},[68,69560,866],{"class":587},[68,69562,869],{"class":85},[68,69564,65967],{"class":872},[68,69566,876],{"class":85},[68,69568,69569,69571,69573,69575,69577,69579,69581,69583,69585,69587,69589,69591,69593,69595,69597,69599],{"class":70,"line":18426},[68,69570,56818],{"class":85},[68,69572,82],{"class":81},[68,69574,866],{"class":587},[68,69576,869],{"class":85},[68,69578,65982],{"class":872},[68,69580,62636],{"class":85},[68,69582,38],{"class":81},[68,69584,56823],{"class":587},[68,69586,869],{"class":85},[68,69588,65993],{"class":872},[68,69590,56831],{"class":587},[68,69592,869],{"class":85},[68,69594,9251],{"class":872},[68,69596,66002],{"class":85},[68,69598,82],{"class":81},[68,69600,876],{"class":85},[68,69602,69603,69605,69607,69609,69611,69613,69615,69617,69619,69621,69623,69625,69627,69629,69631,69633],{"class":70,"line":18440},[68,69604,56818],{"class":85},[68,69606,82],{"class":81},[68,69608,866],{"class":587},[68,69610,869],{"class":85},[68,69612,64206],{"class":872},[68,69614,62636],{"class":85},[68,69616,38],{"class":81},[68,69618,56823],{"class":587},[68,69620,869],{"class":85},[68,69622,66029],{"class":872},[68,69624,56831],{"class":587},[68,69626,869],{"class":85},[68,69628,9251],{"class":872},[68,69630,66002],{"class":85},[68,69632,82],{"class":81},[68,69634,876],{"class":85},[68,69636,69637,69639,69641,69643,69645,69647,69649,69651,69653,69655,69657,69659,69661,69663,69665,69667],{"class":70,"line":18445},[68,69638,56818],{"class":85},[68,69640,82],{"class":81},[68,69642,866],{"class":587},[68,69644,869],{"class":85},[68,69646,64206],{"class":872},[68,69648,62636],{"class":85},[68,69650,38],{"class":81},[68,69652,56823],{"class":587},[68,69654,869],{"class":85},[68,69656,66064],{"class":872},[68,69658,56831],{"class":587},[68,69660,869],{"class":85},[68,69662,9251],{"class":872},[68,69664,66002],{"class":85},[68,69666,82],{"class":81},[68,69668,876],{"class":85},[68,69670,69671,69673,69675,69677,69679,69681,69683,69685,69687,69689,69691,69693,69695,69697,69699,69701],{"class":70,"line":18450},[68,69672,56818],{"class":85},[68,69674,82],{"class":81},[68,69676,866],{"class":587},[68,69678,869],{"class":85},[68,69680,64206],{"class":872},[68,69682,62636],{"class":85},[68,69684,38],{"class":81},[68,69686,56823],{"class":587},[68,69688,869],{"class":85},[68,69690,66099],{"class":872},[68,69692,56831],{"class":587},[68,69694,869],{"class":85},[68,69696,9251],{"class":872},[68,69698,66002],{"class":85},[68,69700,82],{"class":81},[68,69702,876],{"class":85},[68,69704,69705,69707,69709,69711,69713,69715,69717,69719,69721,69723,69725,69727,69729,69731,69733,69735],{"class":70,"line":18464},[68,69706,56818],{"class":85},[68,69708,82],{"class":81},[68,69710,866],{"class":587},[68,69712,869],{"class":85},[68,69714,64206],{"class":872},[68,69716,62636],{"class":85},[68,69718,38],{"class":81},[68,69720,56823],{"class":587},[68,69722,869],{"class":85},[68,69724,66134],{"class":872},[68,69726,56831],{"class":587},[68,69728,869],{"class":85},[68,69730,9251],{"class":872},[68,69732,66002],{"class":85},[68,69734,82],{"class":81},[68,69736,876],{"class":85},[68,69738,69739,69741,69743],{"class":70,"line":18476},[68,69740,53362],{"class":85},[68,69742,82],{"class":81},[68,69744,876],{"class":85},[68,69746,69747,69749,69751],{"class":70,"line":18481},[68,69748,54002],{"class":85},[68,69750,82],{"class":81},[68,69752,876],{"class":85},[68,69754,69755,69757,69759],{"class":70,"line":18494},[68,69756,53729],{"class":85},[68,69758,53398],{"class":81},[68,69760,876],{"class":85},[68,69762,69763],{"class":70,"line":18499},[68,69764,69765],{"class":74},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[68,69767,69768],{"class":70,"line":18504},[68,69769,69770],{"class":74},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[68,69772,69773,69775,69777,69779,69781,69783,69785,69788],{"class":70,"line":18509},[68,69774,12819],{"class":102},[68,69776,62876],{"class":92},[68,69778,15161],{"class":102},[68,69780,55980],{"class":85},[68,69782,55983],{"class":587},[68,69784,997],{"class":85},[68,69786,69787],{"class":872},"'.tab-nav ul'",[68,69789,1757],{"class":85},[68,69791,69792],{"class":70,"line":18522},[68,69793,69794],{"class":74},"    \u002F\u002F 2.添加事件\n",[68,69796,69797,69799,69801,69803,69805,69807,69809,69811,69813],{"class":70,"line":18527},[68,69798,68536],{"class":85},[68,69800,59397],{"class":587},[68,69802,997],{"class":85},[68,69804,59402],{"class":872},[68,69806,1002],{"class":85},[68,69808,56033],{"class":102},[68,69810,3260],{"class":85},[68,69812,1821],{"class":6815},[68,69814,14039],{"class":85},[68,69816,69817,69819,69821],{"class":70,"line":34226},[68,69818,59828],{"class":85},[68,69820,68592],{"class":587},[68,69822,68595],{"class":85},[68,69824,69825],{"class":70,"line":34232},[68,69826,69827],{"class":74},"      \u002F\u002Fe.targer是我们点击的对象\n",[68,69829,69830,69832,69834,69836,69839],{"class":70,"line":34238},[68,69831,56064],{"class":102},[68,69833,68616],{"class":85},[68,69835,56070],{"class":102},[68,69837,69838],{"class":872}," 'A'",[68,69840,14039],{"class":85},[68,69842,69843,69845,69847,69849,69852,69854,69856,69858,69860],{"class":70,"line":34244},[68,69844,53510],{"class":85},[68,69846,55983],{"class":587},[68,69848,997],{"class":85},[68,69850,69851],{"class":872},"'.active'",[68,69853,58587],{"class":85},[68,69855,58590],{"class":587},[68,69857,997],{"class":85},[68,69859,66297],{"class":872},[68,69861,1757],{"class":85},[68,69863,69864,69867,69869,69871,69873],{"class":70,"line":34250},[68,69865,69866],{"class":85},"        e.target.classList.",[68,69868,6933],{"class":587},[68,69870,997],{"class":85},[68,69872,66297],{"class":872},[68,69874,1757],{"class":85},[68,69876,69877],{"class":70,"line":34261},[68,69878,4000],{"emptyLinePlaceholder":1679},[68,69880,69881],{"class":70,"line":34267},[68,69882,69883],{"class":74},"        \u002F\u002F 下面大盒子模块\n",[68,69885,69886],{"class":70,"line":34287},[68,69887,69888],{"class":74},"        \u002F\u002F console.log(e.target.dataset.id)\n",[68,69890,69891,69893,69895,69897,69899],{"class":70,"line":34293},[68,69892,62854],{"class":102},[68,69894,4631],{"class":92},[68,69896,15161],{"class":102},[68,69898,47159],{"class":102},[68,69900,69901],{"class":85},"e.target.dataset.id\n",[68,69903,69904,69906,69908,69910,69912,69914,69916,69918,69920],{"class":70,"line":34304},[68,69905,53510],{"class":85},[68,69907,55983],{"class":587},[68,69909,997],{"class":85},[68,69911,66345],{"class":872},[68,69913,58587],{"class":85},[68,69915,58590],{"class":587},[68,69917,997],{"class":85},[68,69919,66297],{"class":872},[68,69921,1757],{"class":85},[68,69923,69924,69926,69928,69930,69932,69934,69936,69938,69940,69942,69944,69946,69948],{"class":70,"line":34310},[68,69925,53510],{"class":85},[68,69927,55983],{"class":587},[68,69929,997],{"class":85},[68,69931,66371],{"class":872},[68,69933,2177],{"class":85},[68,69935,47159],{"class":102},[68,69937,1112],{"class":92},[68,69939,58616],{"class":872},[68,69941,58587],{"class":85},[68,69943,6933],{"class":587},[68,69945,997],{"class":85},[68,69947,66297],{"class":872},[68,69949,1757],{"class":85},[68,69951,69952],{"class":70,"line":34316},[68,69953,4000],{"emptyLinePlaceholder":1679},[68,69955,69956],{"class":70,"line":34322},[68,69957,53983],{"class":85},[68,69959,69960],{"class":70,"line":34328},[68,69961,35054],{"class":85},[68,69963,69964,69966,69968],{"class":70,"line":34334},[68,69965,54002],{"class":85},[68,69967,53398],{"class":81},[68,69969,876],{"class":85},[68,69971,69972,69974,69976],{"class":70,"line":34340},[68,69973,886],{"class":85},[68,69975,53385],{"class":81},[68,69977,876],{"class":85},[68,69979,69980],{"class":70,"line":34346},[68,69981,4000],{"emptyLinePlaceholder":1679},[68,69983,69984,69986,69988],{"class":70,"line":34366},[68,69985,886],{"class":85},[68,69987,52228],{"class":81},[68,69989,876],{"class":85},[43,69991,69993],{"id":69992},"_333-页面加载事件","3.3.3 页面加载事件",[48,69995,69996],{},[51,69997,69998],{},"load",[19,70000,70001],{},[38,70002],{"alt":63,"src":70003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70005,70006],{},"window代表整个窗口，比document还要大",[19,70008,70009],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70011,70012],{},"img.addEventListener('load', function () {",[19,70014,70015],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70017,54049],{},[48,70019,70020],{"start":78},[51,70021,70022],{},"DOMContentLoaded",[19,70024,70025],{},[38,70026],{"alt":63,"src":70027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70029,70030],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[43,70032,70034],{"id":70033},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70036,70037],{},[38,70038],{"alt":63,"src":70039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70041,70042],{},[38,70043],{"alt":63,"src":70044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70046,70047],{},[38,70048],{"alt":63,"src":70049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70051,70052],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70054,70055],{},"获得的是数字型数据，不带单位",[19,70057,70058],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70060,70061],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70063,70064],{},"它是通过document.documentElement来获取",[19,70066,70067],{},[38,70068],{"alt":63,"src":70069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70071,70072],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[43,70074,70076],{"id":70075},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70078,70079],{},[38,70080],{"alt":63,"src":70081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70083,70084],{},[38,70085],{"alt":63,"src":70086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[43,70088,70090],{"id":70089},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70092,70093],{},[38,70094],{"alt":63,"src":70095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70097,70098],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70100,70101],{},[38,70102],{"alt":63,"src":70103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70105,70106],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70108,70109],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70111,70112],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70114,70115],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70117,70118],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70120,70121],{},[38,70122],{"alt":63,"src":70123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70125,70126],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70128,70129],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70131,70132],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70134,70135],{},"e.pageX-box.getBoundingClientRect()",[43,70137,70139],{"id":70138},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70141,70142],{},[38,70143],{"alt":63,"src":70144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70146,70147],{},"这个是相对于视口来说的，它是个方法，不是属性值",[43,70149,70151],{"id":70150},"_338-总结","3.3.8 总结",[19,70153,70154],{},[38,70155],{"alt":63,"src":70156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70158,70159],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70161,70162],{},"修改盒子的宽高只能通过width和height来实现",[43,70164,70166],{"id":70165},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[58,70168,70170],{"className":52226,"code":70169,"language":52228,"meta":63,"style":63},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[65,70171,70172,70177,70182,70187,70192],{"__ignoreMap":63},[68,70173,70174],{"class":70,"line":71},[68,70175,70176],{"class":85},"\u002F* 页面滑动 *\u002F\n",[68,70178,70179],{"class":70,"line":78},[68,70180,70181],{"class":85},"html {\n",[68,70183,70184],{"class":70,"line":89},[68,70185,70186],{"class":85},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[68,70188,70189],{"class":70,"line":115},[68,70190,70191],{"class":85},"  scroll-behavior: smooth;\n",[68,70193,70194],{"class":70,"line":280},[68,70195,118],{"class":85},[19,70197,70198],{},"默认是auto",[43,70200,70202],{"id":70201},"_3310-日期对象","3.3.10 日期对象",[23593,70204,70206],{"id":70205},"_33101-实例化","3.3.10.1 实例化",[19,70208,70209],{},[38,70210],{"alt":63,"src":70211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23593,70213,70215],{"id":70214},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70217,70218],{},[38,70219],{"alt":63,"src":70220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70222,70223],{},"月份+1",[19,70225,70226],{},"老外认为第一天为0，星期天",[19,70228,70229],{},"方法使用的时候必须要跟括号",[19,70231,70232],{},"快速获得日期",[19,70234,70235],{},"\u002F\u002F 得到年月日",[19,70237,70238],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70240,70241],{},"\u002F\u002F 得到当地日期",[19,70243,70244],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70246,70247],{},"\u002F\u002F 得到当地时间",[19,70249,70250],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70252,70253],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70255,70256],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53398,70258,70259],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,70261,70262],{},"学会去封装函数！",[23593,70264,70266],{"id":70265},"_33103-时间戳","3.3.10.3 时间戳",[19,70268,70269],{},[38,70270],{"alt":63,"src":70271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70273,70274],{},[38,70275],{"alt":63,"src":70276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70278,70279],{},"三种方法记住一个就可以",[43,70281,70283],{"id":70282},"_3311-节点操作","3.3.11 节点操作",[23593,70285,70287],{"id":70286},"_33111-dom节点","3.3.11.1 DOM节点",[19,70289,70290],{},[38,70291],{"alt":63,"src":70292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70294,70295],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23593,70297,70299],{"id":70298},"_33112-查找节点","3.3.11.2 查找节点",[19,70301,70302],{},"前边的document.querySelector()是获取的元素",[19,70304,70305],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70307,70308],{},[38,70309],{"alt":63,"src":70310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[48,70312,70313],{},[51,70314,70315],{},"父节点",[19,70317,70318],{},[38,70319],{"alt":63,"src":70320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[48,70322,70323],{"start":78},[51,70324,70325],{},"子节点",[19,70327,70328],{},[38,70329],{"alt":63,"src":70330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70332,70333],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70335,70336],{},"children获得的是伪数组，是亲儿子",[48,70338,70339],{"start":89},[51,70340,70341],{},"兄弟节点",[19,70343,70344],{},[38,70345],{"alt":63,"src":70346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23593,70348,70350],{"id":70349},"_33113-增加节点","3.3.11.3 增加节点",[19,70352,70353],{},[38,70354],{"alt":63,"src":70355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70357,70358],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70360,70361],{},[38,70362],{"alt":63,"src":70363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70365,70366],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70368,70369],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70371,70372],{},"例：",[53398,70374,70375],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,70377,70378],{},[38,70379],{"alt":63,"src":70380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70382,70383],{},"false只克隆标签，里边的内容不会克隆过来",[58,70385,70387],{"className":52226,"code":70386,"language":52228,"meta":63,"style":63},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[65,70388,70389],{"__ignoreMap":63},[68,70390,70391],{"class":70,"line":71},[68,70392,70386],{"class":85},[23593,70394,70396],{"id":70395},"_33114-删除节点","3.3.11.4 删除节点",[19,70398,70399],{},[38,70400],{"alt":63,"src":70401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70403,70404],{},"父亲删儿子",[19,70406,70407],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[43,70409,70411],{"id":70410},"_3312-m端事件","3.3.12 M端事件",[19,70413,70414],{},"M端就是移动端",[19,70416,70417],{},[38,70418],{"alt":63,"src":70419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[43,70421,70423],{"id":70422},"_3313-插件","3.3.13 插件",[19,70425,70426],{},"要熟悉官网！！！",[19,70428,70429],{},[1974,70430,70431],{"href":70431,"rel":70432},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25459],[19,70434,70435],{},[1974,70436,70437],{"href":70437,"rel":70438},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25459],[43,70440,70442],{"id":70441},"_3314-学生信息表","3.3.14 学生信息表",[48,70444,70445,70448,70451,70454,70457,70460,70463,70466],{},[51,70446,70447],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[51,70449,70450],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[51,70452,70453],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[51,70455,70456],{},"用好表单元素自带的属性，value,name等",[51,70458,70459],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[51,70461,70462],{},"不要忘记事件对象",[51,70464,70465],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[51,70467,70468],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70470,70471],{},"结构：",[58,70473,70475],{"className":52226,"code":70474,"language":52228,"meta":63,"style":63},"\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",[65,70476,70477,70487,70501,70505,70513,70527,70547,70568,70581,70605,70613,70617,70625,70638,70659,70687,70715,70720,70742,70762,70781,70789,70817,70839,70859,70879,70899,70919,70939,70947,70967,70975,70979,70992,71000,71008,71016,71029,71042,71055,71068,71081,71094,71107,71115,71123,71131,71136,71141,71146,71151,71156,71161,71166,71171,71176,71181,71186,71191,71196,71204,71212,71220,71224,71244,71263,71283,71303,71323,71343,71347,71352,71372,71377,71387,71392,71397,71417,71439,71444,71454,71458,71462,71467,71472,71501,71515,71530,71534,71538,71542,71547,71558,71571,71576,71581,71586,71591,71596,71600,71605,71610,71619,71624,71629,71641,71646,71653,71657,71662,71672,71677,71687,71692,71720,71741,71751,71771,71789,71806,71823,71840,71857,71861,71871,71876,71881,71886,71897,71901,71905,71909,71914,71919,71940,71952,71957,71962,71967,71981,71986,71993,71997,72001,72009,72013,72021,72025],{"__ignoreMap":63},[68,70478,70479,70481,70483,70485],{"class":70,"line":71},[68,70480,52890],{"class":85},[68,70482,52893],{"class":81},[68,70484,52896],{"class":587},[68,70486,876],{"class":85},[68,70488,70489,70491,70493,70495,70497,70499],{"class":70,"line":78},[68,70490,861],{"class":85},[68,70492,52228],{"class":81},[68,70494,52907],{"class":587},[68,70496,869],{"class":85},[68,70498,52912],{"class":872},[68,70500,876],{"class":85},[68,70502,70503],{"class":70,"line":89},[68,70504,4000],{"emptyLinePlaceholder":1679},[68,70506,70507,70509,70511],{"class":70,"line":115},[68,70508,861],{"class":85},[68,70510,52925],{"class":81},[68,70512,876],{"class":85},[68,70514,70515,70517,70519,70521,70523,70525],{"class":70,"line":280},[68,70516,53729],{"class":85},[68,70518,52935],{"class":81},[68,70520,52938],{"class":587},[68,70522,869],{"class":85},[68,70524,52943],{"class":872},[68,70526,60711],{"class":85},[68,70528,70529,70531,70533,70535,70537,70539,70541,70543,70545],{"class":70,"line":301},[68,70530,53729],{"class":85},[68,70532,52935],{"class":81},[68,70534,16516],{"class":587},[68,70536,869],{"class":85},[68,70538,52982],{"class":872},[68,70540,52962],{"class":587},[68,70542,869],{"class":85},[68,70544,52989],{"class":872},[68,70546,60711],{"class":85},[68,70548,70549,70551,70553,70555,70557,70559,70561,70563,70566],{"class":70,"line":320},[68,70550,53729],{"class":85},[68,70552,52935],{"class":81},[68,70554,52954],{"class":587},[68,70556,869],{"class":85},[68,70558,52959],{"class":872},[68,70560,52962],{"class":587},[68,70562,869],{"class":85},[68,70564,70565],{"class":872},"\"ie=edge\"",[68,70567,60711],{"class":85},[68,70569,70570,70572,70574,70577,70579],{"class":70,"line":2915},[68,70571,53729],{"class":85},[68,70573,52998],{"class":81},[68,70575,70576],{"class":85},">学生信息管理\u003C\u002F",[68,70578,52998],{"class":81},[68,70580,876],{"class":85},[68,70582,70583,70585,70588,70591,70593,70596,70598,70600,70603],{"class":70,"line":2921},[68,70584,53729],{"class":85},[68,70586,70587],{"class":81},"link",[68,70589,70590],{"class":587}," rel",[68,70592,869],{"class":85},[68,70594,70595],{"class":872},"\"stylesheet\"",[68,70597,62641],{"class":587},[68,70599,869],{"class":85},[68,70601,70602],{"class":872},"\"css\u002Findex.css\"",[68,70604,60711],{"class":85},[68,70606,70607,70609,70611],{"class":70,"line":2933},[68,70608,886],{"class":85},[68,70610,52925],{"class":81},[68,70612,876],{"class":85},[68,70614,70615],{"class":70,"line":3214},[68,70616,4000],{"emptyLinePlaceholder":1679},[68,70618,70619,70621,70623],{"class":70,"line":3219},[68,70620,861],{"class":85},[68,70622,53385],{"class":81},[68,70624,876],{"class":85},[68,70626,70627,70629,70631,70634,70636],{"class":70,"line":3225},[68,70628,53729],{"class":85},[68,70630,10],{"class":81},[68,70632,70633],{"class":85},">新增学员\u003C\u002F",[68,70635,10],{"class":81},[68,70637,876],{"class":85},[68,70639,70640,70642,70644,70646,70648,70650,70653,70655,70657],{"class":70,"line":3230},[68,70641,53729],{"class":85},[68,70643,68207],{"class":81},[68,70645,866],{"class":587},[68,70647,869],{"class":85},[68,70649,64247],{"class":872},[68,70651,70652],{"class":587}," autocomplete",[68,70654,869],{"class":85},[68,70656,33369],{"class":872},[68,70658,876],{"class":85},[68,70660,70661,70664,70666,70668,70670,70672,70674,70676,70679,70681,70683,70685],{"class":70,"line":3244},[68,70662,70663],{"class":85},"    姓名：\u003C",[68,70665,55405],{"class":81},[68,70667,55408],{"class":587},[68,70669,869],{"class":85},[68,70671,64282],{"class":872},[68,70673,866],{"class":587},[68,70675,869],{"class":85},[68,70677,70678],{"class":872},"\"uname\"",[68,70680,16516],{"class":587},[68,70682,869],{"class":85},[68,70684,70678],{"class":872},[68,70686,60711],{"class":85},[68,70688,70689,70692,70694,70696,70698,70700,70702,70704,70707,70709,70711,70713],{"class":70,"line":3249},[68,70690,70691],{"class":85},"    年龄：\u003C",[68,70693,55405],{"class":81},[68,70695,55408],{"class":587},[68,70697,869],{"class":85},[68,70699,64282],{"class":872},[68,70701,866],{"class":587},[68,70703,869],{"class":85},[68,70705,70706],{"class":872},"\"age\"",[68,70708,16516],{"class":587},[68,70710,869],{"class":85},[68,70712,70706],{"class":872},[68,70714,60711],{"class":85},[68,70716,70717],{"class":70,"line":3255},[68,70718,70719],{"class":85},"    性别:\n",[68,70721,70722,70724,70727,70729,70731,70734,70736,70738,70740],{"class":70,"line":3276},[68,70723,52932],{"class":85},[68,70725,70726],{"class":81},"select",[68,70728,16516],{"class":587},[68,70730,869],{"class":85},[68,70732,70733],{"class":872},"\"gender\"",[68,70735,866],{"class":587},[68,70737,869],{"class":85},[68,70739,70733],{"class":872},[68,70741,876],{"class":85},[68,70743,70744,70746,70749,70751,70753,70755,70758,70760],{"class":70,"line":3281},[68,70745,56818],{"class":85},[68,70747,70748],{"class":81},"option",[68,70750,68233],{"class":587},[68,70752,869],{"class":85},[68,70754,11559],{"class":872},[68,70756,70757],{"class":85},">男\u003C\u002F",[68,70759,70748],{"class":81},[68,70761,876],{"class":85},[68,70763,70764,70766,70768,70770,70772,70774,70777,70779],{"class":70,"line":3295},[68,70765,56818],{"class":85},[68,70767,70748],{"class":81},[68,70769,68233],{"class":587},[68,70771,869],{"class":85},[68,70773,11628],{"class":872},[68,70775,70776],{"class":85},">女\u003C\u002F",[68,70778,70748],{"class":81},[68,70780,876],{"class":85},[68,70782,70783,70785,70787],{"class":70,"line":3300},[68,70784,53362],{"class":85},[68,70786,70726],{"class":81},[68,70788,876],{"class":85},[68,70790,70791,70794,70796,70798,70800,70802,70804,70806,70809,70811,70813,70815],{"class":70,"line":3329},[68,70792,70793],{"class":85},"    薪资：\u003C",[68,70795,55405],{"class":81},[68,70797,55408],{"class":587},[68,70799,869],{"class":85},[68,70801,64282],{"class":872},[68,70803,866],{"class":587},[68,70805,869],{"class":85},[68,70807,70808],{"class":872},"\"salary\"",[68,70810,16516],{"class":587},[68,70812,869],{"class":85},[68,70814,70808],{"class":872},[68,70816,60711],{"class":85},[68,70818,70819,70822,70824,70826,70828,70831,70833,70835,70837],{"class":70,"line":3334},[68,70820,70821],{"class":85},"    就业城市：\u003C",[68,70823,70726],{"class":81},[68,70825,16516],{"class":587},[68,70827,869],{"class":85},[68,70829,70830],{"class":872},"\"city\"",[68,70832,866],{"class":587},[68,70834,869],{"class":85},[68,70836,70830],{"class":872},[68,70838,876],{"class":85},[68,70840,70841,70843,70845,70847,70849,70852,70855,70857],{"class":70,"line":3351},[68,70842,56818],{"class":85},[68,70844,70748],{"class":81},[68,70846,68233],{"class":587},[68,70848,869],{"class":85},[68,70850,70851],{"class":872},"\"北京\"",[68,70853,70854],{"class":85},">北京\u003C\u002F",[68,70856,70748],{"class":81},[68,70858,876],{"class":85},[68,70860,70861,70863,70865,70867,70869,70872,70875,70877],{"class":70,"line":3356},[68,70862,56818],{"class":85},[68,70864,70748],{"class":81},[68,70866,68233],{"class":587},[68,70868,869],{"class":85},[68,70870,70871],{"class":872},"\"上海\"",[68,70873,70874],{"class":85},">上海\u003C\u002F",[68,70876,70748],{"class":81},[68,70878,876],{"class":85},[68,70880,70881,70883,70885,70887,70889,70892,70895,70897],{"class":70,"line":3361},[68,70882,56818],{"class":85},[68,70884,70748],{"class":81},[68,70886,68233],{"class":587},[68,70888,869],{"class":85},[68,70890,70891],{"class":872},"\"广州\"",[68,70893,70894],{"class":85},">广州\u003C\u002F",[68,70896,70748],{"class":81},[68,70898,876],{"class":85},[68,70900,70901,70903,70905,70907,70909,70912,70915,70917],{"class":70,"line":3366},[68,70902,56818],{"class":85},[68,70904,70748],{"class":81},[68,70906,68233],{"class":587},[68,70908,869],{"class":85},[68,70910,70911],{"class":872},"\"深圳\"",[68,70913,70914],{"class":85},">深圳\u003C\u002F",[68,70916,70748],{"class":81},[68,70918,876],{"class":85},[68,70920,70921,70923,70925,70927,70929,70932,70935,70937],{"class":70,"line":3380},[68,70922,56818],{"class":85},[68,70924,70748],{"class":81},[68,70926,68233],{"class":587},[68,70928,869],{"class":85},[68,70930,70931],{"class":872},"\"曹县\"",[68,70933,70934],{"class":85},">曹县\u003C\u002F",[68,70936,70748],{"class":81},[68,70938,876],{"class":85},[68,70940,70941,70943,70945],{"class":70,"line":3385},[68,70942,53362],{"class":85},[68,70944,70726],{"class":81},[68,70946,876],{"class":85},[68,70948,70949,70951,70953,70955,70957,70960,70963,70965],{"class":70,"line":4177},[68,70950,52932],{"class":85},[68,70952,55471],{"class":81},[68,70954,866],{"class":587},[68,70956,869],{"class":85},[68,70958,70959],{"class":872},"\"add\"",[68,70961,70962],{"class":85},">录入\u003C\u002F",[68,70964,55471],{"class":81},[68,70966,876],{"class":85},[68,70968,70969,70971,70973],{"class":70,"line":4191},[68,70970,54002],{"class":85},[68,70972,68207],{"class":81},[68,70974,876],{"class":85},[68,70976,70977],{"class":70,"line":4199},[68,70978,4000],{"emptyLinePlaceholder":1679},[68,70980,70981,70983,70985,70988,70990],{"class":70,"line":4204},[68,70982,53729],{"class":85},[68,70984,10],{"class":81},[68,70986,70987],{"class":85},">就业榜\u003C\u002F",[68,70989,10],{"class":81},[68,70991,876],{"class":85},[68,70993,70994,70996,70998],{"class":70,"line":4210},[68,70995,53729],{"class":85},[68,70997,120],{"class":81},[68,70999,876],{"class":85},[68,71001,71002,71004,71006],{"class":70,"line":4216},[68,71003,52932],{"class":85},[68,71005,123],{"class":81},[68,71007,876],{"class":85},[68,71009,71010,71012,71014],{"class":70,"line":4221},[68,71011,56818],{"class":85},[68,71013,126],{"class":81},[68,71015,876],{"class":85},[68,71017,71018,71020,71022,71025,71027],{"class":70,"line":9547},[68,71019,56886],{"class":85},[68,71021,129],{"class":81},[68,71023,71024],{"class":85},">序号\u003C\u002F",[68,71026,129],{"class":81},[68,71028,876],{"class":85},[68,71030,71031,71033,71035,71038,71040],{"class":70,"line":9571},[68,71032,56886],{"class":85},[68,71034,129],{"class":81},[68,71036,71037],{"class":85},">姓名\u003C\u002F",[68,71039,129],{"class":81},[68,71041,876],{"class":85},[68,71043,71044,71046,71048,71051,71053],{"class":70,"line":9576},[68,71045,56886],{"class":85},[68,71047,129],{"class":81},[68,71049,71050],{"class":85},">年龄\u003C\u002F",[68,71052,129],{"class":81},[68,71054,876],{"class":85},[68,71056,71057,71059,71061,71064,71066],{"class":70,"line":9582},[68,71058,56886],{"class":85},[68,71060,129],{"class":81},[68,71062,71063],{"class":85},">性别\u003C\u002F",[68,71065,129],{"class":81},[68,71067,876],{"class":85},[68,71069,71070,71072,71074,71077,71079],{"class":70,"line":9609},[68,71071,56886],{"class":85},[68,71073,129],{"class":81},[68,71075,71076],{"class":85},">薪资\u003C\u002F",[68,71078,129],{"class":81},[68,71080,876],{"class":85},[68,71082,71083,71085,71087,71090,71092],{"class":70,"line":9614},[68,71084,56886],{"class":85},[68,71086,129],{"class":81},[68,71088,71089],{"class":85},">就业城市\u003C\u002F",[68,71091,129],{"class":81},[68,71093,876],{"class":85},[68,71095,71096,71098,71100,71103,71105],{"class":70,"line":9620},[68,71097,56886],{"class":85},[68,71099,129],{"class":81},[68,71101,71102],{"class":85},">操作\u003C\u002F",[68,71104,129],{"class":81},[68,71106,876],{"class":85},[68,71108,71109,71111,71113],{"class":70,"line":9632},[68,71110,56991],{"class":85},[68,71112,126],{"class":81},[68,71114,876],{"class":85},[68,71116,71117,71119,71121],{"class":70,"line":9644},[68,71118,53362],{"class":85},[68,71120,123],{"class":81},[68,71122,876],{"class":85},[68,71124,71125,71127,71129],{"class":70,"line":9656},[68,71126,52932],{"class":85},[68,71128,137],{"class":81},[68,71130,876],{"class":85},[68,71132,71133],{"class":70,"line":11314},[68,71134,71135],{"class":74},"      \u003C!-- \n",[68,71137,71138],{"class":70,"line":11339},[68,71139,71140],{"class":74},"        \u003Ctr>\n",[68,71142,71143],{"class":70,"line":11362},[68,71144,71145],{"class":74},"          \u003Ctd>1001\u003C\u002Ftd>\n",[68,71147,71148],{"class":70,"line":11386},[68,71149,71150],{"class":74},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[68,71152,71153],{"class":70,"line":11391},[68,71154,71155],{"class":74},"          \u003Ctd>19\u003C\u002Ftd>\n",[68,71157,71158],{"class":70,"line":11396},[68,71159,71160],{"class":74},"          \u003Ctd>男\u003C\u002Ftd>\n",[68,71162,71163],{"class":70,"line":11401},[68,71164,71165],{"class":74},"          \u003Ctd>15000\u003C\u002Ftd>\n",[68,71167,71168],{"class":70,"line":11410},[68,71169,71170],{"class":74},"          \u003Ctd>上海\u003C\u002Ftd>\n",[68,71172,71173],{"class":70,"line":11415},[68,71174,71175],{"class":74},"          \u003Ctd>\n",[68,71177,71178],{"class":70,"line":11421},[68,71179,71180],{"class":74},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[68,71182,71183],{"class":70,"line":11442},[68,71184,71185],{"class":74},"          \u003C\u002Ftd>\n",[68,71187,71188],{"class":70,"line":11448},[68,71189,71190],{"class":74},"        \u003C\u002Ftr> \n",[68,71192,71193],{"class":70,"line":11462},[68,71194,71195],{"class":74},"        -->\n",[68,71197,71198,71200,71202],{"class":70,"line":11468},[68,71199,53362],{"class":85},[68,71201,137],{"class":81},[68,71203,876],{"class":85},[68,71205,71206,71208,71210],{"class":70,"line":11495},[68,71207,54002],{"class":85},[68,71209,120],{"class":81},[68,71211,876],{"class":85},[68,71213,71214,71216,71218],{"class":70,"line":11504},[68,71215,53729],{"class":85},[68,71217,53398],{"class":81},[68,71219,876],{"class":85},[68,71221,71222],{"class":70,"line":11510},[68,71223,61542],{"class":74},[68,71225,71226,71228,71231,71233,71235,71237,71239,71242],{"class":70,"line":11518},[68,71227,12819],{"class":102},[68,71229,71230],{"class":92}," uname",[68,71232,15161],{"class":102},[68,71234,55980],{"class":85},[68,71236,55983],{"class":587},[68,71238,997],{"class":85},[68,71240,71241],{"class":872},"'.uname'",[68,71243,1757],{"class":85},[68,71245,71246,71248,71250,71252,71254,71256,71258,71261],{"class":70,"line":11523},[68,71247,12819],{"class":102},[68,71249,17284],{"class":92},[68,71251,15161],{"class":102},[68,71253,55980],{"class":85},[68,71255,55983],{"class":587},[68,71257,997],{"class":85},[68,71259,71260],{"class":872},"'.age'",[68,71262,1757],{"class":85},[68,71264,71265,71267,71270,71272,71274,71276,71278,71281],{"class":70,"line":18199},[68,71266,12819],{"class":102},[68,71268,71269],{"class":92}," gender",[68,71271,15161],{"class":102},[68,71273,55980],{"class":85},[68,71275,55983],{"class":587},[68,71277,997],{"class":85},[68,71279,71280],{"class":872},"'.gender'",[68,71282,1757],{"class":85},[68,71284,71285,71287,71290,71292,71294,71296,71298,71301],{"class":70,"line":18205},[68,71286,12819],{"class":102},[68,71288,71289],{"class":92}," salary",[68,71291,15161],{"class":102},[68,71293,55980],{"class":85},[68,71295,55983],{"class":587},[68,71297,997],{"class":85},[68,71299,71300],{"class":872},"'.salary'",[68,71302,1757],{"class":85},[68,71304,71305,71307,71310,71312,71314,71316,71318,71321],{"class":70,"line":18228},[68,71306,12819],{"class":102},[68,71308,71309],{"class":92}," city",[68,71311,15161],{"class":102},[68,71313,55980],{"class":85},[68,71315,55983],{"class":587},[68,71317,997],{"class":85},[68,71319,71320],{"class":872},"'.city'",[68,71322,1757],{"class":85},[68,71324,71325,71327,71330,71332,71334,71336,71338,71341],{"class":70,"line":18234},[68,71326,12819],{"class":102},[68,71328,71329],{"class":92}," tbody",[68,71331,15161],{"class":102},[68,71333,55980],{"class":85},[68,71335,55983],{"class":587},[68,71337,997],{"class":85},[68,71339,71340],{"class":872},"'tbody'",[68,71342,1757],{"class":85},[68,71344,71345],{"class":70,"line":18257},[68,71346,4000],{"emptyLinePlaceholder":1679},[68,71348,71349],{"class":70,"line":18271},[68,71350,71351],{"class":74},"    \u002F\u002F 获取所有带有name属性的元素\n",[68,71353,71354,71356,71359,71361,71363,71365,71367,71370],{"class":70,"line":18291},[68,71355,12819],{"class":102},[68,71357,71358],{"class":92}," items",[68,71360,15161],{"class":102},[68,71362,55980],{"class":85},[68,71364,57265],{"class":587},[68,71366,997],{"class":85},[68,71368,71369],{"class":872},"'[name]'",[68,71371,1757],{"class":85},[68,71373,71374],{"class":70,"line":18297},[68,71375,71376],{"class":74},"    \u002F\u002F 声明一个空的数组\n",[68,71378,71379,71381,71383,71385],{"class":70,"line":18308},[68,71380,12819],{"class":102},[68,71382,59279],{"class":92},[68,71384,15161],{"class":102},[68,71386,53423],{"class":85},[68,71388,71389],{"class":70,"line":18331},[68,71390,71391],{"class":74},"    \u002F\u002F 1.录入模块\n",[68,71393,71394],{"class":70,"line":18353},[68,71395,71396],{"class":74},"    \u002F\u002F 1.1这是一个表单提交事件\n",[68,71398,71399,71401,71404,71406,71408,71410,71412,71415],{"class":70,"line":18358},[68,71400,12819],{"class":102},[68,71402,71403],{"class":92}," info",[68,71405,15161],{"class":102},[68,71407,55980],{"class":85},[68,71409,55983],{"class":587},[68,71411,997],{"class":85},[68,71413,71414],{"class":872},"'.info'",[68,71416,1757],{"class":85},[68,71418,71419,71422,71424,71426,71429,71431,71433,71435,71437],{"class":70,"line":18364},[68,71420,71421],{"class":85},"    info.",[68,71423,59397],{"class":587},[68,71425,997],{"class":85},[68,71427,71428],{"class":872},"'submit'",[68,71430,1002],{"class":85},[68,71432,56033],{"class":102},[68,71434,3260],{"class":85},[68,71436,1821],{"class":6815},[68,71438,14039],{"class":85},[68,71440,71441],{"class":70,"line":18378},[68,71442,71443],{"class":74},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[68,71445,71446,71449,71452],{"class":70,"line":18391},[68,71447,71448],{"class":85},"      e.",[68,71450,71451],{"class":587},"preventDefault",[68,71453,3577],{"class":85},[68,71455,71456],{"class":70,"line":18396},[68,71457,61596],{"class":74},[68,71459,71460],{"class":70,"line":18410},[68,71461,4000],{"emptyLinePlaceholder":1679},[68,71463,71464],{"class":70,"line":18415},[68,71465,71466],{"class":74},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[68,71468,71469],{"class":70,"line":18421},[68,71470,71471],{"class":74},"      \u002F\u002F 先遍历循环\n",[68,71473,71474,71476,71478,71480,71482,71484,71486,71488,71490,71493,71495,71497,71499],{"class":70,"line":18426},[68,71475,53869],{"class":102},[68,71477,3260],{"class":85},[68,71479,53432],{"class":102},[68,71481,11036],{"class":85},[68,71483,869],{"class":102},[68,71485,5692],{"class":92},[68,71487,11043],{"class":85},[68,71489,861],{"class":102},[68,71491,71492],{"class":85}," items.",[68,71494,53553],{"class":92},[68,71496,4813],{"class":85},[68,71498,3892],{"class":102},[68,71500,14039],{"class":85},[68,71502,71503,71505,71508,71510,71513],{"class":70,"line":18440},[68,71504,4097],{"class":102},[68,71506,71507],{"class":85}," (items[i].value ",[68,71509,56070],{"class":102},[68,71511,71512],{"class":872}," ''",[68,71514,14039],{"class":85},[68,71516,71517,71520,71523,71525,71528],{"class":70,"line":18445},[68,71518,71519],{"class":102},"          return",[68,71521,71522],{"class":587}," alert",[68,71524,997],{"class":85},[68,71526,71527],{"class":872},"'输入内容不能为空'",[68,71529,1757],{"class":85},[68,71531,71532],{"class":70,"line":18450},[68,71533,4129],{"class":85},[68,71535,71536],{"class":70,"line":18464},[68,71537,53983],{"class":85},[68,71539,71540],{"class":70,"line":18476},[68,71541,4000],{"emptyLinePlaceholder":1679},[68,71543,71544],{"class":70,"line":18481},[68,71545,71546],{"class":74},"      \u002F\u002F 创建新的对象\n",[68,71548,71549,71551,71554,71556],{"class":70,"line":18494},[68,71550,59812],{"class":102},[68,71552,71553],{"class":92}," obj",[68,71555,15161],{"class":102},[68,71557,86],{"class":85},[68,71559,71560,71563,71565,71567,71569],{"class":70,"line":18499},[68,71561,71562],{"class":85},"        stuID: arr.",[68,71564,53553],{"class":92},[68,71566,47159],{"class":102},[68,71568,1112],{"class":92},[68,71570,33059],{"class":85},[68,71572,71573],{"class":70,"line":18504},[68,71574,71575],{"class":85},"        uname: uname.value,\n",[68,71577,71578],{"class":70,"line":18509},[68,71579,71580],{"class":85},"        age: age.value,\n",[68,71582,71583],{"class":70,"line":18522},[68,71584,71585],{"class":85},"        gender: gender.value,\n",[68,71587,71588],{"class":70,"line":18527},[68,71589,71590],{"class":85},"        salary: salary.value,\n",[68,71592,71593],{"class":70,"line":34226},[68,71594,71595],{"class":85},"        city: city.value\n",[68,71597,71598],{"class":70,"line":34232},[68,71599,53983],{"class":85},[68,71601,71602],{"class":70,"line":34238},[68,71603,71604],{"class":74},"      \u002F\u002F console.log(obj);\n",[68,71606,71607],{"class":70,"line":34244},[68,71608,71609],{"class":74},"      \u002F\u002F 追加到数组里面\n",[68,71611,71612,71614,71616],{"class":70,"line":34250},[68,71613,59591],{"class":85},[68,71615,53469],{"class":587},[68,71617,71618],{"class":85},"(obj)\n",[68,71620,71621],{"class":70,"line":34261},[68,71622,71623],{"class":74},"      \u002F\u002F console.log(arr);\n",[68,71625,71626],{"class":70,"line":34267},[68,71627,71628],{"class":74},"      \u002F\u002F 清空表单  reset重置表单\n",[68,71630,71631,71634,71636,71639],{"class":70,"line":34287},[68,71632,71633],{"class":92},"      this",[68,71635,2294],{"class":85},[68,71637,71638],{"class":587},"reset",[68,71640,3577],{"class":85},[68,71642,71643],{"class":70,"line":34293},[68,71644,71645],{"class":74},"      \u002F\u002F 调用渲染函数\n",[68,71647,71648,71651],{"class":70,"line":34304},[68,71649,71650],{"class":587},"      render",[68,71652,3577],{"class":85},[68,71654,71655],{"class":70,"line":34310},[68,71656,35054],{"class":85},[68,71658,71659],{"class":70,"line":34316},[68,71660,71661],{"class":74},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[68,71663,71664,71667,71670],{"class":70,"line":34322},[68,71665,71666],{"class":102},"    function",[68,71668,71669],{"class":587}," render",[68,71671,12451],{"class":85},[68,71673,71674],{"class":70,"line":34328},[68,71675,71676],{"class":74},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[68,71678,71679,71682,71684],{"class":70,"line":34334},[68,71680,71681],{"class":85},"      tbody.innerHTML ",[68,71683,869],{"class":102},[68,71685,71686],{"class":872}," ''\n",[68,71688,71689],{"class":70,"line":34340},[68,71690,71691],{"class":74},"      \u002F\u002F 遍历数组\n",[68,71693,71694,71696,71698,71700,71702,71704,71706,71708,71710,71712,71714,71716,71718],{"class":70,"line":34346},[68,71695,53869],{"class":102},[68,71697,3260],{"class":85},[68,71699,53432],{"class":102},[68,71701,11036],{"class":85},[68,71703,869],{"class":102},[68,71705,5692],{"class":92},[68,71707,11043],{"class":85},[68,71709,861],{"class":102},[68,71711,53550],{"class":85},[68,71713,53553],{"class":92},[68,71715,4813],{"class":85},[68,71717,3892],{"class":102},[68,71719,14039],{"class":85},[68,71721,71722,71724,71727,71729,71731,71734,71736,71739],{"class":70,"line":34366},[68,71723,62854],{"class":102},[68,71725,71726],{"class":92}," tr",[68,71728,15161],{"class":102},[68,71730,55980],{"class":85},[68,71732,71733],{"class":587},"createElement",[68,71735,997],{"class":85},[68,71737,71738],{"class":872},"'tr'",[68,71740,1757],{"class":85},[68,71742,71743,71746,71748],{"class":70,"line":34372},[68,71744,71745],{"class":85},"        tr.innerHTML ",[68,71747,869],{"class":102},[68,71749,71750],{"class":872}," `\n",[68,71752,71753,71756,71758,71760,71762,71765,71768],{"class":70,"line":34388},[68,71754,71755],{"class":872},"        \u003Ctd>${",[68,71757,5479],{"class":85},[68,71759,2626],{"class":872},[68,71761,2177],{"class":85},[68,71763,71764],{"class":872},"].",[68,71766,71767],{"class":85},"stuID",[68,71769,71770],{"class":872},"}\u003C\u002Ftd>\n",[68,71772,71773,71776,71778,71780,71782,71784,71787],{"class":70,"line":34394},[68,71774,71775],{"class":872},"          \u003Ctd>${",[68,71777,5479],{"class":85},[68,71779,2626],{"class":872},[68,71781,2177],{"class":85},[68,71783,71764],{"class":872},[68,71785,71786],{"class":85},"uname",[68,71788,71770],{"class":872},[68,71790,71791,71793,71795,71797,71799,71801,71804],{"class":70,"line":34408},[68,71792,71775],{"class":872},[68,71794,5479],{"class":85},[68,71796,2626],{"class":872},[68,71798,2177],{"class":85},[68,71800,71764],{"class":872},[68,71802,71803],{"class":85},"age",[68,71805,71770],{"class":872},[68,71807,71808,71810,71812,71814,71816,71818,71821],{"class":70,"line":34414},[68,71809,71775],{"class":872},[68,71811,5479],{"class":85},[68,71813,2626],{"class":872},[68,71815,2177],{"class":85},[68,71817,71764],{"class":872},[68,71819,71820],{"class":85},"gender",[68,71822,71770],{"class":872},[68,71824,71825,71827,71829,71831,71833,71835,71838],{"class":70,"line":34429},[68,71826,71775],{"class":872},[68,71828,5479],{"class":85},[68,71830,2626],{"class":872},[68,71832,2177],{"class":85},[68,71834,71764],{"class":872},[68,71836,71837],{"class":85},"salary",[68,71839,71770],{"class":872},[68,71841,71842,71844,71846,71848,71850,71852,71855],{"class":70,"line":34435},[68,71843,71775],{"class":872},[68,71845,5479],{"class":85},[68,71847,2626],{"class":872},[68,71849,2177],{"class":85},[68,71851,71764],{"class":872},[68,71853,71854],{"class":85},"city",[68,71856,71770],{"class":872},[68,71858,71859],{"class":70,"line":34444},[68,71860,71175],{"class":872},[68,71862,71863,71866,71868],{"class":70,"line":34450},[68,71864,71865],{"class":872},"            \u003Ca href=\"javascript:\" data-id=${",[68,71867,2177],{"class":85},[68,71869,71870],{"class":872},"}>删除\u003C\u002Fa>\n",[68,71872,71873],{"class":70,"line":34459},[68,71874,71875],{"class":872},"          \u003C\u002Ftd> \n",[68,71877,71878],{"class":70,"line":34465},[68,71879,71880],{"class":872},"          `\n",[68,71882,71883],{"class":70,"line":34471},[68,71884,71885],{"class":74},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[68,71887,71888,71891,71894],{"class":70,"line":34480},[68,71889,71890],{"class":85},"        tbody.",[68,71892,71893],{"class":587},"appendChild",[68,71895,71896],{"class":85},"(tr)\n",[68,71898,71899],{"class":70,"line":34486},[68,71900,53983],{"class":85},[68,71902,71903],{"class":70,"line":34497},[68,71904,3787],{"class":85},[68,71906,71907],{"class":70,"line":34503},[68,71908,4000],{"emptyLinePlaceholder":1679},[68,71910,71911],{"class":70,"line":34522},[68,71912,71913],{"class":74},"    \u002F\u002F 3.删除委托\n",[68,71915,71916],{"class":70,"line":34528},[68,71917,71918],{"class":74},"    \u002F\u002F 3.1 事件委托 tbody\n",[68,71920,71921,71924,71926,71928,71930,71932,71934,71936,71938],{"class":70,"line":34539},[68,71922,71923],{"class":85},"    tbody.",[68,71925,59397],{"class":587},[68,71927,997],{"class":85},[68,71929,59402],{"class":872},[68,71931,1002],{"class":85},[68,71933,56033],{"class":102},[68,71935,3260],{"class":85},[68,71937,1821],{"class":6815},[68,71939,14039],{"class":85},[68,71941,71942,71944,71946,71948,71950],{"class":70,"line":34545},[68,71943,56064],{"class":102},[68,71945,68616],{"class":85},[68,71947,56070],{"class":102},[68,71949,69838],{"class":872},[68,71951,14039],{"class":85},[68,71953,71954],{"class":70,"line":34565},[68,71955,71956],{"class":74},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[68,71958,71959],{"class":70,"line":34581},[68,71960,71961],{"class":74},"        \u002F\u002F console.log(e.target.dataset.id);\n",[68,71963,71964],{"class":70,"line":34587},[68,71965,71966],{"class":74},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[68,71968,71969,71972,71974,71977,71979],{"class":70,"line":34601},[68,71970,71971],{"class":85},"        arr.",[68,71973,59594],{"class":587},[68,71975,71976],{"class":85},"(e.target.dataset.id, ",[68,71978,99],{"class":92},[68,71980,1757],{"class":85},[68,71982,71983],{"class":70,"line":34607},[68,71984,71985],{"class":74},"        \u002F\u002F 重新渲染一次\n",[68,71987,71988,71991],{"class":70,"line":34613},[68,71989,71990],{"class":587},"        render",[68,71992,3577],{"class":85},[68,71994,71995],{"class":70,"line":34624},[68,71996,53983],{"class":85},[68,71998,71999],{"class":70,"line":34630},[68,72000,35054],{"class":85},[68,72002,72003,72005,72007],{"class":70,"line":34636},[68,72004,54002],{"class":85},[68,72006,53398],{"class":81},[68,72008,876],{"class":85},[68,72010,72011],{"class":70,"line":34646},[68,72012,4000],{"emptyLinePlaceholder":1679},[68,72014,72015,72017,72019],{"class":70,"line":34652},[68,72016,886],{"class":85},[68,72018,53385],{"class":81},[68,72020,876],{"class":85},[68,72022,72023],{"class":70,"line":34663},[68,72024,4000],{"emptyLinePlaceholder":1679},[68,72026,72027,72029,72031],{"class":70,"line":34669},[68,72028,886],{"class":85},[68,72030,52228],{"class":81},[68,72032,876],{"class":85},[19,72034,72035],{},"样式：",[58,72037,72041],{"className":72038,"code":72039,"language":72040,"meta":63,"style":63},"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",[65,72042,72043,72048,72057,72066,72070,72074,72079,72089,72094,72098,72103,72113,72118,72127,72131,72135,72140,72145,72155,72164,72169,72173,72178,72187,72197,72202,72212,72222,72226,72231,72239,72243,72248,72253,72258,72266,72275,72279,72284,72293,72297,72302,72311,72315,72320,72329,72338,72346,72350,72355,72364,72374,72383,72393,72399,72408,72418,72428,72432,72437,72446,72454,72464,72472,72480,72489,72499,72507,72511,72516,72525],{"__ignoreMap":63},[68,72044,72045],{"class":70,"line":71},[68,72046,72047],{"class":85},"* {\n",[68,72049,72050,72052,72054],{"class":70,"line":78},[68,72051,595],{"class":81},[68,72053,96],{"class":85},[68,72055,72056],{"class":872},"0;\n",[68,72058,72059,72062,72064],{"class":70,"line":89},[68,72060,72061],{"class":872},"  padding",[68,72063,96],{"class":85},[68,72065,72056],{"class":872},[68,72067,72068],{"class":70,"line":115},[68,72069,118],{"class":85},[68,72071,72072],{"class":70,"line":280},[68,72073,4000],{"emptyLinePlaceholder":1679},[68,72075,72076],{"class":70,"line":301},[68,72077,72078],{"class":872},"a {\n",[68,72080,72081,72084,72086],{"class":70,"line":320},[68,72082,72083],{"class":81},"  text-decoration",[68,72085,96],{"class":85},[68,72087,72088],{"class":872},"none;\n",[68,72090,72091],{"class":70,"line":2915},[68,72092,72093],{"class":872},"  color:#721c24;\n",[68,72095,72096],{"class":70,"line":2921},[68,72097,118],{"class":85},[68,72099,72100],{"class":70,"line":2933},[68,72101,72102],{"class":872},"h1 {\n",[68,72104,72105,72108,72110],{"class":70,"line":3214},[68,72106,72107],{"class":81},"  text-align",[68,72109,96],{"class":85},[68,72111,72112],{"class":872},"center;\n",[68,72114,72115],{"class":70,"line":3219},[68,72116,72117],{"class":872},"  color:#333;\n",[68,72119,72120,72122,72124],{"class":70,"line":3225},[68,72121,595],{"class":81},[68,72123,96],{"class":85},[68,72125,72126],{"class":872},"20px 0;\n",[68,72128,72129],{"class":70,"line":3230},[68,72130,4274],{"class":85},[68,72132,72133],{"class":70,"line":3244},[68,72134,118],{"class":85},[68,72136,72137],{"class":70,"line":3249},[68,72138,72139],{"class":872},"table {\n",[68,72141,72142],{"class":70,"line":3255},[68,72143,72144],{"class":872},"  margin:0 auto;\n",[68,72146,72147,72150,72152],{"class":70,"line":3276},[68,72148,72149],{"class":81},"  width",[68,72151,96],{"class":85},[68,72153,72154],{"class":872},"800px;\n",[68,72156,72157,72159,72161],{"class":70,"line":3281},[68,72158,351],{"class":81},[68,72160,96],{"class":85},[68,72162,72163],{"class":872},"collapse;\n",[68,72165,72166],{"class":70,"line":3295},[68,72167,72168],{"class":872},"  color:#004085;\n",[68,72170,72171],{"class":70,"line":3300},[68,72172,118],{"class":85},[68,72174,72175],{"class":70,"line":3329},[68,72176,72177],{"class":872},"th {\n",[68,72179,72180,72182,72184],{"class":70,"line":3334},[68,72181,72061],{"class":81},[68,72183,96],{"class":85},[68,72185,72186],{"class":872},"10px;\n",[68,72188,72189,72192,72194],{"class":70,"line":3351},[68,72190,72191],{"class":81},"  background",[68,72193,96],{"class":85},[68,72195,72196],{"class":74},"#cfe5ff;\n",[68,72198,72199],{"class":70,"line":3356},[68,72200,72201],{"class":85},"  \n",[68,72203,72204,72207,72209],{"class":70,"line":3361},[68,72205,72206],{"class":81},"  font-size",[68,72208,96],{"class":85},[68,72210,72211],{"class":872},"20px;\n",[68,72213,72214,72217,72219],{"class":70,"line":3366},[68,72215,72216],{"class":81},"  font-weight",[68,72218,96],{"class":85},[68,72220,72221],{"class":872},"400;\n",[68,72223,72224],{"class":70,"line":3380},[68,72225,118],{"class":85},[68,72227,72228],{"class":70,"line":3385},[68,72229,72230],{"class":872},"td,th {\n",[68,72232,72233,72236],{"class":70,"line":4177},[68,72234,72235],{"class":872},"  border:1px solid",[68,72237,72238],{"class":74}," #b8daff;\n",[68,72240,72241],{"class":70,"line":4191},[68,72242,118],{"class":85},[68,72244,72245],{"class":70,"line":4199},[68,72246,72247],{"class":872},"td {\n",[68,72249,72250],{"class":70,"line":4204},[68,72251,72252],{"class":872},"  padding:10px;\n",[68,72254,72255],{"class":70,"line":4210},[68,72256,72257],{"class":872},"  color:#666;\n",[68,72259,72260,72262,72264],{"class":70,"line":4216},[68,72261,72107],{"class":81},[68,72263,96],{"class":85},[68,72265,72112],{"class":872},[68,72267,72268,72270,72272],{"class":70,"line":4221},[68,72269,72206],{"class":81},[68,72271,96],{"class":85},[68,72273,72274],{"class":872},"16px;\n",[68,72276,72277],{"class":70,"line":9547},[68,72278,118],{"class":85},[68,72280,72281],{"class":70,"line":9571},[68,72282,72283],{"class":872},"tbody tr {\n",[68,72285,72286,72288,72290],{"class":70,"line":9576},[68,72287,72191],{"class":81},[68,72289,96],{"class":85},[68,72291,72292],{"class":74},"#fff;\n",[68,72294,72295],{"class":70,"line":9582},[68,72296,118],{"class":85},[68,72298,72299],{"class":70,"line":9609},[68,72300,72301],{"class":872},"tbody tr:hover {\n",[68,72303,72304,72306,72308],{"class":70,"line":9614},[68,72305,72191],{"class":81},[68,72307,96],{"class":85},[68,72309,72310],{"class":74},"#e1ecf8;\n",[68,72312,72313],{"class":70,"line":9620},[68,72314,118],{"class":85},[68,72316,72317],{"class":70,"line":9632},[68,72318,72319],{"class":872},".info {\n",[68,72321,72322,72324,72326],{"class":70,"line":9644},[68,72323,72149],{"class":81},[68,72325,96],{"class":85},[68,72327,72328],{"class":872},"900px;\n",[68,72330,72331,72333,72335],{"class":70,"line":9656},[68,72332,595],{"class":81},[68,72334,96],{"class":85},[68,72336,72337],{"class":872},"50px auto;\n",[68,72339,72340,72342,72344],{"class":70,"line":11314},[68,72341,72107],{"class":81},[68,72343,96],{"class":85},[68,72345,72112],{"class":872},[68,72347,72348],{"class":70,"line":11339},[68,72349,118],{"class":85},[68,72351,72352],{"class":70,"line":11362},[68,72353,72354],{"class":872},".info  input, .info select {\n",[68,72356,72357,72359,72361],{"class":70,"line":11386},[68,72358,72149],{"class":81},[68,72360,96],{"class":85},[68,72362,72363],{"class":872},"80px;\n",[68,72365,72366,72369,72371],{"class":70,"line":11391},[68,72367,72368],{"class":81},"  height",[68,72370,96],{"class":85},[68,72372,72373],{"class":872},"27px;\n",[68,72375,72376,72379,72381],{"class":70,"line":11396},[68,72377,72378],{"class":81},"  outline",[68,72380,96],{"class":85},[68,72382,72088],{"class":872},[68,72384,72385,72388,72390],{"class":70,"line":11401},[68,72386,72387],{"class":81},"  border-radius",[68,72389,96],{"class":85},[68,72391,72392],{"class":872},"5px;\n",[68,72394,72395,72397],{"class":70,"line":11410},[68,72396,72235],{"class":872},[68,72398,72238],{"class":74},[68,72400,72401,72404,72406],{"class":70,"line":11415},[68,72402,72403],{"class":81},"  padding-left",[68,72405,96],{"class":85},[68,72407,72392],{"class":872},[68,72409,72410,72413,72415],{"class":70,"line":11421},[68,72411,72412],{"class":81},"  box-sizing",[68,72414,96],{"class":85},[68,72416,72417],{"class":872},"border-box;\n",[68,72419,72420,72423,72425],{"class":70,"line":11442},[68,72421,72422],{"class":81},"  margin-right",[68,72424,96],{"class":85},[68,72426,72427],{"class":872},"15px;\n",[68,72429,72430],{"class":70,"line":11448},[68,72431,118],{"class":85},[68,72433,72434],{"class":70,"line":11462},[68,72435,72436],{"class":872},".info button {\n",[68,72438,72439,72441,72443],{"class":70,"line":11468},[68,72440,72149],{"class":81},[68,72442,96],{"class":85},[68,72444,72445],{"class":872},"60px;\n",[68,72447,72448,72450,72452],{"class":70,"line":11495},[68,72449,72368],{"class":81},[68,72451,96],{"class":85},[68,72453,72373],{"class":872},[68,72455,72456,72459,72461],{"class":70,"line":11504},[68,72457,72458],{"class":81},"  background-color",[68,72460,96],{"class":85},[68,72462,72463],{"class":74},"#004085;\n",[68,72465,72466,72468,72470],{"class":70,"line":11510},[68,72467,72378],{"class":81},[68,72469,96],{"class":85},[68,72471,72088],{"class":872},[68,72473,72474,72476,72478],{"class":70,"line":11518},[68,72475,93],{"class":81},[68,72477,96],{"class":85},[68,72479,72056],{"class":872},[68,72481,72482,72485,72487],{"class":70,"line":11523},[68,72483,72484],{"class":81},"  color",[68,72486,96],{"class":85},[68,72488,72292],{"class":74},[68,72490,72491,72494,72496],{"class":70,"line":18199},[68,72492,72493],{"class":81},"  cursor",[68,72495,96],{"class":85},[68,72497,72498],{"class":872},"pointer;\n",[68,72500,72501,72503,72505],{"class":70,"line":18205},[68,72502,72387],{"class":81},[68,72504,96],{"class":85},[68,72506,72392],{"class":872},[68,72508,72509],{"class":70,"line":18228},[68,72510,118],{"class":85},[68,72512,72513],{"class":70,"line":18234},[68,72514,72515],{"class":872},".info .age {\n",[68,72517,72518,72520,72522],{"class":70,"line":18257},[68,72519,72149],{"class":81},[68,72521,96],{"class":85},[68,72523,72524],{"class":872},"50px;\n",[68,72526,72527],{"class":70,"line":18271},[68,72528,118],{"class":85},[19,72530,72531],{},"思路：",[19,72533,72534],{},[38,72535],{"alt":63,"src":72536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72538,72539],{},[38,72540],{"alt":63,"src":72541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72543,72544],{},[38,72545],{"alt":63,"src":72546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[43,72548,72550],{"id":72549},"_3315-重绘回流","3.3.15 重绘回流",[19,72552,72553],{},[38,72554],{"alt":63,"src":72555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72557,72558],{},[38,72559],{"alt":63,"src":72560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72562,72563],{},[38,72564],{"alt":63,"src":72565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72567,72569],{"id":72568},"_34-bom","3.4 BOM",[19,72571,72572],{},[38,72573],{"alt":63,"src":72574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72576,72577],{},"平时写的document省略了window而已，实际上是window.document",[19,72579,72580],{},"函数也是这样，调用的时候实际为window.fn()",[19,72582,72583],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72585,72586],{},"window大部分情况下可以省略",[43,72588,72590],{"id":72589},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72592,72593],{},"只执行一次",[19,72595,72596],{},[38,72597],{"alt":63,"src":72598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72600,72601],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72603,72604],{},[38,72605],{"alt":63,"src":72606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[43,72608,72610],{"id":72609},"_342-js执行机制","3.4.2 JS执行机制",[19,72612,72613],{},[38,72614],{"alt":63,"src":72615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72617,72618],{},"两个的结果都是1111 3333 2222",[19,72620,72621],{},[38,72622],{"alt":63,"src":72623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72625,72626],{},[38,72627],{"alt":63,"src":72628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72630,72631],{},[38,72632],{"alt":63,"src":72633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72635,72636],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72638,72639],{},"工作流程：",[19,72641,72642],{},[38,72643],{"alt":63,"src":72644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72646,72647],{},[38,72648],{"alt":63,"src":72649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72651,72652],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72654,72655],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[43,72657,72659],{"id":72658},"_343-location对象","3.4.3 location对象",[19,72661,72662],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72664,72665],{},[38,72666],{"alt":63,"src":72667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72669,72670],{},"href可以跳转页面",[48,72672,72673],{},[51,72674,72675],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72677,72678],{},"search得到提交信息之后网站后边的地址",[19,72680,72681],{},[38,72682],{"alt":63,"src":72683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72685,72686],{},[38,72687],{"alt":63,"src":72688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[48,72690,72691],{"start":78},[51,72692,72693],{},"hash:这个获取单页面应用#后边的地址",[19,72695,72696],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72698,72699],{},[38,72700],{"alt":63,"src":72701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[58,72703,72705],{"className":54652,"code":72704,"language":54654,"meta":63,"style":63},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[65,72706,72707,72727,72747],{"__ignoreMap":63},[68,72708,72709,72711,72713,72715,72717,72720,72723,72725],{"class":70,"line":71},[68,72710,53729],{"class":85},[68,72712,1974],{"class":81},[68,72714,62641],{"class":587},[68,72716,869],{"class":85},[68,72718,72719],{"class":872},"\"#\u002Fmy\"",[68,72721,72722],{"class":85},">我的\u003C\u002F",[68,72724,1974],{"class":81},[68,72726,876],{"class":85},[68,72728,72729,72731,72733,72735,72737,72740,72743,72745],{"class":70,"line":78},[68,72730,53729],{"class":85},[68,72732,1974],{"class":81},[68,72734,62641],{"class":587},[68,72736,869],{"class":85},[68,72738,72739],{"class":872},"\"#\u002Ffriend\"",[68,72741,72742],{"class":85},">关注\u003C\u002F",[68,72744,1974],{"class":81},[68,72746,876],{"class":85},[68,72748,72749,72751,72753,72755,72757,72760,72763,72765],{"class":70,"line":89},[68,72750,53729],{"class":85},[68,72752,1974],{"class":81},[68,72754,62641],{"class":587},[68,72756,869],{"class":85},[68,72758,72759],{"class":872},"\"#\u002Fdownload\"",[68,72761,72762],{"class":85},">下载\u003C\u002F",[68,72764,1974],{"class":81},[68,72766,876],{"class":85},[19,72768,72769],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[48,72771,72772],{"start":89},[51,72773,72774,72775,72777,72778,72780],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55300,72776],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55300,72779],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[43,72782,72784],{"id":72783},"_345-navigator对象","3.4.5 navigator对象",[19,72786,72787],{},[38,72788],{"alt":63,"src":72789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[58,72791,72795],{"className":72792,"code":72793,"language":72794,"meta":63,"style":63},"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",[65,72796,72797,72802,72813,72825,72830,72881,72922,72927,72940,72952,72957],{"__ignoreMap":63},[68,72798,72799],{"class":70,"line":71},[68,72800,72801],{"class":74},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[68,72803,72804,72806,72808,72810],{"class":70,"line":78},[68,72805,1962],{"class":102},[68,72807,997],{"class":85},[68,72809,56033],{"class":102},[68,72811,72812],{"class":85}," () { \n",[68,72814,72815,72817,72820,72822],{"class":70,"line":89},[68,72816,8391],{"class":102},[68,72818,72819],{"class":92}," userAgent",[68,72821,15161],{"class":102},[68,72823,72824],{"class":85}," navigator.userAgent \n",[68,72826,72827],{"class":70,"line":115},[68,72828,72829],{"class":74},"\u002F\u002F 验证是否为Android或iPhone \n",[68,72831,72832,72834,72837,72839,72842,72845,72847,72849,72852,72854,72857,72861,72863,72865,72867,72870,72872,72874,72876,72878],{"class":70,"line":280},[68,72833,8391],{"class":102},[68,72835,72836],{"class":92}," android",[68,72838,15161],{"class":102},[68,72840,72841],{"class":85}," userAgent.",[68,72843,72844],{"class":587},"match",[68,72846,997],{"class":85},[68,72848,2320],{"class":872},[68,72850,72851],{"class":49570},"(Android);",[68,72853,2721],{"class":102},[68,72855,72856],{"class":92},"[\\s",[68,72858,72860],{"class":72859},"snhLl","\\\u002F",[68,72862,2675],{"class":92},[68,72864,2217],{"class":102},[68,72866,997],{"class":49570},[68,72868,72869],{"class":92},"[\\d.]",[68,72871,2217],{"class":102},[68,72873,2165],{"class":49570},[68,72875,2721],{"class":102},[68,72877,2320],{"class":872},[68,72879,72880],{"class":85},") \n",[68,72882,72883,72885,72888,72890,72892,72894,72896,72898,72901,72904,72907,72909,72911,72914,72916,72918,72920],{"class":70,"line":301},[68,72884,8391],{"class":102},[68,72886,72887],{"class":92}," iphone",[68,72889,15161],{"class":102},[68,72891,72841],{"class":85},[68,72893,72844],{"class":587},[68,72895,997],{"class":85},[68,72897,2320],{"class":872},[68,72899,72900],{"class":49570},"(iPhone",[68,72902,72903],{"class":92},"\\s",[68,72905,72906],{"class":49570},"OS)",[68,72908,72903],{"class":92},[68,72910,997],{"class":49570},[68,72912,72913],{"class":92},"[\\d_]",[68,72915,2217],{"class":102},[68,72917,2165],{"class":49570},[68,72919,2320],{"class":872},[68,72921,72880],{"class":85},[68,72923,72924],{"class":70,"line":320},[68,72925,72926],{"class":74},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[68,72928,72929,72931,72934,72937],{"class":70,"line":2915},[68,72930,3134],{"class":102},[68,72932,72933],{"class":85}," (android ",[68,72935,72936],{"class":102},"||",[68,72938,72939],{"class":85}," iphone) { \n",[68,72941,72942,72945,72947,72950],{"class":70,"line":2921},[68,72943,72944],{"class":85},"location.href ",[68,72946,869],{"class":102},[68,72948,72949],{"class":872}," 'http:\u002F\u002Fm.itcast.cn'",[68,72951,4274],{"class":85},[68,72953,72954],{"class":70,"line":2933},[68,72955,72956],{"class":85},"} \n",[68,72958,72959],{"class":70,"line":3214},[68,72960,72961],{"class":85},"})()\n",[43,72963,72965],{"id":72964},"_346-histroy对象","3.4.6 histroy对象",[19,72967,72968],{},[38,72969],{"alt":63,"src":72970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72972,72973],{},"浏览器地址的前进与后退!!!",[19,72975,72976],{},"history.back() 等效于 history.go(-1)",[19,72978,72979],{},"history.forward() 等效于 history.go(1)",[14,72981,72983],{"id":72982},"_35-本地存储","3.5 本地存储",[48,72985,72986,72989,72992],{},[51,72987,72988],{},"数据存储在用户浏览器中",[51,72990,72991],{},"设置、读取方便、甚至页面刷新不丢失数据",[51,72993,72994],{},"容量较大，sessionStorage和localStorage约 5M 左右",[43,72996,72998],{"id":72997},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73000,73001],{},"只能存储字符串",[19,73003,73004],{},[38,73005],{"alt":63,"src":73006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73008,73009],{},[38,73010],{"alt":63,"src":73011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73013,73014],{},"键值对要加引号,不然就会当变量来看了",[19,73016,73017],{},"localStorage.setItem('uname', 'pink')",[19,73019,73020],{},"刷新之后信息不再丢失",[19,73022,73023],{},"操作key,value会跟着变",[19,73025,73026],{},"删除只删除键就可以,即名字",[19,73028,73017],{},[19,73030,73031],{},"改:",[19,73033,73034],{},"localStorage.setItem('uname','red')",[19,73036,73037],{},"有这个键就是改,没有这个键就是改",[19,73039,73040],{},[38,73041],{"alt":63,"src":73042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73044,73045],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73047,73048],{},[38,73049],{"alt":63,"src":73050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73052,73053],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[43,73055,73057],{"id":73056},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73059,73060],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73062,73063],{},"特性:",[48,73065,73066,73069,73072,73075],{},[51,73067,73068],{},"生命周期为关闭浏览器窗口",[51,73070,73071],{},"在同一个窗口(页面)下数据可以共享",[51,73073,73074],{},"以键值对的形式存储使用",[51,73076,73077],{},"用法跟localStorage 基本相同",[43,73079,73081],{"id":73080},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73083,73084],{},"本地只能存储字符串,无法直接存储复杂数据类型",[58,73086,73088],{"className":54652,"code":73087,"language":54654,"meta":63,"style":63},"\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",[65,73089,73090,73098,73103,73108,73113,73118,73122,73127,73132],{"__ignoreMap":63},[68,73091,73092,73094,73096],{"class":70,"line":71},[68,73093,861],{"class":85},[68,73095,53398],{"class":81},[68,73097,876],{"class":85},[68,73099,73100],{"class":70,"line":78},[68,73101,73102],{"class":85},"    const obj = {\n",[68,73104,73105],{"class":70,"line":89},[68,73106,73107],{"class":85},"      uname: 'pink老师',\n",[68,73109,73110],{"class":70,"line":115},[68,73111,73112],{"class":85},"      age: 18,\n",[68,73114,73115],{"class":70,"line":280},[68,73116,73117],{"class":85},"      gender: '女'\n",[68,73119,73120],{"class":70,"line":301},[68,73121,3787],{"class":85},[68,73123,73124],{"class":70,"line":320},[68,73125,73126],{"class":85},"    \u002F\u002F 存储复杂数据类型\n",[68,73128,73129],{"class":70,"line":2915},[68,73130,73131],{"class":85},"    localStorage.setItem('obj', obj)\n",[68,73133,73134,73136,73138],{"class":70,"line":2921},[68,73135,54002],{"class":85},[68,73137,53398],{"class":81},[68,73139,876],{"class":85},[19,73141,73142],{},[38,73143],{"alt":63,"src":73144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73146,73147],{},"如果获取一下数据:",[19,73149,73150],{},"log(localStorage.getItem('obj'))",[19,73152,73153],{},[38,73154],{"alt":63,"src":73155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73157,73158],{},"发现直接存对象是使用不了的!!!",[23593,73160,73162],{"id":73161},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73164,73165],{},[38,73166],{"alt":63,"src":73167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[58,73169,73171],{"className":52226,"code":73170,"language":52228,"meta":63,"style":63},"\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",[65,73172,73173,73181,73191,73201,73210,73218,73222,73226,73252,73271,73279,73283,73288,73293],{"__ignoreMap":63},[68,73174,73175,73177,73179],{"class":70,"line":71},[68,73176,861],{"class":85},[68,73178,53398],{"class":81},[68,73180,876],{"class":85},[68,73182,73183,73185,73187,73189],{"class":70,"line":78},[68,73184,12819],{"class":102},[68,73186,71553],{"class":92},[68,73188,15161],{"class":102},[68,73190,86],{"class":85},[68,73192,73193,73196,73199],{"class":70,"line":89},[68,73194,73195],{"class":85},"      uname: ",[68,73197,73198],{"class":872},"'pink老师'",[68,73200,33059],{"class":85},[68,73202,73203,73206,73208],{"class":70,"line":115},[68,73204,73205],{"class":85},"      age: ",[68,73207,2386],{"class":92},[68,73209,33059],{"class":85},[68,73211,73212,73215],{"class":70,"line":280},[68,73213,73214],{"class":85},"      gender: ",[68,73216,73217],{"class":872},"'女'\n",[68,73219,73220],{"class":70,"line":301},[68,73221,3787],{"class":85},[68,73223,73224],{"class":70,"line":320},[68,73225,73126],{"class":74},[68,73227,73228,73231,73234,73236,73239,73241,73244,73246,73249],{"class":70,"line":2915},[68,73229,73230],{"class":85},"  localStorage.",[68,73232,73233],{"class":587},"setItem",[68,73235,997],{"class":85},[68,73237,73238],{"class":872},"'obj'",[68,73240,1002],{"class":85},[68,73242,73243],{"class":92},"JSON",[68,73245,2294],{"class":85},[68,73247,73248],{"class":587},"stringify",[68,73250,73251],{"class":85},"(obj))\n",[68,73253,73254,73257,73259,73262,73265,73267,73269],{"class":70,"line":2921},[68,73255,73256],{"class":85},"  console.",[68,73258,59831],{"class":587},[68,73260,73261],{"class":85},"(localStorage.",[68,73263,73264],{"class":587},"getItem",[68,73266,997],{"class":85},[68,73268,73238],{"class":872},[68,73270,32090],{"class":85},[68,73272,73273,73275,73277],{"class":70,"line":2933},[68,73274,54002],{"class":85},[68,73276,53398],{"class":81},[68,73278,876],{"class":85},[68,73280,73281],{"class":70,"line":3214},[68,73282,72201],{"class":85},[68,73284,73285],{"class":70,"line":3219},[68,73286,73287],{"class":85},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[68,73289,73290],{"class":70,"line":3225},[68,73291,73292],{"class":85},"  类型是字符串的\n",[68,73294,73295],{"class":70,"line":3230},[68,73296,73297],{"class":85},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23593,73299,73301],{"id":73300},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73303,73304],{},[38,73305],{"alt":63,"src":73306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73308,73309],{},[38,73310],{"alt":63,"src":73311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[58,73313,73315],{"className":54652,"code":73314,"language":54654,"meta":63,"style":63},"  \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",[65,73316,73317,73325,73329,73333,73337,73341,73345,73350,73355,73360,73365,73370,73375,73380,73385],{"__ignoreMap":63},[68,73318,73319,73321,73323],{"class":70,"line":71},[68,73320,53729],{"class":85},[68,73322,53398],{"class":81},[68,73324,876],{"class":85},[68,73326,73327],{"class":70,"line":78},[68,73328,73102],{"class":85},[68,73330,73331],{"class":70,"line":89},[68,73332,73107],{"class":85},[68,73334,73335],{"class":70,"line":115},[68,73336,73112],{"class":85},[68,73338,73339],{"class":70,"line":280},[68,73340,73117],{"class":85},[68,73342,73343],{"class":70,"line":301},[68,73344,3787],{"class":85},[68,73346,73347],{"class":70,"line":320},[68,73348,73349],{"class":85},"    \u002F\u002F 1.存储复杂数据类型\n",[68,73351,73352],{"class":70,"line":2915},[68,73353,73354],{"class":85},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[68,73356,73357],{"class":70,"line":2921},[68,73358,73359],{"class":85},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[68,73361,73362],{"class":70,"line":2933},[68,73363,73364],{"class":85},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[68,73366,73367],{"class":70,"line":3214},[68,73368,73369],{"class":85},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[68,73371,73372],{"class":70,"line":3219},[68,73373,73374],{"class":85},"    \u002F\u002F 取\n",[68,73376,73377],{"class":70,"line":3225},[68,73378,73379],{"class":85},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[68,73381,73382],{"class":70,"line":3230},[68,73383,73384],{"class":85},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[68,73386,73387,73389,73391],{"class":70,"line":3244},[68,73388,54002],{"class":85},[68,73390,53398],{"class":81},[68,73392,876],{"class":85},[19,73394,73395],{},[38,73396],{"alt":63,"src":73397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[43,73399,73401],{"id":73400},"_356-数组map方法","3.5.6 数组map方法",[19,73403,73404],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73406,73407],{},[38,73408],{"alt":63,"src":73409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73411,73412],{},[38,73413],{"alt":63,"src":73414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73416,73417,73420],{},[1890,73418,73419],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73422,73423],{},"map有返回值，但是forEach没有返回值",[19,73425,73426],{},"map是个方法。用的时候要加 ()",[19,73428,73429],{},"map返回的是一个数组",[43,73431,73433],{"id":73432},"_357-数组中join方法","3.5.7 数组中join方法",[19,73435,73436],{},[38,73437],{"alt":63,"src":73438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73440,73441],{},"类似于python中拼接字符串一样！",[48,73443,73444,73447,73450],{},[51,73445,73446],{},"小括号为空则逗号分开",[51,73448,73449],{},"小括号为空字符串 ''，则元素之间没有分隔符",[51,73451,73452],{},"小括号用啥符号就用进行分割",[43,73454,73456],{"id":73455},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[48,73458,73459,73462,73465,73468,73471],{},[51,73460,73461],{},"记住本地时间获取快速方式：new Date().toDateString()",[51,73463,73464],{},"尽量减少DOM操作，用好map+join的渲染方式",[51,73466,73467],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[51,73469,73470],{},"return可以实现函数的结束",[51,73472,73473],{},"禁止跳转是 preventDefault() 不要忘记",[58,73475,73477],{"className":52226,"code":73476,"language":52228,"meta":63,"style":63},"\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",[65,73478,73479,73489,73503,73507,73515,73529,73549,73561,73569,73575,73585,73595,73599,73603,73609,73619,73631,73635,73639,73646,73658,73672,73682,73686,73690,73697,73704,73711,73723,73735,73745,73757,73761,73765,73772,73779,73791,73803,73813,73825,73855,73859,73863,73870,73882,73894,73918,73928,73938,73942,73946,73954,73965,73977,73989,74001,74018,74030,74042,74046,74050,74057,74069,74081,74093,74103,74121,74134,74146,74170,74181,74185,74189,74197,74207,74211,74215,74221,74233,74244,74254,74258,74262,74268,74290,74294,74298,74304,74310,74322,74332,74344,74374,74387,74404,74408,74412,74423,74445,74455,74459,74463,74476,74486,74498,74510,74522,74534,74544,74554,74564,74575,74588,74592,74600,74608,74612,74620,74633,74653,74686,74719,74752,74778,74796,74814,74822,74848,74866,74884,74902,74920,74938,74946,74954,74972,74980,75009,75017,75025,75033,75046,75058,75070,75082,75094,75106,75119,75131,75139,75147,75155,75160,75165,75169,75173,75177,75181,75185,75189,75194,75199,75204,75209,75217,75225,75233,75238,75243,75248,75253,75258,75263,75268,75273,75278,75283,75288,75293,75298,75303,75307,75312,75317,75327,75336,75340,75345,75354,75370,75412,75452,75491,75556,75564,75568,75573,75591,75599,75604,75609,75639,75645,75650,75663,75675,75687,75699,75711,75723,75735,75739,75749,75753,75758,75763,75767,75776,75780,75785,75790,75809,75814,75834,75838,75843,75847,75852,75870,75888,75906,75925,75944,75963,75968,75974,75995,76001,76010,76016,76022,76028,76055,76068,76073,76083,76089,76095,76101,76107,76112,76118,76124,76130,76136,76169,76174,76179,76184,76189,76195,76201,76207,76218,76223,76229,76236,76250,76256,76280,76285,76290,76296,76302,76323,76329,76342,76348,76354,76360,76366,76371,76377,76383,76389,76407,76421,76427,76435,76441,76463,76468,76473,76478,76483,76488,76497,76506,76511],{"__ignoreMap":63},[68,73480,73481,73483,73485,73487],{"class":70,"line":71},[68,73482,52890],{"class":85},[68,73484,52893],{"class":81},[68,73486,52896],{"class":587},[68,73488,876],{"class":85},[68,73490,73491,73493,73495,73497,73499,73501],{"class":70,"line":78},[68,73492,861],{"class":85},[68,73494,52228],{"class":81},[68,73496,52907],{"class":587},[68,73498,869],{"class":85},[68,73500,52912],{"class":872},[68,73502,876],{"class":85},[68,73504,73505],{"class":70,"line":89},[68,73506,4000],{"emptyLinePlaceholder":1679},[68,73508,73509,73511,73513],{"class":70,"line":115},[68,73510,861],{"class":85},[68,73512,52925],{"class":81},[68,73514,876],{"class":85},[68,73516,73517,73519,73521,73523,73525,73527],{"class":70,"line":280},[68,73518,53729],{"class":85},[68,73520,52935],{"class":81},[68,73522,52938],{"class":587},[68,73524,869],{"class":85},[68,73526,52943],{"class":872},[68,73528,876],{"class":85},[68,73530,73531,73533,73535,73537,73539,73541,73543,73545,73547],{"class":70,"line":301},[68,73532,53729],{"class":85},[68,73534,52935],{"class":81},[68,73536,16516],{"class":587},[68,73538,869],{"class":85},[68,73540,52982],{"class":872},[68,73542,52962],{"class":587},[68,73544,869],{"class":85},[68,73546,52989],{"class":872},[68,73548,876],{"class":85},[68,73550,73551,73553,73555,73557,73559],{"class":70,"line":320},[68,73552,53729],{"class":85},[68,73554,52998],{"class":81},[68,73556,53001],{"class":85},[68,73558,52998],{"class":81},[68,73560,876],{"class":85},[68,73562,73563,73565,73567],{"class":70,"line":2915},[68,73564,53729],{"class":85},[68,73566,1652],{"class":81},[68,73568,876],{"class":85},[68,73570,73571,73573],{"class":70,"line":2921},[68,73572,8002],{"class":81},[68,73574,86],{"class":85},[68,73576,73577,73579,73581,73583],{"class":70,"line":2933},[68,73578,56279],{"class":92},[68,73580,96],{"class":85},[68,73582,600],{"class":92},[68,73584,112],{"class":85},[68,73586,73587,73589,73591,73593],{"class":70,"line":3214},[68,73588,56290],{"class":92},[68,73590,96],{"class":85},[68,73592,600],{"class":92},[68,73594,112],{"class":85},[68,73596,73597],{"class":70,"line":3219},[68,73598,3787],{"class":85},[68,73600,73601],{"class":70,"line":3225},[68,73602,4000],{"emptyLinePlaceholder":1679},[68,73604,73605,73607],{"class":70,"line":3230},[68,73606,58863],{"class":81},[68,73608,86],{"class":85},[68,73610,73611,73613,73615,73617],{"class":70,"line":3244},[68,73612,58870],{"class":92},[68,73614,96],{"class":85},[68,73616,53179],{"class":92},[68,73618,112],{"class":85},[68,73620,73621,73623,73625,73627,73629],{"class":70,"line":3249},[68,73622,63661],{"class":92},[68,73624,96],{"class":85},[68,73626,2436],{"class":92},[68,73628,103],{"class":102},[68,73630,112],{"class":85},[68,73632,73633],{"class":70,"line":3255},[68,73634,3787],{"class":85},[68,73636,73637],{"class":70,"line":3276},[68,73638,4000],{"emptyLinePlaceholder":1679},[68,73640,73641,73644],{"class":70,"line":3281},[68,73642,73643],{"class":587},"    .info",[68,73645,86],{"class":85},[68,73647,73648,73650,73652,73654,73656],{"class":70,"line":3295},[68,73649,56355],{"class":92},[68,73651,96],{"class":85},[68,73653,53079],{"class":92},[68,73655,103],{"class":102},[68,73657,112],{"class":85},[68,73659,73660,73662,73664,73666,73668,73670],{"class":70,"line":3300},[68,73661,56290],{"class":92},[68,73663,96],{"class":85},[68,73665,2182],{"class":92},[68,73667,103],{"class":102},[68,73669,603],{"class":92},[68,73671,112],{"class":85},[68,73673,73674,73676,73678,73680],{"class":70,"line":3329},[68,73675,58870],{"class":92},[68,73677,96],{"class":85},[68,73679,53179],{"class":92},[68,73681,112],{"class":85},[68,73683,73684],{"class":70,"line":3334},[68,73685,3787],{"class":85},[68,73687,73688],{"class":70,"line":3351},[68,73689,4000],{"emptyLinePlaceholder":1679},[68,73691,73692,73695],{"class":70,"line":3356},[68,73693,73694],{"class":587},"    .uname",[68,73696,33059],{"class":85},[68,73698,73699,73702],{"class":70,"line":3361},[68,73700,73701],{"class":587},"    .age",[68,73703,33059],{"class":85},[68,73705,73706,73709],{"class":70,"line":3366},[68,73707,73708],{"class":587},"    .salary",[68,73710,86],{"class":85},[68,73712,73713,73715,73717,73719,73721],{"class":70,"line":3380},[68,73714,56355],{"class":92},[68,73716,96],{"class":85},[68,73718,2047],{"class":92},[68,73720,103],{"class":102},[68,73722,112],{"class":85},[68,73724,73725,73727,73729,73731,73733],{"class":70,"line":3385},[68,73726,56369],{"class":92},[68,73728,96],{"class":85},[68,73730,2436],{"class":92},[68,73732,103],{"class":102},[68,73734,112],{"class":85},[68,73736,73737,73739,73741,73743],{"class":70,"line":4177},[68,73738,63364],{"class":92},[68,73740,96],{"class":85},[68,73742,56321],{"class":92},[68,73744,112],{"class":85},[68,73746,73747,73749,73751,73753,73755],{"class":70,"line":4191},[68,73748,63334],{"class":92},[68,73750,96],{"class":85},[68,73752,2311],{"class":92},[68,73754,103],{"class":102},[68,73756,112],{"class":85},[68,73758,73759],{"class":70,"line":4199},[68,73760,3787],{"class":85},[68,73762,73763],{"class":70,"line":4204},[68,73764,4000],{"emptyLinePlaceholder":1679},[68,73766,73767,73770],{"class":70,"line":4210},[68,73768,73769],{"class":587},"    .gender",[68,73771,33059],{"class":85},[68,73773,73774,73777],{"class":70,"line":4216},[68,73775,73776],{"class":587},"    .city",[68,73778,86],{"class":85},[68,73780,73781,73783,73785,73787,73789],{"class":70,"line":4221},[68,73782,56355],{"class":92},[68,73784,96],{"class":85},[68,73786,2047],{"class":92},[68,73788,103],{"class":102},[68,73790,112],{"class":85},[68,73792,73793,73795,73797,73799,73801],{"class":70,"line":9547},[68,73794,56369],{"class":92},[68,73796,96],{"class":85},[68,73798,2561],{"class":92},[68,73800,103],{"class":102},[68,73802,112],{"class":85},[68,73804,73805,73807,73809,73811],{"class":70,"line":9571},[68,73806,63364],{"class":92},[68,73808,96],{"class":85},[68,73810,56321],{"class":92},[68,73812,112],{"class":85},[68,73814,73815,73817,73819,73821,73823],{"class":70,"line":9576},[68,73816,63334],{"class":92},[68,73818,96],{"class":85},[68,73820,2311],{"class":92},[68,73822,103],{"class":102},[68,73824,112],{"class":85},[68,73826,73827,73829,73831,73833,73835,73837,73840,73842,73844,73846,73849,73851,73853],{"class":70,"line":9582},[68,73828,63561],{"class":92},[68,73830,96],{"class":85},[68,73832,99],{"class":92},[68,73834,103],{"class":102},[68,73836,106],{"class":92},[68,73838,73839],{"class":92}," rgb",[68,73841,997],{"class":85},[68,73843,3324],{"class":92},[68,73845,1002],{"class":85},[68,73847,73848],{"class":92},"197",[68,73850,1002],{"class":85},[68,73852,73848],{"class":92},[68,73854,1016],{"class":85},[68,73856,73857],{"class":70,"line":9609},[68,73858,3787],{"class":85},[68,73860,73861],{"class":70,"line":9614},[68,73862,4000],{"emptyLinePlaceholder":1679},[68,73864,73865,73868],{"class":70,"line":9620},[68,73866,73867],{"class":81},"    button",[68,73869,86],{"class":85},[68,73871,73872,73874,73876,73878,73880],{"class":70,"line":9632},[68,73873,56369],{"class":92},[68,73875,96],{"class":85},[68,73877,2561],{"class":92},[68,73879,103],{"class":102},[68,73881,112],{"class":85},[68,73883,73884,73886,73888,73890,73892],{"class":70,"line":9644},[68,73885,56355],{"class":92},[68,73887,96],{"class":85},[68,73889,2220],{"class":92},[68,73891,103],{"class":102},[68,73893,112],{"class":85},[68,73895,73896,73898,73900,73903,73905,73907,73909,73912,73914,73916],{"class":70,"line":9656},[68,73897,56468],{"class":92},[68,73899,96],{"class":85},[68,73901,73902],{"class":92},"rgb",[68,73904,997],{"class":85},[68,73906,2704],{"class":92},[68,73908,1002],{"class":85},[68,73910,73911],{"class":92},"187",[68,73913,1002],{"class":85},[68,73915,2035],{"class":92},[68,73917,1016],{"class":85},[68,73919,73920,73922,73924,73926],{"class":70,"line":11314},[68,73921,59000],{"class":92},[68,73923,96],{"class":85},[68,73925,62426],{"class":92},[68,73927,112],{"class":85},[68,73929,73930,73932,73934,73936],{"class":70,"line":11339},[68,73931,63561],{"class":92},[68,73933,96],{"class":85},[68,73935,600],{"class":92},[68,73937,112],{"class":85},[68,73939,73940],{"class":70,"line":11362},[68,73941,3787],{"class":85},[68,73943,73944],{"class":70,"line":11386},[68,73945,4000],{"emptyLinePlaceholder":1679},[68,73947,73948,73950,73952],{"class":70,"line":11391},[68,73949,73867],{"class":81},[68,73951,53274],{"class":81},[68,73953,86],{"class":85},[68,73955,73956,73958,73960,73963],{"class":70,"line":11396},[68,73957,56593],{"class":92},[68,73959,96],{"class":85},[68,73961,73962],{"class":92},"inline-block",[68,73964,112],{"class":85},[68,73966,73967,73969,73971,73973,73975],{"class":70,"line":11401},[68,73968,56355],{"class":92},[68,73970,96],{"class":85},[68,73972,2182],{"class":92},[68,73974,103],{"class":102},[68,73976,112],{"class":85},[68,73978,73979,73981,73983,73985,73987],{"class":70,"line":11410},[68,73980,56369],{"class":92},[68,73982,96],{"class":85},[68,73984,2182],{"class":92},[68,73986,103],{"class":102},[68,73988,112],{"class":85},[68,73990,73991,73993,73995,73997,73999],{"class":70,"line":11415},[68,73992,58943],{"class":92},[68,73994,96],{"class":85},[68,73996,2208],{"class":92},[68,73998,103],{"class":102},[68,74000,112],{"class":85},[68,74002,74003,74005,74007,74009,74011,74013,74016],{"class":70,"line":11421},[68,74004,63561],{"class":92},[68,74006,96],{"class":85},[68,74008,99],{"class":92},[68,74010,103],{"class":102},[68,74012,106],{"class":92},[68,74014,74015],{"class":92}," #fff",[68,74017,112],{"class":85},[68,74019,74020,74022,74024,74026,74028],{"class":70,"line":11442},[68,74021,56718],{"class":92},[68,74023,96],{"class":85},[68,74025,2055],{"class":92},[68,74027,103],{"class":102},[68,74029,112],{"class":85},[68,74031,74032,74034,74036,74038,74040],{"class":70,"line":11448},[68,74033,63334],{"class":92},[68,74035,96],{"class":85},[68,74037,99],{"class":92},[68,74039,103],{"class":102},[68,74041,112],{"class":85},[68,74043,74044],{"class":70,"line":11462},[68,74045,3787],{"class":85},[68,74047,74048],{"class":70,"line":11468},[68,74049,4000],{"emptyLinePlaceholder":1679},[68,74051,74052,74055],{"class":70,"line":11495},[68,74053,74054],{"class":587},"    .total",[68,74056,86],{"class":85},[68,74058,74059,74061,74063,74065,74067],{"class":70,"line":11504},[68,74060,56355],{"class":92},[68,74062,96],{"class":85},[68,74064,63213],{"class":92},[68,74066,103],{"class":102},[68,74068,112],{"class":85},[68,74070,74071,74073,74075,74077,74079],{"class":70,"line":11510},[68,74072,56369],{"class":92},[68,74074,96],{"class":85},[68,74076,2137],{"class":92},[68,74078,103],{"class":102},[68,74080,112],{"class":85},[68,74082,74083,74085,74087,74089,74091],{"class":70,"line":11518},[68,74084,58943],{"class":92},[68,74086,96],{"class":85},[68,74088,2137],{"class":92},[68,74090,103],{"class":102},[68,74092,112],{"class":85},[68,74094,74095,74097,74099,74101],{"class":70,"line":11523},[68,74096,58870],{"class":92},[68,74098,96],{"class":85},[68,74100,1269],{"class":92},[68,74102,112],{"class":85},[68,74104,74105,74107,74109,74111,74113,74115,74117,74119],{"class":70,"line":18199},[68,74106,56290],{"class":92},[68,74108,96],{"class":85},[68,74110,2137],{"class":92},[68,74112,103],{"class":102},[68,74114,603],{"class":92},[68,74116,989],{"class":92},[68,74118,103],{"class":102},[68,74120,112],{"class":85},[68,74122,74123,74126,74128,74130,74132],{"class":70,"line":18205},[68,74124,74125],{"class":92},"      padding-right",[68,74127,96],{"class":85},[68,74129,2182],{"class":92},[68,74131,103],{"class":102},[68,74133,112],{"class":85},[68,74135,74136,74138,74140,74142,74144],{"class":70,"line":18228},[68,74137,56506],{"class":92},[68,74139,96],{"class":85},[68,74141,2259],{"class":92},[68,74143,103],{"class":102},[68,74145,112],{"class":85},[68,74147,74148,74150,74152,74154,74156,74159,74161,74164,74166,74168],{"class":70,"line":18234},[68,74149,56468],{"class":92},[68,74151,96],{"class":85},[68,74153,73902],{"class":92},[68,74155,997],{"class":85},[68,74157,74158],{"class":92},"237",[68,74160,1002],{"class":85},[68,74162,74163],{"class":92},"235",[68,74165,1002],{"class":85},[68,74167,74163],{"class":92},[68,74169,1016],{"class":85},[68,74171,74172,74175,74177,74179],{"class":70,"line":18257},[68,74173,74174],{"class":92},"      box-sizing",[68,74176,96],{"class":85},[68,74178,62089],{"class":92},[68,74180,112],{"class":85},[68,74182,74183],{"class":70,"line":18271},[68,74184,3787],{"class":85},[68,74186,74187],{"class":70,"line":18291},[68,74188,4000],{"emptyLinePlaceholder":1679},[68,74190,74191,74193,74195],{"class":70,"line":18297},[68,74192,74054],{"class":587},[68,74194,53274],{"class":81},[68,74196,86],{"class":85},[68,74198,74199,74201,74203,74205],{"class":70,"line":18308},[68,74200,59000],{"class":92},[68,74202,96],{"class":85},[68,74204,59005],{"class":92},[68,74206,112],{"class":85},[68,74208,74209],{"class":70,"line":18331},[68,74210,3787],{"class":85},[68,74212,74213],{"class":70,"line":18353},[68,74214,4000],{"emptyLinePlaceholder":1679},[68,74216,74217,74219],{"class":70,"line":18358},[68,74218,66606],{"class":81},[68,74220,86],{"class":85},[68,74222,74223,74225,74227,74229,74231],{"class":70,"line":18364},[68,74224,56355],{"class":92},[68,74226,96],{"class":85},[68,74228,63213],{"class":92},[68,74230,103],{"class":102},[68,74232,112],{"class":85},[68,74234,74235,74237,74239,74242],{"class":70,"line":18378},[68,74236,56290],{"class":92},[68,74238,96],{"class":85},[68,74240,74241],{"class":92},"auto",[68,74243,112],{"class":85},[68,74245,74246,74248,74250,74252],{"class":70,"line":18391},[68,74247,66613],{"class":92},[68,74249,96],{"class":85},[68,74251,356],{"class":92},[68,74253,112],{"class":85},[68,74255,74256],{"class":70,"line":18396},[68,74257,3787],{"class":85},[68,74259,74260],{"class":70,"line":18410},[68,74261,4000],{"emptyLinePlaceholder":1679},[68,74263,74264,74266],{"class":70,"line":18415},[68,74265,66697],{"class":81},[68,74267,86],{"class":85},[68,74269,74270,74272,74274,74276,74278,74280,74282,74284,74286,74288],{"class":70,"line":18421},[68,74271,56468],{"class":92},[68,74273,96],{"class":85},[68,74275,73902],{"class":92},[68,74277,997],{"class":85},[68,74279,74158],{"class":92},[68,74281,1002],{"class":85},[68,74283,74163],{"class":92},[68,74285,1002],{"class":85},[68,74287,74163],{"class":92},[68,74289,1016],{"class":85},[68,74291,74292],{"class":70,"line":18426},[68,74293,3787],{"class":85},[68,74295,74296],{"class":70,"line":18440},[68,74297,4000],{"emptyLinePlaceholder":1679},[68,74299,74300,74302],{"class":70,"line":18445},[68,74301,66697],{"class":81},[68,74303,33059],{"class":85},[68,74305,74306,74308],{"class":70,"line":18450},[68,74307,66763],{"class":81},[68,74309,86],{"class":85},[68,74311,74312,74314,74316,74318,74320],{"class":70,"line":18464},[68,74313,56369],{"class":92},[68,74315,96],{"class":85},[68,74317,2009],{"class":92},[68,74319,103],{"class":102},[68,74321,112],{"class":85},[68,74323,74324,74326,74328,74330],{"class":70,"line":18476},[68,74325,58870],{"class":92},[68,74327,96],{"class":85},[68,74329,131],{"class":92},[68,74331,112],{"class":85},[68,74333,74334,74336,74338,74340,74342],{"class":70,"line":18481},[68,74335,56506],{"class":92},[68,74337,96],{"class":85},[68,74339,2285],{"class":92},[68,74341,103],{"class":102},[68,74343,112],{"class":85},[68,74345,74346,74348,74350,74352,74354,74356,74358,74360,74363,74365,74368,74370,74372],{"class":70,"line":18494},[68,74347,63561],{"class":92},[68,74349,96],{"class":85},[68,74351,99],{"class":92},[68,74353,103],{"class":102},[68,74355,106],{"class":92},[68,74357,73839],{"class":92},[68,74359,997],{"class":85},[68,74361,74362],{"class":92},"228",[68,74364,1002],{"class":85},[68,74366,74367],{"class":92},"225",[68,74369,1002],{"class":85},[68,74371,74367],{"class":92},[68,74373,1016],{"class":85},[68,74375,74376,74379,74381,74383,74385],{"class":70,"line":18499},[68,74377,74378],{"class":92},"      padding-left",[68,74380,96],{"class":85},[68,74382,2055],{"class":92},[68,74384,103],{"class":102},[68,74386,112],{"class":85},[68,74388,74389,74391,74393,74395,74398,74400,74402],{"class":70,"line":18504},[68,74390,63444],{"class":92},[68,74392,96],{"class":85},[68,74394,29714],{"class":92},[68,74396,74397],{"class":92}," linear",[68,74399,63451],{"class":92},[68,74401,2431],{"class":102},[68,74403,112],{"class":85},[68,74405,74406],{"class":70,"line":18509},[68,74407,3787],{"class":85},[68,74409,74410],{"class":70,"line":18522},[68,74411,4000],{"emptyLinePlaceholder":1679},[68,74413,74414,74417,74419,74421],{"class":70,"line":18527},[68,74415,74416],{"class":81},"    tbody",[68,74418,71726],{"class":81},[68,74420,62524],{"class":587},[68,74422,86],{"class":85},[68,74424,74425,74427,74429,74431,74433,74435,74437,74439,74441,74443],{"class":70,"line":34226},[68,74426,56468],{"class":92},[68,74428,96],{"class":85},[68,74430,73902],{"class":92},[68,74432,997],{"class":85},[68,74434,74158],{"class":92},[68,74436,1002],{"class":85},[68,74438,74163],{"class":92},[68,74440,1002],{"class":85},[68,74442,74163],{"class":92},[68,74444,1016],{"class":85},[68,74446,74447,74449,74451,74453],{"class":70,"line":34232},[68,74448,63609],{"class":92},[68,74450,96],{"class":85},[68,74452,63614],{"class":92},[68,74454,112],{"class":85},[68,74456,74457],{"class":70,"line":34238},[68,74458,3787],{"class":85},[68,74460,74461],{"class":70,"line":34244},[68,74462,4000],{"emptyLinePlaceholder":1679},[68,74464,74465,74467,74469,74472,74474],{"class":70,"line":34250},[68,74466,74416],{"class":81},[68,74468,71726],{"class":81},[68,74470,74471],{"class":81}," td",[68,74473,3002],{"class":81},[68,74475,86],{"class":85},[68,74477,74478,74480,74482,74484],{"class":70,"line":34261},[68,74479,56593],{"class":92},[68,74481,96],{"class":85},[68,74483,62453],{"class":92},[68,74485,112],{"class":85},[68,74487,74488,74490,74492,74494,74496],{"class":70,"line":34267},[68,74489,56355],{"class":92},[68,74491,96],{"class":85},[68,74493,2643],{"class":92},[68,74495,103],{"class":102},[68,74497,112],{"class":85},[68,74499,74500,74502,74504,74506,74508],{"class":70,"line":34287},[68,74501,56369],{"class":92},[68,74503,96],{"class":85},[68,74505,2561],{"class":92},[68,74507,103],{"class":102},[68,74509,112],{"class":85},[68,74511,74512,74514,74516,74518,74520],{"class":70,"line":34293},[68,74513,58943],{"class":92},[68,74515,96],{"class":85},[68,74517,2561],{"class":92},[68,74519,103],{"class":102},[68,74521,112],{"class":85},[68,74523,74524,74526,74528,74530,74532],{"class":70,"line":34304},[68,74525,63661],{"class":92},[68,74527,96],{"class":85},[68,74529,267],{"class":92},[68,74531,103],{"class":102},[68,74533,112],{"class":85},[68,74535,74536,74538,74540,74542],{"class":70,"line":34310},[68,74537,59000],{"class":92},[68,74539,96],{"class":85},[68,74541,62426],{"class":92},[68,74543,112],{"class":85},[68,74545,74546,74548,74550,74552],{"class":70,"line":34316},[68,74547,58870],{"class":92},[68,74549,96],{"class":85},[68,74551,53179],{"class":92},[68,74553,112],{"class":85},[68,74555,74556,74558,74560,74562],{"class":70,"line":34322},[68,74557,65553],{"class":92},[68,74559,96],{"class":85},[68,74561,56321],{"class":92},[68,74563,112],{"class":85},[68,74565,74566,74568,74570,74573],{"class":70,"line":34328},[68,74567,56468],{"class":92},[68,74569,96],{"class":85},[68,74571,74572],{"class":92},"orange",[68,74574,112],{"class":85},[68,74576,74577,74579,74581,74584,74586],{"class":70,"line":34334},[68,74578,56718],{"class":92},[68,74580,96],{"class":85},[68,74582,74583],{"class":92},"12.5",[68,74585,103],{"class":102},[68,74587,112],{"class":85},[68,74589,74590],{"class":70,"line":34340},[68,74591,3787],{"class":85},[68,74593,74594,74596,74598],{"class":70,"line":34346},[68,74595,54002],{"class":85},[68,74597,1652],{"class":81},[68,74599,876],{"class":85},[68,74601,74602,74604,74606],{"class":70,"line":34366},[68,74603,886],{"class":85},[68,74605,52925],{"class":81},[68,74607,876],{"class":85},[68,74609,74610],{"class":70,"line":34372},[68,74611,4000],{"emptyLinePlaceholder":1679},[68,74613,74614,74616,74618],{"class":70,"line":34388},[68,74615,861],{"class":85},[68,74617,53385],{"class":81},[68,74619,876],{"class":85},[68,74621,74622,74624,74626,74629,74631],{"class":70,"line":34394},[68,74623,53729],{"class":85},[68,74625,14],{"class":81},[68,74627,74628],{"class":85},">学生就业统计表\u003C\u002F",[68,74630,14],{"class":81},[68,74632,876],{"class":85},[68,74634,74635,74637,74639,74641,74643,74645,74647,74649,74651],{"class":70,"line":34408},[68,74636,53729],{"class":85},[68,74638,68207],{"class":81},[68,74640,866],{"class":587},[68,74642,869],{"class":85},[68,74644,64247],{"class":872},[68,74646,70652],{"class":587},[68,74648,869],{"class":85},[68,74650,33369],{"class":872},[68,74652,876],{"class":85},[68,74654,74655,74657,74659,74661,74663,74665,74667,74669,74671,74673,74675,74678,74680,74682,74684],{"class":70,"line":34414},[68,74656,52932],{"class":85},[68,74658,55405],{"class":81},[68,74660,55408],{"class":587},[68,74662,869],{"class":85},[68,74664,64282],{"class":872},[68,74666,16516],{"class":587},[68,74668,869],{"class":85},[68,74670,70678],{"class":872},[68,74672,62604],{"class":587},[68,74674,869],{"class":85},[68,74676,74677],{"class":872},"\"姓名\"",[68,74679,866],{"class":587},[68,74681,869],{"class":85},[68,74683,70678],{"class":872},[68,74685,876],{"class":85},[68,74687,74688,74690,74692,74694,74696,74698,74700,74702,74704,74706,74708,74711,74713,74715,74717],{"class":70,"line":34429},[68,74689,52932],{"class":85},[68,74691,55405],{"class":81},[68,74693,55408],{"class":587},[68,74695,869],{"class":85},[68,74697,64282],{"class":872},[68,74699,16516],{"class":587},[68,74701,869],{"class":85},[68,74703,70706],{"class":872},[68,74705,62604],{"class":587},[68,74707,869],{"class":85},[68,74709,74710],{"class":872},"\"年龄\"",[68,74712,866],{"class":587},[68,74714,869],{"class":85},[68,74716,70706],{"class":872},[68,74718,876],{"class":85},[68,74720,74721,74723,74725,74727,74729,74731,74733,74735,74737,74739,74741,74744,74746,74748,74750],{"class":70,"line":34435},[68,74722,52932],{"class":85},[68,74724,55405],{"class":81},[68,74726,55408],{"class":587},[68,74728,869],{"class":85},[68,74730,64282],{"class":872},[68,74732,16516],{"class":587},[68,74734,869],{"class":85},[68,74736,70808],{"class":872},[68,74738,62604],{"class":587},[68,74740,869],{"class":85},[68,74742,74743],{"class":872},"\"薪资\"",[68,74745,866],{"class":587},[68,74747,869],{"class":85},[68,74749,70808],{"class":872},[68,74751,876],{"class":85},[68,74753,74754,74756,74758,74760,74762,74764,74766,74768,74770,74772,74774,74776],{"class":70,"line":34444},[68,74755,52932],{"class":85},[68,74757,70726],{"class":81},[68,74759,16516],{"class":587},[68,74761,869],{"class":85},[68,74763,70733],{"class":872},[68,74765,16555],{"class":587},[68,74767,869],{"class":85},[68,74769,9251],{"class":872},[68,74771,866],{"class":587},[68,74773,869],{"class":85},[68,74775,70733],{"class":872},[68,74777,876],{"class":85},[68,74779,74780,74782,74784,74786,74788,74790,74792,74794],{"class":70,"line":34450},[68,74781,56818],{"class":85},[68,74783,70748],{"class":81},[68,74785,68233],{"class":587},[68,74787,869],{"class":85},[68,74789,11559],{"class":872},[68,74791,70757],{"class":85},[68,74793,70748],{"class":81},[68,74795,876],{"class":85},[68,74797,74798,74800,74802,74804,74806,74808,74810,74812],{"class":70,"line":34459},[68,74799,56818],{"class":85},[68,74801,70748],{"class":81},[68,74803,68233],{"class":587},[68,74805,869],{"class":85},[68,74807,11628],{"class":872},[68,74809,70776],{"class":85},[68,74811,70748],{"class":81},[68,74813,876],{"class":85},[68,74815,74816,74818,74820],{"class":70,"line":34465},[68,74817,53362],{"class":85},[68,74819,70726],{"class":81},[68,74821,876],{"class":85},[68,74823,74824,74826,74828,74830,74832,74834,74836,74838,74840,74842,74844,74846],{"class":70,"line":34471},[68,74825,52932],{"class":85},[68,74827,70726],{"class":81},[68,74829,16516],{"class":587},[68,74831,869],{"class":85},[68,74833,70830],{"class":872},[68,74835,16555],{"class":587},[68,74837,869],{"class":85},[68,74839,9251],{"class":872},[68,74841,866],{"class":587},[68,74843,869],{"class":85},[68,74845,70830],{"class":872},[68,74847,876],{"class":85},[68,74849,74850,74852,74854,74856,74858,74860,74862,74864],{"class":70,"line":34480},[68,74851,56818],{"class":85},[68,74853,70748],{"class":81},[68,74855,68233],{"class":587},[68,74857,869],{"class":85},[68,74859,70851],{"class":872},[68,74861,70854],{"class":85},[68,74863,70748],{"class":81},[68,74865,876],{"class":85},[68,74867,74868,74870,74872,74874,74876,74878,74880,74882],{"class":70,"line":34486},[68,74869,56818],{"class":85},[68,74871,70748],{"class":81},[68,74873,68233],{"class":587},[68,74875,869],{"class":85},[68,74877,70871],{"class":872},[68,74879,70874],{"class":85},[68,74881,70748],{"class":81},[68,74883,876],{"class":85},[68,74885,74886,74888,74890,74892,74894,74896,74898,74900],{"class":70,"line":34497},[68,74887,56818],{"class":85},[68,74889,70748],{"class":81},[68,74891,68233],{"class":587},[68,74893,869],{"class":85},[68,74895,70891],{"class":872},[68,74897,70894],{"class":85},[68,74899,70748],{"class":81},[68,74901,876],{"class":85},[68,74903,74904,74906,74908,74910,74912,74914,74916,74918],{"class":70,"line":34503},[68,74905,56818],{"class":85},[68,74907,70748],{"class":81},[68,74909,68233],{"class":587},[68,74911,869],{"class":85},[68,74913,70911],{"class":872},[68,74915,70914],{"class":85},[68,74917,70748],{"class":81},[68,74919,876],{"class":85},[68,74921,74922,74924,74926,74928,74930,74932,74934,74936],{"class":70,"line":34522},[68,74923,56818],{"class":85},[68,74925,70748],{"class":81},[68,74927,68233],{"class":587},[68,74929,869],{"class":85},[68,74931,70931],{"class":872},[68,74933,70934],{"class":85},[68,74935,70748],{"class":81},[68,74937,876],{"class":85},[68,74939,74940,74942,74944],{"class":70,"line":34528},[68,74941,53362],{"class":85},[68,74943,70726],{"class":81},[68,74945,876],{"class":85},[68,74947,74948,74950,74952],{"class":70,"line":34539},[68,74949,52932],{"class":85},[68,74951,55471],{"class":81},[68,74953,876],{"class":85},[68,74955,74956,74958,74960,74963,74965,74968,74970],{"class":70,"line":34545},[68,74957,56818],{"class":85},[68,74959,68],{"class":81},[68,74961,74962],{"class":85},">+\u003C\u002F",[68,74964,68],{"class":81},[68,74966,74967],{"class":85},">添加\u003C\u002F",[68,74969,55471],{"class":81},[68,74971,876],{"class":85},[68,74973,74974,74976,74978],{"class":70,"line":34565},[68,74975,54002],{"class":85},[68,74977,68207],{"class":81},[68,74979,876],{"class":85},[68,74981,74982,74984,74986,74988,74990,74992,74995,74997,75000,75002,75005,75007],{"class":70,"line":34581},[68,74983,53729],{"class":85},[68,74985,82],{"class":81},[68,74987,866],{"class":587},[68,74989,869],{"class":85},[68,74991,64163],{"class":872},[68,74993,74994],{"class":85},">共有数据 \u003C",[68,74996,68],{"class":81},[68,74998,74999],{"class":85},">0\u003C\u002F",[68,75001,68],{"class":81},[68,75003,75004],{"class":85},"> 条\u003C\u002F",[68,75006,82],{"class":81},[68,75008,876],{"class":85},[68,75010,75011,75013,75015],{"class":70,"line":34587},[68,75012,53729],{"class":85},[68,75014,120],{"class":81},[68,75016,876],{"class":85},[68,75018,75019,75021,75023],{"class":70,"line":34601},[68,75020,52932],{"class":85},[68,75022,123],{"class":81},[68,75024,876],{"class":85},[68,75026,75027,75029,75031],{"class":70,"line":34607},[68,75028,56818],{"class":85},[68,75030,126],{"class":81},[68,75032,876],{"class":85},[68,75034,75035,75037,75039,75042,75044],{"class":70,"line":34613},[68,75036,56886],{"class":85},[68,75038,129],{"class":81},[68,75040,75041],{"class":85},">ID\u003C\u002F",[68,75043,129],{"class":81},[68,75045,876],{"class":85},[68,75047,75048,75050,75052,75054,75056],{"class":70,"line":34624},[68,75049,56886],{"class":85},[68,75051,129],{"class":81},[68,75053,71037],{"class":85},[68,75055,129],{"class":81},[68,75057,876],{"class":85},[68,75059,75060,75062,75064,75066,75068],{"class":70,"line":34630},[68,75061,56886],{"class":85},[68,75063,129],{"class":81},[68,75065,71050],{"class":85},[68,75067,129],{"class":81},[68,75069,876],{"class":85},[68,75071,75072,75074,75076,75078,75080],{"class":70,"line":34636},[68,75073,56886],{"class":85},[68,75075,129],{"class":81},[68,75077,71063],{"class":85},[68,75079,129],{"class":81},[68,75081,876],{"class":85},[68,75083,75084,75086,75088,75090,75092],{"class":70,"line":34646},[68,75085,56886],{"class":85},[68,75087,129],{"class":81},[68,75089,71076],{"class":85},[68,75091,129],{"class":81},[68,75093,876],{"class":85},[68,75095,75096,75098,75100,75102,75104],{"class":70,"line":34652},[68,75097,56886],{"class":85},[68,75099,129],{"class":81},[68,75101,71089],{"class":85},[68,75103,129],{"class":81},[68,75105,876],{"class":85},[68,75107,75108,75110,75112,75115,75117],{"class":70,"line":34663},[68,75109,56886],{"class":85},[68,75111,129],{"class":81},[68,75113,75114],{"class":85},">录入时间\u003C\u002F",[68,75116,129],{"class":81},[68,75118,876],{"class":85},[68,75120,75121,75123,75125,75127,75129],{"class":70,"line":34669},[68,75122,56886],{"class":85},[68,75124,129],{"class":81},[68,75126,71102],{"class":85},[68,75128,129],{"class":81},[68,75130,876],{"class":85},[68,75132,75133,75135,75137],{"class":70,"line":34679},[68,75134,56991],{"class":85},[68,75136,126],{"class":81},[68,75138,876],{"class":85},[68,75140,75141,75143,75145],{"class":70,"line":34684},[68,75142,53362],{"class":85},[68,75144,123],{"class":81},[68,75146,876],{"class":85},[68,75148,75149,75151,75153],{"class":70,"line":34690},[68,75150,52932],{"class":85},[68,75152,137],{"class":81},[68,75154,876],{"class":85},[68,75156,75157],{"class":70,"line":34739},[68,75158,75159],{"class":74},"      \u003C!-- \u003Ctr>\n",[68,75161,75162],{"class":70,"line":34786},[68,75163,75164],{"class":74},"        \u003Ctd>1\u003C\u002Ftd>\n",[68,75166,75167],{"class":70,"line":34791},[68,75168,75164],{"class":74},[68,75170,75171],{"class":70,"line":34797},[68,75172,75164],{"class":74},[68,75174,75175],{"class":70,"line":34816},[68,75176,75164],{"class":74},[68,75178,75179],{"class":70,"line":34822},[68,75180,75164],{"class":74},[68,75182,75183],{"class":70,"line":34842},[68,75184,75164],{"class":74},[68,75186,75187],{"class":70,"line":34848},[68,75188,75164],{"class":74},[68,75190,75191],{"class":70,"line":34854},[68,75192,75193],{"class":74},"        \u003Ctd>\n",[68,75195,75196],{"class":70,"line":34864},[68,75197,75198],{"class":74},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[68,75200,75201],{"class":70,"line":34869},[68,75202,75203],{"class":74},"        \u003C\u002Ftd>\n",[68,75205,75206],{"class":70,"line":34875},[68,75207,75208],{"class":74},"      \u003C\u002Ftr> -->\n",[68,75210,75211,75213,75215],{"class":70,"line":34891},[68,75212,53362],{"class":85},[68,75214,137],{"class":81},[68,75216,876],{"class":85},[68,75218,75219,75221,75223],{"class":70,"line":34936},[68,75220,54002],{"class":85},[68,75222,120],{"class":81},[68,75224,876],{"class":85},[68,75226,75227,75229,75231],{"class":70,"line":34942},[68,75228,53729],{"class":85},[68,75230,53398],{"class":81},[68,75232,876],{"class":85},[68,75234,75235],{"class":70,"line":34948},[68,75236,75237],{"class":74},"    \u002F\u002F const initData = [{\n",[68,75239,75240],{"class":70,"line":34954},[68,75241,75242],{"class":74},"    \u002F\u002F   unameId: 1,\n",[68,75244,75245],{"class":70,"line":34965},[68,75246,75247],{"class":74},"    \u002F\u002F   uname: '华晨宇',\n",[68,75249,75250],{"class":70,"line":34971},[68,75251,75252],{"class":74},"    \u002F\u002F   age: 22,\n",[68,75254,75255],{"class":70,"line":34977},[68,75256,75257],{"class":74},"    \u002F\u002F   salary: 12000,\n",[68,75259,75260],{"class":70,"line":34983},[68,75261,75262],{"class":74},"    \u002F\u002F   gender: '男',\n",[68,75264,75265],{"class":70,"line":35001},[68,75266,75267],{"class":74},"    \u002F\u002F   city: '北京',\n",[68,75269,75270],{"class":70,"line":35015},[68,75271,75272],{"class":74},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[68,75274,75275],{"class":70,"line":35024},[68,75276,75277],{"class":74},"    \u002F\u002F }]\n",[68,75279,75280],{"class":70,"line":35033},[68,75281,75282],{"class":74},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[68,75284,75285],{"class":70,"line":35042},[68,75286,75287],{"class":74},"    \u002F\u002F 1.渲染业务\n",[68,75289,75290],{"class":70,"line":35051},[68,75291,75292],{"class":74},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[68,75294,75295],{"class":70,"line":35057},[68,75296,75297],{"class":74},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[68,75299,75300],{"class":70,"line":35063},[68,75301,75302],{"class":74},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[68,75304,75305],{"class":70,"line":35071},[68,75306,4000],{"emptyLinePlaceholder":1679},[68,75308,75309],{"class":70,"line":35076},[68,75310,75311],{"class":74},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[68,75313,75314],{"class":70,"line":35082},[68,75315,75316],{"class":74},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[68,75318,75319,75321,75323,75325],{"class":70,"line":35093},[68,75320,12819],{"class":102},[68,75322,59279],{"class":92},[68,75324,15161],{"class":102},[68,75326,53423],{"class":85},[68,75328,75329,75332,75334],{"class":70,"line":35099},[68,75330,75331],{"class":85},"    console.",[68,75333,59831],{"class":587},[68,75335,53997],{"class":85},[68,75337,75338],{"class":70,"line":35119},[68,75339,4000],{"emptyLinePlaceholder":1679},[68,75341,75342],{"class":70,"line":35125},[68,75343,75344],{"class":74},"    \u002F\u002F 时间函数\n",[68,75346,75347,75349,75352],{"class":70,"line":35131},[68,75348,71666],{"class":102},[68,75350,75351],{"class":587}," getTime",[68,75353,12451],{"class":85},[68,75355,75356,75358,75361,75363,75365,75368],{"class":70,"line":35137},[68,75357,59812],{"class":102},[68,75359,75360],{"class":92}," date",[68,75362,15161],{"class":102},[68,75364,13176],{"class":102},[68,75366,75367],{"class":587}," Date",[68,75369,3577],{"class":85},[68,75371,75372,75374,75376,75378,75381,75384,75386,75388,75390,75393,75396,75398,75400,75402,75404,75406,75408,75410],{"class":70,"line":35154},[68,75373,59812],{"class":102},[68,75375,17686],{"class":92},[68,75377,15161],{"class":102},[68,75379,75380],{"class":85}," date.",[68,75382,75383],{"class":587},"getHours",[68,75385,14647],{"class":85},[68,75387,861],{"class":102},[68,75389,989],{"class":92},[68,75391,75392],{"class":102}," ?",[68,75394,75395],{"class":872}," '0'",[68,75397,47159],{"class":102},[68,75399,75380],{"class":85},[68,75401,75383],{"class":587},[68,75403,14647],{"class":85},[68,75405,2595],{"class":102},[68,75407,75380],{"class":85},[68,75409,75383],{"class":587},[68,75411,3577],{"class":85},[68,75413,75414,75416,75419,75421,75423,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450],{"class":70,"line":35160},[68,75415,59812],{"class":102},[68,75417,75418],{"class":92}," m",[68,75420,15161],{"class":102},[68,75422,75380],{"class":85},[68,75424,75425],{"class":587},"getMinutes",[68,75427,14647],{"class":85},[68,75429,861],{"class":102},[68,75431,989],{"class":92},[68,75433,75392],{"class":102},[68,75435,75395],{"class":872},[68,75437,47159],{"class":102},[68,75439,75380],{"class":85},[68,75441,75425],{"class":587},[68,75443,14647],{"class":85},[68,75445,2595],{"class":102},[68,75447,75380],{"class":85},[68,75449,75425],{"class":587},[68,75451,3577],{"class":85},[68,75453,75454,75456,75458,75460,75462,75465,75467,75469,75471,75473,75475,75477,75479,75481,75483,75485,75487,75489],{"class":70,"line":35166},[68,75455,59812],{"class":102},[68,75457,10027],{"class":92},[68,75459,15161],{"class":102},[68,75461,75380],{"class":85},[68,75463,75464],{"class":587},"getSeconds",[68,75466,14647],{"class":85},[68,75468,861],{"class":102},[68,75470,989],{"class":92},[68,75472,75392],{"class":102},[68,75474,75395],{"class":872},[68,75476,47159],{"class":102},[68,75478,75380],{"class":85},[68,75480,75464],{"class":587},[68,75482,14647],{"class":85},[68,75484,2595],{"class":102},[68,75486,75380],{"class":85},[68,75488,75464],{"class":587},[68,75490,3577],{"class":85},[68,75492,75493,75495,75498,75500,75502,75505,75507,75510,75512,75515,75517,75519,75522,75524,75526,75528,75530,75532,75534,75537,75539,75542,75544,75547,75549,75551,75553],{"class":70,"line":35172},[68,75494,59812],{"class":102},[68,75496,75497],{"class":92}," str",[68,75499,15161],{"class":102},[68,75501,64486],{"class":872},[68,75503,75504],{"class":85},"date",[68,75506,2294],{"class":872},[68,75508,75509],{"class":587},"getFullYear",[68,75511,4027],{"class":872},[68,75513,75514],{"class":872},"}\u002F${",[68,75516,75504],{"class":85},[68,75518,2294],{"class":872},[68,75520,75521],{"class":587},"getMonth",[68,75523,14647],{"class":872},[68,75525,2217],{"class":102},[68,75527,1112],{"class":92},[68,75529,75514],{"class":872},[68,75531,75504],{"class":85},[68,75533,2294],{"class":872},[68,75535,75536],{"class":587},"getDate",[68,75538,4027],{"class":872},[68,75540,75541],{"class":872},"} ${",[68,75543,2151],{"class":85},[68,75545,75546],{"class":872},"}:${",[68,75548,2280],{"class":85},[68,75550,75546],{"class":872},[68,75552,2431],{"class":85},[68,75554,75555],{"class":872},"}`\n",[68,75557,75558,75561],{"class":70,"line":35178},[68,75559,75560],{"class":102},"      return",[68,75562,75563],{"class":85}," str\n",[68,75565,75566],{"class":70,"line":35184},[68,75567,3787],{"class":85},[68,75569,75570],{"class":70,"line":35211},[68,75571,75572],{"class":74},"    \u002F\u002F 渲染函数\n",[68,75574,75575,75577,75579,75581,75583,75585,75587,75589],{"class":70,"line":35235},[68,75576,12819],{"class":102},[68,75578,71329],{"class":92},[68,75580,15161],{"class":102},[68,75582,55980],{"class":85},[68,75584,55983],{"class":587},[68,75586,997],{"class":85},[68,75588,71340],{"class":872},[68,75590,1757],{"class":85},[68,75592,75593,75595,75597],{"class":70,"line":35241},[68,75594,71666],{"class":102},[68,75596,71669],{"class":587},[68,75598,12451],{"class":85},[68,75600,75601],{"class":70,"line":35247},[68,75602,75603],{"class":74},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[68,75605,75606],{"class":70,"line":35253},[68,75607,75608],{"class":74},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[68,75610,75611,75613,75616,75618,75620,75623,75625,75627,75629,75632,75634,75637],{"class":70,"line":35264},[68,75612,59812],{"class":102},[68,75614,75615],{"class":92}," trArr",[68,75617,15161],{"class":102},[68,75619,53550],{"class":85},[68,75621,75622],{"class":587},"map",[68,75624,997],{"class":85},[68,75626,56033],{"class":102},[68,75628,3260],{"class":85},[68,75630,75631],{"class":6815},"ele",[68,75633,1002],{"class":85},[68,75635,75636],{"class":6815},"index",[68,75638,14039],{"class":85},[68,75640,75641,75643],{"class":70,"line":35275},[68,75642,16349],{"class":102},[68,75644,71750],{"class":872},[68,75646,75647],{"class":70,"line":35281},[68,75648,75649],{"class":872},"      \u003Ctr>\n",[68,75651,75652,75654,75656,75658,75661],{"class":70,"line":35298},[68,75653,71755],{"class":872},[68,75655,75631],{"class":85},[68,75657,2294],{"class":872},[68,75659,75660],{"class":85},"unameId",[68,75662,71770],{"class":872},[68,75664,75665,75667,75669,75671,75673],{"class":70,"line":35321},[68,75666,71755],{"class":872},[68,75668,75631],{"class":85},[68,75670,2294],{"class":872},[68,75672,71786],{"class":85},[68,75674,71770],{"class":872},[68,75676,75677,75679,75681,75683,75685],{"class":70,"line":35344},[68,75678,71755],{"class":872},[68,75680,75631],{"class":85},[68,75682,2294],{"class":872},[68,75684,71803],{"class":85},[68,75686,71770],{"class":872},[68,75688,75689,75691,75693,75695,75697],{"class":70,"line":35350},[68,75690,71755],{"class":872},[68,75692,75631],{"class":85},[68,75694,2294],{"class":872},[68,75696,71820],{"class":85},[68,75698,71770],{"class":872},[68,75700,75701,75703,75705,75707,75709],{"class":70,"line":35355},[68,75702,71755],{"class":872},[68,75704,75631],{"class":85},[68,75706,2294],{"class":872},[68,75708,71837],{"class":85},[68,75710,71770],{"class":872},[68,75712,75713,75715,75717,75719,75721],{"class":70,"line":35364},[68,75714,71755],{"class":872},[68,75716,75631],{"class":85},[68,75718,2294],{"class":872},[68,75720,71854],{"class":85},[68,75722,71770],{"class":872},[68,75724,75725,75727,75729,75731,75733],{"class":70,"line":35374},[68,75726,71755],{"class":872},[68,75728,75631],{"class":85},[68,75730,2294],{"class":872},[68,75732,3987],{"class":85},[68,75734,71770],{"class":872},[68,75736,75737],{"class":70,"line":35380},[68,75738,75193],{"class":872},[68,75740,75741,75744,75746],{"class":70,"line":35385},[68,75742,75743],{"class":872},"          \u003Ca href=\"#\" data-id=\"${",[68,75745,75636],{"class":85},[68,75747,75748],{"class":872},"}\">删除\u003C\u002Fa>\n",[68,75750,75751],{"class":70,"line":35391},[68,75752,75203],{"class":872},[68,75754,75755],{"class":70,"line":35404},[68,75756,75757],{"class":872},"      \u003C\u002Ftr>\n",[68,75759,75760],{"class":70,"line":35410},[68,75761,75762],{"class":872},"  `\n",[68,75764,75765],{"class":70,"line":35421},[68,75766,66398],{"class":85},[68,75768,75769,75771,75773],{"class":70,"line":35432},[68,75770,59828],{"class":85},[68,75772,59831],{"class":587},[68,75774,75775],{"class":85},"(trArr)\n",[68,75777,75778],{"class":70,"line":35451},[68,75779,4000],{"emptyLinePlaceholder":1679},[68,75781,75782],{"class":70,"line":51111},[68,75783,75784],{"class":74},"      \u002F\u002F (2) 把数组转换为字符串join\n",[68,75786,75787],{"class":70,"line":51116},[68,75788,75789],{"class":74},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[68,75791,75792,75794,75796,75799,75802,75804,75807],{"class":70,"line":51125},[68,75793,71681],{"class":85},[68,75795,869],{"class":102},[68,75797,75798],{"class":85}," trArr.",[68,75800,75801],{"class":587},"join",[68,75803,997],{"class":85},[68,75805,75806],{"class":872},"''",[68,75808,1757],{"class":85},[68,75810,75811],{"class":70,"line":51134},[68,75812,75813],{"class":74},"      \u002F\u002F 显示共有几条\n",[68,75815,75816,75818,75820,75822,75825,75828,75830,75832],{"class":70,"line":51139},[68,75817,57355],{"class":85},[68,75819,55983],{"class":587},[68,75821,997],{"class":85},[68,75823,75824],{"class":872},"'.total span'",[68,75826,75827],{"class":85},").innerHTML ",[68,75829,869],{"class":102},[68,75831,53550],{"class":85},[68,75833,57415],{"class":92},[68,75835,75836],{"class":70,"line":51144},[68,75837,3787],{"class":85},[68,75839,75840],{"class":70,"line":51149},[68,75841,75842],{"class":74},"    \u002F\u002F render()\n",[68,75844,75845],{"class":70,"line":51162},[68,75846,4000],{"emptyLinePlaceholder":1679},[68,75848,75849],{"class":70,"line":51167},[68,75850,75851],{"class":74},"    \u002F\u002F 获取DOM对象\n",[68,75853,75854,75856,75858,75860,75862,75864,75866,75868],{"class":70,"line":51176},[68,75855,12819],{"class":102},[68,75857,71403],{"class":92},[68,75859,15161],{"class":102},[68,75861,55980],{"class":85},[68,75863,55983],{"class":587},[68,75865,997],{"class":85},[68,75867,71414],{"class":872},[68,75869,1757],{"class":85},[68,75871,75872,75874,75876,75878,75880,75882,75884,75886],{"class":70,"line":51185},[68,75873,12819],{"class":102},[68,75875,71230],{"class":92},[68,75877,15161],{"class":102},[68,75879,55980],{"class":85},[68,75881,55983],{"class":587},[68,75883,997],{"class":85},[68,75885,71241],{"class":872},[68,75887,1757],{"class":85},[68,75889,75890,75892,75894,75896,75898,75900,75902,75904],{"class":70,"line":51202},[68,75891,12819],{"class":102},[68,75893,17284],{"class":92},[68,75895,15161],{"class":102},[68,75897,55980],{"class":85},[68,75899,55983],{"class":587},[68,75901,997],{"class":85},[68,75903,71260],{"class":872},[68,75905,1757],{"class":85},[68,75907,75909,75911,75913,75915,75917,75919,75921,75923],{"class":70,"line":75908},231,[68,75910,12819],{"class":102},[68,75912,71289],{"class":92},[68,75914,15161],{"class":102},[68,75916,55980],{"class":85},[68,75918,55983],{"class":587},[68,75920,997],{"class":85},[68,75922,71300],{"class":872},[68,75924,1757],{"class":85},[68,75926,75928,75930,75932,75934,75936,75938,75940,75942],{"class":70,"line":75927},232,[68,75929,12819],{"class":102},[68,75931,71269],{"class":92},[68,75933,15161],{"class":102},[68,75935,55980],{"class":85},[68,75937,55983],{"class":587},[68,75939,997],{"class":85},[68,75941,71280],{"class":872},[68,75943,1757],{"class":85},[68,75945,75947,75949,75951,75953,75955,75957,75959,75961],{"class":70,"line":75946},233,[68,75948,12819],{"class":102},[68,75950,71309],{"class":92},[68,75952,15161],{"class":102},[68,75954,55980],{"class":85},[68,75956,55983],{"class":587},[68,75958,997],{"class":85},[68,75960,71320],{"class":872},[68,75962,1757],{"class":85},[68,75964,75966],{"class":70,"line":75965},234,[68,75967,4000],{"emptyLinePlaceholder":1679},[68,75969,75971],{"class":70,"line":75970},235,[68,75972,75973],{"class":74},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[68,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993],{"class":70,"line":75976},236,[68,75978,71421],{"class":85},[68,75980,59397],{"class":587},[68,75982,997],{"class":85},[68,75984,71428],{"class":872},[68,75986,1002],{"class":85},[68,75988,56033],{"class":102},[68,75990,3260],{"class":85},[68,75992,1821],{"class":6815},[68,75994,14039],{"class":85},[68,75996,75998],{"class":70,"line":75997},237,[68,75999,76000],{"class":74},"      \u002F\u002F 禁止浏览器跳转\n",[68,76002,76004,76006,76008],{"class":70,"line":76003},238,[68,76005,71448],{"class":85},[68,76007,71451],{"class":587},[68,76009,3577],{"class":85},[68,76011,76013],{"class":70,"line":76012},239,[68,76014,76015],{"class":74},"      \u002F\u002F 非空判断\n",[68,76017,76019],{"class":70,"line":76018},240,[68,76020,76021],{"class":74},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[68,76023,76025],{"class":70,"line":76024},241,[68,76026,76027],{"class":74},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[68,76029,76031,76033,76035,76037,76040,76042,76045,76048,76050,76052],{"class":70,"line":76030},242,[68,76032,56064],{"class":102},[68,76034,3260],{"class":85},[68,76036,1962],{"class":102},[68,76038,76039],{"class":85},"uname.value ",[68,76041,72936],{"class":102},[68,76043,76044],{"class":102}," !",[68,76046,76047],{"class":85},"age.value ",[68,76049,72936],{"class":102},[68,76051,76044],{"class":102},[68,76053,76054],{"class":85},"salary.value) {\n",[68,76056,76058,76060,76062,76064,76066],{"class":70,"line":76057},243,[68,76059,16349],{"class":102},[68,76061,71522],{"class":587},[68,76063,997],{"class":85},[68,76065,71527],{"class":872},[68,76067,1757],{"class":85},[68,76069,76071],{"class":70,"line":76070},244,[68,76072,53983],{"class":85},[68,76074,76076,76078,76080],{"class":70,"line":76075},245,[68,76077,59591],{"class":85},[68,76079,53469],{"class":587},[68,76081,76082],{"class":85},"({\n",[68,76084,76086],{"class":70,"line":76085},246,[68,76087,76088],{"class":74},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[68,76090,76092],{"class":70,"line":76091},247,[68,76093,76094],{"class":74},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[68,76096,76098],{"class":70,"line":76097},248,[68,76099,76100],{"class":74},"        \u002F\u002F 对象的序号应为数组长度+1\n",[68,76102,76104],{"class":70,"line":76103},249,[68,76105,76106],{"class":74},"        \u002F\u002F unameId: arr.length + 1,\n",[68,76108,76110],{"class":70,"line":76109},250,[68,76111,4000],{"emptyLinePlaceholder":1679},[68,76113,76115],{"class":70,"line":76114},251,[68,76116,76117],{"class":74},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[68,76119,76121],{"class":70,"line":76120},252,[68,76122,76123],{"class":74},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[68,76125,76127],{"class":70,"line":76126},253,[68,76128,76129],{"class":74},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[68,76131,76133],{"class":70,"line":76132},254,[68,76134,76135],{"class":74},"        \u002F\u002F 0当假看\n",[68,76137,76139,76142,76144,76146,76149,76151,76153,76155,76158,76160,76162,76165,76167],{"class":70,"line":76138},255,[68,76140,76141],{"class":85},"        unameId: arr.",[68,76143,53553],{"class":92},[68,76145,75392],{"class":102},[68,76147,76148],{"class":85}," arr[arr.",[68,76150,53553],{"class":92},[68,76152,53856],{"class":102},[68,76154,1112],{"class":92},[68,76156,76157],{"class":85},"].unameId ",[68,76159,2217],{"class":102},[68,76161,1112],{"class":92},[68,76163,76164],{"class":102}," :",[68,76166,1112],{"class":92},[68,76168,33059],{"class":85},[68,76170,76172],{"class":70,"line":76171},256,[68,76173,71575],{"class":85},[68,76175,76177],{"class":70,"line":76176},257,[68,76178,71580],{"class":85},[68,76180,76182],{"class":70,"line":76181},258,[68,76183,71590],{"class":85},[68,76185,76187],{"class":70,"line":76186},259,[68,76188,71585],{"class":85},[68,76190,76192],{"class":70,"line":76191},260,[68,76193,76194],{"class":85},"        city: city.value,\n",[68,76196,76198],{"class":70,"line":76197},261,[68,76199,76200],{"class":74},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[68,76202,76204],{"class":70,"line":76203},262,[68,76205,76206],{"class":74},"        \u002F\u002F time: new Date().toDateString()\n",[68,76208,76210,76213,76216],{"class":70,"line":76209},263,[68,76211,76212],{"class":85},"        time: ",[68,76214,76215],{"class":587},"getTime",[68,76217,3577],{"class":85},[68,76219,76221],{"class":70,"line":76220},264,[68,76222,66398],{"class":85},[68,76224,76226],{"class":70,"line":76225},265,[68,76227,76228],{"class":74},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[68,76230,76232,76234],{"class":70,"line":76231},266,[68,76233,71650],{"class":587},[68,76235,3577],{"class":85},[68,76237,76239,76241,76243,76245,76247],{"class":70,"line":76238},267,[68,76240,71633],{"class":92},[68,76242,2294],{"class":85},[68,76244,71638],{"class":587},[68,76246,14647],{"class":85},[68,76248,76249],{"class":74},"\u002F\u002F重置表单\n",[68,76251,76253],{"class":70,"line":76252},268,[68,76254,76255],{"class":74},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[68,76257,76259,76262,76264,76266,76269,76271,76273,76275,76277],{"class":70,"line":76258},269,[68,76260,76261],{"class":85},"      localStorage.",[68,76263,73233],{"class":587},[68,76265,997],{"class":85},[68,76267,76268],{"class":872},"'data'",[68,76270,1002],{"class":85},[68,76272,73243],{"class":92},[68,76274,2294],{"class":85},[68,76276,73248],{"class":587},[68,76278,76279],{"class":85},"(arr))\n",[68,76281,76283],{"class":70,"line":76282},270,[68,76284,35054],{"class":85},[68,76286,76288],{"class":70,"line":76287},271,[68,76289,4000],{"emptyLinePlaceholder":1679},[68,76291,76293],{"class":70,"line":76292},272,[68,76294,76295],{"class":74},"    \u002F\u002F 3.删除业务\n",[68,76297,76299],{"class":70,"line":76298},273,[68,76300,76301],{"class":74},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[68,76303,76305,76307,76309,76311,76313,76315,76317,76319,76321],{"class":70,"line":76304},274,[68,76306,71923],{"class":85},[68,76308,59397],{"class":587},[68,76310,997],{"class":85},[68,76312,59402],{"class":872},[68,76314,1002],{"class":85},[68,76316,56033],{"class":102},[68,76318,3260],{"class":85},[68,76320,1821],{"class":6815},[68,76322,14039],{"class":85},[68,76324,76326],{"class":70,"line":76325},275,[68,76327,76328],{"class":74},"      \u002F\u002F 判断是否点击的是删除按钮\n",[68,76330,76332,76334,76336,76338,76340],{"class":70,"line":76331},276,[68,76333,56064],{"class":102},[68,76335,68616],{"class":85},[68,76337,56070],{"class":102},[68,76339,69838],{"class":872},[68,76341,14039],{"class":85},[68,76343,76345],{"class":70,"line":76344},277,[68,76346,76347],{"class":74},"        \u002F\u002F alert(1)\n",[68,76349,76351],{"class":70,"line":76350},278,[68,76352,76353],{"class":74},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[68,76355,76357],{"class":70,"line":76356},279,[68,76358,76359],{"class":74},"        \u002F\u002F console.log(e.target)\n",[68,76361,76363],{"class":70,"line":76362},280,[68,76364,76365],{"class":74},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[68,76367,76369],{"class":70,"line":76368},281,[68,76370,4000],{"emptyLinePlaceholder":1679},[68,76372,76374],{"class":70,"line":76373},282,[68,76375,76376],{"class":74},"        \u002F\u002F 确认框，确然是否真的要删除\n",[68,76378,76380],{"class":70,"line":76379},283,[68,76381,76382],{"class":74},"        \u002F\u002F confirm()为确认框\n",[68,76384,76386],{"class":70,"line":76385},284,[68,76387,76388],{"class":74},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[68,76390,76392,76394,76396,76399,76401,76404],{"class":70,"line":76391},285,[68,76393,4097],{"class":102},[68,76395,3260],{"class":85},[68,76397,76398],{"class":587},"confirm",[68,76400,997],{"class":85},[68,76402,76403],{"class":872},"'您确定要删除这条数据吗？'",[68,76405,76406],{"class":85},")) {\n",[68,76408,76410,76413,76415,76417,76419],{"class":70,"line":76409},286,[68,76411,76412],{"class":85},"          arr.",[68,76414,59594],{"class":587},[68,76416,71976],{"class":85},[68,76418,99],{"class":92},[68,76420,1757],{"class":85},[68,76422,76424],{"class":70,"line":76423},287,[68,76425,76426],{"class":74},"          \u002F\u002F 3.4 重新渲染页面\n",[68,76428,76430,76433],{"class":70,"line":76429},288,[68,76431,76432],{"class":587},"          render",[68,76434,3577],{"class":85},[68,76436,76438],{"class":70,"line":76437},289,[68,76439,76440],{"class":74},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[68,76442,76444,76447,76449,76451,76453,76455,76457,76459,76461],{"class":70,"line":76443},290,[68,76445,76446],{"class":85},"          localStorage.",[68,76448,73233],{"class":587},[68,76450,997],{"class":85},[68,76452,76268],{"class":872},[68,76454,1002],{"class":85},[68,76456,73243],{"class":92},[68,76458,2294],{"class":85},[68,76460,73248],{"class":587},[68,76462,76279],{"class":85},[68,76464,76466],{"class":70,"line":76465},291,[68,76467,4129],{"class":85},[68,76469,76471],{"class":70,"line":76470},292,[68,76472,53983],{"class":85},[68,76474,76476],{"class":70,"line":76475},293,[68,76477,4000],{"emptyLinePlaceholder":1679},[68,76479,76481],{"class":70,"line":76480},294,[68,76482,35054],{"class":85},[68,76484,76486],{"class":70,"line":76485},295,[68,76487,4000],{"emptyLinePlaceholder":1679},[68,76489,76491,76493,76495],{"class":70,"line":76490},296,[68,76492,54002],{"class":85},[68,76494,53398],{"class":81},[68,76496,876],{"class":85},[68,76498,76500,76502,76504],{"class":70,"line":76499},297,[68,76501,886],{"class":85},[68,76503,53385],{"class":81},[68,76505,876],{"class":85},[68,76507,76509],{"class":70,"line":76508},298,[68,76510,4000],{"emptyLinePlaceholder":1679},[68,76512,76514,76516,76518],{"class":70,"line":76513},299,[68,76515,886],{"class":85},[68,76517,52228],{"class":81},[68,76519,876],{"class":85},[14,76521,76523],{"id":76522},"_36-正则表达式","3.6 正则表达式",[19,76525,76526],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76528,76529],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76531,76532],{},"正则表达式的作用：",[168,76534,76535,76542,76548],{},[51,76536,76537,76538,76541],{},"表单验证（ ",[1890,76539,76540],{},"匹配"," ）",[51,76543,76544,76545,76541],{},"过滤敏感词（ ",[1890,76546,76547],{},"替换",[51,76549,76550,76551,76541],{},"字符串中提取我们想要的部分（ ",[1890,76552,76553],{},"提取",[43,76555,76557],{"id":76556},"_361-语法","3.6.1 语法",[19,76559,76560],{},"正则表达式使用步骤：",[48,76562,76563,76566],{},[51,76564,76565],{},"定义规则",[51,76567,76568],{},"查找是否匹配",[19,76570,76571],{},"正则表达式里边不需要写引号",[19,76573,76574],{},[38,76575],{"alt":63,"src":76576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76578,76579],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76581,76582],{},"reg.test(str)",[19,76584,76585],{},[38,76586],{"alt":63,"src":76587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76589,76590],{},[38,76591],{"alt":63,"src":76592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[43,76594,76596],{"id":76595},"_362-元字符","3.6.2 元字符",[48,76598,76599,76602,76605,76608,76615],{},[51,76600,76601],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[51,76603,76604],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[51,76606,76607],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[51,76609,76610,76611],{},"正则验证工具：",[1974,76612,76613],{"href":76613,"rel":76614},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25459],[51,76616,76617],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23593,76619,76621],{"id":76620},"_3621-边界符","3.6.2.1 边界符",[19,76623,76624],{},[38,76625],{"alt":63,"src":76626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76628,76629],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76631,76632],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76634,76635],{},"只匹配一次",[19,76637,76638],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23593,76640,76642],{"id":76641},"_3622-量词","3.6.2.2 量词",[19,76644,76645],{},[38,76646],{"alt":63,"src":76647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76649,76650],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23593,76652,76654],{"id":76653},"_3623-元字符","3.6.2.3 元字符",[19,76656,76657],{},[38,76658],{"alt":63,"src":76659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76661,76662],{},"匹配的是a或b或c []只选一个",[19,76664,76665],{},[38,76666],{"alt":63,"src":76667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76669,76670],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76672,76673],{},[38,76674],{"alt":63,"src":76675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76677,76678],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76680,76681],{},[38,76682],{"alt":63,"src":76683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[58,76685,76687],{"className":52226,"code":76686,"language":52228,"meta":63,"style":63},"\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",[65,76688,76689,76699,76713,76717,76725,76739,76759,76771,76779,76783,76791,76799,76804,76835,76862,76890,76894,76899,76927,76958,76963,76968,76999,77031,77063,77067,77072,77103,77133,77163,77167,77172,77203,77234,77264,77294,77298,77303,77336,77340,77345,77376,77407,77411,77416,77447,77477,77508,77512,77517,77549,77580,77611,77638,77669,77701,77734,77765,77796,77828,77859,77867,77875,77879],{"__ignoreMap":63},[68,76690,76691,76693,76695,76697],{"class":70,"line":71},[68,76692,52890],{"class":85},[68,76694,52893],{"class":81},[68,76696,52896],{"class":587},[68,76698,876],{"class":85},[68,76700,76701,76703,76705,76707,76709,76711],{"class":70,"line":78},[68,76702,861],{"class":85},[68,76704,52228],{"class":81},[68,76706,52907],{"class":587},[68,76708,869],{"class":85},[68,76710,52912],{"class":872},[68,76712,876],{"class":85},[68,76714,76715],{"class":70,"line":89},[68,76716,4000],{"emptyLinePlaceholder":1679},[68,76718,76719,76721,76723],{"class":70,"line":115},[68,76720,861],{"class":85},[68,76722,52925],{"class":81},[68,76724,876],{"class":85},[68,76726,76727,76729,76731,76733,76735,76737],{"class":70,"line":280},[68,76728,53729],{"class":85},[68,76730,52935],{"class":81},[68,76732,52938],{"class":587},[68,76734,869],{"class":85},[68,76736,52943],{"class":872},[68,76738,876],{"class":85},[68,76740,76741,76743,76745,76747,76749,76751,76753,76755,76757],{"class":70,"line":301},[68,76742,53729],{"class":85},[68,76744,52935],{"class":81},[68,76746,16516],{"class":587},[68,76748,869],{"class":85},[68,76750,52982],{"class":872},[68,76752,52962],{"class":587},[68,76754,869],{"class":85},[68,76756,52989],{"class":872},[68,76758,876],{"class":85},[68,76760,76761,76763,76765,76767,76769],{"class":70,"line":320},[68,76762,53729],{"class":85},[68,76764,52998],{"class":81},[68,76766,53001],{"class":85},[68,76768,52998],{"class":81},[68,76770,876],{"class":85},[68,76772,76773,76775,76777],{"class":70,"line":2915},[68,76774,886],{"class":85},[68,76776,52925],{"class":81},[68,76778,876],{"class":85},[68,76780,76781],{"class":70,"line":2921},[68,76782,4000],{"emptyLinePlaceholder":1679},[68,76784,76785,76787,76789],{"class":70,"line":2933},[68,76786,861],{"class":85},[68,76788,53385],{"class":81},[68,76790,876],{"class":85},[68,76792,76793,76795,76797],{"class":70,"line":3214},[68,76794,53729],{"class":85},[68,76796,53398],{"class":81},[68,76798,876],{"class":85},[68,76800,76801],{"class":70,"line":3219},[68,76802,76803],{"class":74},"    \u002F\u002F 元字符中\n",[68,76805,76806,76808,76810,76812,76814,76817,76819,76821,76824,76826,76829,76832],{"class":70,"line":3225},[68,76807,75331],{"class":85},[68,76809,59831],{"class":587},[68,76811,997],{"class":85},[68,76813,2320],{"class":872},[68,76815,76816],{"class":49570},"哈",[68,76818,2320],{"class":872},[68,76820,2294],{"class":85},[68,76822,76823],{"class":587},"test",[68,76825,997],{"class":85},[68,76827,76828],{"class":872},"'哈'",[68,76830,76831],{"class":85},"))  ",[68,76833,76834],{"class":74},"\u002F\u002Ftrue\n",[68,76836,76837,76839,76841,76843,76845,76847,76849,76851,76853,76855,76858,76860],{"class":70,"line":3230},[68,76838,75331],{"class":85},[68,76840,59831],{"class":587},[68,76842,997],{"class":85},[68,76844,2320],{"class":872},[68,76846,76816],{"class":49570},[68,76848,2320],{"class":872},[68,76850,2294],{"class":85},[68,76852,76823],{"class":587},[68,76854,997],{"class":85},[68,76856,76857],{"class":872},"'哈哈'",[68,76859,76831],{"class":85},[68,76861,76834],{"class":74},[68,76863,76864,76866,76868,76870,76872,76874,76876,76878,76880,76882,76885,76888],{"class":70,"line":3244},[68,76865,75331],{"class":85},[68,76867,59831],{"class":587},[68,76869,997],{"class":85},[68,76871,2320],{"class":872},[68,76873,76816],{"class":49570},[68,76875,2320],{"class":872},[68,76877,2294],{"class":85},[68,76879,76823],{"class":587},[68,76881,997],{"class":85},[68,76883,76884],{"class":872},"'二哈'",[68,76886,76887],{"class":85},"))   ",[68,76889,76834],{"class":74},[68,76891,76892],{"class":70,"line":3249},[68,76893,4000],{"emptyLinePlaceholder":1679},[68,76895,76896],{"class":70,"line":3255},[68,76897,76898],{"class":74},"    \u002F\u002F 1.边界符\n",[68,76900,76901,76903,76905,76907,76909,76911,76913,76915,76917,76919,76921,76923,76925],{"class":70,"line":3276},[68,76902,75331],{"class":85},[68,76904,59831],{"class":587},[68,76906,997],{"class":85},[68,76908,2320],{"class":872},[68,76910,2701],{"class":102},[68,76912,76816],{"class":49570},[68,76914,2320],{"class":872},[68,76916,2294],{"class":85},[68,76918,76823],{"class":587},[68,76920,997],{"class":85},[68,76922,76828],{"class":872},[68,76924,76831],{"class":85},[68,76926,76834],{"class":74},[68,76928,76929,76931,76933,76935,76937,76939,76941,76943,76945,76947,76949,76951,76953,76955],{"class":70,"line":3281},[68,76930,75331],{"class":85},[68,76932,59831],{"class":587},[68,76934,997],{"class":85},[68,76936,2320],{"class":872},[68,76938,2701],{"class":102},[68,76940,76816],{"class":49570},[68,76942,2038],{"class":102},[68,76944,2320],{"class":872},[68,76946,2294],{"class":85},[68,76948,76823],{"class":587},[68,76950,997],{"class":85},[68,76952,76857],{"class":872},[68,76954,76831],{"class":85},[68,76956,76957],{"class":74},"\u002F\u002Ffalse\n",[68,76959,76960],{"class":70,"line":3295},[68,76961,76962],{"class":74},"    \u002F\u002F 2.量词\n",[68,76964,76965],{"class":70,"line":3300},[68,76966,76967],{"class":74},"    \u002F\u002F 量词 * 类似于 >= 0\n",[68,76969,76970,76972,76974,76976,76978,76980,76982,76985,76987,76989,76991,76993,76995,76997],{"class":70,"line":3329},[68,76971,75331],{"class":85},[68,76973,59831],{"class":587},[68,76975,997],{"class":85},[68,76977,2320],{"class":872},[68,76979,2701],{"class":102},[68,76981,76816],{"class":49570},[68,76983,76984],{"class":102},"*$",[68,76986,2320],{"class":872},[68,76988,2294],{"class":85},[68,76990,76823],{"class":587},[68,76992,997],{"class":85},[68,76994,76857],{"class":872},[68,76996,76831],{"class":85},[68,76998,76834],{"class":74},[68,77000,77001,77003,77005,77007,77009,77011,77013,77015,77017,77019,77021,77023,77026,77028],{"class":70,"line":3334},[68,77002,75331],{"class":85},[68,77004,59831],{"class":587},[68,77006,997],{"class":85},[68,77008,2320],{"class":872},[68,77010,2701],{"class":102},[68,77012,76816],{"class":49570},[68,77014,76984],{"class":102},[68,77016,2320],{"class":872},[68,77018,2294],{"class":85},[68,77020,76823],{"class":587},[68,77022,997],{"class":85},[68,77024,77025],{"class":872},"'二哈好傻'",[68,77027,76831],{"class":85},[68,77029,77030],{"class":74},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[68,77032,77033,77035,77037,77039,77041,77043,77045,77047,77049,77051,77053,77055,77058,77060],{"class":70,"line":3351},[68,77034,75331],{"class":85},[68,77036,59831],{"class":587},[68,77038,997],{"class":85},[68,77040,2320],{"class":872},[68,77042,2701],{"class":102},[68,77044,76816],{"class":49570},[68,77046,76984],{"class":102},[68,77048,2320],{"class":872},[68,77050,2294],{"class":85},[68,77052,76823],{"class":587},[68,77054,997],{"class":85},[68,77056,77057],{"class":872},"'哈好哈'",[68,77059,76887],{"class":85},[68,77061,77062],{"class":74},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[68,77064,77065],{"class":70,"line":3356},[68,77066,4000],{"emptyLinePlaceholder":1679},[68,77068,77069],{"class":70,"line":3361},[68,77070,77071],{"class":74},"    \u002F\u002F +类似于>=1\n",[68,77073,77074,77076,77078,77080,77082,77084,77086,77089,77091,77093,77095,77097,77099,77101],{"class":70,"line":3366},[68,77075,75331],{"class":85},[68,77077,59831],{"class":587},[68,77079,997],{"class":85},[68,77081,2320],{"class":872},[68,77083,2701],{"class":102},[68,77085,76816],{"class":49570},[68,77087,77088],{"class":102},"+$",[68,77090,2320],{"class":872},[68,77092,2294],{"class":85},[68,77094,76823],{"class":587},[68,77096,997],{"class":85},[68,77098,76857],{"class":872},[68,77100,76831],{"class":85},[68,77102,76834],{"class":74},[68,77104,77105,77107,77109,77111,77113,77115,77117,77119,77121,77123,77125,77127,77129,77131],{"class":70,"line":3380},[68,77106,75331],{"class":85},[68,77108,59831],{"class":587},[68,77110,997],{"class":85},[68,77112,2320],{"class":872},[68,77114,2701],{"class":102},[68,77116,76816],{"class":49570},[68,77118,77088],{"class":102},[68,77120,2320],{"class":872},[68,77122,2294],{"class":85},[68,77124,76823],{"class":587},[68,77126,997],{"class":85},[68,77128,77025],{"class":872},[68,77130,76831],{"class":85},[68,77132,77030],{"class":74},[68,77134,77135,77137,77139,77141,77143,77145,77147,77149,77151,77153,77155,77157,77159,77161],{"class":70,"line":3385},[68,77136,75331],{"class":85},[68,77138,59831],{"class":587},[68,77140,997],{"class":85},[68,77142,2320],{"class":872},[68,77144,2701],{"class":102},[68,77146,76816],{"class":49570},[68,77148,77088],{"class":102},[68,77150,2320],{"class":872},[68,77152,2294],{"class":85},[68,77154,76823],{"class":587},[68,77156,997],{"class":85},[68,77158,77057],{"class":872},[68,77160,76887],{"class":85},[68,77162,76957],{"class":74},[68,77164,77165],{"class":70,"line":4177},[68,77166,4000],{"emptyLinePlaceholder":1679},[68,77168,77169],{"class":70,"line":4191},[68,77170,77171],{"class":74},"    \u002F\u002F ?类似于0次或一次\n",[68,77173,77174,77176,77178,77180,77182,77184,77187,77189,77191,77193,77195,77197,77199,77201],{"class":70,"line":4199},[68,77175,75331],{"class":85},[68,77177,59831],{"class":587},[68,77179,997],{"class":85},[68,77181,2320],{"class":872},[68,77183,2701],{"class":102},[68,77185,77186],{"class":49570},"哈？",[68,77188,2038],{"class":102},[68,77190,2320],{"class":872},[68,77192,2294],{"class":85},[68,77194,76823],{"class":587},[68,77196,997],{"class":85},[68,77198,75806],{"class":872},[68,77200,76887],{"class":85},[68,77202,76834],{"class":74},[68,77204,77205,77207,77209,77211,77213,77215,77217,77220,77222,77224,77226,77228,77230,77232],{"class":70,"line":4204},[68,77206,75331],{"class":85},[68,77208,59831],{"class":587},[68,77210,997],{"class":85},[68,77212,2320],{"class":872},[68,77214,2701],{"class":102},[68,77216,76816],{"class":49570},[68,77218,77219],{"class":102},"?$",[68,77221,2320],{"class":872},[68,77223,2294],{"class":85},[68,77225,76823],{"class":587},[68,77227,997],{"class":85},[68,77229,76857],{"class":872},[68,77231,76831],{"class":85},[68,77233,76957],{"class":74},[68,77235,77236,77238,77240,77242,77244,77246,77248,77250,77252,77254,77256,77258,77260,77262],{"class":70,"line":4210},[68,77237,75331],{"class":85},[68,77239,59831],{"class":587},[68,77241,997],{"class":85},[68,77243,2320],{"class":872},[68,77245,2701],{"class":102},[68,77247,76816],{"class":49570},[68,77249,77219],{"class":102},[68,77251,2320],{"class":872},[68,77253,2294],{"class":85},[68,77255,76823],{"class":587},[68,77257,997],{"class":85},[68,77259,77025],{"class":872},[68,77261,76831],{"class":85},[68,77263,77030],{"class":74},[68,77265,77266,77268,77270,77272,77274,77276,77278,77280,77282,77284,77286,77288,77290,77292],{"class":70,"line":4216},[68,77267,75331],{"class":85},[68,77269,59831],{"class":587},[68,77271,997],{"class":85},[68,77273,2320],{"class":872},[68,77275,2701],{"class":102},[68,77277,76816],{"class":49570},[68,77279,77219],{"class":102},[68,77281,2320],{"class":872},[68,77283,2294],{"class":85},[68,77285,76823],{"class":587},[68,77287,997],{"class":85},[68,77289,77057],{"class":872},[68,77291,76831],{"class":85},[68,77293,76957],{"class":74},[68,77295,77296],{"class":70,"line":4221},[68,77297,4000],{"emptyLinePlaceholder":1679},[68,77299,77300],{"class":70,"line":9547},[68,77301,77302],{"class":74},"    \u002F\u002F {n}写几，就必须出现几次\n",[68,77304,77305,77307,77309,77311,77313,77315,77317,77320,77322,77324,77326,77328,77331,77334],{"class":70,"line":9571},[68,77306,75331],{"class":85},[68,77308,59831],{"class":587},[68,77310,997],{"class":85},[68,77312,2320],{"class":872},[68,77314,2701],{"class":102},[68,77316,76816],{"class":49570},[68,77318,77319],{"class":102},"{4}$",[68,77321,2320],{"class":872},[68,77323,2294],{"class":85},[68,77325,76823],{"class":587},[68,77327,997],{"class":85},[68,77329,77330],{"class":872},"'哈哈哈哈'",[68,77332,77333],{"class":85},")) ",[68,77335,76834],{"class":74},[68,77337,77338],{"class":70,"line":9576},[68,77339,4000],{"emptyLinePlaceholder":1679},[68,77341,77342],{"class":70,"line":9582},[68,77343,77344],{"class":74},"    \u002F\u002F {n,}大于等于n次\n",[68,77346,77347,77349,77351,77353,77355,77357,77359,77362,77364,77366,77368,77370,77372,77374],{"class":70,"line":9609},[68,77348,75331],{"class":85},[68,77350,59831],{"class":587},[68,77352,997],{"class":85},[68,77354,2320],{"class":872},[68,77356,2701],{"class":102},[68,77358,76816],{"class":49570},[68,77360,77361],{"class":102},"{4,}$",[68,77363,2320],{"class":872},[68,77365,2294],{"class":85},[68,77367,76823],{"class":587},[68,77369,997],{"class":85},[68,77371,77330],{"class":872},[68,77373,77333],{"class":85},[68,77375,76834],{"class":74},[68,77377,77378,77380,77382,77384,77386,77388,77390,77392,77394,77396,77398,77400,77403,77405],{"class":70,"line":9614},[68,77379,75331],{"class":85},[68,77381,59831],{"class":587},[68,77383,997],{"class":85},[68,77385,2320],{"class":872},[68,77387,2701],{"class":102},[68,77389,76816],{"class":49570},[68,77391,77361],{"class":102},[68,77393,2320],{"class":872},[68,77395,2294],{"class":85},[68,77397,76823],{"class":587},[68,77399,997],{"class":85},[68,77401,77402],{"class":872},"'哈哈哈哈哈'",[68,77404,77333],{"class":85},[68,77406,76834],{"class":74},[68,77408,77409],{"class":70,"line":9620},[68,77410,4000],{"emptyLinePlaceholder":1679},[68,77412,77413],{"class":70,"line":9632},[68,77414,77415],{"class":74},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[68,77417,77418,77420,77422,77424,77426,77428,77430,77433,77435,77437,77439,77441,77443,77445],{"class":70,"line":9644},[68,77419,75331],{"class":85},[68,77421,59831],{"class":587},[68,77423,997],{"class":85},[68,77425,2320],{"class":872},[68,77427,2701],{"class":102},[68,77429,76816],{"class":49570},[68,77431,77432],{"class":102},"{4,6}$",[68,77434,2320],{"class":872},[68,77436,2294],{"class":85},[68,77438,76823],{"class":587},[68,77440,997],{"class":85},[68,77442,77330],{"class":872},[68,77444,77333],{"class":85},[68,77446,76834],{"class":74},[68,77448,77449,77451,77453,77455,77457,77459,77461,77463,77465,77467,77469,77471,77473,77475],{"class":70,"line":9656},[68,77450,75331],{"class":85},[68,77452,59831],{"class":587},[68,77454,997],{"class":85},[68,77456,2320],{"class":872},[68,77458,2701],{"class":102},[68,77460,76816],{"class":49570},[68,77462,77432],{"class":102},[68,77464,2320],{"class":872},[68,77466,2294],{"class":85},[68,77468,76823],{"class":587},[68,77470,997],{"class":85},[68,77472,77402],{"class":872},[68,77474,77333],{"class":85},[68,77476,76834],{"class":74},[68,77478,77479,77481,77483,77485,77487,77489,77491,77493,77495,77497,77499,77501,77504,77506],{"class":70,"line":11314},[68,77480,75331],{"class":85},[68,77482,59831],{"class":587},[68,77484,997],{"class":85},[68,77486,2320],{"class":872},[68,77488,2701],{"class":102},[68,77490,76816],{"class":49570},[68,77492,77432],{"class":102},[68,77494,2320],{"class":872},[68,77496,2294],{"class":85},[68,77498,76823],{"class":587},[68,77500,997],{"class":85},[68,77502,77503],{"class":872},"'哈哈哈哈哈哈哈'",[68,77505,77333],{"class":85},[68,77507,76957],{"class":74},[68,77509,77510],{"class":70,"line":11339},[68,77511,4000],{"emptyLinePlaceholder":1679},[68,77513,77514],{"class":70,"line":11362},[68,77515,77516],{"class":74},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[68,77518,77519,77521,77523,77525,77527,77529,77532,77534,77536,77538,77540,77542,77545,77547],{"class":70,"line":11386},[68,77520,75331],{"class":85},[68,77522,59831],{"class":587},[68,77524,997],{"class":85},[68,77526,2320],{"class":872},[68,77528,2701],{"class":102},[68,77530,77531],{"class":92},"[abc]",[68,77533,2038],{"class":102},[68,77535,2320],{"class":872},[68,77537,2294],{"class":85},[68,77539,76823],{"class":587},[68,77541,997],{"class":85},[68,77543,77544],{"class":872},"'a'",[68,77546,76831],{"class":85},[68,77548,76834],{"class":74},[68,77550,77551,77553,77555,77557,77559,77561,77563,77565,77567,77569,77571,77573,77576,77578],{"class":70,"line":11391},[68,77552,75331],{"class":85},[68,77554,59831],{"class":587},[68,77556,997],{"class":85},[68,77558,2320],{"class":872},[68,77560,2701],{"class":102},[68,77562,77531],{"class":92},[68,77564,2038],{"class":102},[68,77566,2320],{"class":872},[68,77568,2294],{"class":85},[68,77570,76823],{"class":587},[68,77572,997],{"class":85},[68,77574,77575],{"class":872},"'b'",[68,77577,76831],{"class":85},[68,77579,76834],{"class":74},[68,77581,77582,77584,77586,77588,77590,77592,77594,77596,77598,77600,77602,77604,77607,77609],{"class":70,"line":11396},[68,77583,75331],{"class":85},[68,77585,59831],{"class":587},[68,77587,997],{"class":85},[68,77589,2320],{"class":872},[68,77591,2701],{"class":102},[68,77593,77531],{"class":92},[68,77595,2038],{"class":102},[68,77597,2320],{"class":872},[68,77599,2294],{"class":85},[68,77601,76823],{"class":587},[68,77603,997],{"class":85},[68,77605,77606],{"class":872},"'c'",[68,77608,76831],{"class":85},[68,77610,76834],{"class":74},[68,77612,77613,77615,77617,77619,77621,77623,77625,77627,77629,77631,77634,77636],{"class":70,"line":11401},[68,77614,75331],{"class":85},[68,77616,59831],{"class":587},[68,77618,997],{"class":85},[68,77620,2320],{"class":872},[68,77622,77531],{"class":92},[68,77624,2320],{"class":872},[68,77626,2294],{"class":85},[68,77628,76823],{"class":587},[68,77630,997],{"class":85},[68,77632,77633],{"class":872},"'ab'",[68,77635,76831],{"class":85},[68,77637,76834],{"class":74},[68,77639,77640,77642,77644,77646,77648,77650,77652,77654,77656,77658,77660,77662,77664,77666],{"class":70,"line":11410},[68,77641,75331],{"class":85},[68,77643,59831],{"class":587},[68,77645,997],{"class":85},[68,77647,2320],{"class":872},[68,77649,2701],{"class":102},[68,77651,77531],{"class":92},[68,77653,2038],{"class":102},[68,77655,2320],{"class":872},[68,77657,2294],{"class":85},[68,77659,76823],{"class":587},[68,77661,997],{"class":85},[68,77663,77633],{"class":872},[68,77665,76831],{"class":85},[68,77667,77668],{"class":74},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[68,77670,77671,77673,77675,77677,77679,77681,77683,77686,77688,77690,77692,77694,77696,77698],{"class":70,"line":11415},[68,77672,75331],{"class":85},[68,77674,59831],{"class":587},[68,77676,997],{"class":85},[68,77678,2320],{"class":872},[68,77680,2701],{"class":102},[68,77682,77531],{"class":92},[68,77684,77685],{"class":102},"{2}$",[68,77687,2320],{"class":872},[68,77689,2294],{"class":85},[68,77691,76823],{"class":587},[68,77693,997],{"class":85},[68,77695,77633],{"class":872},[68,77697,76831],{"class":85},[68,77699,77700],{"class":74},"\u002F\u002Ftrue   可以选两个\n",[68,77702,77703,77705,77707,77709,77711,77713,77716,77718,77720,77722,77724,77726,77729,77731],{"class":70,"line":11421},[68,77704,75331],{"class":85},[68,77706,59831],{"class":587},[68,77708,997],{"class":85},[68,77710,2320],{"class":872},[68,77712,2701],{"class":102},[68,77714,77715],{"class":92},"[a-z]",[68,77717,2038],{"class":102},[68,77719,2320],{"class":872},[68,77721,2294],{"class":85},[68,77723,76823],{"class":587},[68,77725,997],{"class":85},[68,77727,77728],{"class":872},"'p'",[68,77730,76887],{"class":85},[68,77732,77733],{"class":74},"\u002F\u002Ftrue   依然只能选一个\n",[68,77735,77736,77738,77740,77742,77744,77746,77749,77751,77753,77755,77757,77759,77761,77763],{"class":70,"line":11442},[68,77737,75331],{"class":85},[68,77739,59831],{"class":587},[68,77741,997],{"class":85},[68,77743,2320],{"class":872},[68,77745,2701],{"class":102},[68,77747,77748],{"class":92},"[A-Z]",[68,77750,2038],{"class":102},[68,77752,2320],{"class":872},[68,77754,2294],{"class":85},[68,77756,76823],{"class":587},[68,77758,997],{"class":85},[68,77760,77728],{"class":872},[68,77762,76887],{"class":85},[68,77764,76957],{"class":74},[68,77766,77767,77769,77771,77773,77775,77777,77779,77781,77783,77785,77787,77789,77792,77794],{"class":70,"line":11448},[68,77768,75331],{"class":85},[68,77770,59831],{"class":587},[68,77772,997],{"class":85},[68,77774,2320],{"class":872},[68,77776,2701],{"class":102},[68,77778,77748],{"class":92},[68,77780,2038],{"class":102},[68,77782,2320],{"class":872},[68,77784,2294],{"class":85},[68,77786,76823],{"class":587},[68,77788,997],{"class":85},[68,77790,77791],{"class":872},"'P'",[68,77793,76887],{"class":85},[68,77795,76834],{"class":74},[68,77797,77798,77800,77802,77804,77806,77808,77811,77813,77815,77817,77819,77821,77824,77826],{"class":70,"line":11462},[68,77799,75331],{"class":85},[68,77801,59831],{"class":587},[68,77803,997],{"class":85},[68,77805,2320],{"class":872},[68,77807,2701],{"class":102},[68,77809,77810],{"class":92},"[0-9]",[68,77812,2038],{"class":102},[68,77814,2320],{"class":872},[68,77816,2294],{"class":85},[68,77818,76823],{"class":587},[68,77820,997],{"class":85},[68,77822,77823],{"class":872},"'0'",[68,77825,76887],{"class":85},[68,77827,76834],{"class":74},[68,77829,77830,77832,77834,77836,77838,77840,77843,77845,77847,77849,77851,77853,77855,77857],{"class":70,"line":11468},[68,77831,75331],{"class":85},[68,77833,59831],{"class":587},[68,77835,997],{"class":85},[68,77837,2320],{"class":872},[68,77839,2701],{"class":102},[68,77841,77842],{"class":92},"[a-zA-Z0-9]",[68,77844,2038],{"class":102},[68,77846,2320],{"class":872},[68,77848,2294],{"class":85},[68,77850,76823],{"class":587},[68,77852,997],{"class":85},[68,77854,77728],{"class":872},[68,77856,76831],{"class":85},[68,77858,76834],{"class":74},[68,77860,77861,77863,77865],{"class":70,"line":11495},[68,77862,54002],{"class":85},[68,77864,53398],{"class":81},[68,77866,876],{"class":85},[68,77868,77869,77871,77873],{"class":70,"line":11504},[68,77870,886],{"class":85},[68,77872,53385],{"class":81},[68,77874,876],{"class":85},[68,77876,77877],{"class":70,"line":11510},[68,77878,4000],{"emptyLinePlaceholder":1679},[68,77880,77881,77883,77885],{"class":70,"line":11518},[68,77882,886],{"class":85},[68,77884,52228],{"class":81},[68,77886,876],{"class":85},[23593,77888,77890],{"id":77889},"_3624-修饰符","3.6.2.4 修饰符",[19,77892,77893],{},[38,77894],{"alt":63,"src":77895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77897,77898],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77900,77901],{},[38,77902],{"alt":63,"src":77903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[58,77905,77907],{"className":52226,"code":77906,"language":52228,"meta":63,"style":63},"\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",[65,77908,77909,77919,77933,77941,77955,77975,77987,77995,78003,78011,78043,78074,78079,78111,78122,78155,78164,78172,78180],{"__ignoreMap":63},[68,77910,77911,77913,77915,77917],{"class":70,"line":71},[68,77912,52890],{"class":85},[68,77914,52893],{"class":81},[68,77916,52896],{"class":587},[68,77918,876],{"class":85},[68,77920,77921,77923,77925,77927,77929,77931],{"class":70,"line":78},[68,77922,861],{"class":85},[68,77924,52228],{"class":81},[68,77926,52907],{"class":587},[68,77928,869],{"class":85},[68,77930,52912],{"class":872},[68,77932,876],{"class":85},[68,77934,77935,77937,77939],{"class":70,"line":89},[68,77936,861],{"class":85},[68,77938,52925],{"class":81},[68,77940,876],{"class":85},[68,77942,77943,77945,77947,77949,77951,77953],{"class":70,"line":115},[68,77944,53729],{"class":85},[68,77946,52935],{"class":81},[68,77948,52938],{"class":587},[68,77950,869],{"class":85},[68,77952,52943],{"class":872},[68,77954,876],{"class":85},[68,77956,77957,77959,77961,77963,77965,77967,77969,77971,77973],{"class":70,"line":280},[68,77958,53729],{"class":85},[68,77960,52935],{"class":81},[68,77962,16516],{"class":587},[68,77964,869],{"class":85},[68,77966,52982],{"class":872},[68,77968,52962],{"class":587},[68,77970,869],{"class":85},[68,77972,52989],{"class":872},[68,77974,876],{"class":85},[68,77976,77977,77979,77981,77983,77985],{"class":70,"line":301},[68,77978,53729],{"class":85},[68,77980,52998],{"class":81},[68,77982,53001],{"class":85},[68,77984,52998],{"class":81},[68,77986,876],{"class":85},[68,77988,77989,77991,77993],{"class":70,"line":320},[68,77990,886],{"class":85},[68,77992,52925],{"class":81},[68,77994,876],{"class":85},[68,77996,77997,77999,78001],{"class":70,"line":2915},[68,77998,861],{"class":85},[68,78000,53385],{"class":81},[68,78002,876],{"class":85},[68,78004,78005,78007,78009],{"class":70,"line":2921},[68,78006,53729],{"class":85},[68,78008,53398],{"class":81},[68,78010,876],{"class":85},[68,78012,78013,78015,78017,78019,78021,78023,78026,78028,78030,78032,78034,78036,78039,78041],{"class":70,"line":2933},[68,78014,75331],{"class":85},[68,78016,59831],{"class":587},[68,78018,997],{"class":85},[68,78020,2320],{"class":872},[68,78022,2701],{"class":102},[68,78024,78025],{"class":49570},"java",[68,78027,2038],{"class":102},[68,78029,2320],{"class":872},[68,78031,2294],{"class":85},[68,78033,76823],{"class":587},[68,78035,997],{"class":85},[68,78037,78038],{"class":872},"'java'",[68,78040,77333],{"class":85},[68,78042,76834],{"class":74},[68,78044,78045,78047,78049,78051,78053,78055,78057,78059,78061,78063,78065,78067,78070,78072],{"class":70,"line":3214},[68,78046,75331],{"class":85},[68,78048,59831],{"class":587},[68,78050,997],{"class":85},[68,78052,2320],{"class":872},[68,78054,2701],{"class":102},[68,78056,78025],{"class":49570},[68,78058,2038],{"class":102},[68,78060,2320],{"class":872},[68,78062,2294],{"class":85},[68,78064,76823],{"class":587},[68,78066,997],{"class":85},[68,78068,78069],{"class":872},"'Java'",[68,78071,77333],{"class":85},[68,78073,76957],{"class":74},[68,78075,78076],{"class":70,"line":3219},[68,78077,78078],{"class":74},"    \u002F\u002F 不区分大小写、\n",[68,78080,78081,78083,78085,78087,78089,78091,78093,78095,78097,78099,78101,78103,78105,78107,78109],{"class":70,"line":3225},[68,78082,75331],{"class":85},[68,78084,59831],{"class":587},[68,78086,997],{"class":85},[68,78088,2320],{"class":872},[68,78090,2701],{"class":102},[68,78092,78025],{"class":49570},[68,78094,2038],{"class":102},[68,78096,2320],{"class":872},[68,78098,2177],{"class":102},[68,78100,2294],{"class":85},[68,78102,76823],{"class":587},[68,78104,997],{"class":85},[68,78106,78069],{"class":872},[68,78108,77333],{"class":85},[68,78110,76834],{"class":74},[68,78112,78113,78115,78117,78119],{"class":70,"line":3230},[68,78114,12819],{"class":102},[68,78116,75497],{"class":92},[68,78118,15161],{"class":102},[68,78120,78121],{"class":872}," 'java是一门编程语言，学完java工资很高'\n",[68,78123,78124,78126,78129,78131,78134,78137,78139,78141,78143,78145,78148,78150,78153],{"class":70,"line":3244},[68,78125,12819],{"class":102},[68,78127,78128],{"class":92}," result",[68,78130,15161],{"class":102},[68,78132,78133],{"class":85}," str.",[68,78135,78136],{"class":587},"replace",[68,78138,997],{"class":85},[68,78140,2320],{"class":872},[68,78142,78025],{"class":49570},[68,78144,2320],{"class":872},[68,78146,78147],{"class":102},"ig",[68,78149,1002],{"class":85},[68,78151,78152],{"class":872},"'前端'",[68,78154,1757],{"class":85},[68,78156,78157,78159,78161],{"class":70,"line":3249},[68,78158,75331],{"class":85},[68,78160,59831],{"class":587},[68,78162,78163],{"class":85},"(result)\n",[68,78165,78166,78168,78170],{"class":70,"line":3255},[68,78167,54002],{"class":85},[68,78169,53398],{"class":81},[68,78171,876],{"class":85},[68,78173,78174,78176,78178],{"class":70,"line":3276},[68,78175,886],{"class":85},[68,78177,53385],{"class":81},[68,78179,876],{"class":85},[68,78181,78182,78184,78186],{"class":70,"line":3281},[68,78183,886],{"class":85},[68,78185,52228],{"class":81},[68,78187,876],{"class":85},[1652,78189,78190],{},"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":63,"searchDepth":78,"depth":78,"links":78192},[78193,78203,78215,78232,78239,78247],{"id":54945,"depth":78,"text":54946,"children":78194},[78195,78196,78197,78198,78199,78200,78201,78202],{"id":54949,"depth":89,"text":54950},{"id":54982,"depth":89,"text":54983},{"id":55021,"depth":89,"text":55022},{"id":55178,"depth":89,"text":55179},{"id":55226,"depth":89,"text":55227},{"id":55363,"depth":89,"text":55364},{"id":55685,"depth":89,"text":55686},{"id":58673,"depth":89,"text":58674},{"id":58701,"depth":78,"text":58702,"children":78204},[78205,78206,78207,78208,78209,78210,78211,78212,78213,78214],{"id":58705,"depth":89,"text":58706},{"id":58728,"depth":89,"text":58729},{"id":59643,"depth":89,"text":59644},{"id":60333,"depth":89,"text":60334},{"id":60615,"depth":89,"text":60616},{"id":64775,"depth":89,"text":64776},{"id":64945,"depth":89,"text":64946},{"id":65073,"depth":89,"text":65074},{"id":65098,"depth":89,"text":65099},{"id":66487,"depth":89,"text":66488},{"id":67639,"depth":78,"text":67640,"children":78216},[78217,78218,78219,78220,78221,78222,78223,78224,78225,78226,78227,78228,78229,78230,78231],{"id":67643,"depth":89,"text":67644},{"id":68297,"depth":89,"text":68298},{"id":69992,"depth":89,"text":69993},{"id":70033,"depth":89,"text":70034},{"id":70075,"depth":89,"text":70076},{"id":70089,"depth":89,"text":70090},{"id":70138,"depth":89,"text":70139},{"id":70150,"depth":89,"text":70151},{"id":70165,"depth":89,"text":70166},{"id":70201,"depth":89,"text":70202},{"id":70282,"depth":89,"text":70283},{"id":70410,"depth":89,"text":70411},{"id":70422,"depth":89,"text":70423},{"id":70441,"depth":89,"text":70442},{"id":72549,"depth":89,"text":72550},{"id":72568,"depth":78,"text":72569,"children":78233},[78234,78235,78236,78237,78238],{"id":72589,"depth":89,"text":72590},{"id":72609,"depth":89,"text":72610},{"id":72658,"depth":89,"text":72659},{"id":72783,"depth":89,"text":72784},{"id":72964,"depth":89,"text":72965},{"id":72982,"depth":78,"text":72983,"children":78240},[78241,78242,78243,78244,78245,78246],{"id":72997,"depth":89,"text":72998},{"id":73056,"depth":89,"text":73057},{"id":73080,"depth":89,"text":73081},{"id":73400,"depth":89,"text":73401},{"id":73432,"depth":89,"text":73433},{"id":73455,"depth":89,"text":73456},{"id":76522,"depth":78,"text":76523,"children":78248},[78249,78250],{"id":76556,"depth":89,"text":76557},{"id":76595,"depth":89,"text":76596},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54917,"description":1676},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78257,"title":78258,"body":78259,"description":1676,"extension":1677,"meta":94394,"navigation":1679,"path":94395,"seo":94396,"stem":94397,"__hash__":94398},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78260,"toc":94330},[78261,78264,78267,78271,78275,78280,78285,78296,78300,78305,78308,78312,78315,78320,78324,78328,78331,78336,78339,78343,78346,78354,78357,78361,78366,78371,78374,78378,78383,78388,78391,78395,78400,78403,78408,78411,78416,78419,78424,78429,78432,78435,78439,78444,78449,78452,78456,78460,78463,78466,78469,78473,78477,78482,78487,78490,78494,78499,78504,78507,78510,78513,78516,78519,78522,78525,78528,78531,78536,78540,78545,78550,78553,78556,78559,78562,78565,78568,78571,78574,78578,78582,78585,78588,78591,78596,78598,78601,78604,78607,78610,78613,78616,78619,78622,78625,78628,78631,78634,78637,78642,78647,78652,78655,78659,78662,78667,78671,78673,78684,78689,78790,78793,78796,78799,78802,78805,78808,78811,78814,78816,78819,78822,78825,78828,78831,78833,78836,78839,78842,78845,78848,78851,78853,78856,78858,78860,78863,78867,78871,78874,78877,78880,78883,78886,78889,78892,78895,78898,78903,79023,79026,79029,79034,79037,79040,79043,79046,79051,79054,79057,79060,79063,79068,79071,79171,79236,79310,79314,79317,79320,79324,79327,79341,79370,79373,79376,79379,79382,79385,79388,79391,79393,79396,79399,79402,79405,79409,79414,79418,79423,79498,79501,79684,79687,79690,79693,79696,79699,79701,79704,79707,79710,79713,79716,79719,79721,79725,79728,79733,79736,79739,79742,79745,79747,79752,79755,79758,79761,79764,79766,79771,79774,79777,79779,79781,79784,79788,79791,79794,79799,79802,79805,79808,79858,79863,79867,79872,79875,79944,79947,79956,79960,79965,79968,79971,79979,79982,79999,81800,81804,81808,81813,81816,81820,81826,81832,81984,81989,81994,81997,82000,82003,82006,82009,82012,82015,82018,82021,82024,82027,82030,82035,82039,82042,82053,82057,82062,82065,82068,82071,82074,82077,82079,82082,82085,82088,82091,82093,82110,82113,82117,82120,82125,82130,82133,82136,82140,82143,82146,82155,82158,82162,82165,82170,82175,82242,82246,82249,82252,82257,82262,82348,82353,82357,82360,82363,82378,82381,82386,82390,82395,82504,82507,82518,82668,82672,82677,82786,82790,82795,82800,82805,82808,82815,82835,82871,83035,83040,83043,83048,83055,83058,83061,83064,83123,83179,83235,83239,83244,83559,83562,83566,83569,83574,83683,83688,83692,83697,83701,83772,83776,83778,83781,83784,83822,84098,84102,84119,84185,84219,84223,84226,84231,84260,84267,84276,84281,84296,84301,84310,84313,84450,84454,84516,84520,84525,84770,84774,84779,84782,84785,84788,84791,84795,84800,86381,86385,86389,86395,86398,86403,86407,86410,86415,86418,86429,86433,86438,86442,86447,86452,86455,86460,86464,86468,86471,86476,86481,86484,86487,86490,86612,86617,86719,86722,86725,86729,86734,86906,86911,86915,86918,86923,86989,86994,86997,87128,87131,87136,87139,87142,87233,87238,87241,87244,87247,87250,87255,87260,87263,87268,87273,87278,87282,87285,87288,87293,87298,87303,87308,87362,87365,87368,87373,87376,87379,87384,87389,87394,87398,87403,87417,87422,87425,87430,87434,87439,87444,87449,87454,87459,87464,87469,87474,87477,87481,87486,87489,87492,87495,87500,87505,87508,87511,87515,87518,87521,87526,87531,87536,87541,87544,87549,87554,87615,87620,87623,87628,88868,88873,88877,88881,88886,88889,88894,88899,88902,88907,88909,88914,88918,88921,88924,88935,88939,88944,88949,89004,89009,89014,89019,89230,89235,89239,89244,89247,89249,89252,89255,89702,89707,89714,89720,89723,89726,89990,89995,89999,90264,90269,90273,90278,90283,90288,90293,90624,90627,90632,90637,90640,90644,90648,90653,90658,90663,90668,90673,90678,90682,90685,90690,90695,90698,90772,90777,90782,90787,90789,90792,91162,91167,91172,91177,91180,91183,91285,91290,91295,91398,91402,91407,91411,91415,91420,91425,91428,91433,91436,91439,91832,91837,91840,91843,91846,91849,92369,92373,92378,92383,92388,92391,92396,92399,92402,92784,92789,92791,92793,92796,92799,93311,93315,93376,93379,93382,93385,93389,93392,93397,93402,94327],[10,78262,78258],{"id":78263},"_4js进阶",[19,78265,78266],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78268,78270],{"id":78269},"_41-作用域","4.1 作用域",[43,78272,78274],{"id":78273},"_411-局部作用域","4.1.1 局部作用域",[19,78276,78277],{},[38,78278],{"alt":63,"src":78279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78281,78282],{},[38,78283],{"alt":63,"src":78284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[168,78286,78287,78290,78293],{},[51,78288,78289],{},"函数作用域在函数内部",[51,78291,78292],{},"块级作用域在{}",[51,78294,78295],{},"对象的那个{}不是作用域，不是块作用域",[43,78297,78299],{"id":78298},"_412-全局作用域","4.1.2 全局作用域",[19,78301,78302],{},[38,78303],{"alt":63,"src":78304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78306,78307],{},"window.a=10不要这样写",[43,78309,78311],{"id":78310},"_413-作用域链","4.1.3 作用域链",[19,78313,78314],{},"变量查找机制",[19,78316,78317],{},[38,78318],{"alt":63,"src":78319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78321,78323],{"id":78322},"_42-垃圾回收机制","4.2 垃圾回收机制",[43,78325,78327],{"id":78326},"_421-大体介绍","4.2.1 大体介绍",[19,78329,78330],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78332,78333],{},[38,78334],{"alt":63,"src":78335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78337,78338],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[43,78340,78342],{"id":78341},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78344,78345],{},"堆栈空间分配区别：",[48,78347,78348,78351],{},[51,78349,78350],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[51,78352,78353],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78355,78356],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23593,78358,78360],{"id":78359},"_4221-引用计数","4.2.2.1 引用计数",[19,78362,78363],{},[38,78364],{"alt":63,"src":78365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78367,78368],{},[38,78369],{"alt":63,"src":78370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78372,78373],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23593,78375,78377],{"id":78376},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78379,78380],{},[38,78381],{"alt":63,"src":78382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78384,78385],{},[38,78386],{"alt":63,"src":78387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78389,78390],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78392,78394],{"id":78393},"_43-闭包","4.3 闭包",[19,78396,78397],{},[38,78398],{"alt":63,"src":78399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78401,78402],{},"闭包：内层函数+外层函数的变量",[19,78404,78405],{},[38,78406],{"alt":63,"src":78407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78409,78410],{},"closure就是闭包",[19,78412,78413],{},[38,78414],{"alt":63,"src":78415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78417,78418],{},"内层函数必须包含外层函数的变量才是闭包",[19,78420,78421],{},[38,78422],{"alt":63,"src":78423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78425,78426],{},[38,78427],{"alt":63,"src":78428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78430,78431],{},"闭包可能会引起内存泄漏",[19,78433,78434],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78436,78438],{"id":78437},"_44-变量提升","4.4 变量提升",[19,78440,78441],{},[38,78442],{"alt":63,"src":78443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78445,78446],{},[38,78447],{"alt":63,"src":78448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78450,78451],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78453,78455],{"id":78454},"_45-函数进阶","4.5 函数进阶",[43,78457,78459],{"id":78458},"_451-函数提升","4.5.1 函数提升",[19,78461,78462],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78464,78465],{},"只提升函数声明，不提升函数调用",[53398,78467,78468],{},"\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",[43,78470,78472],{"id":78471},"_452-函数参数","4.5.2 函数参数",[23593,78474,78476],{"id":78475},"_4521-动态参数","4.5.2.1 动态参数",[19,78478,78479],{},[38,78480],{"alt":63,"src":78481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78483,78484],{},[38,78485],{"alt":63,"src":78486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78488,78489],{},"箭头函数里边没有arguments",[23593,78491,78493],{"id":78492},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78495,78496],{},[38,78497],{"alt":63,"src":78498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78500,78501],{},[38,78502],{"alt":63,"src":78503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78505,78506],{},"剩余参数使用的时候不需要写...",[19,78508,78509],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78511,78512],{},"  function getSum(a,b,...arr) {",[19,78514,78515],{},"  console.log(11)",[19,78517,78518],{},"  }",[19,78520,78521],{},"  getSum(1,2,3,4)",[19,78523,78524],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78526,78527],{},"  getSum(1,2)",[19,78529,78530],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78532,78533],{},[38,78534],{"alt":63,"src":78535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23593,78537,78539],{"id":78538},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78541,78542],{},[38,78543],{"alt":63,"src":78544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78546,78547],{},[38,78548],{"alt":63,"src":78549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78551,78552],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78554,78555],{},"展开运算符可以用于数组之间的合并：",[19,78557,78558],{},"const arr1 = [1, 2, 3]",[19,78560,78561],{},"const arr2 = [3, 4, 5]",[19,78563,78564],{},"const arr = [...arr1, ...arr2]",[19,78566,78567],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78569,78570],{},"剩余参数：函数参数使用，得到真数组",[19,78572,78573],{},"展开运算符：数组中使用，数组展开",[43,78575,78577],{"id":78576},"_453-箭头函数","4.5.3 箭头函数",[23593,78579,78581],{"id":78580},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78583,78584],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78586,78587],{},"它不是万能的！！！",[19,78589,78590],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78592,78593],{},[38,78594],{"alt":63,"src":78595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78597,1780],{},[19,78599,78600],{},"① 只有一个形参的时候，可以省略小括号：",[19,78602,78603],{},"const fn=x=>{console.log(x)}",[19,78605,78606],{},"② 只有一行代码时可以省略大括号：",[19,78608,78609],{},"const fn=x=>console.log(11)",[19,78611,78612],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78614,78615],{},"const fn=x=>x+x",[19,78617,78618],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78620,78621],{},"⑤ 阻止表单默认提交：",[19,78623,78624],{},"const form = document.querySelector('form')",[19,78626,78627],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78629,78630],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78632,78633],{},"const fn=uname=>({uname:uname})",[19,78635,78636],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78638,78639],{},[38,78640],{"alt":63,"src":78641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78643,78644],{},[38,78645],{"alt":63,"src":78646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78648,78649],{},[38,78650],{"alt":63,"src":78651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78653,78654],{},"一定不要忘记用()，有()就理解为自带return",[23593,78656,78658],{"id":78657},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78660,78661],{},"箭头函数是没有动态参数的arguments",[19,78663,78664],{},[38,78665],{"alt":63,"src":78666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23593,78668,78670],{"id":78669},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78672,12930],{},[48,78674,78675,78678,78681],{},[51,78676,78677],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[51,78679,78680],{},"事件回调函数使用箭头函数时，this 为全局的 window",[51,78682,78683],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78685,78686],{},[38,78687],{"alt":63,"src":78688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[58,78690,78692],{"className":54652,"code":78691,"language":54654,"meta":63,"style":63},"  \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",[65,78693,78694,78702,78707,78712,78717,78722,78727,78731,78736,78740,78744,78749,78754,78759,78763,78767,78772,78777,78782],{"__ignoreMap":63},[68,78695,78696,78698,78700],{"class":70,"line":71},[68,78697,53729],{"class":85},[68,78699,53398],{"class":81},[68,78701,876],{"class":85},[68,78703,78704],{"class":70,"line":78},[68,78705,78706],{"class":85},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[68,78708,78709],{"class":70,"line":89},[68,78710,78711],{"class":85},"    console.log(this) \u002F\u002F指向window\n",[68,78713,78714],{"class":70,"line":115},[68,78715,78716],{"class":85},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[68,78718,78719],{"class":70,"line":280},[68,78720,78721],{"class":85},"    function fn() {\n",[68,78723,78724],{"class":70,"line":301},[68,78725,78726],{"class":85},"      console.log(this)  \u002F\u002F指向window\n",[68,78728,78729],{"class":70,"line":320},[68,78730,3787],{"class":85},[68,78732,78733],{"class":70,"line":2915},[68,78734,78735],{"class":85},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[68,78737,78738],{"class":70,"line":2921},[68,78739,4000],{"emptyLinePlaceholder":1679},[68,78741,78742],{"class":70,"line":2933},[68,78743,73102],{"class":85},[68,78745,78746],{"class":70,"line":3214},[68,78747,78748],{"class":85},"      name: 'andy',\n",[68,78750,78751],{"class":70,"line":3219},[68,78752,78753],{"class":85},"      sayHai: function () {\n",[68,78755,78756],{"class":70,"line":3225},[68,78757,78758],{"class":85},"        console.log(this)\n",[68,78760,78761],{"class":70,"line":3230},[68,78762,53983],{"class":85},[68,78764,78765],{"class":70,"line":3244},[68,78766,3787],{"class":85},[68,78768,78769],{"class":70,"line":3249},[68,78770,78771],{"class":85},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[68,78773,78774],{"class":70,"line":3255},[68,78775,78776],{"class":85},"    \u002F\u002F 2.箭头函数的this\n",[68,78778,78779],{"class":70,"line":3276},[68,78780,78781],{"class":85},"    const fn = () => console.log(this)\n",[68,78783,78784,78786,78788],{"class":70,"line":3281},[68,78785,54002],{"class":85},[68,78787,53398],{"class":81},[68,78789,876],{"class":85},[19,78791,78792],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78794,78795],{},"const fn = () => console.log(this)",[19,78797,78798],{},"fn() \u002F\u002F指向window",[19,78800,78801],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78803,78804],{},"①",[19,78806,78807],{},"const obj = {",[19,78809,78810],{},"uname: 'pink老师',",[19,78812,78813],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78815,2681],{},[19,78817,78818],{},"调用对象里边的函数",[19,78820,78821],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78823,78824],{},"obj.sayHai()",[19,78826,78827],{},"②",[19,78829,78830],{},"const obj1 = {",[19,78832,78810],{},[19,78834,78835],{},"sayHai: function () {",[19,78837,78838],{},"let i = 10",[19,78840,78841],{},"const count = () => {",[19,78843,78844],{},"console.log(this)",[19,78846,78847],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78849,78850],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78852,2681],{},[19,78854,78855],{},"count()",[19,78857,2681],{},[19,78859,2681],{},[19,78861,78862],{},"obj1.sayHai()",[14,78864,78866],{"id":78865},"_46-解构赋值","4.6 解构赋值",[43,78868,78870],{"id":78869},"_461-数组解构","4.6.1 数组解构",[19,78872,78873],{},"以前要是使用数组中的值的话：",[19,78875,78876],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78878,78879],{},"const arr=[100,60,80]",[19,78881,78882],{},"const max=arr[0]",[19,78884,78885],{},"const min=arr[1]",[19,78887,78888],{},"const avg=arr[2]",[19,78890,78891],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78893,78894],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78896,78897],{},"这个写法就类似于上边的那种用很多const的方法",[19,78899,78900],{},[38,78901],{"alt":63,"src":78902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[58,78904,78906],{"className":52226,"code":78905,"language":52228,"meta":63,"style":63},"①变量之间交换值:\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",[65,78907,78908,78913,78918,78923,78928,78933,78937,78941,78946,78950,78955,78960,78964,78969,78974,78985,78995,79000,79005,79010,79014,79018],{"__ignoreMap":63},[68,78909,78910],{"class":70,"line":71},[68,78911,78912],{"class":85},"①变量之间交换值:\n",[68,78914,78915],{"class":70,"line":78},[68,78916,78917],{"class":85},"let a=1\n",[68,78919,78920],{"class":70,"line":89},[68,78921,78922],{"class":85},"let b=2;\n",[68,78924,78925],{"class":70,"line":115},[68,78926,78927],{"class":85},"必须加这行代码，不然就会报错\n",[68,78929,78930],{"class":70,"line":280},[68,78931,78932],{"class":85},"[b,a]=[a,b]\n",[68,78934,78935],{"class":70,"line":301},[68,78936,4000],{"emptyLinePlaceholder":1679},[68,78938,78939],{"class":70,"line":320},[68,78940,4000],{"emptyLinePlaceholder":1679},[68,78942,78943],{"class":70,"line":2915},[68,78944,78945],{"class":85},"可以写成下面的方式：\n",[68,78947,78948],{"class":70,"line":2921},[68,78949,78917],{"class":85},[68,78951,78952],{"class":70,"line":2933},[68,78953,78954],{"class":85},"let b=2\n",[68,78956,78957],{"class":70,"line":3214},[68,78958,78959],{"class":85},";[b,a]=[a,b]\n",[68,78961,78962],{"class":70,"line":3219},[68,78963,4000],{"emptyLinePlaceholder":1679},[68,78965,78966],{"class":70,"line":3225},[68,78967,78968],{"class":85},"②排序\n",[68,78970,78971],{"class":70,"line":3230},[68,78972,78973],{"class":85},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[68,78975,78976,78979,78982],{"class":70,"line":3244},[68,78977,78978],{"class":85},"for (let i = 0; i ",[68,78980,861],{"class":78981},"s7hpK",[68,78983,78984],{"class":85}," arr1.length; i++) {\n",[68,78986,78987,78990,78992],{"class":70,"line":3249},[68,78988,78989],{"class":85},"   for (let j = 0; j ",[68,78991,861],{"class":78981},[68,78993,78994],{"class":85}," arr1.length - 1; j++) {\n",[68,78996,78997],{"class":70,"line":3255},[68,78998,78999],{"class":85},"      if (arr1[j] > arr1[j + 1]) {\n",[68,79001,79002],{"class":70,"line":3276},[68,79003,79004],{"class":85},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[68,79006,79007],{"class":70,"line":3281},[68,79008,79009],{"class":85},"       }\n",[68,79011,79012],{"class":70,"line":3295},[68,79013,5908],{"class":85},[68,79015,79016],{"class":70,"line":3300},[68,79017,118],{"class":85},[68,79019,79020],{"class":70,"line":3329},[68,79021,79022],{"class":85},"console.log(arr1)\n",[19,79024,79025],{},"数组解构的细节：",[19,79027,79028],{},"①变量多，单元值少",[19,79030,79031],{},[38,79032],{"alt":63,"src":79033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79035,79036],{},"防止出现undefined的方法：",[19,79038,79039],{},"const [a=0,b=0] =[1]",[19,79041,79042],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79044,79045],{},"②变量少，单元值多",[19,79047,79048],{},[38,79049],{"alt":63,"src":79050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79052,79053],{},"此时可以使用剩余参数来接收多余的值",[19,79055,79056],{},"const [a,b,...c]=[1,2,3,4]",[19,79058,79059],{},"console.log(c) 输出[3,4]",[19,79061,79062],{},"③可以按需导入，忽略某些返回值",[19,79064,79065],{},[38,79066],{"alt":63,"src":79067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79069,79070],{},"④支持多维数组的结构",[58,79072,79076],{"className":79073,"code":79074,"language":79075,"meta":63,"style":63},"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",[65,79077,79078,79106,79122,79137,79152],{"__ignoreMap":63},[68,79079,79080,79082,79084,79086,79088,79090,79092,79094,79097,79099,79101,79103],{"class":70,"line":71},[68,79081,8391],{"class":102},[68,79083,53418],{"class":85},[68,79085,869],{"class":102},[68,79087,53811],{"class":85},[68,79089,99],{"class":92},[68,79091,1002],{"class":85},[68,79093,267],{"class":92},[68,79095,79096],{"class":85},", [",[68,79098,288],{"class":92},[68,79100,1002],{"class":85},[68,79102,2029],{"class":92},[68,79104,79105],{"class":85},"]]\n",[68,79107,79108,79111,79113,79115,79117,79119],{"class":70,"line":78},[68,79109,79110],{"class":85},"console.",[68,79112,59831],{"class":587},[68,79114,5450],{"class":85},[68,79116,600],{"class":92},[68,79118,5815],{"class":85},[68,79120,79121],{"class":74},"  \u002F\u002F1\n",[68,79123,79124,79126,79128,79130,79132,79134],{"class":70,"line":89},[68,79125,79110],{"class":85},[68,79127,59831],{"class":587},[68,79129,5450],{"class":85},[68,79131,99],{"class":92},[68,79133,5815],{"class":85},[68,79135,79136],{"class":74},"  \u002F\u002F2\n",[68,79138,79139,79141,79143,79145,79147,79149],{"class":70,"line":115},[68,79140,79110],{"class":85},[68,79142,59831],{"class":587},[68,79144,5450],{"class":85},[68,79146,267],{"class":92},[68,79148,5815],{"class":85},[68,79150,79151],{"class":74},"  \u002F\u002F[3,4]\n",[68,79153,79154,79156,79158,79160,79162,79164,79166,79168],{"class":70,"line":280},[68,79155,79110],{"class":85},[68,79157,59831],{"class":587},[68,79159,5450],{"class":85},[68,79161,267],{"class":92},[68,79163,6500],{"class":85},[68,79165,600],{"class":92},[68,79167,5815],{"class":85},[68,79169,79170],{"class":74},"  \u002F\u002F3\n",[58,79172,79174],{"className":79073,"code":79173,"language":79075,"meta":63,"style":63},"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",[65,79175,79176,79203,79214,79225],{"__ignoreMap":63},[68,79177,79178,79180,79183,79185,79187,79189,79191,79193,79195,79197,79199,79201],{"class":70,"line":71},[68,79179,8391],{"class":102},[68,79181,79182],{"class":85}," [a, b, c] ",[68,79184,869],{"class":102},[68,79186,53811],{"class":85},[68,79188,99],{"class":92},[68,79190,1002],{"class":85},[68,79192,267],{"class":92},[68,79194,79096],{"class":85},[68,79196,288],{"class":92},[68,79198,1002],{"class":85},[68,79200,2029],{"class":92},[68,79202,79105],{"class":85},[68,79204,79205,79207,79209,79212],{"class":70,"line":78},[68,79206,79110],{"class":85},[68,79208,59831],{"class":587},[68,79210,79211],{"class":85},"(a)",[68,79213,79121],{"class":74},[68,79215,79216,79218,79220,79223],{"class":70,"line":89},[68,79217,79110],{"class":85},[68,79219,59831],{"class":587},[68,79221,79222],{"class":85},"(b)",[68,79224,79136],{"class":74},[68,79226,79227,79229,79231,79234],{"class":70,"line":115},[68,79228,79110],{"class":85},[68,79230,59831],{"class":587},[68,79232,79233],{"class":85},"(c)",[68,79235,79151],{"class":74},[58,79237,79239],{"className":79073,"code":79238,"language":79075,"meta":63,"style":63},"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",[65,79240,79241,79268,79278,79288,79298],{"__ignoreMap":63},[68,79242,79243,79245,79248,79250,79252,79254,79256,79258,79260,79262,79264,79266],{"class":70,"line":71},[68,79244,8391],{"class":102},[68,79246,79247],{"class":85}," [a, b, [c, d]] ",[68,79249,869],{"class":102},[68,79251,53811],{"class":85},[68,79253,99],{"class":92},[68,79255,1002],{"class":85},[68,79257,267],{"class":92},[68,79259,79096],{"class":85},[68,79261,288],{"class":92},[68,79263,1002],{"class":85},[68,79265,2029],{"class":92},[68,79267,79105],{"class":85},[68,79269,79270,79272,79274,79276],{"class":70,"line":78},[68,79271,79110],{"class":85},[68,79273,59831],{"class":587},[68,79275,79211],{"class":85},[68,79277,79121],{"class":74},[68,79279,79280,79282,79284,79286],{"class":70,"line":89},[68,79281,79110],{"class":85},[68,79283,59831],{"class":587},[68,79285,79222],{"class":85},[68,79287,79136],{"class":74},[68,79289,79290,79292,79294,79296],{"class":70,"line":115},[68,79291,79110],{"class":85},[68,79293,59831],{"class":587},[68,79295,79233],{"class":85},[68,79297,79170],{"class":74},[68,79299,79300,79302,79304,79307],{"class":70,"line":280},[68,79301,79110],{"class":85},[68,79303,59831],{"class":587},[68,79305,79306],{"class":85},"(d)",[68,79308,79309],{"class":74},"  \u002F\u002F4\n",[43,79311,79313],{"id":79312},"_462-对象解构","4.6.2 对象解构",[19,79315,79316],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79318,79319],{},"用的非常非常多！！！！！！",[23593,79321,79323],{"id":79322},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79325,79326],{},"基本语法：",[48,79328,79329,79332,79335,79338],{},[51,79330,79331],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[51,79333,79334],{},"对象属性的值将被赋值给与属性名相同的变量",[51,79336,79337],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[51,79339,79340],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[58,79342,79344],{"className":52226,"code":79343,"language":52228,"meta":63,"style":63},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[65,79345,79346,79351,79356,79361,79365],{"__ignoreMap":63},[68,79347,79348],{"class":70,"line":71},[68,79349,79350],{"class":85},"const obj = {\n",[68,79352,79353],{"class":70,"line":78},[68,79354,79355],{"class":85},"   uname: 'pink老师',\n",[68,79357,79358],{"class":70,"line":89},[68,79359,79360],{"class":85},"   age: 18,\n",[68,79362,79363],{"class":70,"line":115},[68,79364,118],{"class":85},[68,79366,79367],{"class":70,"line":280},[68,79368,79369],{"class":85},"const { uname, age } = obj\n",[19,79371,79372],{},"上方代码这样写等价于：",[19,79374,79375],{},"const uname等价于obj.uname",[19,79377,79378],{},"变量名可以重新改名：",[19,79380,79381],{},"const uname='red老师'",[19,79383,79384],{},"const user={",[19,79386,79387],{},"  uname:'pink老师',",[19,79389,79390],{},"  age:18",[19,79392,2681],{},[19,79394,79395],{},"const {uname,age}=user",[19,79397,79398],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79400,79401],{},"const {旧变量名：新变量名}=对象",[19,79403,79404],{},"const {uname:username,age}=user",[23593,79406,79408],{"id":79407},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79410,79411],{},[38,79412],{"alt":63,"src":79413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23593,79415,79417],{"id":79416},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79419,79420],{},[38,79421],{"alt":63,"src":79422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[58,79424,79426],{"className":54652,"code":79425,"language":54654,"meta":63,"style":63},"  \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",[65,79427,79428,79436,79441,79446,79451,79456,79461,79466,79471,79476,79480,79485,79490],{"__ignoreMap":63},[68,79429,79430,79432,79434],{"class":70,"line":71},[68,79431,53729],{"class":85},[68,79433,53398],{"class":81},[68,79435,876],{"class":85},[68,79437,79438],{"class":70,"line":78},[68,79439,79440],{"class":85},"    const pig = {\n",[68,79442,79443],{"class":70,"line":89},[68,79444,79445],{"class":85},"      name: '佩奇',\n",[68,79447,79448],{"class":70,"line":115},[68,79449,79450],{"class":85},"      family: {\n",[68,79452,79453],{"class":70,"line":280},[68,79454,79455],{"class":85},"        mother: '猪妈妈',\n",[68,79457,79458],{"class":70,"line":301},[68,79459,79460],{"class":85},"        father: '猪爸爸',\n",[68,79462,79463],{"class":70,"line":320},[68,79464,79465],{"class":85},"        sister: '乔治'\n",[68,79467,79468],{"class":70,"line":2915},[68,79469,79470],{"class":85},"      },\n",[68,79472,79473],{"class":70,"line":2921},[68,79474,79475],{"class":85},"      age: 6\n",[68,79477,79478],{"class":70,"line":2933},[68,79479,3787],{"class":85},[68,79481,79482],{"class":70,"line":3214},[68,79483,79484],{"class":85},"    \u002F\u002F 多级对象解构\n",[68,79486,79487],{"class":70,"line":3219},[68,79488,79489],{"class":85},"    const { name, family: { mother, father, sister }, age } = pig\n",[68,79491,79492,79494,79496],{"class":70,"line":3225},[68,79493,54002],{"class":85},[68,79495,53398],{"class":81},[68,79497,876],{"class":85},[19,79499,79500],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[58,79502,79505],{"className":79503,"code":79504,"language":78025,"meta":63,"style":63},"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",[65,79506,79507,79512,79523,79535,79547,79556,79560,79571,79583,79593,79598,79602,79612,79623,79632,79636,79640,79651,79662,79671,79675,79680],{"__ignoreMap":63},[68,79508,79509],{"class":70,"line":71},[68,79510,79511],{"class":74},"    \u002F\u002F 这是后台传递过来的数据\n",[68,79513,79514,79516,79519,79521],{"class":70,"line":78},[68,79515,12819],{"class":102},[68,79517,79518],{"class":85}," msg ",[68,79520,869],{"class":102},[68,79522,86],{"class":85},[68,79524,79525,79528,79530,79533],{"class":70,"line":89},[68,79526,79527],{"class":872},"      \"code\"",[68,79529,2595],{"class":102},[68,79531,79532],{"class":92}," 200",[68,79534,33059],{"class":85},[68,79536,79537,79540,79542,79545],{"class":70,"line":115},[68,79538,79539],{"class":872},"      \"msg\"",[68,79541,2595],{"class":102},[68,79543,79544],{"class":872}," \"获取新闻列表成功\"",[68,79546,33059],{"class":85},[68,79548,79549,79552,79554],{"class":70,"line":280},[68,79550,79551],{"class":872},"      \"data\"",[68,79553,2595],{"class":102},[68,79555,57031],{"class":85},[68,79557,79558],{"class":70,"line":301},[68,79559,4110],{"class":85},[68,79561,79562,79565,79567,79569],{"class":70,"line":320},[68,79563,79564],{"class":872},"          \"id\"",[68,79566,2595],{"class":102},[68,79568,1112],{"class":92},[68,79570,33059],{"class":85},[68,79572,79573,79576,79578,79581],{"class":70,"line":2915},[68,79574,79575],{"class":872},"          \"title\"",[68,79577,2595],{"class":102},[68,79579,79580],{"class":872}," \"5G商用自己，三大运用商收入下降\"",[68,79582,33059],{"class":85},[68,79584,79585,79588,79590],{"class":70,"line":2921},[68,79586,79587],{"class":872},"          \"count\"",[68,79589,2595],{"class":102},[68,79591,79592],{"class":92}," 58\n",[68,79594,79595],{"class":70,"line":2933},[68,79596,79597],{"class":85},"        },\n",[68,79599,79600],{"class":70,"line":3214},[68,79601,4110],{"class":85},[68,79603,79604,79606,79608,79610],{"class":70,"line":3219},[68,79605,79564],{"class":872},[68,79607,2595],{"class":102},[68,79609,984],{"class":92},[68,79611,33059],{"class":85},[68,79613,79614,79616,79618,79621],{"class":70,"line":3225},[68,79615,79575],{"class":872},[68,79617,2595],{"class":102},[68,79619,79620],{"class":872}," \"国际媒体头条速览\"",[68,79622,33059],{"class":85},[68,79624,79625,79627,79629],{"class":70,"line":3230},[68,79626,79587],{"class":872},[68,79628,2595],{"class":102},[68,79630,79631],{"class":92}," 56\n",[68,79633,79634],{"class":70,"line":3244},[68,79635,79597],{"class":85},[68,79637,79638],{"class":70,"line":3249},[68,79639,4110],{"class":85},[68,79641,79642,79644,79646,79649],{"class":70,"line":3255},[68,79643,79564],{"class":872},[68,79645,2595],{"class":102},[68,79647,79648],{"class":92}," 3",[68,79650,33059],{"class":85},[68,79652,79653,79655,79657,79660],{"class":70,"line":3276},[68,79654,79575],{"class":872},[68,79656,2595],{"class":102},[68,79658,79659],{"class":872}," \"乌克兰和俄罗斯持续冲突\"",[68,79661,33059],{"class":85},[68,79663,79664,79666,79668],{"class":70,"line":3281},[68,79665,79587],{"class":872},[68,79667,2595],{"class":102},[68,79669,79670],{"class":92}," 1669\n",[68,79672,79673],{"class":70,"line":3295},[68,79674,79597],{"class":85},[68,79676,79677],{"class":70,"line":3300},[68,79678,79679],{"class":85},"      ]\n",[68,79681,79682],{"class":70,"line":3329},[68,79683,3787],{"class":85},[19,79685,79686],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79688,79689],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79691,79692],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,79694,79695],{},"function({data}) {",[19,79697,79698],{},"console.log(data)",[19,79700,2681],{},[19,79702,79703],{},"render(msg)",[19,79705,79706],{},"实参传递给形参的时候解构了",[19,79708,79709],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79711,79712],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79714,79715],{},"function render({data:mydata}) {",[19,79717,79718],{},"  console.log(data)",[19,79720,2681],{},[43,79722,79724],{"id":79723},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79726,79727],{},"有两种情况：一个是数组结构，一个是立即执行函数",[48,79729,79730],{},[51,79731,79732],{},"如果对一个数组进行遍历，有两种方式：",[19,79734,79735],{},"①法1",[19,79737,79738],{},"const arr=[1,2,3]",[19,79740,79741],{},"arr.map(function(item,index) {",[19,79743,79744],{},"  console.log(item)",[19,79746,54049],{},[19,79748,79749],{},[38,79750],{"alt":63,"src":79751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79753,79754],{},"②法2",[19,79756,79757],{},"const str='pink'",[19,79759,79760],{},"[1,2,3].map(function(item,index) {",[19,79762,79763],{},"console.log(item)",[19,79765,54049],{},[19,79767,79768],{},[38,79769],{"alt":63,"src":79770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79772,79773],{},"此时会报错",[19,79775,79776],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79778,79763],{},[19,79780,54049],{},[19,79782,79783],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79785,79787],{"id":79786},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79789,79790],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79792,79793],{},"可以理解为加强版的for循环",[19,79795,79796],{},[38,79797],{"alt":63,"src":79798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79800,79801],{},"里边不写return，不返回数组，只遍历不返回",[19,79803,79804],{},"map是返回数组",[19,79806,79807],{},"forEach主要用于遍历数组对象",[58,79809,79811],{"className":54652,"code":79810,"language":54654,"meta":63,"style":63},"  \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",[65,79812,79813,79821,79826,79831,79836,79841,79845,79850],{"__ignoreMap":63},[68,79814,79815,79817,79819],{"class":70,"line":71},[68,79816,53729],{"class":85},[68,79818,53398],{"class":81},[68,79820,876],{"class":85},[68,79822,79823],{"class":70,"line":78},[68,79824,79825],{"class":85},"    const arr = ['red', 'green', 'pink']\n",[68,79827,79828],{"class":70,"line":89},[68,79829,79830],{"class":85},"    const result = arr.forEach(function (item, index) {\n",[68,79832,79833],{"class":70,"line":115},[68,79834,79835],{"class":85},"      console.log(item)\n",[68,79837,79838],{"class":70,"line":280},[68,79839,79840],{"class":85},"      console.log(index)\n",[68,79842,79843],{"class":70,"line":301},[68,79844,35054],{"class":85},[68,79846,79847],{"class":70,"line":320},[68,79848,79849],{"class":85},"    console.log(result)\n",[68,79851,79852,79854,79856],{"class":70,"line":2915},[68,79853,54002],{"class":85},[68,79855,53398],{"class":81},[68,79857,876],{"class":85},[19,79859,79860],{},[38,79861],{"alt":63,"src":79862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79864,79866],{"id":79865},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79868,79869],{},[38,79870],{"alt":63,"src":79871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79873,79874],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[58,79876,79878],{"className":54652,"code":79877,"language":54654,"meta":63,"style":63},"\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",[65,79879,79880,79888,79896,79901,79906,79910,79914,79919,79923,79928,79936],{"__ignoreMap":63},[68,79881,79882,79884,79886],{"class":70,"line":71},[68,79883,861],{"class":85},[68,79885,53385],{"class":81},[68,79887,876],{"class":85},[68,79889,79890,79892,79894],{"class":70,"line":78},[68,79891,53729],{"class":85},[68,79893,53398],{"class":81},[68,79895,876],{"class":85},[68,79897,79898],{"class":70,"line":89},[68,79899,79900],{"class":85},"    const arr = [10, 20, 30]\n",[68,79902,79903],{"class":70,"line":115},[68,79904,79905],{"class":85},"    const newArr = arr.filter(function (item, index) {\n",[68,79907,79908],{"class":70,"line":280},[68,79909,79835],{"class":85},[68,79911,79912],{"class":70,"line":301},[68,79913,79840],{"class":85},[68,79915,79916],{"class":70,"line":320},[68,79917,79918],{"class":85},"      return item >= 20\n",[68,79920,79921],{"class":70,"line":2915},[68,79922,35054],{"class":85},[68,79924,79925],{"class":70,"line":2921},[68,79926,79927],{"class":85},"    console.log(newArr)\n",[68,79929,79930,79932,79934],{"class":70,"line":2933},[68,79931,54002],{"class":85},[68,79933,53398],{"class":81},[68,79935,876],{"class":85},[68,79937,79938,79940,79942],{"class":70,"line":3214},[68,79939,886],{"class":85},[68,79941,53385],{"class":81},[68,79943,876],{"class":85},[19,79945,79946],{},"这个也可以写成箭头函数：",[58,79948,79950],{"className":52226,"code":79949,"language":52228,"meta":63,"style":63},"const newArr = arr.filter(item => item >= 20)\n",[65,79951,79952],{"__ignoreMap":63},[68,79953,79954],{"class":70,"line":71},[68,79955,79949],{"class":85},[14,79957,79959],{"id":79958},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79961,79962],{},[38,79963],{"alt":63,"src":79964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79966,79967],{},"步骤：",[19,79969,79970],{},"①：渲染页面模块",[168,79972,79973,79976],{},[51,79974,79975],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[51,79977,79978],{},"用forEach+字符串的形式",[19,79980,79981],{},"②：点击不同需求，显示不同页面内容",[168,79983,79984,79987,79990,79993,79996],{},[51,79985,79986],{},"点击采取事件委托方式 .filter",[51,79988,79989],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[51,79991,79992],{},"筛选条件是根据点击的 data-index 来判断",[51,79994,79995],{},"可以使用对象解构，把事件对象解构",[51,79997,79998],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[58,80000,80002],{"className":52226,"code":80001,"language":52228,"meta":63,"style":63},"\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",[65,80003,80004,80014,80028,80032,80040,80054,80074,80086,80094,80100,80110,80120,80130,80134,80138,80144,80157,80169,80179,80191,80195,80199,80206,80219,80231,80248,80266,80279,80283,80287,80299,80309,80313,80317,80324,80364,80391,80401,80405,80409,80417,80429,80433,80437,80445,80457,80469,80480,80484,80488,80497,80509,80520,80524,80528,80537,80549,80561,80565,80569,80576,80586,80598,80610,80625,80629,80633,80641,80657,80667,80677,80687,80699,80703,80707,80717,80728,80738,80742,80750,80758,80762,80770,80785,80811,80836,80861,80880,80888,80902,80907,80912,80917,80922,80927,80935,80943,80948,80959,80964,80974,80984,80994,81004,81008,81012,81021,81030,81039,81048,81052,81056,81065,81074,81083,81092,81096,81100,81109,81118,81127,81136,81140,81144,81153,81162,81171,81180,81184,81188,81197,81206,81215,81224,81228,81232,81241,81250,81259,81268,81272,81276,81285,81294,81302,81311,81315,81319,81323,81328,81340,81345,81357,81361,81378,81406,81415,81420,81430,81440,81449,81454,81459,81463,81468,81485,81489,81494,81502,81507,81534,81539,81559,81564,81576,81581,81586,81591,81602,81616,81653,81671,81704,81721,81745,81749,81754,81760,81764,81768,81772,81780,81788,81792],{"__ignoreMap":63},[68,80005,80006,80008,80010,80012],{"class":70,"line":71},[68,80007,52890],{"class":85},[68,80009,52893],{"class":81},[68,80011,52896],{"class":587},[68,80013,876],{"class":85},[68,80015,80016,80018,80020,80022,80024,80026],{"class":70,"line":78},[68,80017,861],{"class":85},[68,80019,52228],{"class":81},[68,80021,52907],{"class":587},[68,80023,869],{"class":85},[68,80025,52912],{"class":872},[68,80027,876],{"class":85},[68,80029,80030],{"class":70,"line":89},[68,80031,4000],{"emptyLinePlaceholder":1679},[68,80033,80034,80036,80038],{"class":70,"line":115},[68,80035,861],{"class":85},[68,80037,52925],{"class":81},[68,80039,876],{"class":85},[68,80041,80042,80044,80046,80048,80050,80052],{"class":70,"line":280},[68,80043,53729],{"class":85},[68,80045,52935],{"class":81},[68,80047,52938],{"class":587},[68,80049,869],{"class":85},[68,80051,52943],{"class":872},[68,80053,876],{"class":85},[68,80055,80056,80058,80060,80062,80064,80066,80068,80070,80072],{"class":70,"line":301},[68,80057,53729],{"class":85},[68,80059,52935],{"class":81},[68,80061,16516],{"class":587},[68,80063,869],{"class":85},[68,80065,52982],{"class":872},[68,80067,52962],{"class":587},[68,80069,869],{"class":85},[68,80071,52989],{"class":872},[68,80073,876],{"class":85},[68,80075,80076,80078,80080,80082,80084],{"class":70,"line":320},[68,80077,53729],{"class":85},[68,80079,52998],{"class":81},[68,80081,53001],{"class":85},[68,80083,52998],{"class":81},[68,80085,876],{"class":85},[68,80087,80088,80090,80092],{"class":70,"line":2915},[68,80089,53729],{"class":85},[68,80091,1652],{"class":81},[68,80093,876],{"class":85},[68,80095,80096,80098],{"class":70,"line":2921},[68,80097,8002],{"class":81},[68,80099,86],{"class":85},[68,80101,80102,80104,80106,80108],{"class":70,"line":2933},[68,80103,56279],{"class":92},[68,80105,96],{"class":85},[68,80107,600],{"class":92},[68,80109,112],{"class":85},[68,80111,80112,80114,80116,80118],{"class":70,"line":3214},[68,80113,56290],{"class":92},[68,80115,96],{"class":85},[68,80117,600],{"class":92},[68,80119,112],{"class":85},[68,80121,80122,80124,80126,80128],{"class":70,"line":3219},[68,80123,74174],{"class":92},[68,80125,96],{"class":85},[68,80127,62089],{"class":92},[68,80129,112],{"class":85},[68,80131,80132],{"class":70,"line":3225},[68,80133,3787],{"class":85},[68,80135,80136],{"class":70,"line":3230},[68,80137,4000],{"emptyLinePlaceholder":1679},[68,80139,80140,80142],{"class":70,"line":3244},[68,80141,63707],{"class":587},[68,80143,86],{"class":85},[68,80145,80146,80148,80150,80153,80155],{"class":70,"line":3249},[68,80147,56355],{"class":92},[68,80149,96],{"class":85},[68,80151,80152],{"class":92},"990",[68,80154,103],{"class":102},[68,80156,112],{"class":85},[68,80158,80159,80161,80163,80165,80167],{"class":70,"line":3255},[68,80160,56290],{"class":92},[68,80162,96],{"class":85},[68,80164,600],{"class":92},[68,80166,603],{"class":92},[68,80168,112],{"class":85},[68,80170,80171,80173,80175,80177],{"class":70,"line":3276},[68,80172,56593],{"class":92},[68,80174,96],{"class":85},[68,80176,53067],{"class":92},[68,80178,112],{"class":85},[68,80180,80181,80184,80186,80189],{"class":70,"line":3281},[68,80182,80183],{"class":92},"      flex-wrap",[68,80185,96],{"class":85},[68,80187,80188],{"class":92},"wrap",[68,80190,112],{"class":85},[68,80192,80193],{"class":70,"line":3295},[68,80194,3787],{"class":85},[68,80196,80197],{"class":70,"line":3300},[68,80198,4000],{"emptyLinePlaceholder":1679},[68,80200,80201,80204],{"class":70,"line":3329},[68,80202,80203],{"class":587},"    .item",[68,80205,86],{"class":85},[68,80207,80208,80210,80212,80215,80217],{"class":70,"line":3334},[68,80209,56355],{"class":92},[68,80211,96],{"class":85},[68,80213,80214],{"class":92},"240",[68,80216,103],{"class":102},[68,80218,112],{"class":85},[68,80220,80221,80223,80225,80227,80229],{"class":70,"line":3351},[68,80222,63584],{"class":92},[68,80224,96],{"class":85},[68,80226,2182],{"class":92},[68,80228,103],{"class":102},[68,80230,112],{"class":85},[68,80232,80233,80235,80237,80239,80241,80244,80246],{"class":70,"line":3356},[68,80234,56279],{"class":92},[68,80236,96],{"class":85},[68,80238,2436],{"class":92},[68,80240,103],{"class":102},[68,80242,80243],{"class":92}," 30",[68,80245,103],{"class":102},[68,80247,112],{"class":85},[68,80249,80250,80252,80254,80256,80259,80262,80264],{"class":70,"line":3361},[68,80251,63444],{"class":92},[68,80253,96],{"class":85},[68,80255,29714],{"class":92},[68,80257,80258],{"class":92}," ease",[68,80260,80261],{"class":92}," .5",[68,80263,2431],{"class":102},[68,80265,112],{"class":85},[68,80267,80268,80271,80273,80275,80277],{"class":70,"line":3366},[68,80269,80270],{"class":92},"      margin-bottom",[68,80272,96],{"class":85},[68,80274,2436],{"class":92},[68,80276,103],{"class":102},[68,80278,112],{"class":85},[68,80280,80281],{"class":70,"line":3380},[68,80282,3787],{"class":85},[68,80284,80285],{"class":70,"line":3385},[68,80286,4000],{"emptyLinePlaceholder":1679},[68,80288,80289,80292,80294,80297],{"class":70,"line":4177},[68,80290,80291],{"class":587},"    .item:nth-child",[68,80293,997],{"class":85},[68,80295,80296],{"class":92},"4n",[68,80298,14039],{"class":85},[68,80300,80301,80303,80305,80307],{"class":70,"line":4191},[68,80302,63584],{"class":92},[68,80304,96],{"class":85},[68,80306,600],{"class":92},[68,80308,112],{"class":85},[68,80310,80311],{"class":70,"line":4199},[68,80312,3787],{"class":85},[68,80314,80315],{"class":70,"line":4204},[68,80316,4000],{"emptyLinePlaceholder":1679},[68,80318,80319,80322],{"class":70,"line":4210},[68,80320,80321],{"class":587},"    .item:hover",[68,80323,86],{"class":85},[68,80325,80326,80329,80331,80333,80335,80337,80339,80341,80343,80345,80347,80349,80351,80353,80355,80357,80359,80362],{"class":70,"line":4216},[68,80327,80328],{"class":92},"      box-shadow",[68,80330,96],{"class":85},[68,80332,600],{"class":92},[68,80334,103],{"class":102},[68,80336,5692],{"class":92},[68,80338,103],{"class":102},[68,80340,3748],{"class":92},[68,80342,103],{"class":102},[68,80344,994],{"class":92},[68,80346,997],{"class":85},[68,80348,600],{"class":92},[68,80350,1002],{"class":85},[68,80352,600],{"class":92},[68,80354,1002],{"class":85},[68,80356,600],{"class":92},[68,80358,1002],{"class":85},[68,80360,80361],{"class":92},".2",[68,80363,1016],{"class":85},[68,80365,80366,80369,80371,80374,80376,80378,80380,80383,80385,80387,80389],{"class":70,"line":4221},[68,80367,80368],{"class":92},"      transform",[68,80370,96],{"class":85},[68,80372,80373],{"class":92},"translate3d",[68,80375,997],{"class":85},[68,80377,600],{"class":92},[68,80379,1002],{"class":85},[68,80381,80382],{"class":92},"-4",[68,80384,103],{"class":102},[68,80386,1002],{"class":85},[68,80388,600],{"class":92},[68,80390,1016],{"class":85},[68,80392,80393,80395,80397,80399],{"class":70,"line":9547},[68,80394,63609],{"class":92},[68,80396,96],{"class":85},[68,80398,63614],{"class":92},[68,80400,112],{"class":85},[68,80402,80403],{"class":70,"line":9571},[68,80404,3787],{"class":85},[68,80406,80407],{"class":70,"line":9576},[68,80408,4000],{"emptyLinePlaceholder":1679},[68,80410,80411,80413,80415],{"class":70,"line":9582},[68,80412,80203],{"class":587},[68,80414,57199],{"class":81},[68,80416,86],{"class":85},[68,80418,80419,80421,80423,80425,80427],{"class":70,"line":9609},[68,80420,56355],{"class":92},[68,80422,96],{"class":85},[68,80424,2047],{"class":92},[68,80426,2064],{"class":102},[68,80428,112],{"class":85},[68,80430,80431],{"class":70,"line":9614},[68,80432,3787],{"class":85},[68,80434,80435],{"class":70,"line":9620},[68,80436,4000],{"emptyLinePlaceholder":1679},[68,80438,80439,80441,80443],{"class":70,"line":9632},[68,80440,80203],{"class":587},[68,80442,63887],{"class":587},[68,80444,86],{"class":85},[68,80446,80447,80449,80451,80453,80455],{"class":70,"line":9644},[68,80448,56506],{"class":92},[68,80450,96],{"class":85},[68,80452,2386],{"class":92},[68,80454,103],{"class":102},[68,80456,112],{"class":85},[68,80458,80459,80461,80463,80465,80467],{"class":70,"line":9656},[68,80460,80270],{"class":92},[68,80462,96],{"class":85},[68,80464,2182],{"class":92},[68,80466,103],{"class":102},[68,80468,112],{"class":85},[68,80470,80471,80473,80475,80478],{"class":70,"line":11314},[68,80472,59000],{"class":92},[68,80474,96],{"class":85},[68,80476,80477],{"class":92},"#666",[68,80479,112],{"class":85},[68,80481,80482],{"class":70,"line":11339},[68,80483,3787],{"class":85},[68,80485,80486],{"class":70,"line":11362},[68,80487,4000],{"emptyLinePlaceholder":1679},[68,80489,80490,80492,80495],{"class":70,"line":11386},[68,80491,80203],{"class":587},[68,80493,80494],{"class":587}," .price",[68,80496,86],{"class":85},[68,80498,80499,80501,80503,80505,80507],{"class":70,"line":11391},[68,80500,56506],{"class":92},[68,80502,96],{"class":85},[68,80504,2486],{"class":92},[68,80506,103],{"class":102},[68,80508,112],{"class":85},[68,80510,80511,80513,80515,80518],{"class":70,"line":11396},[68,80512,59000],{"class":92},[68,80514,96],{"class":85},[68,80516,80517],{"class":92},"firebrick",[68,80519,112],{"class":85},[68,80521,80522],{"class":70,"line":11401},[68,80523,3787],{"class":85},[68,80525,80526],{"class":70,"line":11410},[68,80527,4000],{"emptyLinePlaceholder":1679},[68,80529,80530,80532,80535],{"class":70,"line":11415},[68,80531,80203],{"class":587},[68,80533,80534],{"class":587}," .price::before",[68,80536,86],{"class":85},[68,80538,80539,80542,80544,80547],{"class":70,"line":11421},[68,80540,80541],{"class":92},"      content",[68,80543,96],{"class":85},[68,80545,80546],{"class":872},"'￥'",[68,80548,112],{"class":85},[68,80550,80551,80553,80555,80557,80559],{"class":70,"line":11442},[68,80552,56506],{"class":92},[68,80554,96],{"class":85},[68,80556,2285],{"class":92},[68,80558,103],{"class":102},[68,80560,112],{"class":85},[68,80562,80563],{"class":70,"line":11448},[68,80564,3787],{"class":85},[68,80566,80567],{"class":70,"line":11462},[68,80568,4000],{"emptyLinePlaceholder":1679},[68,80570,80571,80574],{"class":70,"line":11468},[68,80572,80573],{"class":587},"    .filter",[68,80575,86],{"class":85},[68,80577,80578,80580,80582,80584],{"class":70,"line":11495},[68,80579,56593],{"class":92},[68,80581,96],{"class":85},[68,80583,53067],{"class":92},[68,80585,112],{"class":85},[68,80587,80588,80590,80592,80594,80596],{"class":70,"line":11504},[68,80589,56355],{"class":92},[68,80591,96],{"class":85},[68,80593,80152],{"class":92},[68,80595,103],{"class":102},[68,80597,112],{"class":85},[68,80599,80600,80602,80604,80606,80608],{"class":70,"line":11510},[68,80601,56290],{"class":92},[68,80603,96],{"class":85},[68,80605,600],{"class":92},[68,80607,603],{"class":92},[68,80609,112],{"class":85},[68,80611,80612,80614,80616,80618,80620,80622],{"class":70,"line":11518},[68,80613,56279],{"class":92},[68,80615,96],{"class":85},[68,80617,2392],{"class":92},[68,80619,103],{"class":102},[68,80621,80243],{"class":92},[68,80623,80624],{"class":102},"px\n",[68,80626,80627],{"class":70,"line":11523},[68,80628,3787],{"class":85},[68,80630,80631],{"class":70,"line":18199},[68,80632,4000],{"emptyLinePlaceholder":1679},[68,80634,80635,80637,80639],{"class":70,"line":18205},[68,80636,80573],{"class":587},[68,80638,3002],{"class":81},[68,80640,86],{"class":85},[68,80642,80643,80645,80647,80649,80651,80653,80655],{"class":70,"line":18228},[68,80644,56279],{"class":92},[68,80646,96],{"class":85},[68,80648,2182],{"class":92},[68,80650,103],{"class":102},[68,80652,10549],{"class":92},[68,80654,103],{"class":102},[68,80656,112],{"class":85},[68,80658,80659,80661,80663,80665],{"class":70,"line":18234},[68,80660,63305],{"class":92},[68,80662,96],{"class":85},[68,80664,63402],{"class":92},[68,80666,112],{"class":85},[68,80668,80669,80671,80673,80675],{"class":70,"line":18257},[68,80670,59000],{"class":92},[68,80672,96],{"class":85},[68,80674,80477],{"class":92},[68,80676,112],{"class":85},[68,80678,80679,80681,80683,80685],{"class":70,"line":18271},[68,80680,65553],{"class":92},[68,80682,96],{"class":85},[68,80684,56321],{"class":92},[68,80686,112],{"class":85},[68,80688,80689,80691,80693,80695,80697],{"class":70,"line":18291},[68,80690,63334],{"class":92},[68,80692,96],{"class":85},[68,80694,2436],{"class":92},[68,80696,103],{"class":102},[68,80698,112],{"class":85},[68,80700,80701],{"class":70,"line":18297},[68,80702,3787],{"class":85},[68,80704,80705],{"class":70,"line":18308},[68,80706,4000],{"emptyLinePlaceholder":1679},[68,80708,80709,80711,80713,80715],{"class":70,"line":18331},[68,80710,80573],{"class":587},[68,80712,3002],{"class":81},[68,80714,63484],{"class":587},[68,80716,86],{"class":85},[68,80718,80719,80721,80723,80726],{"class":70,"line":18353},[68,80720,56468],{"class":92},[68,80722,96],{"class":85},[68,80724,80725],{"class":92},"#05943c",[68,80727,112],{"class":85},[68,80729,80730,80732,80734,80736],{"class":70,"line":18358},[68,80731,59000],{"class":92},[68,80733,96],{"class":85},[68,80735,62426],{"class":92},[68,80737,112],{"class":85},[68,80739,80740],{"class":70,"line":18364},[68,80741,3787],{"class":85},[68,80743,80744,80746,80748],{"class":70,"line":18378},[68,80745,54002],{"class":85},[68,80747,1652],{"class":81},[68,80749,876],{"class":85},[68,80751,80752,80754,80756],{"class":70,"line":18391},[68,80753,886],{"class":85},[68,80755,52925],{"class":81},[68,80757,876],{"class":85},[68,80759,80760],{"class":70,"line":18396},[68,80761,4000],{"emptyLinePlaceholder":1679},[68,80763,80764,80766,80768],{"class":70,"line":18410},[68,80765,861],{"class":85},[68,80767,53385],{"class":81},[68,80769,876],{"class":85},[68,80771,80772,80774,80776,80778,80780,80783],{"class":70,"line":18415},[68,80773,53729],{"class":85},[68,80775,82],{"class":81},[68,80777,866],{"class":587},[68,80779,869],{"class":85},[68,80781,80782],{"class":872},"\"filter\"",[68,80784,876],{"class":85},[68,80786,80787,80789,80791,80793,80795,80797,80800,80802,80804,80807,80809],{"class":70,"line":18421},[68,80788,52932],{"class":85},[68,80790,1974],{"class":81},[68,80792,62641],{"class":587},[68,80794,869],{"class":85},[68,80796,62646],{"class":872},[68,80798,80799],{"class":587}," data-index",[68,80801,869],{"class":85},[68,80803,5277],{"class":872},[68,80805,80806],{"class":85},">0-100元\u003C\u002F",[68,80808,1974],{"class":81},[68,80810,876],{"class":85},[68,80812,80813,80815,80817,80819,80821,80823,80825,80827,80829,80832,80834],{"class":70,"line":18426},[68,80814,52932],{"class":85},[68,80816,1974],{"class":81},[68,80818,62641],{"class":587},[68,80820,869],{"class":85},[68,80822,62646],{"class":872},[68,80824,80799],{"class":587},[68,80826,869],{"class":85},[68,80828,5300],{"class":872},[68,80830,80831],{"class":85},">100-300元\u003C\u002F",[68,80833,1974],{"class":81},[68,80835,876],{"class":85},[68,80837,80838,80840,80842,80844,80846,80848,80850,80852,80854,80857,80859],{"class":70,"line":18440},[68,80839,52932],{"class":85},[68,80841,1974],{"class":81},[68,80843,62641],{"class":587},[68,80845,869],{"class":85},[68,80847,62646],{"class":872},[68,80849,80799],{"class":587},[68,80851,869],{"class":85},[68,80853,5313],{"class":872},[68,80855,80856],{"class":85},">300元以上\u003C\u002F",[68,80858,1974],{"class":81},[68,80860,876],{"class":85},[68,80862,80863,80865,80867,80869,80871,80873,80876,80878],{"class":70,"line":18445},[68,80864,52932],{"class":85},[68,80866,1974],{"class":81},[68,80868,62641],{"class":587},[68,80870,869],{"class":85},[68,80872,62646],{"class":872},[68,80874,80875],{"class":85},">全部区间\u003C\u002F",[68,80877,1974],{"class":81},[68,80879,876],{"class":85},[68,80881,80882,80884,80886],{"class":70,"line":18450},[68,80883,54002],{"class":85},[68,80885,82],{"class":81},[68,80887,876],{"class":85},[68,80889,80890,80892,80894,80896,80898,80900],{"class":70,"line":18464},[68,80891,53729],{"class":85},[68,80893,82],{"class":81},[68,80895,866],{"class":587},[68,80897,869],{"class":85},[68,80899,64191],{"class":872},[68,80901,876],{"class":85},[68,80903,80904],{"class":70,"line":18476},[68,80905,80906],{"class":74},"    \u003C!-- \u003Cdiv class=\"item\">\n",[68,80908,80909],{"class":70,"line":18481},[68,80910,80911],{"class":74},"      \u003Cimg src=\"\" alt=\"\">\n",[68,80913,80914],{"class":70,"line":18494},[68,80915,80916],{"class":74},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[68,80918,80919],{"class":70,"line":18499},[68,80920,80921],{"class":74},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[68,80923,80924],{"class":70,"line":18504},[68,80925,80926],{"class":74},"    \u003C\u002Fdiv> -->\n",[68,80928,80929,80931,80933],{"class":70,"line":18509},[68,80930,54002],{"class":85},[68,80932,82],{"class":81},[68,80934,876],{"class":85},[68,80936,80937,80939,80941],{"class":70,"line":18522},[68,80938,53729],{"class":85},[68,80940,53398],{"class":81},[68,80942,876],{"class":85},[68,80944,80945],{"class":70,"line":18527},[68,80946,80947],{"class":74},"    \u002F\u002F 2. 初始化数据\n",[68,80949,80950,80952,80955,80957],{"class":70,"line":34226},[68,80951,12819],{"class":102},[68,80953,80954],{"class":92}," goodsList",[68,80956,15161],{"class":102},[68,80958,57031],{"class":85},[68,80960,80961],{"class":70,"line":34232},[68,80962,80963],{"class":85},"      {\n",[68,80965,80966,80969,80972],{"class":70,"line":34238},[68,80967,80968],{"class":85},"        id: ",[68,80970,80971],{"class":872},"'4001172'",[68,80973,33059],{"class":85},[68,80975,80976,80979,80982],{"class":70,"line":34244},[68,80977,80978],{"class":85},"        name: ",[68,80980,80981],{"class":872},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[68,80983,33059],{"class":85},[68,80985,80986,80989,80992],{"class":70,"line":34250},[68,80987,80988],{"class":85},"        price: ",[68,80990,80991],{"class":872},"'289.00'",[68,80993,33059],{"class":85},[68,80995,80996,80999,81002],{"class":70,"line":34261},[68,80997,80998],{"class":85},"        picture: ",[68,81000,81001],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[68,81003,33059],{"class":85},[68,81005,81006],{"class":70,"line":34267},[68,81007,79470],{"class":85},[68,81009,81010],{"class":70,"line":34287},[68,81011,80963],{"class":85},[68,81013,81014,81016,81019],{"class":70,"line":34293},[68,81015,80968],{"class":85},[68,81017,81018],{"class":872},"'4001594'",[68,81020,33059],{"class":85},[68,81022,81023,81025,81028],{"class":70,"line":34304},[68,81024,80978],{"class":85},[68,81026,81027],{"class":872},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[68,81029,33059],{"class":85},[68,81031,81032,81034,81037],{"class":70,"line":34310},[68,81033,80988],{"class":85},[68,81035,81036],{"class":872},"'288.00'",[68,81038,33059],{"class":85},[68,81040,81041,81043,81046],{"class":70,"line":34316},[68,81042,80998],{"class":85},[68,81044,81045],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[68,81047,33059],{"class":85},[68,81049,81050],{"class":70,"line":34322},[68,81051,79470],{"class":85},[68,81053,81054],{"class":70,"line":34328},[68,81055,80963],{"class":85},[68,81057,81058,81060,81063],{"class":70,"line":34334},[68,81059,80968],{"class":85},[68,81061,81062],{"class":872},"'4001009'",[68,81064,33059],{"class":85},[68,81066,81067,81069,81072],{"class":70,"line":34340},[68,81068,80978],{"class":85},[68,81070,81071],{"class":872},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[68,81073,33059],{"class":85},[68,81075,81076,81078,81081],{"class":70,"line":34346},[68,81077,80988],{"class":85},[68,81079,81080],{"class":872},"'109.00'",[68,81082,33059],{"class":85},[68,81084,81085,81087,81090],{"class":70,"line":34366},[68,81086,80998],{"class":85},[68,81088,81089],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[68,81091,33059],{"class":85},[68,81093,81094],{"class":70,"line":34372},[68,81095,79470],{"class":85},[68,81097,81098],{"class":70,"line":34388},[68,81099,80963],{"class":85},[68,81101,81102,81104,81107],{"class":70,"line":34394},[68,81103,80968],{"class":85},[68,81105,81106],{"class":872},"'4001874'",[68,81108,33059],{"class":85},[68,81110,81111,81113,81116],{"class":70,"line":34408},[68,81112,80978],{"class":85},[68,81114,81115],{"class":872},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[68,81117,33059],{"class":85},[68,81119,81120,81122,81125],{"class":70,"line":34414},[68,81121,80988],{"class":85},[68,81123,81124],{"class":872},"'488.00'",[68,81126,33059],{"class":85},[68,81128,81129,81131,81134],{"class":70,"line":34429},[68,81130,80998],{"class":85},[68,81132,81133],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[68,81135,33059],{"class":85},[68,81137,81138],{"class":70,"line":34435},[68,81139,79470],{"class":85},[68,81141,81142],{"class":70,"line":34444},[68,81143,80963],{"class":85},[68,81145,81146,81148,81151],{"class":70,"line":34450},[68,81147,80968],{"class":85},[68,81149,81150],{"class":872},"'4001649'",[68,81152,33059],{"class":85},[68,81154,81155,81157,81160],{"class":70,"line":34459},[68,81156,80978],{"class":85},[68,81158,81159],{"class":872},"'大师监制龙泉青瓷茶叶罐'",[68,81161,33059],{"class":85},[68,81163,81164,81166,81169],{"class":70,"line":34465},[68,81165,80988],{"class":85},[68,81167,81168],{"class":872},"'139.00'",[68,81170,33059],{"class":85},[68,81172,81173,81175,81178],{"class":70,"line":34471},[68,81174,80998],{"class":85},[68,81176,81177],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[68,81179,33059],{"class":85},[68,81181,81182],{"class":70,"line":34480},[68,81183,79470],{"class":85},[68,81185,81186],{"class":70,"line":34486},[68,81187,80963],{"class":85},[68,81189,81190,81192,81195],{"class":70,"line":34497},[68,81191,80968],{"class":85},[68,81193,81194],{"class":872},"'3997185'",[68,81196,33059],{"class":85},[68,81198,81199,81201,81204],{"class":70,"line":34503},[68,81200,80978],{"class":85},[68,81202,81203],{"class":872},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[68,81205,33059],{"class":85},[68,81207,81208,81210,81213],{"class":70,"line":34522},[68,81209,80988],{"class":85},[68,81211,81212],{"class":872},"'108.00'",[68,81214,33059],{"class":85},[68,81216,81217,81219,81222],{"class":70,"line":34528},[68,81218,80998],{"class":85},[68,81220,81221],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[68,81223,33059],{"class":85},[68,81225,81226],{"class":70,"line":34539},[68,81227,79470],{"class":85},[68,81229,81230],{"class":70,"line":34545},[68,81231,80963],{"class":85},[68,81233,81234,81236,81239],{"class":70,"line":34565},[68,81235,80968],{"class":85},[68,81237,81238],{"class":872},"'3997403'",[68,81240,33059],{"class":85},[68,81242,81243,81245,81248],{"class":70,"line":34581},[68,81244,80978],{"class":85},[68,81246,81247],{"class":872},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[68,81249,33059],{"class":85},[68,81251,81252,81254,81257],{"class":70,"line":34587},[68,81253,80988],{"class":85},[68,81255,81256],{"class":872},"'100.00'",[68,81258,33059],{"class":85},[68,81260,81261,81263,81266],{"class":70,"line":34601},[68,81262,80998],{"class":85},[68,81264,81265],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[68,81267,33059],{"class":85},[68,81269,81270],{"class":70,"line":34607},[68,81271,79470],{"class":85},[68,81273,81274],{"class":70,"line":34613},[68,81275,80963],{"class":85},[68,81277,81278,81280,81283],{"class":70,"line":34624},[68,81279,80968],{"class":85},[68,81281,81282],{"class":872},"'3998274'",[68,81284,33059],{"class":85},[68,81286,81287,81289,81292],{"class":70,"line":34630},[68,81288,80978],{"class":85},[68,81290,81291],{"class":872},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[68,81293,33059],{"class":85},[68,81295,81296,81298,81300],{"class":70,"line":34636},[68,81297,80988],{"class":85},[68,81299,81168],{"class":872},[68,81301,33059],{"class":85},[68,81303,81304,81306,81309],{"class":70,"line":34646},[68,81305,80998],{"class":85},[68,81307,81308],{"class":872},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[68,81310,33059],{"class":85},[68,81312,81313],{"class":70,"line":34652},[68,81314,79470],{"class":85},[68,81316,81317],{"class":70,"line":34663},[68,81318,54694],{"class":85},[68,81320,81321],{"class":70,"line":34669},[68,81322,4000],{"emptyLinePlaceholder":1679},[68,81324,81325],{"class":70,"line":34679},[68,81326,81327],{"class":74},"    \u002F\u002F 1.渲染函数\n",[68,81329,81330,81332,81334,81336,81338],{"class":70,"line":34684},[68,81331,71666],{"class":102},[68,81333,71669],{"class":587},[68,81335,997],{"class":85},[68,81337,5479],{"class":6815},[68,81339,14039],{"class":85},[68,81341,81342],{"class":70,"line":34690},[68,81343,81344],{"class":74},"      \u002F\u002F 声明空字符串\n",[68,81346,81347,81350,81353,81355],{"class":70,"line":34739},[68,81348,81349],{"class":102},"      let",[68,81351,81352],{"class":85}," str ",[68,81354,869],{"class":102},[68,81356,71686],{"class":872},[68,81358,81359],{"class":70,"line":34786},[68,81360,71691],{"class":74},[68,81362,81363,81365,81368,81370,81373,81376],{"class":70,"line":34791},[68,81364,59591],{"class":85},[68,81366,81367],{"class":587},"forEach",[68,81369,997],{"class":85},[68,81371,81372],{"class":6815},"item",[68,81374,81375],{"class":102}," =>",[68,81377,86],{"class":85},[68,81379,81380,81382,81385,81388,81390,81393,81395,81398,81401,81403],{"class":70,"line":34797},[68,81381,62854],{"class":102},[68,81383,81384],{"class":85}," { ",[68,81386,81387],{"class":92},"name",[68,81389,1002],{"class":85},[68,81391,81392],{"class":92},"price",[68,81394,1002],{"class":85},[68,81396,81397],{"class":92},"picture",[68,81399,81400],{"class":85}," } ",[68,81402,869],{"class":102},[68,81404,81405],{"class":85}," item\n",[68,81407,81408,81411,81413],{"class":70,"line":34816},[68,81409,81410],{"class":85},"        str ",[68,81412,11075],{"class":102},[68,81414,71750],{"class":872},[68,81416,81417],{"class":70,"line":34822},[68,81418,81419],{"class":872},"          \u003Cdiv class=\"item\">\n",[68,81421,81422,81425,81427],{"class":70,"line":34842},[68,81423,81424],{"class":872},"            \u003Cimg src=\"${",[68,81426,81397],{"class":85},[68,81428,81429],{"class":872},"}\" alt=\"\">\n",[68,81431,81432,81435,81437],{"class":70,"line":34848},[68,81433,81434],{"class":872},"            \u003Cp class=\"name\">${",[68,81436,81387],{"class":85},[68,81438,81439],{"class":872},"}\u003C\u002Fp>\n",[68,81441,81442,81445,81447],{"class":70,"line":34854},[68,81443,81444],{"class":872},"            \u003Cp class=\"price\">${",[68,81446,81392],{"class":85},[68,81448,81439],{"class":872},[68,81450,81451],{"class":70,"line":34864},[68,81452,81453],{"class":872},"          \u003C\u002Fdiv>\n",[68,81455,81456],{"class":70,"line":34869},[68,81457,81458],{"class":872},"        `\n",[68,81460,81461],{"class":70,"line":34875},[68,81462,66398],{"class":85},[68,81464,81465],{"class":70,"line":34891},[68,81466,81467],{"class":74},"      \u002F\u002F 追加给List\n",[68,81469,81470,81472,81474,81476,81479,81481,81483],{"class":70,"line":34936},[68,81471,57355],{"class":85},[68,81473,55983],{"class":587},[68,81475,997],{"class":85},[68,81477,81478],{"class":872},"'.list'",[68,81480,75827],{"class":85},[68,81482,869],{"class":102},[68,81484,75563],{"class":85},[68,81486,81487],{"class":70,"line":34942},[68,81488,3787],{"class":85},[68,81490,81491],{"class":70,"line":34948},[68,81492,81493],{"class":74},"    \u002F\u002F 页面一打开就需要渲染\n",[68,81495,81496,81499],{"class":70,"line":34954},[68,81497,81498],{"class":587},"    render",[68,81500,81501],{"class":85},"(goodsList)\n",[68,81503,81504],{"class":70,"line":34965},[68,81505,81506],{"class":74},"    \u002F\u002F 2.过滤筛选\n",[68,81508,81509,81511,81513,81515,81518,81520,81522,81524,81526,81528,81530,81532],{"class":70,"line":34971},[68,81510,53992],{"class":85},[68,81512,55983],{"class":587},[68,81514,997],{"class":85},[68,81516,81517],{"class":872},"'.filter'",[68,81519,32419],{"class":85},[68,81521,59397],{"class":587},[68,81523,997],{"class":85},[68,81525,59402],{"class":872},[68,81527,1002],{"class":85},[68,81529,1821],{"class":6815},[68,81531,81375],{"class":102},[68,81533,86],{"class":85},[68,81535,81536],{"class":70,"line":34977},[68,81537,81538],{"class":74},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[68,81540,81541,81543,81545,81548,81550,81552,81554,81556],{"class":70,"line":34983},[68,81542,59812],{"class":102},[68,81544,81384],{"class":85},[68,81546,81547],{"class":92},"tagName",[68,81549,1002],{"class":85},[68,81551,33130],{"class":92},[68,81553,81400],{"class":85},[68,81555,869],{"class":102},[68,81557,81558],{"class":85}," e.target\n",[68,81560,81561],{"class":70,"line":35001},[68,81562,81563],{"class":74},"      \u002F\u002F 判断\n",[68,81565,81566,81568,81570,81572,81574],{"class":70,"line":35015},[68,81567,56064],{"class":102},[68,81569,68616],{"class":85},[68,81571,56070],{"class":102},[68,81573,69838],{"class":872},[68,81575,14039],{"class":85},[68,81577,81578],{"class":70,"line":35024},[68,81579,81580],{"class":74},"        \u002F\u002F console.log(11)\n",[68,81582,81583],{"class":70,"line":35033},[68,81584,81585],{"class":74},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[68,81587,81588],{"class":70,"line":35042},[68,81589,81590],{"class":74},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[68,81592,81593,81595,81597,81599],{"class":70,"line":35051},[68,81594,53415],{"class":102},[68,81596,53418],{"class":85},[68,81598,869],{"class":102},[68,81600,81601],{"class":85}," goodsList\n",[68,81603,81604,81606,81609,81611,81614],{"class":70,"line":35057},[68,81605,4097],{"class":102},[68,81607,81608],{"class":85}," (dataset.index ",[68,81610,56070],{"class":102},[68,81612,81613],{"class":872}," '1'",[68,81615,14039],{"class":85},[68,81617,81618,81621,81623,81626,81629,81631,81633,81635,81638,81640,81642,81645,81647,81649,81651],{"class":70,"line":35063},[68,81619,81620],{"class":85},"          arr ",[68,81622,869],{"class":102},[68,81624,81625],{"class":85}," goodsList.",[68,81627,81628],{"class":587},"filter",[68,81630,997],{"class":85},[68,81632,81372],{"class":6815},[68,81634,81375],{"class":102},[68,81636,81637],{"class":85}," item.price ",[68,81639,3312],{"class":102},[68,81641,5692],{"class":92},[68,81643,81644],{"class":102}," &&",[68,81646,81637],{"class":85},[68,81648,3190],{"class":102},[68,81650,7353],{"class":92},[68,81652,1757],{"class":85},[68,81654,81655,81658,81660,81662,81664,81666,81669],{"class":70,"line":35071},[68,81656,81657],{"class":85},"        } ",[68,81659,3303],{"class":102},[68,81661,3306],{"class":102},[68,81663,81608],{"class":85},[68,81665,56070],{"class":102},[68,81667,81668],{"class":872}," '2'",[68,81670,14039],{"class":85},[68,81672,81673,81675,81677,81679,81681,81683,81685,81687,81689,81691,81693,81695,81697,81699,81702],{"class":70,"line":35076},[68,81674,81620],{"class":85},[68,81676,869],{"class":102},[68,81678,81625],{"class":85},[68,81680,81628],{"class":587},[68,81682,997],{"class":85},[68,81684,81372],{"class":6815},[68,81686,81375],{"class":102},[68,81688,81637],{"class":85},[68,81690,3312],{"class":102},[68,81692,7353],{"class":92},[68,81694,81644],{"class":102},[68,81696,81637],{"class":85},[68,81698,3190],{"class":102},[68,81700,81701],{"class":92}," 300",[68,81703,1757],{"class":85},[68,81705,81706,81708,81710,81712,81714,81716,81719],{"class":70,"line":35082},[68,81707,81657],{"class":85},[68,81709,3303],{"class":102},[68,81711,3306],{"class":102},[68,81713,81608],{"class":85},[68,81715,56070],{"class":102},[68,81717,81718],{"class":872}," '3'",[68,81720,14039],{"class":85},[68,81722,81723,81725,81727,81729,81731,81733,81735,81737,81739,81741,81743],{"class":70,"line":35093},[68,81724,81620],{"class":85},[68,81726,869],{"class":102},[68,81728,81625],{"class":85},[68,81730,81628],{"class":587},[68,81732,997],{"class":85},[68,81734,81372],{"class":6815},[68,81736,81375],{"class":102},[68,81738,81637],{"class":85},[68,81740,3312],{"class":102},[68,81742,81701],{"class":92},[68,81744,1757],{"class":85},[68,81746,81747],{"class":70,"line":35099},[68,81748,4129],{"class":85},[68,81750,81751],{"class":70,"line":35119},[68,81752,81753],{"class":74},"        \u002F\u002F 渲染函数\n",[68,81755,81756,81758],{"class":70,"line":35125},[68,81757,71990],{"class":587},[68,81759,53997],{"class":85},[68,81761,81762],{"class":70,"line":35131},[68,81763,53983],{"class":85},[68,81765,81766],{"class":70,"line":35137},[68,81767,4000],{"emptyLinePlaceholder":1679},[68,81769,81770],{"class":70,"line":35154},[68,81771,35054],{"class":85},[68,81773,81774,81776,81778],{"class":70,"line":35160},[68,81775,54002],{"class":85},[68,81777,53398],{"class":81},[68,81779,876],{"class":85},[68,81781,81782,81784,81786],{"class":70,"line":35166},[68,81783,886],{"class":85},[68,81785,53385],{"class":81},[68,81787,876],{"class":85},[68,81789,81790],{"class":70,"line":35172},[68,81791,4000],{"emptyLinePlaceholder":1679},[68,81793,81794,81796,81798],{"class":70,"line":35178},[68,81795,886],{"class":85},[68,81797,52228],{"class":81},[68,81799,876],{"class":85},[14,81801,81803],{"id":81802},"_410-深入了解对象","4.10 深入了解对象",[43,81805,81807],{"id":81806},"_4101-创建对象","4.10.1 创建对象",[19,81809,81810],{},[38,81811],{"alt":63,"src":81812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81814,81815],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[43,81817,81819],{"id":81818},"_4102-构造函数","4.10.2 构造函数",[19,81821,81822,81825],{},[1890,81823,81824],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81827,81828,81831],{},[1890,81829,81830],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[58,81833,81835],{"className":52226,"code":81834,"language":52228,"meta":63,"style":63},"\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",[65,81836,81837,81845,81850,81871,81884,81896,81908,81912,81917,81944,81949,81976],{"__ignoreMap":63},[68,81838,81839,81841,81843],{"class":70,"line":71},[68,81840,861],{"class":85},[68,81842,53398],{"class":81},[68,81844,876],{"class":85},[68,81846,81847],{"class":70,"line":78},[68,81848,81849],{"class":74},"\u002F\u002F例：\n",[68,81851,81852,81854,81857,81859,81861,81863,81865,81867,81869],{"class":70,"line":89},[68,81853,56033],{"class":102},[68,81855,81856],{"class":587}," Pig",[68,81858,997],{"class":85},[68,81860,81387],{"class":6815},[68,81862,2114],{"class":85},[68,81864,71803],{"class":6815},[68,81866,2114],{"class":85},[68,81868,71820],{"class":6815},[68,81870,14039],{"class":85},[68,81872,81873,81876,81879,81881],{"class":70,"line":115},[68,81874,81875],{"class":92},"    this",[68,81877,81878],{"class":85},".name",[68,81880,869],{"class":102},[68,81882,81883],{"class":85},"name\n",[68,81885,81886,81888,81891,81893],{"class":70,"line":280},[68,81887,81875],{"class":92},[68,81889,81890],{"class":85},".age",[68,81892,869],{"class":102},[68,81894,81895],{"class":85},"age\n",[68,81897,81898,81900,81903,81905],{"class":70,"line":301},[68,81899,81875],{"class":92},[68,81901,81902],{"class":85},".gender",[68,81904,869],{"class":102},[68,81906,81907],{"class":85},"gender    \n",[68,81909,81910],{"class":70,"line":320},[68,81911,118],{"class":85},[68,81913,81914],{"class":70,"line":2915},[68,81915,81916],{"class":74},"\u002F\u002F创建佩奇对象\n",[68,81918,81919,81921,81924,81926,81928,81930,81933,81935,81937,81939,81942],{"class":70,"line":2921},[68,81920,8391],{"class":102},[68,81922,81923],{"class":92}," Peppa",[68,81925,13315],{"class":102},[68,81927,81856],{"class":587},[68,81929,997],{"class":85},[68,81931,81932],{"class":872},"'佩奇'",[68,81934,2114],{"class":85},[68,81936,2080],{"class":92},[68,81938,2114],{"class":85},[68,81940,81941],{"class":872},"'女'",[68,81943,1757],{"class":85},[68,81945,81946],{"class":70,"line":2933},[68,81947,81948],{"class":74},"\u002F\u002F创建乔治对象\n",[68,81950,81951,81953,81956,81958,81960,81962,81965,81967,81969,81971,81974],{"class":70,"line":3214},[68,81952,8391],{"class":102},[68,81954,81955],{"class":92}," George",[68,81957,13315],{"class":102},[68,81959,81856],{"class":587},[68,81961,997],{"class":85},[68,81963,81964],{"class":872},"'乔治'",[68,81966,2114],{"class":85},[68,81968,288],{"class":92},[68,81970,2114],{"class":85},[68,81972,81973],{"class":872},"'男'",[68,81975,1757],{"class":85},[68,81977,81978,81980,81982],{"class":70,"line":3219},[68,81979,886],{"class":85},[68,81981,53398],{"class":81},[68,81983,876],{"class":85},[19,81985,81986],{},[38,81987],{"alt":63,"src":81988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81990,81991],{},[38,81992],{"alt":63,"src":81993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81995,81996],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81998,81999],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82001,82002],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82004,82005],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82007,82008],{},"这里用等号是因为：对象.属性=值",[19,82010,82011],{},"①利用对象字面量创建对象",[19,82013,82014],{},"const o={",[19,82016,82017],{},"name:'pink'",[19,82019,82020],{},"} ②利用new Object创建对象",[19,82022,82023],{},"const o=new Object({name:'pink'})",[19,82025,82026],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82028,82029],{},"构造函数创建对象的执行过程：",[19,82031,82032],{},[38,82033],{"alt":63,"src":82034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[43,82036,82038],{"id":82037},"_4103-实例成员","4.10.3 实例成员",[19,82040,82041],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[48,82043,82044,82047,82050],{},[51,82045,82046],{},"实例对象的属性和方法即为实例成员",[51,82048,82049],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[51,82051,82052],{},"构造函数创建的实例对象彼此独立互不影响",[43,82054,82056],{"id":82055},"_4104-静态成员","4.10.4 静态成员",[19,82058,82059],{},[38,82060],{"alt":63,"src":82061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82063,82064],{},"静态成员有Date.now() Math.PI Math.random()",[19,82066,82067],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82069,82070],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82072,82073],{},"function Pig(name) n {",[19,82075,82076],{},"this.name=name",[19,82078,2681],{},[19,82080,82081],{},"Pig.eyes=2",[19,82083,82084],{},"Pig.sayHai=function () { console.log(this) }",[19,82086,82087],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82089,82090],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82092,12930],{},[48,82094,82095,82098,82101,82104,82107],{},[51,82096,82097],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[51,82099,82100],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[51,82102,82103],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[51,82105,82106],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[51,82108,82109],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82111,82112],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[43,82114,82116],{"id":82115},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82118,82119],{},"内置构造函数包含：",[19,82121,82122],{},[38,82123],{"alt":63,"src":82124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82126,82127],{},[38,82128],{"alt":63,"src":82129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82131,82132],{},"这些基本数据类型，js对他们进行了包装",[53398,82134,82135],{},"\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",[23593,82137,82139],{"id":82138},"_41051-object","4.10.5.1 Object",[19,82141,82142],{},"Object 是内置的构造函数，用于创建普通对象",[19,82144,82145],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[58,82147,82149],{"className":52226,"code":82148,"language":52228,"meta":63,"style":63},"const user=new Object({name:'小明',age:15})\n",[65,82150,82151],{"__ignoreMap":63},[68,82152,82153],{"class":70,"line":71},[68,82154,82148],{"class":85},[19,82156,82157],{},"三个常用的静态方法：",[24505,82159,82161],{"id":82160},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82163,82164],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82166,82167],{},[38,82168],{"alt":63,"src":82169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82171,82172],{},[38,82173],{"alt":63,"src":82174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[58,82176,82178],{"className":54652,"code":82177,"language":54654,"meta":63,"style":63},"\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",[65,82179,82180,82188,82196,82201,82206,82211,82216,82221,82226,82234],{"__ignoreMap":63},[68,82181,82182,82184,82186],{"class":70,"line":71},[68,82183,861],{"class":85},[68,82185,53385],{"class":81},[68,82187,876],{"class":85},[68,82189,82190,82192,82194],{"class":70,"line":78},[68,82191,53729],{"class":85},[68,82193,53398],{"class":81},[68,82195,876],{"class":85},[68,82197,82198],{"class":70,"line":89},[68,82199,82200],{"class":85},"    const o = { name: 'pink', age: 6 }\n",[68,82202,82203],{"class":70,"line":115},[68,82204,82205],{"class":85},"    \u002F\u002F 获得所有属性名\n",[68,82207,82208],{"class":70,"line":280},[68,82209,82210],{"class":85},"    const arr = Object.keys(o)\n",[68,82212,82213],{"class":70,"line":301},[68,82214,82215],{"class":85},"    console.log(arr)\n",[68,82217,82218],{"class":70,"line":320},[68,82219,82220],{"class":85},"    \u002F\u002F 获得所有属性值\n",[68,82222,82223],{"class":70,"line":2915},[68,82224,82225],{"class":85},"    console.log(Object.values(o))\n",[68,82227,82228,82230,82232],{"class":70,"line":2921},[68,82229,54002],{"class":85},[68,82231,53398],{"class":81},[68,82233,876],{"class":85},[68,82235,82236,82238,82240],{"class":70,"line":2933},[68,82237,886],{"class":85},[68,82239,53385],{"class":81},[68,82241,876],{"class":85},[24505,82243,82245],{"id":82244},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82247,82248],{},"Object.assign(oo,o)",[19,82250,82251],{},"后的东西添加给前 是追加",[19,82253,82254],{},[38,82255],{"alt":63,"src":82256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82258,82259],{},[38,82260],{"alt":63,"src":82261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[58,82263,82265],{"className":54652,"code":82264,"language":54654,"meta":63,"style":63},"\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",[65,82266,82267,82275,82283,82287,82291,82295,82299,82303,82307,82312,82317,82322,82327,82332,82340],{"__ignoreMap":63},[68,82268,82269,82271,82273],{"class":70,"line":71},[68,82270,861],{"class":85},[68,82272,53385],{"class":81},[68,82274,876],{"class":85},[68,82276,82277,82279,82281],{"class":70,"line":78},[68,82278,53729],{"class":85},[68,82280,53398],{"class":81},[68,82282,876],{"class":85},[68,82284,82285],{"class":70,"line":89},[68,82286,82200],{"class":85},[68,82288,82289],{"class":70,"line":115},[68,82290,82205],{"class":85},[68,82292,82293],{"class":70,"line":280},[68,82294,82210],{"class":85},[68,82296,82297],{"class":70,"line":301},[68,82298,82215],{"class":85},[68,82300,82301],{"class":70,"line":320},[68,82302,82220],{"class":85},[68,82304,82305],{"class":70,"line":2915},[68,82306,82225],{"class":85},[68,82308,82309],{"class":70,"line":2921},[68,82310,82311],{"class":85},"    const oo = {}\n",[68,82313,82314],{"class":70,"line":2933},[68,82315,82316],{"class":85},"    Object.assign(oo, o)\n",[68,82318,82319],{"class":70,"line":3214},[68,82320,82321],{"class":85},"    console.log(oo)\n",[68,82323,82324],{"class":70,"line":3219},[68,82325,82326],{"class":85},"    Object.assign(o, { gender: '女' })\n",[68,82328,82329],{"class":70,"line":3225},[68,82330,82331],{"class":85},"    console.log(o)\n",[68,82333,82334,82336,82338],{"class":70,"line":3230},[68,82335,54002],{"class":85},[68,82337,53398],{"class":81},[68,82339,876],{"class":85},[68,82341,82342,82344,82346],{"class":70,"line":3244},[68,82343,886],{"class":85},[68,82345,53385],{"class":81},[68,82347,876],{"class":85},[19,82349,82350],{},[38,82351],{"alt":63,"src":82352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23593,82354,82356],{"id":82355},"_41052-array","4.10.5.2 Array",[19,82358,82359],{},"Array 是内置的构造函数，用于创建数组",[19,82361,82362],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[58,82364,82366],{"className":52226,"code":82365,"language":52228,"meta":63,"style":63},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[65,82367,82368,82373],{"__ignoreMap":63},[68,82369,82370],{"class":70,"line":71},[68,82371,82372],{"class":85},"const arr=new Array(3,5)\n",[68,82374,82375],{"class":70,"line":78},[68,82376,82377],{"class":85},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82379,82380],{},"Array的实例方法，这个方法是实例成员",[19,82382,82383],{},[38,82384],{"alt":63,"src":82385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24505,82387,82389],{"id":82388},"_410521-reduce","4.10.5.2.1 reduce",[19,82391,82392],{},[38,82393],{"alt":63,"src":82394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[58,82396,82398],{"className":54652,"code":82397,"language":54654,"meta":63,"style":63},"\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",[65,82399,82400,82408,82416,82421,82426,82431,82436,82440,82445,82450,82455,82459,82464,82469,82473,82478,82483,82488,82496],{"__ignoreMap":63},[68,82401,82402,82404,82406],{"class":70,"line":71},[68,82403,861],{"class":85},[68,82405,53385],{"class":81},[68,82407,876],{"class":85},[68,82409,82410,82412,82414],{"class":70,"line":78},[68,82411,53729],{"class":85},[68,82413,53398],{"class":81},[68,82415,876],{"class":85},[68,82417,82418],{"class":70,"line":89},[68,82419,82420],{"class":85},"    const arr = [1, 5, 8]\n",[68,82422,82423],{"class":70,"line":115},[68,82424,82425],{"class":85},"    \u002F\u002F 1.没有初始值\n",[68,82427,82428],{"class":70,"line":280},[68,82429,82430],{"class":85},"    const total = arr.reduce(function (prev, current) {\n",[68,82432,82433],{"class":70,"line":301},[68,82434,82435],{"class":85},"      return prev + current\n",[68,82437,82438],{"class":70,"line":320},[68,82439,35054],{"class":85},[68,82441,82442],{"class":70,"line":2915},[68,82443,82444],{"class":85},"    console.log(total)   \u002F\u002F14\n",[68,82446,82447],{"class":70,"line":2921},[68,82448,82449],{"class":85},"    \u002F\u002F 2.有初始值\n",[68,82451,82452],{"class":70,"line":2933},[68,82453,82454],{"class":85},"    const total1 = arr.reduce(function (prev, current) {\n",[68,82456,82457],{"class":70,"line":3214},[68,82458,82435],{"class":85},[68,82460,82461],{"class":70,"line":3219},[68,82462,82463],{"class":85},"    }, 10)\n",[68,82465,82466],{"class":70,"line":3225},[68,82467,82468],{"class":85},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[68,82470,82471],{"class":70,"line":3230},[68,82472,4000],{"emptyLinePlaceholder":1679},[68,82474,82475],{"class":70,"line":3244},[68,82476,82477],{"class":85},"    \u002F\u002F 3.箭头函数写法\n",[68,82479,82480],{"class":70,"line":3249},[68,82481,82482],{"class":85},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[68,82484,82485],{"class":70,"line":3255},[68,82486,82487],{"class":85},"    console.log(total2)   \u002F\u002F24\n",[68,82489,82490,82492,82494],{"class":70,"line":3276},[68,82491,54002],{"class":85},[68,82493,53398],{"class":81},[68,82495,876],{"class":85},[68,82497,82498,82500,82502],{"class":70,"line":3281},[68,82499,886],{"class":85},[68,82501,53385],{"class":81},[68,82503,876],{"class":85},[19,82505,82506],{},"执行过程：",[48,82508,82509,82512,82515],{},[51,82510,82511],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[51,82513,82514],{},"每一次循环，把返回值给作为下一次循环的上一次值",[51,82516,82517],{},"如果有起始值，则起始值作为上一次值",[58,82519,82521],{"className":54652,"code":82520,"language":54654,"meta":63,"style":63},"\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",[65,82522,82523,82531,82539,82543,82547,82551,82555,82559,82563,82568,82573,82578,82583,82588,82592,82596,82600,82604,82608,82612,82617,82621,82626,82630,82635,82640,82644,82648,82652,82660],{"__ignoreMap":63},[68,82524,82525,82527,82529],{"class":70,"line":71},[68,82526,861],{"class":85},[68,82528,53385],{"class":81},[68,82530,876],{"class":85},[68,82532,82533,82535,82537],{"class":70,"line":78},[68,82534,53729],{"class":85},[68,82536,53398],{"class":81},[68,82538,876],{"class":85},[68,82540,82541],{"class":70,"line":89},[68,82542,82420],{"class":85},[68,82544,82545],{"class":70,"line":115},[68,82546,82425],{"class":85},[68,82548,82549],{"class":70,"line":280},[68,82550,82430],{"class":85},[68,82552,82553],{"class":70,"line":301},[68,82554,82435],{"class":85},[68,82556,82557],{"class":70,"line":320},[68,82558,35054],{"class":85},[68,82560,82561],{"class":70,"line":2915},[68,82562,82444],{"class":85},[68,82564,82565],{"class":70,"line":2921},[68,82566,82567],{"class":85},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[68,82569,82570],{"class":70,"line":2933},[68,82571,82572],{"class":85},"    \u002F\u002F     1              5                    6\n",[68,82574,82575],{"class":70,"line":3214},[68,82576,82577],{"class":85},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[68,82579,82580],{"class":70,"line":3219},[68,82581,82582],{"class":85},"    \u002F\u002F     6              8                    14\n",[68,82584,82585],{"class":70,"line":3225},[68,82586,82587],{"class":85},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[68,82589,82590],{"class":70,"line":3230},[68,82591,82449],{"class":85},[68,82593,82594],{"class":70,"line":3244},[68,82595,82454],{"class":85},[68,82597,82598],{"class":70,"line":3249},[68,82599,82435],{"class":85},[68,82601,82602],{"class":70,"line":3255},[68,82603,82463],{"class":85},[68,82605,82606],{"class":70,"line":3276},[68,82607,82468],{"class":85},[68,82609,82610],{"class":70,"line":3281},[68,82611,82567],{"class":85},[68,82613,82614],{"class":70,"line":3295},[68,82615,82616],{"class":85},"    \u002F\u002F     10             1                     11\n",[68,82618,82619],{"class":70,"line":3300},[68,82620,82577],{"class":85},[68,82622,82623],{"class":70,"line":3329},[68,82624,82625],{"class":85},"    \u002F\u002F     11             5                    16\n",[68,82627,82628],{"class":70,"line":3334},[68,82629,82577],{"class":85},[68,82631,82632],{"class":70,"line":3351},[68,82633,82634],{"class":85},"    \u002F\u002F     16             8                    24\n",[68,82636,82637],{"class":70,"line":3356},[68,82638,82639],{"class":85},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[68,82641,82642],{"class":70,"line":3361},[68,82643,82477],{"class":85},[68,82645,82646],{"class":70,"line":3366},[68,82647,82482],{"class":85},[68,82649,82650],{"class":70,"line":3380},[68,82651,82487],{"class":85},[68,82653,82654,82656,82658],{"class":70,"line":3385},[68,82655,54002],{"class":85},[68,82657,53398],{"class":81},[68,82659,876],{"class":85},[68,82661,82662,82664,82666],{"class":70,"line":4177},[68,82663,886],{"class":85},[68,82665,53385],{"class":81},[68,82667,876],{"class":85},[24505,82669,82671],{"id":82670},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82673,82674],{},[38,82675],{"alt":63,"src":82676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[58,82678,82680],{"className":54652,"code":82679,"language":54654,"meta":63,"style":63},"\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",[65,82681,82682,82690,82698,82703,82708,82713,82718,82722,82727,82732,82737,82742,82747,82752,82756,82761,82765,82770,82778],{"__ignoreMap":63},[68,82683,82684,82686,82688],{"class":70,"line":71},[68,82685,861],{"class":85},[68,82687,53385],{"class":81},[68,82689,876],{"class":85},[68,82691,82692,82694,82696],{"class":70,"line":78},[68,82693,53729],{"class":85},[68,82695,53398],{"class":81},[68,82697,876],{"class":85},[68,82699,82700],{"class":70,"line":89},[68,82701,82702],{"class":85},"    const arr = [\n",[68,82704,82705],{"class":70,"line":115},[68,82706,82707],{"class":85},"      { name: '张三', salary: 10000 },\n",[68,82709,82710],{"class":70,"line":280},[68,82711,82712],{"class":85},"      { name: '李四', salary: 10000 },\n",[68,82714,82715],{"class":70,"line":301},[68,82716,82717],{"class":85},"      { name: '王五', salary: 10000 }\n",[68,82719,82720],{"class":70,"line":320},[68,82721,54694],{"class":85},[68,82723,82724],{"class":70,"line":2915},[68,82725,82726],{"class":85},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[68,82728,82729],{"class":70,"line":2921},[68,82730,82731],{"class":85},"    \u002F\u002F prev是累计值\n",[68,82733,82734],{"class":70,"line":2933},[68,82735,82736],{"class":85},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[68,82738,82739],{"class":70,"line":3214},[68,82740,82741],{"class":85},"    console.log(total)\n",[68,82743,82744],{"class":70,"line":3219},[68,82745,82746],{"class":85},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[68,82748,82749],{"class":70,"line":3225},[68,82750,82751],{"class":85},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[68,82753,82754],{"class":70,"line":3230},[68,82755,82746],{"class":85},[68,82757,82758],{"class":70,"line":3244},[68,82759,82760],{"class":85},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[68,82762,82763],{"class":70,"line":3249},[68,82764,82746],{"class":85},[68,82766,82767],{"class":70,"line":3255},[68,82768,82769],{"class":85},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[68,82771,82772,82774,82776],{"class":70,"line":3276},[68,82773,54002],{"class":85},[68,82775,53398],{"class":81},[68,82777,876],{"class":85},[68,82779,82780,82782,82784],{"class":70,"line":3281},[68,82781,886],{"class":85},[68,82783,53385],{"class":81},[68,82785,876],{"class":85},[24505,82787,82789],{"id":82788},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82791,82792],{},[38,82793],{"alt":63,"src":82794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82796,82797],{},[38,82798],{"alt":63,"src":82799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[48,82801,82802],{},[51,82803,82804],{},"find()",[19,82806,82807],{},"循环查找，找到第一个就ok",[19,82809,82810],{},[1974,82811,82814],{"href":82812,"rel":82813},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25459],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[58,82816,82818],{"className":52226,"code":82817,"language":52228,"meta":63,"style":63},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[65,82819,82820,82825,82830],{"__ignoreMap":63},[68,82821,82822],{"class":70,"line":71},[68,82823,82824],{"class":85},"const array1 = [5, 12, 8, 130, 44]\n",[68,82826,82827],{"class":70,"line":78},[68,82828,82829],{"class":85},"const found = array1.find((element) => element > 10)\n",[68,82831,82832],{"class":70,"line":89},[68,82833,82834],{"class":85},"console.log(found)  \u002F\u002F12\n",[19,82836,82837,82839,82840,82845,82846,82849,82850,82852,82853,82858,82859,82861,82862,82864,82865,82867,82868],{},[65,82838,82804],{}," 方法是一个",[1974,82841,82844],{"href":82842,"rel":82843},"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",[25459],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[65,82847,82848],{},"callbackFn"," 函数，直到 ",[65,82851,82848],{}," 返回一个",[1974,82854,82857],{"href":82855,"rel":82856},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25459],"真值","。然后 ",[65,82860,82804],{}," 返回该元素并停止迭代数组。如果 ",[65,82863,82848],{}," 从未返回真值，则 ",[65,82866,82804],{}," 返回 ",[65,82869,82870],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[58,82872,82874],{"className":54652,"code":82873,"language":54654,"meta":63,"style":63},"\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",[65,82875,82876,82884,82892,82897,82902,82907,82911,82916,82921,82925,82930,82935,82939,82943,82948,82953,82957,82961,82966,82971,82976,82981,82986,82990,82995,83000,83005,83010,83014,83019,83027],{"__ignoreMap":63},[68,82877,82878,82880,82882],{"class":70,"line":71},[68,82879,861],{"class":85},[68,82881,53385],{"class":81},[68,82883,876],{"class":85},[68,82885,82886,82888,82890],{"class":70,"line":78},[68,82887,53729],{"class":85},[68,82889,53398],{"class":81},[68,82891,876],{"class":85},[68,82893,82894],{"class":70,"line":89},[68,82895,82896],{"class":85},"    const arr = ['red', 'blue', 'green']\n",[68,82898,82899],{"class":70,"line":115},[68,82900,82901],{"class":85},"    const found = arr.find(item => item === 'pink')\n",[68,82903,82904],{"class":70,"line":280},[68,82905,82906],{"class":85},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[68,82908,82909],{"class":70,"line":301},[68,82910,4000],{"emptyLinePlaceholder":1679},[68,82912,82913],{"class":70,"line":320},[68,82914,82915],{"class":85},"    \u002F\u002F 使用场景，用于查找数据\n",[68,82917,82918],{"class":70,"line":2915},[68,82919,82920],{"class":85},"    const arr1 = [\n",[68,82922,82923],{"class":70,"line":2921},[68,82924,80963],{"class":85},[68,82926,82927],{"class":70,"line":2933},[68,82928,82929],{"class":85},"        name: '小米',\n",[68,82931,82932],{"class":70,"line":3214},[68,82933,82934],{"class":85},"        price: 1999\n",[68,82936,82937],{"class":70,"line":3219},[68,82938,79470],{"class":85},[68,82940,82941],{"class":70,"line":3225},[68,82942,80963],{"class":85},[68,82944,82945],{"class":70,"line":3230},[68,82946,82947],{"class":85},"        name: '华为',\n",[68,82949,82950],{"class":70,"line":3244},[68,82951,82952],{"class":85},"        price: 3999\n",[68,82954,82955],{"class":70,"line":3249},[68,82956,53983],{"class":85},[68,82958,82959],{"class":70,"line":3255},[68,82960,54694],{"class":85},[68,82962,82963],{"class":70,"line":3276},[68,82964,82965],{"class":85},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[68,82967,82968],{"class":70,"line":3281},[68,82969,82970],{"class":85},"    \u002F\u002F const found1 = arr1.find(item => {\n",[68,82972,82973],{"class":70,"line":3295},[68,82974,82975],{"class":85},"    \u002F\u002F   if (item.name === '小米') {\n",[68,82977,82978],{"class":70,"line":3300},[68,82979,82980],{"class":85},"    \u002F\u002F     return item\n",[68,82982,82983],{"class":70,"line":3329},[68,82984,82985],{"class":85},"    \u002F\u002F   }\n",[68,82987,82988],{"class":70,"line":3334},[68,82989,64873],{"class":85},[68,82991,82992],{"class":70,"line":3351},[68,82993,82994],{"class":85},"    \u002F\u002F 另一种写法\n",[68,82996,82997],{"class":70,"line":3356},[68,82998,82999],{"class":85},"    const found1 = arr1.find(item => {\n",[68,83001,83002],{"class":70,"line":3361},[68,83003,83004],{"class":85},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[68,83006,83007],{"class":70,"line":3366},[68,83008,83009],{"class":85},"      return item.name = '小米'\n",[68,83011,83012],{"class":70,"line":3380},[68,83013,35054],{"class":85},[68,83015,83016],{"class":70,"line":3385},[68,83017,83018],{"class":85},"    console.log(found1)\n",[68,83020,83021,83023,83025],{"class":70,"line":4177},[68,83022,54002],{"class":85},[68,83024,53398],{"class":81},[68,83026,876],{"class":85},[68,83028,83029,83031,83033],{"class":70,"line":4191},[68,83030,886],{"class":85},[68,83032,53385],{"class":81},[68,83034,876],{"class":85},[19,83036,83037],{},[38,83038],{"alt":63,"src":83039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83041,83042],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[48,83044,83045],{"start":78},[51,83046,83047],{},"every()返回的是布尔值",[19,83049,83050],{},[1974,83051,83054],{"href":83052,"rel":83053},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25459],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83056,83057],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83059,83060],{},"some是只有有一个就没问题",[19,83062,83063],{},"every是必须全是才行",[58,83065,83069],{"className":83066,"code":83067,"language":83068,"meta":63,"style":63},"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",[65,83070,83071,83087,83101,83105,83114],{"__ignoreMap":63},[68,83072,83073,83075,83078,83080,83082,83085],{"class":70,"line":71},[68,83074,56033],{"class":102},[68,83076,83077],{"class":85}," isBigEnough(element, ",[68,83079,75636],{"class":102},[68,83081,1002],{"class":85},[68,83083,83084],{"class":102},"array",[68,83086,14039],{"class":85},[68,83088,83089,83092,83095,83097,83099],{"class":70,"line":78},[68,83090,83091],{"class":102},"  return",[68,83093,83094],{"class":85}," element ",[68,83096,3312],{"class":102},[68,83098,989],{"class":92},[68,83100,112],{"class":85},[68,83102,83103],{"class":70,"line":89},[68,83104,118],{"class":85},[68,83106,83107,83110,83112],{"class":70,"line":115},[68,83108,83109],{"class":85},"[12, 5, 8, 130, 44].every(isBigEnough); ",[68,83111,34922],{"class":102},[68,83113,56100],{"class":85},[68,83115,83116,83119,83121],{"class":70,"line":280},[68,83117,83118],{"class":85},"[12, 54, 18, 130, 44].every(isBigEnough); ",[68,83120,34922],{"class":102},[68,83122,59524],{"class":85},[58,83124,83126],{"className":54652,"code":83125,"language":54654,"meta":63,"style":63},"\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",[65,83127,83128,83136,83144,83149,83153,83158,83163,83171],{"__ignoreMap":63},[68,83129,83130,83132,83134],{"class":70,"line":71},[68,83131,861],{"class":85},[68,83133,53385],{"class":81},[68,83135,876],{"class":85},[68,83137,83138,83140,83142],{"class":70,"line":78},[68,83139,53729],{"class":85},[68,83141,53398],{"class":81},[68,83143,876],{"class":85},[68,83145,83146],{"class":70,"line":89},[68,83147,83148],{"class":85},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[68,83150,83151],{"class":70,"line":115},[68,83152,79900],{"class":85},[68,83154,83155],{"class":70,"line":280},[68,83156,83157],{"class":85},"    const flag = arr.every(item => item >= 10)\n",[68,83159,83160],{"class":70,"line":301},[68,83161,83162],{"class":85},"    console.log(flag)    \u002F\u002Ftrue\n",[68,83164,83165,83167,83169],{"class":70,"line":320},[68,83166,54002],{"class":85},[68,83168,53398],{"class":81},[68,83170,876],{"class":85},[68,83172,83173,83175,83177],{"class":70,"line":2915},[68,83174,886],{"class":85},[68,83176,53385],{"class":81},[68,83178,876],{"class":85},[58,83180,83182],{"className":54652,"code":83181,"language":54654,"meta":63,"style":63},"\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",[65,83183,83184,83192,83200,83204,83209,83214,83219,83227],{"__ignoreMap":63},[68,83185,83186,83188,83190],{"class":70,"line":71},[68,83187,861],{"class":85},[68,83189,53385],{"class":81},[68,83191,876],{"class":85},[68,83193,83194,83196,83198],{"class":70,"line":78},[68,83195,53729],{"class":85},[68,83197,53398],{"class":81},[68,83199,876],{"class":85},[68,83201,83202],{"class":70,"line":89},[68,83203,83148],{"class":85},[68,83205,83206],{"class":70,"line":115},[68,83207,83208],{"class":85},"    const arr = [10, 0, 5]\n",[68,83210,83211],{"class":70,"line":280},[68,83212,83213],{"class":85},"    const flag = arr.some(item => item >= 10)\n",[68,83215,83216],{"class":70,"line":301},[68,83217,83218],{"class":85},"    console.log(flag)   \u002F\u002Ftrue\n",[68,83220,83221,83223,83225],{"class":70,"line":320},[68,83222,54002],{"class":85},[68,83224,53398],{"class":81},[68,83226,876],{"class":85},[68,83228,83229,83231,83233],{"class":70,"line":2915},[68,83230,886],{"class":85},[68,83232,53385],{"class":81},[68,83234,876],{"class":85},[24505,83236,83238],{"id":83237},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83240,83241],{},[38,83242],{"alt":63,"src":83243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[58,83245,83247],{"className":52226,"code":83246,"language":52228,"meta":63,"style":63},"\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",[65,83248,83249,83259,83273,83277,83285,83299,83319,83331,83339,83346,83358,83370,83382,83394,83404,83414,83418,83426,83434,83438,83446,83458,83466,83488,83493,83498,83531,83539,83547,83551],{"__ignoreMap":63},[68,83250,83251,83253,83255,83257],{"class":70,"line":71},[68,83252,52890],{"class":85},[68,83254,52893],{"class":81},[68,83256,52896],{"class":587},[68,83258,876],{"class":85},[68,83260,83261,83263,83265,83267,83269,83271],{"class":70,"line":78},[68,83262,861],{"class":85},[68,83264,52228],{"class":81},[68,83266,52907],{"class":587},[68,83268,869],{"class":85},[68,83270,52912],{"class":872},[68,83272,876],{"class":85},[68,83274,83275],{"class":70,"line":89},[68,83276,4000],{"emptyLinePlaceholder":1679},[68,83278,83279,83281,83283],{"class":70,"line":115},[68,83280,861],{"class":85},[68,83282,52925],{"class":81},[68,83284,876],{"class":85},[68,83286,83287,83289,83291,83293,83295,83297],{"class":70,"line":280},[68,83288,53729],{"class":85},[68,83290,52935],{"class":81},[68,83292,52938],{"class":587},[68,83294,869],{"class":85},[68,83296,52943],{"class":872},[68,83298,876],{"class":85},[68,83300,83301,83303,83305,83307,83309,83311,83313,83315,83317],{"class":70,"line":301},[68,83302,53729],{"class":85},[68,83304,52935],{"class":81},[68,83306,16516],{"class":587},[68,83308,869],{"class":85},[68,83310,52982],{"class":872},[68,83312,52962],{"class":587},[68,83314,869],{"class":85},[68,83316,52989],{"class":872},[68,83318,876],{"class":85},[68,83320,83321,83323,83325,83327,83329],{"class":70,"line":320},[68,83322,53729],{"class":85},[68,83324,52998],{"class":81},[68,83326,53001],{"class":85},[68,83328,52998],{"class":81},[68,83330,876],{"class":85},[68,83332,83333,83335,83337],{"class":70,"line":2915},[68,83334,53729],{"class":85},[68,83336,1652],{"class":81},[68,83338,876],{"class":85},[68,83340,83341,83344],{"class":70,"line":2921},[68,83342,83343],{"class":81},"    div",[68,83345,86],{"class":85},[68,83347,83348,83350,83352,83354,83356],{"class":70,"line":2933},[68,83349,56355],{"class":92},[68,83351,96],{"class":85},[68,83353,3324],{"class":92},[68,83355,103],{"class":102},[68,83357,112],{"class":85},[68,83359,83360,83362,83364,83366,83368],{"class":70,"line":3214},[68,83361,56369],{"class":92},[68,83363,96],{"class":85},[68,83365,2137],{"class":92},[68,83367,103],{"class":102},[68,83369,112],{"class":85},[68,83371,83372,83374,83376,83378,83380],{"class":70,"line":3219},[68,83373,58943],{"class":92},[68,83375,96],{"class":85},[68,83377,2137],{"class":92},[68,83379,103],{"class":102},[68,83381,112],{"class":85},[68,83383,83384,83386,83388,83390,83392],{"class":70,"line":3225},[68,83385,66715],{"class":92},[68,83387,96],{"class":85},[68,83389,2234],{"class":92},[68,83391,103],{"class":102},[68,83393,112],{"class":85},[68,83395,83396,83398,83400,83402],{"class":70,"line":3230},[68,83397,58870],{"class":92},[68,83399,96],{"class":85},[68,83401,53179],{"class":92},[68,83403,112],{"class":85},[68,83405,83406,83408,83410,83412],{"class":70,"line":3244},[68,83407,56468],{"class":92},[68,83409,96],{"class":85},[68,83411,53231],{"class":92},[68,83413,112],{"class":85},[68,83415,83416],{"class":70,"line":3249},[68,83417,3787],{"class":85},[68,83419,83420,83422,83424],{"class":70,"line":3255},[68,83421,54002],{"class":85},[68,83423,1652],{"class":81},[68,83425,876],{"class":85},[68,83427,83428,83430,83432],{"class":70,"line":3276},[68,83429,886],{"class":85},[68,83431,52925],{"class":81},[68,83433,876],{"class":85},[68,83435,83436],{"class":70,"line":3281},[68,83437,4000],{"emptyLinePlaceholder":1679},[68,83439,83440,83442,83444],{"class":70,"line":3295},[68,83441,861],{"class":85},[68,83443,53385],{"class":81},[68,83445,876],{"class":85},[68,83447,83448,83450,83452,83454,83456],{"class":70,"line":3300},[68,83449,53729],{"class":85},[68,83451,82],{"class":81},[68,83453,56898],{"class":85},[68,83455,82],{"class":81},[68,83457,876],{"class":85},[68,83459,83460,83462,83464],{"class":70,"line":3329},[68,83461,53729],{"class":85},[68,83463,53398],{"class":81},[68,83465,876],{"class":85},[68,83467,83468,83470,83473,83475,83478,83481,83483,83486],{"class":70,"line":3334},[68,83469,12819],{"class":102},[68,83471,83472],{"class":92}," spec",[68,83474,15161],{"class":102},[68,83476,83477],{"class":85}," { size: ",[68,83479,83480],{"class":872},"'40cm*40cm'",[68,83482,57048],{"class":85},[68,83484,83485],{"class":872},"'黑色'",[68,83487,57188],{"class":85},[68,83489,83490],{"class":70,"line":3351},[68,83491,83492],{"class":74},"    \u002F\u002F const arr = Object.values(spec)\n",[68,83494,83495],{"class":70,"line":3356},[68,83496,83497],{"class":74},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[68,83499,83500,83502,83504,83506,83509,83511,83513,83516,83519,83522,83524,83526,83529],{"class":70,"line":3361},[68,83501,53992],{"class":85},[68,83503,55983],{"class":587},[68,83505,997],{"class":85},[68,83507,83508],{"class":872},"'div'",[68,83510,75827],{"class":85},[68,83512,869],{"class":102},[68,83514,83515],{"class":85}," Object.",[68,83517,83518],{"class":587},"values",[68,83520,83521],{"class":85},"(spec).",[68,83523,75801],{"class":587},[68,83525,997],{"class":85},[68,83527,83528],{"class":872},"'\u002F'",[68,83530,1757],{"class":85},[68,83532,83533,83535,83537],{"class":70,"line":3366},[68,83534,54002],{"class":85},[68,83536,53398],{"class":81},[68,83538,876],{"class":85},[68,83540,83541,83543,83545],{"class":70,"line":3380},[68,83542,886],{"class":85},[68,83544,53385],{"class":81},[68,83546,876],{"class":85},[68,83548,83549],{"class":70,"line":3385},[68,83550,4000],{"emptyLinePlaceholder":1679},[68,83552,83553,83555,83557],{"class":70,"line":4177},[68,83554,886],{"class":85},[68,83556,52228],{"class":81},[68,83558,876],{"class":85},[19,83560,83561],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24505,83563,83565],{"id":83564},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83567,83568],{},"静态方法，将伪数组转换为真数组",[19,83570,83571],{},[38,83572],{"alt":63,"src":83573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[58,83575,83577],{"className":54652,"code":83576,"language":54654,"meta":63,"style":63},"\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",[65,83578,83579,83587,83595,83607,83619,83631,83639,83647,83652,83657,83662,83667,83675],{"__ignoreMap":63},[68,83580,83581,83583,83585],{"class":70,"line":71},[68,83582,861],{"class":85},[68,83584,53385],{"class":81},[68,83586,876],{"class":85},[68,83588,83589,83591,83593],{"class":70,"line":78},[68,83590,53729],{"class":85},[68,83592,168],{"class":81},[68,83594,876],{"class":85},[68,83596,83597,83599,83601,83603,83605],{"class":70,"line":89},[68,83598,52932],{"class":85},[68,83600,51],{"class":81},[68,83602,56898],{"class":85},[68,83604,51],{"class":81},[68,83606,876],{"class":85},[68,83608,83609,83611,83613,83615,83617],{"class":70,"line":115},[68,83610,52932],{"class":85},[68,83612,51],{"class":81},[68,83614,56898],{"class":85},[68,83616,51],{"class":81},[68,83618,876],{"class":85},[68,83620,83621,83623,83625,83627,83629],{"class":70,"line":280},[68,83622,52932],{"class":85},[68,83624,51],{"class":81},[68,83626,56898],{"class":85},[68,83628,51],{"class":81},[68,83630,876],{"class":85},[68,83632,83633,83635,83637],{"class":70,"line":301},[68,83634,54002],{"class":85},[68,83636,168],{"class":81},[68,83638,876],{"class":85},[68,83640,83641,83643,83645],{"class":70,"line":320},[68,83642,53729],{"class":85},[68,83644,53398],{"class":81},[68,83646,876],{"class":85},[68,83648,83649],{"class":70,"line":2915},[68,83650,83651],{"class":85},"    const lis = document.querySelectorAll('li')\n",[68,83653,83654],{"class":70,"line":2921},[68,83655,83656],{"class":85},"    const liss = Array.from(lis)\n",[68,83658,83659],{"class":70,"line":2933},[68,83660,83661],{"class":85},"    liss.pop()\n",[68,83663,83664],{"class":70,"line":3214},[68,83665,83666],{"class":85},"    console.log(liss)\n",[68,83668,83669,83671,83673],{"class":70,"line":3219},[68,83670,54002],{"class":85},[68,83672,53398],{"class":81},[68,83674,876],{"class":85},[68,83676,83677,83679,83681],{"class":70,"line":3225},[68,83678,886],{"class":85},[68,83680,53385],{"class":81},[68,83682,876],{"class":85},[19,83684,83685],{},[38,83686],{"alt":63,"src":83687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23593,83689,83691],{"id":83690},"_41053-string","4.10.5.3 String",[19,83693,83694],{},[38,83695],{"alt":63,"src":83696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24505,83698,83700],{"id":83699},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[58,83702,83704],{"className":54652,"code":83703,"language":54654,"meta":63,"style":63},"\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",[65,83705,83706,83714,83722,83727,83732,83737,83741,83746,83751,83756,83764],{"__ignoreMap":63},[68,83707,83708,83710,83712],{"class":70,"line":71},[68,83709,861],{"class":85},[68,83711,53385],{"class":81},[68,83713,876],{"class":85},[68,83715,83716,83718,83720],{"class":70,"line":78},[68,83717,53729],{"class":85},[68,83719,53398],{"class":81},[68,83721,876],{"class":85},[68,83723,83724],{"class":70,"line":89},[68,83725,83726],{"class":85},"    \u002F\u002F 把字符串转化为数组\n",[68,83728,83729],{"class":70,"line":115},[68,83730,83731],{"class":85},"    const str = 'pink,red'\n",[68,83733,83734],{"class":70,"line":280},[68,83735,83736],{"class":85},"    const arr = str.split(',')\n",[68,83738,83739],{"class":70,"line":301},[68,83740,82215],{"class":85},[68,83742,83743],{"class":70,"line":320},[68,83744,83745],{"class":85},"    const str1 = '2025-8-25'\n",[68,83747,83748],{"class":70,"line":2915},[68,83749,83750],{"class":85},"    const arr1 = str1.split('-')\n",[68,83752,83753],{"class":70,"line":2921},[68,83754,83755],{"class":85},"    console.log(arr1)\n",[68,83757,83758,83760,83762],{"class":70,"line":2933},[68,83759,54002],{"class":85},[68,83761,53398],{"class":81},[68,83763,876],{"class":85},[68,83765,83766,83768,83770],{"class":70,"line":3214},[68,83767,886],{"class":85},[68,83769,53385],{"class":81},[68,83771,876],{"class":85},[24505,83773,83775],{"id":83774},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83777,6780],{},[19,83779,83780],{},"substring(indexStart)",[19,83782,83783],{},"substring(indexStart, indexEnd)",[168,83785,83786,83797,83809,83819],{},[51,83787,83788,83789,83792,83793,83796],{},"如果省略了 ",[65,83790,83791],{},"indexEnd","，则 ",[65,83794,83795],{},"substring()"," 提取字符直到字符串的末尾",[51,83798,83799,83800,83803,83804,83792,83806,83808],{},"如果 ",[65,83801,83802],{},"indexStart"," 等于 ",[65,83805,83791],{},[65,83807,83795],{}," 返回一个空字符串",[51,83810,83799,83811,83813,83814,83792,83816,83818],{},[65,83812,83802],{}," 大于 ",[65,83815,83791],{},[65,83817,83795],{}," 的效果就像交换了这两个参数一样",[51,83820,83821],{},"结束的索引号不包含想要截取的部分",[58,83823,83825],{"className":83066,"code":83824,"language":83068,"meta":63,"style":63},"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",[65,83826,83827,83839,83843,83877,83907,83911,83942,83946,83973,84003,84033,84037,84068],{"__ignoreMap":63},[68,83828,83829,83832,83834,83837],{"class":70,"line":71},[68,83830,83831],{"class":85},"const anyString ",[68,83833,869],{"class":102},[68,83835,83836],{"class":872}," \"Mozilla\"",[68,83838,112],{"class":85},[68,83840,83841],{"class":70,"line":78},[68,83842,4000],{"emptyLinePlaceholder":1679},[68,83844,83845,83848,83850,83852,83854,83857,83859,83862,83864,83866,83868,83870,83872,83874],{"class":70,"line":89},[68,83846,83847],{"class":92},"console",[68,83849,2294],{"class":85},[68,83851,59831],{"class":92},[68,83853,997],{"class":85},[68,83855,83856],{"class":92},"anyString",[68,83858,2294],{"class":85},[68,83860,83861],{"class":92},"substring",[68,83863,997],{"class":85},[68,83865,600],{"class":92},[68,83867,1002],{"class":85},[68,83869,99],{"class":92},[68,83871,76831],{"class":85},[68,83873,34922],{"class":102},[68,83875,83876],{"class":872}," 'M'\n",[68,83878,83879,83881,83883,83885,83887,83889,83891,83893,83895,83897,83899,83901,83903,83905],{"class":70,"line":115},[68,83880,83847],{"class":92},[68,83882,2294],{"class":85},[68,83884,59831],{"class":92},[68,83886,997],{"class":85},[68,83888,83856],{"class":92},[68,83890,2294],{"class":85},[68,83892,83861],{"class":92},[68,83894,997],{"class":85},[68,83896,99],{"class":92},[68,83898,1002],{"class":85},[68,83900,600],{"class":92},[68,83902,76831],{"class":85},[68,83904,34922],{"class":102},[68,83906,83876],{"class":872},[68,83908,83909],{"class":70,"line":280},[68,83910,4000],{"emptyLinePlaceholder":1679},[68,83912,83913,83915,83917,83919,83921,83923,83925,83927,83929,83931,83933,83935,83937,83939],{"class":70,"line":301},[68,83914,83847],{"class":92},[68,83916,2294],{"class":85},[68,83918,59831],{"class":92},[68,83920,997],{"class":85},[68,83922,83856],{"class":92},[68,83924,2294],{"class":85},[68,83926,83861],{"class":92},[68,83928,997],{"class":85},[68,83930,600],{"class":92},[68,83932,1002],{"class":85},[68,83934,2080],{"class":92},[68,83936,76831],{"class":85},[68,83938,34922],{"class":102},[68,83940,83941],{"class":872}," 'Mozill'\n",[68,83943,83944],{"class":70,"line":320},[68,83945,4000],{"emptyLinePlaceholder":1679},[68,83947,83948,83950,83952,83954,83956,83958,83960,83962,83964,83966,83968,83970],{"class":70,"line":2915},[68,83949,83847],{"class":92},[68,83951,2294],{"class":85},[68,83953,59831],{"class":92},[68,83955,997],{"class":85},[68,83957,83856],{"class":92},[68,83959,2294],{"class":85},[68,83961,83861],{"class":92},[68,83963,997],{"class":85},[68,83965,2029],{"class":92},[68,83967,76831],{"class":85},[68,83969,34922],{"class":102},[68,83971,83972],{"class":872}," 'lla'\n",[68,83974,83975,83977,83979,83981,83983,83985,83987,83989,83991,83993,83995,83997,83999,84001],{"class":70,"line":2921},[68,83976,83847],{"class":92},[68,83978,2294],{"class":85},[68,83980,59831],{"class":92},[68,83982,997],{"class":85},[68,83984,83856],{"class":92},[68,83986,2294],{"class":85},[68,83988,83861],{"class":92},[68,83990,997],{"class":85},[68,83992,2029],{"class":92},[68,83994,1002],{"class":85},[68,83996,2105],{"class":92},[68,83998,76887],{"class":85},[68,84000,34922],{"class":102},[68,84002,83972],{"class":872},[68,84004,84005,84007,84009,84011,84013,84015,84017,84019,84021,84023,84025,84027,84029,84031],{"class":70,"line":2933},[68,84006,83847],{"class":92},[68,84008,2294],{"class":85},[68,84010,59831],{"class":92},[68,84012,997],{"class":85},[68,84014,83856],{"class":92},[68,84016,2294],{"class":85},[68,84018,83861],{"class":92},[68,84020,997],{"class":85},[68,84022,2105],{"class":92},[68,84024,1002],{"class":85},[68,84026,2029],{"class":92},[68,84028,76831],{"class":85},[68,84030,34922],{"class":102},[68,84032,83972],{"class":872},[68,84034,84035],{"class":70,"line":3214},[68,84036,4000],{"emptyLinePlaceholder":1679},[68,84038,84039,84041,84043,84045,84047,84049,84051,84053,84055,84057,84059,84061,84063,84065],{"class":70,"line":3219},[68,84040,83847],{"class":92},[68,84042,2294],{"class":85},[68,84044,59831],{"class":92},[68,84046,997],{"class":85},[68,84048,83856],{"class":92},[68,84050,2294],{"class":85},[68,84052,83861],{"class":92},[68,84054,997],{"class":85},[68,84056,600],{"class":92},[68,84058,1002],{"class":85},[68,84060,2105],{"class":92},[68,84062,76831],{"class":85},[68,84064,34922],{"class":102},[68,84066,84067],{"class":872}," 'Mozilla'\n",[68,84069,84070,84072,84074,84076,84078,84080,84082,84084,84086,84088,84090,84092,84094,84096],{"class":70,"line":3225},[68,84071,83847],{"class":92},[68,84073,2294],{"class":85},[68,84075,59831],{"class":92},[68,84077,997],{"class":85},[68,84079,83856],{"class":92},[68,84081,2294],{"class":85},[68,84083,83861],{"class":92},[68,84085,997],{"class":85},[68,84087,600],{"class":92},[68,84089,1002],{"class":85},[68,84091,2182],{"class":92},[68,84093,76831],{"class":85},[68,84095,34922],{"class":102},[68,84097,84067],{"class":872},[24505,84099,84101],{"id":84100},"_410533-startswith","4.10.5.3.3 startsWith",[19,84103,84104,84107,84108,84113,84114,84116,84117],{},[65,84105,84106],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1890,84109,84110],{},[65,84111,84112],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[65,84115,2966],{}," 或 ",[65,84118,67602],{},[58,84120,84122],{"className":79073,"code":84121,"language":79075,"meta":63,"style":63},"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",[65,84123,84124,84136,84155,84160,84180],{"__ignoreMap":63},[68,84125,84126,84128,84131,84133],{"class":70,"line":71},[68,84127,8391],{"class":102},[68,84129,84130],{"class":85}," str1 ",[68,84132,869],{"class":102},[68,84134,84135],{"class":872}," \"Saturday night plans\"\n",[68,84137,84138,84140,84142,84145,84148,84150,84153],{"class":70,"line":78},[68,84139,79110],{"class":85},[68,84141,59831],{"class":587},[68,84143,84144],{"class":85},"(str1.",[68,84146,84147],{"class":587},"startsWith",[68,84149,997],{"class":85},[68,84151,84152],{"class":872},"\"Sat\"",[68,84154,32090],{"class":85},[68,84156,84157],{"class":70,"line":89},[68,84158,84159],{"class":74},"\u002F\u002F Expected output: true\n",[68,84161,84162,84164,84166,84168,84170,84172,84174,84176,84178],{"class":70,"line":115},[68,84163,79110],{"class":85},[68,84165,59831],{"class":587},[68,84167,84144],{"class":85},[68,84169,84147],{"class":587},[68,84171,997],{"class":85},[68,84173,84152],{"class":872},[68,84175,1002],{"class":85},[68,84177,288],{"class":92},[68,84179,32090],{"class":85},[68,84181,84182],{"class":70,"line":280},[68,84183,84184],{"class":74},"\u002F\u002F Expected output: false\n",[58,84186,84188],{"className":52226,"code":84187,"language":52228,"meta":63,"style":63},"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",[65,84189,84190,84195,84200,84204,84209,84214],{"__ignoreMap":63},[68,84191,84192],{"class":70,"line":71},[68,84193,84194],{"class":85},"startsWith(searchString)\n",[68,84196,84197],{"class":70,"line":78},[68,84198,84199],{"class":85},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[68,84201,84202],{"class":70,"line":89},[68,84203,4000],{"emptyLinePlaceholder":1679},[68,84205,84206],{"class":70,"line":115},[68,84207,84208],{"class":85},"const str3 = 'pink老师上课中'\n",[68,84210,84211],{"class":70,"line":280},[68,84212,84213],{"class":85},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[68,84215,84216],{"class":70,"line":301},[68,84217,84218],{"class":85},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24505,84220,84222],{"id":84221},"_410534-includes","4.10.5.3.4 includes",[19,84224,84225],{},"includes(searchString) includes(searchString, position)",[48,84227,84228],{},[51,84229,84230],{},"searchString:",[19,84232,84233,84234,84236,84237,84242,84243,84248,84249,23095,84252,84255,84256,84259],{},"一个要在 ",[65,84235,2903],{}," 中查找的字符串。",[1974,84238,84241],{"href":84239,"rel":84240},"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",[25459],"不能是正则表达式","。所有非正则表达式的值都会被",[1974,84244,84247],{"href":84245,"rel":84246},"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",[25459],"强制转换为字符串","，因此如果该参数被省略或传入 ",[65,84250,84251],{},"undefined",[65,84253,84254],{},"includes()"," 方法会在字符串中搜索 ",[65,84257,84258],{},"\"undefined\"","，这通常不是你想要的",[48,84261,84262],{"start":78},[51,84263,84264,2595],{},[65,84265,84266],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84268,84269,84270,84273,84274],{},"在字符串中开始搜索 ",[65,84271,84272],{},"searchString"," 的位置。默认值为 ",[65,84275,600],{},[48,84277,84278],{"start":89},[51,84279,84280],{},"返回值：",[19,84282,84283,84284,84286,84287,84291,84292],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[65,84285,84272],{}," 为空字符串的情况），则返回 ",[1890,84288,84289],{},[65,84290,2966],{}," ，否则返回 ",[1890,84293,84294],{},[65,84295,67602],{},[48,84297,84298],{"start":115},[51,84299,84300],{},"异常：",[19,84302,83799,84303,15392,84305,84309],{},[65,84304,84272],{},[1974,84306,84308],{"href":84239,"rel":84307},[25459],"是一个正则表达式","，则会抛出",[19,84311,84312],{},"只要是有就是true，不需要非得以谁开头结尾",[58,84314,84316],{"className":79073,"code":84315,"language":79075,"meta":63,"style":63},"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",[65,84317,84318,84329,84352,84371,84391,84413,84432],{"__ignoreMap":63},[68,84319,84320,84322,84324,84326],{"class":70,"line":71},[68,84321,8391],{"class":102},[68,84323,81352],{"class":85},[68,84325,869],{"class":102},[68,84327,84328],{"class":872}," \"To be, or not to be, that is the question.\"\n",[68,84330,84331,84333,84335,84338,84341,84343,84346,84349],{"class":70,"line":78},[68,84332,79110],{"class":85},[68,84334,59831],{"class":587},[68,84336,84337],{"class":85},"(str.",[68,84339,84340],{"class":587},"includes",[68,84342,997],{"class":85},[68,84344,84345],{"class":872},"\"To be\"",[68,84347,84348],{"class":85},"))",[68,84350,84351],{"class":74},"  \u002F\u002F true\n",[68,84353,84354,84356,84358,84360,84362,84364,84367,84369],{"class":70,"line":89},[68,84355,79110],{"class":85},[68,84357,59831],{"class":587},[68,84359,84337],{"class":85},[68,84361,84340],{"class":587},[68,84363,997],{"class":85},[68,84365,84366],{"class":872},"\"question\"",[68,84368,84348],{"class":85},[68,84370,84351],{"class":74},[68,84372,84373,84375,84377,84379,84381,84383,84386,84388],{"class":70,"line":115},[68,84374,79110],{"class":85},[68,84376,59831],{"class":587},[68,84378,84337],{"class":85},[68,84380,84340],{"class":587},[68,84382,997],{"class":85},[68,84384,84385],{"class":872},"\"nonexistent\"",[68,84387,84348],{"class":85},[68,84389,84390],{"class":74},"  \u002F\u002F false\n",[68,84392,84393,84395,84397,84399,84401,84403,84405,84407,84409,84411],{"class":70,"line":280},[68,84394,79110],{"class":85},[68,84396,59831],{"class":587},[68,84398,84337],{"class":85},[68,84400,84340],{"class":587},[68,84402,997],{"class":85},[68,84404,84345],{"class":872},[68,84406,1002],{"class":85},[68,84408,99],{"class":92},[68,84410,84348],{"class":85},[68,84412,84390],{"class":74},[68,84414,84415,84417,84419,84421,84423,84425,84428,84430],{"class":70,"line":301},[68,84416,79110],{"class":85},[68,84418,59831],{"class":587},[68,84420,84337],{"class":85},[68,84422,84340],{"class":587},[68,84424,997],{"class":85},[68,84426,84427],{"class":872},"\"TO BE\"",[68,84429,84348],{"class":85},[68,84431,84390],{"class":74},[68,84433,84434,84436,84438,84440,84442,84444,84446,84448],{"class":70,"line":320},[68,84435,79110],{"class":85},[68,84437,59831],{"class":587},[68,84439,84337],{"class":85},[68,84441,84340],{"class":587},[68,84443,997],{"class":85},[68,84445,9251],{"class":872},[68,84447,84348],{"class":85},[68,84449,84351],{"class":74},[24505,84451,84453],{"id":84452},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[58,84455,84457],{"className":54652,"code":84456,"language":54654,"meta":63,"style":63},"\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",[65,84458,84459,84467,84475,84480,84485,84490,84495,84500,84508],{"__ignoreMap":63},[68,84460,84461,84463,84465],{"class":70,"line":71},[68,84462,861],{"class":85},[68,84464,53385],{"class":81},[68,84466,876],{"class":85},[68,84468,84469,84471,84473],{"class":70,"line":78},[68,84470,53729],{"class":85},[68,84472,53398],{"class":81},[68,84474,876],{"class":85},[68,84476,84477],{"class":70,"line":89},[68,84478,84479],{"class":85},"    const num = 10\n",[68,84481,84482],{"class":70,"line":115},[68,84483,84484],{"class":85},"    \u002F\u002F 强制转换\n",[68,84486,84487],{"class":70,"line":280},[68,84488,84489],{"class":85},"    console.log(String(num))\n",[68,84491,84492],{"class":70,"line":301},[68,84493,84494],{"class":85},"    \u002F\u002F toString()方法转换\n",[68,84496,84497],{"class":70,"line":320},[68,84498,84499],{"class":85},"    console.log(num.toString())\n",[68,84501,84502,84504,84506],{"class":70,"line":2915},[68,84503,54002],{"class":85},[68,84505,53398],{"class":81},[68,84507,876],{"class":85},[68,84509,84510,84512,84514],{"class":70,"line":2921},[68,84511,886],{"class":85},[68,84513,53385],{"class":81},[68,84515,876],{"class":85},[24505,84517,84519],{"id":84518},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84521,84522],{},[38,84523],{"alt":63,"src":84524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[58,84526,84528],{"className":52226,"code":84527,"language":52228,"meta":63,"style":63},"\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",[65,84529,84530,84540,84554,84558,84566,84580,84600,84612,84620,84624,84632,84644,84652,84664,84669,84674,84679,84726,84742,84750,84758,84762],{"__ignoreMap":63},[68,84531,84532,84534,84536,84538],{"class":70,"line":71},[68,84533,52890],{"class":85},[68,84535,52893],{"class":81},[68,84537,52896],{"class":587},[68,84539,876],{"class":85},[68,84541,84542,84544,84546,84548,84550,84552],{"class":70,"line":78},[68,84543,861],{"class":85},[68,84545,52228],{"class":81},[68,84547,52907],{"class":587},[68,84549,869],{"class":85},[68,84551,52912],{"class":872},[68,84553,876],{"class":85},[68,84555,84556],{"class":70,"line":89},[68,84557,4000],{"emptyLinePlaceholder":1679},[68,84559,84560,84562,84564],{"class":70,"line":115},[68,84561,861],{"class":85},[68,84563,52925],{"class":81},[68,84565,876],{"class":85},[68,84567,84568,84570,84572,84574,84576,84578],{"class":70,"line":280},[68,84569,53729],{"class":85},[68,84571,52935],{"class":81},[68,84573,52938],{"class":587},[68,84575,869],{"class":85},[68,84577,52943],{"class":872},[68,84579,876],{"class":85},[68,84581,84582,84584,84586,84588,84590,84592,84594,84596,84598],{"class":70,"line":301},[68,84583,53729],{"class":85},[68,84585,52935],{"class":81},[68,84587,16516],{"class":587},[68,84589,869],{"class":85},[68,84591,52982],{"class":872},[68,84593,52962],{"class":587},[68,84595,869],{"class":85},[68,84597,52989],{"class":872},[68,84599,876],{"class":85},[68,84601,84602,84604,84606,84608,84610],{"class":70,"line":320},[68,84603,53729],{"class":85},[68,84605,52998],{"class":81},[68,84607,53001],{"class":85},[68,84609,52998],{"class":81},[68,84611,876],{"class":85},[68,84613,84614,84616,84618],{"class":70,"line":2915},[68,84615,886],{"class":85},[68,84617,52925],{"class":81},[68,84619,876],{"class":85},[68,84621,84622],{"class":70,"line":2921},[68,84623,4000],{"emptyLinePlaceholder":1679},[68,84625,84626,84628,84630],{"class":70,"line":2933},[68,84627,861],{"class":85},[68,84629,53385],{"class":81},[68,84631,876],{"class":85},[68,84633,84634,84636,84638,84640,84642],{"class":70,"line":3214},[68,84635,53729],{"class":85},[68,84637,82],{"class":81},[68,84639,56898],{"class":85},[68,84641,82],{"class":81},[68,84643,876],{"class":85},[68,84645,84646,84648,84650],{"class":70,"line":3219},[68,84647,53729],{"class":85},[68,84649,53398],{"class":81},[68,84651,876],{"class":85},[68,84653,84654,84656,84659,84661],{"class":70,"line":3225},[68,84655,12819],{"class":102},[68,84657,84658],{"class":92}," gift",[68,84660,15161],{"class":102},[68,84662,84663],{"class":872}," '50g的茶叶，清洗球'\n",[68,84665,84666],{"class":70,"line":3230},[68,84667,84668],{"class":74},"    \u002F\u002F 1.把字符串拆分为数组\n",[68,84670,84671],{"class":70,"line":3244},[68,84672,84673],{"class":74},"    \u002F\u002F console.log(gift.split(','))\n",[68,84675,84676],{"class":70,"line":3249},[68,84677,84678],{"class":74},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[68,84680,84681,84683,84685,84687,84690,84693,84695,84698,84700,84702,84704,84706,84708,84711,84713,84716,84718,84720,84722,84724],{"class":70,"line":3255},[68,84682,12819],{"class":102},[68,84684,75497],{"class":92},[68,84686,15161],{"class":102},[68,84688,84689],{"class":85}," gift.",[68,84691,84692],{"class":587},"split",[68,84694,997],{"class":85},[68,84696,84697],{"class":872},"'，'",[68,84699,32419],{"class":85},[68,84701,75622],{"class":587},[68,84703,997],{"class":85},[68,84705,81372],{"class":6815},[68,84707,81375],{"class":102},[68,84709,84710],{"class":872}," `\u003Cspan>【赠品】${",[68,84712,81372],{"class":85},[68,84714,84715],{"class":872},"}\u003C\u002Fspan>\u003Cbr>`",[68,84717,32419],{"class":85},[68,84719,75801],{"class":587},[68,84721,997],{"class":85},[68,84723,75806],{"class":872},[68,84725,1757],{"class":85},[68,84727,84728,84730,84732,84734,84736,84738,84740],{"class":70,"line":3276},[68,84729,53992],{"class":85},[68,84731,55983],{"class":587},[68,84733,997],{"class":85},[68,84735,83508],{"class":872},[68,84737,75827],{"class":85},[68,84739,869],{"class":102},[68,84741,75563],{"class":85},[68,84743,84744,84746,84748],{"class":70,"line":3281},[68,84745,54002],{"class":85},[68,84747,53398],{"class":81},[68,84749,876],{"class":85},[68,84751,84752,84754,84756],{"class":70,"line":3295},[68,84753,886],{"class":85},[68,84755,53385],{"class":81},[68,84757,876],{"class":85},[68,84759,84760],{"class":70,"line":3300},[68,84761,4000],{"emptyLinePlaceholder":1679},[68,84763,84764,84766,84768],{"class":70,"line":3329},[68,84765,886],{"class":85},[68,84767,52228],{"class":81},[68,84769,876],{"class":85},[23593,84771,84773],{"id":84772},"_41054-number","4.10.5.4 Number",[19,84775,84776],{},[38,84777],{"alt":63,"src":84778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84780,84781],{},"整数也可以进行toFixed来保留小数",[19,84783,84784],{},"比如：",[19,84786,84787],{},"const price=10",[19,84789,84790],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23593,84792,84794],{"id":84793},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84796,84797],{},[38,84798],{"alt":63,"src":84799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[58,84801,84803],{"className":52226,"code":84802,"language":52228,"meta":63,"style":63},"\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",[65,84804,84805,84815,84829,84833,84841,84855,84875,84887,84895,84901,84911,84921,84931,84935,84939,84945,84957,84971,84975,84979,84985,84997,85013,85023,85039,85043,85047,85053,85063,85073,85077,85081,85089,85101,85113,85125,85129,85133,85141,85153,85157,85161,85172,85182,85194,85206,85216,85220,85224,85232,85241,85253,85263,85273,85277,85281,85289,85298,85305,85315,85327,85331,85335,85344,85354,85365,85377,85389,85393,85397,85406,85416,85427,85431,85435,85441,85453,85465,85475,85485,85503,85515,85519,85523,85532,85544,85554,85564,85576,85580,85588,85596,85600,85608,85622,85630,85644,85672,85680,85688,85698,85702,85710,85718,85727,85735,85744,85754,85758,85762,85770,85778,85787,85795,85803,85816,85820,85824,85832,85840,85849,85857,85865,85880,85884,85888,85896,85904,85913,85921,85929,85943,85951,85955,85959,85964,85990,85995,86032,86037,86060,86065,86119,86124,86160,86164,86170,86175,86184,86198,86207,86226,86235,86245,86250,86255,86268,86273,86327,86353,86361,86369,86373],{"__ignoreMap":63},[68,84806,84807,84809,84811,84813],{"class":70,"line":71},[68,84808,52890],{"class":85},[68,84810,52893],{"class":81},[68,84812,52896],{"class":587},[68,84814,876],{"class":85},[68,84816,84817,84819,84821,84823,84825,84827],{"class":70,"line":78},[68,84818,861],{"class":85},[68,84820,52228],{"class":81},[68,84822,52907],{"class":587},[68,84824,869],{"class":85},[68,84826,52912],{"class":872},[68,84828,876],{"class":85},[68,84830,84831],{"class":70,"line":89},[68,84832,4000],{"emptyLinePlaceholder":1679},[68,84834,84835,84837,84839],{"class":70,"line":115},[68,84836,861],{"class":85},[68,84838,52925],{"class":81},[68,84840,876],{"class":85},[68,84842,84843,84845,84847,84849,84851,84853],{"class":70,"line":280},[68,84844,53729],{"class":85},[68,84846,52935],{"class":81},[68,84848,52938],{"class":587},[68,84850,869],{"class":85},[68,84852,52943],{"class":872},[68,84854,876],{"class":85},[68,84856,84857,84859,84861,84863,84865,84867,84869,84871,84873],{"class":70,"line":301},[68,84858,53729],{"class":85},[68,84860,52935],{"class":81},[68,84862,16516],{"class":587},[68,84864,869],{"class":85},[68,84866,52982],{"class":872},[68,84868,52962],{"class":587},[68,84870,869],{"class":85},[68,84872,52989],{"class":872},[68,84874,876],{"class":85},[68,84876,84877,84879,84881,84883,84885],{"class":70,"line":320},[68,84878,53729],{"class":85},[68,84880,52998],{"class":81},[68,84882,53001],{"class":85},[68,84884,52998],{"class":81},[68,84886,876],{"class":85},[68,84888,84889,84891,84893],{"class":70,"line":2915},[68,84890,53729],{"class":85},[68,84892,1652],{"class":81},[68,84894,876],{"class":85},[68,84896,84897,84899],{"class":70,"line":2921},[68,84898,8002],{"class":81},[68,84900,86],{"class":85},[68,84902,84903,84905,84907,84909],{"class":70,"line":2933},[68,84904,56279],{"class":92},[68,84906,96],{"class":85},[68,84908,600],{"class":92},[68,84910,112],{"class":85},[68,84912,84913,84915,84917,84919],{"class":70,"line":3214},[68,84914,56290],{"class":92},[68,84916,96],{"class":85},[68,84918,600],{"class":92},[68,84920,112],{"class":85},[68,84922,84923,84925,84927,84929],{"class":70,"line":3219},[68,84924,74174],{"class":92},[68,84926,96],{"class":85},[68,84928,62089],{"class":92},[68,84930,112],{"class":85},[68,84932,84933],{"class":70,"line":3225},[68,84934,3787],{"class":85},[68,84936,84937],{"class":70,"line":3230},[68,84938,4000],{"emptyLinePlaceholder":1679},[68,84940,84941,84943],{"class":70,"line":3244},[68,84942,63707],{"class":587},[68,84944,86],{"class":85},[68,84946,84947,84949,84951,84953,84955],{"class":70,"line":3249},[68,84948,56355],{"class":92},[68,84950,96],{"class":85},[68,84952,80152],{"class":92},[68,84954,103],{"class":102},[68,84956,112],{"class":85},[68,84958,84959,84961,84963,84965,84967,84969],{"class":70,"line":3255},[68,84960,56290],{"class":92},[68,84962,96],{"class":85},[68,84964,2047],{"class":92},[68,84966,103],{"class":102},[68,84968,603],{"class":92},[68,84970,112],{"class":85},[68,84972,84973],{"class":70,"line":3276},[68,84974,3787],{"class":85},[68,84976,84977],{"class":70,"line":3281},[68,84978,4000],{"emptyLinePlaceholder":1679},[68,84980,84981,84983],{"class":70,"line":3295},[68,84982,80203],{"class":587},[68,84984,86],{"class":85},[68,84986,84987,84989,84991,84993,84995],{"class":70,"line":3300},[68,84988,56279],{"class":92},[68,84990,96],{"class":85},[68,84992,2311],{"class":92},[68,84994,103],{"class":102},[68,84996,112],{"class":85},[68,84998,84999,85001,85003,85005,85007,85009,85011],{"class":70,"line":3329},[68,85000,63444],{"class":92},[68,85002,96],{"class":85},[68,85004,29714],{"class":92},[68,85006,80258],{"class":92},[68,85008,80261],{"class":92},[68,85010,2431],{"class":102},[68,85012,112],{"class":85},[68,85014,85015,85017,85019,85021],{"class":70,"line":3334},[68,85016,56593],{"class":92},[68,85018,96],{"class":85},[68,85020,53067],{"class":92},[68,85022,112],{"class":85},[68,85024,85025,85027,85029,85031,85033,85035,85037],{"class":70,"line":3351},[68,85026,63561],{"class":92},[68,85028,96],{"class":85},[68,85030,99],{"class":92},[68,85032,103],{"class":102},[68,85034,106],{"class":92},[68,85036,63827],{"class":92},[68,85038,112],{"class":85},[68,85040,85041],{"class":70,"line":3356},[68,85042,3787],{"class":85},[68,85044,85045],{"class":70,"line":3361},[68,85046,4000],{"emptyLinePlaceholder":1679},[68,85048,85049,85051],{"class":70,"line":3366},[68,85050,80321],{"class":587},[68,85052,86],{"class":85},[68,85054,85055,85057,85059,85061],{"class":70,"line":3380},[68,85056,63609],{"class":92},[68,85058,96],{"class":85},[68,85060,63614],{"class":92},[68,85062,112],{"class":85},[68,85064,85065,85067,85069,85071],{"class":70,"line":3385},[68,85066,56468],{"class":92},[68,85068,96],{"class":85},[68,85070,63402],{"class":92},[68,85072,112],{"class":85},[68,85074,85075],{"class":70,"line":4177},[68,85076,3787],{"class":85},[68,85078,85079],{"class":70,"line":4191},[68,85080,4000],{"emptyLinePlaceholder":1679},[68,85082,85083,85085,85087],{"class":70,"line":4199},[68,85084,80203],{"class":587},[68,85086,57199],{"class":81},[68,85088,86],{"class":85},[68,85090,85091,85093,85095,85097,85099],{"class":70,"line":4204},[68,85092,56355],{"class":92},[68,85094,96],{"class":85},[68,85096,2348],{"class":92},[68,85098,103],{"class":102},[68,85100,112],{"class":85},[68,85102,85103,85105,85107,85109,85111],{"class":70,"line":4210},[68,85104,56369],{"class":92},[68,85106,96],{"class":85},[68,85108,2348],{"class":92},[68,85110,103],{"class":102},[68,85112,112],{"class":85},[68,85114,85115,85117,85119,85121,85123],{"class":70,"line":4216},[68,85116,63334],{"class":92},[68,85118,96],{"class":85},[68,85120,2055],{"class":92},[68,85122,103],{"class":102},[68,85124,112],{"class":85},[68,85126,85127],{"class":70,"line":4221},[68,85128,3787],{"class":85},[68,85130,85131],{"class":70,"line":9547},[68,85132,4000],{"emptyLinePlaceholder":1679},[68,85134,85135,85137,85139],{"class":70,"line":9571},[68,85136,80203],{"class":587},[68,85138,63887],{"class":587},[68,85140,86],{"class":85},[68,85142,85143,85145,85147,85149,85151],{"class":70,"line":9576},[68,85144,56355],{"class":92},[68,85146,96],{"class":85},[68,85148,3324],{"class":92},[68,85150,103],{"class":102},[68,85152,112],{"class":85},[68,85154,85155],{"class":70,"line":9582},[68,85156,3787],{"class":85},[68,85158,85159],{"class":70,"line":9609},[68,85160,4000],{"emptyLinePlaceholder":1679},[68,85162,85163,85165,85167,85170],{"class":70,"line":9614},[68,85164,80203],{"class":587},[68,85166,63887],{"class":587},[68,85168,85169],{"class":587}," .tag",[68,85171,86],{"class":85},[68,85173,85174,85176,85178,85180],{"class":70,"line":9620},[68,85175,56593],{"class":92},[68,85177,96],{"class":85},[68,85179,62453],{"class":92},[68,85181,112],{"class":85},[68,85183,85184,85186,85188,85190,85192],{"class":70,"line":9632},[68,85185,56279],{"class":92},[68,85187,96],{"class":85},[68,85189,267],{"class":92},[68,85191,103],{"class":102},[68,85193,112],{"class":85},[68,85195,85196,85198,85200,85202,85204],{"class":70,"line":9644},[68,85197,56506],{"class":92},[68,85199,96],{"class":85},[68,85201,2234],{"class":92},[68,85203,103],{"class":102},[68,85205,112],{"class":85},[68,85207,85208,85210,85212,85214],{"class":70,"line":9656},[68,85209,59000],{"class":92},[68,85211,96],{"class":85},[68,85213,63654],{"class":92},[68,85215,112],{"class":85},[68,85217,85218],{"class":70,"line":11314},[68,85219,3787],{"class":85},[68,85221,85222],{"class":70,"line":11339},[68,85223,4000],{"emptyLinePlaceholder":1679},[68,85225,85226,85228,85230],{"class":70,"line":11362},[68,85227,80203],{"class":587},[68,85229,80494],{"class":587},[68,85231,33059],{"class":85},[68,85233,85234,85236,85239],{"class":70,"line":11386},[68,85235,80203],{"class":587},[68,85237,85238],{"class":587}," .sub-total",[68,85240,86],{"class":85},[68,85242,85243,85245,85247,85249,85251],{"class":70,"line":11391},[68,85244,56506],{"class":92},[68,85246,96],{"class":85},[68,85248,2386],{"class":92},[68,85250,103],{"class":102},[68,85252,112],{"class":85},[68,85254,85255,85257,85259,85261],{"class":70,"line":11396},[68,85256,59000],{"class":92},[68,85258,96],{"class":85},[68,85260,80517],{"class":92},[68,85262,112],{"class":85},[68,85264,85265,85267,85269,85271],{"class":70,"line":11401},[68,85266,63421],{"class":92},[68,85268,96],{"class":85},[68,85270,99],{"class":92},[68,85272,112],{"class":85},[68,85274,85275],{"class":70,"line":11410},[68,85276,3787],{"class":85},[68,85278,85279],{"class":70,"line":11415},[68,85280,4000],{"emptyLinePlaceholder":1679},[68,85282,85283,85285,85287],{"class":70,"line":11421},[68,85284,80203],{"class":587},[68,85286,80534],{"class":587},[68,85288,33059],{"class":85},[68,85290,85291,85293,85296],{"class":70,"line":11442},[68,85292,80203],{"class":587},[68,85294,85295],{"class":587}," .sub-total::before",[68,85297,33059],{"class":85},[68,85299,85300,85303],{"class":70,"line":11448},[68,85301,85302],{"class":587},"    .amount::before",[68,85304,86],{"class":85},[68,85306,85307,85309,85311,85313],{"class":70,"line":11462},[68,85308,80541],{"class":92},[68,85310,96],{"class":85},[68,85312,80546],{"class":872},[68,85314,112],{"class":85},[68,85316,85317,85319,85321,85323,85325],{"class":70,"line":11468},[68,85318,56506],{"class":92},[68,85320,96],{"class":85},[68,85322,2234],{"class":92},[68,85324,103],{"class":102},[68,85326,112],{"class":85},[68,85328,85329],{"class":70,"line":11495},[68,85330,3787],{"class":85},[68,85332,85333],{"class":70,"line":11504},[68,85334,4000],{"emptyLinePlaceholder":1679},[68,85336,85337,85339,85342],{"class":70,"line":11510},[68,85338,80203],{"class":587},[68,85340,85341],{"class":587}," .spec",[68,85343,86],{"class":85},[68,85345,85346,85348,85350,85352],{"class":70,"line":11518},[68,85347,63421],{"class":92},[68,85349,96],{"class":85},[68,85351,267],{"class":92},[68,85353,112],{"class":85},[68,85355,85356,85358,85360,85363],{"class":70,"line":11523},[68,85357,59000],{"class":92},[68,85359,96],{"class":85},[68,85361,85362],{"class":92},"#888",[68,85364,112],{"class":85},[68,85366,85367,85369,85371,85373,85375],{"class":70,"line":18199},[68,85368,56506],{"class":92},[68,85370,96],{"class":85},[68,85372,2285],{"class":92},[68,85374,103],{"class":102},[68,85376,112],{"class":85},[68,85378,85379,85381,85383,85385,85387],{"class":70,"line":18205},[68,85380,63584],{"class":92},[68,85382,96],{"class":85},[68,85384,2436],{"class":92},[68,85386,103],{"class":102},[68,85388,112],{"class":85},[68,85390,85391],{"class":70,"line":18228},[68,85392,3787],{"class":85},[68,85394,85395],{"class":70,"line":18234},[68,85396,4000],{"emptyLinePlaceholder":1679},[68,85398,85399,85401,85404],{"class":70,"line":18257},[68,85400,80203],{"class":587},[68,85402,85403],{"class":587}," .count",[68,85405,86],{"class":85},[68,85407,85408,85410,85412,85414],{"class":70,"line":18271},[68,85409,63421],{"class":92},[68,85411,96],{"class":85},[68,85413,99],{"class":92},[68,85415,112],{"class":85},[68,85417,85418,85420,85422,85425],{"class":70,"line":18291},[68,85419,59000],{"class":92},[68,85421,96],{"class":85},[68,85423,85424],{"class":92},"#aaa",[68,85426,112],{"class":85},[68,85428,85429],{"class":70,"line":18297},[68,85430,3787],{"class":85},[68,85432,85433],{"class":70,"line":18308},[68,85434,4000],{"emptyLinePlaceholder":1679},[68,85436,85437,85439],{"class":70,"line":18331},[68,85438,74054],{"class":587},[68,85440,86],{"class":85},[68,85442,85443,85445,85447,85449,85451],{"class":70,"line":18353},[68,85444,56355],{"class":92},[68,85446,96],{"class":85},[68,85448,80152],{"class":92},[68,85450,103],{"class":102},[68,85452,112],{"class":85},[68,85454,85455,85457,85459,85461,85463],{"class":70,"line":18358},[68,85456,56290],{"class":92},[68,85458,96],{"class":85},[68,85460,600],{"class":92},[68,85462,603],{"class":92},[68,85464,112],{"class":85},[68,85466,85467,85469,85471,85473],{"class":70,"line":18364},[68,85468,56593],{"class":92},[68,85470,96],{"class":85},[68,85472,53067],{"class":92},[68,85474,112],{"class":85},[68,85476,85477,85479,85481,85483],{"class":70,"line":18378},[68,85478,56604],{"class":92},[68,85480,96],{"class":85},[68,85482,53167],{"class":92},[68,85484,112],{"class":85},[68,85486,85487,85490,85492,85494,85496,85498,85501],{"class":70,"line":18391},[68,85488,85489],{"class":92},"      border-top",[68,85491,96],{"class":85},[68,85493,99],{"class":92},[68,85495,103],{"class":102},[68,85497,106],{"class":92},[68,85499,85500],{"class":92}," #4e4e4e",[68,85502,112],{"class":85},[68,85504,85505,85507,85509,85511,85513],{"class":70,"line":18396},[68,85506,56279],{"class":92},[68,85508,96],{"class":85},[68,85510,2436],{"class":92},[68,85512,103],{"class":102},[68,85514,112],{"class":85},[68,85516,85517],{"class":70,"line":18410},[68,85518,3787],{"class":85},[68,85520,85521],{"class":70,"line":18415},[68,85522,4000],{"emptyLinePlaceholder":1679},[68,85524,85525,85527,85530],{"class":70,"line":18421},[68,85526,74054],{"class":587},[68,85528,85529],{"class":587}," .amount",[68,85531,86],{"class":85},[68,85533,85534,85536,85538,85540,85542],{"class":70,"line":18426},[68,85535,56506],{"class":92},[68,85537,96],{"class":85},[68,85539,2386],{"class":92},[68,85541,103],{"class":102},[68,85543,112],{"class":85},[68,85545,85546,85548,85550,85552],{"class":70,"line":18440},[68,85547,59000],{"class":92},[68,85549,96],{"class":85},[68,85551,80517],{"class":92},[68,85553,112],{"class":85},[68,85555,85556,85558,85560,85562],{"class":70,"line":18445},[68,85557,63917],{"class":92},[68,85559,96],{"class":85},[68,85561,53079],{"class":92},[68,85563,112],{"class":85},[68,85565,85566,85568,85570,85572,85574],{"class":70,"line":18450},[68,85567,63334],{"class":92},[68,85569,96],{"class":85},[68,85571,2392],{"class":92},[68,85573,103],{"class":102},[68,85575,112],{"class":85},[68,85577,85578],{"class":70,"line":18464},[68,85579,3787],{"class":85},[68,85581,85582,85584,85586],{"class":70,"line":18476},[68,85583,54002],{"class":85},[68,85585,1652],{"class":81},[68,85587,876],{"class":85},[68,85589,85590,85592,85594],{"class":70,"line":18481},[68,85591,886],{"class":85},[68,85593,52925],{"class":81},[68,85595,876],{"class":85},[68,85597,85598],{"class":70,"line":18494},[68,85599,4000],{"emptyLinePlaceholder":1679},[68,85601,85602,85604,85606],{"class":70,"line":18499},[68,85603,861],{"class":85},[68,85605,53385],{"class":81},[68,85607,876],{"class":85},[68,85609,85610,85612,85614,85616,85618,85620],{"class":70,"line":18504},[68,85611,53729],{"class":85},[68,85613,82],{"class":81},[68,85615,866],{"class":587},[68,85617,869],{"class":85},[68,85619,64191],{"class":872},[68,85621,876],{"class":85},[68,85623,85624,85626,85628],{"class":70,"line":18509},[68,85625,54002],{"class":85},[68,85627,82],{"class":81},[68,85629,876],{"class":85},[68,85631,85632,85634,85636,85638,85640,85642],{"class":70,"line":18522},[68,85633,53729],{"class":85},[68,85635,82],{"class":81},[68,85637,866],{"class":587},[68,85639,869],{"class":85},[68,85641,64163],{"class":872},[68,85643,876],{"class":85},[68,85645,85646,85648,85650,85653,85655,85657,85659,85662,85664,85666,85668,85670],{"class":70,"line":18527},[68,85647,52932],{"class":85},[68,85649,82],{"class":81},[68,85651,85652],{"class":85},">合计：\u003C",[68,85654,68],{"class":81},[68,85656,866],{"class":587},[68,85658,869],{"class":85},[68,85660,85661],{"class":872},"\"amount\"",[68,85663,56898],{"class":85},[68,85665,68],{"class":81},[68,85667,56898],{"class":85},[68,85669,82],{"class":81},[68,85671,876],{"class":85},[68,85673,85674,85676,85678],{"class":70,"line":34226},[68,85675,54002],{"class":85},[68,85677,82],{"class":81},[68,85679,876],{"class":85},[68,85681,85682,85684,85686],{"class":70,"line":34232},[68,85683,53729],{"class":85},[68,85685,53398],{"class":81},[68,85687,876],{"class":85},[68,85689,85690,85692,85694,85696],{"class":70,"line":34238},[68,85691,12819],{"class":102},[68,85693,80954],{"class":92},[68,85695,15161],{"class":102},[68,85697,57031],{"class":85},[68,85699,85700],{"class":70,"line":34244},[68,85701,80963],{"class":85},[68,85703,85704,85706,85708],{"class":70,"line":34250},[68,85705,80968],{"class":85},[68,85707,80971],{"class":872},[68,85709,33059],{"class":85},[68,85711,85712,85714,85716],{"class":70,"line":34261},[68,85713,80978],{"class":85},[68,85715,80981],{"class":872},[68,85717,33059],{"class":85},[68,85719,85720,85722,85725],{"class":70,"line":34267},[68,85721,80988],{"class":85},[68,85723,85724],{"class":92},"289.9",[68,85726,33059],{"class":85},[68,85728,85729,85731,85733],{"class":70,"line":34287},[68,85730,80998],{"class":85},[68,85732,81001],{"class":872},[68,85734,33059],{"class":85},[68,85736,85737,85740,85742],{"class":70,"line":34293},[68,85738,85739],{"class":85},"        count: ",[68,85741,267],{"class":92},[68,85743,33059],{"class":85},[68,85745,85746,85749,85752],{"class":70,"line":34304},[68,85747,85748],{"class":85},"        spec: { color: ",[68,85750,85751],{"class":872},"'白色'",[68,85753,57188],{"class":85},[68,85755,85756],{"class":70,"line":34310},[68,85757,79470],{"class":85},[68,85759,85760],{"class":70,"line":34316},[68,85761,80963],{"class":85},[68,85763,85764,85766,85768],{"class":70,"line":34322},[68,85765,80968],{"class":85},[68,85767,81062],{"class":872},[68,85769,33059],{"class":85},[68,85771,85772,85774,85776],{"class":70,"line":34328},[68,85773,80978],{"class":85},[68,85775,81071],{"class":872},[68,85777,33059],{"class":85},[68,85779,85780,85782,85785],{"class":70,"line":34334},[68,85781,80988],{"class":85},[68,85783,85784],{"class":92},"109.8",[68,85786,33059],{"class":85},[68,85788,85789,85791,85793],{"class":70,"line":34340},[68,85790,80998],{"class":85},[68,85792,81089],{"class":872},[68,85794,33059],{"class":85},[68,85796,85797,85799,85801],{"class":70,"line":34346},[68,85798,85739],{"class":85},[68,85800,288],{"class":92},[68,85802,33059],{"class":85},[68,85804,85805,85808,85810,85812,85814],{"class":70,"line":34366},[68,85806,85807],{"class":85},"        spec: { size: ",[68,85809,83480],{"class":872},[68,85811,57048],{"class":85},[68,85813,83485],{"class":872},[68,85815,57188],{"class":85},[68,85817,85818],{"class":70,"line":34372},[68,85819,79470],{"class":85},[68,85821,85822],{"class":70,"line":34388},[68,85823,80963],{"class":85},[68,85825,85826,85828,85830],{"class":70,"line":34394},[68,85827,80968],{"class":85},[68,85829,81106],{"class":872},[68,85831,33059],{"class":85},[68,85833,85834,85836,85838],{"class":70,"line":34408},[68,85835,80978],{"class":85},[68,85837,81115],{"class":872},[68,85839,33059],{"class":85},[68,85841,85842,85844,85847],{"class":70,"line":34414},[68,85843,80988],{"class":85},[68,85845,85846],{"class":92},"488",[68,85848,33059],{"class":85},[68,85850,85851,85853,85855],{"class":70,"line":34429},[68,85852,80998],{"class":85},[68,85854,81133],{"class":872},[68,85856,33059],{"class":85},[68,85858,85859,85861,85863],{"class":70,"line":34435},[68,85860,85739],{"class":85},[68,85862,99],{"class":92},[68,85864,33059],{"class":85},[68,85866,85867,85869,85872,85875,85878],{"class":70,"line":34444},[68,85868,85748],{"class":85},[68,85870,85871],{"class":872},"'青色'",[68,85873,85874],{"class":85},", sum: ",[68,85876,85877],{"class":872},"'一大四小'",[68,85879,57188],{"class":85},[68,85881,85882],{"class":70,"line":34450},[68,85883,79470],{"class":85},[68,85885,85886],{"class":70,"line":34459},[68,85887,80963],{"class":85},[68,85889,85890,85892,85894],{"class":70,"line":34465},[68,85891,80968],{"class":85},[68,85893,81150],{"class":872},[68,85895,33059],{"class":85},[68,85897,85898,85900,85902],{"class":70,"line":34471},[68,85899,80978],{"class":85},[68,85901,81159],{"class":872},[68,85903,33059],{"class":85},[68,85905,85906,85908,85911],{"class":70,"line":34480},[68,85907,80988],{"class":85},[68,85909,85910],{"class":92},"139",[68,85912,33059],{"class":85},[68,85914,85915,85917,85919],{"class":70,"line":34486},[68,85916,80998],{"class":85},[68,85918,81177],{"class":872},[68,85920,33059],{"class":85},[68,85922,85923,85925,85927],{"class":70,"line":34497},[68,85924,85739],{"class":85},[68,85926,99],{"class":92},[68,85928,33059],{"class":85},[68,85930,85931,85933,85936,85938,85941],{"class":70,"line":34503},[68,85932,85807],{"class":85},[68,85934,85935],{"class":872},"'小号'",[68,85937,57048],{"class":85},[68,85939,85940],{"class":872},"'紫色'",[68,85942,57054],{"class":85},[68,85944,85945,85948],{"class":70,"line":34522},[68,85946,85947],{"class":85},"        gift: ",[68,85949,85950],{"class":872},"'50g茶叶,清洗球'\n",[68,85952,85953],{"class":70,"line":34528},[68,85954,53983],{"class":85},[68,85956,85957],{"class":70,"line":34539},[68,85958,54694],{"class":85},[68,85960,85961],{"class":70,"line":34545},[68,85962,85963],{"class":74},"    \u002F\u002F  1.根据数据渲染页面\n",[68,85965,85966,85968,85970,85972,85974,85976,85978,85980,85982,85984,85986,85988],{"class":70,"line":34565},[68,85967,53992],{"class":85},[68,85969,55983],{"class":587},[68,85971,997],{"class":85},[68,85973,81478],{"class":872},[68,85975,75827],{"class":85},[68,85977,869],{"class":102},[68,85979,81625],{"class":85},[68,85981,75622],{"class":587},[68,85983,997],{"class":85},[68,85985,81372],{"class":6815},[68,85987,81375],{"class":102},[68,85989,86],{"class":85},[68,85991,85992],{"class":70,"line":34581},[68,85993,85994],{"class":74},"      \u002F\u002F 对象解构\n",[68,85996,85997,85999,86001,86003,86005,86007,86009,86012,86014,86016,86018,86021,86023,86026,86028,86030],{"class":70,"line":34587},[68,85998,59812],{"class":102},[68,86000,81384],{"class":85},[68,86002,81397],{"class":92},[68,86004,1002],{"class":85},[68,86006,81387],{"class":92},[68,86008,1002],{"class":85},[68,86010,86011],{"class":92},"count",[68,86013,1002],{"class":85},[68,86015,81392],{"class":92},[68,86017,1002],{"class":85},[68,86019,86020],{"class":92},"spec",[68,86022,1002],{"class":85},[68,86024,86025],{"class":92},"gift",[68,86027,81400],{"class":85},[68,86029,869],{"class":102},[68,86031,81405],{"class":85},[68,86033,86034],{"class":70,"line":34601},[68,86035,86036],{"class":74},"      \u002F\u002F 规格文字模块处理\n",[68,86038,86039,86041,86044,86046,86048,86050,86052,86054,86056,86058],{"class":70,"line":34607},[68,86040,59812],{"class":102},[68,86042,86043],{"class":92}," text",[68,86045,15161],{"class":102},[68,86047,83515],{"class":85},[68,86049,83518],{"class":587},[68,86051,83521],{"class":85},[68,86053,75801],{"class":587},[68,86055,997],{"class":85},[68,86057,83528],{"class":872},[68,86059,1757],{"class":85},[68,86061,86062],{"class":70,"line":34613},[68,86063,86064],{"class":74},"      \u002F\u002F 处理赠品模块\n",[68,86066,86067,86069,86071,86073,86076,86078,86080,86082,86084,86087,86089,86091,86093,86095,86097,86100,86102,86105,86107,86109,86111,86113,86115,86117],{"class":70,"line":34624},[68,86068,59812],{"class":102},[68,86070,75497],{"class":92},[68,86072,15161],{"class":102},[68,86074,86075],{"class":85}," gift ",[68,86077,2721],{"class":102},[68,86079,84689],{"class":85},[68,86081,84692],{"class":587},[68,86083,997],{"class":85},[68,86085,86086],{"class":872},"','",[68,86088,32419],{"class":85},[68,86090,75622],{"class":587},[68,86092,997],{"class":85},[68,86094,81372],{"class":6815},[68,86096,81375],{"class":102},[68,86098,86099],{"class":872}," `\u003Cspan class=\"tag\">【赠品】${",[68,86101,81372],{"class":85},[68,86103,86104],{"class":872},"}\u003C\u002Fspan>`",[68,86106,32419],{"class":85},[68,86108,75801],{"class":587},[68,86110,997],{"class":85},[68,86112,75806],{"class":872},[68,86114,15311],{"class":85},[68,86116,2595],{"class":102},[68,86118,71686],{"class":872},[68,86120,86121],{"class":70,"line":34630},[68,86122,86123],{"class":74},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[68,86125,86126,86128,86131,86133,86136,86138,86140,86142,86145,86147,86149,86151,86154,86156,86158],{"class":70,"line":34636},[68,86127,59812],{"class":102},[68,86129,86130],{"class":92}," subtotal",[68,86132,15161],{"class":102},[68,86134,86135],{"class":85}," ((price ",[68,86137,2191],{"class":102},[68,86139,7353],{"class":92},[68,86141,8117],{"class":102},[68,86143,86144],{"class":85}," count) ",[68,86146,2320],{"class":102},[68,86148,7353],{"class":92},[68,86150,32419],{"class":85},[68,86152,86153],{"class":587},"toFixed",[68,86155,997],{"class":85},[68,86157,267],{"class":92},[68,86159,1757],{"class":85},[68,86161,86162],{"class":70,"line":34646},[68,86163,4000],{"emptyLinePlaceholder":1679},[68,86165,86166,86168],{"class":70,"line":34652},[68,86167,75560],{"class":102},[68,86169,71750],{"class":872},[68,86171,86172],{"class":70,"line":34663},[68,86173,86174],{"class":872},"        \u003Cdiv class=\"item\">\n",[68,86176,86177,86180,86182],{"class":70,"line":34669},[68,86178,86179],{"class":872},"          \u003Cimg src=\"${",[68,86181,81397],{"class":85},[68,86183,81429],{"class":872},[68,86185,86186,86189,86191,86194,86196],{"class":70,"line":34679},[68,86187,86188],{"class":872},"          \u003Cp class=\"name\">${",[68,86190,81387],{"class":85},[68,86192,86193],{"class":872},"}${",[68,86195,2903],{"class":85},[68,86197,81439],{"class":872},[68,86199,86200,86203,86205],{"class":70,"line":34684},[68,86201,86202],{"class":872},"          \u003Cp class=\"spec\">${",[68,86204,6786],{"class":85},[68,86206,81439],{"class":872},[68,86208,86209,86212,86214,86216,86218,86220,86222,86224],{"class":70,"line":34690},[68,86210,86211],{"class":872},"          \u003Cp class=\"price\">${",[68,86213,81392],{"class":85},[68,86215,2294],{"class":872},[68,86217,86153],{"class":587},[68,86219,997],{"class":872},[68,86221,267],{"class":92},[68,86223,2165],{"class":872},[68,86225,81439],{"class":872},[68,86227,86228,86231,86233],{"class":70,"line":34739},[68,86229,86230],{"class":872},"          \u003Cp class=\"count\">x${",[68,86232,86011],{"class":85},[68,86234,81439],{"class":872},[68,86236,86237,86240,86243],{"class":70,"line":34786},[68,86238,86239],{"class":872},"          \u003Cp class=\"sub-total\">${",[68,86241,86242],{"class":85},"subtotal",[68,86244,81439],{"class":872},[68,86246,86247],{"class":70,"line":34791},[68,86248,86249],{"class":872},"        \u003C\u002Fdiv> \n",[68,86251,86252],{"class":70,"line":34797},[68,86253,86254],{"class":872},"             `\n",[68,86256,86257,86260,86262,86264,86266],{"class":70,"line":34816},[68,86258,86259],{"class":85},"    }).",[68,86261,75801],{"class":587},[68,86263,997],{"class":85},[68,86265,75806],{"class":872},[68,86267,1757],{"class":85},[68,86269,86270],{"class":70,"line":34822},[68,86271,86272],{"class":74},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[68,86274,86275,86277,86279,86281,86283,86286,86288,86291,86293,86295,86297,86300,86303,86305,86308,86310,86312,86314,86317,86319,86321,86323,86325],{"class":70,"line":34842},[68,86276,12819],{"class":102},[68,86278,64368],{"class":92},[68,86280,15161],{"class":102},[68,86282,81625],{"class":85},[68,86284,86285],{"class":587},"reduce",[68,86287,3976],{"class":85},[68,86289,86290],{"class":6815},"prev",[68,86292,1002],{"class":85},[68,86294,81372],{"class":6815},[68,86296,15311],{"class":85},[68,86298,86299],{"class":102},"=>",[68,86301,86302],{"class":85}," prev ",[68,86304,2217],{"class":102},[68,86306,86307],{"class":85}," (item.price ",[68,86309,2191],{"class":102},[68,86311,7353],{"class":92},[68,86313,8117],{"class":102},[68,86315,86316],{"class":85}," item.count) ",[68,86318,2320],{"class":102},[68,86320,7353],{"class":92},[68,86322,1002],{"class":85},[68,86324,600],{"class":92},[68,86326,1757],{"class":85},[68,86328,86329,86331,86333,86335,86338,86340,86342,86345,86347,86349,86351],{"class":70,"line":34848},[68,86330,53992],{"class":85},[68,86332,55983],{"class":587},[68,86334,997],{"class":85},[68,86336,86337],{"class":872},"'.amount'",[68,86339,75827],{"class":85},[68,86341,869],{"class":102},[68,86343,86344],{"class":85}," total.",[68,86346,86153],{"class":587},[68,86348,997],{"class":85},[68,86350,267],{"class":92},[68,86352,1757],{"class":85},[68,86354,86355,86357,86359],{"class":70,"line":34854},[68,86356,54002],{"class":85},[68,86358,53398],{"class":81},[68,86360,876],{"class":85},[68,86362,86363,86365,86367],{"class":70,"line":34864},[68,86364,886],{"class":85},[68,86366,53385],{"class":81},[68,86368,876],{"class":85},[68,86370,86371],{"class":70,"line":34869},[68,86372,4000],{"emptyLinePlaceholder":1679},[68,86374,86375,86377,86379],{"class":70,"line":34875},[68,86376,886],{"class":85},[68,86378,52228],{"class":81},[68,86380,876],{"class":85},[14,86382,86384],{"id":86383},"_411-编程思想","4.11 编程思想",[43,86386,86388],{"id":86387},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86390,86391,86394],{},[1890,86392,86393],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86396,86397],{},"调用就可以了",[19,86399,86400],{},[38,86401],{"alt":63,"src":86402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[43,86404,86406],{"id":86405},"_4112-面向对象","4.11.2 面向对象",[19,86408,86409],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86411,86412],{},[38,86413],{"alt":63,"src":86414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86416,86417],{},"面向对象的特性：",[168,86419,86420,86423,86426],{},[51,86421,86422],{},"封装性",[51,86424,86425],{},"继承性",[51,86427,86428],{},"多态性",[43,86430,86432],{"id":86431},"_4113-两者比较","4.11.3 两者比较",[19,86434,86435],{},[38,86436],{"alt":63,"src":86437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86439,86441],{"id":86440},"_412-构造函数回顾","4.12 构造函数回顾",[19,86443,86444],{},[38,86445],{"alt":63,"src":86446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86448,86449],{},[38,86450],{"alt":63,"src":86451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86453,86454],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86456,86457],{},[38,86458],{"alt":63,"src":86459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86461,86463],{"id":86462},"_413-原型","4.13 原型",[43,86465,86467],{"id":86466},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86469,86470],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86472,86473],{},[38,86474],{"alt":63,"src":86475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86477,86478],{},[38,86479],{"alt":63,"src":86480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86482,86483],{},"原型是构造函数的属性，它也是一个对象",[19,86485,86486],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86488,86489],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[58,86491,86493],{"className":54652,"code":86492,"language":54654,"meta":63,"style":63},"\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",[65,86494,86495,86503,86508,86516,86521,86526,86531,86536,86541,86545,86549,86553,86558,86563,86567,86572,86577,86582,86587,86592,86596,86604],{"__ignoreMap":63},[68,86496,86497,86499,86501],{"class":70,"line":71},[68,86498,861],{"class":85},[68,86500,53385],{"class":81},[68,86502,876],{"class":85},[68,86504,86505],{"class":70,"line":78},[68,86506,86507],{"class":74},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[68,86509,86510,86512,86514],{"class":70,"line":89},[68,86511,53729],{"class":85},[68,86513,53398],{"class":81},[68,86515,876],{"class":85},[68,86517,86518],{"class":70,"line":115},[68,86519,86520],{"class":85},"    function Star(uname, age) {\n",[68,86522,86523],{"class":70,"line":280},[68,86524,86525],{"class":85},"      this.uname = uname,\n",[68,86527,86528],{"class":70,"line":301},[68,86529,86530],{"class":85},"        this.age = age\n",[68,86532,86533],{"class":70,"line":320},[68,86534,86535],{"class":85},"      \u002F\u002F this.sing = function () {\n",[68,86537,86538],{"class":70,"line":2915},[68,86539,86540],{"class":85},"      \u002F\u002F   console.log('唱歌')\n",[68,86542,86543],{"class":70,"line":2921},[68,86544,4000],{"emptyLinePlaceholder":1679},[68,86546,86547],{"class":70,"line":2933},[68,86548,61621],{"class":85},[68,86550,86551],{"class":70,"line":3214},[68,86552,3787],{"class":85},[68,86554,86555],{"class":70,"line":3219},[68,86556,86557],{"class":85},"    Star.prototype.sing = function () {\n",[68,86559,86560],{"class":70,"line":3225},[68,86561,86562],{"class":85},"      console.log('唱歌')\n",[68,86564,86565],{"class":70,"line":3230},[68,86566,3787],{"class":85},[68,86568,86569],{"class":70,"line":3244},[68,86570,86571],{"class":85},"    \u002F\u002F console.dir(Star.prototype)\n",[68,86573,86574],{"class":70,"line":3249},[68,86575,86576],{"class":85},"    const pink = new Star('pink', 18)\n",[68,86578,86579],{"class":70,"line":3255},[68,86580,86581],{"class":85},"    const red = new Star('red', 20)\n",[68,86583,86584],{"class":70,"line":3276},[68,86585,86586],{"class":85},"    pink.sing()\n",[68,86588,86589],{"class":70,"line":3281},[68,86590,86591],{"class":85},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[68,86593,86594],{"class":70,"line":3295},[68,86595,4000],{"emptyLinePlaceholder":1679},[68,86597,86598,86600,86602],{"class":70,"line":3300},[68,86599,54002],{"class":85},[68,86601,53398],{"class":81},[68,86603,876],{"class":85},[68,86605,86606,86608,86610],{"class":70,"line":3329},[68,86607,886],{"class":85},[68,86609,53385],{"class":81},[68,86611,876],{"class":85},[19,86613,86614],{},[38,86615],{"alt":63,"src":86616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[58,86618,86620],{"className":54652,"code":86619,"language":54654,"meta":63,"style":63},"\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",[65,86621,86622,86630,86638,86643,86648,86653,86658,86662,86667,86672,86677,86681,86686,86690,86694,86699,86703,86711],{"__ignoreMap":63},[68,86623,86624,86626,86628],{"class":70,"line":71},[68,86625,861],{"class":85},[68,86627,53385],{"class":81},[68,86629,876],{"class":85},[68,86631,86632,86634,86636],{"class":70,"line":78},[68,86633,53729],{"class":85},[68,86635,53398],{"class":81},[68,86637,876],{"class":85},[68,86639,86640],{"class":70,"line":89},[68,86641,86642],{"class":85},"    let that\n",[68,86644,86645],{"class":70,"line":115},[68,86646,86647],{"class":85},"    function Star(uname) {\n",[68,86649,86650],{"class":70,"line":280},[68,86651,86652],{"class":85},"      this.uname = uname\n",[68,86654,86655],{"class":70,"line":301},[68,86656,86657],{"class":85},"      that = this\n",[68,86659,86660],{"class":70,"line":320},[68,86661,3787],{"class":85},[68,86663,86664],{"class":70,"line":2915},[68,86665,86666],{"class":85},"    \u002F\u002F 实例对象是 ldh\n",[68,86668,86669],{"class":70,"line":2921},[68,86670,86671],{"class":85},"    const ldh = new Star('刘德华')\n",[68,86673,86674],{"class":70,"line":2933},[68,86675,86676],{"class":85},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[68,86678,86679],{"class":70,"line":3214},[68,86680,4000],{"emptyLinePlaceholder":1679},[68,86682,86683],{"class":70,"line":3219},[68,86684,86685],{"class":85},"    Star.sing = function () {\n",[68,86687,86688],{"class":70,"line":3225},[68,86689,86562],{"class":85},[68,86691,86692],{"class":70,"line":3230},[68,86693,3787],{"class":85},[68,86695,86696],{"class":70,"line":3244},[68,86697,86698],{"class":85},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[68,86700,86701],{"class":70,"line":3249},[68,86702,4000],{"emptyLinePlaceholder":1679},[68,86704,86705,86707,86709],{"class":70,"line":3255},[68,86706,54002],{"class":85},[68,86708,53398],{"class":81},[68,86710,876],{"class":85},[68,86712,86713,86715,86717],{"class":70,"line":3276},[68,86714,886],{"class":85},[68,86716,53385],{"class":81},[68,86718,876],{"class":85},[19,86720,86721],{},"构造函数的this指向的是实例对象；",[19,86723,86724],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[43,86726,86728],{"id":86727},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86730,86731],{},[38,86732],{"alt":63,"src":86733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[58,86735,86737],{"className":54652,"code":86736,"language":54654,"meta":63,"style":63},"\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",[65,86738,86739,86747,86755,86760,86765,86770,86775,86780,86785,86790,86795,86800,86805,86809,86814,86819,86824,86829,86833,86838,86843,86848,86853,86857,86862,86867,86872,86877,86881,86886,86890,86898],{"__ignoreMap":63},[68,86740,86741,86743,86745],{"class":70,"line":71},[68,86742,861],{"class":85},[68,86744,53385],{"class":81},[68,86746,876],{"class":85},[68,86748,86749,86751,86753],{"class":70,"line":78},[68,86750,53729],{"class":85},[68,86752,53398],{"class":81},[68,86754,876],{"class":85},[68,86756,86757],{"class":70,"line":89},[68,86758,86759],{"class":85},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[68,86761,86762],{"class":70,"line":115},[68,86763,86764],{"class":85},"    const arr = [1, 2, 3]\n",[68,86766,86767],{"class":70,"line":280},[68,86768,86769],{"class":85},"    \u002F\u002F 自己定义数组的扩展方法\n",[68,86771,86772],{"class":70,"line":301},[68,86773,86774],{"class":85},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[68,86776,86777],{"class":70,"line":320},[68,86778,86779],{"class":85},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[68,86781,86782],{"class":70,"line":2915},[68,86783,86784],{"class":85},"    \u002F\u002F ①.最大值\n",[68,86786,86787],{"class":70,"line":2921},[68,86788,86789],{"class":85},"    Array.prototype.max = function () {\n",[68,86791,86792],{"class":70,"line":2933},[68,86793,86794],{"class":85},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[68,86796,86797],{"class":70,"line":3214},[68,86798,86799],{"class":85},"      return Math.max(...this)\n",[68,86801,86802],{"class":70,"line":3219},[68,86803,86804],{"class":85},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[68,86806,86807],{"class":70,"line":3225},[68,86808,3787],{"class":85},[68,86810,86811],{"class":70,"line":3230},[68,86812,86813],{"class":85},"    console.log(arr.max())\n",[68,86815,86816],{"class":70,"line":3244},[68,86817,86818],{"class":85},"    \u002F\u002F ②最小值\n",[68,86820,86821],{"class":70,"line":3249},[68,86822,86823],{"class":85},"    Array.prototype.min = function () {\n",[68,86825,86826],{"class":70,"line":3255},[68,86827,86828],{"class":85},"      return Math.min(...this)\n",[68,86830,86831],{"class":70,"line":3276},[68,86832,3787],{"class":85},[68,86834,86835],{"class":70,"line":3281},[68,86836,86837],{"class":85},"    console.log(arr.min())\n",[68,86839,86840],{"class":70,"line":3295},[68,86841,86842],{"class":85},"    \u002F\u002F③求和\n",[68,86844,86845],{"class":70,"line":3300},[68,86846,86847],{"class":85},"    Array.prototype.sum = function () {\n",[68,86849,86850],{"class":70,"line":3329},[68,86851,86852],{"class":85},"      return this.reduce((prev, current) => prev + current, 0)\n",[68,86854,86855],{"class":70,"line":3334},[68,86856,3787],{"class":85},[68,86858,86859],{"class":70,"line":3351},[68,86860,86861],{"class":85},"    console.log(arr.sum())\n",[68,86863,86864],{"class":70,"line":3356},[68,86865,86866],{"class":85},"    \u002F\u002F ③排序\n",[68,86868,86869],{"class":70,"line":3361},[68,86870,86871],{"class":85},"    Array.prototype.rever = function () {\n",[68,86873,86874],{"class":70,"line":3366},[68,86875,86876],{"class":85},"      return this.reverse()\n",[68,86878,86879],{"class":70,"line":3380},[68,86880,3787],{"class":85},[68,86882,86883],{"class":70,"line":3385},[68,86884,86885],{"class":85},"    console.log(arr.rever())\n",[68,86887,86888],{"class":70,"line":4177},[68,86889,4000],{"emptyLinePlaceholder":1679},[68,86891,86892,86894,86896],{"class":70,"line":4191},[68,86893,54002],{"class":85},[68,86895,53398],{"class":81},[68,86897,876],{"class":85},[68,86899,86900,86902,86904],{"class":70,"line":4199},[68,86901,886],{"class":85},[68,86903,53385],{"class":81},[68,86905,876],{"class":85},[19,86907,86908],{},[38,86909],{"alt":63,"src":86910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[43,86912,86914],{"id":86913},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86916,86917],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86919,86920],{},[38,86921],{"alt":63,"src":86922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[58,86924,86926],{"className":54652,"code":86925,"language":54654,"meta":63,"style":63},"\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",[65,86927,86928,86936,86944,86949,86954,86958,86963,86968,86973,86981],{"__ignoreMap":63},[68,86929,86930,86932,86934],{"class":70,"line":71},[68,86931,861],{"class":85},[68,86933,53385],{"class":81},[68,86935,876],{"class":85},[68,86937,86938,86940,86942],{"class":70,"line":78},[68,86939,53729],{"class":85},[68,86941,53398],{"class":81},[68,86943,876],{"class":85},[68,86945,86946],{"class":70,"line":89},[68,86947,86948],{"class":85},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[68,86950,86951],{"class":70,"line":115},[68,86952,86953],{"class":85},"    function Star() {\n",[68,86955,86956],{"class":70,"line":280},[68,86957,3787],{"class":85},[68,86959,86960],{"class":70,"line":301},[68,86961,86962],{"class":85},"    const ldh = new Star()\n",[68,86964,86965],{"class":70,"line":320},[68,86966,86967],{"class":85},"    console.log(Star.prototype)\n",[68,86969,86970],{"class":70,"line":2915},[68,86971,86972],{"class":85},"    console.log(Star.prototype.constructor === Star)\n",[68,86974,86975,86977,86979],{"class":70,"line":2921},[68,86976,54002],{"class":85},[68,86978,53398],{"class":81},[68,86980,876],{"class":85},[68,86982,86983,86985,86987],{"class":70,"line":2933},[68,86984,886],{"class":85},[68,86986,53385],{"class":81},[68,86988,876],{"class":85},[19,86990,86991],{},[38,86992],{"alt":63,"src":86993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86995,86996],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[58,86998,87000],{"className":54652,"code":86999,"language":54654,"meta":63,"style":63},"  \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",[65,87001,87002,87010,87014,87018,87022,87027,87032,87037,87041,87046,87051,87056,87061,87066,87071,87075,87079,87084,87089,87094,87098,87103,87108,87112,87116,87120],{"__ignoreMap":63},[68,87003,87004,87006,87008],{"class":70,"line":71},[68,87005,53729],{"class":85},[68,87007,53398],{"class":81},[68,87009,876],{"class":85},[68,87011,87012],{"class":70,"line":78},[68,87013,86948],{"class":85},[68,87015,87016],{"class":70,"line":89},[68,87017,86953],{"class":85},[68,87019,87020],{"class":70,"line":115},[68,87021,3787],{"class":85},[68,87023,87024],{"class":70,"line":280},[68,87025,87026],{"class":85},"    \u002F\u002F const ldh = new Star()\n",[68,87028,87029],{"class":70,"line":301},[68,87030,87031],{"class":85},"    \u002F\u002F console.log(Star.prototype)\n",[68,87033,87034],{"class":70,"line":320},[68,87035,87036],{"class":85},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[68,87038,87039],{"class":70,"line":2915},[68,87040,4000],{"emptyLinePlaceholder":1679},[68,87042,87043],{"class":70,"line":2921},[68,87044,87045],{"class":85},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[68,87047,87048],{"class":70,"line":2933},[68,87049,87050],{"class":85},"    \u002F\u002F Star.prototype.sing = function () {\n",[68,87052,87053],{"class":70,"line":3214},[68,87054,87055],{"class":85},"    \u002F\u002F   console.log('唱歌')\n",[68,87057,87058],{"class":70,"line":3219},[68,87059,87060],{"class":85},"    \u002F\u002F }\n",[68,87062,87063],{"class":70,"line":3225},[68,87064,87065],{"class":85},"    \u002F\u002F Star.prototype.dance = function () {\n",[68,87067,87068],{"class":70,"line":3230},[68,87069,87070],{"class":85},"    \u002F\u002F   console.log('跳舞')\n",[68,87072,87073],{"class":70,"line":3244},[68,87074,87060],{"class":85},[68,87076,87077],{"class":70,"line":3249},[68,87078,86967],{"class":85},[68,87080,87081],{"class":70,"line":3255},[68,87082,87083],{"class":85},"    Star.prototype = {\n",[68,87085,87086],{"class":70,"line":3276},[68,87087,87088],{"class":85},"      sing: function () {\n",[68,87090,87091],{"class":70,"line":3281},[68,87092,87093],{"class":85},"        console.log('唱歌')\n",[68,87095,87096],{"class":70,"line":3295},[68,87097,79470],{"class":85},[68,87099,87100],{"class":70,"line":3300},[68,87101,87102],{"class":85},"      dance: function () {\n",[68,87104,87105],{"class":70,"line":3329},[68,87106,87107],{"class":85},"        console.log('跳舞')\n",[68,87109,87110],{"class":70,"line":3334},[68,87111,53983],{"class":85},[68,87113,87114],{"class":70,"line":3351},[68,87115,3787],{"class":85},[68,87117,87118],{"class":70,"line":3356},[68,87119,86967],{"class":85},[68,87121,87122,87124,87126],{"class":70,"line":3361},[68,87123,54002],{"class":85},[68,87125,53398],{"class":81},[68,87127,876],{"class":85},[19,87129,87130],{},"进行输出结果后会发现：",[19,87132,87133],{},[38,87134],{"alt":63,"src":87135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87137,87138],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87140,87141],{},"所以，要重新指回创造这个原型对象的构造函数",[58,87143,87145],{"className":72792,"code":87144,"language":72794,"meta":63,"style":63},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[65,87146,87147,87161,87166,87171,87182,87195,87200,87211,87225,87229],{"__ignoreMap":63},[68,87148,87149,87152,87154,87157,87159],{"class":70,"line":71},[68,87150,87151],{"class":92},"Star",[68,87153,2294],{"class":85},[68,87155,87156],{"class":92},"prototype",[68,87158,15161],{"class":102},[68,87160,86],{"class":85},[68,87162,87163],{"class":70,"line":78},[68,87164,87165],{"class":74},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[68,87167,87168],{"class":70,"line":89},[68,87169,87170],{"class":85},"  constructor: Star,\n",[68,87172,87173,87176,87178,87180],{"class":70,"line":115},[68,87174,87175],{"class":587},"  sing",[68,87177,96],{"class":85},[68,87179,56033],{"class":102},[68,87181,56036],{"class":85},[68,87183,87184,87186,87188,87190,87193],{"class":70,"line":280},[68,87185,75331],{"class":85},[68,87187,59831],{"class":587},[68,87189,997],{"class":85},[68,87191,87192],{"class":872},"'唱歌'",[68,87194,1757],{"class":85},[68,87196,87197],{"class":70,"line":301},[68,87198,87199],{"class":85},"   },\n",[68,87201,87202,87205,87207,87209],{"class":70,"line":320},[68,87203,87204],{"class":587},"   dance",[68,87206,96],{"class":85},[68,87208,56033],{"class":102},[68,87210,56036],{"class":85},[68,87212,87213,87216,87218,87220,87223],{"class":70,"line":2915},[68,87214,87215],{"class":85},"     console.",[68,87217,59831],{"class":587},[68,87219,997],{"class":85},[68,87221,87222],{"class":872},"'跳舞'",[68,87224,1757],{"class":85},[68,87226,87227],{"class":70,"line":2921},[68,87228,5908],{"class":85},[68,87230,87231],{"class":70,"line":2933},[68,87232,118],{"class":85},[19,87234,87235],{},[38,87236],{"alt":63,"src":87237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87239,87240],{},"总结1：",[19,87242,87243],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87245,87246],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87248,87249],{},"constructor指的是他的来源",[19,87251,87252],{},[38,87253],{"alt":63,"src":87254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87256,87257],{},[38,87258],{"alt":63,"src":87259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87261,87262],{},"总结2：",[19,87264,87265],{},[38,87266],{"alt":63,"src":87267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87269,87270],{},[38,87271],{"alt":63,"src":87272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87274,87275],{},[38,87276],{"alt":63,"src":87277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[43,87279,87281],{"id":87280},"_4134-对象原型","4.13.4 对象原型",[19,87283,87284],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87286,87287],{},"对象原型就是__proto__这个属性",[19,87289,87290],{},[38,87291],{"alt":63,"src":87292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87294,87295],{},[38,87296],{"alt":63,"src":87297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87299,87300],{},[38,87301],{"alt":63,"src":87302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87304,87305],{},[38,87306],{"alt":63,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[58,87309,87311],{"className":54652,"code":87310,"language":54654,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[65,87312,87313,87321,87329,87333,87337,87341,87346,87354],{"__ignoreMap":63},[68,87314,87315,87317,87319],{"class":70,"line":71},[68,87316,861],{"class":85},[68,87318,53385],{"class":81},[68,87320,876],{"class":85},[68,87322,87323,87325,87327],{"class":70,"line":78},[68,87324,53729],{"class":85},[68,87326,53398],{"class":81},[68,87328,876],{"class":85},[68,87330,87331],{"class":70,"line":89},[68,87332,86953],{"class":85},[68,87334,87335],{"class":70,"line":115},[68,87336,3787],{"class":85},[68,87338,87339],{"class":70,"line":280},[68,87340,86962],{"class":85},[68,87342,87343],{"class":70,"line":301},[68,87344,87345],{"class":85},"    console.log(ldh)\n",[68,87347,87348,87350,87352],{"class":70,"line":320},[68,87349,54002],{"class":85},[68,87351,53398],{"class":81},[68,87353,876],{"class":85},[68,87355,87356,87358,87360],{"class":70,"line":2915},[68,87357,886],{"class":85},[68,87359,53385],{"class":81},[68,87361,876],{"class":85},[19,87363,87364],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87366,87367],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87369,87370],{},[38,87371],{"alt":63,"src":87372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87374,87375],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87377,87378],{},"对象原型指向原型对象",[19,87380,87381],{},[38,87382],{"alt":63,"src":87383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87385,87386],{},[38,87387],{"alt":63,"src":87388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87390,87391],{},[38,87392],{"alt":63,"src":87393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[43,87395,87397],{"id":87396},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87399,87400],{},[38,87401],{"alt":63,"src":87402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[48,87404,87405,87408,87411,87414],{},[51,87406,87407],{},"构造函数通过new的形式实例化得到实例对象",[51,87409,87410],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[51,87412,87413],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[51,87415,87416],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87418,87419],{},[38,87420],{"alt":63,"src":87421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87423,87424],{},"题目梳理：",[19,87426,87427],{},[38,87428],{"alt":63,"src":87429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[43,87431,87433],{"id":87432},"_4136-原型继承","4.13.6 原型继承",[19,87435,87436],{},[38,87437],{"alt":63,"src":87438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87440,87441],{},[38,87442],{"alt":63,"src":87443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87445,87446],{},[38,87447],{"alt":63,"src":87448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87450,87451],{},[38,87452],{"alt":63,"src":87453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87455,87456],{},[38,87457],{"alt":63,"src":87458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87460,87461],{},[38,87462],{"alt":63,"src":87463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87465,87466],{},[38,87467],{"alt":63,"src":87468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87470,87471],{},[38,87472],{"alt":63,"src":87473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87475,87476],{},"回顾：构造函数每次new得到对象都是不同的",[43,87478,87480],{"id":87479},"_4137-原型链","4.13.7 原型链",[19,87482,87483],{},[38,87484],{"alt":63,"src":87485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87487,87488],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87490,87491],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87493,87494],{},"大哥是Object",[19,87496,87497],{},[38,87498],{"alt":63,"src":87499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87501,87502],{},[38,87503],{"alt":63,"src":87504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87506,87507],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87509,87510],{},"万物皆对象",[43,87512,87514],{"id":87513},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87516,87517],{},"模态框",[19,87519,87520],{},"以后遇见这个效果直接使用这个就行",[19,87522,87523],{},[38,87524],{"alt":63,"src":87525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87527,87528],{},[38,87529],{"alt":63,"src":87530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87532,87533],{},[38,87534],{"alt":63,"src":87535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87537,87538],{},[38,87539],{"alt":63,"src":87540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87542,87543],{},"补充知识点：",[48,87545,87546],{},[51,87547,87548],{},"append()",[19,87550,87551],{},[38,87552],{"alt":63,"src":87553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[58,87555,87557],{"className":52226,"code":87556,"language":52228,"meta":63,"style":63},"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",[65,87558,87559,87564,87569,87574,87578,87582,87586,87591,87596,87601,87605],{"__ignoreMap":63},[68,87560,87561],{"class":70,"line":71},[68,87562,87563],{"class":85},"append(param1)\n",[68,87565,87566],{"class":70,"line":78},[68,87567,87568],{"class":85},"append(param1, param2)\n",[68,87570,87571],{"class":70,"line":89},[68,87572,87573],{"class":85},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[68,87575,87576],{"class":70,"line":115},[68,87577,4000],{"emptyLinePlaceholder":1679},[68,87579,87580],{"class":70,"line":280},[68,87581,4000],{"emptyLinePlaceholder":1679},[68,87583,87584],{"class":70,"line":301},[68,87585,4000],{"emptyLinePlaceholder":1679},[68,87587,87588],{"class":70,"line":320},[68,87589,87590],{"class":85},"let div = document.createElement(\"div\");\n",[68,87592,87593],{"class":70,"line":2915},[68,87594,87595],{"class":85},"let p = document.createElement(\"p\");\n",[68,87597,87598],{"class":70,"line":2921},[68,87599,87600],{"class":85},"div.append(p);\n",[68,87602,87603],{"class":70,"line":2933},[68,87604,4000],{"emptyLinePlaceholder":1679},[68,87606,87607,87610,87612],{"class":70,"line":3214},[68,87608,87609],{"class":85},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[68,87611,19],{"class":81},[68,87613,87614],{"class":85},"> ]\n",[48,87616,87617],{"start":78},[51,87618,87619],{},"remove()",[19,87621,87622],{},"自己删自己",[19,87624,87625],{},[38,87626],{"alt":63,"src":87627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[58,87629,87631],{"className":52226,"code":87630,"language":52228,"meta":63,"style":63},"\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",[65,87632,87633,87643,87657,87661,87669,87683,87703,87715,87723,87730,87742,87755,87789,87801,87812,87824,87836,87848,87875,87885,87889,87893,87902,87914,87928,87938,87950,87954,87958,87968,87979,87989,87999,88012,88025,88035,88039,88043,88052,88062,88074,88078,88082,88091,88101,88111,88123,88127,88131,88141,88157,88168,88178,88188,88200,88212,88224,88228,88232,88245,88256,88260,88268,88276,88280,88288,88308,88328,88336,88341,88367,88372,88377,88396,88401,88413,88418,88429,88439,88449,88454,88459,88463,88468,88473,88478,88498,88503,88523,88528,88542,88547,88552,88557,88573,88577,88582,88611,88616,88621,88626,88637,88641,88645,88649,88654,88679,88684,88709,88714,88723,88727,88732,88757,88761,88786,88790,88799,88803,88808,88826,88836,88840,88848,88856,88860],{"__ignoreMap":63},[68,87634,87635,87637,87639,87641],{"class":70,"line":71},[68,87636,52890],{"class":85},[68,87638,52893],{"class":81},[68,87640,52896],{"class":587},[68,87642,876],{"class":85},[68,87644,87645,87647,87649,87651,87653,87655],{"class":70,"line":78},[68,87646,861],{"class":85},[68,87648,52228],{"class":81},[68,87650,52907],{"class":587},[68,87652,869],{"class":85},[68,87654,52912],{"class":872},[68,87656,876],{"class":85},[68,87658,87659],{"class":70,"line":89},[68,87660,4000],{"emptyLinePlaceholder":1679},[68,87662,87663,87665,87667],{"class":70,"line":115},[68,87664,861],{"class":85},[68,87666,52925],{"class":81},[68,87668,876],{"class":85},[68,87670,87671,87673,87675,87677,87679,87681],{"class":70,"line":280},[68,87672,53729],{"class":85},[68,87674,52935],{"class":81},[68,87676,52938],{"class":587},[68,87678,869],{"class":85},[68,87680,52943],{"class":872},[68,87682,876],{"class":85},[68,87684,87685,87687,87689,87691,87693,87695,87697,87699,87701],{"class":70,"line":301},[68,87686,53729],{"class":85},[68,87688,52935],{"class":81},[68,87690,16516],{"class":587},[68,87692,869],{"class":85},[68,87694,52982],{"class":872},[68,87696,52962],{"class":587},[68,87698,869],{"class":85},[68,87700,52989],{"class":872},[68,87702,876],{"class":85},[68,87704,87705,87707,87709,87711,87713],{"class":70,"line":320},[68,87706,53729],{"class":85},[68,87708,52998],{"class":81},[68,87710,53001],{"class":85},[68,87712,52998],{"class":81},[68,87714,876],{"class":85},[68,87716,87717,87719,87721],{"class":70,"line":2915},[68,87718,53729],{"class":85},[68,87720,1652],{"class":81},[68,87722,876],{"class":85},[68,87724,87725,87728],{"class":70,"line":2921},[68,87726,87727],{"class":587},"    .modal",[68,87729,86],{"class":85},[68,87731,87732,87734,87736,87738,87740],{"class":70,"line":2933},[68,87733,56355],{"class":92},[68,87735,96],{"class":85},[68,87737,5572],{"class":92},[68,87739,103],{"class":102},[68,87741,112],{"class":85},[68,87743,87744,87747,87749,87751,87753],{"class":70,"line":3214},[68,87745,87746],{"class":92},"      min-height",[68,87748,96],{"class":85},[68,87750,2047],{"class":92},[68,87752,103],{"class":102},[68,87754,112],{"class":85},[68,87756,87757,87759,87761,87763,87765,87767,87769,87771,87773,87775,87777,87779,87781,87783,87785,87787],{"class":70,"line":3219},[68,87758,80328],{"class":92},[68,87760,96],{"class":85},[68,87762,600],{"class":92},[68,87764,5692],{"class":92},[68,87766,989],{"class":92},[68,87768,103],{"class":102},[68,87770,994],{"class":92},[68,87772,997],{"class":85},[68,87774,600],{"class":92},[68,87776,1002],{"class":85},[68,87778,600],{"class":92},[68,87780,1002],{"class":85},[68,87782,600],{"class":92},[68,87784,1002],{"class":85},[68,87786,1013],{"class":92},[68,87788,1016],{"class":85},[68,87790,87791,87793,87795,87797,87799],{"class":70,"line":3225},[68,87792,56718],{"class":92},[68,87794,96],{"class":85},[68,87796,2029],{"class":92},[68,87798,103],{"class":102},[68,87800,112],{"class":85},[68,87802,87803,87805,87807,87810],{"class":70,"line":3230},[68,87804,56343],{"class":92},[68,87806,96],{"class":85},[68,87808,87809],{"class":92},"fixed",[68,87811,112],{"class":85},[68,87813,87814,87817,87819,87822],{"class":70,"line":3244},[68,87815,87816],{"class":92},"      z-index",[68,87818,96],{"class":85},[68,87820,87821],{"class":92},"999",[68,87823,112],{"class":85},[68,87825,87826,87828,87830,87832,87834],{"class":70,"line":3249},[68,87827,56422],{"class":92},[68,87829,96],{"class":85},[68,87831,2392],{"class":92},[68,87833,2064],{"class":102},[68,87835,112],{"class":85},[68,87837,87838,87840,87842,87844,87846],{"class":70,"line":3255},[68,87839,56531],{"class":92},[68,87841,96],{"class":85},[68,87843,2392],{"class":92},[68,87845,2064],{"class":102},[68,87847,112],{"class":85},[68,87849,87850,87852,87854,87856,87858,87861,87863,87865,87867,87869,87871,87873],{"class":70,"line":3276},[68,87851,80368],{"class":92},[68,87853,96],{"class":85},[68,87855,80373],{"class":92},[68,87857,997],{"class":85},[68,87859,87860],{"class":92},"-50",[68,87862,2064],{"class":102},[68,87864,1002],{"class":85},[68,87866,87860],{"class":92},[68,87868,2064],{"class":102},[68,87870,1002],{"class":85},[68,87872,600],{"class":92},[68,87874,1016],{"class":85},[68,87876,87877,87879,87881,87883],{"class":70,"line":3281},[68,87878,56468],{"class":92},[68,87880,96],{"class":85},[68,87882,62426],{"class":92},[68,87884,112],{"class":85},[68,87886,87887],{"class":70,"line":3295},[68,87888,3787],{"class":85},[68,87890,87891],{"class":70,"line":3300},[68,87892,4000],{"emptyLinePlaceholder":1679},[68,87894,87895,87897,87900],{"class":70,"line":3329},[68,87896,87727],{"class":587},[68,87898,87899],{"class":587}," .header",[68,87901,86],{"class":85},[68,87903,87904,87906,87908,87910,87912],{"class":70,"line":3334},[68,87905,58943],{"class":92},[68,87907,96],{"class":85},[68,87909,2137],{"class":92},[68,87911,103],{"class":102},[68,87913,112],{"class":85},[68,87915,87916,87918,87920,87922,87924,87926],{"class":70,"line":3351},[68,87917,56279],{"class":92},[68,87919,96],{"class":85},[68,87921,600],{"class":92},[68,87923,989],{"class":92},[68,87925,103],{"class":102},[68,87927,112],{"class":85},[68,87929,87930,87932,87934,87936],{"class":70,"line":3356},[68,87931,56343],{"class":92},[68,87933,96],{"class":85},[68,87935,56348],{"class":92},[68,87937,112],{"class":85},[68,87939,87940,87942,87944,87946,87948],{"class":70,"line":3361},[68,87941,56506],{"class":92},[68,87943,96],{"class":85},[68,87945,2436],{"class":92},[68,87947,103],{"class":102},[68,87949,112],{"class":85},[68,87951,87952],{"class":70,"line":3366},[68,87953,3787],{"class":85},[68,87955,87956],{"class":70,"line":3380},[68,87957,4000],{"emptyLinePlaceholder":1679},[68,87959,87960,87962,87964,87966],{"class":70,"line":3385},[68,87961,87727],{"class":587},[68,87963,87899],{"class":587},[68,87965,4631],{"class":81},[68,87967,86],{"class":85},[68,87969,87970,87973,87975,87977],{"class":70,"line":4177},[68,87971,87972],{"class":92},"      font-style",[68,87974,96],{"class":85},[68,87976,65424],{"class":92},[68,87978,112],{"class":85},[68,87980,87981,87983,87985,87987],{"class":70,"line":4191},[68,87982,59000],{"class":92},[68,87984,96],{"class":85},[68,87986,63654],{"class":92},[68,87988,112],{"class":85},[68,87990,87991,87993,87995,87997],{"class":70,"line":4199},[68,87992,56343],{"class":92},[68,87994,96],{"class":85},[68,87996,56415],{"class":92},[68,87998,112],{"class":85},[68,88000,88001,88004,88006,88008,88010],{"class":70,"line":4204},[68,88002,88003],{"class":92},"      right",[68,88005,96],{"class":85},[68,88007,2311],{"class":92},[68,88009,103],{"class":102},[68,88011,112],{"class":85},[68,88013,88014,88016,88018,88021,88023],{"class":70,"line":4210},[68,88015,56531],{"class":92},[68,88017,96],{"class":85},[68,88019,88020],{"class":92},"-2",[68,88022,103],{"class":102},[68,88024,112],{"class":85},[68,88026,88027,88029,88031,88033],{"class":70,"line":4216},[68,88028,63609],{"class":92},[68,88030,96],{"class":85},[68,88032,63614],{"class":92},[68,88034,112],{"class":85},[68,88036,88037],{"class":70,"line":4221},[68,88038,3787],{"class":85},[68,88040,88041],{"class":70,"line":9547},[68,88042,4000],{"emptyLinePlaceholder":1679},[68,88044,88045,88047,88050],{"class":70,"line":9571},[68,88046,87727],{"class":587},[68,88048,88049],{"class":587}," .body",[68,88051,86],{"class":85},[68,88053,88054,88056,88058,88060],{"class":70,"line":9576},[68,88055,58870],{"class":92},[68,88057,96],{"class":85},[68,88059,53179],{"class":92},[68,88061,112],{"class":85},[68,88063,88064,88066,88068,88070,88072],{"class":70,"line":9582},[68,88065,56279],{"class":92},[68,88067,96],{"class":85},[68,88069,2182],{"class":92},[68,88071,103],{"class":102},[68,88073,112],{"class":85},[68,88075,88076],{"class":70,"line":9609},[68,88077,3787],{"class":85},[68,88079,88080],{"class":70,"line":9614},[68,88081,4000],{"emptyLinePlaceholder":1679},[68,88083,88084,88086,88089],{"class":70,"line":9620},[68,88085,87727],{"class":587},[68,88087,88088],{"class":587}," .footer",[68,88090,86],{"class":85},[68,88092,88093,88095,88097,88099],{"class":70,"line":9632},[68,88094,56593],{"class":92},[68,88096,96],{"class":85},[68,88098,53067],{"class":92},[68,88100,112],{"class":85},[68,88102,88103,88105,88107,88109],{"class":70,"line":9644},[68,88104,56604],{"class":92},[68,88106,96],{"class":85},[68,88108,53167],{"class":92},[68,88110,112],{"class":85},[68,88112,88113,88115,88117,88119,88121],{"class":70,"line":9656},[68,88114,56279],{"class":92},[68,88116,96],{"class":85},[68,88118,2182],{"class":92},[68,88120,103],{"class":102},[68,88122,112],{"class":85},[68,88124,88125],{"class":70,"line":11314},[68,88126,3787],{"class":85},[68,88128,88129],{"class":70,"line":11339},[68,88130,4000],{"emptyLinePlaceholder":1679},[68,88132,88133,88135,88137,88139],{"class":70,"line":11362},[68,88134,87727],{"class":587},[68,88136,88088],{"class":587},[68,88138,3002],{"class":81},[68,88140,86],{"class":85},[68,88142,88143,88145,88147,88149,88151,88153,88155],{"class":70,"line":11386},[68,88144,56279],{"class":92},[68,88146,96],{"class":85},[68,88148,288],{"class":92},[68,88150,103],{"class":102},[68,88152,3683],{"class":92},[68,88154,103],{"class":102},[68,88156,112],{"class":85},[68,88158,88159,88161,88163,88166],{"class":70,"line":11391},[68,88160,63305],{"class":92},[68,88162,96],{"class":85},[68,88164,88165],{"class":92},"#ccc",[68,88167,112],{"class":85},[68,88169,88170,88172,88174,88176],{"class":70,"line":11396},[68,88171,65553],{"class":92},[68,88173,96],{"class":85},[68,88175,56321],{"class":92},[68,88177,112],{"class":85},[68,88179,88180,88182,88184,88186],{"class":70,"line":11401},[68,88181,59000],{"class":92},[68,88183,96],{"class":85},[68,88185,62426],{"class":92},[68,88187,112],{"class":85},[68,88189,88190,88192,88194,88196,88198],{"class":70,"line":11410},[68,88191,56718],{"class":92},[68,88193,96],{"class":85},[68,88195,267],{"class":92},[68,88197,103],{"class":102},[68,88199,112],{"class":85},[68,88201,88202,88204,88206,88208,88210],{"class":70,"line":11415},[68,88203,63334],{"class":92},[68,88205,96],{"class":85},[68,88207,2182],{"class":92},[68,88209,103],{"class":102},[68,88211,112],{"class":85},[68,88213,88214,88216,88218,88220,88222],{"class":70,"line":11421},[68,88215,56506],{"class":92},[68,88217,96],{"class":85},[68,88219,2285],{"class":92},[68,88221,103],{"class":102},[68,88223,112],{"class":85},[68,88225,88226],{"class":70,"line":11442},[68,88227,3787],{"class":85},[68,88229,88230],{"class":70,"line":11448},[68,88231,4000],{"emptyLinePlaceholder":1679},[68,88233,88234,88236,88238,88240,88243],{"class":70,"line":11462},[68,88235,87727],{"class":587},[68,88237,88088],{"class":587},[68,88239,3002],{"class":81},[68,88241,88242],{"class":587},".submit",[68,88244,86],{"class":85},[68,88246,88247,88249,88251,88254],{"class":70,"line":11468},[68,88248,56468],{"class":92},[68,88250,96],{"class":85},[68,88252,88253],{"class":92},"#369",[68,88255,112],{"class":85},[68,88257,88258],{"class":70,"line":11495},[68,88259,3787],{"class":85},[68,88261,88262,88264,88266],{"class":70,"line":11504},[68,88263,54002],{"class":85},[68,88265,1652],{"class":81},[68,88267,876],{"class":85},[68,88269,88270,88272,88274],{"class":70,"line":11510},[68,88271,886],{"class":85},[68,88273,52925],{"class":81},[68,88275,876],{"class":85},[68,88277,88278],{"class":70,"line":11518},[68,88279,4000],{"emptyLinePlaceholder":1679},[68,88281,88282,88284,88286],{"class":70,"line":11523},[68,88283,861],{"class":85},[68,88285,53385],{"class":81},[68,88287,876],{"class":85},[68,88289,88290,88292,88294,88296,88298,88301,88304,88306],{"class":70,"line":18199},[68,88291,53729],{"class":85},[68,88293,55471],{"class":81},[68,88295,16555],{"class":587},[68,88297,869],{"class":85},[68,88299,88300],{"class":872},"\"delete\"",[68,88302,88303],{"class":85},">删除\u003C\u002F",[68,88305,55471],{"class":81},[68,88307,876],{"class":85},[68,88309,88310,88312,88314,88316,88318,88321,88324,88326],{"class":70,"line":18205},[68,88311,53729],{"class":85},[68,88313,55471],{"class":81},[68,88315,16555],{"class":587},[68,88317,869],{"class":85},[68,88319,88320],{"class":872},"\"login\"",[68,88322,88323],{"class":85},">登录\u003C\u002F",[68,88325,55471],{"class":81},[68,88327,876],{"class":85},[68,88329,88330,88332,88334],{"class":70,"line":18228},[68,88331,53729],{"class":85},[68,88333,53398],{"class":81},[68,88335,876],{"class":85},[68,88337,88338],{"class":70,"line":18234},[68,88339,88340],{"class":74},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[68,88342,88343,88345,88348,88350,88352,88354,88356,88358,88361,88363,88365],{"class":70,"line":18257},[68,88344,71666],{"class":102},[68,88346,88347],{"class":587}," Modal",[68,88349,997],{"class":85},[68,88351,52998],{"class":6815},[68,88353,15161],{"class":102},[68,88355,71512],{"class":872},[68,88357,1002],{"class":85},[68,88359,88360],{"class":6815},"message",[68,88362,15161],{"class":102},[68,88364,71512],{"class":872},[68,88366,14039],{"class":85},[68,88368,88369],{"class":70,"line":18271},[68,88370,88371],{"class":74},"      \u002F\u002F 创建Model 模态框盒子\n",[68,88373,88374],{"class":70,"line":18291},[68,88375,88376],{"class":74},"      \u002F\u002F 1.1 创建div标签\n",[68,88378,88379,88381,88384,88386,88388,88390,88392,88394],{"class":70,"line":18297},[68,88380,71633],{"class":92},[68,88382,88383],{"class":85},".modalBox ",[68,88385,869],{"class":102},[68,88387,55980],{"class":85},[68,88389,71733],{"class":587},[68,88391,997],{"class":85},[68,88393,83508],{"class":872},[68,88395,1757],{"class":85},[68,88397,88398],{"class":70,"line":18308},[68,88399,88400],{"class":74},"      \u002F\u002F 1.2 给div 添加类名为model\n",[68,88402,88403,88405,88408,88410],{"class":70,"line":18331},[68,88404,71633],{"class":92},[68,88406,88407],{"class":85},".modalBox.className ",[68,88409,869],{"class":102},[68,88411,88412],{"class":872}," 'modal'\n",[68,88414,88415],{"class":70,"line":18353},[68,88416,88417],{"class":74},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[68,88419,88420,88422,88425,88427],{"class":70,"line":18358},[68,88421,71633],{"class":92},[68,88423,88424],{"class":85},".modalBox.innerHTML ",[68,88426,869],{"class":102},[68,88428,71750],{"class":872},[68,88430,88431,88434,88436],{"class":70,"line":18364},[68,88432,88433],{"class":872},"        \u003Cdiv class=\"header\">${",[68,88435,52998],{"class":85},[68,88437,88438],{"class":872},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[68,88440,88441,88444,88446],{"class":70,"line":18378},[68,88442,88443],{"class":872},"        \u003Cdiv class=\"body\">${",[68,88445,88360],{"class":85},[68,88447,88448],{"class":872},"}\u003C\u002Fdiv>\n",[68,88450,88451],{"class":70,"line":18391},[68,88452,88453],{"class":872},"      `\n",[68,88455,88456],{"class":70,"line":18396},[68,88457,88458],{"class":74},"      \u002F\u002F console.log(this.modalBox)\n",[68,88460,88461],{"class":70,"line":18410},[68,88462,3787],{"class":85},[68,88464,88465],{"class":70,"line":18415},[68,88466,88467],{"class":74},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[68,88469,88470],{"class":70,"line":18421},[68,88471,88472],{"class":74},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[68,88474,88475],{"class":70,"line":18426},[68,88476,88477],{"class":74},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[68,88479,88480,88483,88485,88487,88489,88492,88494,88496],{"class":70,"line":18440},[68,88481,88482],{"class":92},"    Modal",[68,88484,2294],{"class":85},[68,88486,87156],{"class":92},[68,88488,2294],{"class":85},[68,88490,88491],{"class":587},"open",[68,88493,15161],{"class":102},[68,88495,60502],{"class":102},[68,88497,56036],{"class":85},[68,88499,88500],{"class":70,"line":18445},[68,88501,88502],{"class":74},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[68,88504,88505,88507,88510,88512,88514,88516,88518,88521],{"class":70,"line":18450},[68,88506,59812],{"class":102},[68,88508,88509],{"class":92}," box",[68,88511,15161],{"class":102},[68,88513,55980],{"class":85},[68,88515,55983],{"class":587},[68,88517,997],{"class":85},[68,88519,88520],{"class":872},"'.modal'",[68,88522,1757],{"class":85},[68,88524,88525],{"class":70,"line":18464},[68,88526,88527],{"class":74},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[68,88529,88530,88533,88535,88538,88540],{"class":70,"line":18476},[68,88531,88532],{"class":85},"      box ",[68,88534,3317],{"class":102},[68,88536,88537],{"class":85}," box.",[68,88539,58590],{"class":587},[68,88541,3577],{"class":85},[68,88543,88544],{"class":70,"line":18481},[68,88545,88546],{"class":74},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[68,88548,88549],{"class":70,"line":18494},[68,88550,88551],{"class":74},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[68,88553,88554],{"class":70,"line":18499},[68,88555,88556],{"class":74},"      \u002F\u002F append可以增加对象\n",[68,88558,88559,88562,88565,88567,88570],{"class":70,"line":18504},[68,88560,88561],{"class":85},"      document.body.",[68,88563,88564],{"class":587},"append",[68,88566,997],{"class":85},[68,88568,88569],{"class":92},"this",[68,88571,88572],{"class":85},".modalBox)\n",[68,88574,88575],{"class":70,"line":18509},[68,88576,4000],{"emptyLinePlaceholder":1679},[68,88578,88579],{"class":70,"line":18522},[68,88580,88581],{"class":74},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[68,88583,88584,88586,88589,88591,88593,88596,88598,88600,88602,88604,88607,88609],{"class":70,"line":18527},[68,88585,71633],{"class":92},[68,88587,88588],{"class":85},".modalBox.",[68,88590,55983],{"class":587},[68,88592,997],{"class":85},[68,88594,88595],{"class":872},"'i'",[68,88597,32419],{"class":85},[68,88599,59397],{"class":587},[68,88601,997],{"class":85},[68,88603,59402],{"class":872},[68,88605,88606],{"class":85},", () ",[68,88608,86299],{"class":102},[68,88610,86],{"class":85},[68,88612,88613],{"class":70,"line":34226},[68,88614,88615],{"class":74},"        \u002F\u002F 这个地方需要用到箭头函数\n",[68,88617,88618],{"class":70,"line":34232},[68,88619,88620],{"class":74},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[68,88622,88623],{"class":70,"line":34238},[68,88624,88625],{"class":74},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[68,88627,88628,88630,88632,88635],{"class":70,"line":34244},[68,88629,66309],{"class":92},[68,88631,2294],{"class":85},[68,88633,88634],{"class":587},"close",[68,88636,3577],{"class":85},[68,88638,88639],{"class":70,"line":34250},[68,88640,66398],{"class":85},[68,88642,88643],{"class":70,"line":34261},[68,88644,3787],{"class":85},[68,88646,88647],{"class":70,"line":34267},[68,88648,4000],{"emptyLinePlaceholder":1679},[68,88650,88651],{"class":70,"line":34287},[68,88652,88653],{"class":74},"    \u002F\u002F 测试一下 点击 删除按钮\n",[68,88655,88656,88658,88660,88662,88665,88667,88669,88671,88673,88675,88677],{"class":70,"line":34293},[68,88657,53992],{"class":85},[68,88659,55983],{"class":587},[68,88661,997],{"class":85},[68,88663,88664],{"class":872},"'#delete'",[68,88666,32419],{"class":85},[68,88668,59397],{"class":587},[68,88670,997],{"class":85},[68,88672,59402],{"class":872},[68,88674,88606],{"class":85},[68,88676,86299],{"class":102},[68,88678,86],{"class":85},[68,88680,88681],{"class":70,"line":34304},[68,88682,88683],{"class":74},"      \u002F\u002F 先调用Model构造函数\n",[68,88685,88686,88688,88691,88693,88695,88697,88699,88702,88704,88707],{"class":70,"line":34310},[68,88687,59812],{"class":102},[68,88689,88690],{"class":92}," del",[68,88692,15161],{"class":102},[68,88694,13176],{"class":102},[68,88696,88347],{"class":587},[68,88698,997],{"class":85},[68,88700,88701],{"class":872},"'温馨的提示'",[68,88703,1002],{"class":85},[68,88705,88706],{"class":872},"'您没有删除权限操作'",[68,88708,1757],{"class":85},[68,88710,88711],{"class":70,"line":34316},[68,88712,88713],{"class":74},"      \u002F\u002F 实例对象调用open方法\n",[68,88715,88716,88719,88721],{"class":70,"line":34322},[68,88717,88718],{"class":85},"      del.",[68,88720,88491],{"class":587},[68,88722,3577],{"class":85},[68,88724,88725],{"class":70,"line":34328},[68,88726,35054],{"class":85},[68,88728,88729],{"class":70,"line":34334},[68,88730,88731],{"class":74},"    \u002F\u002F 测试一下 点击 登录按钮\n",[68,88733,88734,88736,88738,88740,88743,88745,88747,88749,88751,88753,88755],{"class":70,"line":34340},[68,88735,53992],{"class":85},[68,88737,55983],{"class":587},[68,88739,997],{"class":85},[68,88741,88742],{"class":872},"'#login'",[68,88744,32419],{"class":85},[68,88746,59397],{"class":587},[68,88748,997],{"class":85},[68,88750,59402],{"class":872},[68,88752,88606],{"class":85},[68,88754,86299],{"class":102},[68,88756,86],{"class":85},[68,88758,88759],{"class":70,"line":34346},[68,88760,88683],{"class":74},[68,88762,88763,88765,88768,88770,88772,88774,88776,88779,88781,88784],{"class":70,"line":34366},[68,88764,59812],{"class":102},[68,88766,88767],{"class":92}," log",[68,88769,15161],{"class":102},[68,88771,13176],{"class":102},[68,88773,88347],{"class":587},[68,88775,997],{"class":85},[68,88777,88778],{"class":872},"'友情提示'",[68,88780,1002],{"class":85},[68,88782,88783],{"class":872},"'您还没有登录呢'",[68,88785,1757],{"class":85},[68,88787,88788],{"class":70,"line":34372},[68,88789,88713],{"class":74},[68,88791,88792,88795,88797],{"class":70,"line":34388},[68,88793,88794],{"class":85},"      log.",[68,88796,88491],{"class":587},[68,88798,3577],{"class":85},[68,88800,88801],{"class":70,"line":34394},[68,88802,35054],{"class":85},[68,88804,88805],{"class":70,"line":34408},[68,88806,88807],{"class":74},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[68,88809,88810,88812,88814,88816,88818,88820,88822,88824],{"class":70,"line":34414},[68,88811,88482],{"class":92},[68,88813,2294],{"class":85},[68,88815,87156],{"class":92},[68,88817,2294],{"class":85},[68,88819,88634],{"class":587},[68,88821,15161],{"class":102},[68,88823,60502],{"class":102},[68,88825,56036],{"class":85},[68,88827,88828,88830,88832,88834],{"class":70,"line":34429},[68,88829,71633],{"class":92},[68,88831,88588],{"class":85},[68,88833,58590],{"class":587},[68,88835,3577],{"class":85},[68,88837,88838],{"class":70,"line":34435},[68,88839,3787],{"class":85},[68,88841,88842,88844,88846],{"class":70,"line":34444},[68,88843,54002],{"class":85},[68,88845,53398],{"class":81},[68,88847,876],{"class":85},[68,88849,88850,88852,88854],{"class":70,"line":34450},[68,88851,886],{"class":85},[68,88853,53385],{"class":81},[68,88855,876],{"class":85},[68,88857,88858],{"class":70,"line":34459},[68,88859,4000],{"emptyLinePlaceholder":1679},[68,88861,88862,88864,88866],{"class":70,"line":34465},[68,88863,886],{"class":85},[68,88865,52228],{"class":81},[68,88867,876],{"class":85},[19,88869,88870],{},[38,88871],{"alt":63,"src":88872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88874,88876],{"id":88875},"_414-深浅拷贝","4.14 深浅拷贝",[43,88878,88880],{"id":88879},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88882,88883],{},[38,88884],{"alt":63,"src":88885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88887,88888],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88890,88891],{},[38,88892],{"alt":63,"src":88893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88895,88896],{},[38,88897],{"alt":63,"src":88898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88900,88901],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88903,88904],{},[38,88905],{"alt":63,"src":88906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88908,12930],{},[19,88910,88911],{},[38,88912],{"alt":63,"src":88913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[43,88915,88917],{"id":88916},"_4142-深拷贝","4.14.2 深拷贝",[19,88919,88920],{},"深拷贝：拷贝的是对象，不是地址",[19,88922,88923],{},"常用的三种方法：",[48,88925,88926,88929,88932],{},[51,88927,88928],{},"通过递归实现深拷贝",[51,88930,88931],{},"lodash\u002FcloneDeep",[51,88933,88934],{},"通过JSON.stringify()实现",[23593,88936,88938],{"id":88937},"_41421-递归函数","4.14.2.1 递归函数",[19,88940,88941],{},[38,88942],{"alt":63,"src":88943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[48,88945,88946],{},[51,88947,88948],{},"死递归占溢出：",[58,88950,88952],{"className":54652,"code":88951,"language":54654,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[65,88953,88954,88962,88970,88974,88979,88983,88988,88996],{"__ignoreMap":63},[68,88955,88956,88958,88960],{"class":70,"line":71},[68,88957,861],{"class":85},[68,88959,53385],{"class":81},[68,88961,876],{"class":85},[68,88963,88964,88966,88968],{"class":70,"line":78},[68,88965,53729],{"class":85},[68,88967,53398],{"class":81},[68,88969,876],{"class":85},[68,88971,88972],{"class":70,"line":89},[68,88973,78721],{"class":85},[68,88975,88976],{"class":70,"line":115},[68,88977,88978],{"class":85},"      fn()\n",[68,88980,88981],{"class":70,"line":280},[68,88982,3787],{"class":85},[68,88984,88985],{"class":70,"line":301},[68,88986,88987],{"class":85},"    fn()\n",[68,88989,88990,88992,88994],{"class":70,"line":320},[68,88991,54002],{"class":85},[68,88993,53398],{"class":81},[68,88995,876],{"class":85},[68,88997,88998,89000,89002],{"class":70,"line":2915},[68,88999,886],{"class":85},[68,89001,53385],{"class":81},[68,89003,876],{"class":85},[48,89005,89006],{"start":78},[51,89007,89008],{},"递归函数要加判断条件：",[19,89010,89011],{},[38,89012],{"alt":63,"src":89013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[48,89015,89016],{"start":89},[51,89017,89018],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[58,89020,89022],{"className":52226,"code":89021,"language":52228,"meta":63,"style":63},"\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",[65,89023,89024,89034,89048,89052,89060,89074,89094,89106,89114,89118,89126,89138,89146,89154,89179,89191,89195,89202,89210,89218,89222],{"__ignoreMap":63},[68,89025,89026,89028,89030,89032],{"class":70,"line":71},[68,89027,52890],{"class":85},[68,89029,52893],{"class":81},[68,89031,52896],{"class":587},[68,89033,876],{"class":85},[68,89035,89036,89038,89040,89042,89044,89046],{"class":70,"line":78},[68,89037,861],{"class":85},[68,89039,52228],{"class":81},[68,89041,52907],{"class":587},[68,89043,869],{"class":85},[68,89045,52912],{"class":872},[68,89047,876],{"class":85},[68,89049,89050],{"class":70,"line":89},[68,89051,4000],{"emptyLinePlaceholder":1679},[68,89053,89054,89056,89058],{"class":70,"line":115},[68,89055,861],{"class":85},[68,89057,52925],{"class":81},[68,89059,876],{"class":85},[68,89061,89062,89064,89066,89068,89070,89072],{"class":70,"line":280},[68,89063,53729],{"class":85},[68,89065,52935],{"class":81},[68,89067,52938],{"class":587},[68,89069,869],{"class":85},[68,89071,52943],{"class":872},[68,89073,876],{"class":85},[68,89075,89076,89078,89080,89082,89084,89086,89088,89090,89092],{"class":70,"line":301},[68,89077,53729],{"class":85},[68,89079,52935],{"class":81},[68,89081,16516],{"class":587},[68,89083,869],{"class":85},[68,89085,52982],{"class":872},[68,89087,52962],{"class":587},[68,89089,869],{"class":85},[68,89091,52989],{"class":872},[68,89093,876],{"class":85},[68,89095,89096,89098,89100,89102,89104],{"class":70,"line":320},[68,89097,53729],{"class":85},[68,89099,52998],{"class":81},[68,89101,53001],{"class":85},[68,89103,52998],{"class":81},[68,89105,876],{"class":85},[68,89107,89108,89110,89112],{"class":70,"line":2915},[68,89109,886],{"class":85},[68,89111,52925],{"class":81},[68,89113,876],{"class":85},[68,89115,89116],{"class":70,"line":2921},[68,89117,4000],{"emptyLinePlaceholder":1679},[68,89119,89120,89122,89124],{"class":70,"line":2933},[68,89121,861],{"class":85},[68,89123,53385],{"class":81},[68,89125,876],{"class":85},[68,89127,89128,89130,89132,89134,89136],{"class":70,"line":3214},[68,89129,53729],{"class":85},[68,89131,82],{"class":81},[68,89133,56898],{"class":85},[68,89135,82],{"class":81},[68,89137,876],{"class":85},[68,89139,89140,89142,89144],{"class":70,"line":3219},[68,89141,53729],{"class":85},[68,89143,53398],{"class":81},[68,89145,876],{"class":85},[68,89147,89148,89150,89152],{"class":70,"line":3225},[68,89149,71666],{"class":102},[68,89151,75351],{"class":587},[68,89153,12451],{"class":85},[68,89155,89156,89158,89160,89162,89164,89166,89168,89170,89172,89174,89177],{"class":70,"line":3230},[68,89157,57355],{"class":85},[68,89159,55983],{"class":587},[68,89161,997],{"class":85},[68,89163,83508],{"class":872},[68,89165,75827],{"class":85},[68,89167,869],{"class":102},[68,89169,13176],{"class":102},[68,89171,75367],{"class":587},[68,89173,18856],{"class":85},[68,89175,89176],{"class":587},"toLocaleString",[68,89178,3577],{"class":85},[68,89180,89181,89184,89187,89189],{"class":70,"line":3244},[68,89182,89183],{"class":587},"      setTimeout",[68,89185,89186],{"class":85},"(getTime, ",[68,89188,8009],{"class":92},[68,89190,1757],{"class":85},[68,89192,89193],{"class":70,"line":3249},[68,89194,3787],{"class":85},[68,89196,89197,89200],{"class":70,"line":3255},[68,89198,89199],{"class":587},"    getTime",[68,89201,3577],{"class":85},[68,89203,89204,89206,89208],{"class":70,"line":3276},[68,89205,54002],{"class":85},[68,89207,53398],{"class":81},[68,89209,876],{"class":85},[68,89211,89212,89214,89216],{"class":70,"line":3281},[68,89213,886],{"class":85},[68,89215,53385],{"class":81},[68,89217,876],{"class":85},[68,89219,89220],{"class":70,"line":3295},[68,89221,4000],{"emptyLinePlaceholder":1679},[68,89223,89224,89226,89228],{"class":70,"line":3300},[68,89225,886],{"class":85},[68,89227,52228],{"class":81},[68,89229,876],{"class":85},[19,89231,89232],{},[38,89233],{"alt":63,"src":89234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[48,89236,89237],{"start":115},[51,89238,88928],{},[19,89240,89241],{},[38,89242],{"alt":63,"src":89243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89245,89246],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89248,40782],{},[19,89250,89251],{},"这个是简易版的递归函数深拷贝",[19,89253,89254],{},"一定要注意先数组再对象，因为万物皆可对象",[58,89256,89258],{"className":52226,"code":89257,"language":52228,"meta":63,"style":63},"\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",[65,89259,89260,89270,89284,89288,89296,89310,89330,89342,89350,89354,89362,89370,89380,89389,89397,89413,89417,89425,89429,89433,89445,89450,89469,89485,89490,89495,89500,89515,89520,89525,89534,89542,89559,89567,89573,89581,89586,89591,89600,89604,89608,89612,89623,89632,89642,89656,89666,89674,89682,89690,89694],{"__ignoreMap":63},[68,89261,89262,89264,89266,89268],{"class":70,"line":71},[68,89263,52890],{"class":85},[68,89265,52893],{"class":81},[68,89267,52896],{"class":587},[68,89269,876],{"class":85},[68,89271,89272,89274,89276,89278,89280,89282],{"class":70,"line":78},[68,89273,861],{"class":85},[68,89275,52228],{"class":81},[68,89277,52907],{"class":587},[68,89279,869],{"class":85},[68,89281,52912],{"class":872},[68,89283,876],{"class":85},[68,89285,89286],{"class":70,"line":89},[68,89287,4000],{"emptyLinePlaceholder":1679},[68,89289,89290,89292,89294],{"class":70,"line":115},[68,89291,861],{"class":85},[68,89293,52925],{"class":81},[68,89295,876],{"class":85},[68,89297,89298,89300,89302,89304,89306,89308],{"class":70,"line":280},[68,89299,53729],{"class":85},[68,89301,52935],{"class":81},[68,89303,52938],{"class":587},[68,89305,869],{"class":85},[68,89307,52943],{"class":872},[68,89309,876],{"class":85},[68,89311,89312,89314,89316,89318,89320,89322,89324,89326,89328],{"class":70,"line":301},[68,89313,53729],{"class":85},[68,89315,52935],{"class":81},[68,89317,16516],{"class":587},[68,89319,869],{"class":85},[68,89321,52982],{"class":872},[68,89323,52962],{"class":587},[68,89325,869],{"class":85},[68,89327,52989],{"class":872},[68,89329,876],{"class":85},[68,89331,89332,89334,89336,89338,89340],{"class":70,"line":320},[68,89333,53729],{"class":85},[68,89335,52998],{"class":81},[68,89337,53001],{"class":85},[68,89339,52998],{"class":81},[68,89341,876],{"class":85},[68,89343,89344,89346,89348],{"class":70,"line":2915},[68,89345,886],{"class":85},[68,89347,52925],{"class":81},[68,89349,876],{"class":85},[68,89351,89352],{"class":70,"line":2921},[68,89353,4000],{"emptyLinePlaceholder":1679},[68,89355,89356,89358,89360],{"class":70,"line":2933},[68,89357,861],{"class":85},[68,89359,53385],{"class":81},[68,89361,876],{"class":85},[68,89363,89364,89366,89368],{"class":70,"line":3214},[68,89365,53729],{"class":85},[68,89367,53398],{"class":81},[68,89369,876],{"class":85},[68,89371,89372,89374,89376,89378],{"class":70,"line":3219},[68,89373,12819],{"class":102},[68,89375,71553],{"class":92},[68,89377,15161],{"class":102},[68,89379,86],{"class":85},[68,89381,89382,89384,89387],{"class":70,"line":3225},[68,89383,73195],{"class":85},[68,89385,89386],{"class":872},"'pink'",[68,89388,33059],{"class":85},[68,89390,89391,89393,89395],{"class":70,"line":3230},[68,89392,73205],{"class":85},[68,89394,2386],{"class":92},[68,89396,33059],{"class":85},[68,89398,89399,89402,89405,89407,89410],{"class":70,"line":3244},[68,89400,89401],{"class":85},"      hobby: [",[68,89403,89404],{"class":872},"'乒乓球'",[68,89406,1002],{"class":85},[68,89408,89409],{"class":872},"'足球'",[68,89411,89412],{"class":85},"],\n",[68,89414,89415],{"class":70,"line":3249},[68,89416,79450],{"class":85},[68,89418,89419,89422],{"class":70,"line":3255},[68,89420,89421],{"class":85},"        baby: ",[68,89423,89424],{"class":872},"'小pink'\n",[68,89426,89427],{"class":70,"line":3276},[68,89428,53983],{"class":85},[68,89430,89431],{"class":70,"line":3281},[68,89432,3787],{"class":85},[68,89434,89435,89437,89440,89442],{"class":70,"line":3295},[68,89436,12819],{"class":102},[68,89438,89439],{"class":92}," o",[68,89441,15161],{"class":102},[68,89443,89444],{"class":85}," {}\n",[68,89446,89447],{"class":70,"line":3300},[68,89448,89449],{"class":74},"    \u002F\u002F 拷贝函数\n",[68,89451,89452,89454,89457,89459,89462,89464,89467],{"class":70,"line":3329},[68,89453,71666],{"class":102},[68,89455,89456],{"class":587}," deepCopy",[68,89458,997],{"class":85},[68,89460,89461],{"class":6815},"newObj",[68,89463,1002],{"class":85},[68,89465,89466],{"class":6815},"oldObj",[68,89468,14039],{"class":85},[68,89470,89471,89473,89475,89477,89480,89482],{"class":70,"line":3334},[68,89472,53869],{"class":102},[68,89474,3260],{"class":85},[68,89476,53432],{"class":102},[68,89478,89479],{"class":85}," k ",[68,89481,27637],{"class":102},[68,89483,89484],{"class":85}," oldObj) {\n",[68,89486,89487],{"class":70,"line":3351},[68,89488,89489],{"class":74},"        \u002F\u002F 处理数组的问题\n",[68,89491,89492],{"class":70,"line":3356},[68,89493,89494],{"class":74},"        \u002F\u002F 判断是否属于数组\n",[68,89496,89497],{"class":70,"line":3361},[68,89498,89499],{"class":74},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[68,89501,89502,89504,89507,89510,89513],{"class":70,"line":3366},[68,89503,4097],{"class":102},[68,89505,89506],{"class":85}," (oldObj[k] ",[68,89508,89509],{"class":102},"instanceof",[68,89511,89512],{"class":587}," Array",[68,89514,14039],{"class":85},[68,89516,89517],{"class":70,"line":3380},[68,89518,89519],{"class":74},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[68,89521,89522],{"class":70,"line":3385},[68,89523,89524],{"class":74},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[68,89526,89527,89530,89532],{"class":70,"line":4177},[68,89528,89529],{"class":85},"          newObj[k] ",[68,89531,869],{"class":102},[68,89533,53423],{"class":85},[68,89535,89536,89539],{"class":70,"line":4191},[68,89537,89538],{"class":587},"          deepCopy",[68,89540,89541],{"class":85},"(newObj[k], oldObj[k])\n",[68,89543,89544,89546,89548,89550,89552,89554,89557],{"class":70,"line":4199},[68,89545,81657],{"class":85},[68,89547,3303],{"class":102},[68,89549,3306],{"class":102},[68,89551,89506],{"class":85},[68,89553,89509],{"class":102},[68,89555,89556],{"class":587}," Object",[68,89558,14039],{"class":85},[68,89560,89561,89563,89565],{"class":70,"line":4204},[68,89562,89529],{"class":85},[68,89564,869],{"class":102},[68,89566,89444],{"class":85},[68,89568,89569,89571],{"class":70,"line":4210},[68,89570,89538],{"class":587},[68,89572,89541],{"class":85},[68,89574,89575,89577,89579],{"class":70,"line":4216},[68,89576,81657],{"class":85},[68,89578,3303],{"class":102},[68,89580,86],{"class":85},[68,89582,89583],{"class":70,"line":4221},[68,89584,89585],{"class":74},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[68,89587,89588],{"class":70,"line":9547},[68,89589,89590],{"class":74},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[68,89592,89593,89595,89597],{"class":70,"line":9571},[68,89594,89529],{"class":85},[68,89596,869],{"class":102},[68,89598,89599],{"class":85}," oldObj[k]\n",[68,89601,89602],{"class":70,"line":9576},[68,89603,4129],{"class":85},[68,89605,89606],{"class":70,"line":9582},[68,89607,53983],{"class":85},[68,89609,89610],{"class":70,"line":9609},[68,89611,3787],{"class":85},[68,89613,89614,89617,89620],{"class":70,"line":9614},[68,89615,89616],{"class":587},"    deepCopy",[68,89618,89619],{"class":85},"(o, obj) ",[68,89621,89622],{"class":74},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[68,89624,89625,89627,89629],{"class":70,"line":9620},[68,89626,75331],{"class":85},[68,89628,59831],{"class":587},[68,89630,89631],{"class":85},"(o)\n",[68,89633,89634,89637,89639],{"class":70,"line":9632},[68,89635,89636],{"class":85},"    o.age ",[68,89638,869],{"class":102},[68,89640,89641],{"class":92}," 20\n",[68,89643,89644,89647,89649,89651,89653],{"class":70,"line":9644},[68,89645,89646],{"class":85},"    o.hobby[",[68,89648,600],{"class":92},[68,89650,6042],{"class":85},[68,89652,869],{"class":102},[68,89654,89655],{"class":872}," '篮球'\n",[68,89657,89658,89661,89663],{"class":70,"line":9656},[68,89659,89660],{"class":85},"    o.family ",[68,89662,869],{"class":102},[68,89664,89665],{"class":872}," '老pink'\n",[68,89667,89668,89670,89672],{"class":70,"line":11314},[68,89669,75331],{"class":85},[68,89671,59831],{"class":587},[68,89673,71618],{"class":85},[68,89675,89676,89678,89680],{"class":70,"line":11339},[68,89677,54002],{"class":85},[68,89679,53398],{"class":81},[68,89681,876],{"class":85},[68,89683,89684,89686,89688],{"class":70,"line":11362},[68,89685,886],{"class":85},[68,89687,53385],{"class":81},[68,89689,876],{"class":85},[68,89691,89692],{"class":70,"line":11386},[68,89693,4000],{"emptyLinePlaceholder":1679},[68,89695,89696,89698,89700],{"class":70,"line":11391},[68,89697,886],{"class":85},[68,89699,52228],{"class":81},[68,89701,876],{"class":85},[19,89703,89704],{},[38,89705],{"alt":63,"src":89706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23593,89708,89710,89711],{"id":89709},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1890,89712,89713],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89715,89716],{},[1974,89717,89718],{"href":89718,"rel":89719},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25459],[19,89721,89722],{},"lodash里边的方法都要加上一个下划线_",[19,89724,89725],{},"_.cloneDeep()",[58,89727,89729],{"className":52226,"code":89728,"language":52228,"meta":63,"style":63},"\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",[65,89730,89731,89741,89755,89759,89767,89781,89801,89813,89821,89825,89833,89838,89857,89865,89875,89883,89891,89903,89907,89913,89917,89921,89937,89945,89954,89962,89970,89978,89982],{"__ignoreMap":63},[68,89732,89733,89735,89737,89739],{"class":70,"line":71},[68,89734,52890],{"class":85},[68,89736,52893],{"class":81},[68,89738,52896],{"class":587},[68,89740,876],{"class":85},[68,89742,89743,89745,89747,89749,89751,89753],{"class":70,"line":78},[68,89744,861],{"class":85},[68,89746,52228],{"class":81},[68,89748,52907],{"class":587},[68,89750,869],{"class":85},[68,89752,52912],{"class":872},[68,89754,876],{"class":85},[68,89756,89757],{"class":70,"line":89},[68,89758,4000],{"emptyLinePlaceholder":1679},[68,89760,89761,89763,89765],{"class":70,"line":115},[68,89762,861],{"class":85},[68,89764,52925],{"class":81},[68,89766,876],{"class":85},[68,89768,89769,89771,89773,89775,89777,89779],{"class":70,"line":280},[68,89770,53729],{"class":85},[68,89772,52935],{"class":81},[68,89774,52938],{"class":587},[68,89776,869],{"class":85},[68,89778,52943],{"class":872},[68,89780,876],{"class":85},[68,89782,89783,89785,89787,89789,89791,89793,89795,89797,89799],{"class":70,"line":301},[68,89784,53729],{"class":85},[68,89786,52935],{"class":81},[68,89788,16516],{"class":587},[68,89790,869],{"class":85},[68,89792,52982],{"class":872},[68,89794,52962],{"class":587},[68,89796,869],{"class":85},[68,89798,52989],{"class":872},[68,89800,876],{"class":85},[68,89802,89803,89805,89807,89809,89811],{"class":70,"line":320},[68,89804,53729],{"class":85},[68,89806,52998],{"class":81},[68,89808,53001],{"class":85},[68,89810,52998],{"class":81},[68,89812,876],{"class":85},[68,89814,89815,89817,89819],{"class":70,"line":2915},[68,89816,886],{"class":85},[68,89818,52925],{"class":81},[68,89820,876],{"class":85},[68,89822,89823],{"class":70,"line":2921},[68,89824,4000],{"emptyLinePlaceholder":1679},[68,89826,89827,89829,89831],{"class":70,"line":2933},[68,89828,861],{"class":85},[68,89830,53385],{"class":81},[68,89832,876],{"class":85},[68,89834,89835],{"class":70,"line":3214},[68,89836,89837],{"class":74},"  \u003C!-- 先引用这个库 -->\n",[68,89839,89840,89842,89844,89846,89848,89851,89853,89855],{"class":70,"line":3219},[68,89841,53729],{"class":85},[68,89843,53398],{"class":81},[68,89845,56823],{"class":587},[68,89847,869],{"class":85},[68,89849,89850],{"class":872},"\"lodash.min.js\"",[68,89852,56898],{"class":85},[68,89854,53398],{"class":81},[68,89856,876],{"class":85},[68,89858,89859,89861,89863],{"class":70,"line":3225},[68,89860,53729],{"class":85},[68,89862,53398],{"class":81},[68,89864,876],{"class":85},[68,89866,89867,89869,89871,89873],{"class":70,"line":3230},[68,89868,12819],{"class":102},[68,89870,71553],{"class":92},[68,89872,15161],{"class":102},[68,89874,86],{"class":85},[68,89876,89877,89879,89881],{"class":70,"line":3244},[68,89878,73195],{"class":85},[68,89880,89386],{"class":872},[68,89882,33059],{"class":85},[68,89884,89885,89887,89889],{"class":70,"line":3249},[68,89886,73205],{"class":85},[68,89888,2386],{"class":92},[68,89890,33059],{"class":85},[68,89892,89893,89895,89897,89899,89901],{"class":70,"line":3255},[68,89894,89401],{"class":85},[68,89896,89404],{"class":872},[68,89898,1002],{"class":85},[68,89900,89409],{"class":872},[68,89902,89412],{"class":85},[68,89904,89905],{"class":70,"line":3276},[68,89906,79450],{"class":85},[68,89908,89909,89911],{"class":70,"line":3281},[68,89910,89421],{"class":85},[68,89912,89424],{"class":872},[68,89914,89915],{"class":70,"line":3295},[68,89916,53983],{"class":85},[68,89918,89919],{"class":70,"line":3300},[68,89920,3787],{"class":85},[68,89922,89923,89925,89927,89929,89932,89935],{"class":70,"line":3329},[68,89924,12819],{"class":102},[68,89926,89439],{"class":92},[68,89928,15161],{"class":102},[68,89930,89931],{"class":85}," _.",[68,89933,89934],{"class":587},"cloneDeep",[68,89936,71618],{"class":85},[68,89938,89939,89941,89943],{"class":70,"line":3334},[68,89940,75331],{"class":85},[68,89942,59831],{"class":587},[68,89944,89631],{"class":85},[68,89946,89947,89950,89952],{"class":70,"line":3351},[68,89948,89949],{"class":85},"    o.family.baby ",[68,89951,869],{"class":102},[68,89953,89665],{"class":872},[68,89955,89956,89958,89960],{"class":70,"line":3356},[68,89957,75331],{"class":85},[68,89959,59831],{"class":587},[68,89961,71618],{"class":85},[68,89963,89964,89966,89968],{"class":70,"line":3361},[68,89965,54002],{"class":85},[68,89967,53398],{"class":81},[68,89969,876],{"class":85},[68,89971,89972,89974,89976],{"class":70,"line":3366},[68,89973,886],{"class":85},[68,89975,53385],{"class":81},[68,89977,876],{"class":85},[68,89979,89980],{"class":70,"line":3380},[68,89981,4000],{"emptyLinePlaceholder":1679},[68,89983,89984,89986,89988],{"class":70,"line":3385},[68,89985,886],{"class":85},[68,89987,52228],{"class":81},[68,89989,876],{"class":85},[19,89991,89992],{},[38,89993],{"alt":63,"src":89994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23593,89996,89998],{"id":89997},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[58,90000,90002],{"className":52226,"code":90001,"language":52228,"meta":63,"style":63},"\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",[65,90003,90004,90014,90028,90032,90040,90054,90074,90086,90094,90098,90106,90114,90124,90132,90140,90152,90156,90162,90166,90170,90175,90180,90185,90211,90219,90228,90236,90244,90252,90256],{"__ignoreMap":63},[68,90005,90006,90008,90010,90012],{"class":70,"line":71},[68,90007,52890],{"class":85},[68,90009,52893],{"class":81},[68,90011,52896],{"class":587},[68,90013,876],{"class":85},[68,90015,90016,90018,90020,90022,90024,90026],{"class":70,"line":78},[68,90017,861],{"class":85},[68,90019,52228],{"class":81},[68,90021,52907],{"class":587},[68,90023,869],{"class":85},[68,90025,52912],{"class":872},[68,90027,876],{"class":85},[68,90029,90030],{"class":70,"line":89},[68,90031,4000],{"emptyLinePlaceholder":1679},[68,90033,90034,90036,90038],{"class":70,"line":115},[68,90035,861],{"class":85},[68,90037,52925],{"class":81},[68,90039,876],{"class":85},[68,90041,90042,90044,90046,90048,90050,90052],{"class":70,"line":280},[68,90043,53729],{"class":85},[68,90045,52935],{"class":81},[68,90047,52938],{"class":587},[68,90049,869],{"class":85},[68,90051,52943],{"class":872},[68,90053,876],{"class":85},[68,90055,90056,90058,90060,90062,90064,90066,90068,90070,90072],{"class":70,"line":301},[68,90057,53729],{"class":85},[68,90059,52935],{"class":81},[68,90061,16516],{"class":587},[68,90063,869],{"class":85},[68,90065,52982],{"class":872},[68,90067,52962],{"class":587},[68,90069,869],{"class":85},[68,90071,52989],{"class":872},[68,90073,876],{"class":85},[68,90075,90076,90078,90080,90082,90084],{"class":70,"line":320},[68,90077,53729],{"class":85},[68,90079,52998],{"class":81},[68,90081,53001],{"class":85},[68,90083,52998],{"class":81},[68,90085,876],{"class":85},[68,90087,90088,90090,90092],{"class":70,"line":2915},[68,90089,886],{"class":85},[68,90091,52925],{"class":81},[68,90093,876],{"class":85},[68,90095,90096],{"class":70,"line":2921},[68,90097,4000],{"emptyLinePlaceholder":1679},[68,90099,90100,90102,90104],{"class":70,"line":2933},[68,90101,861],{"class":85},[68,90103,53385],{"class":81},[68,90105,876],{"class":85},[68,90107,90108,90110,90112],{"class":70,"line":3214},[68,90109,53729],{"class":85},[68,90111,53398],{"class":81},[68,90113,876],{"class":85},[68,90115,90116,90118,90120,90122],{"class":70,"line":3219},[68,90117,12819],{"class":102},[68,90119,71553],{"class":92},[68,90121,15161],{"class":102},[68,90123,86],{"class":85},[68,90125,90126,90128,90130],{"class":70,"line":3225},[68,90127,73195],{"class":85},[68,90129,89386],{"class":872},[68,90131,33059],{"class":85},[68,90133,90134,90136,90138],{"class":70,"line":3230},[68,90135,73205],{"class":85},[68,90137,2386],{"class":92},[68,90139,33059],{"class":85},[68,90141,90142,90144,90146,90148,90150],{"class":70,"line":3244},[68,90143,89401],{"class":85},[68,90145,89404],{"class":872},[68,90147,1002],{"class":85},[68,90149,89409],{"class":872},[68,90151,89412],{"class":85},[68,90153,90154],{"class":70,"line":3249},[68,90155,79450],{"class":85},[68,90157,90158,90160],{"class":70,"line":3255},[68,90159,89421],{"class":85},[68,90161,89424],{"class":872},[68,90163,90164],{"class":70,"line":3276},[68,90165,53983],{"class":85},[68,90167,90168],{"class":70,"line":3281},[68,90169,3787],{"class":85},[68,90171,90172],{"class":70,"line":3295},[68,90173,90174],{"class":74},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[68,90176,90177],{"class":70,"line":3300},[68,90178,90179],{"class":74},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[68,90181,90182],{"class":70,"line":3329},[68,90183,90184],{"class":74},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[68,90186,90187,90189,90191,90193,90196,90198,90201,90203,90205,90207,90209],{"class":70,"line":3334},[68,90188,12819],{"class":102},[68,90190,89439],{"class":92},[68,90192,15161],{"class":102},[68,90194,90195],{"class":92}," JSON",[68,90197,2294],{"class":85},[68,90199,90200],{"class":587},"parse",[68,90202,997],{"class":85},[68,90204,73243],{"class":92},[68,90206,2294],{"class":85},[68,90208,73248],{"class":587},[68,90210,73251],{"class":85},[68,90212,90213,90215,90217],{"class":70,"line":3351},[68,90214,75331],{"class":85},[68,90216,59831],{"class":587},[68,90218,89631],{"class":85},[68,90220,90221,90223,90225],{"class":70,"line":3356},[68,90222,89949],{"class":85},[68,90224,869],{"class":102},[68,90226,90227],{"class":872}," '123'\n",[68,90229,90230,90232,90234],{"class":70,"line":3361},[68,90231,75331],{"class":85},[68,90233,59831],{"class":587},[68,90235,71618],{"class":85},[68,90237,90238,90240,90242],{"class":70,"line":3366},[68,90239,54002],{"class":85},[68,90241,53398],{"class":81},[68,90243,876],{"class":85},[68,90245,90246,90248,90250],{"class":70,"line":3380},[68,90247,886],{"class":85},[68,90249,53385],{"class":81},[68,90251,876],{"class":85},[68,90253,90254],{"class":70,"line":3385},[68,90255,4000],{"emptyLinePlaceholder":1679},[68,90257,90258,90260,90262],{"class":70,"line":4177},[68,90259,886],{"class":85},[68,90261,52228],{"class":81},[68,90263,876],{"class":85},[19,90265,90266],{},[38,90267],{"alt":63,"src":90268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90270,90272],{"id":90271},"_415-异常处理","4.15 异常处理",[48,90274,90275],{},[51,90276,90277],{},"throw抛异常",[19,90279,90280],{},[38,90281],{"alt":63,"src":90282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[48,90284,90285],{"start":78},[51,90286,90287],{},"try\u002Fcatch 捕获错误信息",[19,90289,90290],{},[38,90291],{"alt":63,"src":90292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[58,90294,90296],{"className":52226,"code":90295,"language":52228,"meta":63,"style":63},"\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",[65,90297,90298,90308,90322,90326,90334,90348,90368,90380,90388,90392,90400,90412,90420,90429,90436,90441,90460,90469,90480,90485,90495,90500,90505,90510,90527,90531,90536,90543,90555,90559,90571,90575,90579,90584,90589,90596,90604,90612,90616],{"__ignoreMap":63},[68,90299,90300,90302,90304,90306],{"class":70,"line":71},[68,90301,52890],{"class":85},[68,90303,52893],{"class":81},[68,90305,52896],{"class":587},[68,90307,876],{"class":85},[68,90309,90310,90312,90314,90316,90318,90320],{"class":70,"line":78},[68,90311,861],{"class":85},[68,90313,52228],{"class":81},[68,90315,52907],{"class":587},[68,90317,869],{"class":85},[68,90319,52912],{"class":872},[68,90321,876],{"class":85},[68,90323,90324],{"class":70,"line":89},[68,90325,4000],{"emptyLinePlaceholder":1679},[68,90327,90328,90330,90332],{"class":70,"line":115},[68,90329,861],{"class":85},[68,90331,52925],{"class":81},[68,90333,876],{"class":85},[68,90335,90336,90338,90340,90342,90344,90346],{"class":70,"line":280},[68,90337,53729],{"class":85},[68,90339,52935],{"class":81},[68,90341,52938],{"class":587},[68,90343,869],{"class":85},[68,90345,52943],{"class":872},[68,90347,876],{"class":85},[68,90349,90350,90352,90354,90356,90358,90360,90362,90364,90366],{"class":70,"line":301},[68,90351,53729],{"class":85},[68,90353,52935],{"class":81},[68,90355,16516],{"class":587},[68,90357,869],{"class":85},[68,90359,52982],{"class":872},[68,90361,52962],{"class":587},[68,90363,869],{"class":85},[68,90365,52989],{"class":872},[68,90367,876],{"class":85},[68,90369,90370,90372,90374,90376,90378],{"class":70,"line":320},[68,90371,53729],{"class":85},[68,90373,52998],{"class":81},[68,90375,53001],{"class":85},[68,90377,52998],{"class":81},[68,90379,876],{"class":85},[68,90381,90382,90384,90386],{"class":70,"line":2915},[68,90383,886],{"class":85},[68,90385,52925],{"class":81},[68,90387,876],{"class":85},[68,90389,90390],{"class":70,"line":2921},[68,90391,4000],{"emptyLinePlaceholder":1679},[68,90393,90394,90396,90398],{"class":70,"line":2933},[68,90395,861],{"class":85},[68,90397,53385],{"class":81},[68,90399,876],{"class":85},[68,90401,90402,90404,90406,90408,90410],{"class":70,"line":3214},[68,90403,53729],{"class":85},[68,90405,19],{"class":81},[68,90407,55078],{"class":85},[68,90409,19],{"class":81},[68,90411,876],{"class":85},[68,90413,90414,90416,90418],{"class":70,"line":3219},[68,90415,53729],{"class":85},[68,90417,53398],{"class":81},[68,90419,876],{"class":85},[68,90421,90422,90424,90427],{"class":70,"line":3225},[68,90423,71666],{"class":102},[68,90425,90426],{"class":587}," fn",[68,90428,12451],{"class":85},[68,90430,90431,90434],{"class":70,"line":3230},[68,90432,90433],{"class":102},"      try",[68,90435,86],{"class":85},[68,90437,90438],{"class":70,"line":3244},[68,90439,90440],{"class":74},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[68,90442,90443,90445,90447,90449,90451,90453,90455,90458],{"class":70,"line":3249},[68,90444,62854],{"class":102},[68,90446,8424],{"class":92},[68,90448,15161],{"class":102},[68,90450,55980],{"class":85},[68,90452,55983],{"class":587},[68,90454,997],{"class":85},[68,90456,90457],{"class":872},"'.p'",[68,90459,1757],{"class":85},[68,90461,90462,90465,90467],{"class":70,"line":3255},[68,90463,90464],{"class":85},"        p.style.color ",[68,90466,869],{"class":102},[68,90468,68633],{"class":872},[68,90470,90471,90474,90477],{"class":70,"line":3276},[68,90472,90473],{"class":85},"      } ",[68,90475,90476],{"class":102},"catch",[68,90478,90479],{"class":85}," (err) {\n",[68,90481,90482],{"class":70,"line":3281},[68,90483,90484],{"class":74},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[68,90486,90487,90490,90492],{"class":70,"line":3295},[68,90488,90489],{"class":85},"        console.",[68,90491,59831],{"class":587},[68,90493,90494],{"class":85},"(err.message)\n",[68,90496,90497],{"class":70,"line":3300},[68,90498,90499],{"class":74},"        \u002F\u002F 想要中断程序，需要加return\n",[68,90501,90502],{"class":70,"line":3329},[68,90503,90504],{"class":74},"        \u002F\u002F return\n",[68,90506,90507],{"class":70,"line":3334},[68,90508,90509],{"class":74},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[68,90511,90512,90515,90517,90520,90522,90525],{"class":70,"line":3351},[68,90513,90514],{"class":102},"        throw",[68,90516,13176],{"class":102},[68,90518,90519],{"class":587}," Error",[68,90521,997],{"class":85},[68,90523,90524],{"class":872},"'你看看，选择器错误了吧'",[68,90526,1757],{"class":85},[68,90528,90529],{"class":70,"line":3356},[68,90530,53983],{"class":85},[68,90532,90533],{"class":70,"line":3361},[68,90534,90535],{"class":74},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[68,90537,90538,90541],{"class":70,"line":3366},[68,90539,90540],{"class":102},"      finally",[68,90542,86],{"class":85},[68,90544,90545,90548,90550,90553],{"class":70,"line":3380},[68,90546,90547],{"class":587},"        alert",[68,90549,997],{"class":85},[68,90551,90552],{"class":872},"'弹出对话框'",[68,90554,1757],{"class":85},[68,90556,90557],{"class":70,"line":3385},[68,90558,53983],{"class":85},[68,90560,90561,90563,90565,90567,90569],{"class":70,"line":4177},[68,90562,59828],{"class":85},[68,90564,59831],{"class":587},[68,90566,997],{"class":85},[68,90568,2208],{"class":92},[68,90570,1757],{"class":85},[68,90572,90573],{"class":70,"line":4191},[68,90574,4000],{"emptyLinePlaceholder":1679},[68,90576,90577],{"class":70,"line":4199},[68,90578,3787],{"class":85},[68,90580,90581],{"class":70,"line":4204},[68,90582,90583],{"class":74},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[68,90585,90586],{"class":70,"line":4210},[68,90587,90588],{"class":74},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[68,90590,90591,90594],{"class":70,"line":4216},[68,90592,90593],{"class":587},"    fn",[68,90595,3577],{"class":85},[68,90597,90598,90600,90602],{"class":70,"line":4221},[68,90599,54002],{"class":85},[68,90601,53398],{"class":81},[68,90603,876],{"class":85},[68,90605,90606,90608,90610],{"class":70,"line":9547},[68,90607,886],{"class":85},[68,90609,53385],{"class":81},[68,90611,876],{"class":85},[68,90613,90614],{"class":70,"line":9571},[68,90615,4000],{"emptyLinePlaceholder":1679},[68,90617,90618,90620,90622],{"class":70,"line":9576},[68,90619,886],{"class":85},[68,90621,52228],{"class":81},[68,90623,876],{"class":85},[19,90625,90626],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[48,90628,90629],{"start":89},[51,90630,90631],{},"debugger",[19,90633,90634],{},[38,90635],{"alt":63,"src":90636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90638,90639],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90641,90643],{"id":90642},"_416-处理this","4.16 处理this",[43,90645,90647],{"id":90646},"_4161-this的指向","4.16.1 this的指向",[48,90649,90650],{},[51,90651,90652],{},"普通函数的this",[19,90654,90655],{},[38,90656],{"alt":63,"src":90657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[48,90659,90660],{"start":78},[51,90661,90662],{},"箭头函数的this",[19,90664,90665],{},[38,90666],{"alt":63,"src":90667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90669,90670],{},[38,90671],{"alt":63,"src":90672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90674,90675],{},[38,90676],{"alt":63,"src":90677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[43,90679,90681],{"id":90680},"_4162-this的改变","4.16.2 this的改变",[19,90683,90684],{},"call() apply() bind()",[48,90686,90687],{},[51,90688,90689],{},"call()",[19,90691,90692],{},[38,90693],{"alt":63,"src":90694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90696,90697],{},"两个作用：①调用函数；②改变this指向",[58,90699,90701],{"className":54652,"code":90700,"language":54654,"meta":63,"style":63},"\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",[65,90702,90703,90711,90719,90723,90728,90732,90737,90742,90747,90751,90756,90764],{"__ignoreMap":63},[68,90704,90705,90707,90709],{"class":70,"line":71},[68,90706,861],{"class":85},[68,90708,53385],{"class":81},[68,90710,876],{"class":85},[68,90712,90713,90715,90717],{"class":70,"line":78},[68,90714,53729],{"class":85},[68,90716,53398],{"class":81},[68,90718,876],{"class":85},[68,90720,90721],{"class":70,"line":89},[68,90722,73102],{"class":85},[68,90724,90725],{"class":70,"line":115},[68,90726,90727],{"class":85},"      uname: 'pink'\n",[68,90729,90730],{"class":70,"line":280},[68,90731,3787],{"class":85},[68,90733,90734],{"class":70,"line":301},[68,90735,90736],{"class":85},"    function fn(x, y) {\n",[68,90738,90739],{"class":70,"line":320},[68,90740,90741],{"class":85},"      console.log(this)  \u002F\u002Fwindow\n",[68,90743,90744],{"class":70,"line":2915},[68,90745,90746],{"class":85},"      console.log(x + y)\n",[68,90748,90749],{"class":70,"line":2921},[68,90750,3787],{"class":85},[68,90752,90753],{"class":70,"line":2933},[68,90754,90755],{"class":85},"    fn.call(obj, 1, 2)\n",[68,90757,90758,90760,90762],{"class":70,"line":3214},[68,90759,54002],{"class":85},[68,90761,53398],{"class":81},[68,90763,876],{"class":85},[68,90765,90766,90768,90770],{"class":70,"line":3219},[68,90767,886],{"class":85},[68,90769,53385],{"class":81},[68,90771,876],{"class":85},[19,90773,90774],{},[38,90775],{"alt":63,"src":90776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[48,90778,90779],{"start":78},[51,90780,90781],{},"apply()",[19,90783,90784],{},[38,90785],{"alt":63,"src":90786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90788,90697],{},[19,90790,90791],{},"call传递的是普通参数，而apply必须传递的是数组",[58,90793,90795],{"className":52226,"code":90794,"language":52228,"meta":63,"style":63},"\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",[65,90796,90797,90807,90821,90825,90833,90847,90867,90879,90887,90891,90899,90907,90917,90924,90928,90933,90949,90961,90975,90979,90984,91003,91008,91012,91017,91022,91030,91035,91057,91062,91078,91094,91106,91110,91115,91134,91142,91150,91154],{"__ignoreMap":63},[68,90798,90799,90801,90803,90805],{"class":70,"line":71},[68,90800,52890],{"class":85},[68,90802,52893],{"class":81},[68,90804,52896],{"class":587},[68,90806,876],{"class":85},[68,90808,90809,90811,90813,90815,90817,90819],{"class":70,"line":78},[68,90810,861],{"class":85},[68,90812,52228],{"class":81},[68,90814,52907],{"class":587},[68,90816,869],{"class":85},[68,90818,52912],{"class":872},[68,90820,876],{"class":85},[68,90822,90823],{"class":70,"line":89},[68,90824,4000],{"emptyLinePlaceholder":1679},[68,90826,90827,90829,90831],{"class":70,"line":115},[68,90828,861],{"class":85},[68,90830,52925],{"class":81},[68,90832,876],{"class":85},[68,90834,90835,90837,90839,90841,90843,90845],{"class":70,"line":280},[68,90836,53729],{"class":85},[68,90838,52935],{"class":81},[68,90840,52938],{"class":587},[68,90842,869],{"class":85},[68,90844,52943],{"class":872},[68,90846,876],{"class":85},[68,90848,90849,90851,90853,90855,90857,90859,90861,90863,90865],{"class":70,"line":301},[68,90850,53729],{"class":85},[68,90852,52935],{"class":81},[68,90854,16516],{"class":587},[68,90856,869],{"class":85},[68,90858,52982],{"class":872},[68,90860,52962],{"class":587},[68,90862,869],{"class":85},[68,90864,52989],{"class":872},[68,90866,876],{"class":85},[68,90868,90869,90871,90873,90875,90877],{"class":70,"line":320},[68,90870,53729],{"class":85},[68,90872,52998],{"class":81},[68,90874,53001],{"class":85},[68,90876,52998],{"class":81},[68,90878,876],{"class":85},[68,90880,90881,90883,90885],{"class":70,"line":2915},[68,90882,886],{"class":85},[68,90884,52925],{"class":81},[68,90886,876],{"class":85},[68,90888,90889],{"class":70,"line":2921},[68,90890,4000],{"emptyLinePlaceholder":1679},[68,90892,90893,90895,90897],{"class":70,"line":2933},[68,90894,861],{"class":85},[68,90896,53385],{"class":81},[68,90898,876],{"class":85},[68,90900,90901,90903,90905],{"class":70,"line":3214},[68,90902,53729],{"class":85},[68,90904,53398],{"class":81},[68,90906,876],{"class":85},[68,90908,90909,90911,90913,90915],{"class":70,"line":3219},[68,90910,12819],{"class":102},[68,90912,71553],{"class":92},[68,90914,15161],{"class":102},[68,90916,86],{"class":85},[68,90918,90919,90921],{"class":70,"line":3225},[68,90920,73205],{"class":85},[68,90922,90923],{"class":92},"18\n",[68,90925,90926],{"class":70,"line":3230},[68,90927,3787],{"class":85},[68,90929,90930],{"class":70,"line":3244},[68,90931,90932],{"class":74},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[68,90934,90935,90937,90939,90941,90943,90945,90947],{"class":70,"line":3249},[68,90936,71666],{"class":102},[68,90938,90426],{"class":587},[68,90940,997],{"class":85},[68,90942,2556],{"class":6815},[68,90944,1002],{"class":85},[68,90946,2581],{"class":6815},[68,90948,14039],{"class":85},[68,90950,90951,90953,90955,90957,90959],{"class":70,"line":3255},[68,90952,59828],{"class":85},[68,90954,59831],{"class":587},[68,90956,997],{"class":85},[68,90958,88569],{"class":92},[68,90960,1757],{"class":85},[68,90962,90963,90965,90967,90970,90972],{"class":70,"line":3276},[68,90964,59828],{"class":85},[68,90966,59831],{"class":587},[68,90968,90969],{"class":85},"(x ",[68,90971,2217],{"class":102},[68,90973,90974],{"class":85}," y)\n",[68,90976,90977],{"class":70,"line":3281},[68,90978,3787],{"class":85},[68,90980,90981],{"class":70,"line":3295},[68,90982,90983],{"class":74},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[68,90985,90986,90989,90992,90995,90997,90999,91001],{"class":70,"line":3300},[68,90987,90988],{"class":85},"    fn.",[68,90990,90991],{"class":587},"apply",[68,90993,90994],{"class":85},"(obj, [",[68,90996,99],{"class":92},[68,90998,1002],{"class":85},[68,91000,267],{"class":92},[68,91002,6256],{"class":85},[68,91004,91005],{"class":70,"line":3329},[68,91006,91007],{"class":74},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[68,91009,91010],{"class":70,"line":3334},[68,91011,4000],{"emptyLinePlaceholder":1679},[68,91013,91014],{"class":70,"line":3351},[68,91015,91016],{"class":74},"    \u002F\u002F 使用场景：求数组最大值\n",[68,91018,91019],{"class":70,"line":3356},[68,91020,91021],{"class":74},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[68,91023,91024,91027],{"class":70,"line":3361},[68,91025,91026],{"class":74},"    \u002F\u002F console.log(max)",[68,91028,91029],{"class":74},"   \u002F\u002F3\n",[68,91031,91032],{"class":70,"line":3366},[68,91033,91034],{"class":74},"    \u002F\u002F 指向空或者Math都是可以的\n",[68,91036,91037,91039,91041,91043,91045,91047,91049,91051,91053,91055],{"class":70,"line":3380},[68,91038,12819],{"class":102},[68,91040,59279],{"class":92},[68,91042,15161],{"class":102},[68,91044,53811],{"class":85},[68,91046,2047],{"class":92},[68,91048,1002],{"class":85},[68,91050,2240],{"class":92},[68,91052,1002],{"class":85},[68,91054,2271],{"class":92},[68,91056,34839],{"class":85},[68,91058,91059],{"class":70,"line":3385},[68,91060,91061],{"class":74},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[68,91063,91064,91066,91068,91070,91073,91075],{"class":70,"line":4177},[68,91065,12819],{"class":102},[68,91067,7550],{"class":92},[68,91069,15161],{"class":102},[68,91071,91072],{"class":85}," Math.max.",[68,91074,90991],{"class":587},[68,91076,91077],{"class":85},"(Math, arr)\n",[68,91079,91080,91082,91085,91087,91090,91092],{"class":70,"line":4191},[68,91081,12819],{"class":102},[68,91083,91084],{"class":92}," min",[68,91086,15161],{"class":102},[68,91088,91089],{"class":85}," Math.min.",[68,91091,90991],{"class":587},[68,91093,91077],{"class":85},[68,91095,91096,91098,91100,91103],{"class":70,"line":4199},[68,91097,75331],{"class":85},[68,91099,59831],{"class":587},[68,91101,91102],{"class":85},"(max, min)     ",[68,91104,91105],{"class":74},"\u002F\u002F100,4\n",[68,91107,91108],{"class":70,"line":4204},[68,91109,4000],{"emptyLinePlaceholder":1679},[68,91111,91112],{"class":70,"line":4210},[68,91113,91114],{"class":74},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[68,91116,91117,91119,91121,91124,91126,91128,91131],{"class":70,"line":4216},[68,91118,75331],{"class":85},[68,91120,59831],{"class":587},[68,91122,91123],{"class":85},"(Max.",[68,91125,7614],{"class":587},[68,91127,997],{"class":85},[68,91129,91130],{"class":102},"...",[68,91132,91133],{"class":85},"arr))\n",[68,91135,91136,91138,91140],{"class":70,"line":4221},[68,91137,54002],{"class":85},[68,91139,53398],{"class":81},[68,91141,876],{"class":85},[68,91143,91144,91146,91148],{"class":70,"line":9547},[68,91145,886],{"class":85},[68,91147,53385],{"class":81},[68,91149,876],{"class":85},[68,91151,91152],{"class":70,"line":9571},[68,91153,4000],{"emptyLinePlaceholder":1679},[68,91155,91156,91158,91160],{"class":70,"line":9576},[68,91157,886],{"class":85},[68,91159,52228],{"class":81},[68,91161,876],{"class":85},[19,91163,91164],{},[38,91165],{"alt":63,"src":91166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[48,91168,91169],{"start":89},[51,91170,91171],{},"bind()",[19,91173,91174],{},[38,91175],{"alt":63,"src":91176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91178,91179],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91181,91182],{},"bind的语法跟call很相似",[58,91184,91186],{"className":54652,"code":91185,"language":54654,"meta":63,"style":63},"\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",[65,91187,91188,91196,91204,91208,91213,91217,91221,91226,91230,91235,91240,91245,91250,91255,91260,91265,91269,91277],{"__ignoreMap":63},[68,91189,91190,91192,91194],{"class":70,"line":71},[68,91191,861],{"class":85},[68,91193,53385],{"class":81},[68,91195,876],{"class":85},[68,91197,91198,91200,91202],{"class":70,"line":78},[68,91199,53729],{"class":85},[68,91201,53398],{"class":81},[68,91203,876],{"class":85},[68,91205,91206],{"class":70,"line":89},[68,91207,73102],{"class":85},[68,91209,91210],{"class":70,"line":115},[68,91211,91212],{"class":85},"      age: 18\n",[68,91214,91215],{"class":70,"line":280},[68,91216,3787],{"class":85},[68,91218,91219],{"class":70,"line":301},[68,91220,78721],{"class":85},[68,91222,91223],{"class":70,"line":320},[68,91224,91225],{"class":85},"      console.log(this)\n",[68,91227,91228],{"class":70,"line":2915},[68,91229,3787],{"class":85},[68,91231,91232],{"class":70,"line":2921},[68,91233,91234],{"class":85},"    \u002F\u002F 1.bind 不会调用函数\n",[68,91236,91237],{"class":70,"line":2933},[68,91238,91239],{"class":85},"    \u002F\u002F 2.bind能改变this的指向\n",[68,91241,91242],{"class":70,"line":3214},[68,91243,91244],{"class":85},"    fn.bind()\n",[68,91246,91247],{"class":70,"line":3219},[68,91248,91249],{"class":85},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[68,91251,91252],{"class":70,"line":3225},[68,91253,91254],{"class":85},"    const fun = fn.bind(obj)\n",[68,91256,91257],{"class":70,"line":3230},[68,91258,91259],{"class":85},"    \u002F\u002F console.log(fun)\n",[68,91261,91262],{"class":70,"line":3244},[68,91263,91264],{"class":85},"    \u002F\u002F 调用,查看this的指向\n",[68,91266,91267],{"class":70,"line":3249},[68,91268,54236],{"class":85},[68,91270,91271,91273,91275],{"class":70,"line":3255},[68,91272,54002],{"class":85},[68,91274,53398],{"class":81},[68,91276,876],{"class":85},[68,91278,91279,91281,91283],{"class":70,"line":3276},[68,91280,886],{"class":85},[68,91282,53385],{"class":81},[68,91284,876],{"class":85},[19,91286,91287],{},[38,91288],{"alt":63,"src":91289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[48,91291,91292],{"start":115},[51,91293,91294],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[58,91296,91298],{"className":54652,"code":91297,"language":54654,"meta":63,"style":63},"\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",[65,91299,91300,91308,91321,91329,91334,91338,91343,91348,91353,91358,91363,91368,91373,91378,91382,91390],{"__ignoreMap":63},[68,91301,91302,91304,91306],{"class":70,"line":71},[68,91303,861],{"class":85},[68,91305,53385],{"class":81},[68,91307,876],{"class":85},[68,91309,91310,91312,91314,91317,91319],{"class":70,"line":78},[68,91311,53729],{"class":85},[68,91313,55471],{"class":81},[68,91315,91316],{"class":85},">禁用\u003C\u002F",[68,91318,55471],{"class":81},[68,91320,876],{"class":85},[68,91322,91323,91325,91327],{"class":70,"line":89},[68,91324,53729],{"class":85},[68,91326,53398],{"class":81},[68,91328,876],{"class":85},[68,91330,91331],{"class":70,"line":115},[68,91332,91333],{"class":85},"    const btn = document.querySelector('button')\n",[68,91335,91336],{"class":70,"line":280},[68,91337,60600],{"class":85},[68,91339,91340],{"class":70,"line":301},[68,91341,91342],{"class":85},"      this.disabled = true\n",[68,91344,91345],{"class":70,"line":320},[68,91346,91347],{"class":85},"      \u002F\u002F 定时器是window进行调用的\n",[68,91349,91350],{"class":70,"line":2915},[68,91351,91352],{"class":85},"      setTimeout(function () {\n",[68,91354,91355],{"class":70,"line":2921},[68,91356,91357],{"class":85},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[68,91359,91360],{"class":70,"line":2933},[68,91361,91362],{"class":85},"        this.disabled = false\n",[68,91364,91365],{"class":70,"line":3214},[68,91366,91367],{"class":85},"      }.bind(this), 2000)\n",[68,91369,91370],{"class":70,"line":3219},[68,91371,91372],{"class":85},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[68,91374,91375],{"class":70,"line":3225},[68,91376,91377],{"class":85},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[68,91379,91380],{"class":70,"line":3230},[68,91381,35054],{"class":85},[68,91383,91384,91386,91388],{"class":70,"line":3244},[68,91385,54002],{"class":85},[68,91387,53398],{"class":81},[68,91389,876],{"class":85},[68,91391,91392,91394,91396],{"class":70,"line":3249},[68,91393,886],{"class":85},[68,91395,53385],{"class":81},[68,91397,876],{"class":85},[48,91399,91400],{"start":280},[51,91401,23548],{},[19,91403,91404],{},[38,91405],{"alt":63,"src":91406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91408,91410],{"id":91409},"_417-性能优化","4.17 性能优化",[43,91412,91414],{"id":91413},"_4171-防抖","4.17.1 防抖",[19,91416,91417],{},[38,91418],{"alt":63,"src":91419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91421,91422],{},[1890,91423,91424],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91426,91427],{},"防抖实现方式：",[168,91429,91430],{},[51,91431,91432],{},"lodash 提供了防抖处理",[19,91434,91435],{},"_.debounce(func,[wait=0],[options={}])",[19,91437,91438],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[58,91440,91442],{"className":52226,"code":91441,"language":52228,"meta":63,"style":63},"\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",[65,91443,91444,91454,91468,91472,91480,91494,91514,91526,91534,91540,91550,91562,91574,91585,91597,91607,91617,91630,91634,91642,91650,91654,91662,91680,91698,91706,91725,91735,91744,91755,91760,91764,91769,91774,91779,91804,91812,91820,91824],{"__ignoreMap":63},[68,91445,91446,91448,91450,91452],{"class":70,"line":71},[68,91447,52890],{"class":85},[68,91449,52893],{"class":81},[68,91451,52896],{"class":587},[68,91453,876],{"class":85},[68,91455,91456,91458,91460,91462,91464,91466],{"class":70,"line":78},[68,91457,861],{"class":85},[68,91459,52228],{"class":81},[68,91461,52907],{"class":587},[68,91463,869],{"class":85},[68,91465,52912],{"class":872},[68,91467,876],{"class":85},[68,91469,91470],{"class":70,"line":89},[68,91471,4000],{"emptyLinePlaceholder":1679},[68,91473,91474,91476,91478],{"class":70,"line":115},[68,91475,861],{"class":85},[68,91477,52925],{"class":81},[68,91479,876],{"class":85},[68,91481,91482,91484,91486,91488,91490,91492],{"class":70,"line":280},[68,91483,53729],{"class":85},[68,91485,52935],{"class":81},[68,91487,52938],{"class":587},[68,91489,869],{"class":85},[68,91491,52943],{"class":872},[68,91493,876],{"class":85},[68,91495,91496,91498,91500,91502,91504,91506,91508,91510,91512],{"class":70,"line":301},[68,91497,53729],{"class":85},[68,91499,52935],{"class":81},[68,91501,16516],{"class":587},[68,91503,869],{"class":85},[68,91505,52982],{"class":872},[68,91507,52962],{"class":587},[68,91509,869],{"class":85},[68,91511,52989],{"class":872},[68,91513,876],{"class":85},[68,91515,91516,91518,91520,91522,91524],{"class":70,"line":320},[68,91517,53729],{"class":85},[68,91519,52998],{"class":81},[68,91521,53001],{"class":85},[68,91523,52998],{"class":81},[68,91525,876],{"class":85},[68,91527,91528,91530,91532],{"class":70,"line":2915},[68,91529,53729],{"class":85},[68,91531,1652],{"class":81},[68,91533,876],{"class":85},[68,91535,91536,91538],{"class":70,"line":2921},[68,91537,56336],{"class":587},[68,91539,86],{"class":85},[68,91541,91542,91544,91546,91548],{"class":70,"line":2933},[68,91543,74174],{"class":92},[68,91545,96],{"class":85},[68,91547,62089],{"class":92},[68,91549,112],{"class":85},[68,91551,91552,91554,91556,91558,91560],{"class":70,"line":3214},[68,91553,56355],{"class":92},[68,91555,96],{"class":85},[68,91557,3324],{"class":92},[68,91559,103],{"class":102},[68,91561,112],{"class":85},[68,91563,91564,91566,91568,91570,91572],{"class":70,"line":3219},[68,91565,56369],{"class":92},[68,91567,96],{"class":85},[68,91569,3324],{"class":92},[68,91571,103],{"class":102},[68,91573,112],{"class":85},[68,91575,91576,91578,91580,91583],{"class":70,"line":3225},[68,91577,56468],{"class":92},[68,91579,96],{"class":85},[68,91581,91582],{"class":92},"gray",[68,91584,112],{"class":85},[68,91586,91587,91589,91591,91593,91595],{"class":70,"line":3230},[68,91588,56506],{"class":92},[68,91590,96],{"class":85},[68,91592,2561],{"class":92},[68,91594,103],{"class":102},[68,91596,112],{"class":85},[68,91598,91599,91601,91603,91605],{"class":70,"line":3244},[68,91600,59000],{"class":92},[68,91602,96],{"class":85},[68,91604,62426],{"class":92},[68,91606,112],{"class":85},[68,91608,91609,91611,91613,91615],{"class":70,"line":3249},[68,91610,58870],{"class":92},[68,91612,96],{"class":85},[68,91614,53179],{"class":92},[68,91616,112],{"class":85},[68,91618,91619,91622,91624,91626,91628],{"class":70,"line":3255},[68,91620,91621],{"class":92},"      padding-top",[68,91623,96],{"class":85},[68,91625,2055],{"class":92},[68,91627,103],{"class":102},[68,91629,112],{"class":85},[68,91631,91632],{"class":70,"line":3276},[68,91633,3787],{"class":85},[68,91635,91636,91638,91640],{"class":70,"line":3281},[68,91637,54002],{"class":85},[68,91639,1652],{"class":81},[68,91641,876],{"class":85},[68,91643,91644,91646,91648],{"class":70,"line":3295},[68,91645,886],{"class":85},[68,91647,52925],{"class":81},[68,91649,876],{"class":85},[68,91651,91652],{"class":70,"line":3300},[68,91653,4000],{"emptyLinePlaceholder":1679},[68,91655,91656,91658,91660],{"class":70,"line":3329},[68,91657,861],{"class":85},[68,91659,53385],{"class":81},[68,91661,876],{"class":85},[68,91663,91664,91666,91668,91670,91672,91674,91676,91678],{"class":70,"line":3334},[68,91665,53729],{"class":85},[68,91667,82],{"class":81},[68,91669,866],{"class":587},[68,91671,869],{"class":85},[68,91673,55075],{"class":872},[68,91675,56898],{"class":85},[68,91677,82],{"class":81},[68,91679,876],{"class":85},[68,91681,91682,91684,91686,91688,91690,91692,91694,91696],{"class":70,"line":3351},[68,91683,53729],{"class":85},[68,91685,53398],{"class":81},[68,91687,56823],{"class":587},[68,91689,869],{"class":85},[68,91691,89850],{"class":872},[68,91693,56898],{"class":85},[68,91695,53398],{"class":81},[68,91697,876],{"class":85},[68,91699,91700,91702,91704],{"class":70,"line":3356},[68,91701,53729],{"class":85},[68,91703,53398],{"class":81},[68,91705,876],{"class":85},[68,91707,91708,91710,91712,91714,91716,91718,91720,91723],{"class":70,"line":3361},[68,91709,12819],{"class":102},[68,91711,88509],{"class":92},[68,91713,15161],{"class":102},[68,91715,55980],{"class":85},[68,91717,55983],{"class":587},[68,91719,997],{"class":85},[68,91721,91722],{"class":872},"'.box'",[68,91724,1757],{"class":85},[68,91726,91727,91729,91731,91733],{"class":70,"line":3366},[68,91728,53804],{"class":102},[68,91730,11036],{"class":85},[68,91732,869],{"class":102},[68,91734,48926],{"class":92},[68,91736,91737,91739,91742],{"class":70,"line":3380},[68,91738,71666],{"class":102},[68,91740,91741],{"class":587}," mouseMove",[68,91743,12451],{"class":85},[68,91745,91746,91749,91751,91753],{"class":70,"line":3385},[68,91747,91748],{"class":85},"      box.innerHTML ",[68,91750,869],{"class":102},[68,91752,4631],{"class":85},[68,91754,4302],{"class":102},[68,91756,91757],{"class":70,"line":4177},[68,91758,91759],{"class":74},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[68,91761,91762],{"class":70,"line":4191},[68,91763,3787],{"class":85},[68,91765,91766],{"class":70,"line":4199},[68,91767,91768],{"class":74},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[68,91770,91771],{"class":70,"line":4204},[68,91772,91773],{"class":74},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[68,91775,91776],{"class":70,"line":4210},[68,91777,91778],{"class":74},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[68,91780,91781,91784,91786,91788,91791,91794,91797,91800,91802],{"class":70,"line":4216},[68,91782,91783],{"class":85},"    box.",[68,91785,59397],{"class":587},[68,91787,997],{"class":85},[68,91789,91790],{"class":872},"'mousemove'",[68,91792,91793],{"class":85},", _.",[68,91795,91796],{"class":587},"debounce",[68,91798,91799],{"class":85},"(mouseMove, ",[68,91801,66656],{"class":92},[68,91803,32090],{"class":85},[68,91805,91806,91808,91810],{"class":70,"line":4221},[68,91807,54002],{"class":85},[68,91809,53398],{"class":81},[68,91811,876],{"class":85},[68,91813,91814,91816,91818],{"class":70,"line":9547},[68,91815,886],{"class":85},[68,91817,53385],{"class":81},[68,91819,876],{"class":85},[68,91821,91822],{"class":70,"line":9571},[68,91823,4000],{"emptyLinePlaceholder":1679},[68,91825,91826,91828,91830],{"class":70,"line":9576},[68,91827,886],{"class":85},[68,91829,52228],{"class":81},[68,91831,876],{"class":85},[168,91833,91834],{},[51,91835,91836],{},"手写一个防抖函数来处理",[19,91838,91839],{},"防抖的核心就是利用定时器来实现的：",[19,91841,91842],{},"①声明一个定时器变量",[19,91844,91845],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91847,91848],{},"③如果没有定时器则开启定时器，记得存到变量里面",[58,91850,91852],{"className":52226,"code":91851,"language":52228,"meta":63,"style":63},"\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",[65,91853,91854,91864,91878,91882,91890,91904,91924,91936,91944,91950,91960,91972,91984,91994,92006,92016,92026,92038,92042,92050,92058,92062,92070,92088,92106,92114,92132,92142,92150,92160,92164,92168,92172,92177,92182,92187,92192,92197,92202,92220,92227,92232,92240,92245,92258,92274,92284,92289,92293,92297,92317,92321,92326,92331,92336,92341,92349,92357,92361],{"__ignoreMap":63},[68,91855,91856,91858,91860,91862],{"class":70,"line":71},[68,91857,52890],{"class":85},[68,91859,52893],{"class":81},[68,91861,52896],{"class":587},[68,91863,876],{"class":85},[68,91865,91866,91868,91870,91872,91874,91876],{"class":70,"line":78},[68,91867,861],{"class":85},[68,91869,52228],{"class":81},[68,91871,52907],{"class":587},[68,91873,869],{"class":85},[68,91875,52912],{"class":872},[68,91877,876],{"class":85},[68,91879,91880],{"class":70,"line":89},[68,91881,4000],{"emptyLinePlaceholder":1679},[68,91883,91884,91886,91888],{"class":70,"line":115},[68,91885,861],{"class":85},[68,91887,52925],{"class":81},[68,91889,876],{"class":85},[68,91891,91892,91894,91896,91898,91900,91902],{"class":70,"line":280},[68,91893,53729],{"class":85},[68,91895,52935],{"class":81},[68,91897,52938],{"class":587},[68,91899,869],{"class":85},[68,91901,52943],{"class":872},[68,91903,876],{"class":85},[68,91905,91906,91908,91910,91912,91914,91916,91918,91920,91922],{"class":70,"line":301},[68,91907,53729],{"class":85},[68,91909,52935],{"class":81},[68,91911,16516],{"class":587},[68,91913,869],{"class":85},[68,91915,52982],{"class":872},[68,91917,52962],{"class":587},[68,91919,869],{"class":85},[68,91921,52989],{"class":872},[68,91923,876],{"class":85},[68,91925,91926,91928,91930,91932,91934],{"class":70,"line":320},[68,91927,53729],{"class":85},[68,91929,52998],{"class":81},[68,91931,53001],{"class":85},[68,91933,52998],{"class":81},[68,91935,876],{"class":85},[68,91937,91938,91940,91942],{"class":70,"line":2915},[68,91939,53729],{"class":85},[68,91941,1652],{"class":81},[68,91943,876],{"class":85},[68,91945,91946,91948],{"class":70,"line":2921},[68,91947,56336],{"class":587},[68,91949,86],{"class":85},[68,91951,91952,91954,91956,91958],{"class":70,"line":2933},[68,91953,74174],{"class":92},[68,91955,96],{"class":85},[68,91957,62089],{"class":92},[68,91959,112],{"class":85},[68,91961,91962,91964,91966,91968,91970],{"class":70,"line":3214},[68,91963,56355],{"class":92},[68,91965,96],{"class":85},[68,91967,3324],{"class":92},[68,91969,103],{"class":102},[68,91971,112],{"class":85},[68,91973,91974,91976,91978,91980,91982],{"class":70,"line":3219},[68,91975,56369],{"class":92},[68,91977,96],{"class":85},[68,91979,3324],{"class":92},[68,91981,103],{"class":102},[68,91983,112],{"class":85},[68,91985,91986,91988,91990,91992],{"class":70,"line":3225},[68,91987,56468],{"class":92},[68,91989,96],{"class":85},[68,91991,91582],{"class":92},[68,91993,112],{"class":85},[68,91995,91996,91998,92000,92002,92004],{"class":70,"line":3230},[68,91997,56506],{"class":92},[68,91999,96],{"class":85},[68,92001,2561],{"class":92},[68,92003,103],{"class":102},[68,92005,112],{"class":85},[68,92007,92008,92010,92012,92014],{"class":70,"line":3244},[68,92009,59000],{"class":92},[68,92011,96],{"class":85},[68,92013,62426],{"class":92},[68,92015,112],{"class":85},[68,92017,92018,92020,92022,92024],{"class":70,"line":3249},[68,92019,58870],{"class":92},[68,92021,96],{"class":85},[68,92023,53179],{"class":92},[68,92025,112],{"class":85},[68,92027,92028,92030,92032,92034,92036],{"class":70,"line":3255},[68,92029,91621],{"class":92},[68,92031,96],{"class":85},[68,92033,2055],{"class":92},[68,92035,103],{"class":102},[68,92037,112],{"class":85},[68,92039,92040],{"class":70,"line":3276},[68,92041,3787],{"class":85},[68,92043,92044,92046,92048],{"class":70,"line":3281},[68,92045,54002],{"class":85},[68,92047,1652],{"class":81},[68,92049,876],{"class":85},[68,92051,92052,92054,92056],{"class":70,"line":3295},[68,92053,886],{"class":85},[68,92055,52925],{"class":81},[68,92057,876],{"class":85},[68,92059,92060],{"class":70,"line":3300},[68,92061,4000],{"emptyLinePlaceholder":1679},[68,92063,92064,92066,92068],{"class":70,"line":3329},[68,92065,861],{"class":85},[68,92067,53385],{"class":81},[68,92069,876],{"class":85},[68,92071,92072,92074,92076,92078,92080,92082,92084,92086],{"class":70,"line":3334},[68,92073,53729],{"class":85},[68,92075,82],{"class":81},[68,92077,866],{"class":587},[68,92079,869],{"class":85},[68,92081,55075],{"class":872},[68,92083,56898],{"class":85},[68,92085,82],{"class":81},[68,92087,876],{"class":85},[68,92089,92090,92092,92094,92096,92098,92100,92102,92104],{"class":70,"line":3351},[68,92091,53729],{"class":85},[68,92093,53398],{"class":81},[68,92095,56823],{"class":587},[68,92097,869],{"class":85},[68,92099,89850],{"class":872},[68,92101,56898],{"class":85},[68,92103,53398],{"class":81},[68,92105,876],{"class":85},[68,92107,92108,92110,92112],{"class":70,"line":3356},[68,92109,53729],{"class":85},[68,92111,53398],{"class":81},[68,92113,876],{"class":85},[68,92115,92116,92118,92120,92122,92124,92126,92128,92130],{"class":70,"line":3361},[68,92117,12819],{"class":102},[68,92119,88509],{"class":92},[68,92121,15161],{"class":102},[68,92123,55980],{"class":85},[68,92125,55983],{"class":587},[68,92127,997],{"class":85},[68,92129,91722],{"class":872},[68,92131,1757],{"class":85},[68,92133,92134,92136,92138,92140],{"class":70,"line":3366},[68,92135,53804],{"class":102},[68,92137,11036],{"class":85},[68,92139,869],{"class":102},[68,92141,48926],{"class":92},[68,92143,92144,92146,92148],{"class":70,"line":3380},[68,92145,71666],{"class":102},[68,92147,91741],{"class":587},[68,92149,12451],{"class":85},[68,92151,92152,92154,92156,92158],{"class":70,"line":3385},[68,92153,91748],{"class":85},[68,92155,869],{"class":102},[68,92157,4631],{"class":85},[68,92159,4302],{"class":102},[68,92161,92162],{"class":70,"line":4177},[68,92163,91759],{"class":74},[68,92165,92166],{"class":70,"line":4191},[68,92167,3787],{"class":85},[68,92169,92170],{"class":70,"line":4199},[68,92171,91768],{"class":74},[68,92173,92174],{"class":70,"line":4204},[68,92175,92176],{"class":74},"    \u002F\u002F 手写防抖函数\n",[68,92178,92179],{"class":70,"line":4210},[68,92180,92181],{"class":74},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[68,92183,92184],{"class":70,"line":4216},[68,92185,92186],{"class":74},"    \u002F\u002F 1.声明定时器变量\n",[68,92188,92189],{"class":70,"line":4221},[68,92190,92191],{"class":74},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[68,92193,92194],{"class":70,"line":9547},[68,92195,92196],{"class":74},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[68,92198,92199],{"class":70,"line":9571},[68,92200,92201],{"class":74},"    \u002F\u002F 4.定时器里面写函数调用\n",[68,92203,92204,92206,92209,92211,92214,92216,92218],{"class":70,"line":9576},[68,92205,71666],{"class":102},[68,92207,92208],{"class":587}," debounce",[68,92210,997],{"class":85},[68,92212,92213],{"class":6815},"fn",[68,92215,1002],{"class":85},[68,92217,2456],{"class":6815},[68,92219,14039],{"class":85},[68,92221,92222,92224],{"class":70,"line":9582},[68,92223,81349],{"class":102},[68,92225,92226],{"class":85}," timer\n",[68,92228,92229],{"class":70,"line":9609},[68,92230,92231],{"class":74},"      \u002F\u002F return 返回一个匿名函数\n",[68,92233,92234,92236,92238],{"class":70,"line":9614},[68,92235,75560],{"class":102},[68,92237,60502],{"class":102},[68,92239,56036],{"class":85},[68,92241,92242],{"class":70,"line":9620},[68,92243,92244],{"class":74},"        \u002F\u002F 这里边写第二三四步\n",[68,92246,92247,92249,92252,92255],{"class":70,"line":9632},[68,92248,4097],{"class":102},[68,92250,92251],{"class":85}," (timer) ",[68,92253,92254],{"class":587},"clearTimeout",[68,92256,92257],{"class":85},"(timer)\n",[68,92259,92260,92263,92265,92268,92270,92272],{"class":70,"line":9644},[68,92261,92262],{"class":85},"        timer ",[68,92264,869],{"class":102},[68,92266,92267],{"class":587}," setTimeout",[68,92269,997],{"class":85},[68,92271,56033],{"class":102},[68,92273,56036],{"class":85},[68,92275,92276,92279,92281],{"class":70,"line":9656},[68,92277,92278],{"class":587},"          fn",[68,92280,14647],{"class":85},[68,92282,92283],{"class":74},"\u002F\u002F加小括号调用fn }, t)\n",[68,92285,92286],{"class":70,"line":11314},[68,92287,92288],{"class":85},"        }, t)\n",[68,92290,92291],{"class":70,"line":11339},[68,92292,53983],{"class":85},[68,92294,92295],{"class":70,"line":11362},[68,92296,3787],{"class":85},[68,92298,92299,92301,92303,92305,92307,92309,92311,92313,92315],{"class":70,"line":11386},[68,92300,91783],{"class":85},[68,92302,59397],{"class":587},[68,92304,997],{"class":85},[68,92306,91790],{"class":872},[68,92308,1002],{"class":85},[68,92310,91796],{"class":587},[68,92312,91799],{"class":85},[68,92314,66656],{"class":92},[68,92316,32090],{"class":85},[68,92318,92319],{"class":70,"line":11391},[68,92320,4000],{"emptyLinePlaceholder":1679},[68,92322,92323],{"class":70,"line":11396},[68,92324,92325],{"class":74},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[68,92327,92328],{"class":70,"line":11401},[68,92329,92330],{"class":74},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[68,92332,92333],{"class":70,"line":11410},[68,92334,92335],{"class":74},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[68,92337,92338],{"class":70,"line":11415},[68,92339,92340],{"class":74},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[68,92342,92343,92345,92347],{"class":70,"line":11421},[68,92344,54002],{"class":85},[68,92346,53398],{"class":81},[68,92348,876],{"class":85},[68,92350,92351,92353,92355],{"class":70,"line":11442},[68,92352,886],{"class":85},[68,92354,53385],{"class":81},[68,92356,876],{"class":85},[68,92358,92359],{"class":70,"line":11448},[68,92360,4000],{"emptyLinePlaceholder":1679},[68,92362,92363,92365,92367],{"class":70,"line":11462},[68,92364,886],{"class":85},[68,92366,52228],{"class":81},[68,92368,876],{"class":85},[43,92370,92372],{"id":92371},"_4172-节流","4.17.2 节流",[19,92374,92375],{},[38,92376],{"alt":63,"src":92377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92379,92380],{},[38,92381],{"alt":63,"src":92382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92384,92385],{},[1890,92386,92387],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92389,92390],{},"实现方式：",[168,92392,92393],{},[51,92394,92395],{},"lodash 提供的节流函数来处理",[19,92397,92398],{},"_.throttle(func,[wait=0],[options=])",[19,92400,92401],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[58,92403,92405],{"className":52226,"code":92404,"language":52228,"meta":63,"style":63},"\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",[65,92406,92407,92417,92431,92435,92443,92457,92477,92489,92497,92503,92513,92525,92537,92547,92559,92569,92579,92591,92595,92603,92611,92615,92623,92641,92659,92667,92685,92695,92703,92713,92717,92721,92725,92730,92735,92756,92764,92772,92776],{"__ignoreMap":63},[68,92408,92409,92411,92413,92415],{"class":70,"line":71},[68,92410,52890],{"class":85},[68,92412,52893],{"class":81},[68,92414,52896],{"class":587},[68,92416,876],{"class":85},[68,92418,92419,92421,92423,92425,92427,92429],{"class":70,"line":78},[68,92420,861],{"class":85},[68,92422,52228],{"class":81},[68,92424,52907],{"class":587},[68,92426,869],{"class":85},[68,92428,52912],{"class":872},[68,92430,876],{"class":85},[68,92432,92433],{"class":70,"line":89},[68,92434,4000],{"emptyLinePlaceholder":1679},[68,92436,92437,92439,92441],{"class":70,"line":115},[68,92438,861],{"class":85},[68,92440,52925],{"class":81},[68,92442,876],{"class":85},[68,92444,92445,92447,92449,92451,92453,92455],{"class":70,"line":280},[68,92446,53729],{"class":85},[68,92448,52935],{"class":81},[68,92450,52938],{"class":587},[68,92452,869],{"class":85},[68,92454,52943],{"class":872},[68,92456,876],{"class":85},[68,92458,92459,92461,92463,92465,92467,92469,92471,92473,92475],{"class":70,"line":301},[68,92460,53729],{"class":85},[68,92462,52935],{"class":81},[68,92464,16516],{"class":587},[68,92466,869],{"class":85},[68,92468,52982],{"class":872},[68,92470,52962],{"class":587},[68,92472,869],{"class":85},[68,92474,52989],{"class":872},[68,92476,876],{"class":85},[68,92478,92479,92481,92483,92485,92487],{"class":70,"line":320},[68,92480,53729],{"class":85},[68,92482,52998],{"class":81},[68,92484,53001],{"class":85},[68,92486,52998],{"class":81},[68,92488,876],{"class":85},[68,92490,92491,92493,92495],{"class":70,"line":2915},[68,92492,53729],{"class":85},[68,92494,1652],{"class":81},[68,92496,876],{"class":85},[68,92498,92499,92501],{"class":70,"line":2921},[68,92500,56336],{"class":587},[68,92502,86],{"class":85},[68,92504,92505,92507,92509,92511],{"class":70,"line":2933},[68,92506,74174],{"class":92},[68,92508,96],{"class":85},[68,92510,62089],{"class":92},[68,92512,112],{"class":85},[68,92514,92515,92517,92519,92521,92523],{"class":70,"line":3214},[68,92516,56355],{"class":92},[68,92518,96],{"class":85},[68,92520,3324],{"class":92},[68,92522,103],{"class":102},[68,92524,112],{"class":85},[68,92526,92527,92529,92531,92533,92535],{"class":70,"line":3219},[68,92528,56369],{"class":92},[68,92530,96],{"class":85},[68,92532,3324],{"class":92},[68,92534,103],{"class":102},[68,92536,112],{"class":85},[68,92538,92539,92541,92543,92545],{"class":70,"line":3225},[68,92540,56468],{"class":92},[68,92542,96],{"class":85},[68,92544,91582],{"class":92},[68,92546,112],{"class":85},[68,92548,92549,92551,92553,92555,92557],{"class":70,"line":3230},[68,92550,56506],{"class":92},[68,92552,96],{"class":85},[68,92554,2561],{"class":92},[68,92556,103],{"class":102},[68,92558,112],{"class":85},[68,92560,92561,92563,92565,92567],{"class":70,"line":3244},[68,92562,59000],{"class":92},[68,92564,96],{"class":85},[68,92566,62426],{"class":92},[68,92568,112],{"class":85},[68,92570,92571,92573,92575,92577],{"class":70,"line":3249},[68,92572,58870],{"class":92},[68,92574,96],{"class":85},[68,92576,53179],{"class":92},[68,92578,112],{"class":85},[68,92580,92581,92583,92585,92587,92589],{"class":70,"line":3255},[68,92582,91621],{"class":92},[68,92584,96],{"class":85},[68,92586,2055],{"class":92},[68,92588,103],{"class":102},[68,92590,112],{"class":85},[68,92592,92593],{"class":70,"line":3276},[68,92594,3787],{"class":85},[68,92596,92597,92599,92601],{"class":70,"line":3281},[68,92598,54002],{"class":85},[68,92600,1652],{"class":81},[68,92602,876],{"class":85},[68,92604,92605,92607,92609],{"class":70,"line":3295},[68,92606,886],{"class":85},[68,92608,52925],{"class":81},[68,92610,876],{"class":85},[68,92612,92613],{"class":70,"line":3300},[68,92614,4000],{"emptyLinePlaceholder":1679},[68,92616,92617,92619,92621],{"class":70,"line":3329},[68,92618,861],{"class":85},[68,92620,53385],{"class":81},[68,92622,876],{"class":85},[68,92624,92625,92627,92629,92631,92633,92635,92637,92639],{"class":70,"line":3334},[68,92626,53729],{"class":85},[68,92628,82],{"class":81},[68,92630,866],{"class":587},[68,92632,869],{"class":85},[68,92634,55075],{"class":872},[68,92636,56898],{"class":85},[68,92638,82],{"class":81},[68,92640,876],{"class":85},[68,92642,92643,92645,92647,92649,92651,92653,92655,92657],{"class":70,"line":3351},[68,92644,53729],{"class":85},[68,92646,53398],{"class":81},[68,92648,56823],{"class":587},[68,92650,869],{"class":85},[68,92652,89850],{"class":872},[68,92654,56898],{"class":85},[68,92656,53398],{"class":81},[68,92658,876],{"class":85},[68,92660,92661,92663,92665],{"class":70,"line":3356},[68,92662,53729],{"class":85},[68,92664,53398],{"class":81},[68,92666,876],{"class":85},[68,92668,92669,92671,92673,92675,92677,92679,92681,92683],{"class":70,"line":3361},[68,92670,12819],{"class":102},[68,92672,88509],{"class":92},[68,92674,15161],{"class":102},[68,92676,55980],{"class":85},[68,92678,55983],{"class":587},[68,92680,997],{"class":85},[68,92682,91722],{"class":872},[68,92684,1757],{"class":85},[68,92686,92687,92689,92691,92693],{"class":70,"line":3366},[68,92688,53804],{"class":102},[68,92690,11036],{"class":85},[68,92692,869],{"class":102},[68,92694,48926],{"class":92},[68,92696,92697,92699,92701],{"class":70,"line":3380},[68,92698,71666],{"class":102},[68,92700,91741],{"class":587},[68,92702,12451],{"class":85},[68,92704,92705,92707,92709,92711],{"class":70,"line":3385},[68,92706,91748],{"class":85},[68,92708,869],{"class":102},[68,92710,4631],{"class":85},[68,92712,4302],{"class":102},[68,92714,92715],{"class":70,"line":4177},[68,92716,91759],{"class":74},[68,92718,92719],{"class":70,"line":4191},[68,92720,3787],{"class":85},[68,92722,92723],{"class":70,"line":4199},[68,92724,91768],{"class":74},[68,92726,92727],{"class":70,"line":4204},[68,92728,92729],{"class":74},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[68,92731,92732],{"class":70,"line":4210},[68,92733,92734],{"class":74},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[68,92736,92737,92739,92741,92743,92745,92747,92750,92752,92754],{"class":70,"line":4216},[68,92738,91783],{"class":85},[68,92740,59397],{"class":587},[68,92742,997],{"class":85},[68,92744,91790],{"class":872},[68,92746,91793],{"class":85},[68,92748,92749],{"class":587},"throttle",[68,92751,91799],{"class":85},[68,92753,66656],{"class":92},[68,92755,32090],{"class":85},[68,92757,92758,92760,92762],{"class":70,"line":4221},[68,92759,54002],{"class":85},[68,92761,53398],{"class":81},[68,92763,876],{"class":85},[68,92765,92766,92768,92770],{"class":70,"line":9547},[68,92767,886],{"class":85},[68,92769,53385],{"class":81},[68,92771,876],{"class":85},[68,92773,92774],{"class":70,"line":9571},[68,92775,4000],{"emptyLinePlaceholder":1679},[68,92777,92778,92780,92782],{"class":70,"line":9576},[68,92779,886],{"class":85},[68,92781,52228],{"class":81},[68,92783,876],{"class":85},[168,92785,92786],{},[51,92787,92788],{},"手写一个节流函数来处理",[19,92790,72531],{},[19,92792,91842],{},[19,92794,92795],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92797,92798],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[58,92800,92802],{"className":52226,"code":92801,"language":52228,"meta":63,"style":63},"\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",[65,92803,92804,92814,92828,92832,92840,92854,92874,92886,92894,92900,92910,92922,92934,92944,92956,92966,92976,92988,92992,93000,93008,93012,93020,93038,93056,93064,93082,93092,93100,93110,93114,93118,93122,93127,93132,93137,93142,93147,93152,93169,93175,93183,93194,93209,93216,93221,93226,93236,93241,93246,93251,93255,93259,93263,93283,93291,93299,93303],{"__ignoreMap":63},[68,92805,92806,92808,92810,92812],{"class":70,"line":71},[68,92807,52890],{"class":85},[68,92809,52893],{"class":81},[68,92811,52896],{"class":587},[68,92813,876],{"class":85},[68,92815,92816,92818,92820,92822,92824,92826],{"class":70,"line":78},[68,92817,861],{"class":85},[68,92819,52228],{"class":81},[68,92821,52907],{"class":587},[68,92823,869],{"class":85},[68,92825,52912],{"class":872},[68,92827,876],{"class":85},[68,92829,92830],{"class":70,"line":89},[68,92831,4000],{"emptyLinePlaceholder":1679},[68,92833,92834,92836,92838],{"class":70,"line":115},[68,92835,861],{"class":85},[68,92837,52925],{"class":81},[68,92839,876],{"class":85},[68,92841,92842,92844,92846,92848,92850,92852],{"class":70,"line":280},[68,92843,53729],{"class":85},[68,92845,52935],{"class":81},[68,92847,52938],{"class":587},[68,92849,869],{"class":85},[68,92851,52943],{"class":872},[68,92853,876],{"class":85},[68,92855,92856,92858,92860,92862,92864,92866,92868,92870,92872],{"class":70,"line":301},[68,92857,53729],{"class":85},[68,92859,52935],{"class":81},[68,92861,16516],{"class":587},[68,92863,869],{"class":85},[68,92865,52982],{"class":872},[68,92867,52962],{"class":587},[68,92869,869],{"class":85},[68,92871,52989],{"class":872},[68,92873,876],{"class":85},[68,92875,92876,92878,92880,92882,92884],{"class":70,"line":320},[68,92877,53729],{"class":85},[68,92879,52998],{"class":81},[68,92881,53001],{"class":85},[68,92883,52998],{"class":81},[68,92885,876],{"class":85},[68,92887,92888,92890,92892],{"class":70,"line":2915},[68,92889,53729],{"class":85},[68,92891,1652],{"class":81},[68,92893,876],{"class":85},[68,92895,92896,92898],{"class":70,"line":2921},[68,92897,56336],{"class":587},[68,92899,86],{"class":85},[68,92901,92902,92904,92906,92908],{"class":70,"line":2933},[68,92903,74174],{"class":92},[68,92905,96],{"class":85},[68,92907,62089],{"class":92},[68,92909,112],{"class":85},[68,92911,92912,92914,92916,92918,92920],{"class":70,"line":3214},[68,92913,56355],{"class":92},[68,92915,96],{"class":85},[68,92917,3324],{"class":92},[68,92919,103],{"class":102},[68,92921,112],{"class":85},[68,92923,92924,92926,92928,92930,92932],{"class":70,"line":3219},[68,92925,56369],{"class":92},[68,92927,96],{"class":85},[68,92929,3324],{"class":92},[68,92931,103],{"class":102},[68,92933,112],{"class":85},[68,92935,92936,92938,92940,92942],{"class":70,"line":3225},[68,92937,56468],{"class":92},[68,92939,96],{"class":85},[68,92941,91582],{"class":92},[68,92943,112],{"class":85},[68,92945,92946,92948,92950,92952,92954],{"class":70,"line":3230},[68,92947,56506],{"class":92},[68,92949,96],{"class":85},[68,92951,2561],{"class":92},[68,92953,103],{"class":102},[68,92955,112],{"class":85},[68,92957,92958,92960,92962,92964],{"class":70,"line":3244},[68,92959,59000],{"class":92},[68,92961,96],{"class":85},[68,92963,62426],{"class":92},[68,92965,112],{"class":85},[68,92967,92968,92970,92972,92974],{"class":70,"line":3249},[68,92969,58870],{"class":92},[68,92971,96],{"class":85},[68,92973,53179],{"class":92},[68,92975,112],{"class":85},[68,92977,92978,92980,92982,92984,92986],{"class":70,"line":3255},[68,92979,91621],{"class":92},[68,92981,96],{"class":85},[68,92983,2055],{"class":92},[68,92985,103],{"class":102},[68,92987,112],{"class":85},[68,92989,92990],{"class":70,"line":3276},[68,92991,3787],{"class":85},[68,92993,92994,92996,92998],{"class":70,"line":3281},[68,92995,54002],{"class":85},[68,92997,1652],{"class":81},[68,92999,876],{"class":85},[68,93001,93002,93004,93006],{"class":70,"line":3295},[68,93003,886],{"class":85},[68,93005,52925],{"class":81},[68,93007,876],{"class":85},[68,93009,93010],{"class":70,"line":3300},[68,93011,4000],{"emptyLinePlaceholder":1679},[68,93013,93014,93016,93018],{"class":70,"line":3329},[68,93015,861],{"class":85},[68,93017,53385],{"class":81},[68,93019,876],{"class":85},[68,93021,93022,93024,93026,93028,93030,93032,93034,93036],{"class":70,"line":3334},[68,93023,53729],{"class":85},[68,93025,82],{"class":81},[68,93027,866],{"class":587},[68,93029,869],{"class":85},[68,93031,55075],{"class":872},[68,93033,56898],{"class":85},[68,93035,82],{"class":81},[68,93037,876],{"class":85},[68,93039,93040,93042,93044,93046,93048,93050,93052,93054],{"class":70,"line":3351},[68,93041,53729],{"class":85},[68,93043,53398],{"class":81},[68,93045,56823],{"class":587},[68,93047,869],{"class":85},[68,93049,89850],{"class":872},[68,93051,56898],{"class":85},[68,93053,53398],{"class":81},[68,93055,876],{"class":85},[68,93057,93058,93060,93062],{"class":70,"line":3356},[68,93059,53729],{"class":85},[68,93061,53398],{"class":81},[68,93063,876],{"class":85},[68,93065,93066,93068,93070,93072,93074,93076,93078,93080],{"class":70,"line":3361},[68,93067,12819],{"class":102},[68,93069,88509],{"class":92},[68,93071,15161],{"class":102},[68,93073,55980],{"class":85},[68,93075,55983],{"class":587},[68,93077,997],{"class":85},[68,93079,91722],{"class":872},[68,93081,1757],{"class":85},[68,93083,93084,93086,93088,93090],{"class":70,"line":3366},[68,93085,53804],{"class":102},[68,93087,11036],{"class":85},[68,93089,869],{"class":102},[68,93091,48926],{"class":92},[68,93093,93094,93096,93098],{"class":70,"line":3380},[68,93095,71666],{"class":102},[68,93097,91741],{"class":587},[68,93099,12451],{"class":85},[68,93101,93102,93104,93106,93108],{"class":70,"line":3385},[68,93103,91748],{"class":85},[68,93105,869],{"class":102},[68,93107,4631],{"class":85},[68,93109,4302],{"class":102},[68,93111,93112],{"class":70,"line":4177},[68,93113,91759],{"class":74},[68,93115,93116],{"class":70,"line":4191},[68,93117,3787],{"class":85},[68,93119,93120],{"class":70,"line":4199},[68,93121,91768],{"class":74},[68,93123,93124],{"class":70,"line":4204},[68,93125,93126],{"class":74},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[68,93128,93129],{"class":70,"line":4210},[68,93130,93131],{"class":74},"    \u002F\u002F 1.声明一个定时器变量\n",[68,93133,93134],{"class":70,"line":4216},[68,93135,93136],{"class":74},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[68,93138,93139],{"class":70,"line":4221},[68,93140,93141],{"class":74},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[68,93143,93144],{"class":70,"line":9547},[68,93145,93146],{"class":74},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[68,93148,93149],{"class":70,"line":9571},[68,93150,93151],{"class":74},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[68,93153,93154,93156,93159,93161,93163,93165,93167],{"class":70,"line":9576},[68,93155,71666],{"class":102},[68,93157,93158],{"class":587}," throttle",[68,93160,997],{"class":85},[68,93162,92213],{"class":6815},[68,93164,1002],{"class":85},[68,93166,2456],{"class":6815},[68,93168,14039],{"class":85},[68,93170,93171,93173],{"class":70,"line":9582},[68,93172,81349],{"class":102},[68,93174,92226],{"class":85},[68,93176,93177,93179,93181],{"class":70,"line":9609},[68,93178,75560],{"class":102},[68,93180,60502],{"class":102},[68,93182,56036],{"class":85},[68,93184,93185,93187,93189,93191],{"class":70,"line":9614},[68,93186,4097],{"class":102},[68,93188,3260],{"class":85},[68,93190,1962],{"class":102},[68,93192,93193],{"class":85},"timer) {\n",[68,93195,93196,93199,93201,93203,93205,93207],{"class":70,"line":9620},[68,93197,93198],{"class":85},"          timer ",[68,93200,869],{"class":102},[68,93202,92267],{"class":587},[68,93204,997],{"class":85},[68,93206,56033],{"class":102},[68,93208,56036],{"class":85},[68,93210,93211,93214],{"class":70,"line":9632},[68,93212,93213],{"class":587},"            fn",[68,93215,3577],{"class":85},[68,93217,93218],{"class":70,"line":9644},[68,93219,93220],{"class":74},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[68,93222,93223],{"class":70,"line":9656},[68,93224,93225],{"class":74},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[68,93227,93228,93231,93233],{"class":70,"line":11314},[68,93229,93230],{"class":85},"            timer ",[68,93232,869],{"class":102},[68,93234,93235],{"class":92}," null\n",[68,93237,93238],{"class":70,"line":11339},[68,93239,93240],{"class":74},"            \u002F\u002F 不能用clearTimeout(timer)\n",[68,93242,93243],{"class":70,"line":11362},[68,93244,93245],{"class":74},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[68,93247,93248],{"class":70,"line":11386},[68,93249,93250],{"class":85},"          }, t)\n",[68,93252,93253],{"class":70,"line":11391},[68,93254,4129],{"class":85},[68,93256,93257],{"class":70,"line":11396},[68,93258,53983],{"class":85},[68,93260,93261],{"class":70,"line":11401},[68,93262,3787],{"class":85},[68,93264,93265,93267,93269,93271,93273,93275,93277,93279,93281],{"class":70,"line":11410},[68,93266,91783],{"class":85},[68,93268,59397],{"class":587},[68,93270,997],{"class":85},[68,93272,91790],{"class":872},[68,93274,1002],{"class":85},[68,93276,92749],{"class":587},[68,93278,91799],{"class":85},[68,93280,66656],{"class":92},[68,93282,32090],{"class":85},[68,93284,93285,93287,93289],{"class":70,"line":11415},[68,93286,54002],{"class":85},[68,93288,53398],{"class":81},[68,93290,876],{"class":85},[68,93292,93293,93295,93297],{"class":70,"line":11421},[68,93294,886],{"class":85},[68,93296,53385],{"class":81},[68,93298,876],{"class":85},[68,93300,93301],{"class":70,"line":11442},[68,93302,4000],{"emptyLinePlaceholder":1679},[68,93304,93305,93307,93309],{"class":70,"line":11448},[68,93306,886],{"class":85},[68,93308,52228],{"class":81},[68,93310,876],{"class":85},[43,93312,93314],{"id":93313},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[58,93316,93318],{"className":54652,"code":93317,"language":54654,"meta":63,"style":63},"\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",[65,93319,93320,93328,93336,93341,93346,93351,93356,93360,93368],{"__ignoreMap":63},[68,93321,93322,93324,93326],{"class":70,"line":71},[68,93323,861],{"class":85},[68,93325,53385],{"class":81},[68,93327,876],{"class":85},[68,93329,93330,93332,93334],{"class":70,"line":78},[68,93331,53729],{"class":85},[68,93333,53398],{"class":81},[68,93335,876],{"class":85},[68,93337,93338],{"class":70,"line":89},[68,93339,93340],{"class":85},"    let timer = null\n",[68,93342,93343],{"class":70,"line":115},[68,93344,93345],{"class":85},"    timer = setTimeout(() => {\n",[68,93347,93348],{"class":70,"line":280},[68,93349,93350],{"class":85},"      clearTimeout(timer)\n",[68,93352,93353],{"class":70,"line":301},[68,93354,93355],{"class":85},"      console.log(timer)\n",[68,93357,93358],{"class":70,"line":320},[68,93359,61809],{"class":85},[68,93361,93362,93364,93366],{"class":70,"line":2915},[68,93363,54002],{"class":85},[68,93365,53398],{"class":81},[68,93367,876],{"class":85},[68,93369,93370,93372,93374],{"class":70,"line":2921},[68,93371,886],{"class":85},[68,93373,53385],{"class":81},[68,93375,876],{"class":85},[19,93377,93378],{},"输出为1",[19,93380,93381],{},"在开启的定时器里边写清除定时器",[19,93383,93384],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[43,93386,93388],{"id":93387},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93390,93391],{},"页面打开，可以记录上一次的视频播放位置",[19,93393,93394],{},[38,93395],{"alt":63,"src":93396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93398,93399],{},[38,93400],{"alt":63,"src":93401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[58,93403,93405],{"className":52226,"code":93404,"language":52228,"meta":63,"style":63},"\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",[65,93406,93407,93417,93431,93435,93443,93457,93477,93497,93519,93532,93540,93546,93556,93566,93576,93580,93584,93591,93604,93616,93620,93624,93634,93646,93660,93664,93668,93675,93685,93698,93710,93720,93730,93746,93758,93762,93766,93774,93784,93796,93806,93816,93826,93830,93834,93844,93855,93859,93867,93875,93879,93887,93902,93917,93932,93953,93961,93969,93984,94006,94014,94029,94055,94081,94107,94115,94123,94142,94150,94155,94174,94179,94197,94202,94207,94215,94220,94234,94242,94247,94264,94268,94273,94295,94299,94307,94315,94319],{"__ignoreMap":63},[68,93408,93409,93411,93413,93415],{"class":70,"line":71},[68,93410,52890],{"class":85},[68,93412,52893],{"class":81},[68,93414,52896],{"class":587},[68,93416,876],{"class":85},[68,93418,93419,93421,93423,93425,93427,93429],{"class":70,"line":78},[68,93420,861],{"class":85},[68,93422,52228],{"class":81},[68,93424,52907],{"class":587},[68,93426,869],{"class":85},[68,93428,52912],{"class":872},[68,93430,876],{"class":85},[68,93432,93433],{"class":70,"line":89},[68,93434,4000],{"emptyLinePlaceholder":1679},[68,93436,93437,93439,93441],{"class":70,"line":115},[68,93438,861],{"class":85},[68,93440,52925],{"class":81},[68,93442,876],{"class":85},[68,93444,93445,93447,93449,93451,93453,93455],{"class":70,"line":280},[68,93446,53729],{"class":85},[68,93448,52935],{"class":81},[68,93450,52938],{"class":587},[68,93452,869],{"class":85},[68,93454,52943],{"class":872},[68,93456,60711],{"class":85},[68,93458,93459,93461,93463,93465,93467,93469,93471,93473,93475],{"class":70,"line":301},[68,93460,53729],{"class":85},[68,93462,52935],{"class":81},[68,93464,52954],{"class":587},[68,93466,869],{"class":85},[68,93468,52959],{"class":872},[68,93470,52962],{"class":587},[68,93472,869],{"class":85},[68,93474,52967],{"class":872},[68,93476,60711],{"class":85},[68,93478,93479,93481,93483,93485,93487,93489,93491,93493,93495],{"class":70,"line":320},[68,93480,53729],{"class":85},[68,93482,52935],{"class":81},[68,93484,16516],{"class":587},[68,93486,869],{"class":85},[68,93488,52982],{"class":872},[68,93490,52962],{"class":587},[68,93492,869],{"class":85},[68,93494,52989],{"class":872},[68,93496,60711],{"class":85},[68,93498,93499,93501,93503,93505,93507,93510,93512,93514,93517],{"class":70,"line":2915},[68,93500,53729],{"class":85},[68,93502,52935],{"class":81},[68,93504,16516],{"class":587},[68,93506,869],{"class":85},[68,93508,93509],{"class":872},"\"referrer\"",[68,93511,52962],{"class":587},[68,93513,869],{"class":85},[68,93515,93516],{"class":872},"\"never\"",[68,93518,60711],{"class":85},[68,93520,93521,93523,93525,93528,93530],{"class":70,"line":2921},[68,93522,53729],{"class":85},[68,93524,52998],{"class":81},[68,93526,93527],{"class":85},">综合案例\u003C\u002F",[68,93529,52998],{"class":81},[68,93531,876],{"class":85},[68,93533,93534,93536,93538],{"class":70,"line":2933},[68,93535,53729],{"class":85},[68,93537,1652],{"class":81},[68,93539,876],{"class":85},[68,93541,93542,93544],{"class":70,"line":3214},[68,93543,8002],{"class":81},[68,93545,86],{"class":85},[68,93547,93548,93550,93552,93554],{"class":70,"line":3219},[68,93549,56279],{"class":92},[68,93551,96],{"class":85},[68,93553,600],{"class":92},[68,93555,112],{"class":85},[68,93557,93558,93560,93562,93564],{"class":70,"line":3225},[68,93559,56290],{"class":92},[68,93561,96],{"class":85},[68,93563,600],{"class":92},[68,93565,112],{"class":85},[68,93567,93568,93570,93572,93574],{"class":70,"line":3230},[68,93569,74174],{"class":92},[68,93571,96],{"class":85},[68,93573,62089],{"class":92},[68,93575,112],{"class":85},[68,93577,93578],{"class":70,"line":3244},[68,93579,3787],{"class":85},[68,93581,93582],{"class":70,"line":3249},[68,93583,4000],{"emptyLinePlaceholder":1679},[68,93585,93586,93589],{"class":70,"line":3255},[68,93587,93588],{"class":587},"    .container",[68,93590,86],{"class":85},[68,93592,93593,93595,93597,93600,93602],{"class":70,"line":3276},[68,93594,56355],{"class":92},[68,93596,96],{"class":85},[68,93598,93599],{"class":92},"1200",[68,93601,103],{"class":102},[68,93603,112],{"class":85},[68,93605,93606,93608,93610,93612,93614],{"class":70,"line":3281},[68,93607,56290],{"class":92},[68,93609,96],{"class":85},[68,93611,600],{"class":92},[68,93613,603],{"class":92},[68,93615,112],{"class":85},[68,93617,93618],{"class":70,"line":3295},[68,93619,3787],{"class":85},[68,93621,93622],{"class":70,"line":3300},[68,93623,4000],{"emptyLinePlaceholder":1679},[68,93625,93626,93629,93632],{"class":70,"line":3329},[68,93627,93628],{"class":587},"    .video",[68,93630,93631],{"class":81}," video",[68,93633,86],{"class":85},[68,93635,93636,93638,93640,93642,93644],{"class":70,"line":3334},[68,93637,56355],{"class":92},[68,93639,96],{"class":85},[68,93641,2047],{"class":92},[68,93643,2064],{"class":102},[68,93645,112],{"class":85},[68,93647,93648,93650,93652,93654,93656,93658],{"class":70,"line":3351},[68,93649,56279],{"class":92},[68,93651,96],{"class":85},[68,93653,2436],{"class":92},[68,93655,103],{"class":102},[68,93657,5692],{"class":92},[68,93659,112],{"class":85},[68,93661,93662],{"class":70,"line":3356},[68,93663,3787],{"class":85},[68,93665,93666],{"class":70,"line":3361},[68,93667,4000],{"emptyLinePlaceholder":1679},[68,93669,93670,93673],{"class":70,"line":3366},[68,93671,93672],{"class":587},"    .elevator",[68,93674,86],{"class":85},[68,93676,93677,93679,93681,93683],{"class":70,"line":3380},[68,93678,56343],{"class":92},[68,93680,96],{"class":85},[68,93682,87809],{"class":92},[68,93684,112],{"class":85},[68,93686,93687,93689,93691,93694,93696],{"class":70,"line":3385},[68,93688,56531],{"class":92},[68,93690,96],{"class":85},[68,93692,93693],{"class":92},"280",[68,93695,103],{"class":102},[68,93697,112],{"class":85},[68,93699,93700,93702,93704,93706,93708],{"class":70,"line":4177},[68,93701,88003],{"class":92},[68,93703,96],{"class":85},[68,93705,2436],{"class":92},[68,93707,103],{"class":102},[68,93709,112],{"class":85},[68,93711,93712,93714,93716,93718],{"class":70,"line":4191},[68,93713,87816],{"class":92},[68,93715,96],{"class":85},[68,93717,87821],{"class":92},[68,93719,112],{"class":85},[68,93721,93722,93724,93726,93728],{"class":70,"line":4199},[68,93723,63305],{"class":92},[68,93725,96],{"class":85},[68,93727,62426],{"class":92},[68,93729,112],{"class":85},[68,93731,93732,93734,93736,93738,93740,93742,93744],{"class":70,"line":4204},[68,93733,63561],{"class":92},[68,93735,96],{"class":85},[68,93737,99],{"class":92},[68,93739,103],{"class":102},[68,93741,106],{"class":92},[68,93743,63827],{"class":92},[68,93745,112],{"class":85},[68,93747,93748,93750,93752,93754,93756],{"class":70,"line":4210},[68,93749,56355],{"class":92},[68,93751,96],{"class":85},[68,93753,2643],{"class":92},[68,93755,103],{"class":102},[68,93757,112],{"class":85},[68,93759,93760],{"class":70,"line":4216},[68,93761,3787],{"class":85},[68,93763,93764],{"class":70,"line":4221},[68,93765,4000],{"emptyLinePlaceholder":1679},[68,93767,93768,93770,93772],{"class":70,"line":9547},[68,93769,93672],{"class":587},[68,93771,3002],{"class":81},[68,93773,86],{"class":85},[68,93775,93776,93778,93780,93782],{"class":70,"line":9571},[68,93777,56593],{"class":92},[68,93779,96],{"class":85},[68,93781,62453],{"class":92},[68,93783,112],{"class":85},[68,93785,93786,93788,93790,93792,93794],{"class":70,"line":9576},[68,93787,56279],{"class":92},[68,93789,96],{"class":85},[68,93791,2182],{"class":92},[68,93793,103],{"class":102},[68,93795,112],{"class":85},[68,93797,93798,93800,93802,93804],{"class":70,"line":9582},[68,93799,65553],{"class":92},[68,93801,96],{"class":85},[68,93803,56321],{"class":92},[68,93805,112],{"class":85},[68,93807,93808,93810,93812,93814],{"class":70,"line":9609},[68,93809,58870],{"class":92},[68,93811,96],{"class":85},[68,93813,53179],{"class":92},[68,93815,112],{"class":85},[68,93817,93818,93820,93822,93824],{"class":70,"line":9614},[68,93819,59000],{"class":92},[68,93821,96],{"class":85},[68,93823,63654],{"class":92},[68,93825,112],{"class":85},[68,93827,93828],{"class":70,"line":9620},[68,93829,3787],{"class":85},[68,93831,93832],{"class":70,"line":9632},[68,93833,4000],{"emptyLinePlaceholder":1679},[68,93835,93836,93838,93840,93842],{"class":70,"line":9644},[68,93837,93672],{"class":587},[68,93839,3002],{"class":81},[68,93841,65607],{"class":587},[68,93843,86],{"class":85},[68,93845,93846,93848,93850,93853],{"class":70,"line":9656},[68,93847,59000],{"class":92},[68,93849,96],{"class":85},[68,93851,93852],{"class":92},"#1286ff",[68,93854,112],{"class":85},[68,93856,93857],{"class":70,"line":11314},[68,93858,3787],{"class":85},[68,93860,93861,93863,93865],{"class":70,"line":11339},[68,93862,54002],{"class":85},[68,93864,1652],{"class":81},[68,93866,876],{"class":85},[68,93868,93869,93871,93873],{"class":70,"line":11362},[68,93870,886],{"class":85},[68,93872,52925],{"class":81},[68,93874,876],{"class":85},[68,93876,93877],{"class":70,"line":11386},[68,93878,4000],{"emptyLinePlaceholder":1679},[68,93880,93881,93883,93885],{"class":70,"line":11391},[68,93882,861],{"class":85},[68,93884,53385],{"class":81},[68,93886,876],{"class":85},[68,93888,93889,93891,93893,93895,93897,93900],{"class":70,"line":11396},[68,93890,53729],{"class":85},[68,93892,82],{"class":81},[68,93894,866],{"class":587},[68,93896,869],{"class":85},[68,93898,93899],{"class":872},"\"container\"",[68,93901,876],{"class":85},[68,93903,93904,93906,93908,93910,93912,93915],{"class":70,"line":11401},[68,93905,52932],{"class":85},[68,93907,82],{"class":81},[68,93909,866],{"class":587},[68,93911,869],{"class":85},[68,93913,93914],{"class":872},"\"header\"",[68,93916,876],{"class":85},[68,93918,93919,93921,93923,93925,93927,93930],{"class":70,"line":11410},[68,93920,56818],{"class":85},[68,93922,1974],{"class":81},[68,93924,62641],{"class":587},[68,93926,869],{"class":85},[68,93928,93929],{"class":872},"\"http:\u002F\u002Fpip.itcast.cn\"",[68,93931,876],{"class":85},[68,93933,93934,93936,93938,93940,93942,93945,93947,93949,93951],{"class":70,"line":11415},[68,93935,56886],{"class":85},[68,93937,38],{"class":81},[68,93939,56823],{"class":587},[68,93941,869],{"class":85},[68,93943,93944],{"class":872},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[68,93946,56831],{"class":587},[68,93948,869],{"class":85},[68,93950,9251],{"class":872},[68,93952,60711],{"class":85},[68,93954,93955,93957,93959],{"class":70,"line":11421},[68,93956,56991],{"class":85},[68,93958,1974],{"class":81},[68,93960,876],{"class":85},[68,93962,93963,93965,93967],{"class":70,"line":11442},[68,93964,53362],{"class":85},[68,93966,82],{"class":81},[68,93968,876],{"class":85},[68,93970,93971,93973,93975,93977,93979,93982],{"class":70,"line":11448},[68,93972,52932],{"class":85},[68,93974,82],{"class":81},[68,93976,866],{"class":587},[68,93978,869],{"class":85},[68,93980,93981],{"class":872},"\"video\"",[68,93983,876],{"class":85},[68,93985,93986,93988,93990,93992,93994,93997,94000,94002,94004],{"class":70,"line":11462},[68,93987,56818],{"class":85},[68,93989,29776],{"class":81},[68,93991,56823],{"class":587},[68,93993,869],{"class":85},[68,93995,93996],{"class":872},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[68,93998,93999],{"class":587}," controls",[68,94001,56898],{"class":85},[68,94003,29776],{"class":81},[68,94005,876],{"class":85},[68,94007,94008,94010,94012],{"class":70,"line":11468},[68,94009,53362],{"class":85},[68,94011,82],{"class":81},[68,94013,876],{"class":85},[68,94015,94016,94018,94020,94022,94024,94027],{"class":70,"line":11495},[68,94017,52932],{"class":85},[68,94019,82],{"class":81},[68,94021,866],{"class":587},[68,94023,869],{"class":85},[68,94025,94026],{"class":872},"\"elevator\"",[68,94028,876],{"class":85},[68,94030,94031,94033,94035,94037,94039,94041,94044,94046,94048,94051,94053],{"class":70,"line":11504},[68,94032,56818],{"class":85},[68,94034,1974],{"class":81},[68,94036,62641],{"class":587},[68,94038,869],{"class":85},[68,94040,65819],{"class":872},[68,94042,94043],{"class":587}," data-ref",[68,94045,869],{"class":85},[68,94047,93981],{"class":872},[68,94049,94050],{"class":85},">视频介绍\u003C\u002F",[68,94052,1974],{"class":81},[68,94054,876],{"class":85},[68,94056,94057,94059,94061,94063,94065,94067,94069,94071,94074,94077,94079],{"class":70,"line":11510},[68,94058,56818],{"class":85},[68,94060,1974],{"class":81},[68,94062,62641],{"class":587},[68,94064,869],{"class":85},[68,94066,65819],{"class":872},[68,94068,94043],{"class":587},[68,94070,869],{"class":85},[68,94072,94073],{"class":872},"\"intro\"",[68,94075,94076],{"class":85},">课程简介\u003C\u002F",[68,94078,1974],{"class":81},[68,94080,876],{"class":85},[68,94082,94083,94085,94087,94089,94091,94093,94095,94097,94100,94103,94105],{"class":70,"line":11518},[68,94084,56818],{"class":85},[68,94086,1974],{"class":81},[68,94088,62641],{"class":587},[68,94090,869],{"class":85},[68,94092,65819],{"class":872},[68,94094,94043],{"class":587},[68,94096,869],{"class":85},[68,94098,94099],{"class":872},"\"outline\"",[68,94101,94102],{"class":85},">评论列表\u003C\u002F",[68,94104,1974],{"class":81},[68,94106,876],{"class":85},[68,94108,94109,94111,94113],{"class":70,"line":11523},[68,94110,53362],{"class":85},[68,94112,82],{"class":81},[68,94114,876],{"class":85},[68,94116,94117,94119,94121],{"class":70,"line":18199},[68,94118,54002],{"class":85},[68,94120,82],{"class":81},[68,94122,876],{"class":85},[68,94124,94125,94127,94129,94131,94133,94136,94138,94140],{"class":70,"line":18205},[68,94126,53729],{"class":85},[68,94128,53398],{"class":81},[68,94130,56823],{"class":587},[68,94132,869],{"class":85},[68,94134,94135],{"class":872},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[68,94137,56898],{"class":85},[68,94139,53398],{"class":81},[68,94141,876],{"class":85},[68,94143,94144,94146,94148],{"class":70,"line":18228},[68,94145,53729],{"class":85},[68,94147,53398],{"class":81},[68,94149,876],{"class":85},[68,94151,94152],{"class":70,"line":18234},[68,94153,94154],{"class":74},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[68,94156,94157,94159,94161,94163,94165,94167,94169,94172],{"class":70,"line":18257},[68,94158,12819],{"class":102},[68,94160,93631],{"class":92},[68,94162,15161],{"class":102},[68,94164,55980],{"class":85},[68,94166,55983],{"class":587},[68,94168,997],{"class":85},[68,94170,94171],{"class":872},"'video'",[68,94173,1757],{"class":85},[68,94175,94176],{"class":70,"line":18271},[68,94177,94178],{"class":74},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[68,94180,94181,94184,94186,94188,94190,94193,94195],{"class":70,"line":18291},[68,94182,94183],{"class":85},"    video.ontimeupdate ",[68,94185,869],{"class":102},[68,94187,89931],{"class":85},[68,94189,92749],{"class":587},[68,94191,94192],{"class":85},"(() ",[68,94194,86299],{"class":102},[68,94196,86],{"class":85},[68,94198,94199],{"class":70,"line":18297},[68,94200,94201],{"class":74},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[68,94203,94204],{"class":70,"line":18308},[68,94205,94206],{"class":74},"      \u002F\u002F 控制台输出当前的时间\n",[68,94208,94209,94212],{"class":70,"line":18331},[68,94210,94211],{"class":74},"      \u002F\u002F console.log(video.currentTime)",[68,94213,94214],{"class":74},"  \u002F\u002F获得当前的视频时间\n",[68,94216,94217],{"class":70,"line":18353},[68,94218,94219],{"class":74},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[68,94221,94222,94224,94226,94228,94231],{"class":70,"line":18358},[68,94223,76261],{"class":85},[68,94225,73233],{"class":587},[68,94227,997],{"class":85},[68,94229,94230],{"class":872},"'currentTime'",[68,94232,94233],{"class":85},", video.currentTime)\n",[68,94235,94236,94238,94240],{"class":70,"line":18364},[68,94237,56119],{"class":85},[68,94239,8009],{"class":92},[68,94241,1757],{"class":85},[68,94243,94244],{"class":70,"line":18378},[68,94245,94246],{"class":74},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[68,94248,94249,94252,94255,94257,94260,94262],{"class":70,"line":18391},[68,94250,94251],{"class":85},"    video.",[68,94253,94254],{"class":587},"onloadeddata",[68,94256,15161],{"class":102},[68,94258,94259],{"class":85}," () ",[68,94261,86299],{"class":102},[68,94263,86],{"class":85},[68,94265,94266],{"class":70,"line":18396},[68,94267,61596],{"class":74},[68,94269,94270],{"class":70,"line":18410},[68,94271,94272],{"class":74},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[68,94274,94275,94278,94280,94283,94285,94287,94289,94291,94293],{"class":70,"line":18415},[68,94276,94277],{"class":85},"      video.currentTime ",[68,94279,869],{"class":102},[68,94281,94282],{"class":85}," localStorage.",[68,94284,73264],{"class":587},[68,94286,997],{"class":85},[68,94288,94230],{"class":872},[68,94290,15311],{"class":85},[68,94292,72936],{"class":102},[68,94294,48926],{"class":92},[68,94296,94297],{"class":70,"line":18421},[68,94298,3787],{"class":85},[68,94300,94301,94303,94305],{"class":70,"line":18426},[68,94302,54002],{"class":85},[68,94304,53398],{"class":81},[68,94306,876],{"class":85},[68,94308,94309,94311,94313],{"class":70,"line":18440},[68,94310,886],{"class":85},[68,94312,53385],{"class":81},[68,94314,876],{"class":85},[68,94316,94317],{"class":70,"line":18445},[68,94318,4000],{"emptyLinePlaceholder":1679},[68,94320,94321,94323,94325],{"class":70,"line":18450},[68,94322,886],{"class":85},[68,94324,52228],{"class":81},[68,94326,876],{"class":85},[1652,94328,94329],{},"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":63,"searchDepth":78,"depth":78,"links":94331},[94332,94337,94341,94342,94343,94348,94353,94354,94355,94356,94363,94368,94369,94379,94383,94384,94388],{"id":78269,"depth":78,"text":78270,"children":94333},[94334,94335,94336],{"id":78273,"depth":89,"text":78274},{"id":78298,"depth":89,"text":78299},{"id":78310,"depth":89,"text":78311},{"id":78322,"depth":78,"text":78323,"children":94338},[94339,94340],{"id":78326,"depth":89,"text":78327},{"id":78341,"depth":89,"text":78342},{"id":78393,"depth":78,"text":78394},{"id":78437,"depth":78,"text":78438},{"id":78454,"depth":78,"text":78455,"children":94344},[94345,94346,94347],{"id":78458,"depth":89,"text":78459},{"id":78471,"depth":89,"text":78472},{"id":78576,"depth":89,"text":78577},{"id":78865,"depth":78,"text":78866,"children":94349},[94350,94351,94352],{"id":78869,"depth":89,"text":78870},{"id":79312,"depth":89,"text":79313},{"id":79723,"depth":89,"text":79724},{"id":79786,"depth":78,"text":79787},{"id":79865,"depth":78,"text":79866},{"id":79958,"depth":78,"text":79959},{"id":81802,"depth":78,"text":81803,"children":94357},[94358,94359,94360,94361,94362],{"id":81806,"depth":89,"text":81807},{"id":81818,"depth":89,"text":81819},{"id":82037,"depth":89,"text":82038},{"id":82055,"depth":89,"text":82056},{"id":82115,"depth":89,"text":82116},{"id":86383,"depth":78,"text":86384,"children":94364},[94365,94366,94367],{"id":86387,"depth":89,"text":86388},{"id":86405,"depth":89,"text":86406},{"id":86431,"depth":89,"text":86432},{"id":86440,"depth":78,"text":86441},{"id":86462,"depth":78,"text":86463,"children":94370},[94371,94372,94373,94374,94375,94376,94377,94378],{"id":86466,"depth":89,"text":86467},{"id":86727,"depth":89,"text":86728},{"id":86913,"depth":89,"text":86914},{"id":87280,"depth":89,"text":87281},{"id":87396,"depth":89,"text":87397},{"id":87432,"depth":89,"text":87433},{"id":87479,"depth":89,"text":87480},{"id":87513,"depth":89,"text":87514},{"id":88875,"depth":78,"text":88876,"children":94380},[94381,94382],{"id":88879,"depth":89,"text":88880},{"id":88916,"depth":89,"text":88917},{"id":90271,"depth":78,"text":90272},{"id":90642,"depth":78,"text":90643,"children":94385},[94386,94387],{"id":90646,"depth":89,"text":90647},{"id":90680,"depth":89,"text":90681},{"id":91409,"depth":78,"text":91410,"children":94389},[94390,94391,94392,94393],{"id":91413,"depth":89,"text":91414},{"id":92371,"depth":89,"text":92372},{"id":93313,"depth":89,"text":93314},{"id":93387,"depth":89,"text":93388},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78258,"description":1676},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94400,"title":94401,"body":94402,"description":94413,"extension":1677,"meta":94414,"navigation":1679,"path":94416,"seo":94417,"stem":94418,"__hash__":94419},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94403,"toc":94411},[94404],[19,94405,94406,94407],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[1974,94408,94409],{"href":94409,"rel":94410},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25459],{"title":63,"searchDepth":78,"depth":78,"links":94412},[],"三件套第三套学习",{"category":94415},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94401,"description":94413},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94421,"title":94422,"body":94423,"description":1676,"extension":1677,"meta":94528,"navigation":1679,"path":94529,"seo":94530,"stem":94531,"__hash__":94532},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94424,"toc":94523},[94425,94432,94435,94438,94441,94445,94454,94457,94460,94464,94473,94476,94480,94483,94503,94506,94520],[19,94426,94427],{},[1974,94428,94431],{"href":94429,"rel":94430},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25459],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94433,94422],{"id":94434},"_1安装",[19,94436,94437],{},"numpy是科学计算基础库,底层是C语言",[19,94439,94440],{},"三种方式：",[14,94442,94444],{"id":94443},"_11-通过pip安装","1.1 通过pip安装",[58,94446,94448],{"className":31971,"code":94447,"language":31973,"meta":63,"style":63},"pip install numpy\n",[65,94449,94450],{"__ignoreMap":63},[68,94451,94452],{"class":70,"line":71},[68,94453,94447],{"class":85},[19,94455,94456],{},"首选方式，自动处理依赖项",[19,94458,94459],{},"在提示系统命令符中使用cmd",[14,94461,94463],{"id":94462},"_12-通过anaconda安装","1.2 通过Anaconda安装",[58,94465,94467],{"className":31971,"code":94466,"language":31973,"meta":63,"style":63},"conda install numpy\n",[65,94468,94469],{"__ignoreMap":63},[68,94470,94471],{"class":70,"line":71},[68,94472,94466],{"class":85},[19,94474,94475],{},"自动解决环境依赖",[14,94477,94479],{"id":94478},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94481,94482],{},"对于Debian\u002FUbuntu",[58,94484,94486],{"className":31971,"code":94485,"language":31973,"meta":63,"style":63},"sudo apt-get install python3-numpy\n",[65,94487,94488],{"__ignoreMap":63},[68,94489,94490,94493,94495,94498,94500],{"class":70,"line":71},[68,94491,94492],{"class":85},"sudo apt",[68,94494,2268],{"class":102},[68,94496,94497],{"class":85},"get install python3",[68,94499,2268],{"class":102},[68,94501,94502],{"class":85},"numpy\n",[19,94504,94505],{},"对于Fedora:",[58,94507,94509],{"className":31971,"code":94508,"language":31973,"meta":63,"style":63},"sudo dnf install python3-numpy\n",[65,94510,94511],{"__ignoreMap":63},[68,94512,94513,94516,94518],{"class":70,"line":71},[68,94514,94515],{"class":85},"sudo dnf install python3",[68,94517,2268],{"class":102},[68,94519,94502],{"class":85},[1652,94521,94522],{},"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":63,"searchDepth":78,"depth":78,"links":94524},[94525,94526,94527],{"id":94443,"depth":78,"text":94444},{"id":94462,"depth":78,"text":94463},{"id":94478,"depth":78,"text":94479},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94422,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94534,"title":94535,"body":94536,"description":1676,"extension":1677,"meta":94649,"navigation":1679,"path":94650,"seo":94651,"stem":94652,"__hash__":94653},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94537,"toc":94647},[94538,94541,94544,94547,94550,94553,94556,94559,94562,94565,94641,94644],[10,94539,94535],{"id":94540},"_10算数函数",[19,94542,94543],{},"加减乘除运算跟python基础语法没区别",[19,94545,94546],{},"除了python那种方法外还可以使用函数",[19,94548,94549],{},"加：np.add(a,b)",[19,94551,94552],{},"减：np.subtract(a,b)",[19,94554,94555],{},"乘：np.multiply(a,b)",[19,94557,94558],{},"除：np.divide(a,b) == a\u002Fb",[19,94560,94561],{},"取余：np.mod(a,b) == a%b",[19,94563,94564],{},"必须会的用法：",[58,94566,94568],{"className":31971,"code":94567,"language":31973,"meta":63,"style":63},"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",[65,94569,94570,94592,94613,94623,94636],{"__ignoreMap":63},[68,94571,94572,94574,94576,94579,94581,94584,94586,94588,94590],{"class":70,"line":71},[68,94573,1974],{"class":85},[68,94575,869],{"class":102},[68,94577,94578],{"class":85},"np.arange(",[68,94580,2156],{"class":92},[68,94582,94583],{"class":85},").reshape(",[68,94585,288],{"class":92},[68,94587,2114],{"class":85},[68,94589,288],{"class":92},[68,94591,1757],{"class":85},[68,94593,94594,94596,94598,94601,94603,94605,94607,94609,94611],{"class":70,"line":78},[68,94595,1999],{"class":85},[68,94597,869],{"class":102},[68,94599,94600],{"class":85},"np.array([",[68,94602,2182],{"class":92},[68,94604,2114],{"class":85},[68,94606,2182],{"class":92},[68,94608,2114],{"class":85},[68,94610,2182],{"class":92},[68,94612,6256],{"class":85},[68,94614,94615,94618,94620],{"class":70,"line":89},[68,94616,94617],{"class":85},"result",[68,94619,869],{"class":102},[68,94621,94622],{"class":85},"np.empty_like(a)\n",[68,94624,94625,94628,94631,94633],{"class":70,"line":115},[68,94626,94627],{"class":85},"np.add(a,b,",[68,94629,94630],{"class":6815},"out",[68,94632,869],{"class":102},[68,94634,94635],{"class":85},"result)\n",[68,94637,94638],{"class":70,"line":280},[68,94639,94640],{"class":85},"result\n",[19,94642,94643],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1652,94645,94646],{},"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":63,"searchDepth":78,"depth":78,"links":94648},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94535,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94655,"title":94656,"body":94657,"description":1676,"extension":1677,"meta":95419,"navigation":1679,"path":95420,"seo":95421,"stem":95422,"__hash__":95423},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94658,"toc":95406},[94659,94662,94665,94668,94672,94711,94715,94759,94819,94823,94826,94865,94868,94913,94917,94953,94957,95026,95030,95094,95098,95101,95104,95107,95110,95146,95150,95190,95194,95266,95269,95273,95336,95340,95403],[10,94660,94656],{"id":94661},"_11统计函数",[19,94663,94664],{},"sum max min mean",[19,94666,94667],{},"这些有axis参数，可以指定方向",[14,94669,94671],{"id":94670},"_111-sum求和函数","11.1 sum()求和函数",[58,94673,94675],{"className":31971,"code":94674,"language":31973,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[65,94676,94677,94682,94703],{"__ignoreMap":63},[68,94678,94679],{"class":70,"line":71},[68,94680,94681],{"class":74},"#创建一维数组\n",[68,94683,94684,94686,94688,94691,94693,94695,94697,94699,94701],{"class":70,"line":78},[68,94685,1974],{"class":85},[68,94687,869],{"class":102},[68,94689,94690],{"class":85},"np.random.randint(",[68,94692,99],{"class":92},[68,94694,2114],{"class":85},[68,94696,2047],{"class":92},[68,94698,2114],{"class":85},[68,94700,2436],{"class":92},[68,94702,1757],{"class":85},[68,94704,94705,94708],{"class":70,"line":89},[68,94706,94707],{"class":85},"np.sum(a)",[68,94709,94710],{"class":74},"#求和\n",[14,94712,94714],{"id":94713},"_112-max求最大值函数","11.2 max()求最大值函数",[58,94716,94718],{"className":31971,"code":94717,"language":31973,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[65,94719,94720,94724,94744,94749,94754],{"__ignoreMap":63},[68,94721,94722],{"class":70,"line":71},[68,94723,94681],{"class":74},[68,94725,94726,94728,94730,94732,94734,94736,94738,94740,94742],{"class":70,"line":78},[68,94727,1974],{"class":85},[68,94729,869],{"class":102},[68,94731,94690],{"class":85},[68,94733,99],{"class":92},[68,94735,2114],{"class":85},[68,94737,2047],{"class":92},[68,94739,2114],{"class":85},[68,94741,2436],{"class":92},[68,94743,1757],{"class":85},[68,94745,94746],{"class":70,"line":89},[68,94747,94748],{"class":85},"np.max(a)\n",[68,94750,94751],{"class":70,"line":115},[68,94752,94753],{"class":74},"#最大索引(求最大元素的索引)arg\n",[68,94755,94756],{"class":70,"line":280},[68,94757,94758],{"class":85},"np.argmax(a)\n",[58,94760,94762],{"className":31971,"code":94761,"language":31973,"meta":63,"style":63},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[65,94763,94764,94785,94805,94809],{"__ignoreMap":63},[68,94765,94766,94768,94770,94773,94775,94777,94779,94781,94783],{"class":70,"line":71},[68,94767,12517],{"class":85},[68,94769,869],{"class":102},[68,94771,94772],{"class":85}," np.array([",[68,94774,99],{"class":92},[68,94776,1002],{"class":85},[68,94778,2055],{"class":92},[68,94780,1002],{"class":85},[68,94782,288],{"class":92},[68,94784,6256],{"class":85},[68,94786,94787,94789,94791,94793,94795,94797,94799,94801,94803],{"class":70,"line":78},[68,94788,12543],{"class":85},[68,94790,869],{"class":102},[68,94792,94772],{"class":85},[68,94794,288],{"class":92},[68,94796,1002],{"class":85},[68,94798,267],{"class":92},[68,94800,1002],{"class":85},[68,94802,2029],{"class":92},[68,94804,6256],{"class":85},[68,94806,94807],{"class":70,"line":89},[68,94808,4000],{"emptyLinePlaceholder":1679},[68,94810,94811,94813,94816],{"class":70,"line":115},[68,94812,32008],{"class":92},[68,94814,94815],{"class":85},"(np.maximum(a, b))   ",[68,94817,94818],{"class":74},"# [3 5 4]，每个位置上取较大值\n",[14,94820,94822],{"id":94821},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94824,94825],{},"①一维数组：",[58,94827,94829],{"className":31971,"code":94828,"language":31973,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[65,94830,94831,94835,94855,94860],{"__ignoreMap":63},[68,94832,94833],{"class":70,"line":71},[68,94834,94681],{"class":74},[68,94836,94837,94839,94841,94843,94845,94847,94849,94851,94853],{"class":70,"line":78},[68,94838,1974],{"class":85},[68,94840,869],{"class":102},[68,94842,94690],{"class":85},[68,94844,99],{"class":92},[68,94846,2114],{"class":85},[68,94848,2047],{"class":92},[68,94850,2114],{"class":85},[68,94852,2436],{"class":92},[68,94854,1757],{"class":85},[68,94856,94857],{"class":70,"line":89},[68,94858,94859],{"class":74},"#求平均值\n",[68,94861,94862],{"class":70,"line":115},[68,94863,94864],{"class":85},"np.mean(a)\n",[19,94866,94867],{},"②二维数组",[58,94869,94871],{"className":31971,"code":94870,"language":31973,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[65,94872,94873,94878,94903,94908],{"__ignoreMap":63},[68,94874,94875],{"class":70,"line":71},[68,94876,94877],{"class":74},"#二维数组\n",[68,94879,94880,94883,94885,94887,94889,94891,94893,94895,94897,94899,94901],{"class":70,"line":78},[68,94881,94882],{"class":85},"aa",[68,94884,869],{"class":102},[68,94886,94578],{"class":85},[68,94888,99],{"class":92},[68,94890,2114],{"class":85},[68,94892,2259],{"class":92},[68,94894,94583],{"class":85},[68,94896,288],{"class":92},[68,94898,2114],{"class":85},[68,94900,2029],{"class":92},[68,94902,1757],{"class":85},[68,94904,94905],{"class":70,"line":89},[68,94906,94907],{"class":74},"#对数组中的所有数求平均\n",[68,94909,94910],{"class":70,"line":115},[68,94911,94912],{"class":85},"np.mean(aa)\n",[14,94914,94916],{"id":94915},"_114-median求中位数函数","11.4 median()求中位数函数",[58,94918,94920],{"className":31971,"code":94919,"language":31973,"meta":63,"style":63},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[65,94921,94922,94927,94943,94948],{"__ignoreMap":63},[68,94923,94924],{"class":70,"line":71},[68,94925,94926],{"class":74},"#求中位数\n",[68,94928,94929,94931,94933,94935,94937,94939,94941],{"class":70,"line":78},[68,94930,1999],{"class":85},[68,94932,869],{"class":102},[68,94934,94578],{"class":85},[68,94936,99],{"class":92},[68,94938,2114],{"class":85},[68,94940,2182],{"class":92},[68,94942,1757],{"class":85},[68,94944,94945],{"class":70,"line":89},[68,94946,94947],{"class":85},"np.median(b)\n",[68,94949,94950],{"class":70,"line":115},[68,94951,94952],{"class":74},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94954,94956],{"id":94955},"_115-power求幂运算函数","11.5 power()求幂运算函数",[58,94958,94960],{"className":31971,"code":94959,"language":31973,"meta":63,"style":63},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[65,94961,94962,94978,94983,94988,94997,95002,95011],{"__ignoreMap":63},[68,94963,94964,94966,94968,94970,94972,94974,94976],{"class":70,"line":71},[68,94965,1999],{"class":85},[68,94967,869],{"class":102},[68,94969,94578],{"class":85},[68,94971,99],{"class":92},[68,94973,2114],{"class":85},[68,94975,2182],{"class":92},[68,94977,1757],{"class":85},[68,94979,94980],{"class":70,"line":78},[68,94981,94982],{"class":74},"#幂运算\n",[68,94984,94985],{"class":70,"line":89},[68,94986,94987],{"class":74},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[68,94989,94990,94993,94995],{"class":70,"line":115},[68,94991,94992],{"class":85},"np.power(b,",[68,94994,267],{"class":92},[68,94996,1757],{"class":85},[68,94998,94999],{"class":70,"line":280},[68,95000,95001],{"class":74},"#或者以下代码，将数据存储起来\n",[68,95003,95004,95006,95008],{"class":70,"line":301},[68,95005,2581],{"class":85},[68,95007,869],{"class":102},[68,95009,95010],{"class":85},"np.empty_like(b)\n",[68,95012,95013,95015,95017,95019,95021,95023],{"class":70,"line":320},[68,95014,94992],{"class":85},[68,95016,267],{"class":92},[68,95018,2114],{"class":85},[68,95020,94630],{"class":6815},[68,95022,869],{"class":102},[68,95024,95025],{"class":85},"y)\n",[14,95027,95029],{"id":95028},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[58,95031,95033],{"className":31971,"code":95032,"language":31973,"meta":63,"style":63},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[65,95034,95035,95051,95056,95061,95065,95083],{"__ignoreMap":63},[68,95036,95037,95039,95041,95043,95045,95047,95049],{"class":70,"line":71},[68,95038,1999],{"class":85},[68,95040,869],{"class":102},[68,95042,94578],{"class":85},[68,95044,99],{"class":92},[68,95046,2114],{"class":85},[68,95048,2182],{"class":92},[68,95050,1757],{"class":85},[68,95052,95053],{"class":70,"line":78},[68,95054,95055],{"class":74},"#开方\n",[68,95057,95058],{"class":70,"line":89},[68,95059,95060],{"class":85},"np.sqrt(b)\n",[68,95062,95063],{"class":70,"line":115},[68,95064,95001],{"class":74},[68,95066,95067,95069,95071,95074,95077,95079,95081],{"class":70,"line":280},[68,95068,2581],{"class":85},[68,95070,869],{"class":102},[68,95072,95073],{"class":85},"np.empty_like(b,",[68,95075,95076],{"class":6815},"dtype",[68,95078,869],{"class":102},[68,95080,1790],{"class":92},[68,95082,1757],{"class":85},[68,95084,95085,95088,95090,95092],{"class":70,"line":301},[68,95086,95087],{"class":85},"np.sqrt(b,",[68,95089,94630],{"class":6815},[68,95091,869],{"class":102},[68,95093,95025],{"class":85},[14,95095,95097],{"id":95096},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95099,95100],{},"对数组中的元素累计求和，可指定轴",[19,95102,95103],{},"#累计求和的意思是：",[19,95105,95106],{},"a = np.array([1, 2, 3, 4])",[19,95108,95109],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[58,95111,95113],{"className":31971,"code":95112,"language":31973,"meta":63,"style":63},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[65,95114,95115,95131,95136,95141],{"__ignoreMap":63},[68,95116,95117,95119,95121,95123,95125,95127,95129],{"class":70,"line":71},[68,95118,1999],{"class":85},[68,95120,869],{"class":102},[68,95122,94578],{"class":85},[68,95124,99],{"class":92},[68,95126,2114],{"class":85},[68,95128,2182],{"class":92},[68,95130,1757],{"class":85},[68,95132,95133],{"class":70,"line":78},[68,95134,95135],{"class":85},"np.cumsum(b)\n",[68,95137,95138],{"class":70,"line":89},[68,95139,95140],{"class":74},"#结果：\n",[68,95142,95143],{"class":70,"line":115},[68,95144,95145],{"class":74},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95147,95149],{"id":95148},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[58,95151,95153],{"className":31971,"code":95152,"language":31973,"meta":63,"style":63},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[65,95154,95155,95171,95176,95181,95185],{"__ignoreMap":63},[68,95156,95157,95159,95161,95163,95165,95167,95169],{"class":70,"line":71},[68,95158,1999],{"class":85},[68,95160,869],{"class":102},[68,95162,94578],{"class":85},[68,95164,99],{"class":92},[68,95166,2114],{"class":85},[68,95168,2182],{"class":92},[68,95170,1757],{"class":85},[68,95172,95173],{"class":70,"line":78},[68,95174,95175],{"class":74},"#对数组中的元素累计求积，可指定轴\n",[68,95177,95178],{"class":70,"line":89},[68,95179,95180],{"class":85},"np.cumprod(b)\n",[68,95182,95183],{"class":70,"line":115},[68,95184,95140],{"class":74},[68,95186,95187],{"class":70,"line":280},[68,95188,95189],{"class":74},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95191,95193],{"id":95192},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[58,95195,95197],{"className":31971,"code":95196,"language":31973,"meta":63,"style":63},"#删除数组中的重复数据，并对数据进行排序\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",[65,95198,95199,95204,95252,95257,95261],{"__ignoreMap":63},[68,95200,95201],{"class":70,"line":71},[68,95202,95203],{"class":74},"#删除数组中的重复数据，并对数据进行排序\n",[68,95205,95206,95208,95210,95212,95214,95216,95218,95220,95222,95224,95226,95228,95230,95232,95234,95236,95238,95240,95242,95244,95246,95248,95250],{"class":70,"line":78},[68,95207,1974],{"class":85},[68,95209,869],{"class":102},[68,95211,94600],{"class":85},[68,95213,99],{"class":92},[68,95215,2114],{"class":85},[68,95217,267],{"class":92},[68,95219,2114],{"class":85},[68,95221,288],{"class":92},[68,95223,2114],{"class":85},[68,95225,2234],{"class":92},[68,95227,2114],{"class":85},[68,95229,288],{"class":92},[68,95231,2114],{"class":85},[68,95233,2182],{"class":92},[68,95235,2114],{"class":85},[68,95237,1934],{"class":92},[68,95239,2114],{"class":85},[68,95241,600],{"class":92},[68,95243,2114],{"class":85},[68,95245,2511],{"class":92},[68,95247,2114],{"class":85},[68,95249,2029],{"class":92},[68,95251,6256],{"class":85},[68,95253,95254],{"class":70,"line":89},[68,95255,95256],{"class":85},"np.unique(a)\n",[68,95258,95259],{"class":70,"line":115},[68,95260,95140],{"class":74},[68,95262,95263],{"class":70,"line":280},[68,95264,95265],{"class":74},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95267,95268],{},"升序形式排序",[14,95270,95272],{"id":95271},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[58,95274,95276],{"className":31971,"code":95275,"language":31973,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[65,95277,95278,95326,95331],{"__ignoreMap":63},[68,95279,95280,95282,95284,95286,95288,95290,95292,95294,95296,95298,95300,95302,95304,95306,95308,95310,95312,95314,95316,95318,95320,95322,95324],{"class":70,"line":71},[68,95281,1974],{"class":85},[68,95283,869],{"class":102},[68,95285,94600],{"class":85},[68,95287,99],{"class":92},[68,95289,2114],{"class":85},[68,95291,267],{"class":92},[68,95293,2114],{"class":85},[68,95295,288],{"class":92},[68,95297,2114],{"class":85},[68,95299,2234],{"class":92},[68,95301,2114],{"class":85},[68,95303,288],{"class":92},[68,95305,2114],{"class":85},[68,95307,2182],{"class":92},[68,95309,2114],{"class":85},[68,95311,1934],{"class":92},[68,95313,2114],{"class":85},[68,95315,600],{"class":92},[68,95317,2114],{"class":85},[68,95319,2511],{"class":92},[68,95321,2114],{"class":85},[68,95323,2029],{"class":92},[68,95325,6256],{"class":85},[68,95327,95328],{"class":70,"line":78},[68,95329,95330],{"class":74},"#返回数组中非零元素的索引\n",[68,95332,95333],{"class":70,"line":89},[68,95334,95335],{"class":85},"np.nonzero(a)\n",[14,95337,95339],{"id":95338},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[58,95341,95343],{"className":31971,"code":95342,"language":31973,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[65,95344,95345,95393,95398],{"__ignoreMap":63},[68,95346,95347,95349,95351,95353,95355,95357,95359,95361,95363,95365,95367,95369,95371,95373,95375,95377,95379,95381,95383,95385,95387,95389,95391],{"class":70,"line":71},[68,95348,1974],{"class":85},[68,95350,869],{"class":102},[68,95352,94600],{"class":85},[68,95354,99],{"class":92},[68,95356,2114],{"class":85},[68,95358,267],{"class":92},[68,95360,2114],{"class":85},[68,95362,288],{"class":92},[68,95364,2114],{"class":85},[68,95366,2234],{"class":92},[68,95368,2114],{"class":85},[68,95370,288],{"class":92},[68,95372,2114],{"class":85},[68,95374,2182],{"class":92},[68,95376,2114],{"class":85},[68,95378,1934],{"class":92},[68,95380,2114],{"class":85},[68,95382,600],{"class":92},[68,95384,2114],{"class":85},[68,95386,2511],{"class":92},[68,95388,2114],{"class":85},[68,95390,2029],{"class":92},[68,95392,6256],{"class":85},[68,95394,95395],{"class":70,"line":78},[68,95396,95397],{"class":74},"#计算一组数中最大值与最小值的差，可指定轴\n",[68,95399,95400],{"class":70,"line":89},[68,95401,95402],{"class":85},"np.ptp(a)\n",[1652,95404,95405],{},"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":63,"searchDepth":78,"depth":78,"links":95407},[95408,95409,95410,95411,95412,95413,95414,95415,95416,95417,95418],{"id":94670,"depth":78,"text":94671},{"id":94713,"depth":78,"text":94714},{"id":94821,"depth":78,"text":94822},{"id":94915,"depth":78,"text":94916},{"id":94955,"depth":78,"text":94956},{"id":95028,"depth":78,"text":95029},{"id":95096,"depth":78,"text":95097},{"id":95148,"depth":78,"text":95149},{"id":95192,"depth":78,"text":95193},{"id":95271,"depth":78,"text":95272},{"id":95338,"depth":78,"text":95339},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94656,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95425,"title":95426,"body":95427,"description":1676,"extension":1677,"meta":96082,"navigation":1679,"path":96083,"seo":96084,"stem":96085,"__hash__":96086},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95428,"toc":96070},[95429,95432,95436,95439,95655,95659,95662,95871,95875,95941,95946,95950,95953,95956,95994,95998,96001,96006,96010,96013,96016,96021,96025,96028,96032,96035,96038,96043,96047,96050,96053,96058,96062,96067],[10,95430,95426],{"id":95431},"_12其他常用函数",[14,95433,95435],{"id":95434},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95437,95438],{},"将数组的数据按照行列复制扩展",[58,95440,95442],{"className":31971,"code":95441,"language":31973,"meta":63,"style":63},"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",[65,95443,95444,95460,95469,95473,95478,95483,95496,95500,95505,95510,95515,95519,95524,95548,95560,95564,95568,95573,95578,95583,95588,95592,95605,95609,95613,95618,95623,95628,95633,95638,95642,95646,95651],{"__ignoreMap":63},[68,95445,95446,95448,95450,95452,95454,95456,95458],{"class":70,"line":71},[68,95447,1974],{"class":85},[68,95449,869],{"class":102},[68,95451,94578],{"class":85},[68,95453,99],{"class":92},[68,95455,2114],{"class":85},[68,95457,2055],{"class":92},[68,95459,1757],{"class":85},[68,95461,95462,95465,95467],{"class":70,"line":78},[68,95463,95464],{"class":85},"np.tile(a,",[68,95466,267],{"class":92},[68,95468,1757],{"class":85},[68,95470,95471],{"class":70,"line":89},[68,95472,95140],{"class":74},[68,95474,95475],{"class":70,"line":115},[68,95476,95477],{"class":74},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[68,95479,95480],{"class":70,"line":280},[68,95481,95482],{"class":74},"#行复制两次，列复制三次\n",[68,95484,95485,95488,95490,95492,95494],{"class":70,"line":301},[68,95486,95487],{"class":85},"np.tile(a,(",[68,95489,267],{"class":92},[68,95491,2114],{"class":85},[68,95493,288],{"class":92},[68,95495,32090],{"class":85},[68,95497,95498],{"class":70,"line":320},[68,95499,95140],{"class":74},[68,95501,95502],{"class":70,"line":2915},[68,95503,95504],{"class":872},"'''\n",[68,95506,95507],{"class":70,"line":2921},[68,95508,95509],{"class":872},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[68,95511,95512],{"class":70,"line":2933},[68,95513,95514],{"class":872},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[68,95516,95517],{"class":70,"line":3214},[68,95518,95504],{"class":872},[68,95520,95521],{"class":70,"line":3219},[68,95522,95523],{"class":74},"#创建二维数组\n",[68,95525,95526,95528,95530,95532,95534,95536,95538,95540,95542,95544,95546],{"class":70,"line":3225},[68,95527,94882],{"class":85},[68,95529,869],{"class":102},[68,95531,94578],{"class":85},[68,95533,99],{"class":92},[68,95535,2114],{"class":85},[68,95537,2259],{"class":92},[68,95539,94583],{"class":85},[68,95541,2029],{"class":92},[68,95543,2114],{"class":85},[68,95545,288],{"class":92},[68,95547,1757],{"class":85},[68,95549,95550,95553,95555,95557],{"class":70,"line":3230},[68,95551,95552],{"class":85},"np.tile(aa,",[68,95554,267],{"class":92},[68,95556,2165],{"class":85},[68,95558,95559],{"class":74},"#一个数的时候就是行\n",[68,95561,95562],{"class":70,"line":3244},[68,95563,95140],{"class":74},[68,95565,95566],{"class":70,"line":3249},[68,95567,95504],{"class":872},[68,95569,95570],{"class":70,"line":3255},[68,95571,95572],{"class":872},"array([[ 1,  2,  3,  1,  2,  3],\n",[68,95574,95575],{"class":70,"line":3276},[68,95576,95577],{"class":872},"       [ 4,  5,  6,  4,  5,  6],\n",[68,95579,95580],{"class":70,"line":3281},[68,95581,95582],{"class":872},"       [ 7,  8,  9,  7,  8,  9],\n",[68,95584,95585],{"class":70,"line":3295},[68,95586,95587],{"class":872},"       [10, 11, 12, 10, 11, 12]])\n",[68,95589,95590],{"class":70,"line":3300},[68,95591,95504],{"class":872},[68,95593,95594,95597,95599,95601,95603],{"class":70,"line":3329},[68,95595,95596],{"class":85},"np.tile(aa,(",[68,95598,267],{"class":92},[68,95600,2114],{"class":85},[68,95602,288],{"class":92},[68,95604,32090],{"class":85},[68,95606,95607],{"class":70,"line":3334},[68,95608,95140],{"class":74},[68,95610,95611],{"class":70,"line":3351},[68,95612,95504],{"class":872},[68,95614,95615],{"class":70,"line":3356},[68,95616,95617],{"class":872},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[68,95619,95620],{"class":70,"line":3361},[68,95621,95622],{"class":872},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[68,95624,95625],{"class":70,"line":3366},[68,95626,95627],{"class":872},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[68,95629,95630],{"class":70,"line":3380},[68,95631,95632],{"class":872},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[68,95634,95635],{"class":70,"line":3385},[68,95636,95637],{"class":872},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[68,95639,95640],{"class":70,"line":4177},[68,95641,95622],{"class":872},[68,95643,95644],{"class":70,"line":4191},[68,95645,95627],{"class":872},[68,95647,95648],{"class":70,"line":4199},[68,95649,95650],{"class":872},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[68,95652,95653],{"class":70,"line":4204},[68,95654,95504],{"class":872},[14,95656,95658],{"id":95657},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95660,95661],{},"repeat()将数组中的每个元素重复若干次",[58,95663,95665],{"className":31971,"code":95664,"language":31973,"meta":63,"style":63},"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",[65,95666,95667,95683,95692,95696,95701,95725,95730,95739,95743,95748,95752,95757,95773,95777,95781,95786,95791,95796,95800,95805,95809,95814,95819,95823,95839,95843,95847,95852,95857,95862,95867],{"__ignoreMap":63},[68,95668,95669,95671,95673,95675,95677,95679,95681],{"class":70,"line":71},[68,95670,1974],{"class":85},[68,95672,869],{"class":102},[68,95674,94578],{"class":85},[68,95676,99],{"class":92},[68,95678,2114],{"class":85},[68,95680,2055],{"class":92},[68,95682,1757],{"class":85},[68,95684,95685,95688,95690],{"class":70,"line":78},[68,95686,95687],{"class":85},"np.repeat(a,",[68,95689,288],{"class":92},[68,95691,1757],{"class":85},[68,95693,95694],{"class":70,"line":89},[68,95695,95140],{"class":74},[68,95697,95698],{"class":70,"line":115},[68,95699,95700],{"class":74},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[68,95702,95703,95705,95707,95709,95711,95713,95715,95717,95719,95721,95723],{"class":70,"line":280},[68,95704,94882],{"class":85},[68,95706,869],{"class":102},[68,95708,94578],{"class":85},[68,95710,99],{"class":92},[68,95712,2114],{"class":85},[68,95714,2259],{"class":92},[68,95716,94583],{"class":85},[68,95718,2029],{"class":92},[68,95720,2114],{"class":85},[68,95722,288],{"class":92},[68,95724,1757],{"class":85},[68,95726,95727],{"class":70,"line":301},[68,95728,95729],{"class":74},"#这个重复之后二维变成一维\n",[68,95731,95732,95735,95737],{"class":70,"line":320},[68,95733,95734],{"class":85},"np.repeat(aa,",[68,95736,267],{"class":92},[68,95738,1757],{"class":85},[68,95740,95741],{"class":70,"line":2915},[68,95742,95504],{"class":872},[68,95744,95745],{"class":70,"line":2921},[68,95746,95747],{"class":872},"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",[68,95749,95750],{"class":70,"line":2933},[68,95751,95504],{"class":872},[68,95753,95754],{"class":70,"line":3214},[68,95755,95756],{"class":74},"#指定axis\n",[68,95758,95759,95761,95763,95765,95767,95769,95771],{"class":70,"line":3219},[68,95760,95734],{"class":85},[68,95762,267],{"class":92},[68,95764,2114],{"class":85},[68,95766,49107],{"class":6815},[68,95768,869],{"class":102},[68,95770,600],{"class":92},[68,95772,1757],{"class":85},[68,95774,95775],{"class":70,"line":3225},[68,95776,95140],{"class":74},[68,95778,95779],{"class":70,"line":3230},[68,95780,95504],{"class":872},[68,95782,95783],{"class":70,"line":3244},[68,95784,95785],{"class":872},"array([[ 1,  2,  3],\n",[68,95787,95788],{"class":70,"line":3249},[68,95789,95790],{"class":872},"       [ 1,  2,  3],\n",[68,95792,95793],{"class":70,"line":3255},[68,95794,95795],{"class":872},"       [ 4,  5,  6],\n",[68,95797,95798],{"class":70,"line":3276},[68,95799,95795],{"class":872},[68,95801,95802],{"class":70,"line":3281},[68,95803,95804],{"class":872},"       [ 7,  8,  9],\n",[68,95806,95807],{"class":70,"line":3295},[68,95808,95804],{"class":872},[68,95810,95811],{"class":70,"line":3300},[68,95812,95813],{"class":872},"       [10, 11, 12],\n",[68,95815,95816],{"class":70,"line":3329},[68,95817,95818],{"class":872},"       [10, 11, 12]])\n",[68,95820,95821],{"class":70,"line":3334},[68,95822,95504],{"class":872},[68,95824,95825,95827,95829,95831,95833,95835,95837],{"class":70,"line":3351},[68,95826,95734],{"class":85},[68,95828,267],{"class":92},[68,95830,2114],{"class":85},[68,95832,49107],{"class":6815},[68,95834,869],{"class":102},[68,95836,99],{"class":92},[68,95838,1757],{"class":85},[68,95840,95841],{"class":70,"line":3356},[68,95842,95140],{"class":74},[68,95844,95845],{"class":70,"line":3361},[68,95846,95504],{"class":872},[68,95848,95849],{"class":70,"line":3366},[68,95850,95851],{"class":872},"array([[ 1,  1,  2,  2,  3,  3],\n",[68,95853,95854],{"class":70,"line":3380},[68,95855,95856],{"class":872},"       [ 4,  4,  5,  5,  6,  6],\n",[68,95858,95859],{"class":70,"line":3385},[68,95860,95861],{"class":872},"       [ 7,  7,  8,  8,  9,  9],\n",[68,95863,95864],{"class":70,"line":4177},[68,95865,95866],{"class":872},"       [10, 10, 11, 11, 12, 12]])\n",[68,95868,95869],{"class":70,"line":4191},[68,95870,95504],{"class":872},[14,95872,95874],{"id":95873},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[58,95876,95878],{"className":31971,"code":95877,"language":31973,"meta":63,"style":63},"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",[65,95879,95880,95896,95901,95913,95917,95922,95932,95936],{"__ignoreMap":63},[68,95881,95882,95884,95886,95888,95890,95892,95894],{"class":70,"line":71},[68,95883,1974],{"class":85},[68,95885,869],{"class":102},[68,95887,94578],{"class":85},[68,95889,99],{"class":92},[68,95891,2114],{"class":85},[68,95893,2055],{"class":92},[68,95895,1757],{"class":85},[68,95897,95898],{"class":70,"line":78},[68,95899,95900],{"class":74},"#array([，2，3，4])\n",[68,95902,95903,95906,95908,95910],{"class":70,"line":89},[68,95904,95905],{"class":85},"np.roll(a,",[68,95907,267],{"class":92},[68,95909,2165],{"class":85},[68,95911,95912],{"class":74},"#传正数向后调多少位，传负数向前调多少位\n",[68,95914,95915],{"class":70,"line":115},[68,95916,95140],{"class":74},[68,95918,95919],{"class":70,"line":280},[68,95920,95921],{"class":74},"#array([3, 4, 1, 2])\n",[68,95923,95924,95926,95928,95930],{"class":70,"line":301},[68,95925,95905],{"class":85},[68,95927,2268],{"class":102},[68,95929,99],{"class":92},[68,95931,1757],{"class":85},[68,95933,95934],{"class":70,"line":320},[68,95935,95140],{"class":74},[68,95937,95938],{"class":70,"line":2915},[68,95939,95940],{"class":74},"#array([2, 3, 4, 1])\n",[19,95942,95943],{},[38,95944],{"alt":63,"src":95945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95947,95949],{"id":95948},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95951,95952],{},"resize()重新调整数组的大小",[19,95954,95955],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[58,95957,95959],{"className":31971,"code":95958,"language":31973,"meta":63,"style":63},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[65,95960,95961,95966,95979],{"__ignoreMap":63},[68,95962,95963],{"class":70,"line":71},[68,95964,95965],{"class":74},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[68,95967,95968,95971,95973,95975,95977],{"class":70,"line":78},[68,95969,95970],{"class":85},"np.resize(aa,(",[68,95972,267],{"class":92},[68,95974,2114],{"class":85},[68,95976,2080],{"class":92},[68,95978,32090],{"class":85},[68,95980,95981,95983,95985,95987,95989,95991],{"class":70,"line":89},[68,95982,95970],{"class":85},[68,95984,267],{"class":92},[68,95986,2114],{"class":85},[68,95988,2156],{"class":92},[68,95990,84348],{"class":85},[68,95992,95993],{"class":74},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95995,95997],{"id":95996},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95999,96000],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96002,96003],{},[38,96004],{"alt":63,"src":96005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96007,96009],{"id":96008},"_126-保存加载文件","12.6 保存加载文件",[19,96011,96012],{},"savetxt():将数据保存到txt文件中",[19,96014,96015],{},"loadtxt():从文件加载数据",[19,96017,96018],{},[38,96019],{"alt":63,"src":96020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96022,96024],{"id":96023},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96026,96027],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96029,96031],{"id":96030},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96033,96034],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96036,96037],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96039,96040],{},[38,96041],{"alt":63,"src":96042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96044,96046],{"id":96045},"_129-where语句","12.9 where语句",[19,96048,96049],{},"np.where(条件,x,y)",[19,96051,96052],{},"如果条件为True,对应值为x,否则对应值为y",[19,96054,96055],{},[38,96056],{"alt":63,"src":96057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96059,96061],{"id":96060},"_1210-dot矩阵","12.10 dot()矩阵",[19,96063,96064],{},[38,96065],{"alt":63,"src":96066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1652,96068,96069],{},"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":63,"searchDepth":78,"depth":78,"links":96071},[96072,96073,96074,96075,96076,96077,96078,96079,96080,96081],{"id":95434,"depth":78,"text":95435},{"id":95657,"depth":78,"text":95658},{"id":95873,"depth":78,"text":95874},{"id":95948,"depth":78,"text":95949},{"id":95996,"depth":78,"text":95997},{"id":96008,"depth":78,"text":96009},{"id":96023,"depth":78,"text":96024},{"id":96030,"depth":78,"text":96031},{"id":96045,"depth":78,"text":96046},{"id":96060,"depth":78,"text":96061},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95426,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96088,"title":96089,"body":96090,"description":1676,"extension":1677,"meta":96443,"navigation":1679,"path":96444,"seo":96445,"stem":96446,"__hash__":96447},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96091,"toc":96441},[96092,96095,96098,96101,96104,96107,96172,96174,96438],[10,96093,96089],{"id":96094},"_13数组排序",[19,96096,96097],{},"排序主要用到的方法是np.sort和np.argsort",[19,96099,96100],{},"其中np.sort()对数组直接排序",[19,96102,96103],{},"而np.argsort()是返回排序后的原始索引",[19,96105,96106],{},"①一维数组",[58,96108,96110],{"className":31971,"code":96109,"language":31973,"meta":63,"style":63},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[65,96111,96112,96116,96156,96164],{"__ignoreMap":63},[68,96113,96114],{"class":70,"line":71},[68,96115,94681],{"class":74},[68,96117,96118,96120,96122,96124,96126,96128,96130,96132,96134,96136,96138,96140,96142,96144,96146,96148,96150,96152,96154],{"class":70,"line":78},[68,96119,1974],{"class":85},[68,96121,869],{"class":102},[68,96123,94600],{"class":85},[68,96125,288],{"class":92},[68,96127,2114],{"class":85},[68,96129,2234],{"class":92},[68,96131,2114],{"class":85},[68,96133,2131],{"class":92},[68,96135,2114],{"class":85},[68,96137,2511],{"class":92},[68,96139,2114],{"class":85},[68,96141,2015],{"class":92},[68,96143,2114],{"class":85},[68,96145,2629],{"class":92},[68,96147,2114],{"class":85},[68,96149,2080],{"class":92},[68,96151,2114],{"class":85},[68,96153,2182],{"class":92},[68,96155,6256],{"class":85},[68,96157,96158,96161],{"class":70,"line":89},[68,96159,96160],{"class":85},"np.sort(a)",[68,96162,96163],{"class":74},"#升序排序\n",[68,96165,96166,96169],{"class":70,"line":115},[68,96167,96168],{"class":85},"np.argsort(a)",[68,96170,96171],{"class":74},"#按照元素大小来索引排序\n",[19,96173,94867],{},[58,96175,96177],{"className":31971,"code":96176,"language":31973,"meta":63,"style":63},"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",[65,96178,96179,96191,96217,96222,96226,96231,96236,96241,96246,96250,96258,96262,96267,96272,96277,96282,96286,96291,96304,96308,96313,96318,96323,96328,96332,96337,96349,96353,96357,96361,96365,96369,96373,96378,96393,96398,96407,96412,96416,96420,96425,96429,96434],{"__ignoreMap":63},[68,96180,96181,96184,96186,96188],{"class":70,"line":71},[68,96182,96183],{"class":85},"np.random.seed(",[68,96185,600],{"class":92},[68,96187,2165],{"class":85},[68,96189,96190],{"class":74},"#保证每次值一样\n",[68,96192,96193,96195,96197,96199,96201,96203,96205,96207,96209,96211,96213,96215],{"class":70,"line":78},[68,96194,94882],{"class":85},[68,96196,869],{"class":102},[68,96198,94690],{"class":85},[68,96200,2047],{"class":92},[68,96202,2114],{"class":85},[68,96204,33089],{"class":6815},[68,96206,869],{"class":102},[68,96208,997],{"class":85},[68,96210,2029],{"class":92},[68,96212,2114],{"class":85},[68,96214,2080],{"class":92},[68,96216,32090],{"class":85},[68,96218,96219],{"class":70,"line":89},[68,96220,96221],{"class":74},"#原数组：\n",[68,96223,96224],{"class":70,"line":115},[68,96225,95504],{"class":872},[68,96227,96228],{"class":70,"line":280},[68,96229,96230],{"class":872},"array([[44, 47, 64, 67, 67,  9],\n",[68,96232,96233],{"class":70,"line":301},[68,96234,96235],{"class":872},"       [83, 21, 36, 87, 70, 88],\n",[68,96237,96238],{"class":70,"line":320},[68,96239,96240],{"class":872},"       [88, 12, 58, 65, 39, 87],\n",[68,96242,96243],{"class":70,"line":2915},[68,96244,96245],{"class":872},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[68,96247,96248],{"class":70,"line":2921},[68,96249,95504],{"class":872},[68,96251,96252,96255],{"class":70,"line":2933},[68,96253,96254],{"class":85},"np.sort(aa)",[68,96256,96257],{"class":74},"#每行进行了排序\n",[68,96259,96260],{"class":70,"line":3214},[68,96261,95504],{"class":872},[68,96263,96264],{"class":70,"line":3219},[68,96265,96266],{"class":872},"array([[ 9, 44, 47, 64, 67, 67],\n",[68,96268,96269],{"class":70,"line":3225},[68,96270,96271],{"class":872},"       [21, 36, 70, 83, 87, 88],\n",[68,96273,96274],{"class":70,"line":3230},[68,96275,96276],{"class":872},"       [12, 39, 58, 65, 87, 88],\n",[68,96278,96279],{"class":70,"line":3244},[68,96280,96281],{"class":872},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[68,96283,96284],{"class":70,"line":3249},[68,96285,95504],{"class":872},[68,96287,96288],{"class":70,"line":3255},[68,96289,96290],{"class":74},"#axis=0时\n",[68,96292,96293,96296,96298,96300,96302],{"class":70,"line":3276},[68,96294,96295],{"class":85},"np.sort(aa,",[68,96297,49107],{"class":6815},[68,96299,869],{"class":102},[68,96301,600],{"class":92},[68,96303,1757],{"class":85},[68,96305,96306],{"class":70,"line":3281},[68,96307,95504],{"class":872},[68,96309,96310],{"class":70,"line":3295},[68,96311,96312],{"class":872},"array([[44, 12, 36, 37, 25,  9],\n",[68,96314,96315],{"class":70,"line":3300},[68,96316,96317],{"class":872},"       [46, 21, 58, 65, 39, 77],\n",[68,96319,96320],{"class":70,"line":3329},[68,96321,96322],{"class":872},"       [83, 47, 64, 67, 67, 87],\n",[68,96324,96325],{"class":70,"line":3334},[68,96326,96327],{"class":872},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[68,96329,96330],{"class":70,"line":3351},[68,96331,95504],{"class":872},[68,96333,96334],{"class":70,"line":3356},[68,96335,96336],{"class":74},"#axis=1时,为默认值\n",[68,96338,96339,96341,96343,96345,96347],{"class":70,"line":3361},[68,96340,96295],{"class":85},[68,96342,49107],{"class":6815},[68,96344,869],{"class":102},[68,96346,99],{"class":92},[68,96348,1757],{"class":85},[68,96350,96351],{"class":70,"line":3366},[68,96352,95504],{"class":872},[68,96354,96355],{"class":70,"line":3380},[68,96356,96266],{"class":872},[68,96358,96359],{"class":70,"line":3385},[68,96360,96271],{"class":872},[68,96362,96363],{"class":70,"line":4177},[68,96364,96276],{"class":872},[68,96366,96367],{"class":70,"line":4191},[68,96368,96281],{"class":872},[68,96370,96371],{"class":70,"line":4199},[68,96372,95504],{"class":872},[68,96374,96375],{"class":70,"line":4204},[68,96376,96377],{"class":74},"#按最后一列排序\n",[68,96379,96380,96382,96384,96387,96389,96391],{"class":70,"line":4210},[68,96381,1999],{"class":85},[68,96383,869],{"class":102},[68,96385,96386],{"class":85},"aa[:,",[68,96388,2268],{"class":102},[68,96390,99],{"class":92},[68,96392,34839],{"class":85},[68,96394,96395],{"class":70,"line":4216},[68,96396,96397],{"class":74},"#获取最后一列排好序的索引\n",[68,96399,96400,96402,96404],{"class":70,"line":4221},[68,96401,75636],{"class":85},[68,96403,869],{"class":102},[68,96405,96406],{"class":85},"np.argsort(b)\n",[68,96408,96409],{"class":70,"line":9547},[68,96410,96411],{"class":85},"aa[index]\n",[68,96413,96414],{"class":70,"line":9571},[68,96415,95504],{"class":872},[68,96417,96418],{"class":70,"line":9576},[68,96419,96230],{"class":872},[68,96421,96422],{"class":70,"line":9582},[68,96423,96424],{"class":872},"       [46, 88, 81, 37, 25, 77],\n",[68,96426,96427],{"class":70,"line":9609},[68,96428,96240],{"class":872},[68,96430,96431],{"class":70,"line":9614},[68,96432,96433],{"class":872},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[68,96435,96436],{"class":70,"line":9620},[68,96437,95504],{"class":872},[1652,96439,96440],{},"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":63,"searchDepth":78,"depth":78,"links":96442},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96089,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96449,"title":96450,"body":96451,"description":1676,"extension":1677,"meta":96481,"navigation":1679,"path":96482,"seo":96483,"stem":96484,"__hash__":96485},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96452,"toc":96479},[96453,96456,96459,96462,96465,96468,96471,96474],[10,96454,96450],{"id":96455},"_14广播机制",[19,96457,96458],{},"广播的规则：",[19,96460,96461],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96463,96464],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96466,96467],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96469,96470],{},"3.如果没有维度形状为1，则会引发异常",[19,96472,96473],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96475,96476],{},[38,96477],{"alt":63,"src":96478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":63,"searchDepth":78,"depth":78,"links":96480},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96450,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96487,"title":96488,"body":96489,"description":1676,"extension":1677,"meta":96587,"navigation":1679,"path":96588,"seo":96589,"stem":96590,"__hash__":96591},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96490,"toc":96585},[96491,96494,96497,96582],[10,96492,96488],{"id":96493},"_15比较掩码",[19,96495,96496],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[58,96498,96500],{"className":31971,"code":96499,"language":31973,"meta":63,"style":63},"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",[65,96501,96502,96548,96559,96573,96577],{"__ignoreMap":63},[68,96503,96504,96506,96508,96511,96513,96515,96517,96519,96521,96523,96525,96527,96529,96531,96533,96535,96537,96539,96541,96543,96545],{"class":70,"line":71},[68,96505,1974],{"class":85},[68,96507,869],{"class":102},[68,96509,96510],{"class":85},"np.array([[",[68,96512,99],{"class":92},[68,96514,2114],{"class":85},[68,96516,267],{"class":92},[68,96518,2114],{"class":85},[68,96520,288],{"class":92},[68,96522,49623],{"class":85},[68,96524,2208],{"class":92},[68,96526,2114],{"class":85},[68,96528,2234],{"class":92},[68,96530,2114],{"class":85},[68,96532,2259],{"class":92},[68,96534,49623],{"class":85},[68,96536,2461],{"class":92},[68,96538,2114],{"class":85},[68,96540,2486],{"class":92},[68,96542,2114],{"class":85},[68,96544,2511],{"class":92},[68,96546,96547],{"class":85},"]])\n",[68,96549,96550,96552,96554,96556],{"class":70,"line":78},[68,96551,1974],{"class":85},[68,96553,861],{"class":102},[68,96555,2436],{"class":92},[68,96557,96558],{"class":74},"#结果是一个由True,False组成的数组\n",[68,96560,96561,96564,96566,96568,96570],{"class":70,"line":89},[68,96562,96563],{"class":85},"a[a",[68,96565,861],{"class":102},[68,96567,2436],{"class":92},[68,96569,2675],{"class":85},[68,96571,96572],{"class":74},"#小于20的元素会存到这个数组中\n",[68,96574,96575],{"class":70,"line":115},[68,96576,95140],{"class":74},[68,96578,96579],{"class":70,"line":280},[68,96580,96581],{"class":74},"#array([ 1,  2,  3, 11, 12, 13])\n",[1652,96583,96584],{},"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":63,"searchDepth":78,"depth":78,"links":96586},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96488,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96593,"title":96594,"body":96595,"description":1676,"extension":1677,"meta":96687,"navigation":1679,"path":96688,"seo":96689,"stem":96690,"__hash__":96691},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96596,"toc":96685},[96597,96600,96603,96606,96609,96612,96677,96682],[10,96598,96594],{"id":96599},"_16魔法命令time",[19,96601,96602],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96604,96605],{},"%:行模式",[19,96607,96608],{},"%%:单元格模式",[19,96610,96611],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[58,96613,96615],{"className":31971,"code":96614,"language":31973,"meta":63,"style":63},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[65,96616,96617,96622,96629,96634,96643,96656,96660,96668],{"__ignoreMap":63},[68,96618,96619],{"class":70,"line":71},[68,96620,96621],{"class":74},"#程序执行时间\n",[68,96623,96624,96626],{"class":70,"line":78},[68,96625,31985],{"class":102},[68,96627,96628],{"class":85}," time \n",[68,96630,96631],{"class":70,"line":89},[68,96632,96633],{"class":74},"#获取时间\n",[68,96635,96636,96639,96641],{"class":70,"line":115},[68,96637,96638],{"class":85},"start",[68,96640,869],{"class":102},[68,96642,34011],{"class":85},[68,96644,96645,96648,96651,96653],{"class":70,"line":280},[68,96646,96647],{"class":85},"time.sleep(",[68,96649,96650],{"class":92},"0.4",[68,96652,2165],{"class":85},[68,96654,96655],{"class":74},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[68,96657,96658],{"class":70,"line":301},[68,96659,96633],{"class":74},[68,96661,96662,96664,96666],{"class":70,"line":320},[68,96663,47394],{"class":85},[68,96665,869],{"class":102},[68,96667,34011],{"class":85},[68,96669,96670,96672,96674],{"class":70,"line":2915},[68,96671,47394],{"class":85},[68,96673,2268],{"class":102},[68,96675,96676],{"class":85},"start\n",[19,96678,96679],{},[38,96680],{"alt":63,"src":96681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1652,96683,96684],{},"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":63,"searchDepth":78,"depth":78,"links":96686},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96594,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96693,"title":96694,"body":96695,"description":1676,"extension":1677,"meta":96730,"navigation":1679,"path":96731,"seo":96732,"stem":96733,"__hash__":96734},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96696,"toc":96728},[96697,96700,96703,96706,96709,96712,96715,96718,96723],[10,96698,96694],{"id":96699},"_17魔法命令timeit",[19,96701,96702],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96704,96705],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96707,96708],{},"单元格模式：",[19,96710,96711],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96713,96714],{},"初始化语句执行次数由轮数来决定",[19,96716,96717],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96719,96720],{},[38,96721],{"alt":63,"src":96722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96724,96725],{},[38,96726],{"alt":63,"src":96727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":63,"searchDepth":78,"depth":78,"links":96729},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96694,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96736,"title":96737,"body":96738,"description":1676,"extension":1677,"meta":96756,"navigation":1679,"path":96757,"seo":96758,"stem":96759,"__hash__":96760},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96739,"toc":96754},[96740,96743,96746,96749],[10,96741,96737],{"id":96742},"_18魔法命令writefile和run",[19,96744,96745],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96747,96748],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96750,96751],{},[38,96752],{"alt":63,"src":96753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":63,"searchDepth":78,"depth":78,"links":96755},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96737,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96762,"title":96763,"body":96764,"description":1676,"extension":1677,"meta":96816,"navigation":1679,"path":96817,"seo":96818,"stem":96819,"__hash__":96820},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96765,"toc":96814},[96766,96769,96772,96774,96777,96780,96785,96788,96791,96794,96796,96799,96802,96805,96808,96811],[10,96767,96763],{"id":96768},"_19魔法命令memit",[19,96770,96771],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96773,26194],{},[19,96775,96776],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96778,96779],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96781,96782],{},[38,96783],{"alt":63,"src":96784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96786,96787],{},"补充：",[19,96789,96790],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96792,96793],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96795,505],{},[19,96797,96798],{},"1.cmd",[19,96800,96801],{},"2.依次输入以下代码：",[19,96803,96804],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96806,96807],{},"pip install --upgrade ipython",[19,96809,96810],{},"#升级 memory_profiler 和 setuptools",[19,96812,96813],{},"pip install --upgrade memory_profiler setuptools",{"title":63,"searchDepth":78,"depth":78,"links":96815},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96763,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96822,"title":96823,"body":96824,"description":1676,"extension":1677,"meta":98470,"navigation":1679,"path":98471,"seo":98472,"stem":98473,"__hash__":98474},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96825,"toc":98440},[96826,96829,96833,96837,96898,96901,96906,96910,96915,96920,96925,96930,96933,96938,96942,96946,96979,96982,96985,96988,97040,97043,97079,97082,97124,97128,97149,97151,97188,97190,97195,97197,97202,97206,97209,97237,97241,97245,97298,97302,97394,97398,97402,97405,97410,97414,97439,97444,97448,97451,97454,97457,97460,97463,97466,97469,97481,97485,97489,97492,97524,97527,97550,97553,97579,97582,97608,97611,97645,97648,97710,97714,97717,97721,97724,97750,97753,97756,97761,97764,97833,97835,97840,97901,97904,97915,97921,97926,97930,97933,97946,97950,97965,97967,97990,97992,98018,98021,98024,98027,98075,98077,98082,98086,98090,98117,98121,98148,98151,98156,98161,98251,98255,98313,98318,98321,98324,98366,98370,98426,98431,98434,98437],[10,96827,96823],{"id":96828},"_2创建数组",[14,96830,96832],{"id":96831},"_21-array函数创建数组","2.1 array()函数创建数组",[43,96834,96836],{"id":96835},"_221-函数语句","2.2.1 函数语句",[58,96838,96840],{"className":31971,"code":96839,"language":31973,"meta":63,"style":63},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[65,96841,96842],{"__ignoreMap":63},[68,96843,96844,96847,96850,96852,96854,96856,96858,96860,96863,96865,96868,96870,96873,96875,96877,96879,96882,96884,96887,96889,96892,96894,96896],{"class":70,"line":71},[68,96845,96846],{"class":85},"numpy.array(",[68,96848,96849],{"class":92},"object",[68,96851,1002],{"class":85},[68,96853,95076],{"class":6815},[68,96855,15161],{"class":102},[68,96857,40526],{"class":92},[68,96859,1002],{"class":85},[68,96861,96862],{"class":6815},"copy",[68,96864,15161],{"class":102},[68,96866,96867],{"class":92}," True",[68,96869,1002],{"class":85},[68,96871,96872],{"class":6815},"order",[68,96874,15161],{"class":102},[68,96876,40526],{"class":92},[68,96878,1002],{"class":85},[68,96880,96881],{"class":6815},"subok",[68,96883,15161],{"class":102},[68,96885,96886],{"class":92}," False",[68,96888,1002],{"class":85},[68,96890,96891],{"class":6815},"ndmin",[68,96893,15161],{"class":102},[68,96895,5692],{"class":92},[68,96897,1757],{"class":85},[19,96899,96900],{},"参数：",[19,96902,96903],{},[38,96904],{"alt":63,"src":96905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[43,96907,96909],{"id":96908},"_222-实例","2.2.2 实例",[19,96911,96912],{},[38,96913],{"alt":63,"src":96914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96916,96917],{},[38,96918],{"alt":63,"src":96919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96921,96922],{},[38,96923],{"alt":63,"src":96924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96926,96927],{},[38,96928],{"alt":63,"src":96929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96931,96932],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96934,96935],{},[38,96936],{"alt":63,"src":96937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96939,96941],{"id":96940},"_22-随机数创建数组","2.2 随机数创建数组",[43,96943,96945],{"id":96944},"_221-random语句","2.2.1 random语句",[58,96947,96949],{"className":31971,"code":96948,"language":31973,"meta":63,"style":63},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[65,96950,96951,96956,96961,96969,96974],{"__ignoreMap":63},[68,96952,96953],{"class":70,"line":71},[68,96954,96955],{"class":74},"#random.random()\n",[68,96957,96958],{"class":70,"line":78},[68,96959,96960],{"class":74},"#确定随机种子,就是每次运行结果是相同的\n",[68,96962,96963,96965,96967],{"class":70,"line":89},[68,96964,96183],{"class":85},[68,96966,600],{"class":92},[68,96968,1757],{"class":85},[68,96970,96971],{"class":70,"line":115},[68,96972,96973],{"class":85},"np.random.random()\n",[68,96975,96976],{"class":70,"line":280},[68,96977,96978],{"class":74},"#生成一个随机的数目\n",[19,96980,96981],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96983,96984],{},"可以指定数组形状 size",[19,96986,96987],{},"①生成一维数组",[58,96989,96991],{"className":31971,"code":96990,"language":31973,"meta":63,"style":63},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[65,96992,96993,96998,97011,97016,97032],{"__ignoreMap":63},[68,96994,96995],{"class":70,"line":71},[68,96996,96997],{"class":74},"#random.random(size())\n",[68,96999,97000,97003,97005,97007,97009],{"class":70,"line":78},[68,97001,97002],{"class":85},"np.random.random(",[68,97004,33089],{"class":6815},[68,97006,869],{"class":102},[68,97008,2055],{"class":92},[68,97010,1757],{"class":85},[68,97012,97013],{"class":70,"line":89},[68,97014,97015],{"class":74},"#生成一位的五个元素\n",[68,97017,97018,97020,97022,97024,97026,97028,97030],{"class":70,"line":115},[68,97019,1974],{"class":85},[68,97021,869],{"class":102},[68,97023,97002],{"class":85},[68,97025,33089],{"class":6815},[68,97027,869],{"class":102},[68,97029,2029],{"class":92},[68,97031,1757],{"class":85},[68,97033,97034,97037],{"class":70,"line":280},[68,97035,97036],{"class":85},"a.shape ",[68,97038,97039],{"class":74},"#输出数组形状\n",[19,97041,97042],{},"②生成二维数组",[58,97044,97046],{"className":31971,"code":97045,"language":31973,"meta":63,"style":63},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[65,97047,97048,97052,97074],{"__ignoreMap":63},[68,97049,97050],{"class":70,"line":71},[68,97051,94877],{"class":74},[68,97053,97054,97056,97058,97060,97062,97064,97066,97068,97070,97072],{"class":70,"line":78},[68,97055,94882],{"class":85},[68,97057,869],{"class":102},[68,97059,97002],{"class":85},[68,97061,33089],{"class":6815},[68,97063,869],{"class":102},[68,97065,997],{"class":85},[68,97067,2029],{"class":92},[68,97069,2114],{"class":85},[68,97071,2055],{"class":92},[68,97073,32090],{"class":85},[68,97075,97076],{"class":70,"line":89},[68,97077,97078],{"class":74},"#生成四行五列的数组\n",[19,97080,97081],{},"③生成三维数组",[58,97083,97085],{"className":31971,"code":97084,"language":31973,"meta":63,"style":63},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[65,97086,97087,97092,97119],{"__ignoreMap":63},[68,97088,97089],{"class":70,"line":71},[68,97090,97091],{"class":74},"#三维数组\n",[68,97093,97094,97097,97099,97101,97103,97105,97107,97109,97111,97113,97115,97117],{"class":70,"line":78},[68,97095,97096],{"class":85},"aaa",[68,97098,869],{"class":102},[68,97100,97002],{"class":85},[68,97102,33089],{"class":6815},[68,97104,869],{"class":102},[68,97106,997],{"class":85},[68,97108,267],{"class":92},[68,97110,2114],{"class":85},[68,97112,288],{"class":92},[68,97114,2114],{"class":85},[68,97116,2029],{"class":92},[68,97118,32090],{"class":85},[68,97120,97121],{"class":70,"line":89},[68,97122,97123],{"class":85},"aaa.shape\n",[43,97125,97127],{"id":97126},"_222-randint语句","2.2.2 randint语句",[58,97129,97131],{"className":31971,"code":97130,"language":31973,"meta":63,"style":63},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[65,97132,97133,97138],{"__ignoreMap":63},[68,97134,97135],{"class":70,"line":71},[68,97136,97137],{"class":74},"#生成随机的整数 random.randint(low,high,size)\n",[68,97139,97140,97142,97144,97146],{"class":70,"line":78},[68,97141,94690],{"class":85},[68,97143,2055],{"class":92},[68,97145,15311],{"class":85},[68,97147,97148],{"class":74},"#0~5中的随机一个数\n",[19,97150,96987],{},[58,97152,97154],{"className":31971,"code":97153,"language":31973,"meta":63,"style":63},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[65,97155,97156,97161,97183],{"__ignoreMap":63},[68,97157,97158],{"class":70,"line":71},[68,97159,97160],{"class":74},"#一维\n",[68,97162,97163,97165,97167,97169,97171,97173,97175,97177,97179,97181],{"class":70,"line":78},[68,97164,94690],{"class":85},[68,97166,99],{"class":92},[68,97168,2114],{"class":85},[68,97170,2208],{"class":92},[68,97172,2114],{"class":85},[68,97174,33089],{"class":6815},[68,97176,869],{"class":102},[68,97178,997],{"class":85},[68,97180,2182],{"class":92},[68,97182,32090],{"class":85},[68,97184,97185],{"class":70,"line":89},[68,97186,97187],{"class":74},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97189,97042],{},[19,97191,97192],{},[38,97193],{"alt":63,"src":97194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97196,97081],{},[19,97198,97199],{},[38,97200],{"alt":63,"src":97201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[43,97203,97205],{"id":97204},"_222-rand语句","2.2.2 rand语句",[19,97207,97208],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[58,97210,97212],{"className":31971,"code":97211,"language":31973,"meta":63,"style":63},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[65,97213,97214,97227,97232],{"__ignoreMap":63},[68,97215,97216,97219,97221,97223,97225],{"class":70,"line":71},[68,97217,97218],{"class":85},"np.random.rand(",[68,97220,2047],{"class":92},[68,97222,2114],{"class":85},[68,97224,2182],{"class":92},[68,97226,1757],{"class":85},[68,97228,97229],{"class":70,"line":78},[68,97230,97231],{"class":74},"#第一个参数100：行数，表示有100个样本\n",[68,97233,97234],{"class":70,"line":89},[68,97235,97236],{"class":74},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97238,97240],{"id":97239},"_23-arange创建数组","2.3 arange()创建数组",[43,97242,97244],{"id":97243},"_231-函数语句","2.3.1 函数语句",[58,97246,97248],{"className":31971,"code":97247,"language":31973,"meta":63,"style":63},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[65,97249,97250,97264,97269,97274,97279,97284,97289,97294],{"__ignoreMap":63},[68,97251,97252,97255,97257,97259,97262],{"class":70,"line":71},[68,97253,97254],{"class":85},"numpy.arange([start,] stop[, step], ",[68,97256,95076],{"class":6815},[68,97258,869],{"class":102},[68,97260,97261],{"class":92},"None",[68,97263,1757],{"class":85},[68,97265,97266],{"class":70,"line":78},[68,97267,97268],{"class":74},"#参数\n",[68,97270,97271],{"class":70,"line":89},[68,97272,97273],{"class":872},"\"\"\"\n",[68,97275,97276],{"class":70,"line":115},[68,97277,97278],{"class":872},"start:起始值，可选，默认从 0 开始。\n",[68,97280,97281],{"class":70,"line":280},[68,97282,97283],{"class":872},"stop:结束值（不包含该值）。\n",[68,97285,97286],{"class":70,"line":301},[68,97287,97288],{"class":872},"step:步长，可选，默认是 1。可以为浮点数。\n",[68,97290,97291],{"class":70,"line":320},[68,97292,97293],{"class":872},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[68,97295,97296],{"class":70,"line":2915},[68,97297,97273],{"class":872},[43,97299,97301],{"id":97300},"_232-实例","2.3.2 实例",[58,97303,97305],{"className":31971,"code":97304,"language":31973,"meta":63,"style":63},"#创建一维数组\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",[65,97306,97307,97311,97335,97340,97345,97349,97372,97376,97380,97385,97390],{"__ignoreMap":63},[68,97308,97309],{"class":70,"line":71},[68,97310,94681],{"class":74},[68,97312,97313,97315,97317,97319,97321,97323,97325,97327,97329,97331,97333],{"class":70,"line":78},[68,97314,94578],{"class":85},[68,97316,99],{"class":92},[68,97318,2114],{"class":85},[68,97320,2461],{"class":92},[68,97322,2114],{"class":85},[68,97324,99],{"class":92},[68,97326,2114],{"class":85},[68,97328,95076],{"class":6815},[68,97330,869],{"class":102},[68,97332,1754],{"class":92},[68,97334,1757],{"class":85},[68,97336,97337],{"class":70,"line":89},[68,97338,97339],{"class":74},"#输出结果：\n",[68,97341,97342],{"class":70,"line":115},[68,97343,97344],{"class":74},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[68,97346,97347],{"class":70,"line":280},[68,97348,95523],{"class":74},[68,97350,97351,97354,97356,97358,97360,97363,97365,97367,97369],{"class":70,"line":301},[68,97352,97353],{"class":85},"np.array([np.arange(",[68,97355,99],{"class":92},[68,97357,2114],{"class":85},[68,97359,2029],{"class":92},[68,97361,97362],{"class":85},"),np.arange(",[68,97364,2029],{"class":92},[68,97366,2114],{"class":85},[68,97368,2105],{"class":92},[68,97370,97371],{"class":85},")])\n",[68,97373,97374],{"class":70,"line":320},[68,97375,95140],{"class":74},[68,97377,97378],{"class":70,"line":2915},[68,97379,97273],{"class":872},[68,97381,97382],{"class":70,"line":2921},[68,97383,97384],{"class":872},"array([[1, 2, 3],\n",[68,97386,97387],{"class":70,"line":2933},[68,97388,97389],{"class":872},"       [4, 5, 6]])\n",[68,97391,97392],{"class":70,"line":3214},[68,97393,97273],{"class":872},[14,97395,97397],{"id":97396},"_24-生态分布","2.4 生态分布",[43,97399,97401],{"id":97400},"_241-标准正态分布","2.4.1 标准正态分布",[19,97403,97404],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97406,97407],{},[38,97408],{"alt":63,"src":97409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[43,97411,97413],{"id":97412},"_242-常规正态分布","2.4.2 常规正态分布",[58,97415,97417],{"className":31971,"code":97416,"language":31973,"meta":63,"style":63},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[65,97418,97419,97424,97429,97434],{"__ignoreMap":63},[68,97420,97421],{"class":70,"line":71},[68,97422,97423],{"class":85},"random.normal(loc,scale,size)也可以生成正态分布\n",[68,97425,97426],{"class":70,"line":78},[68,97427,97428],{"class":74},"#loc:期望\n",[68,97430,97431],{"class":70,"line":89},[68,97432,97433],{"class":74},"#scale:方差\n",[68,97435,97436],{"class":70,"line":115},[68,97437,97438],{"class":74},"#size:用于确定是几维的数列\n",[19,97440,97441],{},[38,97442],{"alt":63,"src":97443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97445,97447],{"id":97446},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97449,97450],{},"ndim:秩，维度个数",[19,97452,97453],{},"size:数组元素的个数",[19,97455,97456],{},"shape:数组的形状",[19,97458,97459],{},"dtype:数组元素的类型",[19,97461,97462],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97464,97465],{},"他们都是属性，通过数组.属性的形式来确定",[19,97467,97468],{},"如果需要输出多个可以通过以下方式：",[58,97470,97472],{"className":31971,"code":97471,"language":31973,"meta":63,"style":63},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[65,97473,97474],{"__ignoreMap":63},[68,97475,97476,97478],{"class":70,"line":71},[68,97477,32008],{"class":92},[68,97479,97480],{"class":85},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97482,97484],{"id":97483},"_26-其他方式创建数组","2.6 其他方式创建数组",[43,97486,97488],{"id":97487},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97490,97491],{},"①创建一维数组",[58,97493,97495],{"className":31971,"code":97494,"language":31973,"meta":63,"style":63},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[65,97496,97497,97506,97510,97515,97520],{"__ignoreMap":63},[68,97498,97499,97502,97504],{"class":70,"line":71},[68,97500,97501],{"class":85},"np.zeros(",[68,97503,2182],{"class":92},[68,97505,1757],{"class":85},[68,97507,97508],{"class":70,"line":78},[68,97509,97273],{"class":872},[68,97511,97512],{"class":70,"line":89},[68,97513,97514],{"class":872},"输出结果：\n",[68,97516,97517],{"class":70,"line":115},[68,97518,97519],{"class":872},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[68,97521,97522],{"class":70,"line":280},[68,97523,97273],{"class":872},[19,97525,97526],{},"上方代码等价于：",[58,97528,97530],{"className":31971,"code":97529,"language":31973,"meta":63,"style":63},"np.zeros(shape=(10))#创建10个元素的0数组\n",[65,97531,97532],{"__ignoreMap":63},[68,97533,97534,97536,97539,97541,97543,97545,97547],{"class":70,"line":71},[68,97535,97501],{"class":85},[68,97537,97538],{"class":6815},"shape",[68,97540,869],{"class":102},[68,97542,997],{"class":85},[68,97544,2182],{"class":92},[68,97546,84348],{"class":85},[68,97548,97549],{"class":74},"#创建10个元素的0数组\n",[19,97551,97552],{},"也可以指定类型",[58,97554,97556],{"className":31971,"code":97555,"language":31973,"meta":63,"style":63},"#指定类型\nnp.zeros(5,dtype=int)\n",[65,97557,97558,97563],{"__ignoreMap":63},[68,97559,97560],{"class":70,"line":71},[68,97561,97562],{"class":74},"#指定类型\n",[68,97564,97565,97567,97569,97571,97573,97575,97577],{"class":70,"line":78},[68,97566,97501],{"class":85},[68,97568,2055],{"class":92},[68,97570,2114],{"class":85},[68,97572,95076],{"class":6815},[68,97574,869],{"class":102},[68,97576,1754],{"class":92},[68,97578,1757],{"class":85},[19,97580,97581],{},"②创建二维数组",[58,97583,97585],{"className":31971,"code":97584,"language":31973,"meta":63,"style":63},"np.zeros((3,4),dtype=int)\n",[65,97586,97587],{"__ignoreMap":63},[68,97588,97589,97592,97594,97596,97598,97600,97602,97604,97606],{"class":70,"line":71},[68,97590,97591],{"class":85},"np.zeros((",[68,97593,288],{"class":92},[68,97595,2114],{"class":85},[68,97597,2029],{"class":92},[68,97599,43849],{"class":85},[68,97601,95076],{"class":6815},[68,97603,869],{"class":102},[68,97605,1754],{"class":92},[68,97607,1757],{"class":85},[19,97609,97610],{},"③创建三维数组",[58,97612,97614],{"className":31971,"code":97613,"language":31973,"meta":63,"style":63},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[65,97615,97616,97621],{"__ignoreMap":63},[68,97617,97618],{"class":70,"line":71},[68,97619,97620],{"class":74},"#创建三维数组\n",[68,97622,97623,97625,97627,97629,97631,97633,97635,97637,97639,97641,97643],{"class":70,"line":78},[68,97624,97591],{"class":85},[68,97626,288],{"class":92},[68,97628,2114],{"class":85},[68,97630,2029],{"class":92},[68,97632,2114],{"class":85},[68,97634,2055],{"class":92},[68,97636,43849],{"class":85},[68,97638,95076],{"class":6815},[68,97640,869],{"class":102},[68,97642,1754],{"class":92},[68,97644,1757],{"class":85},[19,97646,97647],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[58,97649,97651],{"className":31971,"code":97650,"language":31973,"meta":63,"style":63},"#使用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",[65,97652,97653,97658,97673,97678,97683,97705],{"__ignoreMap":63},[68,97654,97655],{"class":70,"line":71},[68,97656,97657],{"class":74},"#使用zeros_like将创建的一维数组变成全0的数组\n",[68,97659,97660,97662,97664,97666,97668,97670],{"class":70,"line":78},[68,97661,1974],{"class":85},[68,97663,869],{"class":102},[68,97665,94578],{"class":85},[68,97667,2029],{"class":92},[68,97669,2165],{"class":85},[68,97671,97672],{"class":74},"#这个得到的结果：一维数组0，1，2，3\n",[68,97674,97675],{"class":70,"line":89},[68,97676,97677],{"class":85},"np.zeros_like(a)\n",[68,97679,97680],{"class":70,"line":115},[68,97681,97682],{"class":74},"#使用zeros_like将创建的二维数组变成全0的数组\n",[68,97684,97685,97687,97689,97691,97693,97695,97697,97699,97701,97703],{"class":70,"line":280},[68,97686,94882],{"class":85},[68,97688,869],{"class":102},[68,97690,97002],{"class":85},[68,97692,33089],{"class":6815},[68,97694,869],{"class":102},[68,97696,997],{"class":85},[68,97698,2029],{"class":92},[68,97700,2114],{"class":85},[68,97702,2055],{"class":92},[68,97704,32090],{"class":85},[68,97706,97707],{"class":70,"line":301},[68,97708,97709],{"class":85},"np.zeros_like(aa)\n",[43,97711,97713],{"id":97712},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97715,97716],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[43,97718,97720],{"id":97719},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97722,97723],{},"①empty()用法",[58,97725,97727],{"className":31971,"code":97726,"language":31973,"meta":63,"style":63},"numpy.empty(shape,dtype=float,order='c')\n",[65,97728,97729],{"__ignoreMap":63},[68,97730,97731,97734,97736,97738,97740,97742,97744,97746,97748],{"class":70,"line":71},[68,97732,97733],{"class":85},"numpy.empty(shape,",[68,97735,95076],{"class":6815},[68,97737,869],{"class":102},[68,97739,1790],{"class":92},[68,97741,2114],{"class":85},[68,97743,96872],{"class":6815},[68,97745,869],{"class":102},[68,97747,77606],{"class":872},[68,97749,1757],{"class":85},[19,97751,97752],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97754,97755],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97757,97758],{},[38,97759],{"alt":63,"src":97760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97762,97763],{},"②empty()用法",[58,97765,97767],{"className":31971,"code":97766,"language":31973,"meta":63,"style":63},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[65,97768,97769,97790,97802,97823,97828],{"__ignoreMap":63},[68,97770,97771,97773,97775,97778,97780,97782,97784,97786,97788],{"class":70,"line":71},[68,97772,2581],{"class":85},[68,97774,869],{"class":102},[68,97776,97777],{"class":85},"np.empty(",[68,97779,2182],{"class":92},[68,97781,2114],{"class":85},[68,97783,95076],{"class":6815},[68,97785,869],{"class":102},[68,97787,1754],{"class":92},[68,97789,1757],{"class":85},[68,97791,97792,97794,97796,97798,97800],{"class":70,"line":78},[68,97793,2556],{"class":85},[68,97795,869],{"class":102},[68,97797,94578],{"class":85},[68,97799,2055],{"class":92},[68,97801,1757],{"class":85},[68,97803,97804,97807,97809,97812,97814,97816,97819,97821],{"class":70,"line":89},[68,97805,97806],{"class":85},"np.add(",[68,97808,267],{"class":92},[68,97810,97811],{"class":85},",x,",[68,97813,94630],{"class":6815},[68,97815,869],{"class":102},[68,97817,97818],{"class":85},"y[:",[68,97820,2055],{"class":92},[68,97822,6256],{"class":85},[68,97824,97825],{"class":70,"line":115},[68,97826,97827],{"class":74},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[68,97829,97830],{"class":70,"line":280},[68,97831,97832],{"class":85},"y\n",[19,97834,13112],{},[19,97836,97837],{},[38,97838],{"alt":63,"src":97839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[58,97841,97843],{"className":31971,"code":97842,"language":31973,"meta":63,"style":63},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[65,97844,97845,97861,97881,97896],{"__ignoreMap":63},[68,97846,97847,97849,97851,97853,97855,97857,97859],{"class":70,"line":71},[68,97848,2556],{"class":85},[68,97850,869],{"class":102},[68,97852,94578],{"class":85},[68,97854,99],{"class":92},[68,97856,2114],{"class":85},[68,97858,2080],{"class":92},[68,97860,1757],{"class":85},[68,97862,97863,97865,97867,97869,97871,97873,97875,97877,97879],{"class":70,"line":78},[68,97864,2581],{"class":85},[68,97866,869],{"class":102},[68,97868,97777],{"class":85},[68,97870,2055],{"class":92},[68,97872,2114],{"class":85},[68,97874,95076],{"class":6815},[68,97876,869],{"class":102},[68,97878,1754],{"class":92},[68,97880,1757],{"class":85},[68,97882,97883,97886,97888,97890,97892,97894],{"class":70,"line":89},[68,97884,97885],{"class":85},"np.add(x,",[68,97887,267],{"class":92},[68,97889,2114],{"class":85},[68,97891,94630],{"class":6815},[68,97893,869],{"class":102},[68,97895,95025],{"class":85},[68,97897,97898],{"class":70,"line":115},[68,97899,97900],{"class":74},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97902,97903],{},"③empty_like()",[19,97905,97906],{},[1890,97907,97908,97909,97914],{},"创建一个",[1890,97910,97911],{},[1890,97912,97913],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97916,97917,97920],{},[65,97918,97919],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97922,97923],{},[38,97924],{"alt":63,"src":97925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[43,97927,97929],{"id":97928},"_264-用法","2.6.4 ？？用法",[19,97931,97932],{},"当想查看一个函数的参数时，可以通过？？来实现",[58,97934,97936],{"className":31971,"code":97935,"language":31973,"meta":63,"style":63},"np.full??\n",[65,97937,97938],{"__ignoreMap":63},[68,97939,97940,97943],{"class":70,"line":71},[68,97941,97942],{"class":85},"np.full",[68,97944,97945],{"class":78981},"??\n",[43,97947,97949],{"id":97948},"_265-full创建数组","2.6.5 full()创建数组",[58,97951,97953],{"className":31971,"code":97952,"language":31973,"meta":63,"style":63},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[65,97954,97955,97960],{"__ignoreMap":63},[68,97956,97957],{"class":70,"line":71},[68,97958,97959],{"class":85},"full(shape,fill_value)\n",[68,97961,97962],{"class":70,"line":78},[68,97963,97964],{"class":85},"创建全为某个指定值的数组\n",[19,97966,96106],{},[58,97968,97970],{"className":31971,"code":97969,"language":31973,"meta":63,"style":63},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[65,97971,97972,97977],{"__ignoreMap":63},[68,97973,97974],{"class":70,"line":71},[68,97975,97976],{"class":74},"#创建一个一维数组,以20进行填充\n",[68,97978,97979,97982,97984,97986,97988],{"class":70,"line":78},[68,97980,97981],{"class":85},"np.full(",[68,97983,2182],{"class":92},[68,97985,2114],{"class":85},[68,97987,2436],{"class":92},[68,97989,1757],{"class":85},[19,97991,94867],{},[58,97993,97995],{"className":31971,"code":97994,"language":31973,"meta":63,"style":63},"#创建二维数组\nnp.full((3,5),11)\n",[65,97996,97997,98001],{"__ignoreMap":63},[68,97998,97999],{"class":70,"line":71},[68,98000,95523],{"class":74},[68,98002,98003,98006,98008,98010,98012,98014,98016],{"class":70,"line":78},[68,98004,98005],{"class":85},"np.full((",[68,98007,288],{"class":92},[68,98009,2114],{"class":85},[68,98011,2055],{"class":92},[68,98013,43849],{"class":85},[68,98015,2208],{"class":92},[68,98017,1757],{"class":85},[19,98019,98020],{},"③full_like用法",[19,98022,98023],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98025,98026],{},"这里是指定填充而已",[58,98028,98030],{"className":31971,"code":98029,"language":31973,"meta":63,"style":63},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[65,98031,98032,98037,98061,98066],{"__ignoreMap":63},[68,98033,98034],{"class":70,"line":71},[68,98035,98036],{"class":74},"#创建一个指定形状数组\n",[68,98038,98039,98041,98043,98045,98047,98049,98051,98053,98055,98057,98059],{"class":70,"line":78},[68,98040,1974],{"class":85},[68,98042,869],{"class":102},[68,98044,94578],{"class":85},[68,98046,99],{"class":92},[68,98048,2114],{"class":85},[68,98050,2061],{"class":92},[68,98052,94583],{"class":85},[68,98054,2029],{"class":92},[68,98056,2114],{"class":85},[68,98058,2156],{"class":92},[68,98060,1757],{"class":85},[68,98062,98063],{"class":70,"line":89},[68,98064,98065],{"class":74},"#进行指定填充\n",[68,98067,98068,98071,98073],{"class":70,"line":115},[68,98069,98070],{"class":85},"np.full_like(a,",[68,98072,2182],{"class":92},[68,98074,1757],{"class":85},[19,98076,13112],{},[19,98078,98079],{},[38,98080],{"alt":63,"src":98081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[43,98083,98085],{"id":98084},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23593,98087,98089],{"id":98088},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[58,98091,98093],{"className":31971,"code":98092,"language":31973,"meta":63,"style":63},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[65,98094,98095,98112],{"__ignoreMap":63},[68,98096,98097,98100,98102,98104,98106,98108,98110],{"class":70,"line":71},[68,98098,98099],{"class":85},"np.eye(",[68,98101,2029],{"class":92},[68,98103,2114],{"class":85},[68,98105,95076],{"class":6815},[68,98107,869],{"class":102},[68,98109,1754],{"class":92},[68,98111,1757],{"class":85},[68,98113,98114],{"class":70,"line":78},[68,98115,98116],{"class":74},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23593,98118,98120],{"id":98119},"_2662-法2identity","2.6.6.2 法2：identity()",[58,98122,98124],{"className":31971,"code":98123,"language":31973,"meta":63,"style":63},"#identity()\nnp.identity(5,dtype=int)\n",[65,98125,98126,98131],{"__ignoreMap":63},[68,98127,98128],{"class":70,"line":71},[68,98129,98130],{"class":74},"#identity()\n",[68,98132,98133,98136,98138,98140,98142,98144,98146],{"class":70,"line":78},[68,98134,98135],{"class":85},"np.identity(",[68,98137,2055],{"class":92},[68,98139,2114],{"class":85},[68,98141,95076],{"class":6815},[68,98143,869],{"class":102},[68,98145,1754],{"class":92},[68,98147,1757],{"class":85},[19,98149,98150],{},"两个函数是有区别的",[19,98152,98153],{},[38,98154],{"alt":63,"src":98155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98157,98158],{},[38,98159],{"alt":63,"src":98160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[58,98162,98164],{"className":31971,"code":98163,"language":31973,"meta":63,"style":63},"# 创建一个 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",[65,98165,98166,98171,98183,98188,98193,98198,98203,98207,98212,98232,98236,98241,98246],{"__ignoreMap":63},[68,98167,98168],{"class":70,"line":71},[68,98169,98170],{"class":74},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[68,98172,98173,98175,98177,98179,98181],{"class":70,"line":78},[68,98174,98099],{"class":85},[68,98176,288],{"class":92},[68,98178,1002],{"class":85},[68,98180,2029],{"class":92},[68,98182,1757],{"class":85},[68,98184,98185],{"class":70,"line":89},[68,98186,98187],{"class":74},"# 输出:\n",[68,98189,98190],{"class":70,"line":115},[68,98191,98192],{"class":74},"# [[1. 0. 0. 0.]\n",[68,98194,98195],{"class":70,"line":280},[68,98196,98197],{"class":74},"#  [0. 1. 0. 0.]\n",[68,98199,98200],{"class":70,"line":301},[68,98201,98202],{"class":74},"#  [0. 0. 1. 0.]]\n",[68,98204,98205],{"class":70,"line":320},[68,98206,4000],{"emptyLinePlaceholder":1679},[68,98208,98209],{"class":70,"line":2915},[68,98210,98211],{"class":74},"# 对角线向上偏移1\n",[68,98213,98214,98216,98218,98220,98222,98224,98226,98228,98230],{"class":70,"line":2921},[68,98215,98099],{"class":85},[68,98217,288],{"class":92},[68,98219,1002],{"class":85},[68,98221,2029],{"class":92},[68,98223,1002],{"class":85},[68,98225,2229],{"class":6815},[68,98227,869],{"class":102},[68,98229,99],{"class":92},[68,98231,1757],{"class":85},[68,98233,98234],{"class":70,"line":2933},[68,98235,98187],{"class":74},[68,98237,98238],{"class":70,"line":3214},[68,98239,98240],{"class":74},"# [[0. 1. 0. 0.]\n",[68,98242,98243],{"class":70,"line":3219},[68,98244,98245],{"class":74},"#  [0. 0. 1. 0.]\n",[68,98247,98248],{"class":70,"line":3225},[68,98249,98250],{"class":74},"#  [0. 0. 0. 1.]]\n",[43,98252,98254],{"id":98253},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[58,98256,98258],{"className":31971,"code":98257,"language":31973,"meta":63,"style":63},"#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",[65,98259,98260,98265,98269,98274,98279,98284,98289,98294,98299,98304,98309],{"__ignoreMap":63},[68,98261,98262],{"class":70,"line":71},[68,98263,98264],{"class":74},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[68,98266,98267],{"class":70,"line":78},[68,98268,97273],{"class":872},[68,98270,98271],{"class":70,"line":89},[68,98272,98273],{"class":872},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[68,98275,98276],{"class":70,"line":115},[68,98277,98278],{"class":872},"参数介绍：\n",[68,98280,98281],{"class":70,"line":280},[68,98282,98283],{"class":872},"start：序列的起始值\n",[68,98285,98286],{"class":70,"line":301},[68,98287,98288],{"class":872},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[68,98290,98291],{"class":70,"line":320},[68,98292,98293],{"class":872},"num：要生长的等步长的样本数量，默认为50\n",[68,98295,98296],{"class":70,"line":2915},[68,98297,98298],{"class":872},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[68,98300,98301],{"class":70,"line":2921},[68,98302,98303],{"class":872},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[68,98305,98306],{"class":70,"line":2933},[68,98307,98308],{"class":872},"dtype：ndarry的数据类型\n",[68,98310,98311],{"class":70,"line":3214},[68,98312,97273],{"class":872},[19,98314,98315],{},[38,98316],{"alt":63,"src":98317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98319,98320],{},"这里num=是可以省略的",[19,98322,98323],{},"也就是下方两行代码结果是一模一样的",[58,98325,98327],{"className":31971,"code":98326,"language":31973,"meta":63,"style":63},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[65,98328,98329,98346],{"__ignoreMap":63},[68,98330,98331,98334,98336,98338,98340,98342,98344],{"class":70,"line":71},[68,98332,98333],{"class":85},"np.linspace(",[68,98335,99],{"class":92},[68,98337,2114],{"class":85},[68,98339,2055],{"class":92},[68,98341,2114],{"class":85},[68,98343,2055],{"class":92},[68,98345,1757],{"class":85},[68,98347,98348,98350,98352,98354,98356,98358,98360,98362,98364],{"class":70,"line":78},[68,98349,98333],{"class":85},[68,98351,99],{"class":92},[68,98353,2114],{"class":85},[68,98355,2055],{"class":92},[68,98357,2114],{"class":85},[68,98359,3267],{"class":6815},[68,98361,869],{"class":102},[68,98363,2055],{"class":92},[68,98365,1757],{"class":85},[43,98367,98369],{"id":98368},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[58,98371,98373],{"className":31971,"code":98372,"language":31973,"meta":63,"style":63},"#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",[65,98374,98375,98380,98384,98389,98394,98399,98404,98408,98413,98418,98422],{"__ignoreMap":63},[68,98376,98377],{"class":70,"line":71},[68,98378,98379],{"class":74},"#logspace函数用于创建一个等比数列，格式如下：\n",[68,98381,98382],{"class":70,"line":78},[68,98383,97273],{"class":872},[68,98385,98386],{"class":70,"line":89},[68,98387,98388],{"class":872},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[68,98390,98391],{"class":70,"line":115},[68,98392,98393],{"class":872},"参数为：\n",[68,98395,98396],{"class":70,"line":280},[68,98397,98398],{"class":872},"start:序列的起始位置为：base**start\n",[68,98400,98401],{"class":70,"line":301},[68,98402,98403],{"class":872},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[68,98405,98406],{"class":70,"line":320},[68,98407,98293],{"class":872},[68,98409,98410],{"class":70,"line":2915},[68,98411,98412],{"class":872},"endpoint：是否包含 stop 这个值，默认是 True\n",[68,98414,98415],{"class":70,"line":2921},[68,98416,98417],{"class":872},"base：对数的底数，默认是 10（常见对数）\n",[68,98419,98420],{"class":70,"line":2933},[68,98421,98308],{"class":872},[68,98423,98424],{"class":70,"line":3214},[68,98425,97273],{"class":872},[19,98427,98428],{},[38,98429],{"alt":63,"src":98430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98432,98433],{},"logspace()函数中的num参数也是可以不写num=的",[19,98435,98436],{},"endpoint是不可以省略的",[1652,98438,98439],{},"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":63,"searchDepth":78,"depth":78,"links":98441},[98442,98446,98451,98455,98459,98460],{"id":96831,"depth":78,"text":96832,"children":98443},[98444,98445],{"id":96835,"depth":89,"text":96836},{"id":96908,"depth":89,"text":96909},{"id":96940,"depth":78,"text":96941,"children":98447},[98448,98449,98450],{"id":96944,"depth":89,"text":96945},{"id":97126,"depth":89,"text":97127},{"id":97204,"depth":89,"text":97205},{"id":97239,"depth":78,"text":97240,"children":98452},[98453,98454],{"id":97243,"depth":89,"text":97244},{"id":97300,"depth":89,"text":97301},{"id":97396,"depth":78,"text":97397,"children":98456},[98457,98458],{"id":97400,"depth":89,"text":97401},{"id":97412,"depth":89,"text":97413},{"id":97446,"depth":78,"text":97447},{"id":97483,"depth":78,"text":97484,"children":98461},[98462,98463,98464,98465,98466,98467,98468,98469],{"id":97487,"depth":89,"text":97488},{"id":97712,"depth":89,"text":97713},{"id":97719,"depth":89,"text":97720},{"id":97928,"depth":89,"text":97929},{"id":97948,"depth":89,"text":97949},{"id":98084,"depth":89,"text":98085},{"id":98253,"depth":89,"text":98254},{"id":98368,"depth":89,"text":98369},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96823,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98476,"title":98477,"body":98478,"description":1676,"extension":1677,"meta":98571,"navigation":1679,"path":98572,"seo":98573,"stem":98574,"__hash__":98575},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98479,"toc":98569},[98480,98483,98486,98489,98492,98495,98498,98501,98504,98507,98510,98513,98515,98518,98521,98526,98529,98532,98566],[10,98481,98477],{"id":98482},"_20魔法命令mprun",[19,98484,98485],{},"逐行分析数据内存的使用情况",[19,98487,98488],{},"语法格式：",[19,98490,98491],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98493,98494],{},"分析结果列如下：",[19,98496,98497],{},"Line行号",[19,98499,98500],{},"Mem usage内存使用大小",[19,98502,98503],{},"increment内存增量",[19,98505,98506],{},"Line content代码内容",[19,98508,98509],{},"补充说明：",[19,98511,98512],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98514,96779],{},[19,98516,98517],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98519,98520],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98522,98523],{},[38,98524],{"alt":63,"src":98525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98527,98528],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98530,98531],{},"这时候需要重新加载模块",[58,98533,98535],{"className":31971,"code":98534,"language":31973,"meta":63,"style":63},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[65,98536,98537,98542,98549,98554],{"__ignoreMap":63},[68,98538,98539],{"class":70,"line":71},[68,98540,98541],{"class":74},"#重新加载模块\n",[68,98543,98544,98546],{"class":70,"line":78},[68,98545,31985],{"class":102},[68,98547,98548],{"class":85}," importlib\n",[68,98550,98551],{"class":70,"line":89},[68,98552,98553],{"class":85},"importlib.reload(mprun_test)\n",[68,98555,98556,98558,98561,98563],{"class":70,"line":115},[68,98557,2064],{"class":102},[68,98559,98560],{"class":85},"mprun ",[68,98562,2268],{"class":102},[68,98564,98565],{"class":85},"f mprun_test.fun_test mprun_test.fun_test()\n",[1652,98567,98568],{},"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":63,"searchDepth":78,"depth":78,"links":98570},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98477,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98577,"title":98578,"body":98579,"description":1676,"extension":1677,"meta":98596,"navigation":1679,"path":98597,"seo":98598,"stem":98599,"__hash__":98600},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98580,"toc":98594},[98581,98584,98589],[10,98582,98578],{"id":98583},"_3一维数组的索引和切片",[19,98585,98586],{},[38,98587],{"alt":63,"src":98588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98590,98591],{},[38,98592],{"alt":63,"src":98593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":63,"searchDepth":78,"depth":78,"links":98595},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98578,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98602,"title":98603,"body":98604,"description":1676,"extension":1677,"meta":99087,"navigation":1679,"path":99088,"seo":99089,"stem":99090,"__hash__":99091},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98605,"toc":99085},[98606,98609,98612,98617,98650,98653,98691,98694,98728,98731,98836,98839,98876,98879,98980,98983,99034,99037,99079,99082],[10,98607,98603],{"id":98608},"_4二维数组的索引与切片",[19,98610,98611],{},"①获取指定单个元素",[19,98613,98614],{},[38,98615],{"alt":63,"src":98616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[58,98618,98620],{"className":31971,"code":98619,"language":31973,"meta":63,"style":63},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[65,98621,98622,98627,98632,98637],{"__ignoreMap":63},[68,98623,98624],{"class":70,"line":71},[68,98625,98626],{"class":74},"#获取元素9\n",[68,98628,98629],{"class":70,"line":78},[68,98630,98631],{"class":74},"#先获取所在行，再获取所在列\n",[68,98633,98634],{"class":70,"line":89},[68,98635,98636],{"class":74},"#数组[行索引号，列索引号]\n",[68,98638,98639,98642,98644,98646,98648],{"class":70,"line":115},[68,98640,98641],{"class":85},"a[",[68,98643,99],{"class":92},[68,98645,2114],{"class":85},[68,98647,267],{"class":92},[68,98649,34839],{"class":85},[19,98651,98652],{},"②获取整行元素",[58,98654,98656],{"className":31971,"code":98655,"language":31973,"meta":63,"style":63},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[65,98657,98658,98663,98668,98676,98681],{"__ignoreMap":63},[68,98659,98660],{"class":70,"line":71},[68,98661,98662],{"class":74},"#获取整行 数组[行索引号]\n",[68,98664,98665],{"class":70,"line":78},[68,98666,98667],{"class":74},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[68,98669,98670,98672,98674],{"class":70,"line":89},[68,98671,98641],{"class":85},[68,98673,267],{"class":92},[68,98675,34839],{"class":85},[68,98677,98678],{"class":70,"line":115},[68,98679,98680],{"class":74},"#也可以负索引获取一行\n",[68,98682,98683,98685,98687,98689],{"class":70,"line":280},[68,98684,98641],{"class":85},[68,98686,2268],{"class":102},[68,98688,99],{"class":92},[68,98690,34839],{"class":85},[19,98692,98693],{},"③获取整列元素",[58,98695,98697],{"className":31971,"code":98696,"language":31973,"meta":63,"style":63},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[65,98698,98699,98704,98713,98718],{"__ignoreMap":63},[68,98700,98701],{"class":70,"line":71},[68,98702,98703],{"class":74},"#获取整列 数组名[:,列索引]\n",[68,98705,98706,98709,98711],{"class":70,"line":78},[68,98707,98708],{"class":85},"a[:,",[68,98710,267],{"class":92},[68,98712,34839],{"class":85},[68,98714,98715],{"class":70,"line":89},[68,98716,98717],{"class":74},"#也可以负索引获取一列\n",[68,98719,98720,98722,98724,98726],{"class":70,"line":115},[68,98721,98708],{"class":85},[68,98723,2268],{"class":102},[68,98725,99],{"class":92},[68,98727,34839],{"class":85},[19,98729,98730],{},"④部分行部分列的元素",[58,98732,98734],{"className":31971,"code":98733,"language":31973,"meta":63,"style":63},"#部分行部分列 数组名[行切片，列切片]\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",[65,98735,98736,98741,98751,98755,98759,98764,98769,98773,98785,98789,98793,98798,98803,98808,98813,98817,98822],{"__ignoreMap":63},[68,98737,98738],{"class":70,"line":71},[68,98739,98740],{"class":74},"#部分行部分列 数组名[行切片，列切片]\n",[68,98742,98743,98746,98748],{"class":70,"line":78},[68,98744,98745],{"class":85},"a[:",[68,98747,267],{"class":92},[68,98749,98750],{"class":85},",:]\n",[68,98752,98753],{"class":70,"line":89},[68,98754,95140],{"class":74},[68,98756,98757],{"class":70,"line":115},[68,98758,95504],{"class":872},[68,98760,98761],{"class":70,"line":280},[68,98762,98763],{"class":872},"array([[ 1,  2,  3,  4,  5,  6],\n",[68,98765,98766],{"class":70,"line":301},[68,98767,98768],{"class":872},"       [ 7,  8,  9, 10, 11, 12]])\n",[68,98770,98771],{"class":70,"line":320},[68,98772,95504],{"class":872},[68,98774,98775,98777,98779,98781,98783],{"class":70,"line":2915},[68,98776,98708],{"class":85},[68,98778,99],{"class":92},[68,98780,2595],{"class":85},[68,98782,2029],{"class":92},[68,98784,34839],{"class":85},[68,98786,98787],{"class":70,"line":2921},[68,98788,95140],{"class":74},[68,98790,98791],{"class":70,"line":2933},[68,98792,95504],{"class":872},[68,98794,98795],{"class":70,"line":3214},[68,98796,98797],{"class":872},"array([[ 2,  3,  4],\n",[68,98799,98800],{"class":70,"line":3219},[68,98801,98802],{"class":872},"       [ 8,  9, 10],\n",[68,98804,98805],{"class":70,"line":3225},[68,98806,98807],{"class":872},"       [14, 15, 16],\n",[68,98809,98810],{"class":70,"line":3230},[68,98811,98812],{"class":872},"       [20, 21, 22]])\n",[68,98814,98815],{"class":70,"line":3244},[68,98816,95504],{"class":872},[68,98818,98819],{"class":70,"line":3249},[68,98820,98821],{"class":74},"#对列行同时进行切片，使用了step参数\n",[68,98823,98824,98827,98829,98832,98834],{"class":70,"line":3255},[68,98825,98826],{"class":85},"a[::",[68,98828,267],{"class":92},[68,98830,98831],{"class":85},",::",[68,98833,267],{"class":92},[68,98835,34839],{"class":85},[19,98837,98838],{},"⑤同时获取两个元素",[58,98840,98842],{"className":31971,"code":98841,"language":31973,"meta":63,"style":63},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[65,98843,98844,98849,98854],{"__ignoreMap":63},[68,98845,98846],{"class":70,"line":71},[68,98847,98848],{"class":74},"#同时获取第三行第二列，第四行第一列\n",[68,98850,98851],{"class":70,"line":78},[68,98852,98853],{"class":74},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[68,98855,98856,98859,98861,98863,98865,98867,98869,98871,98873],{"class":70,"line":89},[68,98857,98858],{"class":85},"a[(",[68,98860,267],{"class":92},[68,98862,2114],{"class":85},[68,98864,288],{"class":92},[68,98866,43840],{"class":85},[68,98868,99],{"class":92},[68,98870,2114],{"class":85},[68,98872,600],{"class":92},[68,98874,98875],{"class":85},")]\n",[19,98877,98878],{},"⑥切片，对行进行反向获取",[58,98880,98882],{"className":31971,"code":98881,"language":31973,"meta":63,"style":63},"#切片 对所有行进行反向获取\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",[65,98883,98884,98889,98899,98903,98907,98912,98917,98922,98927,98931,98936,98952,98956,98961,98966,98971,98976],{"__ignoreMap":63},[68,98885,98886],{"class":70,"line":71},[68,98887,98888],{"class":74},"#切片 对所有行进行反向获取\n",[68,98890,98891,98893,98895,98897],{"class":70,"line":78},[68,98892,98826],{"class":85},[68,98894,2268],{"class":102},[68,98896,99],{"class":92},[68,98898,34839],{"class":85},[68,98900,98901],{"class":70,"line":89},[68,98902,95140],{"class":74},[68,98904,98905],{"class":70,"line":115},[68,98906,95504],{"class":872},[68,98908,98909],{"class":70,"line":280},[68,98910,98911],{"class":872},"array([[19, 20, 21, 22, 23, 24],\n",[68,98913,98914],{"class":70,"line":301},[68,98915,98916],{"class":872},"       [13, 14, 15, 16, 17, 18],\n",[68,98918,98919],{"class":70,"line":320},[68,98920,98921],{"class":872},"       [ 7,  8,  9, 10, 11, 12],\n",[68,98923,98924],{"class":70,"line":2915},[68,98925,98926],{"class":872},"       [ 1,  2,  3,  4,  5,  6]])\n",[68,98928,98929],{"class":70,"line":2921},[68,98930,95504],{"class":872},[68,98932,98933],{"class":70,"line":2933},[68,98934,98935],{"class":74},"#对行列都进行反向切片获取\n",[68,98937,98938,98940,98942,98944,98946,98948,98950],{"class":70,"line":3214},[68,98939,98826],{"class":85},[68,98941,2268],{"class":102},[68,98943,99],{"class":92},[68,98945,98831],{"class":85},[68,98947,2268],{"class":102},[68,98949,99],{"class":92},[68,98951,34839],{"class":85},[68,98953,98954],{"class":70,"line":3219},[68,98955,95504],{"class":872},[68,98957,98958],{"class":70,"line":3225},[68,98959,98960],{"class":872},"array([[24, 23, 22, 21, 20, 19],\n",[68,98962,98963],{"class":70,"line":3230},[68,98964,98965],{"class":872},"       [18, 17, 16, 15, 14, 13],\n",[68,98967,98968],{"class":70,"line":3244},[68,98969,98970],{"class":872},"       [12, 11, 10,  9,  8,  7],\n",[68,98972,98973],{"class":70,"line":3249},[68,98974,98975],{"class":872},"       [ 6,  5,  4,  3,  2,  1]])\n",[68,98977,98978],{"class":70,"line":3255},[68,98979,95504],{"class":872},[19,98981,98982],{},"⑦修改元素",[58,98984,98986],{"className":31971,"code":98985,"language":31973,"meta":63,"style":63},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[65,98987,98988,98993,99011,99016],{"__ignoreMap":63},[68,98989,98990],{"class":70,"line":71},[68,98991,98992],{"class":74},"#获取前两行和前两列\n",[68,98994,98995,98998,99000,99002,99004,99007,99009],{"class":70,"line":78},[68,98996,98997],{"class":85},"sub_a",[68,98999,869],{"class":102},[68,99001,98745],{"class":85},[68,99003,267],{"class":92},[68,99005,99006],{"class":85},",:",[68,99008,267],{"class":92},[68,99010,34839],{"class":85},[68,99012,99013],{"class":70,"line":89},[68,99014,99015],{"class":74},"#修改sub_a第一个元素的值\n",[68,99017,99018,99021,99023,99025,99027,99029,99031],{"class":70,"line":115},[68,99019,99020],{"class":85},"sub_a[",[68,99022,600],{"class":92},[68,99024,2114],{"class":85},[68,99026,600],{"class":92},[68,99028,2675],{"class":85},[68,99030,869],{"class":102},[68,99032,99033],{"class":92},"100\n",[19,99035,99036],{},"⑧数组复制copy()",[58,99038,99040],{"className":31971,"code":99039,"language":31973,"meta":63,"style":63},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[65,99041,99042,99047,99057,99062],{"__ignoreMap":63},[68,99043,99044],{"class":70,"line":71},[68,99045,99046],{"class":74},"#数组复制\n",[68,99048,99049,99052,99054],{"class":70,"line":78},[68,99050,99051],{"class":85},"copy_a",[68,99053,869],{"class":102},[68,99055,99056],{"class":85},"np.copy(sub_a)\n",[68,99058,99059],{"class":70,"line":89},[68,99060,99061],{"class":74},"#修改copy_a后不影响原数组\n",[68,99063,99064,99067,99069,99071,99073,99075,99077],{"class":70,"line":115},[68,99065,99066],{"class":85},"copy_a[",[68,99068,600],{"class":92},[68,99070,2114],{"class":85},[68,99072,600],{"class":92},[68,99074,2675],{"class":85},[68,99076,869],{"class":102},[68,99078,99033],{"class":92},[19,99080,99081],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1652,99083,99084],{},"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":63,"searchDepth":78,"depth":78,"links":99086},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98603,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99093,"title":99094,"body":99095,"description":1676,"extension":1677,"meta":99587,"navigation":1679,"path":99588,"seo":99589,"stem":99590,"__hash__":99591},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99096,"toc":99579},[99097,99100,99104,99107,99110,99163,99166,99191,99194,99213,99233,99236,99252,99256,99302,99306,99348,99352,99355,99358,99361,99364,99367,99429,99489,99493,99496,99553,99557,99562,99571,99576],[10,99098,99094],{"id":99099},"_5改变数组的维度",[14,99101,99103],{"id":99102},"_51-使用reshape","5.1 使用reshape()",[19,99105,99106],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99108,99109],{},"①一维数组转换为二维数组",[58,99111,99113],{"className":31971,"code":99112,"language":31973,"meta":63,"style":63},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[65,99114,99115,99131,99136,99141,99146],{"__ignoreMap":63},[68,99116,99117,99119,99121,99123,99125,99127,99129],{"class":70,"line":71},[68,99118,1974],{"class":85},[68,99120,869],{"class":102},[68,99122,94578],{"class":85},[68,99124,99],{"class":92},[68,99126,2114],{"class":85},[68,99128,2259],{"class":92},[68,99130,1757],{"class":85},[68,99132,99133],{"class":70,"line":78},[68,99134,99135],{"class":74},"#将一维数组进行转换\n",[68,99137,99138],{"class":70,"line":89},[68,99139,99140],{"class":74},"#注意点：元素个数不可以变\n",[68,99142,99143],{"class":70,"line":115},[68,99144,99145],{"class":74},"#转换维度要保持一致，不一致就异常！！！\n",[68,99147,99148,99150,99152,99155,99157,99159,99161],{"class":70,"line":280},[68,99149,94882],{"class":85},[68,99151,869],{"class":102},[68,99153,99154],{"class":85},"a.reshape(",[68,99156,267],{"class":92},[68,99158,2114],{"class":85},[68,99160,2080],{"class":92},[68,99162,1757],{"class":85},[19,99164,99165],{},"②一维数组转换为三维数组",[58,99167,99169],{"className":31971,"code":99168,"language":31973,"meta":63,"style":63},"aaa=a.reshape(2,3,2)\n",[65,99170,99171],{"__ignoreMap":63},[68,99172,99173,99175,99177,99179,99181,99183,99185,99187,99189],{"class":70,"line":71},[68,99174,97096],{"class":85},[68,99176,869],{"class":102},[68,99178,99154],{"class":85},[68,99180,267],{"class":92},[68,99182,2114],{"class":85},[68,99184,288],{"class":92},[68,99186,2114],{"class":85},[68,99188,267],{"class":92},[68,99190,1757],{"class":85},[19,99192,99193],{},"③二维数组转化为一维数组",[58,99195,99197],{"className":31971,"code":99196,"language":31973,"meta":63,"style":63},"#知道元素个数：\naa.reshape(12)\n",[65,99198,99199,99204],{"__ignoreMap":63},[68,99200,99201],{"class":70,"line":71},[68,99202,99203],{"class":74},"#知道元素个数：\n",[68,99205,99206,99209,99211],{"class":70,"line":78},[68,99207,99208],{"class":85},"aa.reshape(",[68,99210,2234],{"class":92},[68,99212,1757],{"class":85},[58,99214,99216],{"className":31971,"code":99215,"language":31973,"meta":63,"style":63},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[65,99217,99218,99223],{"__ignoreMap":63},[68,99219,99220],{"class":70,"line":71},[68,99221,99222],{"class":74},"#不知道元素个数，参数传递-1\n",[68,99224,99225,99227,99229,99231],{"class":70,"line":78},[68,99226,99208],{"class":85},[68,99228,2268],{"class":102},[68,99230,99],{"class":92},[68,99232,1757],{"class":85},[19,99234,99235],{},"④三维数组转换为一维数组",[58,99237,99239],{"className":31971,"code":99238,"language":31973,"meta":63,"style":63},"aaa.reshape(-1)\n",[65,99240,99241],{"__ignoreMap":63},[68,99242,99243,99246,99248,99250],{"class":70,"line":71},[68,99244,99245],{"class":85},"aaa.reshape(",[68,99247,2268],{"class":102},[68,99249,99],{"class":92},[68,99251,1757],{"class":85},[14,99253,99255],{"id":99254},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[58,99257,99259],{"className":31971,"code":99258,"language":31973,"meta":63,"style":63},"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",[65,99260,99261,99288,99293,99297],{"__ignoreMap":63},[68,99262,99263,99265,99267,99269,99271,99273,99275,99277,99279,99281,99283,99285],{"class":70,"line":71},[68,99264,94882],{"class":85},[68,99266,869],{"class":102},[68,99268,94578],{"class":85},[68,99270,99],{"class":92},[68,99272,2114],{"class":85},[68,99274,2259],{"class":92},[68,99276,94583],{"class":85},[68,99278,267],{"class":92},[68,99280,2114],{"class":85},[68,99282,2080],{"class":92},[68,99284,2165],{"class":85},[68,99286,99287],{"class":74},"#转换为2行6列的数组\n",[68,99289,99290],{"class":70,"line":78},[68,99291,99292],{"class":85},"aa.revel()\n",[68,99294,99295],{"class":70,"line":89},[68,99296,95140],{"class":74},[68,99298,99299],{"class":70,"line":115},[68,99300,99301],{"class":74},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99303,99305],{"id":99304},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[58,99307,99309],{"className":31971,"code":99308,"language":31973,"meta":63,"style":63},"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",[65,99310,99311,99335,99340,99344],{"__ignoreMap":63},[68,99312,99313,99315,99317,99319,99321,99323,99325,99327,99329,99331,99333],{"class":70,"line":71},[68,99314,94882],{"class":85},[68,99316,869],{"class":102},[68,99318,94578],{"class":85},[68,99320,99],{"class":92},[68,99322,2114],{"class":85},[68,99324,2259],{"class":92},[68,99326,94583],{"class":85},[68,99328,267],{"class":92},[68,99330,2114],{"class":85},[68,99332,2080],{"class":92},[68,99334,1757],{"class":85},[68,99336,99337],{"class":70,"line":78},[68,99338,99339],{"class":85},"aa.flatten()\n",[68,99341,99342],{"class":70,"line":89},[68,99343,95140],{"class":74},[68,99345,99346],{"class":70,"line":115},[68,99347,99301],{"class":74},[14,99349,99351],{"id":99350},"_54-使用resize","5.4 使用resize()",[19,99353,99354],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99356,99357],{},"通过resize方法可以改变数组的维度",[19,99359,99360],{},"#resize修改数组维度",[19,99362,99363],{},"#以元组的形式指定形状",[19,99365,99366],{},"#改变的是原数组",[58,99368,99370],{"className":31971,"code":99369,"language":31973,"meta":63,"style":63},"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",[65,99371,99372,99388,99408,99421,99425],{"__ignoreMap":63},[68,99373,99374,99376,99378,99380,99382,99384,99386],{"class":70,"line":71},[68,99375,1974],{"class":85},[68,99377,869],{"class":102},[68,99379,94578],{"class":85},[68,99381,99],{"class":92},[68,99383,2114],{"class":85},[68,99385,2259],{"class":92},[68,99387,1757],{"class":85},[68,99389,99390,99393,99395,99397,99399,99401,99403,99405],{"class":70,"line":78},[68,99391,99392],{"class":85},"a.shape",[68,99394,869],{"class":102},[68,99396,997],{"class":85},[68,99398,267],{"class":92},[68,99400,2114],{"class":85},[68,99402,2080],{"class":92},[68,99404,2165],{"class":85},[68,99406,99407],{"class":74},"#改变了原数组\n",[68,99409,99410,99412,99414,99417,99419],{"class":70,"line":89},[68,99411,1974],{"class":85},[68,99413,869],{"class":102},[68,99415,99416],{"class":85},"resize((",[68,99418,2234],{"class":92},[68,99420,32090],{"class":85},[68,99422,99423],{"class":70,"line":115},[68,99424,95140],{"class":74},[68,99426,99427],{"class":70,"line":280},[68,99428,99301],{"class":74},[58,99430,99432],{"className":31971,"code":99431,"language":31973,"meta":63,"style":63},"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",[65,99433,99434,99447,99451,99455,99460,99465,99470,99475,99480,99485],{"__ignoreMap":63},[68,99435,99436,99439,99441,99443,99445],{"class":70,"line":71},[68,99437,99438],{"class":85},"a.resize((",[68,99440,2080],{"class":92},[68,99442,2114],{"class":85},[68,99444,267],{"class":92},[68,99446,32090],{"class":85},[68,99448,99449],{"class":70,"line":78},[68,99450,95140],{"class":74},[68,99452,99453],{"class":70,"line":89},[68,99454,95504],{"class":872},[68,99456,99457],{"class":70,"line":115},[68,99458,99459],{"class":872},"array([[ 1,  2],\n",[68,99461,99462],{"class":70,"line":280},[68,99463,99464],{"class":872},"       [ 3,  4],\n",[68,99466,99467],{"class":70,"line":301},[68,99468,99469],{"class":872},"       [ 5,  6],\n",[68,99471,99472],{"class":70,"line":320},[68,99473,99474],{"class":872},"       [ 7,  8],\n",[68,99476,99477],{"class":70,"line":2915},[68,99478,99479],{"class":872},"       [ 9, 10],\n",[68,99481,99482],{"class":70,"line":2921},[68,99483,99484],{"class":872},"       [11, 12]])\n",[68,99486,99487],{"class":70,"line":2933},[68,99488,95504],{"class":872},[14,99490,99492],{"id":99491},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99494,99495],{},"改变了原数组",[58,99497,99499],{"className":31971,"code":99498,"language":31973,"meta":63,"style":63},"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",[65,99500,99501,99517,99533,99537,99541,99545,99549],{"__ignoreMap":63},[68,99502,99503,99505,99507,99509,99511,99513,99515],{"class":70,"line":71},[68,99504,1974],{"class":85},[68,99506,869],{"class":102},[68,99508,94578],{"class":85},[68,99510,99],{"class":92},[68,99512,2114],{"class":85},[68,99514,2259],{"class":92},[68,99516,1757],{"class":85},[68,99518,99519,99521,99523,99525,99527,99529,99531],{"class":70,"line":78},[68,99520,99392],{"class":85},[68,99522,869],{"class":102},[68,99524,997],{"class":85},[68,99526,267],{"class":92},[68,99528,2114],{"class":85},[68,99530,2080],{"class":92},[68,99532,1757],{"class":85},[68,99534,99535],{"class":70,"line":89},[68,99536,95140],{"class":74},[68,99538,99539],{"class":70,"line":115},[68,99540,95504],{"class":872},[68,99542,99543],{"class":70,"line":280},[68,99544,98763],{"class":872},[68,99546,99547],{"class":70,"line":301},[68,99548,98768],{"class":872},[68,99550,99551],{"class":70,"line":320},[68,99552,95504],{"class":872},[14,99554,99556],{"id":99555},"_56-重要比较","5.6 重要比较：",[19,99558,99559],{},[38,99560],{"alt":63,"src":99561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99563,99564,99565,99567,99568,99570],{},"口诀：NumPy 函数要么用 ",[65,99566,97538],{},"，要么用 ",[65,99569,33089],{},"，创建结构用 shape，造数据用 size",[19,99572,99573],{},[38,99574],{"alt":63,"src":99575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1652,99577,99578],{},"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":63,"searchDepth":78,"depth":78,"links":99580},[99581,99582,99583,99584,99585,99586],{"id":99102,"depth":78,"text":99103},{"id":99254,"depth":78,"text":99255},{"id":99304,"depth":78,"text":99305},{"id":99350,"depth":78,"text":99351},{"id":99491,"depth":78,"text":99492},{"id":99555,"depth":78,"text":99556},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99094,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99593,"title":99594,"body":99595,"description":1676,"extension":1677,"meta":100667,"navigation":1679,"path":100668,"seo":100669,"stem":100670,"__hash__":100671},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99596,"toc":100661},[99597,99600,99604,99607,99610,99613,99678,99681,99721,99724,99806,99809,99814,99836,99838,99843,99848,99851,99854,100009,100012,100214,100218,100221,100224,100292,100294,100299,100302,100305,100385,100389,100392,100394,100467,100469,100474,100476,100556,100560,100563,100566,100569,100572,100575,100578,100658],[10,99598,99594],{"id":99599},"_6数组的拼接",[14,99601,99603],{"id":99602},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99605,99606],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99608,99609],{},"函数内部传两个数列构成的数列或者元组",[19,99611,99612],{},"①一维数组的拼接",[58,99614,99616],{"className":31971,"code":99615,"language":31973,"meta":63,"style":63},"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",[65,99617,99618,99638,99658,99663,99668,99673],{"__ignoreMap":63},[68,99619,99620,99622,99624,99626,99628,99630,99632,99634,99636],{"class":70,"line":71},[68,99621,1974],{"class":85},[68,99623,869],{"class":102},[68,99625,94600],{"class":85},[68,99627,99],{"class":92},[68,99629,2114],{"class":85},[68,99631,267],{"class":92},[68,99633,2114],{"class":85},[68,99635,288],{"class":92},[68,99637,6256],{"class":85},[68,99639,99640,99642,99644,99646,99648,99650,99652,99654,99656],{"class":70,"line":78},[68,99641,1999],{"class":85},[68,99643,869],{"class":102},[68,99645,94600],{"class":85},[68,99647,2029],{"class":92},[68,99649,2114],{"class":85},[68,99651,2055],{"class":92},[68,99653,2114],{"class":85},[68,99655,2080],{"class":92},[68,99657,6256],{"class":85},[68,99659,99660],{"class":70,"line":89},[68,99661,99662],{"class":74},"#调用concatenate进行数组拼接\n",[68,99664,99665],{"class":70,"line":115},[68,99666,99667],{"class":85},"np.concatenate((a,b))\n",[68,99669,99670],{"class":70,"line":280},[68,99671,99672],{"class":74},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[68,99674,99675],{"class":70,"line":301},[68,99676,99677],{"class":74},"#np.concatenate([a,b])\n",[19,99679,99680],{},"②一维多个数组拼接",[58,99682,99684],{"className":31971,"code":99683,"language":31973,"meta":63,"style":63},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[65,99685,99686,99691,99711,99716],{"__ignoreMap":63},[68,99687,99688],{"class":70,"line":71},[68,99689,99690],{"class":74},"#也可以多个数组进行拼接\n",[68,99692,99693,99695,99697,99699,99701,99703,99705,99707,99709],{"class":70,"line":78},[68,99694,2024],{"class":85},[68,99696,869],{"class":102},[68,99698,94600],{"class":85},[68,99700,2182],{"class":92},[68,99702,2114],{"class":85},[68,99704,2208],{"class":92},[68,99706,2114],{"class":85},[68,99708,2259],{"class":92},[68,99710,6256],{"class":85},[68,99712,99713],{"class":70,"line":89},[68,99714,99715],{"class":85},"c\n",[68,99717,99718],{"class":70,"line":115},[68,99719,99720],{"class":85},"np.concatenate((a,b,c))\n",[19,99722,99723],{},"③二维数组拼接",[58,99725,99727],{"className":31971,"code":99726,"language":31973,"meta":63,"style":63},"#二维数组使用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",[65,99728,99729,99734,99758,99783,99788,99793],{"__ignoreMap":63},[68,99730,99731],{"class":70,"line":71},[68,99732,99733],{"class":74},"#二维数组使用concatenate进行拼接\n",[68,99735,99736,99738,99740,99742,99744,99746,99748,99750,99752,99754,99756],{"class":70,"line":78},[68,99737,94882],{"class":85},[68,99739,869],{"class":102},[68,99741,94578],{"class":85},[68,99743,99],{"class":92},[68,99745,2114],{"class":85},[68,99747,2259],{"class":92},[68,99749,94583],{"class":85},[68,99751,288],{"class":92},[68,99753,2114],{"class":85},[68,99755,2029],{"class":92},[68,99757,1757],{"class":85},[68,99759,99760,99763,99765,99767,99769,99771,99773,99775,99777,99779,99781],{"class":70,"line":89},[68,99761,99762],{"class":85},"bb",[68,99764,869],{"class":102},[68,99766,94578],{"class":85},[68,99768,2073],{"class":92},[68,99770,2114],{"class":85},[68,99772,2378],{"class":92},[68,99774,94583],{"class":85},[68,99776,288],{"class":92},[68,99778,2114],{"class":85},[68,99780,2029],{"class":92},[68,99782,1757],{"class":85},[68,99784,99785],{"class":70,"line":115},[68,99786,99787],{"class":74},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[68,99789,99790],{"class":70,"line":280},[68,99791,99792],{"class":74},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[68,99794,99795,99798,99800,99802,99804],{"class":70,"line":301},[68,99796,99797],{"class":85},"np.concatenate((aa,bb),",[68,99799,49107],{"class":6815},[68,99801,869],{"class":102},[68,99803,600],{"class":92},[68,99805,1757],{"class":85},[19,99807,99808],{},"结果：",[19,99810,99811],{},[38,99812],{"alt":63,"src":99813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[58,99815,99817],{"className":31971,"code":99816,"language":31973,"meta":63,"style":63},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[65,99818,99819,99824],{"__ignoreMap":63},[68,99820,99821],{"class":70,"line":71},[68,99822,99823],{"class":74},"#指定axis为1进行拼接\n",[68,99825,99826,99828,99830,99832,99834],{"class":70,"line":78},[68,99827,99797],{"class":85},[68,99829,49107],{"class":6815},[68,99831,869],{"class":102},[68,99833,99],{"class":92},[68,99835,1757],{"class":85},[19,99837,99808],{},[19,99839,99840],{},[38,99841],{"alt":63,"src":99842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99844,99845],{},[1890,99846,99847],{},"二维数组总结：0竖着方向，1横着方向",[19,99849,99850],{},"④三维数组拼接",[19,99852,99853],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[58,99855,99857],{"className":31971,"code":99856,"language":31973,"meta":63,"style":63},"#两个三行六列\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",[65,99858,99859,99864,99892,99922,99927,99944,99949,99954,99959,99976,99981,99986,99991,100004],{"__ignoreMap":63},[68,99860,99861],{"class":70,"line":71},[68,99862,99863],{"class":74},"#两个三行六列\n",[68,99865,99866,99868,99870,99872,99874,99876,99878,99880,99882,99884,99886,99888,99890],{"class":70,"line":78},[68,99867,97096],{"class":85},[68,99869,869],{"class":102},[68,99871,94578],{"class":85},[68,99873,99],{"class":92},[68,99875,2114],{"class":85},[68,99877,2061],{"class":92},[68,99879,94583],{"class":85},[68,99881,267],{"class":92},[68,99883,2114],{"class":85},[68,99885,288],{"class":92},[68,99887,2114],{"class":85},[68,99889,2080],{"class":92},[68,99891,1757],{"class":85},[68,99893,99894,99897,99899,99901,99903,99905,99908,99910,99912,99914,99916,99918,99920],{"class":70,"line":89},[68,99895,99896],{"class":85},"bbb",[68,99898,869],{"class":102},[68,99900,94578],{"class":85},[68,99902,2073],{"class":92},[68,99904,2114],{"class":85},[68,99906,99907],{"class":92},"137",[68,99909,94583],{"class":85},[68,99911,267],{"class":92},[68,99913,2114],{"class":85},[68,99915,288],{"class":92},[68,99917,2114],{"class":85},[68,99919,2080],{"class":92},[68,99921,1757],{"class":85},[68,99923,99924],{"class":70,"line":115},[68,99925,99926],{"class":74},"#axis=0\n",[68,99928,99929,99931,99933,99936,99938,99940,99942],{"class":70,"line":280},[68,99930,2431],{"class":85},[68,99932,869],{"class":102},[68,99934,99935],{"class":85},"np.concatenate((aaa,bbb),",[68,99937,49107],{"class":6815},[68,99939,869],{"class":102},[68,99941,600],{"class":92},[68,99943,1757],{"class":85},[68,99945,99946],{"class":70,"line":301},[68,99947,99948],{"class":85},"s.shape\n",[68,99950,99951],{"class":70,"line":320},[68,99952,99953],{"class":74},"#输出：(4,3,6)\n",[68,99955,99956],{"class":70,"line":2915},[68,99957,99958],{"class":74},"#axis=1\n",[68,99960,99961,99964,99966,99968,99970,99972,99974],{"class":70,"line":2921},[68,99962,99963],{"class":85},"ss",[68,99965,869],{"class":102},[68,99967,99935],{"class":85},[68,99969,49107],{"class":6815},[68,99971,869],{"class":102},[68,99973,99],{"class":92},[68,99975,1757],{"class":85},[68,99977,99978],{"class":70,"line":2933},[68,99979,99980],{"class":85},"ss.shape\n",[68,99982,99983],{"class":70,"line":3214},[68,99984,99985],{"class":74},"#输出：(2,6,6)\n",[68,99987,99988],{"class":70,"line":3219},[68,99989,99990],{"class":74},"#axis=2\n",[68,99992,99993,99995,99997,99999,100001],{"class":70,"line":3225},[68,99994,99935],{"class":85},[68,99996,49107],{"class":6815},[68,99998,869],{"class":102},[68,100000,267],{"class":92},[68,100002,100003],{"class":85},").shape\n",[68,100005,100006],{"class":70,"line":3230},[68,100007,100008],{"class":74},"#输出：（2，3，12）\n",[19,100010,100011],{},"⑤四维数组拼接",[58,100013,100015],{"className":31971,"code":100014,"language":31973,"meta":63,"style":63},"#两个三行六列\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",[65,100016,100017,100021,100049,100077,100102,100128,100132,100145,100150,100154,100166,100171,100175,100187,100192,100197,100209],{"__ignoreMap":63},[68,100018,100019],{"class":70,"line":71},[68,100020,99863],{"class":74},[68,100022,100023,100025,100027,100029,100031,100033,100035,100037,100039,100041,100043,100045,100047],{"class":70,"line":78},[68,100024,97096],{"class":85},[68,100026,869],{"class":102},[68,100028,94578],{"class":85},[68,100030,99],{"class":92},[68,100032,2114],{"class":85},[68,100034,2061],{"class":92},[68,100036,94583],{"class":85},[68,100038,267],{"class":92},[68,100040,2114],{"class":85},[68,100042,288],{"class":92},[68,100044,2114],{"class":85},[68,100046,2080],{"class":92},[68,100048,1757],{"class":85},[68,100050,100051,100053,100055,100057,100059,100061,100063,100065,100067,100069,100071,100073,100075],{"class":70,"line":89},[68,100052,99896],{"class":85},[68,100054,869],{"class":102},[68,100056,94578],{"class":85},[68,100058,2073],{"class":92},[68,100060,2114],{"class":85},[68,100062,99907],{"class":92},[68,100064,94583],{"class":85},[68,100066,267],{"class":92},[68,100068,2114],{"class":85},[68,100070,288],{"class":92},[68,100072,2114],{"class":85},[68,100074,2080],{"class":92},[68,100076,1757],{"class":85},[68,100078,100079,100082,100084,100086,100088,100090,100092,100094,100096,100098,100100],{"class":70,"line":115},[68,100080,100081],{"class":85},"aaaa",[68,100083,869],{"class":102},[68,100085,99245],{"class":85},[68,100087,267],{"class":92},[68,100089,2114],{"class":85},[68,100091,288],{"class":92},[68,100093,2114],{"class":85},[68,100095,288],{"class":92},[68,100097,2114],{"class":85},[68,100099,267],{"class":92},[68,100101,1757],{"class":85},[68,100103,100104,100107,100109,100112,100114,100116,100118,100120,100122,100124,100126],{"class":70,"line":280},[68,100105,100106],{"class":85},"bbbb",[68,100108,869],{"class":102},[68,100110,100111],{"class":85},"bbb.reshape(",[68,100113,267],{"class":92},[68,100115,2114],{"class":85},[68,100117,288],{"class":92},[68,100119,2114],{"class":85},[68,100121,288],{"class":92},[68,100123,2114],{"class":85},[68,100125,267],{"class":92},[68,100127,1757],{"class":85},[68,100129,100130],{"class":70,"line":301},[68,100131,99926],{"class":74},[68,100133,100134,100137,100139,100141,100143],{"class":70,"line":320},[68,100135,100136],{"class":85},"np.concatenate((aaaa,bbbb),",[68,100138,49107],{"class":6815},[68,100140,869],{"class":102},[68,100142,600],{"class":92},[68,100144,100003],{"class":85},[68,100146,100147],{"class":70,"line":2915},[68,100148,100149],{"class":74},"#结果：（4，3，3，2）\n",[68,100151,100152],{"class":70,"line":2921},[68,100153,99958],{"class":74},[68,100155,100156,100158,100160,100162,100164],{"class":70,"line":2933},[68,100157,100136],{"class":85},[68,100159,49107],{"class":6815},[68,100161,869],{"class":102},[68,100163,99],{"class":92},[68,100165,100003],{"class":85},[68,100167,100168],{"class":70,"line":3214},[68,100169,100170],{"class":74},"#结果：（2，6，3，2）\n",[68,100172,100173],{"class":70,"line":3219},[68,100174,99990],{"class":74},[68,100176,100177,100179,100181,100183,100185],{"class":70,"line":3225},[68,100178,100136],{"class":85},[68,100180,49107],{"class":6815},[68,100182,869],{"class":102},[68,100184,267],{"class":92},[68,100186,100003],{"class":85},[68,100188,100189],{"class":70,"line":3230},[68,100190,100191],{"class":74},"#结果：（2，3，6，2）\n",[68,100193,100194],{"class":70,"line":3244},[68,100195,100196],{"class":74},"#axis=3\n",[68,100198,100199,100201,100203,100205,100207],{"class":70,"line":3249},[68,100200,100136],{"class":85},[68,100202,49107],{"class":6815},[68,100204,869],{"class":102},[68,100206,288],{"class":92},[68,100208,100003],{"class":85},[68,100210,100211],{"class":70,"line":3255},[68,100212,100213],{"class":74},"#结果：（2，3，3，4）\n",[14,100215,100217],{"id":100216},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100219,100220],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100222,100223],{},"①二维数组",[58,100225,100227],{"className":31971,"code":100226,"language":31973,"meta":63,"style":63},"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",[65,100228,100229,100253,100277,100282,100287],{"__ignoreMap":63},[68,100230,100231,100233,100235,100237,100239,100241,100243,100245,100247,100249,100251],{"class":70,"line":71},[68,100232,94882],{"class":85},[68,100234,869],{"class":102},[68,100236,94578],{"class":85},[68,100238,99],{"class":92},[68,100240,2114],{"class":85},[68,100242,2259],{"class":92},[68,100244,94583],{"class":85},[68,100246,288],{"class":92},[68,100248,2114],{"class":85},[68,100250,2029],{"class":92},[68,100252,1757],{"class":85},[68,100254,100255,100257,100259,100261,100263,100265,100267,100269,100271,100273,100275],{"class":70,"line":78},[68,100256,99762],{"class":85},[68,100258,869],{"class":102},[68,100260,94578],{"class":85},[68,100262,2073],{"class":92},[68,100264,2114],{"class":85},[68,100266,2378],{"class":92},[68,100268,94583],{"class":85},[68,100270,288],{"class":92},[68,100272,2114],{"class":85},[68,100274,2029],{"class":92},[68,100276,1757],{"class":85},[68,100278,100279],{"class":70,"line":89},[68,100280,100281],{"class":85},"np.hstack((aa,bb))\n",[68,100283,100284],{"class":70,"line":115},[68,100285,100286],{"class":74},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[68,100288,100289],{"class":70,"line":280},[68,100290,100291],{"class":74},"#np.hstack([aa,bb])\n",[19,100293,99808],{},[19,100295,100296],{},[38,100297],{"alt":63,"src":100298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100300,100301],{},"等效于concatenate()函数中axis=1时的情况",[19,100303,100304],{},"②三维数组",[58,100306,100308],{"className":31971,"code":100307,"language":31973,"meta":63,"style":63},"#两个三行六列\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",[65,100309,100310,100314,100342,100370,100375,100380],{"__ignoreMap":63},[68,100311,100312],{"class":70,"line":71},[68,100313,99863],{"class":74},[68,100315,100316,100318,100320,100322,100324,100326,100328,100330,100332,100334,100336,100338,100340],{"class":70,"line":78},[68,100317,97096],{"class":85},[68,100319,869],{"class":102},[68,100321,94578],{"class":85},[68,100323,99],{"class":92},[68,100325,2114],{"class":85},[68,100327,2061],{"class":92},[68,100329,94583],{"class":85},[68,100331,267],{"class":92},[68,100333,2114],{"class":85},[68,100335,288],{"class":92},[68,100337,2114],{"class":85},[68,100339,2080],{"class":92},[68,100341,1757],{"class":85},[68,100343,100344,100346,100348,100350,100352,100354,100356,100358,100360,100362,100364,100366,100368],{"class":70,"line":89},[68,100345,99896],{"class":85},[68,100347,869],{"class":102},[68,100349,94578],{"class":85},[68,100351,2073],{"class":92},[68,100353,2114],{"class":85},[68,100355,99907],{"class":92},[68,100357,94583],{"class":85},[68,100359,267],{"class":92},[68,100361,2114],{"class":85},[68,100363,288],{"class":92},[68,100365,2114],{"class":85},[68,100367,2080],{"class":92},[68,100369,1757],{"class":85},[68,100371,100372],{"class":70,"line":115},[68,100373,100374],{"class":74},"#使用hstack\n",[68,100376,100377],{"class":70,"line":280},[68,100378,100379],{"class":85},"np.hstack((aaa,bbb)).shape\n",[68,100381,100382],{"class":70,"line":301},[68,100383,100384],{"class":74},"#输出：（2，6，6）\n",[14,100386,100388],{"id":100387},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100390,100391],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100393,100223],{},[58,100395,100397],{"className":31971,"code":100396,"language":31973,"meta":63,"style":63},"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",[65,100398,100399,100423,100447,100452,100457,100462],{"__ignoreMap":63},[68,100400,100401,100403,100405,100407,100409,100411,100413,100415,100417,100419,100421],{"class":70,"line":71},[68,100402,94882],{"class":85},[68,100404,869],{"class":102},[68,100406,94578],{"class":85},[68,100408,99],{"class":92},[68,100410,2114],{"class":85},[68,100412,2259],{"class":92},[68,100414,94583],{"class":85},[68,100416,288],{"class":92},[68,100418,2114],{"class":85},[68,100420,2029],{"class":92},[68,100422,1757],{"class":85},[68,100424,100425,100427,100429,100431,100433,100435,100437,100439,100441,100443,100445],{"class":70,"line":78},[68,100426,99762],{"class":85},[68,100428,869],{"class":102},[68,100430,94578],{"class":85},[68,100432,2073],{"class":92},[68,100434,2114],{"class":85},[68,100436,2378],{"class":92},[68,100438,94583],{"class":85},[68,100440,288],{"class":92},[68,100442,2114],{"class":85},[68,100444,2029],{"class":92},[68,100446,1757],{"class":85},[68,100448,100449],{"class":70,"line":89},[68,100450,100451],{"class":74},"#vstack 垂直方向进行堆叠\n",[68,100453,100454],{"class":70,"line":115},[68,100455,100456],{"class":85},"np.vstack((aa,bb))\n",[68,100458,100459],{"class":70,"line":280},[68,100460,100461],{"class":74},"#与hstack传的参数类似，等价于：\n",[68,100463,100464],{"class":70,"line":301},[68,100465,100466],{"class":85},"np.vstack([aa,bb])\n",[19,100468,99808],{},[19,100470,100471],{},[38,100472],{"alt":63,"src":100473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100475,100304],{},[58,100477,100479],{"className":31971,"code":100478,"language":31973,"meta":63,"style":63},"#两个三行六列\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",[65,100480,100481,100485,100513,100541,100546,100551],{"__ignoreMap":63},[68,100482,100483],{"class":70,"line":71},[68,100484,99863],{"class":74},[68,100486,100487,100489,100491,100493,100495,100497,100499,100501,100503,100505,100507,100509,100511],{"class":70,"line":78},[68,100488,97096],{"class":85},[68,100490,869],{"class":102},[68,100492,94578],{"class":85},[68,100494,99],{"class":92},[68,100496,2114],{"class":85},[68,100498,2061],{"class":92},[68,100500,94583],{"class":85},[68,100502,267],{"class":92},[68,100504,2114],{"class":85},[68,100506,288],{"class":92},[68,100508,2114],{"class":85},[68,100510,2080],{"class":92},[68,100512,1757],{"class":85},[68,100514,100515,100517,100519,100521,100523,100525,100527,100529,100531,100533,100535,100537,100539],{"class":70,"line":89},[68,100516,99896],{"class":85},[68,100518,869],{"class":102},[68,100520,94578],{"class":85},[68,100522,2073],{"class":92},[68,100524,2114],{"class":85},[68,100526,99907],{"class":92},[68,100528,94583],{"class":85},[68,100530,267],{"class":92},[68,100532,2114],{"class":85},[68,100534,288],{"class":92},[68,100536,2114],{"class":85},[68,100538,2080],{"class":92},[68,100540,1757],{"class":85},[68,100542,100543],{"class":70,"line":115},[68,100544,100545],{"class":74},"#使用vstack\n",[68,100547,100548],{"class":70,"line":280},[68,100549,100550],{"class":85},"np.vstack((aaa,bbb)).shape\n",[68,100552,100553],{"class":70,"line":301},[68,100554,100555],{"class":74},"#输出：（4，3，6）\n",[14,100557,100559],{"id":100558},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100561,100562],{},"该方法是三维数组特有的方法",[19,100564,100565],{},"也就是说",[19,100567,100568],{},"一维数组拼接方法用：concatenate()",[19,100570,100571],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100573,100574],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100576,100577],{},"四维数组及多维数组只能用concatenate进行拼接",[58,100579,100581],{"className":31971,"code":100580,"language":31973,"meta":63,"style":63},"#两个三行六列\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",[65,100582,100583,100587,100615,100643,100648,100653],{"__ignoreMap":63},[68,100584,100585],{"class":70,"line":71},[68,100586,99863],{"class":74},[68,100588,100589,100591,100593,100595,100597,100599,100601,100603,100605,100607,100609,100611,100613],{"class":70,"line":78},[68,100590,97096],{"class":85},[68,100592,869],{"class":102},[68,100594,94578],{"class":85},[68,100596,99],{"class":92},[68,100598,2114],{"class":85},[68,100600,2061],{"class":92},[68,100602,94583],{"class":85},[68,100604,267],{"class":92},[68,100606,2114],{"class":85},[68,100608,288],{"class":92},[68,100610,2114],{"class":85},[68,100612,2080],{"class":92},[68,100614,1757],{"class":85},[68,100616,100617,100619,100621,100623,100625,100627,100629,100631,100633,100635,100637,100639,100641],{"class":70,"line":89},[68,100618,99896],{"class":85},[68,100620,869],{"class":102},[68,100622,94578],{"class":85},[68,100624,2073],{"class":92},[68,100626,2114],{"class":85},[68,100628,99907],{"class":92},[68,100630,94583],{"class":85},[68,100632,267],{"class":92},[68,100634,2114],{"class":85},[68,100636,288],{"class":92},[68,100638,2114],{"class":85},[68,100640,2080],{"class":92},[68,100642,1757],{"class":85},[68,100644,100645],{"class":70,"line":115},[68,100646,100647],{"class":74},"#使用dstack\n",[68,100649,100650],{"class":70,"line":280},[68,100651,100652],{"class":85},"np.dstack((aaa,bbb)).shape\n",[68,100654,100655],{"class":70,"line":301},[68,100656,100657],{"class":74},"#结果：（2，3，12）\n",[1652,100659,100660],{},"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":63,"searchDepth":78,"depth":78,"links":100662},[100663,100664,100665,100666],{"id":99602,"depth":78,"text":99603},{"id":100216,"depth":78,"text":100217},{"id":100387,"depth":78,"text":100388},{"id":100558,"depth":78,"text":100559},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99594,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100673,"title":100674,"body":100675,"description":1676,"extension":1677,"meta":100950,"navigation":1679,"path":100951,"seo":100952,"stem":100953,"__hash__":100954},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100676,"toc":100948},[100677,100680,100683,100777,100780,100783,100786,100789,100792,100795,100798,100801,100945],[10,100678,100674],{"id":100679},"_7数组转置",[19,100681,100682],{},"使用transpose()函数",[58,100684,100686],{"className":31971,"code":100685,"language":31973,"meta":63,"style":63},"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",[65,100687,100688,100698,100722,100727,100732,100737,100742,100750,100754,100758,100763,100768,100773],{"__ignoreMap":63},[68,100689,100690,100692,100694,100696],{"class":70,"line":71},[68,100691,31985],{"class":102},[68,100693,32973],{"class":85},[68,100695,32976],{"class":102},[68,100697,32979],{"class":85},[68,100699,100700,100702,100704,100706,100708,100710,100712,100714,100716,100718,100720],{"class":70,"line":78},[68,100701,1974],{"class":85},[68,100703,869],{"class":102},[68,100705,33310],{"class":85},[68,100707,99],{"class":92},[68,100709,2114],{"class":85},[68,100711,2259],{"class":92},[68,100713,94583],{"class":85},[68,100715,2029],{"class":92},[68,100717,2114],{"class":85},[68,100719,288],{"class":92},[68,100721,1757],{"class":85},[68,100723,100724],{"class":70,"line":89},[68,100725,100726],{"class":74},"#二维数组转置\n",[68,100728,100729],{"class":70,"line":115},[68,100730,100731],{"class":74},"#调用transpose()函数\n",[68,100733,100734],{"class":70,"line":280},[68,100735,100736],{"class":85},"a.transpose()\n",[68,100738,100739],{"class":70,"line":301},[68,100740,100741],{"class":74},"#对于二维数组也可以采用.T来实现\n",[68,100743,100744,100747],{"class":70,"line":320},[68,100745,100746],{"class":85},"a.T",[68,100748,100749],{"class":74},"#与上述代码一样\n",[68,100751,100752],{"class":70,"line":2915},[68,100753,95140],{"class":74},[68,100755,100756],{"class":70,"line":2921},[68,100757,95504],{"class":872},[68,100759,100760],{"class":70,"line":2933},[68,100761,100762],{"class":872},"array([[ 1,  4,  7, 10],\n",[68,100764,100765],{"class":70,"line":3214},[68,100766,100767],{"class":872},"       [ 2,  5,  8, 11],\n",[68,100769,100770],{"class":70,"line":3219},[68,100771,100772],{"class":872},"       [ 3,  6,  9, 12]])\n",[68,100774,100775],{"class":70,"line":3225},[68,100776,95504],{"class":872},[19,100778,100779],{},"也可以使用np.transpose()的形式",[19,100781,100782],{},"#多维数组进行转置 np.transpose()",[19,100784,100785],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100787,100788],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100790,100791],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100793,100794],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100796,100797],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100799,100800],{},"四维及以上的数组也是一样的道理",[58,100802,100804],{"className":31971,"code":100803,"language":31973,"meta":63,"style":63},"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",[65,100805,100806,100834,100839,100844,100849,100867,100872,100904,100909,100914,100919,100940],{"__ignoreMap":63},[68,100807,100808,100810,100812,100814,100816,100818,100820,100822,100824,100826,100828,100830,100832],{"class":70,"line":71},[68,100809,2556],{"class":85},[68,100811,869],{"class":102},[68,100813,94578],{"class":85},[68,100815,99],{"class":92},[68,100817,2114],{"class":85},[68,100819,2061],{"class":92},[68,100821,94583],{"class":85},[68,100823,288],{"class":92},[68,100825,2114],{"class":85},[68,100827,2080],{"class":92},[68,100829,2114],{"class":85},[68,100831,267],{"class":92},[68,100833,1757],{"class":85},[68,100835,100836],{"class":70,"line":78},[68,100837,100838],{"class":85},"x.shape\n",[68,100840,100841],{"class":70,"line":89},[68,100842,100843],{"class":74},"#结果：（3,6,2）\n",[68,100845,100846],{"class":70,"line":115},[68,100847,100848],{"class":74},"#使用np.transpose()进行转置 变为(2,6,3)\n",[68,100850,100851,100854,100856,100858,100860,100862,100864],{"class":70,"line":280},[68,100852,100853],{"class":85},"np.transpose(x,(",[68,100855,267],{"class":92},[68,100857,2114],{"class":85},[68,100859,99],{"class":92},[68,100861,2114],{"class":85},[68,100863,600],{"class":92},[68,100865,100866],{"class":85},")).shape\n",[68,100868,100869],{"class":70,"line":301},[68,100870,100871],{"class":74},"#结果：(2,6,3)\n",[68,100873,100874,100876,100878,100880,100882,100884,100886,100888,100890,100892,100894,100896,100898,100900,100902],{"class":70,"line":320},[68,100875,100081],{"class":85},[68,100877,869],{"class":102},[68,100879,94578],{"class":85},[68,100881,99],{"class":92},[68,100883,2114],{"class":85},[68,100885,2061],{"class":92},[68,100887,94583],{"class":85},[68,100889,288],{"class":92},[68,100891,2114],{"class":85},[68,100893,267],{"class":92},[68,100895,2114],{"class":85},[68,100897,99],{"class":92},[68,100899,2114],{"class":85},[68,100901,2080],{"class":92},[68,100903,1757],{"class":85},[68,100905,100906],{"class":70,"line":2915},[68,100907,100908],{"class":85},"aaaa.shape\n",[68,100910,100911],{"class":70,"line":2921},[68,100912,100913],{"class":74},"#结果：（3，2，1，6）\n",[68,100915,100916],{"class":70,"line":2933},[68,100917,100918],{"class":74},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[68,100920,100921,100924,100926,100928,100930,100932,100934,100936,100938],{"class":70,"line":3214},[68,100922,100923],{"class":85},"np.transpose(aaaa,(",[68,100925,99],{"class":92},[68,100927,2114],{"class":85},[68,100929,267],{"class":92},[68,100931,2114],{"class":85},[68,100933,600],{"class":92},[68,100935,2114],{"class":85},[68,100937,288],{"class":92},[68,100939,100866],{"class":85},[68,100941,100942],{"class":70,"line":3219},[68,100943,100944],{"class":74},"#结果：(2,1,3,6)\n",[1652,100946,100947],{},"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":63,"searchDepth":78,"depth":78,"links":100949},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100674,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100956,"title":100957,"body":100958,"description":1676,"extension":1677,"meta":101692,"navigation":1679,"path":101693,"seo":101694,"stem":101695,"__hash__":101696},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100959,"toc":101690},[100960,100963,100966,100969,100972,100975,100978,100981,100984,101093,101096,101099,101687],[10,100961,100957],{"id":100962},"_8数组分割",[19,100964,100965],{},"split分割",[19,100967,100968],{},"numpy.split(ary,indics_or_sections,axis)",[19,100970,100971],{},"解释：",[19,100973,100974],{},"ary:被分割的数组",[19,100976,100977],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100979,100980],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100982,100983],{},"①一维数组的分割",[58,100985,100987],{"className":31971,"code":100986,"language":31973,"meta":63,"style":63},"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",[65,100988,100989,101005,101010,101019,101023,101028,101036,101040,101045,101050,101063,101067,101072,101084,101088],{"__ignoreMap":63},[68,100990,100991,100993,100995,100997,100999,101001,101003],{"class":70,"line":71},[68,100992,1974],{"class":85},[68,100994,869],{"class":102},[68,100996,94578],{"class":85},[68,100998,99],{"class":92},[68,101000,2114],{"class":85},[68,101002,2156],{"class":92},[68,101004,1757],{"class":85},[68,101006,101007],{"class":70,"line":78},[68,101008,101009],{"class":74},"#如果传入整数，必须能够平分，否则会报错\n",[68,101011,101012,101015,101017],{"class":70,"line":89},[68,101013,101014],{"class":85},"np.split(a,",[68,101016,267],{"class":92},[68,101018,1757],{"class":85},[68,101020,101021],{"class":70,"line":115},[68,101022,95140],{"class":74},[68,101024,101025],{"class":70,"line":280},[68,101026,101027],{"class":74},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[68,101029,101030,101032,101034],{"class":70,"line":301},[68,101031,101014],{"class":85},[68,101033,2029],{"class":92},[68,101035,1757],{"class":85},[68,101037,101038],{"class":70,"line":320},[68,101039,95140],{"class":74},[68,101041,101042],{"class":70,"line":2915},[68,101043,101044],{"class":74},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[68,101046,101047],{"class":70,"line":2921},[68,101048,101049],{"class":74},"#传入数组\n",[68,101051,101052,101055,101057,101059,101061],{"class":70,"line":2933},[68,101053,101054],{"class":85},"np.split(a,[",[68,101056,288],{"class":92},[68,101058,2114],{"class":85},[68,101060,2055],{"class":92},[68,101062,6256],{"class":85},[68,101064,101065],{"class":70,"line":3214},[68,101066,95140],{"class":74},[68,101068,101069],{"class":70,"line":3219},[68,101070,101071],{"class":74},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[68,101073,101074,101076,101078,101080,101082],{"class":70,"line":3225},[68,101075,101054],{"class":85},[68,101077,2055],{"class":92},[68,101079,2114],{"class":85},[68,101081,2105],{"class":92},[68,101083,6256],{"class":85},[68,101085,101086],{"class":70,"line":3230},[68,101087,95140],{"class":74},[68,101089,101090],{"class":70,"line":3244},[68,101091,101092],{"class":74},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101094,101095],{},"②二维数组的分割",[19,101097,101098],{},"使用split()",[58,101100,101102],{"className":31971,"code":101101,"language":31973,"meta":63,"style":63},"#二维数组分割\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",[65,101103,101104,101109,101133,101138,101147,101151,101155,101160,101165,101170,101175,101180,101185,101190,101194,101207,101211,101215,101219,101223,101227,101232,101237,101242,101246,101251,101267,101271,101275,101280,101285,101290,101295,101300,101305,101310,101315,101320,101325,101330,101335,101340,101345,101350,101355,101360,101365,101369,101373,101393,101397,101401,101406,101411,101416,101421,101426,101431,101436,101441,101446,101451,101456,101461,101466,101471,101476,101481,101486,101491,101495,101500,101509,101513,101517,101521,101525,101529,101533,101537,101541,101545,101554,101558,101562,101566,101570,101574,101578,101582,101586,101590,101594,101598,101602,101606,101610,101614,101618,101622,101626,101630,101634,101638,101651,101655,101659,101663,101667,101671,101675,101679,101683],{"__ignoreMap":63},[68,101105,101106],{"class":70,"line":71},[68,101107,101108],{"class":74},"#二维数组分割\n",[68,101110,101111,101113,101115,101117,101119,101121,101123,101125,101127,101129,101131],{"class":70,"line":78},[68,101112,94882],{"class":85},[68,101114,869],{"class":102},[68,101116,94578],{"class":85},[68,101118,99],{"class":92},[68,101120,2114],{"class":85},[68,101122,2061],{"class":92},[68,101124,94583],{"class":85},[68,101126,2080],{"class":92},[68,101128,2114],{"class":85},[68,101130,2080],{"class":92},[68,101132,1757],{"class":85},[68,101134,101135],{"class":70,"line":89},[68,101136,101137],{"class":74},"#默认axis=0  传入整数平均分,按行来的\n",[68,101139,101140,101143,101145],{"class":70,"line":115},[68,101141,101142],{"class":85},"np.split(aa,",[68,101144,288],{"class":92},[68,101146,1757],{"class":85},[68,101148,101149],{"class":70,"line":280},[68,101150,97339],{"class":74},[68,101152,101153],{"class":70,"line":301},[68,101154,95504],{"class":872},[68,101156,101157],{"class":70,"line":320},[68,101158,101159],{"class":872},"[array([[ 1,  2,  3,  4,  5,  6],\n",[68,101161,101162],{"class":70,"line":2915},[68,101163,101164],{"class":872},"        [ 7,  8,  9, 10, 11, 12]]),\n",[68,101166,101167],{"class":70,"line":2921},[68,101168,101169],{"class":872}," array([[13, 14, 15, 16, 17, 18],\n",[68,101171,101172],{"class":70,"line":2933},[68,101173,101174],{"class":872},"        [19, 20, 21, 22, 23, 24]]),\n",[68,101176,101177],{"class":70,"line":3214},[68,101178,101179],{"class":872}," array([[25, 26, 27, 28, 29, 30],\n",[68,101181,101182],{"class":70,"line":3219},[68,101183,101184],{"class":872},"        [31, 32, 33, 34, 35, 36]])]\n",[68,101186,101187],{"class":70,"line":3225},[68,101188,101189],{"class":872}," '''\n",[68,101191,101192],{"class":70,"line":3230},[68,101193,101049],{"class":74},[68,101195,101196,101199,101201,101203,101205],{"class":70,"line":3244},[68,101197,101198],{"class":85},"np.split(aa,[",[68,101200,267],{"class":92},[68,101202,2114],{"class":85},[68,101204,2055],{"class":92},[68,101206,6256],{"class":85},[68,101208,101209],{"class":70,"line":3249},[68,101210,97339],{"class":74},[68,101212,101213],{"class":70,"line":3255},[68,101214,95504],{"class":872},[68,101216,101217],{"class":70,"line":3276},[68,101218,101159],{"class":872},[68,101220,101221],{"class":70,"line":3281},[68,101222,101164],{"class":872},[68,101224,101225],{"class":70,"line":3295},[68,101226,101169],{"class":872},[68,101228,101229],{"class":70,"line":3300},[68,101230,101231],{"class":872},"        [19, 20, 21, 22, 23, 24],\n",[68,101233,101234],{"class":70,"line":3329},[68,101235,101236],{"class":872},"        [25, 26, 27, 28, 29, 30]]),\n",[68,101238,101239],{"class":70,"line":3334},[68,101240,101241],{"class":872}," array([[31, 32, 33, 34, 35, 36]])]\n",[68,101243,101244],{"class":70,"line":3351},[68,101245,95504],{"class":872},[68,101247,101248],{"class":70,"line":3356},[68,101249,101250],{"class":74},"#axis=1 按照列来分\n",[68,101252,101253,101255,101257,101259,101261,101263,101265],{"class":70,"line":3361},[68,101254,101142],{"class":85},[68,101256,288],{"class":92},[68,101258,2114],{"class":85},[68,101260,49107],{"class":6815},[68,101262,869],{"class":102},[68,101264,99],{"class":92},[68,101266,1757],{"class":85},[68,101268,101269],{"class":70,"line":3366},[68,101270,97339],{"class":74},[68,101272,101273],{"class":70,"line":3380},[68,101274,95504],{"class":872},[68,101276,101277],{"class":70,"line":3385},[68,101278,101279],{"class":872},"[array([[ 1,  2],\n",[68,101281,101282],{"class":70,"line":4177},[68,101283,101284],{"class":872},"        [ 7,  8],\n",[68,101286,101287],{"class":70,"line":4191},[68,101288,101289],{"class":872},"        [13, 14],\n",[68,101291,101292],{"class":70,"line":4199},[68,101293,101294],{"class":872},"        [19, 20],\n",[68,101296,101297],{"class":70,"line":4204},[68,101298,101299],{"class":872},"        [25, 26],\n",[68,101301,101302],{"class":70,"line":4210},[68,101303,101304],{"class":872},"        [31, 32]]),\n",[68,101306,101307],{"class":70,"line":4216},[68,101308,101309],{"class":872}," array([[ 3,  4],\n",[68,101311,101312],{"class":70,"line":4221},[68,101313,101314],{"class":872},"        [ 9, 10],\n",[68,101316,101317],{"class":70,"line":9547},[68,101318,101319],{"class":872},"        [15, 16],\n",[68,101321,101322],{"class":70,"line":9571},[68,101323,101324],{"class":872},"        [21, 22],\n",[68,101326,101327],{"class":70,"line":9576},[68,101328,101329],{"class":872},"        [27, 28],\n",[68,101331,101332],{"class":70,"line":9582},[68,101333,101334],{"class":872},"        [33, 34]]),\n",[68,101336,101337],{"class":70,"line":9609},[68,101338,101339],{"class":872}," array([[ 5,  6],\n",[68,101341,101342],{"class":70,"line":9614},[68,101343,101344],{"class":872},"        [11, 12],\n",[68,101346,101347],{"class":70,"line":9620},[68,101348,101349],{"class":872},"        [17, 18],\n",[68,101351,101352],{"class":70,"line":9632},[68,101353,101354],{"class":872},"        [23, 24],\n",[68,101356,101357],{"class":70,"line":9644},[68,101358,101359],{"class":872},"        [29, 30],\n",[68,101361,101362],{"class":70,"line":9656},[68,101363,101364],{"class":872},"        [35, 36]])]\n",[68,101366,101367],{"class":70,"line":11314},[68,101368,101189],{"class":872},[68,101370,101371],{"class":70,"line":11339},[68,101372,101049],{"class":74},[68,101374,101375,101377,101379,101381,101383,101385,101387,101389,101391],{"class":70,"line":11362},[68,101376,101198],{"class":85},[68,101378,99],{"class":92},[68,101380,2114],{"class":85},[68,101382,267],{"class":92},[68,101384,43202],{"class":85},[68,101386,49107],{"class":6815},[68,101388,869],{"class":102},[68,101390,99],{"class":92},[68,101392,1757],{"class":85},[68,101394,101395],{"class":70,"line":11386},[68,101396,95140],{"class":74},[68,101398,101399],{"class":70,"line":11391},[68,101400,95504],{"class":872},[68,101402,101403],{"class":70,"line":11396},[68,101404,101405],{"class":872},"[array([[ 1],\n",[68,101407,101408],{"class":70,"line":11401},[68,101409,101410],{"class":872},"        [ 7],\n",[68,101412,101413],{"class":70,"line":11410},[68,101414,101415],{"class":872},"        [13],\n",[68,101417,101418],{"class":70,"line":11415},[68,101419,101420],{"class":872},"        [19],\n",[68,101422,101423],{"class":70,"line":11421},[68,101424,101425],{"class":872},"        [25],\n",[68,101427,101428],{"class":70,"line":11442},[68,101429,101430],{"class":872},"        [31]]),\n",[68,101432,101433],{"class":70,"line":11448},[68,101434,101435],{"class":872}," array([[ 2],\n",[68,101437,101438],{"class":70,"line":11462},[68,101439,101440],{"class":872},"        [ 8],\n",[68,101442,101443],{"class":70,"line":11468},[68,101444,101445],{"class":872},"        [14],\n",[68,101447,101448],{"class":70,"line":11495},[68,101449,101450],{"class":872},"        [20],\n",[68,101452,101453],{"class":70,"line":11504},[68,101454,101455],{"class":872},"        [26],\n",[68,101457,101458],{"class":70,"line":11510},[68,101459,101460],{"class":872},"        [32]]),\n",[68,101462,101463],{"class":70,"line":11518},[68,101464,101465],{"class":872}," array([[ 3,  4,  5,  6],\n",[68,101467,101468],{"class":70,"line":11523},[68,101469,101470],{"class":872},"        [ 9, 10, 11, 12],\n",[68,101472,101473],{"class":70,"line":18199},[68,101474,101475],{"class":872},"        [15, 16, 17, 18],\n",[68,101477,101478],{"class":70,"line":18205},[68,101479,101480],{"class":872},"        [21, 22, 23, 24],\n",[68,101482,101483],{"class":70,"line":18228},[68,101484,101485],{"class":872},"        [27, 28, 29, 30],\n",[68,101487,101488],{"class":70,"line":18234},[68,101489,101490],{"class":872},"        [33, 34, 35, 36]])]\n",[68,101492,101493],{"class":70,"line":18257},[68,101494,95504],{"class":872},[68,101496,101497],{"class":70,"line":18271},[68,101498,101499],{"class":74},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[68,101501,101502,101505,101507],{"class":70,"line":18291},[68,101503,101504],{"class":85},"np.vsplit(aa,",[68,101506,288],{"class":92},[68,101508,1757],{"class":85},[68,101510,101511],{"class":70,"line":18297},[68,101512,95140],{"class":74},[68,101514,101515],{"class":70,"line":18308},[68,101516,95504],{"class":872},[68,101518,101519],{"class":70,"line":18331},[68,101520,101159],{"class":872},[68,101522,101523],{"class":70,"line":18353},[68,101524,101164],{"class":872},[68,101526,101527],{"class":70,"line":18358},[68,101528,101169],{"class":872},[68,101530,101531],{"class":70,"line":18364},[68,101532,101174],{"class":872},[68,101534,101535],{"class":70,"line":18378},[68,101536,101179],{"class":872},[68,101538,101539],{"class":70,"line":18391},[68,101540,101184],{"class":872},[68,101542,101543],{"class":70,"line":18396},[68,101544,95504],{"class":872},[68,101546,101547,101550,101552],{"class":70,"line":18410},[68,101548,101549],{"class":85},"np.hsplit(aa,",[68,101551,288],{"class":92},[68,101553,1757],{"class":85},[68,101555,101556],{"class":70,"line":18415},[68,101557,95140],{"class":74},[68,101559,101560],{"class":70,"line":18421},[68,101561,95504],{"class":872},[68,101563,101564],{"class":70,"line":18426},[68,101565,101279],{"class":872},[68,101567,101568],{"class":70,"line":18440},[68,101569,101284],{"class":872},[68,101571,101572],{"class":70,"line":18445},[68,101573,101289],{"class":872},[68,101575,101576],{"class":70,"line":18450},[68,101577,101294],{"class":872},[68,101579,101580],{"class":70,"line":18464},[68,101581,101299],{"class":872},[68,101583,101584],{"class":70,"line":18476},[68,101585,101304],{"class":872},[68,101587,101588],{"class":70,"line":18481},[68,101589,101309],{"class":872},[68,101591,101592],{"class":70,"line":18494},[68,101593,101314],{"class":872},[68,101595,101596],{"class":70,"line":18499},[68,101597,101319],{"class":872},[68,101599,101600],{"class":70,"line":18504},[68,101601,101324],{"class":872},[68,101603,101604],{"class":70,"line":18509},[68,101605,101329],{"class":872},[68,101607,101608],{"class":70,"line":18522},[68,101609,101334],{"class":872},[68,101611,101612],{"class":70,"line":18527},[68,101613,101339],{"class":872},[68,101615,101616],{"class":70,"line":34226},[68,101617,101344],{"class":872},[68,101619,101620],{"class":70,"line":34232},[68,101621,101349],{"class":872},[68,101623,101624],{"class":70,"line":34238},[68,101625,101354],{"class":872},[68,101627,101628],{"class":70,"line":34244},[68,101629,101359],{"class":872},[68,101631,101632],{"class":70,"line":34250},[68,101633,101364],{"class":872},[68,101635,101636],{"class":70,"line":34261},[68,101637,95504],{"class":872},[68,101639,101640,101643,101645,101647,101649],{"class":70,"line":34267},[68,101641,101642],{"class":85},"np.vsplit(aa,[",[68,101644,267],{"class":92},[68,101646,2114],{"class":85},[68,101648,2055],{"class":92},[68,101650,6256],{"class":85},[68,101652,101653],{"class":70,"line":34287},[68,101654,95140],{"class":74},[68,101656,101657],{"class":70,"line":34293},[68,101658,95504],{"class":872},[68,101660,101661],{"class":70,"line":34304},[68,101662,101159],{"class":872},[68,101664,101665],{"class":70,"line":34310},[68,101666,101164],{"class":872},[68,101668,101669],{"class":70,"line":34316},[68,101670,101169],{"class":872},[68,101672,101673],{"class":70,"line":34322},[68,101674,101231],{"class":872},[68,101676,101677],{"class":70,"line":34328},[68,101678,101236],{"class":872},[68,101680,101681],{"class":70,"line":34334},[68,101682,101241],{"class":872},[68,101684,101685],{"class":70,"line":34340},[68,101686,101189],{"class":872},[1652,101688,101689],{},"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":63,"searchDepth":78,"depth":78,"links":101691},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100957,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101698,"title":101699,"body":101700,"description":1676,"extension":1677,"meta":102193,"navigation":1679,"path":102194,"seo":102195,"stem":102196,"__hash__":102197},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101701,"toc":102184},[101702,101705,101708,101733,101737,101796,101848,101852,101854,101890,101944,101946,101984,102055,102059,102064,102068,102071,102103,102106,102110,102113,102116,102119,102122,102127,102131,102134,102137,102140,102143,102148,102152,102157,102160,102181],[10,101703,101699],{"id":101704},"_9数学函数",[19,101706,101707],{},"补充回顾：python的列表推导式",[58,101709,101711],{"className":31971,"code":101710,"language":31973,"meta":63,"style":63},"[1\u002Fi for i in a]\n",[65,101712,101713],{"__ignoreMap":63},[68,101714,101715,101717,101719,101721,101724,101726,101728,101730],{"class":70,"line":71},[68,101716,2626],{"class":85},[68,101718,99],{"class":92},[68,101720,2320],{"class":102},[68,101722,101723],{"class":85},"i ",[68,101725,4624],{"class":102},[68,101727,11036],{"class":85},[68,101729,27637],{"class":102},[68,101731,101732],{"class":85}," a]\n",[14,101734,101736],{"id":101735},"_91-求倒数","9.1 求倒数",[58,101738,101740],{"className":31971,"code":101739,"language":31973,"meta":63,"style":63},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[65,101741,101742,101747,101775,101787],{"__ignoreMap":63},[68,101743,101744],{"class":70,"line":71},[68,101745,101746],{"class":74},"#数组求倒数\n",[68,101748,101749,101751,101753,101755,101757,101759,101761,101763,101765,101767,101769,101771,101773],{"class":70,"line":78},[68,101750,1974],{"class":85},[68,101752,869],{"class":102},[68,101754,2626],{"class":85},[68,101756,99],{"class":92},[68,101758,2114],{"class":85},[68,101760,267],{"class":92},[68,101762,2114],{"class":85},[68,101764,288],{"class":92},[68,101766,2114],{"class":85},[68,101768,2029],{"class":92},[68,101770,2114],{"class":85},[68,101772,2055],{"class":92},[68,101774,34839],{"class":85},[68,101776,101777,101779,101781,101784],{"class":70,"line":89},[68,101778,1999],{"class":85},[68,101780,869],{"class":102},[68,101782,101783],{"class":85},"np.array(a)",[68,101785,101786],{"class":74},"#将列表转换为数组\n",[68,101788,101789,101791,101793],{"class":70,"line":115},[68,101790,99],{"class":92},[68,101792,2320],{"class":102},[68,101794,101795],{"class":85},"b\n",[58,101797,101799],{"className":31971,"code":101798,"language":31973,"meta":63,"style":63},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[65,101800,101801,101829,101838,101843],{"__ignoreMap":63},[68,101802,101803,101805,101807,101809,101811,101813,101815,101817,101819,101821,101823,101825,101827],{"class":70,"line":71},[68,101804,1974],{"class":85},[68,101806,869],{"class":102},[68,101808,2626],{"class":85},[68,101810,99],{"class":92},[68,101812,2114],{"class":85},[68,101814,267],{"class":92},[68,101816,2114],{"class":85},[68,101818,288],{"class":92},[68,101820,2114],{"class":85},[68,101822,2029],{"class":92},[68,101824,2114],{"class":85},[68,101826,2055],{"class":92},[68,101828,34839],{"class":85},[68,101830,101831,101833,101835],{"class":70,"line":78},[68,101832,1999],{"class":85},[68,101834,869],{"class":102},[68,101836,101837],{"class":85},"np.array(a)\n",[68,101839,101840],{"class":70,"line":89},[68,101841,101842],{"class":74},"#调用numpy中的函数reciprocal()\n",[68,101844,101845],{"class":70,"line":115},[68,101846,101847],{"class":85},"np.reciprocal(b)\n",[14,101849,101851],{"id":101850},"_92-求平方","9.2 求平方",[19,101853,96106],{},[58,101855,101857],{"className":31971,"code":101856,"language":31973,"meta":63,"style":63},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[65,101858,101859,101864,101869,101885],{"__ignoreMap":63},[68,101860,101861],{"class":70,"line":71},[68,101862,101863],{"class":74},"#square()，求平方\n",[68,101865,101866],{"class":70,"line":78},[68,101867,101868],{"class":74},"#一维数组\n",[68,101870,101871,101873,101875,101877,101879,101881,101883],{"class":70,"line":89},[68,101872,1974],{"class":85},[68,101874,869],{"class":102},[68,101876,94578],{"class":85},[68,101878,99],{"class":92},[68,101880,2114],{"class":85},[68,101882,2182],{"class":92},[68,101884,1757],{"class":85},[68,101886,101887],{"class":70,"line":115},[68,101888,101889],{"class":85},"np.square(a)\n",[58,101891,101893],{"className":31971,"code":101892,"language":31973,"meta":63,"style":63},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[65,101894,101895,101900,101905,101926],{"__ignoreMap":63},[68,101896,101897],{"class":70,"line":71},[68,101898,101899],{"class":74},"#或者通过循环遍历的形式来计算\n",[68,101901,101902],{"class":70,"line":78},[68,101903,101904],{"class":74},"#这是一个列表\n",[68,101906,101907,101910,101912,101914,101916,101918,101920,101923],{"class":70,"line":89},[68,101908,101909],{"class":85},"[i",[68,101911,2191],{"class":102},[68,101913,101723],{"class":85},[68,101915,4624],{"class":102},[68,101917,11036],{"class":85},[68,101919,27637],{"class":102},[68,101921,101922],{"class":85}," a]",[68,101924,101925],{"class":74},"#这个求完之后在数列当中\n",[68,101927,101928,101931,101933,101935,101937,101939,101941],{"class":70,"line":115},[68,101929,101930],{"class":85},"np.array([i",[68,101932,2191],{"class":102},[68,101934,101723],{"class":85},[68,101936,4624],{"class":102},[68,101938,11036],{"class":85},[68,101940,27637],{"class":102},[68,101942,101943],{"class":85}," a])\n",[19,101945,94867],{},[58,101947,101949],{"className":31971,"code":101948,"language":31973,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[65,101950,101951,101955,101979],{"__ignoreMap":63},[68,101952,101953],{"class":70,"line":71},[68,101954,94877],{"class":74},[68,101956,101957,101959,101961,101963,101965,101967,101969,101971,101973,101975,101977],{"class":70,"line":78},[68,101958,94882],{"class":85},[68,101960,869],{"class":102},[68,101962,94578],{"class":85},[68,101964,99],{"class":92},[68,101966,2114],{"class":85},[68,101968,2259],{"class":92},[68,101970,94583],{"class":85},[68,101972,2029],{"class":92},[68,101974,2114],{"class":85},[68,101976,288],{"class":92},[68,101978,1757],{"class":85},[68,101980,101981],{"class":70,"line":89},[68,101982,101983],{"class":85},"np.square(aa)\n",[58,101985,101987],{"className":31971,"code":101986,"language":31973,"meta":63,"style":63},"#传统的方式\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",[65,101988,101989,101994,102003,102019,102035,102050],{"__ignoreMap":63},[68,101990,101991],{"class":70,"line":71},[68,101992,101993],{"class":74},"#传统的方式\n",[68,101995,101996,101998,102000],{"class":70,"line":78},[68,101997,99762],{"class":85},[68,101999,869],{"class":102},[68,102001,102002],{"class":85},"np.empty_like(aa)\n",[68,102004,102005,102007,102009,102011,102013,102015,102017],{"class":70,"line":89},[68,102006,4624],{"class":102},[68,102008,11036],{"class":85},[68,102010,27637],{"class":102},[68,102012,34036],{"class":92},[68,102014,997],{"class":85},[68,102016,2029],{"class":92},[68,102018,32379],{"class":85},[68,102020,102021,102023,102025,102027,102029,102031,102033],{"class":70,"line":115},[68,102022,4800],{"class":102},[68,102024,11098],{"class":85},[68,102026,27637],{"class":102},[68,102028,34036],{"class":92},[68,102030,997],{"class":85},[68,102032,288],{"class":92},[68,102034,32379],{"class":85},[68,102036,102037,102040,102042,102045,102047],{"class":70,"line":280},[68,102038,102039],{"class":85},"        bb[i,j]",[68,102041,869],{"class":102},[68,102043,102044],{"class":85},"aa[i,j]",[68,102046,2191],{"class":102},[68,102048,102049],{"class":85},"aa[i,j]\n",[68,102051,102052],{"class":70,"line":301},[68,102053,102054],{"class":85},"bb\n",[14,102056,102058],{"id":102057},"_93-求各元素的符号","9.3 求各元素的符号",[19,102060,102061],{},[38,102062],{"alt":63,"src":102063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102065,102067],{"id":102066},"_94-modf函数","9.4 modf函数",[19,102069,102070],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[58,102072,102074],{"className":31971,"code":102073,"language":31973,"meta":63,"style":63},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[65,102075,102076,102098],{"__ignoreMap":63},[68,102077,102078,102080,102082,102084,102086,102088,102090,102092,102094,102096],{"class":70,"line":71},[68,102079,1974],{"class":85},[68,102081,869],{"class":102},[68,102083,94578],{"class":85},[68,102085,2268],{"class":102},[68,102087,2182],{"class":92},[68,102089,2114],{"class":85},[68,102091,2182],{"class":92},[68,102093,2114],{"class":85},[68,102095,1137],{"class":92},[68,102097,1757],{"class":85},[68,102099,102100],{"class":70,"line":78},[68,102101,102102],{"class":85},"np.modf(a)\n",[19,102104,102105],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102107,102109],{"id":102108},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102111,102112],{},"np.cell()",[19,102114,102115],{},"np.floor()",[19,102117,102118],{},"np.rint()",[19,102120,102121],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102123,102124],{},[38,102125],{"alt":63,"src":102126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102128,102130],{"id":102129},"_96-around函数","9.6 around()函数",[19,102132,102133],{},"around()函数也可以实现对数的小数位数进行操作",[19,102135,102136],{},"其中的参数：",[19,102138,102139],{},"1.要传的数组",[19,102141,102142],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102144,102145],{},[38,102146],{"alt":63,"src":102147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102149,102151],{"id":102150},"_97-三角函数","9.7 三角函数",[19,102153,102154],{},[38,102155],{"alt":63,"src":102156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102158,102159],{},"引入图像模块非常重要",[58,102161,102163],{"className":31971,"code":102162,"language":31973,"meta":63,"style":63},"from matplotlib import pyplot as plt\n",[65,102164,102165],{"__ignoreMap":63},[68,102166,102167,102169,102172,102174,102177,102179],{"class":70,"line":71},[68,102168,32330],{"class":102},[68,102170,102171],{"class":85}," matplotlib ",[68,102173,31985],{"class":102},[68,102175,102176],{"class":85}," pyplot ",[68,102178,32976],{"class":102},[68,102180,33030],{"class":85},[1652,102182,102183],{},"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":63,"searchDepth":78,"depth":78,"links":102185},[102186,102187,102188,102189,102190,102191,102192],{"id":101735,"depth":78,"text":101736},{"id":101850,"depth":78,"text":101851},{"id":102057,"depth":78,"text":102058},{"id":102066,"depth":78,"text":102067},{"id":102108,"depth":78,"text":102109},{"id":102129,"depth":78,"text":102130},{"id":102150,"depth":78,"text":102151},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101699,"description":1676},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102199,"title":102200,"body":102201,"description":1676,"extension":1677,"meta":102205,"navigation":1679,"path":102206,"seo":102207,"stem":102208,"__hash__":102209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102202,"toc":102203},[],{"title":63,"searchDepth":78,"depth":78,"links":102204},[],{"category":52013},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102200,"description":1676},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102211,"title":102212,"body":102213,"description":63,"extension":1677,"meta":104221,"navigation":1679,"path":104222,"seo":104223,"stem":104224,"__hash__":104225},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102214,"toc":104197},[102215,102218,102222,102225,102228,102234,102237,102260,102263,102297,102300,102341,102345,102348,102441,102444,102488,102491,102508,102511,102525,102528,102531,102576,102579,102616,102620,102623,102629,102634,102654,102658,102661,102727,102730,102748,102752,102755,102784,102794,102800,102804,102807,102813,102824,102828,102831,102861,102864,103144,103147,103150,103161,103164,103167,103189,103196,103199,103217,103220,103223,103237,103245,103248,103274,103280,103283,103286,103296,103308,103328,103337,103357,103367,103391,103404,103418,103423,103464,103481,103506,103518,103538,103544,103589,103608,103625,103638,103654,103661,103673,103682,103717,103738,103763,103776,103800,103815,103840,103843,103864,103873,103876,103887,103891,103894,103900,103912,103919,103923,103926,103938,103941,103955,103958,103968,103978,103981,104021,104024,104028,104034,104037,104051,104055,104058,104091,104095,104098,104121,104129,104132,104138,104144,104147,104150,104178,104182,104185,104191,104194],[10,102216,102212],{"id":102217},"_1环境安装与第一个-mujoco-程序",[14,102219,102221],{"id":102220},"_1目标说明","1.目标说明",[19,102223,102224],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102226,102227],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[58,102229,102232],{"className":102230,"code":102231,"language":6786,"meta":63},[6784],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[65,102233,102231],{"__ignoreMap":63},[19,102235,102236],{},"需要掌握:",[48,102238,102239,102242,102245,102250,102255],{},[51,102240,102241],{},"Fedora 44 下 MuJoCo 的系统依赖",[51,102243,102244],{},"Python 虚拟环境创建",[51,102246,102247],{},[65,102248,102249],{},"mujoco.MjModel",[51,102251,102252],{},[65,102253,102254],{},"mujoco.MjData",[51,102256,102257],{},[65,102258,102259],{},"mujoco.mj_step(model, data)",[19,102261,102262],{},"MuJoCo 中最重要的两个对象:",[120,102264,102265,102275],{},[123,102266,102267],{},[126,102268,102269,102272],{},[129,102270,102271],{"align":131},"对象",[129,102273,102274],{"align":131},"含义",[137,102276,102277,102287],{},[126,102278,102279,102284],{},[142,102280,102281],{"align":131},[65,102282,102283],{},"MjModel",[142,102285,102286],{"align":131},"模型结构，来自 XML，基本不随时间变化",[126,102288,102289,102294],{},[142,102290,102291],{"align":131},[65,102292,102293],{},"MjData",[142,102295,102296],{"align":131},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102298,102299],{},"可以先用一个类比理解：",[120,102301,102302,102312],{},[123,102303,102304],{},[126,102305,102306,102309],{},[129,102307,102308],{"align":131},"类比",[129,102310,102311],{"align":131},"MuJoCo 对象",[137,102313,102314,102323,102332],{},[126,102315,102316,102319],{},[142,102317,102318],{"align":131},"游戏地图和角色配置",[142,102320,102321],{"align":131},[65,102322,102283],{},[126,102324,102325,102328],{},[142,102326,102327],{"align":131},"游戏运行到当前帧的状态",[142,102329,102330],{"align":131},[65,102331,102293],{},[126,102333,102334,102337],{},[142,102335,102336],{"align":131},"前进一帧",[142,102338,102339],{"align":131},[65,102340,102259],{},[14,102342,102344],{"id":102343},"_2环境与依赖安装","2.环境与依赖安装",[19,102346,102347],{},"Fedora 44 系统依赖:",[58,102349,102351],{"className":25416,"code":102350,"language":25418,"meta":63,"style":63},"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",[65,102352,102353,102365,102378,102391,102401,102411,102430],{"__ignoreMap":63},[68,102354,102355,102357,102359,102361,102363],{"class":70,"line":71},[68,102356,26171],{"class":587},[68,102358,27909],{"class":872},[68,102360,25428],{"class":872},[68,102362,27994],{"class":92},[68,102364,26273],{"class":92},[68,102366,102367,102370,102373,102376],{"class":70,"line":78},[68,102368,102369],{"class":872},"  python3",[68,102371,102372],{"class":872}," python3-pip",[68,102374,102375],{"class":872}," python3-virtualenv",[68,102377,26273],{"class":92},[68,102379,102380,102383,102386,102389],{"class":70,"line":89},[68,102381,102382],{"class":872},"  mesa-libGL",[68,102384,102385],{"class":872}," mesa-libGLU",[68,102387,102388],{"class":872}," mesa-dri-drivers",[68,102390,26273],{"class":92},[68,102392,102393,102396,102399],{"class":70,"line":115},[68,102394,102395],{"class":872},"  libglvnd-glx",[68,102397,102398],{"class":872}," libglvnd-opengl",[68,102400,26273],{"class":92},[68,102402,102403,102406,102409],{"class":70,"line":280},[68,102404,102405],{"class":872},"  glfw",[68,102407,102408],{"class":872}," glfw-devel",[68,102410,26273],{"class":92},[68,102412,102413,102416,102419,102422,102425,102428],{"class":70,"line":301},[68,102414,102415],{"class":872},"  libX11",[68,102417,102418],{"class":872}," libXcursor",[68,102420,102421],{"class":872}," libXi",[68,102423,102424],{"class":872}," libXinerama",[68,102426,102427],{"class":872}," libXrandr",[68,102429,26273],{"class":92},[68,102431,102432,102435,102438],{"class":70,"line":320},[68,102433,102434],{"class":872},"  gcc",[68,102436,102437],{"class":872}," gcc-c++",[68,102439,102440],{"class":872}," make\n",[19,102442,102443],{},"创建 Python 环境:",[58,102445,102447],{"className":25416,"code":102446,"language":25418,"meta":63,"style":63},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[65,102448,102449,102463,102471],{"__ignoreMap":63},[68,102450,102451,102454,102457,102460],{"class":70,"line":71},[68,102452,102453],{"class":587},"python3",[68,102455,102456],{"class":92}," -m",[68,102458,102459],{"class":872}," venv",[68,102461,102462],{"class":872}," .venv\n",[68,102464,102465,102468],{"class":70,"line":78},[68,102466,102467],{"class":92},"source",[68,102469,102470],{"class":872}," .venv\u002Fbin\u002Factivate\n",[68,102472,102473,102475,102477,102480,102482,102485],{"class":70,"line":89},[68,102474,31973],{"class":587},[68,102476,102456],{"class":92},[68,102478,102479],{"class":872}," pip",[68,102481,25428],{"class":872},[68,102483,102484],{"class":92}," --upgrade",[68,102486,102487],{"class":872}," pip\n",[19,102489,102490],{},"pip 安装:",[58,102492,102494],{"className":25416,"code":102493,"language":25418,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy\n",[65,102495,102496],{"__ignoreMap":63},[68,102497,102498,102500,102502,102505],{"class":70,"line":71},[68,102499,25425],{"class":587},[68,102501,25428],{"class":872},[68,102503,102504],{"class":872}," \"mujoco>=2.3\"",[68,102506,102507],{"class":872}," numpy\n",[19,102509,102510],{},"安装完成后，先做最小检查：",[58,102512,102514],{"className":25416,"code":102513,"language":25418,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[65,102515,102516],{"__ignoreMap":63},[68,102517,102518,102520,102522],{"class":70,"line":71},[68,102519,31973],{"class":587},[68,102521,31951],{"class":92},[68,102523,102524],{"class":872}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102526,102527],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102529,102530],{},"conda 安装:",[58,102532,102534],{"className":25416,"code":102533,"language":25418,"meta":63,"style":63},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[65,102535,102536,102556,102566],{"__ignoreMap":63},[68,102537,102538,102540,102542,102544,102547,102550,102553],{"class":70,"line":71},[68,102539,31923],{"class":587},[68,102541,30769],{"class":872},[68,102543,26710],{"class":92},[68,102545,102546],{"class":872}," mujoco-study",[68,102548,102549],{"class":872}," python=",[68,102551,102552],{"class":92},"3.10",[68,102554,102555],{"class":92}," -y\n",[68,102557,102558,102560,102563],{"class":70,"line":78},[68,102559,31923],{"class":587},[68,102561,102562],{"class":872}," activate",[68,102564,102565],{"class":872}," mujoco-study\n",[68,102567,102568,102570,102572,102574],{"class":70,"line":89},[68,102569,25425],{"class":587},[68,102571,25428],{"class":872},[68,102573,102504],{"class":872},[68,102575,102507],{"class":872},[19,102577,102578],{},"版本冲突说明:",[48,102580,102581,102587,102597,102606],{},[51,102582,102583,102584,29978],{},"不要安装 ",[65,102585,102586],{},"mujoco-py",[51,102588,102589,102590,102592,102593,102596],{},"如果旧项目里同时安装了 ",[65,102591,102586],{}," 和 ",[65,102594,102595],{},"mujoco","，建议新建干净虚拟环境。",[51,102598,102599,102602,102603,29978],{},[65,102600,102601],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[65,102604,102605],{},"~\u002F.mujoco\u002Fmujoco210",[51,102607,102608,102609,84116,102612,102615],{},"离屏渲染可能涉及 OpenGL 后端，",[65,102610,102611],{},"MUJOCO_GL=egl",[65,102613,102614],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102617,102619],{"id":102618},"_3核心概念解释","3.核心概念解释",[19,102621,102622],{},"MuJoCo 的基本执行流程:",[58,102624,102627],{"className":102625,"code":102626,"language":6786,"meta":63},[6784],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[65,102628,102626],{"__ignoreMap":63},[19,102630,102631,102633],{},[65,102632,102283],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102635,102636,102638,102639,1949,102642,1949,102645,1949,102648,1949,102651,29978],{},[65,102637,102293],{}," 存放仿真运行时状态，例如 ",[65,102640,102641],{},"data.time",[65,102643,102644],{},"data.qpos",[65,102646,102647],{},"data.qvel",[65,102649,102650],{},"data.ctrl",[65,102652,102653],{},"data.xpos",[43,102655,102657],{"id":102656},"xml-是什么","XML 是什么",[19,102659,102660],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[58,102662,102664],{"className":54652,"code":102663,"language":54654,"meta":63,"style":63},"\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",[65,102665,102666,102688,102719],{"__ignoreMap":63},[68,102667,102668,102670,102672,102674,102676,102678,102681,102683,102686],{"class":70,"line":71},[68,102669,861],{"class":85},[68,102671,53385],{"class":81},[68,102673,16516],{"class":587},[68,102675,869],{"class":85},[68,102677,55075],{"class":872},[68,102679,102680],{"class":587}," pos",[68,102682,869],{"class":85},[68,102684,102685],{"class":872},"\"0 0 1\"",[68,102687,876],{"class":85},[68,102689,102690,102692,102695,102697,102699,102702,102704,102706,102708,102711,102713,102716],{"class":70,"line":78},[68,102691,53729],{"class":85},[68,102693,102694],{"class":81},"geom",[68,102696,16516],{"class":587},[68,102698,869],{"class":85},[68,102700,102701],{"class":872},"\"box_geom\"",[68,102703,55408],{"class":587},[68,102705,869],{"class":85},[68,102707,55075],{"class":872},[68,102709,102710],{"class":587}," size",[68,102712,869],{"class":85},[68,102714,102715],{"class":872},"\"0.1 0.1 0.1\"",[68,102717,102718],{"class":85},"\u002F>\n",[68,102720,102721,102723,102725],{"class":70,"line":89},[68,102722,886],{"class":85},[68,102724,53385],{"class":81},[68,102726,876],{"class":85},[19,102728,102729],{},"这段意思是：",[48,102731,102732,102738,102745],{},[51,102733,102734,102735,102737],{},"创建一个叫 ",[65,102736,55298],{}," 的刚体。",[51,102739,102740,102741,102744],{},"它初始放在 ",[65,102742,102743],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[51,102746,102747],{},"它里面有一个盒子形状的几何体。",[43,102749,102751],{"id":102750},"timestep-是什么","timestep 是什么",[19,102753,102754],{},"XML 里的：",[58,102756,102758],{"className":54652,"code":102757,"language":54654,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[65,102759,102760],{"__ignoreMap":63},[68,102761,102762,102764,102766,102769,102771,102774,102777,102779,102782],{"class":70,"line":71},[68,102763,861],{"class":85},[68,102765,70748],{"class":81},[68,102767,102768],{"class":587}," timestep",[68,102770,869],{"class":85},[68,102772,102773],{"class":872},"\"0.01\"",[68,102775,102776],{"class":587}," gravity",[68,102778,869],{"class":85},[68,102780,102781],{"class":872},"\"0 0 -9.81\"",[68,102783,102718],{"class":85},[19,102785,102786,102787,102790,102791,102793],{},"表示每调用一次 ",[65,102788,102789],{},"mj_step","，仿真时间前进 ",[65,102792,40579],{}," 秒。循环 100 次，大约就是 1 秒：",[58,102795,102798],{"className":102796,"code":102797,"language":6786,"meta":63},[6784],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[65,102799,102797],{"__ignoreMap":63},[43,102801,102803],{"id":102802},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102805,102806],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[58,102808,102811],{"className":102809,"code":102810,"language":6786,"meta":63},[6784],"x y z qw qx qy qz\n",[65,102812,102810],{"__ignoreMap":63},[19,102814,102815,102816,102819,102820,102823],{},"表示一个自由刚体的位置和姿态。其中 ",[65,102817,102818],{},"x y z"," 是位置，",[65,102821,102822],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102825,102827],{"id":102826},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102829,102830],{},"新建文件:",[58,102832,102834],{"className":25416,"code":102833,"language":25418,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[65,102835,102836,102846,102853],{"__ignoreMap":63},[68,102837,102838,102841,102843],{"class":70,"line":71},[68,102839,102840],{"class":587},"mkdir",[68,102842,30809],{"class":92},[68,102844,102845],{"class":872}," mujoco_tutorial\n",[68,102847,102848,102851],{"class":70,"line":78},[68,102849,102850],{"class":92},"cd",[68,102852,102845],{"class":872},[68,102854,102855,102858],{"class":70,"line":89},[68,102856,102857],{"class":587},"touch",[68,102859,102860],{"class":872}," ch1_first_sim.py\n",[19,102862,102863],{},"写入:",[58,102865,102867],{"className":31971,"code":102866,"language":31973,"meta":63,"style":63},"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",[65,102868,102869,102876,102880,102884,102894,102899,102904,102908,102913,102918,102922,102927,102932,102937,102942,102947,102952,102956,102960,102964,102977,102991,103001,103005,103017,103029,103041,103053,103065,103069,103086,103091,103095,103106,103117,103121,103125,103139],{"__ignoreMap":63},[68,102870,102871,102873],{"class":70,"line":71},[68,102872,31985],{"class":102},[68,102874,102875],{"class":85}," mujoco\n",[68,102877,102878],{"class":70,"line":78},[68,102879,4000],{"emptyLinePlaceholder":1679},[68,102881,102882],{"class":70,"line":89},[68,102883,4000],{"emptyLinePlaceholder":1679},[68,102885,102886,102889,102891],{"class":70,"line":115},[68,102887,102888],{"class":92},"XML",[68,102890,15161],{"class":102},[68,102892,102893],{"class":872}," \"\"\"\n",[68,102895,102896],{"class":70,"line":280},[68,102897,102898],{"class":872},"\u003Cmujoco model=\"first_sim\">\n",[68,102900,102901],{"class":70,"line":301},[68,102902,102903],{"class":872},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[68,102905,102906],{"class":70,"line":320},[68,102907,4000],{"emptyLinePlaceholder":1679},[68,102909,102910],{"class":70,"line":2915},[68,102911,102912],{"class":872},"  \u003Cworldbody>\n",[68,102914,102915],{"class":70,"line":2921},[68,102916,102917],{"class":872},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,102919,102920],{"class":70,"line":2933},[68,102921,4000],{"emptyLinePlaceholder":1679},[68,102923,102924],{"class":70,"line":3214},[68,102925,102926],{"class":872},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[68,102928,102929],{"class":70,"line":3219},[68,102930,102931],{"class":872},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[68,102933,102934],{"class":70,"line":3225},[68,102935,102936],{"class":872},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,102938,102939],{"class":70,"line":3230},[68,102940,102941],{"class":872},"    \u003C\u002Fbody>\n",[68,102943,102944],{"class":70,"line":3244},[68,102945,102946],{"class":872},"  \u003C\u002Fworldbody>\n",[68,102948,102949],{"class":70,"line":3249},[68,102950,102951],{"class":872},"\u003C\u002Fmujoco>\n",[68,102953,102954],{"class":70,"line":3255},[68,102955,97273],{"class":872},[68,102957,102958],{"class":70,"line":3276},[68,102959,4000],{"emptyLinePlaceholder":1679},[68,102961,102962],{"class":70,"line":3281},[68,102963,4000],{"emptyLinePlaceholder":1679},[68,102965,102966,102968,102970,102973,102975],{"class":70,"line":3295},[68,102967,33540],{"class":102},[68,102969,3574],{"class":587},[68,102971,102972],{"class":85},"() -> ",[68,102974,97261],{"class":92},[68,102976,5338],{"class":85},[68,102978,102979,102982,102984,102987,102989],{"class":70,"line":3300},[68,102980,102981],{"class":85},"    model ",[68,102983,869],{"class":102},[68,102985,102986],{"class":85}," mujoco.MjModel.from_xml_string(",[68,102988,102888],{"class":92},[68,102990,1757],{"class":85},[68,102992,102993,102996,102998],{"class":70,"line":3329},[68,102994,102995],{"class":85},"    data ",[68,102997,869],{"class":102},[68,102999,103000],{"class":85}," mujoco.MjData(model)\n",[68,103002,103003],{"class":70,"line":3334},[68,103004,4000],{"emptyLinePlaceholder":1679},[68,103006,103007,103009,103011,103014],{"class":70,"line":3351},[68,103008,32892],{"class":92},[68,103010,997],{"class":85},[68,103012,103013],{"class":872},"\"nq:\"",[68,103015,103016],{"class":85},", model.nq)\n",[68,103018,103019,103021,103023,103026],{"class":70,"line":3356},[68,103020,32892],{"class":92},[68,103022,997],{"class":85},[68,103024,103025],{"class":872},"\"nv:\"",[68,103027,103028],{"class":85},", model.nv)\n",[68,103030,103031,103033,103035,103038],{"class":70,"line":3361},[68,103032,32892],{"class":92},[68,103034,997],{"class":85},[68,103036,103037],{"class":872},"\"nu:\"",[68,103039,103040],{"class":85},", model.nu)\n",[68,103042,103043,103045,103047,103050],{"class":70,"line":3366},[68,103044,32892],{"class":92},[68,103046,997],{"class":85},[68,103048,103049],{"class":872},"\"initial time:\"",[68,103051,103052],{"class":85},", data.time)\n",[68,103054,103055,103057,103059,103062],{"class":70,"line":3380},[68,103056,32892],{"class":92},[68,103058,997],{"class":85},[68,103060,103061],{"class":872},"\"initial qpos:\"",[68,103063,103064],{"class":85},", data.qpos.copy())\n",[68,103066,103067],{"class":70,"line":3385},[68,103068,4000],{"emptyLinePlaceholder":1679},[68,103070,103071,103073,103076,103078,103080,103082,103084],{"class":70,"line":4177},[68,103072,4800],{"class":102},[68,103074,103075],{"class":85}," _ ",[68,103077,27637],{"class":102},[68,103079,34036],{"class":92},[68,103081,997],{"class":85},[68,103083,2047],{"class":92},[68,103085,32379],{"class":85},[68,103087,103088],{"class":70,"line":4191},[68,103089,103090],{"class":85},"        mujoco.mj_step(model, data)\n",[68,103092,103093],{"class":70,"line":4199},[68,103094,4000],{"emptyLinePlaceholder":1679},[68,103096,103097,103099,103101,103104],{"class":70,"line":4204},[68,103098,32892],{"class":92},[68,103100,997],{"class":85},[68,103102,103103],{"class":872},"\"final time:\"",[68,103105,103052],{"class":85},[68,103107,103108,103110,103112,103115],{"class":70,"line":4210},[68,103109,32892],{"class":92},[68,103111,997],{"class":85},[68,103113,103114],{"class":872},"\"final qpos:\"",[68,103116,103064],{"class":85},[68,103118,103119],{"class":70,"line":4216},[68,103120,4000],{"emptyLinePlaceholder":1679},[68,103122,103123],{"class":70,"line":4221},[68,103124,4000],{"emptyLinePlaceholder":1679},[68,103126,103127,103129,103131,103134,103137],{"class":70,"line":9547},[68,103128,3134],{"class":102},[68,103130,32813],{"class":92},[68,103132,103133],{"class":102}," ==",[68,103135,103136],{"class":872}," \"__main__\"",[68,103138,5338],{"class":85},[68,103140,103141],{"class":70,"line":9571},[68,103142,103143],{"class":85},"    main()\n",[43,103145,103146],{"id":103146},"代码逐段解释",[19,103148,103149],{},"导入库：",[58,103151,103153],{"className":31971,"code":103152,"language":31973,"meta":63,"style":63},"import mujoco\n",[65,103154,103155],{"__ignoreMap":63},[68,103156,103157,103159],{"class":70,"line":71},[68,103158,31985],{"class":102},[68,103160,102875],{"class":85},[19,103162,103163],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103165,103166],{},"定义 XML：",[58,103168,103170],{"className":31971,"code":103169,"language":31973,"meta":63,"style":63},"XML = \"\"\"\n...\n\"\"\"\n",[65,103171,103172,103180,103185],{"__ignoreMap":63},[68,103173,103174,103176,103178],{"class":70,"line":71},[68,103175,102888],{"class":92},[68,103177,15161],{"class":102},[68,103179,102893],{"class":872},[68,103181,103182],{"class":70,"line":78},[68,103183,103184],{"class":872},"...\n",[68,103186,103187],{"class":70,"line":89},[68,103188,97273],{"class":872},[19,103190,103191,103192,103195],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[65,103193,103194],{},"freejoint"," 的方块。",[19,103197,103198],{},"编译模型：",[58,103200,103202],{"className":31971,"code":103201,"language":31973,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\n",[65,103203,103204],{"__ignoreMap":63},[68,103205,103206,103209,103211,103213,103215],{"class":70,"line":71},[68,103207,103208],{"class":85},"model ",[68,103210,869],{"class":102},[68,103212,102986],{"class":85},[68,103214,102888],{"class":92},[68,103216,1757],{"class":85},[19,103218,103219],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103221,103222],{},"创建数据：",[58,103224,103226],{"className":31971,"code":103225,"language":31973,"meta":63,"style":63},"data = mujoco.MjData(model)\n",[65,103227,103228],{"__ignoreMap":63},[68,103229,103230,103233,103235],{"class":70,"line":71},[68,103231,103232],{"class":85},"data ",[68,103234,869],{"class":102},[68,103236,103000],{"class":85},[19,103238,103239,103241,103242,103244],{},[65,103240,34994],{}," 会保存仿真当前状态。刚创建时，时间是 ",[65,103243,600],{},"，方块还在初始位置。",[19,103246,103247],{},"推进仿真：",[58,103249,103251],{"className":31971,"code":103250,"language":31973,"meta":63,"style":63},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[65,103252,103253,103269],{"__ignoreMap":63},[68,103254,103255,103257,103259,103261,103263,103265,103267],{"class":70,"line":71},[68,103256,4624],{"class":102},[68,103258,103075],{"class":85},[68,103260,27637],{"class":102},[68,103262,34036],{"class":92},[68,103264,997],{"class":85},[68,103266,2047],{"class":92},[68,103268,32379],{"class":85},[68,103270,103271],{"class":70,"line":78},[68,103272,103273],{"class":85},"    mujoco.mj_step(model, data)\n",[19,103275,103276,103277,103279],{},"每次 ",[65,103278,102789],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[43,103281,103282],{"id":103282},"代码逐行细讲",[19,103284,103285],{},"下面把完整代码按新手视角拆开讲。",[58,103287,103288],{"className":31971,"code":103152,"language":31973,"meta":63,"style":63},[65,103289,103290],{"__ignoreMap":63},[68,103291,103292,103294],{"class":70,"line":71},[68,103293,31985],{"class":102},[68,103295,102875],{"class":85},[19,103297,103298,103300,103301,1949,103303,1949,103305,29978],{},[65,103299,31985],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[65,103302,102249],{},[65,103304,102254],{},[65,103306,103307],{},"mujoco.mj_step",[58,103309,103310],{"className":31971,"code":103169,"language":31973,"meta":63,"style":63},[65,103311,103312,103320,103324],{"__ignoreMap":63},[68,103313,103314,103316,103318],{"class":70,"line":71},[68,103315,102888],{"class":92},[68,103317,15161],{"class":102},[68,103319,102893],{"class":872},[68,103321,103322],{"class":70,"line":78},[68,103323,103184],{"class":872},[68,103325,103326],{"class":70,"line":89},[68,103327,97273],{"class":872},[19,103329,103330,103332,103333,103336],{},[65,103331,102888],{}," 是一个变量名。右边的三引号 ",[65,103334,103335],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[58,103338,103339],{"className":54652,"code":102898,"language":54654,"meta":63,"style":63},[65,103340,103341],{"__ignoreMap":63},[68,103342,103343,103345,103347,103350,103352,103355],{"class":70,"line":71},[68,103344,861],{"class":85},[68,103346,102595],{"class":81},[68,103348,103349],{"class":587}," model",[68,103351,869],{"class":85},[68,103353,103354],{"class":872},"\"first_sim\"",[68,103356,876],{"class":85},[19,103358,103359,103360,103363,103364,29978],{},"这是 XML 的根标签。",[65,103361,103362],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[65,103365,103366],{},"first_sim",[58,103368,103369],{"className":54652,"code":102757,"language":54654,"meta":63,"style":63},[65,103370,103371],{"__ignoreMap":63},[68,103372,103373,103375,103377,103379,103381,103383,103385,103387,103389],{"class":70,"line":71},[68,103374,861],{"class":85},[68,103376,70748],{"class":81},[68,103378,102768],{"class":587},[68,103380,869],{"class":85},[68,103382,102773],{"class":872},[68,103384,102776],{"class":587},[68,103386,869],{"class":85},[68,103388,102781],{"class":872},[68,103390,102718],{"class":85},[19,103392,103393,103395,103396,103399,103400,103403],{},[65,103394,70748],{}," 用来设置仿真参数。",[65,103397,103398],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[65,103401,103402],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[58,103405,103407],{"className":54652,"code":103406,"language":54654,"meta":63,"style":63},"\u003Cworldbody>\n",[65,103408,103409],{"__ignoreMap":63},[68,103410,103411,103413,103416],{"class":70,"line":71},[68,103412,861],{"class":85},[68,103414,103415],{"class":81},"worldbody",[68,103417,876],{"class":85},[19,103419,103420,103422],{},[65,103421,103415],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[58,103424,103426],{"className":54652,"code":103425,"language":54654,"meta":63,"style":63},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[65,103427,103428],{"__ignoreMap":63},[68,103429,103430,103432,103434,103436,103438,103441,103443,103445,103448,103450,103452,103455,103457,103459,103462],{"class":70,"line":71},[68,103431,861],{"class":85},[68,103433,102694],{"class":81},[68,103435,16516],{"class":587},[68,103437,869],{"class":85},[68,103439,103440],{"class":872},"\"floor\"",[68,103442,55408],{"class":587},[68,103444,869],{"class":85},[68,103446,103447],{"class":872},"\"plane\"",[68,103449,102710],{"class":587},[68,103451,869],{"class":85},[68,103453,103454],{"class":872},"\"2 2 0.1\"",[68,103456,994],{"class":587},[68,103458,869],{"class":85},[68,103460,103461],{"class":872},"\"0.8 0.8 0.8 1\"",[68,103463,102718],{"class":85},[19,103465,103466,103467,103469,103470,103473,103474,103477,103478,103480],{},"这行创建地面。",[65,103468,102694],{}," 是几何体。",[65,103471,103472],{},"name=\"floor\""," 是名字。",[65,103475,103476],{},"type=\"plane\""," 表示平面。",[65,103479,56694],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[58,103482,103484],{"className":54652,"code":103483,"language":54654,"meta":63,"style":63},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[65,103485,103486],{"__ignoreMap":63},[68,103487,103488,103490,103492,103494,103496,103498,103500,103502,103504],{"class":70,"line":71},[68,103489,861],{"class":85},[68,103491,53385],{"class":81},[68,103493,16516],{"class":587},[68,103495,869],{"class":85},[68,103497,55075],{"class":872},[68,103499,102680],{"class":587},[68,103501,869],{"class":85},[68,103503,102685],{"class":872},[68,103505,876],{"class":85},[19,103507,103508,103509,29978,103511,103514,103515,103517],{},"这行创建一个刚体，名字叫 ",[65,103510,55298],{},[65,103512,103513],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[65,103516,102743],{},"，也就是离地面 1 米高。",[58,103519,103521],{"className":54652,"code":103520,"language":54654,"meta":63,"style":63},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[65,103522,103523],{"__ignoreMap":63},[68,103524,103525,103527,103529,103531,103533,103536],{"class":70,"line":71},[68,103526,861],{"class":85},[68,103528,103194],{"class":81},[68,103530,16516],{"class":587},[68,103532,869],{"class":85},[68,103534,103535],{"class":872},"\"box_free\"",[68,103537,102718],{"class":85},[19,103539,103540,103541,103543],{},"这行很重要。",[65,103542,103194],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[58,103545,103547],{"className":54652,"code":103546,"language":54654,"meta":63,"style":63},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[65,103548,103549],{"__ignoreMap":63},[68,103550,103551,103553,103555,103557,103559,103561,103563,103565,103567,103569,103571,103573,103576,103578,103580,103582,103584,103587],{"class":70,"line":71},[68,103552,861],{"class":85},[68,103554,102694],{"class":81},[68,103556,16516],{"class":587},[68,103558,869],{"class":85},[68,103560,102701],{"class":872},[68,103562,55408],{"class":587},[68,103564,869],{"class":85},[68,103566,55075],{"class":872},[68,103568,102710],{"class":587},[68,103570,869],{"class":85},[68,103572,102715],{"class":872},[68,103574,103575],{"class":587}," mass",[68,103577,869],{"class":85},[68,103579,5277],{"class":872},[68,103581,994],{"class":587},[68,103583,869],{"class":85},[68,103585,103586],{"class":872},"\"1 0 0 1\"",[68,103588,102718],{"class":85},[19,103590,103591,103592,103595,103596,103599,103600,103603,103604,103607],{},"这行给 box body 添加一个盒子形状。",[65,103593,103594],{},"type=\"box\""," 表示形状是盒子。",[65,103597,103598],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[65,103601,103602],{},"mass=\"1\""," 表示质量是 1。",[65,103605,103606],{},"rgba=\"1 0 0 1\""," 表示红色。",[58,103609,103611],{"className":31971,"code":103610,"language":31973,"meta":63,"style":63},"def main() -> None:\n",[65,103612,103613],{"__ignoreMap":63},[68,103614,103615,103617,103619,103621,103623],{"class":70,"line":71},[68,103616,33540],{"class":102},[68,103618,3574],{"class":587},[68,103620,102972],{"class":85},[68,103622,97261],{"class":92},[68,103624,5338],{"class":85},[19,103626,103627,103629,103630,103633,103634,103637],{},[65,103628,33540],{}," 用来定义函数。这里定义了一个叫 ",[65,103631,103632],{},"main"," 的函数。",[65,103635,103636],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[58,103639,103640],{"className":31971,"code":103201,"language":31973,"meta":63,"style":63},[65,103641,103642],{"__ignoreMap":63},[68,103643,103644,103646,103648,103650,103652],{"class":70,"line":71},[68,103645,103208],{"class":85},[68,103647,869],{"class":102},[68,103649,102986],{"class":85},[68,103651,102888],{"class":92},[68,103653,1757],{"class":85},[19,103655,103656,103657,103660],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[65,103658,103659],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[58,103662,103663],{"className":31971,"code":103225,"language":31973,"meta":63,"style":63},[65,103664,103665],{"__ignoreMap":63},[68,103666,103667,103669,103671],{"class":70,"line":71},[68,103668,103232],{"class":85},[68,103670,869],{"class":102},[68,103672,103000],{"class":85},[19,103674,103675,103676,103678,103679,103681],{},"这行创建仿真数据。",[65,103677,34994],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[65,103680,34994],{}," 都会变化。",[58,103683,103685],{"className":31971,"code":103684,"language":31973,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[65,103686,103687,103697,103707],{"__ignoreMap":63},[68,103688,103689,103691,103693,103695],{"class":70,"line":71},[68,103690,32008],{"class":92},[68,103692,997],{"class":85},[68,103694,103013],{"class":872},[68,103696,103016],{"class":85},[68,103698,103699,103701,103703,103705],{"class":70,"line":78},[68,103700,32008],{"class":92},[68,103702,997],{"class":85},[68,103704,103025],{"class":872},[68,103706,103028],{"class":85},[68,103708,103709,103711,103713,103715],{"class":70,"line":89},[68,103710,32008],{"class":92},[68,103712,997],{"class":85},[68,103714,103037],{"class":872},[68,103716,103040],{"class":85},[19,103718,103719,103721,103722,103725,103726,103729,103730,103733,103734,103737],{},[65,103720,32008],{}," 用来输出信息。",[65,103723,103724],{},"model.nq"," 是位置变量数量，",[65,103727,103728],{},"model.nv"," 是速度变量数量，",[65,103731,103732],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[65,103735,103736],{},"nu"," 是 0。",[58,103739,103741],{"className":31971,"code":103740,"language":31973,"meta":63,"style":63},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[65,103742,103743,103753],{"__ignoreMap":63},[68,103744,103745,103747,103749,103751],{"class":70,"line":71},[68,103746,32008],{"class":92},[68,103748,997],{"class":85},[68,103750,103049],{"class":872},[68,103752,103052],{"class":85},[68,103754,103755,103757,103759,103761],{"class":70,"line":78},[68,103756,32008],{"class":92},[68,103758,997],{"class":85},[68,103760,103061],{"class":872},[68,103762,103064],{"class":85},[19,103764,103765,103766,103768,103769,103771,103772,103775],{},"这里打印初始时间和初始位置。",[65,103767,102641],{}," 一开始是 0。",[65,103770,102644],{}," 是位置数组。",[65,103773,103774],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[58,103777,103778],{"className":31971,"code":103250,"language":31973,"meta":63,"style":63},[65,103779,103780,103796],{"__ignoreMap":63},[68,103781,103782,103784,103786,103788,103790,103792,103794],{"class":70,"line":71},[68,103783,4624],{"class":102},[68,103785,103075],{"class":85},[68,103787,27637],{"class":102},[68,103789,34036],{"class":92},[68,103791,997],{"class":85},[68,103793,2047],{"class":92},[68,103795,32379],{"class":85},[68,103797,103798],{"class":70,"line":78},[68,103799,103273],{"class":85},[19,103801,103802,103804,103805,103808,103809,103811,103812,103814],{},[65,103803,4624],{}," 是循环。",[65,103806,103807],{},"range(100)"," 表示循环 100 次。",[65,103810,2727],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[65,103813,102789],{},"，仿真就前进一步。",[58,103816,103818],{"className":31971,"code":103817,"language":31973,"meta":63,"style":63},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[65,103819,103820,103830],{"__ignoreMap":63},[68,103821,103822,103824,103826,103828],{"class":70,"line":71},[68,103823,32008],{"class":92},[68,103825,997],{"class":85},[68,103827,103103],{"class":872},[68,103829,103052],{"class":85},[68,103831,103832,103834,103836,103838],{"class":70,"line":78},[68,103833,32008],{"class":92},[68,103835,997],{"class":85},[68,103837,103114],{"class":872},[68,103839,103064],{"class":85},[19,103841,103842],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[58,103844,103846],{"className":31971,"code":103845,"language":31973,"meta":63,"style":63},"if __name__ == \"__main__\":\n    main()\n",[65,103847,103848,103860],{"__ignoreMap":63},[68,103849,103850,103852,103854,103856,103858],{"class":70,"line":71},[68,103851,3134],{"class":102},[68,103853,32813],{"class":92},[68,103855,103133],{"class":102},[68,103857,103136],{"class":872},[68,103859,5338],{"class":85},[68,103861,103862],{"class":70,"line":78},[68,103863,103143],{"class":85},[19,103865,103866,103867,103870,103871,29978],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[65,103868,103869],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[65,103872,103869],{},[19,103874,103875],{},"运行:",[58,103877,103879],{"className":25416,"code":103878,"language":25418,"meta":63,"style":63},"python ch1_first_sim.py\n",[65,103880,103881],{"__ignoreMap":63},[68,103882,103883,103885],{"class":70,"line":71},[68,103884,31973],{"class":587},[68,103886,102860],{"class":872},[14,103888,103890],{"id":103889},"_5运行结果说明","5.运行结果说明",[19,103892,103893],{},"你应该看到类似输出:",[58,103895,103898],{"className":103896,"code":103897,"language":6786,"meta":63},[6784],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[65,103899,103897],{"__ignoreMap":63},[19,103901,103902,103904,103905,103908,103909,29978],{},[65,103903,103194],{}," 有 7 个位置变量: ",[65,103906,103907],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[65,103910,103911],{},"vx vy vz wx wy wz",[19,103913,103914,103915,103918],{},"你还会看到 ",[65,103916,103917],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103920,103922],{"id":103921},"_6验证步骤","6.验证步骤",[19,103924,103925],{},"确认版本:",[58,103927,103928],{"className":25416,"code":102513,"language":25418,"meta":63,"style":63},[65,103929,103930],{"__ignoreMap":63},[68,103931,103932,103934,103936],{"class":70,"line":71},[68,103933,31973],{"class":587},[68,103935,31951],{"class":92},[68,103937,102524],{"class":872},[19,103939,103940],{},"确认导入的是官方 bindings:",[58,103942,103944],{"className":25416,"code":103943,"language":25418,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco)\"\n",[65,103945,103946],{"__ignoreMap":63},[68,103947,103948,103950,103952],{"class":70,"line":71},[68,103949,31973],{"class":587},[68,103951,31951],{"class":92},[68,103953,103954],{"class":872}," \"import mujoco; print(mujoco)\"\n",[19,103956,103957],{},"运行程序:",[58,103959,103960],{"className":25416,"code":103878,"language":25418,"meta":63,"style":63},[65,103961,103962],{"__ignoreMap":63},[68,103963,103964,103966],{"class":70,"line":71},[68,103965,31973],{"class":587},[68,103967,102860],{"class":872},[19,103969,103970,103971,103974,103975,29978],{},"检查 ",[65,103972,103973],{},"final time"," 是否约等于 ",[65,103976,103977],{},"1.0",[19,103979,103980],{},"再做几个小实验：",[48,103982,103983,103993,104001,104014],{},[51,103984,103985,103986,103988,103989,103992],{},"把 ",[65,103987,103513],{}," 改成 ",[65,103990,103991],{},"pos=\"0 0 2\"","，观察初始高度变化。",[51,103994,103985,103995,103988,103997,104000],{},[65,103996,103402],{},[65,103998,103999],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[51,104002,103985,104003,103988,104005,104008,104009,104011,104012,29978],{},[65,104004,103398],{},[65,104006,104007],{},"timestep=\"0.005\"","，观察 100 步后的 ",[65,104010,103973],{}," 是否变成约 ",[65,104013,36922],{},[51,104015,104016,104017,104020],{},"删除 ",[65,104018,104019],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104022,104023],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104025,104027],{"id":104026},"_7常见错误与解决方案","7.常见错误与解决方案",[43,104029,104031],{"id":104030},"modulenotfounderror-no-module-named-mujoco",[65,104032,104033],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104035,104036],{},"解决:",[58,104038,104040],{"className":25416,"code":104039,"language":25418,"meta":63,"style":63},"pip install \"mujoco>=2.3\"\n",[65,104041,104042],{"__ignoreMap":63},[68,104043,104044,104046,104048],{"class":70,"line":71},[68,104045,25425],{"class":587},[68,104047,25428],{"class":872},[68,104049,104050],{"class":872}," \"mujoco>=2.3\"\n",[43,104052,104054],{"id":104053},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104056,104057],{},"先安装系统依赖:",[58,104059,104061],{"className":25416,"code":104060,"language":25418,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[65,104062,104063],{"__ignoreMap":63},[68,104064,104065,104067,104069,104071,104073,104076,104078,104081,104083,104086,104088],{"class":70,"line":71},[68,104066,26171],{"class":587},[68,104068,27909],{"class":872},[68,104070,25428],{"class":872},[68,104072,27994],{"class":92},[68,104074,104075],{"class":872}," mesa-libGL",[68,104077,102388],{"class":872},[68,104079,104080],{"class":872}," glfw",[68,104082,102408],{"class":872},[68,104084,104085],{"class":872}," libX11",[68,104087,102421],{"class":872},[68,104089,104090],{"class":872}," libXrandr\n",[43,104092,104094],{"id":104093},"xml-解析失败","XML 解析失败",[19,104096,104097],{},"检查:",[48,104099,104100,104103,104106,104112],{},[51,104101,104102],{},"标签是否闭合",[51,104104,104105],{},"属性是否带引号",[51,104107,104108,104109],{},"根节点是否是 ",[65,104110,104111],{},"\u003Cmujoco>",[51,104113,104114,104116,104117,104120],{},[65,104115,53385],{}," 是否放在 ",[65,104118,104119],{},"\u003Cworldbody>"," 内部",[43,104122,104124,104126,104127],{"id":104123},"final-time-不是严格等于-10",[65,104125,103973],{}," 不是严格等于 ",[65,104128,103977],{},[19,104130,104131],{},"这通常不是错误。浮点数计算可能得到：",[58,104133,104136],{"className":104134,"code":104135,"language":6786,"meta":63},[6784],"1.0000000000000007\n",[65,104137,104135],{"__ignoreMap":63},[19,104139,104140,104141,104143],{},"只要接近 ",[65,104142,103977],{}," 就正常。",[43,104145,104146],{"id":104146},"方块没有掉下来",[19,104148,104149],{},"检查：",[48,104151,104152,104158,104164,104169],{},[51,104153,104154,104155],{},"方块 body 里是否有 ",[65,104156,104157],{},"\u003Cfreejoint\u002F>",[51,104159,104160,104161],{},"重力是否是 ",[65,104162,104163],{},"0 0 -9.81",[51,104165,104166,104167],{},"是否真的调用了 ",[65,104168,102259],{},[51,104170,104171,104172,104174,104175],{},"你看的是否是 ",[65,104173,103917],{},"，不是 ",[65,104176,104177],{},"initial qpos",[14,104179,104181],{"id":104180},"_8本章小结","8.本章小结",[19,104183,104184],{},"本章你已经完成了 MuJoCo 的最小闭环：",[58,104186,104189],{"className":104187,"code":104188,"language":6786,"meta":63},[6784],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[65,104190,104188],{"__ignoreMap":63},[19,104192,104193],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1652,104195,104196],{},"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":63,"searchDepth":78,"depth":78,"links":104198},[104199,104200,104201,104206,104210,104211,104212,104220],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":104202},[104203,104204,104205],{"id":102656,"depth":89,"text":102657},{"id":102750,"depth":89,"text":102751},{"id":102802,"depth":89,"text":102803},{"id":102826,"depth":78,"text":102827,"children":104207},[104208,104209],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":104213},[104214,104215,104216,104217,104219],{"id":104030,"depth":89,"text":104033},{"id":104053,"depth":89,"text":104054},{"id":104093,"depth":89,"text":104094},{"id":104123,"depth":89,"text":104218},"final time 不是严格等于 1.0",{"id":104146,"depth":89,"text":104146},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102212,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104227,"title":104228,"body":104229,"description":63,"extension":1677,"meta":105884,"navigation":1679,"path":105885,"seo":105886,"stem":105887,"__hash__":105888},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104230,"toc":105860},[104231,104234,104236,104239,104242,104259,104353,104356,104362,104364,104366,104390,104393,104407,104410,104451,104453,104466,104468,104471,104519,104531,104534,104537,104543,104556,104623,104626,104645,104648,104651,104657,104659,104668,104671,104675,104684,104766,104775,104779,104785,104799,104809,104811,105141,105144,105156,105158,105169,105171,105174,105192,105195,105198,105216,105227,105230,105245,105255,105257,105278,105295,105315,105321,105361,105377,105393,105399,105402,105426,105442,105447,105477,105494,105519,105522,105537,105546,105561,105570,105585,105592,105594,105604,105617,105624,105627,105666,105673,105675,105727,105729,105735,105738,105745,105752,105755,105757,105775,105778,105781,105815,105827,105829,105832,105854,105857],[10,104232,104228],{"id":104233},"_2xml-与-mjcf-物理建模基础",[14,104235,102221],{"id":102220},[19,104237,104238],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104240,104241],{},"本章结束后，你应该能看懂一个简单模型里：",[48,104243,104244,104247,104250,104253,104256],{},[51,104245,104246],{},"地面在哪里。",[51,104248,104249],{},"物体初始位置在哪里。",[51,104251,104252],{},"几何体是什么形状。",[51,104254,104255],{},"哪些 body 可以自由运动。",[51,104257,104258],{},"如何用名字在 Python 里找到 XML 中的对象。",[120,104260,104261,104270],{},[123,104262,104263],{},[126,104264,104265,104268],{},[129,104266,104267],{"align":131},"标签",[129,104269,135],{"align":131},[137,104271,104272,104281,104291,104300,104310,104320,104333,104343],{},[126,104273,104274,104278],{},[142,104275,104276],{"align":131},[65,104277,104111],{},[142,104279,104280],{"align":131},"根节点",[126,104282,104283,104288],{},[142,104284,104285],{"align":131},[65,104286,104287],{},"\u003Coption>",[142,104289,104290],{"align":131},"仿真参数",[126,104292,104293,104297],{},[142,104294,104295],{"align":131},[65,104296,104119],{},[142,104298,104299],{"align":131},"世界中的物体",[126,104301,104302,104307],{},[142,104303,104304],{"align":131},[65,104305,104306],{},"\u003Cbody>",[142,104308,104309],{"align":131},"刚体",[126,104311,104312,104317],{},[142,104313,104314],{"align":131},[65,104315,104316],{},"\u003Cgeom>",[142,104318,104319],{"align":131},"几何体、碰撞体、可视体",[126,104321,104322,104330],{},[142,104323,104324,26573,104327],{"align":131},[65,104325,104326],{},"\u003Cjoint>",[65,104328,104329],{},"\u003Cfreejoint>",[142,104331,104332],{"align":131},"关节",[126,104334,104335,104340],{},[142,104336,104337],{"align":131},[65,104338,104339],{},"\u003Csite>",[142,104341,104342],{"align":131},"标记点",[126,104344,104345,104350],{},[142,104346,104347],{"align":131},[65,104348,104349],{},"\u003Cactuator>",[142,104351,104352],{"align":131},"控制器",[19,104354,104355],{},"初学时可以先记住：",[58,104357,104360],{"className":104358,"code":104359,"language":6786,"meta":63},[6784],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[65,104361,104359],{"__ignoreMap":63},[14,104363,102344],{"id":102343},[19,104365,102347],{},[58,104367,104369],{"className":25416,"code":104368,"language":25418,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[65,104370,104371],{"__ignoreMap":63},[68,104372,104373,104375,104377,104379,104381,104383,104385,104387],{"class":70,"line":71},[68,104374,26171],{"class":587},[68,104376,27909],{"class":872},[68,104378,25428],{"class":872},[68,104380,27994],{"class":92},[68,104382,104075],{"class":872},[68,104384,102388],{"class":872},[68,104386,104080],{"class":872},[68,104388,104389],{"class":872}," glfw-devel\n",[19,104391,104392],{},"pip:",[58,104394,104395],{"className":25416,"code":102493,"language":25418,"meta":63,"style":63},[65,104396,104397],{"__ignoreMap":63},[68,104398,104399,104401,104403,104405],{"class":70,"line":71},[68,104400,25425],{"class":587},[68,104402,25428],{"class":872},[68,104404,102504],{"class":872},[68,104406,102507],{"class":872},[19,104408,104409],{},"conda:",[58,104411,104413],{"className":25416,"code":104412,"language":25418,"meta":63,"style":63},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[65,104414,104415,104432,104441],{"__ignoreMap":63},[68,104416,104417,104419,104421,104423,104426,104428,104430],{"class":70,"line":71},[68,104418,31923],{"class":587},[68,104420,30769],{"class":872},[68,104422,26710],{"class":92},[68,104424,104425],{"class":872}," mujoco-xml",[68,104427,102549],{"class":872},[68,104429,102552],{"class":92},[68,104431,102555],{"class":92},[68,104433,104434,104436,104438],{"class":70,"line":78},[68,104435,31923],{"class":587},[68,104437,102562],{"class":872},[68,104439,104440],{"class":872}," mujoco-xml\n",[68,104442,104443,104445,104447,104449],{"class":70,"line":89},[68,104444,25425],{"class":587},[68,104446,25428],{"class":872},[68,104448,102504],{"class":872},[68,104450,102507],{"class":872},[19,104452,102578],{},[48,104454,104455,104458,104463],{},[51,104456,104457],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[51,104459,104460,104461,29978],{},"本章使用基础标签，适用于 ",[65,104462,102601],{},[51,104464,104465],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104467,102619],{"id":102618},[19,104469,104470],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[58,104472,104474],{"className":54652,"code":104473,"language":54654,"meta":63,"style":63},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[65,104475,104476,104490,104498,104503,104511],{"__ignoreMap":63},[68,104477,104478,104480,104482,104484,104486,104488],{"class":70,"line":71},[68,104479,861],{"class":85},[68,104481,102595],{"class":81},[68,104483,103349],{"class":587},[68,104485,869],{"class":85},[68,104487,64262],{"class":872},[68,104489,876],{"class":85},[68,104491,104492,104494,104496],{"class":70,"line":78},[68,104493,53729],{"class":85},[68,104495,103415],{"class":81},[68,104497,876],{"class":85},[68,104499,104500],{"class":70,"line":89},[68,104501,104502],{"class":85},"    ...\n",[68,104504,104505,104507,104509],{"class":70,"line":115},[68,104506,54002],{"class":85},[68,104508,103415],{"class":81},[68,104510,876],{"class":85},[68,104512,104513,104515,104517],{"class":70,"line":280},[68,104514,886],{"class":85},[68,104516,102595],{"class":81},[68,104518,876],{"class":85},[19,104520,104521,104523,104524,104526,104527,104530],{},[65,104522,53385],{}," 表示刚体。",[65,104525,102694],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[65,104528,104529],{},"joint"," 表示刚体相对父刚体如何运动。",[43,104532,104533],{"id":104533},"层级结构非常重要",[19,104535,104536],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[58,104538,104541],{"className":104539,"code":104540,"language":6786,"meta":63},[6784],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[65,104542,104540],{"__ignoreMap":63},[19,104544,104545,102592,104548,104551,104552,104555],{},[65,104546,104547],{},"red_box_geom",[65,104549,104550],{},"box_center"," 都属于 ",[65,104553,104554],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[58,104557,104559],{"className":54652,"code":104558,"language":54654,"meta":63,"style":63},"\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",[65,104560,104561,104581,104595,104615],{"__ignoreMap":63},[68,104562,104563,104565,104567,104569,104571,104573,104575,104577,104579],{"class":70,"line":71},[68,104564,861],{"class":85},[68,104566,53385],{"class":81},[68,104568,16516],{"class":587},[68,104570,869],{"class":85},[68,104572,55075],{"class":872},[68,104574,102680],{"class":587},[68,104576,869],{"class":85},[68,104578,102685],{"class":872},[68,104580,876],{"class":85},[68,104582,104583,104585,104587,104589,104591,104593],{"class":70,"line":78},[68,104584,53729],{"class":85},[68,104586,103194],{"class":81},[68,104588,16516],{"class":587},[68,104590,869],{"class":85},[68,104592,103535],{"class":872},[68,104594,102718],{"class":85},[68,104596,104597,104599,104601,104603,104605,104607,104609,104611,104613],{"class":70,"line":89},[68,104598,53729],{"class":85},[68,104600,102694],{"class":81},[68,104602,55408],{"class":587},[68,104604,869],{"class":85},[68,104606,55075],{"class":872},[68,104608,102710],{"class":587},[68,104610,869],{"class":85},[68,104612,102715],{"class":872},[68,104614,102718],{"class":85},[68,104616,104617,104619,104621],{"class":70,"line":115},[68,104618,886],{"class":85},[68,104620,53385],{"class":81},[68,104622,876],{"class":85},[19,104624,104625],{},"含义:",[48,104627,104628,104634,104639,104642],{},[51,104629,104630,104631,104633],{},"创建名为 ",[65,104632,55298],{}," 的刚体",[51,104635,104636,104637],{},"初始位置在世界坐标 ",[65,104638,102743],{},[51,104640,104641],{},"它有一个自由关节",[51,104643,104644],{},"它有一个盒子几何体",[43,104646,104647],{"id":104647},"坐标怎么理解",[19,104649,104650],{},"MuJoCo 默认使用三维坐标：",[58,104652,104655],{"className":104653,"code":104654,"language":6786,"meta":63},[6784],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[65,104656,104654],{"__ignoreMap":63},[19,104658,16230],{},[58,104660,104662],{"className":54652,"code":104661,"language":54654,"meta":63,"style":63},"pos=\"0 0 1\"\n",[65,104663,104664],{"__ignoreMap":63},[68,104665,104666],{"class":70,"line":71},[68,104667,104661],{"class":85},[19,104669,104670],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[43,104672,104674],{"id":104673},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104676,104677,104678,84107,104681,104683],{},"不同 ",[65,104679,104680],{},"type",[65,104682,33089],{}," 含义不同：",[120,104685,104686,104701],{},[123,104687,104688],{},[126,104689,104690,104694,104699],{},[129,104691,104692],{"align":131},[65,104693,104680],{},[129,104695,104696,104698],{"align":131},[65,104697,33089],{}," 示例",[129,104700,102274],{"align":131},[137,104702,104703,104717,104732,104751],{},[126,104704,104705,104709,104714],{},[142,104706,104707],{"align":131},[65,104708,55298],{},[142,104710,104711],{"align":131},[65,104712,104713],{},"size=\"0.1 0.2 0.3\"",[142,104715,104716],{"align":131},"x\u002Fy\u002Fz 半边长，不是完整长度",[126,104718,104719,104724,104729],{},[142,104720,104721],{"align":131},[65,104722,104723],{},"sphere",[142,104725,104726],{"align":131},[65,104727,104728],{},"size=\"0.1\"",[142,104730,104731],{"align":131},"球半径",[126,104733,104734,104739,104744],{},[142,104735,104736],{"align":131},[65,104737,104738],{},"capsule",[142,104740,104741],{"align":131},[65,104742,104743],{},"size=\"0.03\"",[142,104745,104746,104747,104750],{"align":131},"胶囊半径，长度常用 ",[65,104748,104749],{},"fromto"," 指定",[126,104752,104753,104758,104763],{},[142,104754,104755],{"align":131},[65,104756,104757],{},"plane",[142,104759,104760],{"align":131},[65,104761,104762],{},"size=\"3 3 0.1\"",[142,104764,104765],{"align":131},"可视平面大小，通常当地面",[19,104767,104768,104769,104771,104772,104774],{},"最容易踩坑的是 box：",[65,104770,103598],{}," 表示边长大约是 ",[65,104773,33630],{},"，因为 MuJoCo 用的是半边长。",[43,104776,104778],{"id":104777},"site-是什么","site 是什么",[19,104780,104781,104784],{},[65,104782,104783],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[48,104786,104787,104790,104793,104796],{},[51,104788,104789],{},"标记机械臂末端。",[51,104791,104792],{},"标记目标位置。",[51,104794,104795],{},"放传感器或相机参考点。",[51,104797,104798],{},"在 Python 中读取某个关键点的世界坐标。",[19,104800,104801,104802,102592,104805,104808],{},"在后面的 Reacher 任务中，",[65,104803,104804],{},"tip",[65,104806,104807],{},"target"," 就会用 site 表示。",[14,104810,102827],{"id":102826},[58,104812,104814],{"className":31971,"code":104813,"language":31973,"meta":63,"style":63},"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",[65,104815,104816,104822,104832,104836,104840,104848,104853,104857,104861,104865,104870,104874,104879,104884,104889,104894,104898,104902,104906,104910,104914,104918,104930,104942,104950,104954,104969,104984,104988,105001,105016,105029,105042,105046,105062,105066,105070,105081,105093,105105,105117,105121,105125,105137],{"__ignoreMap":63},[68,104817,104818,104820],{"class":70,"line":71},[68,104819,31985],{"class":102},[68,104821,102875],{"class":85},[68,104823,104824,104826,104828,104830],{"class":70,"line":78},[68,104825,31985],{"class":102},[68,104827,32973],{"class":85},[68,104829,32976],{"class":102},[68,104831,32979],{"class":85},[68,104833,104834],{"class":70,"line":89},[68,104835,4000],{"emptyLinePlaceholder":1679},[68,104837,104838],{"class":70,"line":115},[68,104839,4000],{"emptyLinePlaceholder":1679},[68,104841,104842,104844,104846],{"class":70,"line":280},[68,104843,102888],{"class":92},[68,104845,15161],{"class":102},[68,104847,102893],{"class":872},[68,104849,104850],{"class":70,"line":301},[68,104851,104852],{"class":872},"\u003Cmujoco model=\"xml_basic\">\n",[68,104854,104855],{"class":70,"line":320},[68,104856,102903],{"class":872},[68,104858,104859],{"class":70,"line":2915},[68,104860,4000],{"emptyLinePlaceholder":1679},[68,104862,104863],{"class":70,"line":2921},[68,104864,102912],{"class":872},[68,104866,104867],{"class":70,"line":2933},[68,104868,104869],{"class":872},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[68,104871,104872],{"class":70,"line":3214},[68,104873,4000],{"emptyLinePlaceholder":1679},[68,104875,104876],{"class":70,"line":3219},[68,104877,104878],{"class":872},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[68,104880,104881],{"class":70,"line":3225},[68,104882,104883],{"class":872},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[68,104885,104886],{"class":70,"line":3230},[68,104887,104888],{"class":872},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,104890,104891],{"class":70,"line":3244},[68,104892,104893],{"class":872},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[68,104895,104896],{"class":70,"line":3249},[68,104897,102941],{"class":872},[68,104899,104900],{"class":70,"line":3255},[68,104901,102946],{"class":872},[68,104903,104904],{"class":70,"line":3276},[68,104905,102951],{"class":872},[68,104907,104908],{"class":70,"line":3281},[68,104909,97273],{"class":872},[68,104911,104912],{"class":70,"line":3295},[68,104913,4000],{"emptyLinePlaceholder":1679},[68,104915,104916],{"class":70,"line":3300},[68,104917,4000],{"emptyLinePlaceholder":1679},[68,104919,104920,104922,104924,104926,104928],{"class":70,"line":3329},[68,104921,33540],{"class":102},[68,104923,3574],{"class":587},[68,104925,102972],{"class":85},[68,104927,97261],{"class":92},[68,104929,5338],{"class":85},[68,104931,104932,104934,104936,104938,104940],{"class":70,"line":3334},[68,104933,102981],{"class":85},[68,104935,869],{"class":102},[68,104937,102986],{"class":85},[68,104939,102888],{"class":92},[68,104941,1757],{"class":85},[68,104943,104944,104946,104948],{"class":70,"line":3351},[68,104945,102995],{"class":85},[68,104947,869],{"class":102},[68,104949,103000],{"class":85},[68,104951,104952],{"class":70,"line":3356},[68,104953,4000],{"emptyLinePlaceholder":1679},[68,104955,104956,104959,104961,104964,104967],{"class":70,"line":3361},[68,104957,104958],{"class":85},"    box_body_id ",[68,104960,869],{"class":102},[68,104962,104963],{"class":85}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[68,104965,104966],{"class":872},"\"red_box\"",[68,104968,1757],{"class":85},[68,104970,104971,104974,104976,104979,104982],{"class":70,"line":3366},[68,104972,104973],{"class":85},"    site_id ",[68,104975,869],{"class":102},[68,104977,104978],{"class":85}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[68,104980,104981],{"class":872},"\"box_center\"",[68,104983,1757],{"class":85},[68,104985,104986],{"class":70,"line":3380},[68,104987,4000],{"emptyLinePlaceholder":1679},[68,104989,104990,104992,104995,104997,104999],{"class":70,"line":3385},[68,104991,4700],{"class":102},[68,104993,104994],{"class":85}," box_body_id ",[68,104996,861],{"class":102},[68,104998,5692],{"class":92},[68,105000,5338],{"class":85},[68,105002,105003,105006,105009,105011,105014],{"class":70,"line":4177},[68,105004,105005],{"class":102},"        raise",[68,105007,105008],{"class":92}," RuntimeError",[68,105010,997],{"class":85},[68,105012,105013],{"class":872},"\"body red_box not found\"",[68,105015,1757],{"class":85},[68,105017,105018,105020,105023,105025,105027],{"class":70,"line":4191},[68,105019,4700],{"class":102},[68,105021,105022],{"class":85}," site_id ",[68,105024,861],{"class":102},[68,105026,5692],{"class":92},[68,105028,5338],{"class":85},[68,105030,105031,105033,105035,105037,105040],{"class":70,"line":4199},[68,105032,105005],{"class":102},[68,105034,105008],{"class":92},[68,105036,997],{"class":85},[68,105038,105039],{"class":872},"\"site box_center not found\"",[68,105041,1757],{"class":85},[68,105043,105044],{"class":70,"line":4204},[68,105045,4000],{"emptyLinePlaceholder":1679},[68,105047,105048,105050,105052,105054,105056,105058,105060],{"class":70,"line":4210},[68,105049,4800],{"class":102},[68,105051,103075],{"class":85},[68,105053,27637],{"class":102},[68,105055,34036],{"class":92},[68,105057,997],{"class":85},[68,105059,3324],{"class":92},[68,105061,32379],{"class":85},[68,105063,105064],{"class":70,"line":4216},[68,105065,103090],{"class":85},[68,105067,105068],{"class":70,"line":4221},[68,105069,4000],{"emptyLinePlaceholder":1679},[68,105071,105072,105074,105076,105079],{"class":70,"line":9547},[68,105073,32892],{"class":92},[68,105075,997],{"class":85},[68,105077,105078],{"class":872},"\"simulation time:\"",[68,105080,103052],{"class":85},[68,105082,105083,105085,105087,105090],{"class":70,"line":9571},[68,105084,32892],{"class":92},[68,105086,997],{"class":85},[68,105088,105089],{"class":872},"\"box body position:\"",[68,105091,105092],{"class":85},", data.xpos[box_body_id].copy())\n",[68,105094,105095,105097,105099,105102],{"class":70,"line":9576},[68,105096,32892],{"class":92},[68,105098,997],{"class":85},[68,105100,105101],{"class":872},"\"site position:\"",[68,105103,105104],{"class":85},", data.site_xpos[site_id].copy())\n",[68,105106,105107,105109,105111,105114],{"class":70,"line":9582},[68,105108,32892],{"class":92},[68,105110,997],{"class":85},[68,105112,105113],{"class":872},"\"box qpos:\"",[68,105115,105116],{"class":85},", np.array(data.qpos))\n",[68,105118,105119],{"class":70,"line":9609},[68,105120,4000],{"emptyLinePlaceholder":1679},[68,105122,105123],{"class":70,"line":9614},[68,105124,4000],{"emptyLinePlaceholder":1679},[68,105126,105127,105129,105131,105133,105135],{"class":70,"line":9620},[68,105128,3134],{"class":102},[68,105130,32813],{"class":92},[68,105132,103133],{"class":102},[68,105134,103136],{"class":872},[68,105136,5338],{"class":85},[68,105138,105139],{"class":70,"line":9632},[68,105140,103143],{"class":85},[19,105142,105143],{},"保存为：",[58,105145,105147],{"className":25416,"code":105146,"language":25418,"meta":63,"style":63},"touch ch2_xml_basic.py\n",[65,105148,105149],{"__ignoreMap":63},[68,105150,105151,105153],{"class":70,"line":71},[68,105152,102857],{"class":587},[68,105154,105155],{"class":872}," ch2_xml_basic.py\n",[19,105157,103875],{},[58,105159,105161],{"className":25416,"code":105160,"language":25418,"meta":63,"style":63},"python ch2_xml_basic.py\n",[65,105162,105163],{"__ignoreMap":63},[68,105164,105165,105167],{"class":70,"line":71},[68,105166,31973],{"class":587},[68,105168,105155],{"class":872},[43,105170,103146],{"id":103146},[19,105172,105173],{},"用名字查找 body：",[58,105175,105177],{"className":31971,"code":105176,"language":31973,"meta":63,"style":63},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[65,105178,105179],{"__ignoreMap":63},[68,105180,105181,105184,105186,105188,105190],{"class":70,"line":71},[68,105182,105183],{"class":85},"box_body_id ",[68,105185,869],{"class":102},[68,105187,104963],{"class":85},[68,105189,104966],{"class":872},[68,105191,1757],{"class":85},[19,105193,105194],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105196,105197],{},"用名字查找 site：",[58,105199,105201],{"className":31971,"code":105200,"language":31973,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[65,105202,105203],{"__ignoreMap":63},[68,105204,105205,105208,105210,105212,105214],{"class":70,"line":71},[68,105206,105207],{"class":85},"site_id ",[68,105209,869],{"class":102},[68,105211,104978],{"class":85},[68,105213,104981],{"class":872},[68,105215,1757],{"class":85},[19,105217,105218,105219,105222,105223,105226],{},"注意第二个参数是对象类型。查 body 就用 ",[65,105220,105221],{},"mjOBJ_BODY","，查 site 就用 ",[65,105224,105225],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105228,105229],{},"读取世界坐标：",[58,105231,105233],{"className":31971,"code":105232,"language":31973,"meta":63,"style":63},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[65,105234,105235,105240],{"__ignoreMap":63},[68,105236,105237],{"class":70,"line":71},[68,105238,105239],{"class":85},"data.xpos[box_body_id]\n",[68,105241,105242],{"class":70,"line":78},[68,105243,105244],{"class":85},"data.site_xpos[site_id]\n",[19,105246,105247,105250,105251,105254],{},[65,105248,105249],{},"xpos"," 是 body 的世界坐标，",[65,105252,105253],{},"site_xpos"," 是 site 的世界坐标。",[43,105256,103282],{"id":103282},[58,105258,105260],{"className":31971,"code":105259,"language":31973,"meta":63,"style":63},"import mujoco\nimport numpy as np\n",[65,105261,105262,105268],{"__ignoreMap":63},[68,105263,105264,105266],{"class":70,"line":71},[68,105265,31985],{"class":102},[68,105267,102875],{"class":85},[68,105269,105270,105272,105274,105276],{"class":70,"line":78},[68,105271,31985],{"class":102},[68,105273,32973],{"class":85},[68,105275,32976],{"class":102},[68,105277,32979],{"class":85},[19,105279,105280,105281,105284,105285,105288,105289,1949,105292,29978],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[65,105282,105283],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[65,105286,105287],{},"as np"," 是习惯写法，后面就可以写 ",[65,105290,105291],{},"np.array(...)",[65,105293,105294],{},"np.round(...)",[58,105296,105297],{"className":31971,"code":103169,"language":31973,"meta":63,"style":63},[65,105298,105299,105307,105311],{"__ignoreMap":63},[68,105300,105301,105303,105305],{"class":70,"line":71},[68,105302,102888],{"class":92},[68,105304,15161],{"class":102},[68,105306,102893],{"class":872},[68,105308,105309],{"class":70,"line":78},[68,105310,103184],{"class":872},[68,105312,105313],{"class":70,"line":89},[68,105314,97273],{"class":872},[19,105316,105317,105318,29978],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[65,105319,105320],{},"mujoco.MjModel.from_xml_string(XML)",[58,105322,105324],{"className":54652,"code":105323,"language":54654,"meta":63,"style":63},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[65,105325,105326],{"__ignoreMap":63},[68,105327,105328,105330,105332,105334,105336,105338,105340,105342,105345,105347,105349,105352,105354,105356,105359],{"class":70,"line":71},[68,105329,861],{"class":85},[68,105331,104783],{"class":81},[68,105333,16516],{"class":587},[68,105335,869],{"class":85},[68,105337,104981],{"class":872},[68,105339,102680],{"class":587},[68,105341,869],{"class":85},[68,105343,105344],{"class":872},"\"0 0 0\"",[68,105346,102710],{"class":587},[68,105348,869],{"class":85},[68,105350,105351],{"class":872},"\"0.03\"",[68,105353,994],{"class":587},[68,105355,869],{"class":85},[68,105357,105358],{"class":872},"\"0 1 0 1\"",[68,105360,102718],{"class":85},[19,105362,105363,105365,105366,105369,105370,105372,105373,105376],{},[65,105364,104783],{}," 是标记点。",[65,105367,105368],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[65,105371,104743],{}," 表示显示出来的小球大小。",[65,105374,105375],{},"rgba=\"0 1 0 1\""," 表示绿色。",[58,105378,105379],{"className":31971,"code":105176,"language":31973,"meta":63,"style":63},[65,105380,105381],{"__ignoreMap":63},[68,105382,105383,105385,105387,105389,105391],{"class":70,"line":71},[68,105384,105183],{"class":85},[68,105386,869],{"class":102},[68,105388,104963],{"class":85},[68,105390,104966],{"class":872},[68,105392,1757],{"class":85},[19,105394,105395,105396,105398],{},"这行的作用是：根据名字 ",[65,105397,104966],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105400,105401],{},"拆开看：",[48,105403,105404,105410,105415,105421],{},[51,105405,105406,105409],{},[65,105407,105408],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[51,105411,105412,105414],{},[65,105413,103659],{}," 是被查询的模型。",[51,105416,105417,105420],{},[65,105418,105419],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[51,105422,105423,105425],{},[65,105424,104966],{}," 是 XML 里写的名字。",[58,105427,105428],{"className":31971,"code":105200,"language":31973,"meta":63,"style":63},[65,105429,105430],{"__ignoreMap":63},[68,105431,105432,105434,105436,105438,105440],{"class":70,"line":71},[68,105433,105207],{"class":85},[68,105435,869],{"class":102},[68,105437,104978],{"class":85},[68,105439,104981],{"class":872},[68,105441,1757],{"class":85},[19,105443,105444,105445,29978],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[65,105446,104981],{},[58,105448,105450],{"className":31971,"code":105449,"language":31973,"meta":63,"style":63},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[65,105451,105452,105464],{"__ignoreMap":63},[68,105453,105454,105456,105458,105460,105462],{"class":70,"line":71},[68,105455,3134],{"class":102},[68,105457,104994],{"class":85},[68,105459,861],{"class":102},[68,105461,5692],{"class":92},[68,105463,5338],{"class":85},[68,105465,105466,105469,105471,105473,105475],{"class":70,"line":78},[68,105467,105468],{"class":102},"    raise",[68,105470,105008],{"class":92},[68,105472,997],{"class":85},[68,105474,105013],{"class":872},[68,105476,1757],{"class":85},[19,105478,105479,105481,105482,105485,105486,105489,105490,105493],{},[65,105480,3134],{}," 是条件判断。",[65,105483,105484],{},"mj_name2id"," 找不到对象时会返回 ",[65,105487,105488],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[65,105491,105492],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[58,105495,105497],{"className":31971,"code":105496,"language":31973,"meta":63,"style":63},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[65,105498,105499,105515],{"__ignoreMap":63},[68,105500,105501,105503,105505,105507,105509,105511,105513],{"class":70,"line":71},[68,105502,4624],{"class":102},[68,105504,103075],{"class":85},[68,105506,27637],{"class":102},[68,105508,34036],{"class":92},[68,105510,997],{"class":85},[68,105512,3324],{"class":92},[68,105514,32379],{"class":85},[68,105516,105517],{"class":70,"line":78},[68,105518,103273],{"class":85},[19,105520,105521],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[58,105523,105525],{"className":31971,"code":105524,"language":31973,"meta":63,"style":63},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[65,105526,105527],{"__ignoreMap":63},[68,105528,105529,105531,105533,105535],{"class":70,"line":71},[68,105530,32008],{"class":92},[68,105532,997],{"class":85},[68,105534,105089],{"class":872},[68,105536,105092],{"class":85},[19,105538,105539,105541,105542,105545],{},[65,105540,102653],{}," 保存所有 body 的世界坐标。",[65,105543,105544],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[58,105547,105549],{"className":31971,"code":105548,"language":31973,"meta":63,"style":63},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[65,105550,105551],{"__ignoreMap":63},[68,105552,105553,105555,105557,105559],{"class":70,"line":71},[68,105554,32008],{"class":92},[68,105556,997],{"class":85},[68,105558,105101],{"class":872},[68,105560,105104],{"class":85},[19,105562,105563,105566,105567,105569],{},[65,105564,105565],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[65,105568,104550],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[58,105571,105573],{"className":31971,"code":105572,"language":31973,"meta":63,"style":63},"print(\"box qpos:\", np.array(data.qpos))\n",[65,105574,105575],{"__ignoreMap":63},[68,105576,105577,105579,105581,105583],{"class":70,"line":71},[68,105578,32008],{"class":92},[68,105580,997],{"class":85},[68,105582,105113],{"class":872},[68,105584,105116],{"class":85},[19,105586,105587,105588,105591],{},"这里打印广义位置数组。",[65,105589,105590],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105593,103890],{"id":103889},[19,105595,105596,105597,105600,105601,29978],{},"程序会输出 ",[65,105598,105599],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[65,105602,105603],{},"qpos",[19,105605,105606,105608,105609,105612,105613,105616],{},[65,105607,105544],{}," 是 body 的世界坐标位置。",[65,105610,105611],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[65,105614,105615],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105618,83799,105619,84107,105621,105623],{},[65,105620,104550],{},[65,105622,105368],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105625,105626],{},"如果你把 site 改成：",[58,105628,105630],{"className":54652,"code":105629,"language":54654,"meta":63,"style":63},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[65,105631,105632],{"__ignoreMap":63},[68,105633,105634,105636,105638,105640,105642,105645,105647,105649,105652,105654,105656,105658,105660,105662,105664],{"class":70,"line":71},[68,105635,861],{"class":85},[68,105637,104783],{"class":81},[68,105639,16516],{"class":587},[68,105641,869],{"class":85},[68,105643,105644],{"class":872},"\"box_top\"",[68,105646,102680],{"class":587},[68,105648,869],{"class":85},[68,105650,105651],{"class":872},"\"0 0 0.15\"",[68,105653,102710],{"class":587},[68,105655,869],{"class":85},[68,105657,105351],{"class":872},[68,105659,994],{"class":587},[68,105661,869],{"class":85},[68,105663,105358],{"class":872},[68,105665,102718],{"class":85},[19,105667,105668,105669,105672],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[65,105670,105671],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105674,103922],{"id":103921},[48,105676,105677,105686,105689,105696,105702,105713],{},[51,105678,103985,105679,105681,105682,103988,105684,29978],{},[65,105680,104554],{}," 的初始高度从 ",[65,105683,99],{},[65,105685,267],{},[51,105687,105688],{},"重新运行程序。",[51,105690,105691,105692,105695],{},"观察 ",[65,105693,105694],{},"box qpos"," 和最终位置是否变化。",[51,105697,105698,105699,105701],{},"故意把 ",[65,105700,104783],{}," 名称改错，确认程序能报错。",[51,105703,103985,105704,105706,105707,103988,105709,105712],{},[65,105705,102694],{}," 的颜色 ",[65,105708,103606],{},[65,105710,105711],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[51,105714,103985,105715,84107,105717,103988,105720,105723,105724,105726],{},[65,105716,104550],{},[65,105718,105719],{},"pos",[65,105721,105722],{},"0 0 0.2","，观察 ",[65,105725,105671],{}," 如何变化。",[14,105728,104027],{"id":104026},[43,105730,105732],{"id":105731},"xml-error-schema-violation",[65,105733,105734],{},"XML Error: Schema violation",[19,105736,105737],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[43,105739,105741,82867,105743],{"id":105740},"mj_name2id-返回-1",[65,105742,105484],{},[65,105744,105488],{},[19,105746,105747,105748,105751],{},"说明名字没有找到。检查 XML 中 ",[65,105749,105750],{},"name=\"...\"","，并确认对象类型正确。",[43,105753,105754],{"id":105754},"物体不下落",[19,105756,104097],{},[48,105758,105759,105764,105769],{},[51,105760,105761,105762],{},"body 是否有 ",[65,105763,103194],{},[51,105765,105766,105767],{},"gravity 是否为 ",[65,105768,104163],{},[51,105770,105771,105772,105774],{},"body 是否被固定在 ",[65,105773,103415],{}," 中",[43,105776,105777],{"id":105777},"坐标看起来不符合预期",[19,105779,105780],{},"先区分两种坐标：",[120,105782,105783,105792],{},[123,105784,105785],{},[126,105786,105787,105790],{},[129,105788,105789],{"align":131},"坐标",[129,105791,102274],{"align":131},[137,105793,105794,105804],{},[126,105795,105796,105801],{},[142,105797,105798,105799],{"align":131},"XML 里的 ",[65,105800,105719],{},[142,105802,105803],{"align":131},"相对父 body 的局部坐标",[126,105805,105806,105812],{},[142,105807,105808,26573,105810],{"align":131},[65,105809,102653],{},[65,105811,105565],{},[142,105813,105814],{"align":131},"仿真更新后的世界坐标",[19,105816,105817,105818,105820,105821,84116,105824,105826],{},"如果你修改了 ",[65,105819,102644],{},"，但还没调用 ",[65,105822,105823],{},"mj_forward",[65,105825,102789],{},"，世界坐标可能还没有更新。",[14,105828,104181],{"id":104180},[19,105830,105831],{},"MJCF 建模先掌握四件事：",[48,105833,105834,105839,105844,105849],{},[51,105835,105836,105838],{},[65,105837,53385],{}," 表示刚体层级。",[51,105840,105841,105843],{},[65,105842,102694],{}," 表示形状、碰撞和质量。",[51,105845,105846,105848],{},[65,105847,104529],{}," 决定 body 能不能动、怎么动。",[51,105850,105851,105853],{},[65,105852,104783],{}," 用来标记关键点，方便 Python 读取位置。",[19,105855,105856],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1652,105858,105859],{},"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":63,"searchDepth":78,"depth":78,"links":105861},[105862,105863,105864,105870,105874,105875,105876,105883],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":105865},[105866,105867,105868,105869],{"id":104533,"depth":89,"text":104533},{"id":104647,"depth":89,"text":104647},{"id":104673,"depth":89,"text":104674},{"id":104777,"depth":89,"text":104778},{"id":102826,"depth":78,"text":102827,"children":105871},[105872,105873],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":105877},[105878,105879,105881,105882],{"id":105731,"depth":89,"text":105734},{"id":105740,"depth":89,"text":105880},"mj_name2id 返回 -1",{"id":105754,"depth":89,"text":105754},{"id":105777,"depth":89,"text":105777},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104228,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105890,"title":105891,"body":105892,"description":63,"extension":1677,"meta":107387,"navigation":1679,"path":107388,"seo":107389,"stem":107390,"__hash__":107391},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105893,"toc":107359},[105894,105897,105899,105902,105905,105943,105946,105952,105955,105957,105959,105986,105988,106002,106004,106045,106047,106071,106073,106076,106085,106094,106097,106106,106114,106123,106126,106136,106139,106191,106198,106204,106212,106260,106263,106282,106285,106293,106297,106306,106339,106341,106689,106691,106703,106705,106716,106718,106721,106742,106748,106751,106776,106786,106789,106797,106800,106803,106824,106835,106837,106857,106860,106881,106890,106909,106915,106940,106943,106957,106964,106988,106991,106999,107008,107024,107036,107044,107053,107055,107058,107082,107087,107090,107112,107114,107153,107155,107162,107164,107172,107175,107178,107190,107231,107238,107249,107256,107259,107308,107311,107314,107320,107322,107327,107353,107356],[10,105895,105891],{"id":105896},"_3python-控制接口读取状态与推进仿真",[14,105898,102221],{"id":102220},[19,105900,105901],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105903,105904],{},"你将学习:",[48,105906,105907,105912,105917,105921,105926,105937],{},[51,105908,105909],{},[65,105910,105911],{},"MjModel.from_xml_string",[51,105913,105914],{},[65,105915,105916],{},"MjData(model)",[51,105918,105919],{},[65,105920,102789],{},[51,105922,105923],{},[65,105924,105925],{},"mj_resetData",[51,105927,105928,105929,1949,105931,1949,105934],{},"读取 ",[65,105930,105603],{},[65,105932,105933],{},"qvel",[65,105935,105936],{},"ctrl",[51,105938,105939,105940],{},"使用 ",[65,105941,105942],{},"model.opt.timestep",[19,105944,105945],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[58,105947,105950],{"className":105948,"code":105949,"language":6786,"meta":63},[6784],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[65,105951,105949],{"__ignoreMap":63},[19,105953,105954],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105956,102344],{"id":102343},[19,105958,102347],{},[58,105960,105962],{"className":25416,"code":105961,"language":25418,"meta":63,"style":63},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[65,105963,105964],{"__ignoreMap":63},[68,105965,105966,105968,105970,105972,105974,105977,105979,105981,105983],{"class":70,"line":71},[68,105967,26171],{"class":587},[68,105969,27909],{"class":872},[68,105971,25428],{"class":872},[68,105973,27994],{"class":92},[68,105975,105976],{"class":872}," python3",[68,105978,102372],{"class":872},[68,105980,104075],{"class":872},[68,105982,102388],{"class":872},[68,105984,105985],{"class":872}," glfw\n",[19,105987,104392],{},[58,105989,105990],{"className":25416,"code":102493,"language":25418,"meta":63,"style":63},[65,105991,105992],{"__ignoreMap":63},[68,105993,105994,105996,105998,106000],{"class":70,"line":71},[68,105995,25425],{"class":587},[68,105997,25428],{"class":872},[68,105999,102504],{"class":872},[68,106001,102507],{"class":872},[19,106003,104409],{},[58,106005,106007],{"className":25416,"code":106006,"language":25418,"meta":63,"style":63},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[65,106008,106009,106026,106035],{"__ignoreMap":63},[68,106010,106011,106013,106015,106017,106020,106022,106024],{"class":70,"line":71},[68,106012,31923],{"class":587},[68,106014,30769],{"class":872},[68,106016,26710],{"class":92},[68,106018,106019],{"class":872}," mujoco-python-api",[68,106021,102549],{"class":872},[68,106023,102552],{"class":92},[68,106025,102555],{"class":92},[68,106027,106028,106030,106032],{"class":70,"line":78},[68,106029,31923],{"class":587},[68,106031,102562],{"class":872},[68,106033,106034],{"class":872}," mujoco-python-api\n",[68,106036,106037,106039,106041,106043],{"class":70,"line":89},[68,106038,25425],{"class":587},[68,106040,25428],{"class":872},[68,106042,102504],{"class":872},[68,106044,102507],{"class":872},[19,106046,102578],{},[48,106048,106049,106056,106065],{},[51,106050,106051,102592,106053,106055],{},[65,106052,102249],{},[65,106054,102254],{}," 是官方 Python bindings 的类名。",[51,106057,106058,106059,106062,106063,29978],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[65,106060,106061],{},"mjModel"," 在 Python 中是 ",[65,106064,102283],{},[51,106066,106067,106068,29978],{},"不要使用 ",[65,106069,106070],{},"sim = mujoco_py.MjSim(...)",[14,106072,102619],{"id":102618},[19,106074,106075],{},"仿真推进核心代码:",[58,106077,106079],{"className":31971,"code":106078,"language":31973,"meta":63,"style":63},"mujoco.mj_step(model, data)\n",[65,106080,106081],{"__ignoreMap":63},[68,106082,106083],{"class":70,"line":71},[68,106084,106078],{"class":85},[19,106086,106087,106088,1949,106090,1949,106092,29978],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[65,106089,102644],{},[65,106091,102647],{},[65,106093,102641],{},[19,106095,106096],{},"重置仿真:",[58,106098,106100],{"className":31971,"code":106099,"language":31973,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\n",[65,106101,106102],{"__ignoreMap":63},[68,106103,106104],{"class":70,"line":71},[68,106105,106099],{"class":85},[19,106107,106108,106109,84116,106111,106113],{},"如果手动修改了 ",[65,106110,102644],{},[65,106112,102647],{},"，通常应调用:",[58,106115,106117],{"className":31971,"code":106116,"language":31973,"meta":63,"style":63},"mujoco.mj_forward(model, data)\n",[65,106118,106119],{"__ignoreMap":63},[68,106120,106121],{"class":70,"line":71},[68,106122,106116],{"class":85},[19,106124,106125],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[43,106127,106129,1949,106131,1949,106133,106135],{"id":106128},"qposqvelctrl-是什么",[65,106130,105603],{},[65,106132,105933],{},[65,106134,105936],{}," 是什么",[19,106137,106138],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[120,106140,106141,106153],{},[123,106142,106143],{},[126,106144,106145,106148,106150],{},[129,106146,106147],{"align":131},"字段",[129,106149,102274],{"align":131},[129,106151,106152],{"align":131},"谁来修改",[137,106154,106155,106167,106179],{},[126,106156,106157,106161,106164],{},[142,106158,106159],{"align":131},[65,106160,102644],{},[142,106162,106163],{"align":131},"广义位置，例如小车位置、关节角、自由物体位置姿态",[142,106165,106166],{"align":131},"MuJoCo 更新，也可以手动设置初始状态",[126,106168,106169,106173,106176],{},[142,106170,106171],{"align":131},[65,106172,102647],{},[142,106174,106175],{"align":131},"广义速度，例如小车速度、关节角速度",[142,106177,106178],{"align":131},"MuJoCo 更新，也可以手动清零",[126,106180,106181,106185,106188],{},[142,106182,106183],{"align":131},[65,106184,102650],{},[142,106186,106187],{"align":131},"actuator 的控制输入",[142,106189,106190],{"align":131},"主要由你的控制代码写入",[19,106192,1210,106193,102592,106195,106197],{},[65,106194,105603],{},[65,106196,105933],{}," 不一定同维。自由刚体就是典型例子：",[58,106199,106202],{"className":106200,"code":106201,"language":6786,"meta":63},[6784],"freejoint: qpos 7 维，qvel 6 维\n",[65,106203,106201],{"__ignoreMap":63},[43,106205,106207,102592,106209,106211],{"id":106206},"mj_step-和-mj_forward-的区别",[65,106208,102789],{},[65,106210,105823],{}," 的区别",[120,106213,106214,106227],{},[123,106215,106216],{},[126,106217,106218,106221,106224],{},[129,106219,106220],{"align":131},"函数",[129,106222,106223],{"align":131},"是否推进时间",[129,106225,106226],{"align":131},"什么时候用",[137,106228,106229,106242],{},[126,106230,106231,106236,106239],{},[142,106232,106233],{"align":131},[65,106234,106235],{},"mj_step(model, data)",[142,106237,106238],{"align":131},"是",[142,106240,106241],{"align":131},"正常仿真循环，每调用一次前进一步",[126,106243,106244,106249,106252],{},[142,106245,106246],{"align":131},[65,106247,106248],{},"mj_forward(model, data)",[142,106250,106251],{"align":131},"否",[142,106253,106254,106255,1949,106257,106259],{"align":131},"手动改了 ",[65,106256,105603],{},[65,106258,105933],{}," 后，刷新派生量",[19,106261,106262],{},"例如你写：",[58,106264,106266],{"className":31971,"code":106265,"language":31973,"meta":63,"style":63},"data.qpos[2] = 2.0\n",[65,106267,106268],{"__ignoreMap":63},[68,106269,106270,106273,106275,106277,106279],{"class":70,"line":71},[68,106271,106272],{"class":85},"data.qpos[",[68,106274,267],{"class":92},[68,106276,6042],{"class":85},[68,106278,869],{"class":102},[68,106280,106281],{"class":92}," 2.0\n",[19,106283,106284],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[58,106286,106287],{"className":31971,"code":106116,"language":31973,"meta":63,"style":63},[65,106288,106289],{"__ignoreMap":63},[68,106290,106291],{"class":70,"line":71},[68,106292,106116],{"class":85},[43,106294,106296],{"id":106295},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106298,106299,106302,106303,106305],{},[65,106300,106301],{},"mujoco.mj_resetData(model, data)"," 会把 ",[65,106304,34994],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[58,106307,106309],{"className":31971,"code":106308,"language":31973,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[65,106310,106311,106315,106325,106335],{"__ignoreMap":63},[68,106312,106313],{"class":70,"line":71},[68,106314,106099],{"class":85},[68,106316,106317,106320,106322],{"class":70,"line":78},[68,106318,106319],{"class":85},"data.qpos[:] ",[68,106321,869],{"class":102},[68,106323,106324],{"class":85}," random_qpos\n",[68,106326,106327,106330,106332],{"class":70,"line":89},[68,106328,106329],{"class":85},"data.qvel[:] ",[68,106331,869],{"class":102},[68,106333,106334],{"class":92}," 0.0\n",[68,106336,106337],{"class":70,"line":115},[68,106338,106116],{"class":85},[14,106340,102827],{"id":102826},[58,106342,106344],{"className":31971,"code":106343,"language":31973,"meta":63,"style":63},"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",[65,106345,106346,106352,106362,106366,106370,106378,106383,106387,106391,106395,106400,106404,106409,106414,106419,106423,106427,106431,106435,106439,106443,106462,106469,106481,106492,106508,106524,106528,106532,106544,106556,106564,106568,106579,106583,106599,106603,106607,106616,106620,106625,106634,106638,106651,106656,106665,106669,106673,106685],{"__ignoreMap":63},[68,106347,106348,106350],{"class":70,"line":71},[68,106349,31985],{"class":102},[68,106351,102875],{"class":85},[68,106353,106354,106356,106358,106360],{"class":70,"line":78},[68,106355,31985],{"class":102},[68,106357,32973],{"class":85},[68,106359,32976],{"class":102},[68,106361,32979],{"class":85},[68,106363,106364],{"class":70,"line":89},[68,106365,4000],{"emptyLinePlaceholder":1679},[68,106367,106368],{"class":70,"line":115},[68,106369,4000],{"emptyLinePlaceholder":1679},[68,106371,106372,106374,106376],{"class":70,"line":280},[68,106373,102888],{"class":92},[68,106375,15161],{"class":102},[68,106377,102893],{"class":872},[68,106379,106380],{"class":70,"line":301},[68,106381,106382],{"class":872},"\u003Cmujoco model=\"state_api\">\n",[68,106384,106385],{"class":70,"line":320},[68,106386,102903],{"class":872},[68,106388,106389],{"class":70,"line":2915},[68,106390,4000],{"emptyLinePlaceholder":1679},[68,106392,106393],{"class":70,"line":2921},[68,106394,102912],{"class":872},[68,106396,106397],{"class":70,"line":2933},[68,106398,106399],{"class":872},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[68,106401,106402],{"class":70,"line":3214},[68,106403,4000],{"emptyLinePlaceholder":1679},[68,106405,106406],{"class":70,"line":3219},[68,106407,106408],{"class":872},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[68,106410,106411],{"class":70,"line":3225},[68,106412,106413],{"class":872},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[68,106415,106416],{"class":70,"line":3230},[68,106417,106418],{"class":872},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[68,106420,106421],{"class":70,"line":3244},[68,106422,102941],{"class":872},[68,106424,106425],{"class":70,"line":3249},[68,106426,102946],{"class":872},[68,106428,106429],{"class":70,"line":3255},[68,106430,102951],{"class":872},[68,106432,106433],{"class":70,"line":3276},[68,106434,97273],{"class":872},[68,106436,106437],{"class":70,"line":3281},[68,106438,4000],{"emptyLinePlaceholder":1679},[68,106440,106441],{"class":70,"line":3295},[68,106442,4000],{"emptyLinePlaceholder":1679},[68,106444,106445,106447,106450,106453,106455,106458,106460],{"class":70,"line":3300},[68,106446,33540],{"class":102},[68,106448,106449],{"class":587}," print_state",[68,106451,106452],{"class":85},"(prefix: ",[68,106454,2903],{"class":92},[68,106456,106457],{"class":85},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[68,106459,97261],{"class":92},[68,106461,5338],{"class":85},[68,106463,106464,106466],{"class":70,"line":3329},[68,106465,32892],{"class":92},[68,106467,106468],{"class":85},"(prefix)\n",[68,106470,106471,106473,106475,106478],{"class":70,"line":3334},[68,106472,32892],{"class":92},[68,106474,997],{"class":85},[68,106476,106477],{"class":872},"\"  timestep:\"",[68,106479,106480],{"class":85},", model.opt.timestep)\n",[68,106482,106483,106485,106487,106490],{"class":70,"line":3351},[68,106484,32892],{"class":92},[68,106486,997],{"class":85},[68,106488,106489],{"class":872},"\"  time:\"",[68,106491,103052],{"class":85},[68,106493,106494,106496,106498,106501,106504,106506],{"class":70,"line":3356},[68,106495,32892],{"class":92},[68,106497,997],{"class":85},[68,106499,106500],{"class":872},"\"  qpos:\"",[68,106502,106503],{"class":85},", np.round(data.qpos.copy(), ",[68,106505,2029],{"class":92},[68,106507,32090],{"class":85},[68,106509,106510,106512,106514,106517,106520,106522],{"class":70,"line":3361},[68,106511,32892],{"class":92},[68,106513,997],{"class":85},[68,106515,106516],{"class":872},"\"  qvel:\"",[68,106518,106519],{"class":85},", np.round(data.qvel.copy(), ",[68,106521,2029],{"class":92},[68,106523,32090],{"class":85},[68,106525,106526],{"class":70,"line":3366},[68,106527,4000],{"emptyLinePlaceholder":1679},[68,106529,106530],{"class":70,"line":3380},[68,106531,4000],{"emptyLinePlaceholder":1679},[68,106533,106534,106536,106538,106540,106542],{"class":70,"line":3385},[68,106535,33540],{"class":102},[68,106537,3574],{"class":587},[68,106539,102972],{"class":85},[68,106541,97261],{"class":92},[68,106543,5338],{"class":85},[68,106545,106546,106548,106550,106552,106554],{"class":70,"line":4177},[68,106547,102981],{"class":85},[68,106549,869],{"class":102},[68,106551,102986],{"class":85},[68,106553,102888],{"class":92},[68,106555,1757],{"class":85},[68,106557,106558,106560,106562],{"class":70,"line":4191},[68,106559,102995],{"class":85},[68,106561,869],{"class":102},[68,106563,103000],{"class":85},[68,106565,106566],{"class":70,"line":4199},[68,106567,4000],{"emptyLinePlaceholder":1679},[68,106569,106570,106573,106576],{"class":70,"line":4204},[68,106571,106572],{"class":85},"    print_state(",[68,106574,106575],{"class":872},"\"initial\"",[68,106577,106578],{"class":85},", model, data)\n",[68,106580,106581],{"class":70,"line":4210},[68,106582,4000],{"emptyLinePlaceholder":1679},[68,106584,106585,106587,106589,106591,106593,106595,106597],{"class":70,"line":4216},[68,106586,4800],{"class":102},[68,106588,103075],{"class":85},[68,106590,27637],{"class":102},[68,106592,34036],{"class":92},[68,106594,997],{"class":85},[68,106596,2392],{"class":92},[68,106598,32379],{"class":85},[68,106600,106601],{"class":70,"line":4221},[68,106602,103090],{"class":85},[68,106604,106605],{"class":70,"line":9547},[68,106606,4000],{"emptyLinePlaceholder":1679},[68,106608,106609,106611,106614],{"class":70,"line":9571},[68,106610,106572],{"class":85},[68,106612,106613],{"class":872},"\"after 50 steps\"",[68,106615,106578],{"class":85},[68,106617,106618],{"class":70,"line":9576},[68,106619,4000],{"emptyLinePlaceholder":1679},[68,106621,106622],{"class":70,"line":9582},[68,106623,106624],{"class":85},"    mujoco.mj_resetData(model, data)\n",[68,106626,106627,106629,106632],{"class":70,"line":9609},[68,106628,106572],{"class":85},[68,106630,106631],{"class":872},"\"after reset\"",[68,106633,106578],{"class":85},[68,106635,106636],{"class":70,"line":9614},[68,106637,4000],{"emptyLinePlaceholder":1679},[68,106639,106640,106643,106645,106647,106649],{"class":70,"line":9620},[68,106641,106642],{"class":85},"    data.qpos[",[68,106644,267],{"class":92},[68,106646,6042],{"class":85},[68,106648,869],{"class":102},[68,106650,106281],{"class":92},[68,106652,106653],{"class":70,"line":9632},[68,106654,106655],{"class":85},"    mujoco.mj_forward(model, data)\n",[68,106657,106658,106660,106663],{"class":70,"line":9644},[68,106659,106572],{"class":85},[68,106661,106662],{"class":872},"\"after manual qpos edit\"",[68,106664,106578],{"class":85},[68,106666,106667],{"class":70,"line":9656},[68,106668,4000],{"emptyLinePlaceholder":1679},[68,106670,106671],{"class":70,"line":11314},[68,106672,4000],{"emptyLinePlaceholder":1679},[68,106674,106675,106677,106679,106681,106683],{"class":70,"line":11339},[68,106676,3134],{"class":102},[68,106678,32813],{"class":92},[68,106680,103133],{"class":102},[68,106682,103136],{"class":872},[68,106684,5338],{"class":85},[68,106686,106687],{"class":70,"line":11362},[68,106688,103143],{"class":85},[19,106690,105143],{},[58,106692,106694],{"className":25416,"code":106693,"language":25418,"meta":63,"style":63},"touch ch3_python_state.py\n",[65,106695,106696],{"__ignoreMap":63},[68,106697,106698,106700],{"class":70,"line":71},[68,106699,102857],{"class":587},[68,106701,106702],{"class":872}," ch3_python_state.py\n",[19,106704,103875],{},[58,106706,106708],{"className":25416,"code":106707,"language":25418,"meta":63,"style":63},"python ch3_python_state.py\n",[65,106709,106710],{"__ignoreMap":63},[68,106711,106712,106714],{"class":70,"line":71},[68,106713,31973],{"class":587},[68,106715,106702],{"class":872},[43,106717,103146],{"id":103146},[19,106719,106720],{},"打印状态的函数：",[58,106722,106724],{"className":31971,"code":106723,"language":31973,"meta":63,"style":63},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[65,106725,106726],{"__ignoreMap":63},[68,106727,106728,106730,106732,106734,106736,106738,106740],{"class":70,"line":71},[68,106729,33540],{"class":102},[68,106731,106449],{"class":587},[68,106733,106452],{"class":85},[68,106735,2903],{"class":92},[68,106737,106457],{"class":85},[68,106739,97261],{"class":92},[68,106741,5338],{"class":85},[19,106743,106744,106745,106747],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[65,106746,34994],{}," 里发生了什么。",[19,106749,106750],{},"推进 50 步：",[58,106752,106754],{"className":31971,"code":106753,"language":31973,"meta":63,"style":63},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[65,106755,106756,106772],{"__ignoreMap":63},[68,106757,106758,106760,106762,106764,106766,106768,106770],{"class":70,"line":71},[68,106759,4624],{"class":102},[68,106761,103075],{"class":85},[68,106763,27637],{"class":102},[68,106765,34036],{"class":92},[68,106767,997],{"class":85},[68,106769,2392],{"class":92},[68,106771,32379],{"class":85},[68,106773,106774],{"class":70,"line":78},[68,106775,103273],{"class":85},[19,106777,106778,106779,106782,106783,106785],{},"由于 ",[65,106780,106781],{},"timestep=0.01","，所以 50 步后时间约为 ",[65,106784,36922],{}," 秒。",[19,106787,106788],{},"重置：",[58,106790,106791],{"className":31971,"code":106099,"language":31973,"meta":63,"style":63},[65,106792,106793],{"__ignoreMap":63},[68,106794,106795],{"class":70,"line":71},[68,106796,106099],{"class":85},[19,106798,106799],{},"这会把时间、位置、速度恢复到初始状态。",[19,106801,106802],{},"手动改高度：",[58,106804,106806],{"className":31971,"code":106805,"language":31973,"meta":63,"style":63},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[65,106807,106808,106820],{"__ignoreMap":63},[68,106809,106810,106812,106814,106816,106818],{"class":70,"line":71},[68,106811,106272],{"class":85},[68,106813,267],{"class":92},[68,106815,6042],{"class":85},[68,106817,869],{"class":102},[68,106819,106281],{"class":92},[68,106821,106822],{"class":70,"line":78},[68,106823,106116],{"class":85},[19,106825,106826,106827,106830,106831,106834],{},"这个例子里 ",[65,106828,106829],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[65,106832,106833],{},"2.0"," 表示把小球放到更高的位置。",[43,106836,103282],{"id":103282},[58,106838,106839],{"className":31971,"code":106723,"language":31973,"meta":63,"style":63},[65,106840,106841],{"__ignoreMap":63},[68,106842,106843,106845,106847,106849,106851,106853,106855],{"class":70,"line":71},[68,106844,33540],{"class":102},[68,106846,106449],{"class":587},[68,106848,106452],{"class":85},[68,106850,2903],{"class":92},[68,106852,106457],{"class":85},[68,106854,97261],{"class":92},[68,106856,5338],{"class":85},[19,106858,106859],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[48,106861,106862,106871,106876],{},[51,106863,106864,106867,106868,106870],{},[65,106865,106866],{},"prefix","：一段文字，比如 ",[65,106869,106575],{},"，用来说明现在打印的是哪个阶段。",[51,106872,106873,106875],{},[65,106874,103659],{},"：MuJoCo 模型。",[51,106877,106878,106880],{},[65,106879,34994],{},"：MuJoCo 当前状态。",[19,106882,106883,1949,106886,106889],{},[65,106884,106885],{},"prefix: str",[65,106887,106888],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[58,106891,106893],{"className":31971,"code":106892,"language":31973,"meta":63,"style":63},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[65,106894,106895],{"__ignoreMap":63},[68,106896,106897,106899,106901,106903,106905,106907],{"class":70,"line":71},[68,106898,32008],{"class":92},[68,106900,997],{"class":85},[68,106902,106500],{"class":872},[68,106904,106503],{"class":85},[68,106906,2029],{"class":92},[68,106908,32090],{"class":85},[19,106910,106911,106914],{},[65,106912,106913],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[58,106916,106918],{"className":31971,"code":106917,"language":31973,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[65,106919,106920,106932],{"__ignoreMap":63},[68,106921,106922,106924,106926,106928,106930],{"class":70,"line":71},[68,106923,103208],{"class":85},[68,106925,869],{"class":102},[68,106927,102986],{"class":85},[68,106929,102888],{"class":92},[68,106931,1757],{"class":85},[68,106933,106934,106936,106938],{"class":70,"line":78},[68,106935,103232],{"class":85},[68,106937,869],{"class":102},[68,106939,103000],{"class":85},[19,106941,106942],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[58,106944,106946],{"className":31971,"code":106945,"language":31973,"meta":63,"style":63},"print_state(\"initial\", model, data)\n",[65,106947,106948],{"__ignoreMap":63},[68,106949,106950,106953,106955],{"class":70,"line":71},[68,106951,106952],{"class":85},"print_state(",[68,106954,106575],{"class":872},[68,106956,106578],{"class":85},[19,106958,106959,106960,106963],{},"调用刚才定义的 ",[65,106961,106962],{},"print_state"," 函数，打印初始状态。",[58,106965,106966],{"className":31971,"code":106753,"language":31973,"meta":63,"style":63},[65,106967,106968,106984],{"__ignoreMap":63},[68,106969,106970,106972,106974,106976,106978,106980,106982],{"class":70,"line":71},[68,106971,4624],{"class":102},[68,106973,103075],{"class":85},[68,106975,27637],{"class":102},[68,106977,34036],{"class":92},[68,106979,997],{"class":85},[68,106981,2392],{"class":92},[68,106983,32379],{"class":85},[68,106985,106986],{"class":70,"line":78},[68,106987,103273],{"class":85},[19,106989,106990],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[58,106992,106993],{"className":31971,"code":106099,"language":31973,"meta":63,"style":63},[65,106994,106995],{"__ignoreMap":63},[68,106996,106997],{"class":70,"line":71},[68,106998,106099],{"class":85},[19,107000,107001,107002,107004,107005,107007],{},"重置 ",[65,107003,34994],{},"。注意它不会重新创建 ",[65,107006,103659],{},"，因为模型结构没有变，只是状态回到初始值。",[58,107009,107010],{"className":31971,"code":106265,"language":31973,"meta":63,"style":63},[65,107011,107012],{"__ignoreMap":63},[68,107013,107014,107016,107018,107020,107022],{"class":70,"line":71},[68,107015,106272],{"class":85},[68,107017,267],{"class":92},[68,107019,6042],{"class":85},[68,107021,869],{"class":102},[68,107023,106281],{"class":92},[19,107025,107026,107027,1949,107030,1949,107033,107035],{},"这行是“手动改状态”。在 freejoint 中，",[65,107028,107029],{},"qpos[0]",[65,107031,107032],{},"qpos[1]",[65,107034,106829],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[58,107037,107038],{"className":31971,"code":106116,"language":31973,"meta":63,"style":63},[65,107039,107040],{"__ignoreMap":63},[68,107041,107042],{"class":70,"line":71},[68,107043,106116],{"class":85},[19,107045,107046,107047,107049,107050,107052],{},"手动改完 ",[65,107048,105603],{}," 后，调用 ",[65,107051,105823],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107054,103890],{"id":103889},[19,107056,107057],{},"你会看到:",[48,107059,107060,107065,107070,107073],{},[51,107061,107062,107063],{},"初始时间为 ",[65,107064,600],{},[51,107066,107067,107068],{},"50 步后时间约为 ",[65,107069,36922],{},[51,107071,107072],{},"reset 后状态恢复",[51,107074,107075,107076,107079,107080],{},"手动修改 ",[65,107077,107078],{},"data.qpos[2]"," 后，小球高度变为 ",[65,107081,106833],{},[19,107083,107084,107086],{},[65,107085,106829],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107088,107089],{},"输出里可以重点看三件事：",[48,107091,107092,107100,107105],{},[51,107093,107094,107096,107097,107099],{},[65,107095,3987],{}," 是否随着 ",[65,107098,102789],{}," 增加。",[51,107101,107102,107104],{},[65,107103,105603],{}," 的 z 坐标是否因为下落而变化。",[51,107106,107107,107109,107110,29978],{},[65,107108,105925],{}," 后时间是否回到 ",[65,107111,600],{},[14,107113,103922],{"id":103921},[48,107115,107116,107122,107128,107134,107137,107146],{},[51,107117,107118,107119,29978],{},"修改 timestep 为 ",[65,107120,107121],{},"0.005",[51,107123,107124,107125,29978],{},"重新运行，检查 50 步后时间是否约为 ",[65,107126,107127],{},"0.25",[51,107129,107130,107131,29978],{},"修改重力为 ",[65,107132,107133],{},"0 0 -1.0",[51,107135,107136],{},"观察小球下降速度是否变慢。",[51,107138,103985,107139,103988,107142,107145],{},[65,107140,107141],{},"data.qpos[2] = 2.0",[65,107143,107144],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[51,107147,107148,107149,107152],{},"注释掉 ",[65,107150,107151],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107154,104027],{"id":104026},[43,107156,107158,107159,107161],{"id":107157},"修改-dataqpos-后位置没有更新","修改 ",[65,107160,102644],{}," 后位置没有更新",[19,107163,104036],{},[58,107165,107166],{"className":31971,"code":106116,"language":31973,"meta":63,"style":63},[65,107167,107168],{"__ignoreMap":63},[68,107169,107170],{"class":70,"line":71},[68,107171,106116],{"class":85},[43,107173,107174],{"id":107174},"数组维度看不懂",[19,107176,107177],{},"打印模型维度:",[58,107179,107181],{"className":31971,"code":107180,"language":31973,"meta":63,"style":63},"print(model.nq, model.nv, model.nu)\n",[65,107182,107183],{"__ignoreMap":63},[68,107184,107185,107187],{"class":70,"line":71},[68,107186,32008],{"class":92},[68,107188,107189],{"class":85},"(model.nq, model.nv, model.nu)\n",[120,107191,107192,107200],{},[123,107193,107194],{},[126,107195,107196,107198],{},[129,107197,106147],{"align":131},[129,107199,102274],{"align":131},[137,107201,107202,107212,107222],{},[126,107203,107204,107209],{},[142,107205,107206],{"align":131},[65,107207,107208],{},"nq",[142,107210,107211],{"align":131},"位置变量数量",[126,107213,107214,107219],{},[142,107215,107216],{"align":131},[65,107217,107218],{},"nv",[142,107220,107221],{"align":131},"速度变量数量",[126,107223,107224,107228],{},[142,107225,107226],{"align":131},[65,107227,103736],{},[142,107229,107230],{"align":131},"控制输入数量",[43,107232,107234,107235,107237],{"id":107233},"误以为-qpos-一定等于关节数","误以为 ",[65,107236,105603],{}," 一定等于关节数",[19,107239,107240,107241,84107,107243,107245,107246,107248],{},"不是。例如 ",[65,107242,103194],{},[65,107244,105603],{}," 是 7 维，但 ",[65,107247,105933],{}," 是 6 维。",[43,107250,107252,107253,107255],{"id":107251},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[65,107254,105603],{}," 的第几位",[19,107257,107258],{},"初学时可以先打印：",[58,107260,107262],{"className":31971,"code":107261,"language":31973,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[65,107263,107264,107274,107284,107296],{"__ignoreMap":63},[68,107265,107266,107268,107270,107272],{"class":70,"line":71},[68,107267,32008],{"class":92},[68,107269,997],{"class":85},[68,107271,103013],{"class":872},[68,107273,103016],{"class":85},[68,107275,107276,107278,107280,107282],{"class":70,"line":78},[68,107277,32008],{"class":92},[68,107279,997],{"class":85},[68,107281,103025],{"class":872},[68,107283,103028],{"class":85},[68,107285,107286,107288,107290,107293],{"class":70,"line":89},[68,107287,32008],{"class":92},[68,107289,997],{"class":85},[68,107291,107292],{"class":872},"\"qpos:\"",[68,107294,107295],{"class":85},", data.qpos)\n",[68,107297,107298,107300,107302,107305],{"class":70,"line":115},[68,107299,32008],{"class":92},[68,107301,997],{"class":85},[68,107303,107304],{"class":872},"\"qvel:\"",[68,107306,107307],{"class":85},", data.qvel)\n",[19,107309,107310],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[43,107312,107313],{"id":107313},"仿真结果每次都一样",[19,107315,107316,107317,107319],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[65,107318,105603],{},"、目标点或控制输入。",[14,107321,104181],{"id":104180},[19,107323,107324,107325,26213],{},"Python 控制 MuJoCo 的核心就是读写 ",[65,107326,34994],{},[48,107328,107329,107337,107342,107347],{},[51,107330,107331,107332,102592,107334,107336],{},"用 ",[65,107333,102644],{},[65,107335,102647],{}," 读取状态。",[51,107338,107331,107339,107341],{},[65,107340,102650],{}," 写入控制。",[51,107343,107331,107344,107346],{},[65,107345,102789],{}," 推进时间。",[51,107348,107349,107350,107352],{},"手动改状态后用 ",[65,107351,105823],{}," 刷新派生量。",[19,107354,107355],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1652,107357,107358],{},"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":63,"searchDepth":78,"depth":78,"links":107360},[107361,107362,107363,107370,107374,107375,107376,107386],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":107364},[107365,107367,107369],{"id":106128,"depth":89,"text":107366},"qpos、qvel、ctrl 是什么",{"id":106206,"depth":89,"text":107368},"mj_step 和 mj_forward 的区别",{"id":106295,"depth":89,"text":106296},{"id":102826,"depth":78,"text":102827,"children":107371},[107372,107373],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":107377},[107378,107380,107381,107383,107385],{"id":107157,"depth":89,"text":107379},"修改 data.qpos 后位置没有更新",{"id":107174,"depth":89,"text":107174},{"id":107233,"depth":89,"text":107382},"误以为 qpos 一定等于关节数",{"id":107251,"depth":89,"text":107384},"不知道某个元素在 qpos 的第几位",{"id":107313,"depth":89,"text":107313},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105891,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107393,"title":107394,"body":107395,"description":63,"extension":1677,"meta":109085,"navigation":1679,"path":109086,"seo":109087,"stem":109088,"__hash__":109089},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107396,"toc":109061},[107397,107400,107402,107405,107407,107432,107435,107454,107457,107459,107461,107485,107487,107501,107503,107544,107546,107570,107572,107575,107609,107611,107624,107627,107695,107704,107708,107711,107745,107751,107754,107758,107797,107800,107820,107824,107867,107869,107898,107901,107907,107910,107912,108306,108308,108320,108322,108333,108335,108338,108367,108375,108378,108413,108416,108418,108426,108429,108431,108442,108452,108472,108475,108511,108523,108571,108590,108632,108645,108673,108678,108699,108709,108727,108730,108764,108767,108787,108790,108809,108815,108817,108820,108826,108832,108842,108845,108851,108860,108862,108908,108910,108916,108922,108925,108928,108948,108951,108957,108963,108965,108988,108991,108994,109003,109006,109044,109046,109049,109055,109058],[10,107398,107394],{"id":107399},"_4关节actuator-与力控制",[14,107401,102221],{"id":102220},[19,107403,107404],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107406,105904],{},[48,107408,107409,107415,107420,107424,107429],{},[51,107410,107411,107414],{},[65,107412,107413],{},"hinge"," 关节",[51,107416,107417],{},[65,107418,107419],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[51,107421,107422],{},[65,107423,102650],{},[51,107425,107426],{},[65,107427,107428],{},"ctrlrange",[51,107430,107431],{},"读取关节角和角速度",[19,107433,107434],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[58,107436,107438],{"className":31971,"code":107437,"language":31973,"meta":63,"style":63},"data.ctrl[0] = ...\n",[65,107439,107440],{"__ignoreMap":63},[68,107441,107442,107445,107447,107449,107451],{"class":70,"line":71},[68,107443,107444],{"class":85},"data.ctrl[",[68,107446,600],{"class":92},[68,107448,6042],{"class":85},[68,107450,869],{"class":102},[68,107452,107453],{"class":92}," ...\n",[19,107455,107456],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107458,102344],{"id":102343},[19,107460,102347],{},[58,107462,107463],{"className":25416,"code":105961,"language":25418,"meta":63,"style":63},[65,107464,107465],{"__ignoreMap":63},[68,107466,107467,107469,107471,107473,107475,107477,107479,107481,107483],{"class":70,"line":71},[68,107468,26171],{"class":587},[68,107470,27909],{"class":872},[68,107472,25428],{"class":872},[68,107474,27994],{"class":92},[68,107476,105976],{"class":872},[68,107478,102372],{"class":872},[68,107480,104075],{"class":872},[68,107482,102388],{"class":872},[68,107484,105985],{"class":872},[19,107486,104392],{},[58,107488,107489],{"className":25416,"code":102493,"language":25418,"meta":63,"style":63},[65,107490,107491],{"__ignoreMap":63},[68,107492,107493,107495,107497,107499],{"class":70,"line":71},[68,107494,25425],{"class":587},[68,107496,25428],{"class":872},[68,107498,102504],{"class":872},[68,107500,102507],{"class":872},[19,107502,104409],{},[58,107504,107506],{"className":25416,"code":107505,"language":25418,"meta":63,"style":63},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[65,107507,107508,107525,107534],{"__ignoreMap":63},[68,107509,107510,107512,107514,107516,107519,107521,107523],{"class":70,"line":71},[68,107511,31923],{"class":587},[68,107513,30769],{"class":872},[68,107515,26710],{"class":92},[68,107517,107518],{"class":872}," mujoco-control",[68,107520,102549],{"class":872},[68,107522,102552],{"class":92},[68,107524,102555],{"class":92},[68,107526,107527,107529,107531],{"class":70,"line":78},[68,107528,31923],{"class":587},[68,107530,102562],{"class":872},[68,107532,107533],{"class":872}," mujoco-control\n",[68,107535,107536,107538,107540,107542],{"class":70,"line":89},[68,107537,25425],{"class":587},[68,107539,25428],{"class":872},[68,107541,102504],{"class":872},[68,107543,102507],{"class":872},[19,107545,102578],{},[48,107547,107548,107554,107561,107567],{},[51,107549,107550,107553],{},[65,107551,107552],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[51,107555,107556,107558,107559,29978],{},[65,107557,102650],{}," 长度等于 ",[65,107560,103732],{},[51,107562,83799,107563,107566],{},[65,107564,107565],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[51,107568,107569],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107571,102619],{"id":102618},[19,107573,107574],{},"关节决定 body 如何运动:",[58,107576,107578],{"className":54652,"code":107577,"language":54654,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[65,107579,107580],{"__ignoreMap":63},[68,107581,107582,107584,107586,107588,107590,107593,107595,107597,107599,107602,107604,107607],{"class":70,"line":71},[68,107583,861],{"class":85},[68,107585,104529],{"class":81},[68,107587,16516],{"class":587},[68,107589,869],{"class":85},[68,107591,107592],{"class":872},"\"hinge\"",[68,107594,55408],{"class":587},[68,107596,869],{"class":85},[68,107598,107592],{"class":872},[68,107600,107601],{"class":587}," axis",[68,107603,869],{"class":85},[68,107605,107606],{"class":872},"\"0 1 0\"",[68,107608,102718],{"class":85},[19,107610,104625],{},[48,107612,107613,107618,107621],{},[51,107614,107615,107616],{},"名字是 ",[65,107617,107413],{},[51,107619,107620],{},"类型是旋转关节",[51,107622,107623],{},"绕 y 轴旋转",[19,107625,107626],{},"actuator 决定如何施加控制:",[58,107628,107630],{"className":54652,"code":107629,"language":54654,"meta":63,"style":63},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[65,107631,107632,107641,107687],{"__ignoreMap":63},[68,107633,107634,107636,107639],{"class":70,"line":71},[68,107635,861],{"class":85},[68,107637,107638],{"class":81},"actuator",[68,107640,876],{"class":85},[68,107642,107643,107645,107648,107650,107652,107655,107658,107660,107662,107665,107667,107669,107672,107674,107677,107680,107682,107685],{"class":70,"line":78},[68,107644,53729],{"class":85},[68,107646,107647],{"class":81},"motor",[68,107649,16516],{"class":587},[68,107651,869],{"class":85},[68,107653,107654],{"class":872},"\"hinge_motor\"",[68,107656,107657],{"class":587}," joint",[68,107659,869],{"class":85},[68,107661,107592],{"class":872},[68,107663,107664],{"class":587}," gear",[68,107666,869],{"class":85},[68,107668,5277],{"class":872},[68,107670,107671],{"class":587}," ctrlrange",[68,107673,869],{"class":85},[68,107675,107676],{"class":872},"\"-2 2\"",[68,107678,107679],{"class":587}," ctrllimited",[68,107681,869],{"class":85},[68,107683,107684],{"class":872},"\"true\"",[68,107686,102718],{"class":85},[68,107688,107689,107691,107693],{"class":70,"line":89},[68,107690,886],{"class":85},[68,107692,107638],{"class":81},[68,107694,876],{"class":85},[19,107696,107697,107700,107701,29978],{},[65,107698,107699],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[65,107702,107703],{},"[-2, 2]",[43,107705,107707],{"id":107706},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107709,107710],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[120,107712,107713,107723],{},[123,107714,107715],{},[126,107716,107717,107719,107721],{},[129,107718,27347],{"align":131},[129,107720,135],{"align":131},[129,107722,102308],{"align":131},[137,107724,107725,107735],{},[126,107726,107727,107729,107732],{},[142,107728,104529],{"align":131},[142,107730,107731],{"align":131},"定义能怎么动",[142,107733,107734],{"align":131},"门轴允许门旋转",[126,107736,107737,107739,107742],{},[142,107738,107638],{"align":131},[142,107740,107741],{"align":131},"定义怎么施力或控制",[142,107743,107744],{"align":131},"人推门、马达带动门",[19,107746,107747,107748,107750],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[65,107749,102650],{}," 主动控制它。",[19,107752,107753],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[43,107755,107757],{"id":107756},"hinge-joint","hinge joint",[58,107759,107761],{"className":54652,"code":107760,"language":54654,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[65,107762,107763],{"__ignoreMap":63},[68,107764,107765,107767,107769,107771,107773,107775,107777,107779,107781,107783,107785,107787,107790,107792,107795],{"class":70,"line":71},[68,107766,861],{"class":85},[68,107768,104529],{"class":81},[68,107770,16516],{"class":587},[68,107772,869],{"class":85},[68,107774,107592],{"class":872},[68,107776,55408],{"class":587},[68,107778,869],{"class":85},[68,107780,107592],{"class":872},[68,107782,107601],{"class":587},[68,107784,869],{"class":85},[68,107786,107606],{"class":872},[68,107788,107789],{"class":587}," damping",[68,107791,869],{"class":85},[68,107793,107794],{"class":872},"\"0.1\"",[68,107796,102718],{"class":85},[19,107798,107799],{},"含义：",[48,107801,107802,107808,107814],{},[51,107803,107804,107807],{},[65,107805,107806],{},"type=\"hinge\"","：只能绕一个轴旋转。",[51,107809,107810,107813],{},[65,107811,107812],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[51,107815,107816,107819],{},[65,107817,107818],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[43,107821,107823],{"id":107822},"motor-actuator","motor actuator",[58,107825,107827],{"className":54652,"code":107826,"language":54654,"meta":63,"style":63},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[65,107828,107829],{"__ignoreMap":63},[68,107830,107831,107833,107835,107837,107839,107841,107843,107845,107847,107849,107851,107853,107855,107857,107859,107861,107863,107865],{"class":70,"line":71},[68,107832,861],{"class":85},[68,107834,107647],{"class":81},[68,107836,16516],{"class":587},[68,107838,869],{"class":85},[68,107840,107654],{"class":872},[68,107842,107657],{"class":587},[68,107844,869],{"class":85},[68,107846,107592],{"class":872},[68,107848,107664],{"class":587},[68,107850,869],{"class":85},[68,107852,5277],{"class":872},[68,107854,107671],{"class":587},[68,107856,869],{"class":85},[68,107858,107676],{"class":872},[68,107860,107679],{"class":587},[68,107862,869],{"class":85},[68,107864,107684],{"class":872},[68,107866,102718],{"class":85},[19,107868,107799],{},[48,107870,107871,107880,107886,107892],{},[51,107872,107873,107876,107877,107879],{},[65,107874,107875],{},"joint=\"hinge\"","：这个电机作用在名为 ",[65,107878,107413],{}," 的关节上。",[51,107881,107882,107885],{},[65,107883,107884],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[51,107887,107888,107891],{},[65,107889,107890],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[51,107893,107894,107897],{},[65,107895,107896],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107899,107900],{},"简单理解：",[58,107902,107905],{"className":107903,"code":107904,"language":6786,"meta":63},[6784],"实际施加效果 ≈ data.ctrl[0] * gear\n",[65,107906,107904],{"__ignoreMap":63},[19,107908,107909],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107911,102827],{"id":102826},[58,107913,107915],{"className":31971,"code":107914,"language":31973,"meta":63,"style":63},"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",[65,107916,107917,107924,107928,107934,107944,107948,107952,107960,107965,107970,107974,107978,107983,107988,107992,107997,108002,108007,108012,108016,108020,108024,108029,108034,108039,108043,108047,108051,108055,108067,108079,108087,108091,108101,108111,108121,108125,108138,108151,108155,108172,108186,108221,108225,108229,108240,108255,108270,108282,108286,108290,108302],{"__ignoreMap":63},[68,107918,107919,107921],{"class":70,"line":71},[68,107920,31985],{"class":102},[68,107922,107923],{"class":85}," math\n",[68,107925,107926],{"class":70,"line":78},[68,107927,4000],{"emptyLinePlaceholder":1679},[68,107929,107930,107932],{"class":70,"line":89},[68,107931,31985],{"class":102},[68,107933,102875],{"class":85},[68,107935,107936,107938,107940,107942],{"class":70,"line":115},[68,107937,31985],{"class":102},[68,107939,32973],{"class":85},[68,107941,32976],{"class":102},[68,107943,32979],{"class":85},[68,107945,107946],{"class":70,"line":280},[68,107947,4000],{"emptyLinePlaceholder":1679},[68,107949,107950],{"class":70,"line":301},[68,107951,4000],{"emptyLinePlaceholder":1679},[68,107953,107954,107956,107958],{"class":70,"line":320},[68,107955,102888],{"class":92},[68,107957,15161],{"class":102},[68,107959,102893],{"class":872},[68,107961,107962],{"class":70,"line":2915},[68,107963,107964],{"class":872},"\u003Cmujoco model=\"one_link_motor\">\n",[68,107966,107967],{"class":70,"line":2921},[68,107968,107969],{"class":872},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[68,107971,107972],{"class":70,"line":2933},[68,107973,4000],{"emptyLinePlaceholder":1679},[68,107975,107976],{"class":70,"line":3214},[68,107977,102912],{"class":872},[68,107979,107980],{"class":70,"line":3219},[68,107981,107982],{"class":872},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[68,107984,107985],{"class":70,"line":3225},[68,107986,107987],{"class":872},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[68,107989,107990],{"class":70,"line":3230},[68,107991,4000],{"emptyLinePlaceholder":1679},[68,107993,107994],{"class":70,"line":3244},[68,107995,107996],{"class":872},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[68,107998,107999],{"class":70,"line":3249},[68,108000,108001],{"class":872},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,108003,108004],{"class":70,"line":3255},[68,108005,108006],{"class":872},"        \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",[68,108008,108009],{"class":70,"line":3276},[68,108010,108011],{"class":872},"      \u003C\u002Fbody>\n",[68,108013,108014],{"class":70,"line":3281},[68,108015,102941],{"class":872},[68,108017,108018],{"class":70,"line":3295},[68,108019,102946],{"class":872},[68,108021,108022],{"class":70,"line":3300},[68,108023,4000],{"emptyLinePlaceholder":1679},[68,108025,108026],{"class":70,"line":3329},[68,108027,108028],{"class":872},"  \u003Cactuator>\n",[68,108030,108031],{"class":70,"line":3334},[68,108032,108033],{"class":872},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[68,108035,108036],{"class":70,"line":3351},[68,108037,108038],{"class":872},"  \u003C\u002Factuator>\n",[68,108040,108041],{"class":70,"line":3356},[68,108042,102951],{"class":872},[68,108044,108045],{"class":70,"line":3361},[68,108046,97273],{"class":872},[68,108048,108049],{"class":70,"line":3366},[68,108050,4000],{"emptyLinePlaceholder":1679},[68,108052,108053],{"class":70,"line":3380},[68,108054,4000],{"emptyLinePlaceholder":1679},[68,108056,108057,108059,108061,108063,108065],{"class":70,"line":3385},[68,108058,33540],{"class":102},[68,108060,3574],{"class":587},[68,108062,102972],{"class":85},[68,108064,97261],{"class":92},[68,108066,5338],{"class":85},[68,108068,108069,108071,108073,108075,108077],{"class":70,"line":4177},[68,108070,102981],{"class":85},[68,108072,869],{"class":102},[68,108074,102986],{"class":85},[68,108076,102888],{"class":92},[68,108078,1757],{"class":85},[68,108080,108081,108083,108085],{"class":70,"line":4191},[68,108082,102995],{"class":85},[68,108084,869],{"class":102},[68,108086,103000],{"class":85},[68,108088,108089],{"class":70,"line":4199},[68,108090,4000],{"emptyLinePlaceholder":1679},[68,108092,108093,108095,108097,108099],{"class":70,"line":4204},[68,108094,32892],{"class":92},[68,108096,997],{"class":85},[68,108098,103013],{"class":872},[68,108100,103016],{"class":85},[68,108102,108103,108105,108107,108109],{"class":70,"line":4210},[68,108104,32892],{"class":92},[68,108106,997],{"class":85},[68,108108,103025],{"class":872},[68,108110,103028],{"class":85},[68,108112,108113,108115,108117,108119],{"class":70,"line":4216},[68,108114,32892],{"class":92},[68,108116,997],{"class":85},[68,108118,103037],{"class":872},[68,108120,103040],{"class":85},[68,108122,108123],{"class":70,"line":4221},[68,108124,4000],{"emptyLinePlaceholder":1679},[68,108126,108127,108129,108132,108134,108136],{"class":70,"line":9547},[68,108128,4700],{"class":102},[68,108130,108131],{"class":85}," model.nu ",[68,108133,22543],{"class":102},[68,108135,1112],{"class":92},[68,108137,5338],{"class":85},[68,108139,108140,108142,108144,108146,108149],{"class":70,"line":9571},[68,108141,105005],{"class":102},[68,108143,105008],{"class":92},[68,108145,997],{"class":85},[68,108147,108148],{"class":872},"\"expected exactly one actuator\"",[68,108150,1757],{"class":85},[68,108152,108153],{"class":70,"line":9576},[68,108154,4000],{"emptyLinePlaceholder":1679},[68,108156,108157,108159,108161,108163,108165,108167,108170],{"class":70,"line":9582},[68,108158,4800],{"class":102},[68,108160,33209],{"class":85},[68,108162,27637],{"class":102},[68,108164,34036],{"class":92},[68,108166,997],{"class":85},[68,108168,108169],{"class":92},"2000",[68,108171,32379],{"class":85},[68,108173,108174,108177,108179,108181,108183],{"class":70,"line":9609},[68,108175,108176],{"class":85},"        t ",[68,108178,869],{"class":102},[68,108180,33209],{"class":85},[68,108182,2191],{"class":102},[68,108184,108185],{"class":85}," model.opt.timestep\n",[68,108187,108188,108191,108193,108195,108197,108200,108202,108205,108207,108209,108212,108214,108216,108218],{"class":70,"line":9614},[68,108189,108190],{"class":85},"        data.ctrl[",[68,108192,600],{"class":92},[68,108194,6042],{"class":85},[68,108196,869],{"class":102},[68,108198,108199],{"class":92}," 1.5",[68,108201,8117],{"class":102},[68,108203,108204],{"class":85}," math.sin(",[68,108206,106833],{"class":92},[68,108208,8117],{"class":102},[68,108210,108211],{"class":85}," math.pi ",[68,108213,2191],{"class":102},[68,108215,63451],{"class":92},[68,108217,8117],{"class":102},[68,108219,108220],{"class":85}," t)\n",[68,108222,108223],{"class":70,"line":9620},[68,108224,103090],{"class":85},[68,108226,108227],{"class":70,"line":9632},[68,108228,4000],{"emptyLinePlaceholder":1679},[68,108230,108231,108233,108235,108238],{"class":70,"line":9644},[68,108232,32892],{"class":92},[68,108234,997],{"class":85},[68,108236,108237],{"class":872},"\"time:\"",[68,108239,103052],{"class":85},[68,108241,108242,108244,108246,108249,108251,108253],{"class":70,"line":9656},[68,108243,32892],{"class":92},[68,108245,997],{"class":85},[68,108247,108248],{"class":872},"\"joint qpos:\"",[68,108250,106503],{"class":85},[68,108252,2029],{"class":92},[68,108254,32090],{"class":85},[68,108256,108257,108259,108261,108264,108266,108268],{"class":70,"line":11314},[68,108258,32892],{"class":92},[68,108260,997],{"class":85},[68,108262,108263],{"class":872},"\"joint qvel:\"",[68,108265,106519],{"class":85},[68,108267,2029],{"class":92},[68,108269,32090],{"class":85},[68,108271,108272,108274,108276,108279],{"class":70,"line":11339},[68,108273,32892],{"class":92},[68,108275,997],{"class":85},[68,108277,108278],{"class":872},"\"last ctrl:\"",[68,108280,108281],{"class":85},", data.ctrl.copy())\n",[68,108283,108284],{"class":70,"line":11362},[68,108285,4000],{"emptyLinePlaceholder":1679},[68,108287,108288],{"class":70,"line":11386},[68,108289,4000],{"emptyLinePlaceholder":1679},[68,108291,108292,108294,108296,108298,108300],{"class":70,"line":11391},[68,108293,3134],{"class":102},[68,108295,32813],{"class":92},[68,108297,103133],{"class":102},[68,108299,103136],{"class":872},[68,108301,5338],{"class":85},[68,108303,108304],{"class":70,"line":11396},[68,108305,103143],{"class":85},[19,108307,105143],{},[58,108309,108311],{"className":25416,"code":108310,"language":25418,"meta":63,"style":63},"touch ch4_joint_motor.py\n",[65,108312,108313],{"__ignoreMap":63},[68,108314,108315,108317],{"class":70,"line":71},[68,108316,102857],{"class":587},[68,108318,108319],{"class":872}," ch4_joint_motor.py\n",[19,108321,103875],{},[58,108323,108325],{"className":25416,"code":108324,"language":25418,"meta":63,"style":63},"python ch4_joint_motor.py\n",[65,108326,108327],{"__ignoreMap":63},[68,108328,108329,108331],{"class":70,"line":71},[68,108330,31973],{"class":587},[68,108332,108319],{"class":872},[43,108334,103146],{"id":103146},[19,108336,108337],{},"检查 actuator 数量：",[58,108339,108341],{"className":31971,"code":108340,"language":31973,"meta":63,"style":63},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[65,108342,108343,108355],{"__ignoreMap":63},[68,108344,108345,108347,108349,108351,108353],{"class":70,"line":71},[68,108346,3134],{"class":102},[68,108348,108131],{"class":85},[68,108350,22543],{"class":102},[68,108352,1112],{"class":92},[68,108354,5338],{"class":85},[68,108356,108357,108359,108361,108363,108365],{"class":70,"line":78},[68,108358,105468],{"class":102},[68,108360,105008],{"class":92},[68,108362,997],{"class":85},[68,108364,108148],{"class":872},[68,108366,1757],{"class":85},[19,108368,108369,108371,108372,108374],{},[65,108370,103732],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[65,108373,102650],{}," 长度应该是 1。",[19,108376,108377],{},"产生正弦控制信号：",[58,108379,108381],{"className":31971,"code":108380,"language":31973,"meta":63,"style":63},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[65,108382,108383],{"__ignoreMap":63},[68,108384,108385,108387,108389,108391,108393,108395,108397,108399,108401,108403,108405,108407,108409,108411],{"class":70,"line":71},[68,108386,107444],{"class":85},[68,108388,600],{"class":92},[68,108390,6042],{"class":85},[68,108392,869],{"class":102},[68,108394,108199],{"class":92},[68,108396,8117],{"class":102},[68,108398,108204],{"class":85},[68,108400,106833],{"class":92},[68,108402,8117],{"class":102},[68,108404,108211],{"class":85},[68,108406,2191],{"class":102},[68,108408,63451],{"class":92},[68,108410,8117],{"class":102},[68,108412,108220],{"class":85},[19,108414,108415],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108417,103247],{},[58,108419,108420],{"className":31971,"code":106078,"language":31973,"meta":63,"style":63},[65,108421,108422],{"__ignoreMap":63},[68,108423,108424],{"class":70,"line":71},[68,108425,106078],{"class":85},[19,108427,108428],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[43,108430,103282],{"id":103282},[58,108432,108434],{"className":31971,"code":108433,"language":31973,"meta":63,"style":63},"import math\n",[65,108435,108436],{"__ignoreMap":63},[68,108437,108438,108440],{"class":70,"line":71},[68,108439,31985],{"class":102},[68,108441,107923],{"class":85},[19,108443,108444,108445,102592,108448,108451],{},"导入 Python 标准库里的数学模块。后面要用 ",[65,108446,108447],{},"math.sin",[65,108449,108450],{},"math.pi"," 生成周期变化的控制信号。",[58,108453,108454],{"className":31971,"code":105259,"language":31973,"meta":63,"style":63},[65,108455,108456,108462],{"__ignoreMap":63},[68,108457,108458,108460],{"class":70,"line":71},[68,108459,31985],{"class":102},[68,108461,102875],{"class":85},[68,108463,108464,108466,108468,108470],{"class":70,"line":78},[68,108465,31985],{"class":102},[68,108467,32973],{"class":85},[68,108469,32976],{"class":102},[68,108471,32979],{"class":85},[19,108473,108474],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[58,108476,108477],{"className":54652,"code":107760,"language":54654,"meta":63,"style":63},[65,108478,108479],{"__ignoreMap":63},[68,108480,108481,108483,108485,108487,108489,108491,108493,108495,108497,108499,108501,108503,108505,108507,108509],{"class":70,"line":71},[68,108482,861],{"class":85},[68,108484,104529],{"class":81},[68,108486,16516],{"class":587},[68,108488,869],{"class":85},[68,108490,107592],{"class":872},[68,108492,55408],{"class":587},[68,108494,869],{"class":85},[68,108496,107592],{"class":872},[68,108498,107601],{"class":587},[68,108500,869],{"class":85},[68,108502,107606],{"class":872},[68,108504,107789],{"class":587},[68,108506,869],{"class":85},[68,108508,107794],{"class":872},[68,108510,102718],{"class":85},[19,108512,108513,108514,108516,108517,108519,108520,108522],{},"这行定义关节。",[65,108515,107413],{}," 表示旋转关节。",[65,108518,107812],{}," 表示绕 y 轴旋转。",[65,108521,107818],{}," 表示有一点阻尼，运动不会完全无损耗。",[58,108524,108526],{"className":54652,"code":108525,"language":54654,"meta":63,"style":63},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[65,108527,108528],{"__ignoreMap":63},[68,108529,108530,108532,108534,108536,108538,108541,108543,108545,108548,108551,108553,108556,108558,108560,108562,108564,108566,108569],{"class":70,"line":71},[68,108531,861],{"class":85},[68,108533,102694],{"class":81},[68,108535,16516],{"class":587},[68,108537,869],{"class":85},[68,108539,108540],{"class":872},"\"link_geom\"",[68,108542,55408],{"class":587},[68,108544,869],{"class":85},[68,108546,108547],{"class":872},"\"capsule\"",[68,108549,108550],{"class":587}," fromto",[68,108552,869],{"class":85},[68,108554,108555],{"class":872},"\"0 0 0 0 0 0.5\"",[68,108557,102710],{"class":587},[68,108559,869],{"class":85},[68,108561,105351],{"class":872},[68,108563,103575],{"class":587},[68,108565,869],{"class":85},[68,108567,108568],{"class":872},"\"0.5\"",[68,108570,102718],{"class":85},[19,108572,108573,108574,108576,108577,108579,108580,108583,108584,29978,108587,108589],{},"这行定义摆杆的形状。",[65,108575,104738],{}," 是胶囊体，适合表示杆子。",[65,108578,104749],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[65,108581,108582],{},"(0,0,0)"," 延伸到 ",[65,108585,108586],{},"(0,0,0.5)",[65,108588,104743],{}," 是半径。",[58,108591,108592],{"className":54652,"code":107826,"language":54654,"meta":63,"style":63},[65,108593,108594],{"__ignoreMap":63},[68,108595,108596,108598,108600,108602,108604,108606,108608,108610,108612,108614,108616,108618,108620,108622,108624,108626,108628,108630],{"class":70,"line":71},[68,108597,861],{"class":85},[68,108599,107647],{"class":81},[68,108601,16516],{"class":587},[68,108603,869],{"class":85},[68,108605,107654],{"class":872},[68,108607,107657],{"class":587},[68,108609,869],{"class":85},[68,108611,107592],{"class":872},[68,108613,107664],{"class":587},[68,108615,869],{"class":85},[68,108617,5277],{"class":872},[68,108619,107671],{"class":587},[68,108621,869],{"class":85},[68,108623,107676],{"class":872},[68,108625,107679],{"class":587},[68,108627,869],{"class":85},[68,108629,107684],{"class":872},[68,108631,102718],{"class":85},[19,108633,108634,108635,108637,108638,108641,108642,108644],{},"这行定义电机。它作用在 ",[65,108636,107413],{}," 关节上。",[65,108639,108640],{},"gear"," 可以理解成放大倍数。",[65,108643,107428],{}," 限制控制输入范围。",[58,108646,108647],{"className":31971,"code":108340,"language":31973,"meta":63,"style":63},[65,108648,108649,108661],{"__ignoreMap":63},[68,108650,108651,108653,108655,108657,108659],{"class":70,"line":71},[68,108652,3134],{"class":102},[68,108654,108131],{"class":85},[68,108656,22543],{"class":102},[68,108658,1112],{"class":92},[68,108660,5338],{"class":85},[68,108662,108663,108665,108667,108669,108671],{"class":70,"line":78},[68,108664,105468],{"class":102},[68,108666,105008],{"class":92},[68,108668,997],{"class":85},[68,108670,108148],{"class":872},[68,108672,1757],{"class":85},[19,108674,108675,108677],{},[65,108676,103732],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[58,108679,108681],{"className":31971,"code":108680,"language":31973,"meta":63,"style":63},"for step in range(2000):\n",[65,108682,108683],{"__ignoreMap":63},[68,108684,108685,108687,108689,108691,108693,108695,108697],{"class":70,"line":71},[68,108686,4624],{"class":102},[68,108688,33209],{"class":85},[68,108690,27637],{"class":102},[68,108692,34036],{"class":92},[68,108694,997],{"class":85},[68,108696,108169],{"class":92},[68,108698,32379],{"class":85},[19,108700,108701,108702,108704,108705,108708],{},"循环 2000 步。这里没有用 ",[65,108703,2727],{},"，而是用 ",[65,108706,108707],{},"step","，因为后面要用当前步数计算时间。",[58,108710,108712],{"className":31971,"code":108711,"language":31973,"meta":63,"style":63},"t = step * model.opt.timestep\n",[65,108713,108714],{"__ignoreMap":63},[68,108715,108716,108719,108721,108723,108725],{"class":70,"line":71},[68,108717,108718],{"class":85},"t ",[68,108720,869],{"class":102},[68,108722,33209],{"class":85},[68,108724,2191],{"class":102},[68,108726,108185],{"class":85},[19,108728,108729],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[58,108731,108732],{"className":31971,"code":108380,"language":31973,"meta":63,"style":63},[65,108733,108734],{"__ignoreMap":63},[68,108735,108736,108738,108740,108742,108744,108746,108748,108750,108752,108754,108756,108758,108760,108762],{"class":70,"line":71},[68,108737,107444],{"class":85},[68,108739,600],{"class":92},[68,108741,6042],{"class":85},[68,108743,869],{"class":102},[68,108745,108199],{"class":92},[68,108747,8117],{"class":102},[68,108749,108204],{"class":85},[68,108751,106833],{"class":92},[68,108753,8117],{"class":102},[68,108755,108211],{"class":85},[68,108757,2191],{"class":102},[68,108759,63451],{"class":92},[68,108761,8117],{"class":102},[68,108763,108220],{"class":85},[19,108765,108766],{},"这行给电机输入一个正弦波。拆开看：",[48,108768,108769,108775,108781],{},[51,108770,108771,108774],{},[65,108772,108773],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[51,108776,108777,108780],{},[65,108778,108779],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[51,108782,108783,108786],{},[65,108784,108785],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108788,108789],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[58,108791,108793],{"className":31971,"code":108792,"language":31973,"meta":63,"style":63},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[65,108794,108795],{"__ignoreMap":63},[68,108796,108797,108799,108801,108803,108805,108807],{"class":70,"line":71},[68,108798,32008],{"class":92},[68,108800,997],{"class":85},[68,108802,108248],{"class":872},[68,108804,106503],{"class":85},[68,108806,2029],{"class":92},[68,108808,32090],{"class":85},[19,108810,108811,108812,108814],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[65,108813,102644],{}," 只有一个数。",[14,108816,103890],{"id":103889},[19,108818,108819],{},"输出类似:",[58,108821,108824],{"className":108822,"code":108823,"language":6786,"meta":63},[6784],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[65,108825,108823],{"__ignoreMap":63},[19,108827,108828,108829,108831],{},"这里 ",[65,108830,107699],{}," 是电机输入。",[19,108833,108834,108837,108838,108841],{},[65,108835,108836],{},"joint qpos"," 是关节角度，单位通常是弧度。",[65,108839,108840],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108843,108844],{},"角度单位提示：",[58,108846,108849],{"className":108847,"code":108848,"language":6786,"meta":63},[6784],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[65,108850,108848],{"__ignoreMap":63},[19,108852,108853,108854,108856,108857,108859],{},"如果你看到 ",[65,108855,105603],{}," 是 ",[65,108858,36922],{},"，大约就是 28.6 度。",[14,108861,103922],{"id":103921},[48,108863,108864,108871,108874,108881,108884,108892,108900],{},[51,108865,103985,108866,103988,108868,29978],{},[65,108867,107884],{},[65,108869,108870],{},"gear=\"5\"",[51,108872,108873],{},"重新运行，观察关节运动是否更剧烈。",[51,108875,103985,108876,103988,108878,29978],{},[65,108877,107428],{},[65,108879,108880],{},"-0.2 0.2",[51,108882,108883],{},"重新运行，观察控制能力是否变弱。",[51,108885,108886,108887,108889,108890,29978],{},"去掉 actuator，确认 ",[65,108888,103732],{}," 变成 ",[65,108891,600],{},[51,108893,103985,108894,103988,108896,108899],{},[65,108895,107818],{},[65,108897,108898],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[51,108901,103985,108902,103988,108904,108907],{},[65,108903,107812],{},[65,108905,108906],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108909,104027],{"id":104026},[43,108911,108913],{"id":108912},"indexerror-index-0-is-out-of-bounds",[65,108914,108915],{},"IndexError: index 0 is out of bounds",[19,108917,108918,108919,108921],{},"原因是 ",[65,108920,107565],{},"，没有 actuator。",[43,108923,108924],{"id":108924},"关节几乎不动",[19,108926,108927],{},"可能原因:",[48,108929,108930,108935,108939,108945],{},[51,108931,108932,108934],{},[65,108933,108640],{}," 太小",[51,108936,108937,108934],{},[65,108938,107428],{},[51,108940,108941,108944],{},[65,108942,108943],{},"damping"," 太大",[51,108946,108947],{},"重力方向导致运动不明显",[43,108949,108950],{"id":108950},"模型编译失败",[19,108952,108953,108954,108956],{},"检查 actuator 引用的 ",[65,108955,107875],{}," 是否存在，joint 名称是否拼写一致。",[43,108958,108960,108962],{"id":108959},"datactrl0-写了但没有效果",[65,108961,107699],{}," 写了但没有效果",[19,108964,104149],{},[48,108966,108967,108972,108975,108980,108985],{},[51,108968,108969,108971],{},[65,108970,103732],{}," 是否大于 0。",[51,108973,108974],{},"motor 是否引用了正确 joint。",[51,108976,108977,108979],{},[65,108978,108640],{}," 是否太小。",[51,108981,108982,108984],{},[65,108983,107428],{}," 是否把输入限制得太小。",[51,108986,108987],{},"body 是否真的有可动 joint。",[43,108989,108990],{"id":108990},"控制输入超过范围会怎样",[19,108992,108993],{},"如果设置了：",[58,108995,108997],{"className":54652,"code":108996,"language":54654,"meta":63,"style":63},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[65,108998,108999],{"__ignoreMap":63},[68,109000,109001],{"class":70,"line":71},[68,109002,108996],{"class":85},[19,109004,109005],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[58,109007,109009],{"className":31971,"code":109008,"language":31973,"meta":63,"style":63},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[65,109010,109011,109031],{"__ignoreMap":63},[68,109012,109013,109016,109018,109021,109023,109025,109027,109029],{"class":70,"line":71},[68,109014,109015],{"class":85},"action ",[68,109017,869],{"class":102},[68,109019,109020],{"class":85}," np.clip(action, ",[68,109022,2268],{"class":102},[68,109024,106833],{"class":92},[68,109026,1002],{"class":85},[68,109028,106833],{"class":92},[68,109030,1757],{"class":85},[68,109032,109033,109035,109037,109039,109041],{"class":70,"line":78},[68,109034,107444],{"class":85},[68,109036,600],{"class":92},[68,109038,6042],{"class":85},[68,109040,869],{"class":102},[68,109042,109043],{"class":85}," action\n",[14,109045,104181],{"id":104180},[19,109047,109048],{},"这一章建立了控制任务的基本形式：",[58,109050,109053],{"className":109051,"code":109052,"language":6786,"meta":63},[6784],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[65,109054,109052],{"__ignoreMap":63},[19,109056,109057],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1652,109059,109060],{},"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":63,"searchDepth":78,"depth":78,"links":109062},[109063,109064,109065,109070,109074,109075,109076,109084],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":109066},[109067,109068,109069],{"id":107706,"depth":89,"text":107707},{"id":107756,"depth":89,"text":107757},{"id":107822,"depth":89,"text":107823},{"id":102826,"depth":78,"text":102827,"children":109071},[109072,109073],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":109077},[109078,109079,109080,109081,109083],{"id":108912,"depth":89,"text":108915},{"id":108924,"depth":89,"text":108924},{"id":108950,"depth":89,"text":108950},{"id":108959,"depth":89,"text":109082},"data.ctrl[0] 写了但没有效果",{"id":108990,"depth":89,"text":108990},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107394,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109091,"title":109092,"body":109093,"description":63,"extension":1677,"meta":111002,"navigation":1679,"path":111003,"seo":111004,"stem":111005,"__hash__":111006},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109094,"toc":110978},[109095,109098,109100,109103,109111,109114,109131,109134,109159,109162,109208,109210,109212,109267,109269,109288,109290,109333,109336,109353,109356,109372,109382,109389,109391,109394,109397,109431,109434,109482,109486,109489,109503,109512,109516,109519,109544,109547,109551,109564,109567,109573,109576,109591,109593,109596,109856,109858,109870,109873,110185,110187,110199,110201,110204,110219,110224,110227,110249,110252,110255,110289,110292,110296,110307,110310,110327,110330,110344,110351,110371,110378,110392,110395,110407,110422,110442,110445,110467,110470,110474,110489,110500,110515,110518,110548,110564,110593,110601,110625,110628,110646,110656,110668,110675,110684,110690,110699,110702,110704,110713,110716,110731,110733,110736,110747,110750,110761,110764,110782,110784,110801,110804,110832,110834,110838,110841,110871,110877,110880,110884,110892,110895,110897,110918,110921,110924,110940,110943,110959,110961,110964,110975],[10,109096,109092],{"id":109097},"_5viewer-可视化与-renderer-离屏渲染",[14,109099,102221],{"id":102220},[19,109101,109102],{},"本章掌握两类可视化方式:",[48,109104,109105,109108],{},[51,109106,109107],{},"交互式 viewer: 适合人工观察仿真",[51,109109,109110],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109112,109113],{},"使用官方接口:",[58,109115,109117],{"className":31971,"code":109116,"language":31973,"meta":63,"style":63},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[65,109118,109119,109126],{"__ignoreMap":63},[68,109120,109121,109123],{"class":70,"line":71},[68,109122,31985],{"class":102},[68,109124,109125],{"class":85}," mujoco.viewer\n",[68,109127,109128],{"class":70,"line":78},[68,109129,109130],{"class":85},"mujoco.viewer.launch_passive(model, data)\n",[19,109132,109133],{},"以及:",[58,109135,109137],{"className":31971,"code":109136,"language":31973,"meta":63,"style":63},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[65,109138,109139,109149],{"__ignoreMap":63},[68,109140,109141,109144,109146],{"class":70,"line":71},[68,109142,109143],{"class":85},"renderer ",[68,109145,869],{"class":102},[68,109147,109148],{"class":85}," mujoco.Renderer(model)\n",[68,109150,109151,109154,109156],{"class":70,"line":78},[68,109152,109153],{"class":85},"image ",[68,109155,869],{"class":102},[68,109157,109158],{"class":85}," renderer.render()\n",[19,109160,109161],{},"新手建议先理解二者区别：",[120,109163,109164,109180],{},[123,109165,109166],{},[126,109167,109168,109171,109174,109177],{},[129,109169,109170],{"align":131},"工具",[129,109172,109173],{"align":131},"用途",[129,109175,109176],{"align":131},"是否打开窗口",[129,109178,109179],{"align":131},"常见场景",[137,109181,109182,109195],{},[126,109183,109184,109187,109190,109192],{},[142,109185,109186],{"align":131},"Viewer",[142,109188,109189],{"align":131},"人眼实时观察仿真",[142,109191,106238],{"align":131},[142,109193,109194],{"align":131},"调试模型、看控制效果",[126,109196,109197,109200,109203,109205],{},[142,109198,109199],{"align":131},"Renderer",[142,109201,109202],{"align":131},"生成图像数组",[142,109204,106251],{"align":131},[142,109206,109207],{"align":131},"保存图片、训练视觉策略、服务器批量采集",[14,109209,102344],{"id":102343},[19,109211,102347],{},[58,109213,109215],{"className":25416,"code":109214,"language":25418,"meta":63,"style":63},"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",[65,109216,109217,109229,109239,109247,109255],{"__ignoreMap":63},[68,109218,109219,109221,109223,109225,109227],{"class":70,"line":71},[68,109220,26171],{"class":587},[68,109222,27909],{"class":872},[68,109224,25428],{"class":872},[68,109226,27994],{"class":92},[68,109228,26273],{"class":92},[68,109230,109231,109233,109235,109237],{"class":70,"line":78},[68,109232,102382],{"class":872},[68,109234,102385],{"class":872},[68,109236,102388],{"class":872},[68,109238,26273],{"class":92},[68,109240,109241,109243,109245],{"class":70,"line":89},[68,109242,102395],{"class":872},[68,109244,102398],{"class":872},[68,109246,26273],{"class":92},[68,109248,109249,109251,109253],{"class":70,"line":115},[68,109250,102405],{"class":872},[68,109252,102408],{"class":872},[68,109254,26273],{"class":92},[68,109256,109257,109259,109261,109263,109265],{"class":70,"line":280},[68,109258,102415],{"class":872},[68,109260,102418],{"class":872},[68,109262,102421],{"class":872},[68,109264,102424],{"class":872},[68,109266,104090],{"class":872},[19,109268,104392],{},[58,109270,109272],{"className":25416,"code":109271,"language":25418,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy pillow\n",[65,109273,109274],{"__ignoreMap":63},[68,109275,109276,109278,109280,109282,109285],{"class":70,"line":71},[68,109277,25425],{"class":587},[68,109279,25428],{"class":872},[68,109281,102504],{"class":872},[68,109283,109284],{"class":872}," numpy",[68,109286,109287],{"class":872}," pillow\n",[19,109289,104409],{},[58,109291,109293],{"className":25416,"code":109292,"language":25418,"meta":63,"style":63},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[65,109294,109295,109312,109321],{"__ignoreMap":63},[68,109296,109297,109299,109301,109303,109306,109308,109310],{"class":70,"line":71},[68,109298,31923],{"class":587},[68,109300,30769],{"class":872},[68,109302,26710],{"class":92},[68,109304,109305],{"class":872}," mujoco-render",[68,109307,102549],{"class":872},[68,109309,102552],{"class":92},[68,109311,102555],{"class":92},[68,109313,109314,109316,109318],{"class":70,"line":78},[68,109315,31923],{"class":587},[68,109317,102562],{"class":872},[68,109319,109320],{"class":872}," mujoco-render\n",[68,109322,109323,109325,109327,109329,109331],{"class":70,"line":89},[68,109324,25425],{"class":587},[68,109326,25428],{"class":872},[68,109328,102504],{"class":872},[68,109330,109284],{"class":872},[68,109332,109287],{"class":872},[19,109334,109335],{},"离屏渲染后端:",[58,109337,109339],{"className":25416,"code":109338,"language":25418,"meta":63,"style":63},"export MUJOCO_GL=egl\n",[65,109340,109341],{"__ignoreMap":63},[68,109342,109343,109345,109348,109350],{"class":70,"line":71},[68,109344,26637],{"class":102},[68,109346,109347],{"class":85}," MUJOCO_GL",[68,109349,869],{"class":102},[68,109351,109352],{"class":85},"egl\n",[19,109354,109355],{},"或:",[58,109357,109359],{"className":25416,"code":109358,"language":25418,"meta":63,"style":63},"export MUJOCO_GL=osmesa\n",[65,109360,109361],{"__ignoreMap":63},[68,109362,109363,109365,109367,109369],{"class":70,"line":71},[68,109364,26637],{"class":102},[68,109366,109347],{"class":85},[68,109368,869],{"class":102},[68,109370,109371],{"class":85},"osmesa\n",[19,109373,109374,109375,109378,109379,29978],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[65,109376,109377],{},"egl"," 失败，再尝试 ",[65,109380,109381],{},"osmesa",[19,109383,109384,109385,109388],{},"如果你在本机桌面环境运行，通常先不要设置 ",[65,109386,109387],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109390,102619],{"id":102618},[19,109392,109393],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109395,109396],{},"典型 viewer 流程:",[58,109398,109400],{"className":31971,"code":109399,"language":31973,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[65,109401,109402,109415,109422,109426],{"__ignoreMap":63},[68,109403,109404,109407,109410,109412],{"class":70,"line":71},[68,109405,109406],{"class":102},"with",[68,109408,109409],{"class":85}," mujoco.viewer.launch_passive(model, data) ",[68,109411,32976],{"class":102},[68,109413,109414],{"class":85}," viewer:\n",[68,109416,109417,109419],{"class":70,"line":78},[68,109418,3851],{"class":102},[68,109420,109421],{"class":85}," viewer.is_running():\n",[68,109423,109424],{"class":70,"line":89},[68,109425,103090],{"class":85},[68,109427,109428],{"class":70,"line":115},[68,109429,109430],{"class":85},"        viewer.sync()\n",[19,109432,109433],{},"典型 renderer 流程:",[58,109435,109437],{"className":31971,"code":109436,"language":31973,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[65,109438,109439,109465,109469,109474],{"__ignoreMap":63},[68,109440,109441,109443,109445,109448,109450,109452,109454,109456,109458,109460,109463],{"class":70,"line":71},[68,109442,109143],{"class":85},[68,109444,869],{"class":102},[68,109446,109447],{"class":85}," mujoco.Renderer(model, ",[68,109449,26576],{"class":6815},[68,109451,869],{"class":102},[68,109453,43935],{"class":92},[68,109455,1002],{"class":85},[68,109457,26572],{"class":6815},[68,109459,869],{"class":102},[68,109461,109462],{"class":92},"640",[68,109464,1757],{"class":85},[68,109466,109467],{"class":70,"line":78},[68,109468,106078],{"class":85},[68,109470,109471],{"class":70,"line":89},[68,109472,109473],{"class":85},"renderer.update_scene(data)\n",[68,109475,109476,109478,109480],{"class":70,"line":115},[68,109477,109153],{"class":85},[68,109479,869],{"class":102},[68,109481,109158],{"class":85},[43,109483,109485],{"id":109484},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109487,109488],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[58,109490,109492],{"className":31971,"code":109491,"language":31973,"meta":63,"style":63},"mujoco.mj_step(model, data)\nviewer.sync()\n",[65,109493,109494,109498],{"__ignoreMap":63},[68,109495,109496],{"class":70,"line":71},[68,109497,106078],{"class":85},[68,109499,109500],{"class":70,"line":78},[68,109501,109502],{"class":85},"viewer.sync()\n",[19,109504,109505,109507,109508,109511],{},[65,109506,102789],{}," 负责算物理，",[65,109509,109510],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[43,109513,109515],{"id":109514},"为什么要-sleep","为什么要 sleep",[19,109517,109518],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[58,109520,109522],{"className":31971,"code":109521,"language":31973,"meta":63,"style":63},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[65,109523,109524],{"__ignoreMap":63},[68,109525,109526,109529,109531,109534,109536,109539,109541],{"class":70,"line":71},[68,109527,109528],{"class":85},"sleep_time ",[68,109530,869],{"class":102},[68,109532,109533],{"class":85}," model.opt.timestep ",[68,109535,2268],{"class":102},[68,109537,109538],{"class":85}," (time.time() ",[68,109540,2268],{"class":102},[68,109542,109543],{"class":85}," step_start)\n",[19,109545,109546],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[43,109548,109550],{"id":109549},"renderer-输出是什么","renderer 输出是什么",[58,109552,109554],{"className":31971,"code":109553,"language":31973,"meta":63,"style":63},"image = renderer.render()\n",[65,109555,109556],{"__ignoreMap":63},[68,109557,109558,109560,109562],{"class":70,"line":71},[68,109559,109153],{"class":85},[68,109561,869],{"class":102},[68,109563,109158],{"class":85},[19,109565,109566],{},"得到的是 NumPy 数组，形状通常是：",[58,109568,109571],{"className":109569,"code":109570,"language":6786,"meta":63},[6784],"(height, width, 3)\n",[65,109572,109570],{"__ignoreMap":63},[19,109574,109575],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[58,109577,109579],{"className":31971,"code":109578,"language":31973,"meta":63,"style":63},"Image.fromarray(image).save(\"render_output.png\")\n",[65,109580,109581],{"__ignoreMap":63},[68,109582,109583,109586,109589],{"class":70,"line":71},[68,109584,109585],{"class":85},"Image.fromarray(image).save(",[68,109587,109588],{"class":872},"\"render_output.png\"",[68,109590,1757],{"class":85},[14,109592,102827],{"id":102826},[19,109594,109595],{},"交互式 Viewer:",[58,109597,109599],{"className":31971,"code":109598,"language":31973,"meta":63,"style":63},"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",[65,109600,109601,109607,109611,109617,109623,109627,109631,109639,109644,109648,109652,109656,109661,109666,109670,109674,109678,109683,109687,109691,109695,109699,109703,109707,109719,109731,109739,109743,109753,109773,109783,109788,109793,109797,109814,109827,109832,109836,109840,109852],{"__ignoreMap":63},[68,109602,109603,109605],{"class":70,"line":71},[68,109604,31985],{"class":102},[68,109606,33422],{"class":85},[68,109608,109609],{"class":70,"line":78},[68,109610,4000],{"emptyLinePlaceholder":1679},[68,109612,109613,109615],{"class":70,"line":89},[68,109614,31985],{"class":102},[68,109616,102875],{"class":85},[68,109618,109619,109621],{"class":70,"line":115},[68,109620,31985],{"class":102},[68,109622,109125],{"class":85},[68,109624,109625],{"class":70,"line":280},[68,109626,4000],{"emptyLinePlaceholder":1679},[68,109628,109629],{"class":70,"line":301},[68,109630,4000],{"emptyLinePlaceholder":1679},[68,109632,109633,109635,109637],{"class":70,"line":320},[68,109634,102888],{"class":92},[68,109636,15161],{"class":102},[68,109638,102893],{"class":872},[68,109640,109641],{"class":70,"line":2915},[68,109642,109643],{"class":872},"\u003Cmujoco model=\"viewer_demo\">\n",[68,109645,109646],{"class":70,"line":2921},[68,109647,102903],{"class":872},[68,109649,109650],{"class":70,"line":2933},[68,109651,4000],{"emptyLinePlaceholder":1679},[68,109653,109654],{"class":70,"line":3214},[68,109655,102912],{"class":872},[68,109657,109658],{"class":70,"line":3219},[68,109659,109660],{"class":872},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[68,109662,109663],{"class":70,"line":3225},[68,109664,109665],{"class":872},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,109667,109668],{"class":70,"line":3230},[68,109669,4000],{"emptyLinePlaceholder":1679},[68,109671,109672],{"class":70,"line":3244},[68,109673,102926],{"class":872},[68,109675,109676],{"class":70,"line":3249},[68,109677,102931],{"class":872},[68,109679,109680],{"class":70,"line":3255},[68,109681,109682],{"class":872},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,109684,109685],{"class":70,"line":3276},[68,109686,102941],{"class":872},[68,109688,109689],{"class":70,"line":3281},[68,109690,102946],{"class":872},[68,109692,109693],{"class":70,"line":3295},[68,109694,102951],{"class":872},[68,109696,109697],{"class":70,"line":3300},[68,109698,97273],{"class":872},[68,109700,109701],{"class":70,"line":3329},[68,109702,4000],{"emptyLinePlaceholder":1679},[68,109704,109705],{"class":70,"line":3334},[68,109706,4000],{"emptyLinePlaceholder":1679},[68,109708,109709,109711,109713,109715,109717],{"class":70,"line":3351},[68,109710,33540],{"class":102},[68,109712,3574],{"class":587},[68,109714,102972],{"class":85},[68,109716,97261],{"class":92},[68,109718,5338],{"class":85},[68,109720,109721,109723,109725,109727,109729],{"class":70,"line":3356},[68,109722,102981],{"class":85},[68,109724,869],{"class":102},[68,109726,102986],{"class":85},[68,109728,102888],{"class":92},[68,109730,1757],{"class":85},[68,109732,109733,109735,109737],{"class":70,"line":3361},[68,109734,102995],{"class":85},[68,109736,869],{"class":102},[68,109738,103000],{"class":85},[68,109740,109741],{"class":70,"line":3366},[68,109742,4000],{"emptyLinePlaceholder":1679},[68,109744,109745,109747,109749,109751],{"class":70,"line":3380},[68,109746,35771],{"class":102},[68,109748,109409],{"class":85},[68,109750,32976],{"class":102},[68,109752,109414],{"class":85},[68,109754,109755,109758,109761,109763,109766,109768,109771],{"class":70,"line":3385},[68,109756,109757],{"class":102},"        while",[68,109759,109760],{"class":85}," viewer.is_running() ",[68,109762,32055],{"class":102},[68,109764,109765],{"class":85}," data.time ",[68,109767,861],{"class":102},[68,109769,109770],{"class":92}," 5.0",[68,109772,5338],{"class":85},[68,109774,109775,109778,109780],{"class":70,"line":4177},[68,109776,109777],{"class":85},"            step_start ",[68,109779,869],{"class":102},[68,109781,109782],{"class":85}," time.time()\n",[68,109784,109785],{"class":70,"line":4191},[68,109786,109787],{"class":85},"            mujoco.mj_step(model, data)\n",[68,109789,109790],{"class":70,"line":4199},[68,109791,109792],{"class":85},"            viewer.sync()\n",[68,109794,109795],{"class":70,"line":4204},[68,109796,4000],{"emptyLinePlaceholder":1679},[68,109798,109799,109802,109804,109806,109808,109810,109812],{"class":70,"line":4210},[68,109800,109801],{"class":85},"            sleep_time ",[68,109803,869],{"class":102},[68,109805,109533],{"class":85},[68,109807,2268],{"class":102},[68,109809,109538],{"class":85},[68,109811,2268],{"class":102},[68,109813,109543],{"class":85},[68,109815,109816,109818,109821,109823,109825],{"class":70,"line":4216},[68,109817,6241],{"class":102},[68,109819,109820],{"class":85}," sleep_time ",[68,109822,2695],{"class":102},[68,109824,5692],{"class":92},[68,109826,5338],{"class":85},[68,109828,109829],{"class":70,"line":4221},[68,109830,109831],{"class":85},"                time.sleep(sleep_time)\n",[68,109833,109834],{"class":70,"line":9547},[68,109835,4000],{"emptyLinePlaceholder":1679},[68,109837,109838],{"class":70,"line":9571},[68,109839,4000],{"emptyLinePlaceholder":1679},[68,109841,109842,109844,109846,109848,109850],{"class":70,"line":9576},[68,109843,3134],{"class":102},[68,109845,32813],{"class":92},[68,109847,103133],{"class":102},[68,109849,103136],{"class":872},[68,109851,5338],{"class":85},[68,109853,109854],{"class":70,"line":9582},[68,109855,103143],{"class":85},[19,109857,105143],{},[58,109859,109861],{"className":25416,"code":109860,"language":25418,"meta":63,"style":63},"touch ch5_viewer.py\n",[65,109862,109863],{"__ignoreMap":63},[68,109864,109865,109867],{"class":70,"line":71},[68,109866,102857],{"class":587},[68,109868,109869],{"class":872}," ch5_viewer.py\n",[19,109871,109872],{},"离屏 Renderer 保存图片:",[58,109874,109876],{"className":31971,"code":109875,"language":31973,"meta":63,"style":63},"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",[65,109877,109878,109890,109894,109900,109910,109914,109918,109926,109931,109935,109939,109943,109947,109952,109956,109960,109964,109968,109972,109976,109980,109984,109988,109992,109996,110008,110020,110028,110053,110057,110073,110077,110081,110096,110105,110109,110123,110128,110133,110137,110149,110161,110165,110169,110181],{"__ignoreMap":63},[68,109879,109880,109882,109885,109887],{"class":70,"line":71},[68,109881,32330],{"class":102},[68,109883,109884],{"class":85}," pathlib ",[68,109886,31985],{"class":102},[68,109888,109889],{"class":85}," Path\n",[68,109891,109892],{"class":70,"line":78},[68,109893,4000],{"emptyLinePlaceholder":1679},[68,109895,109896,109898],{"class":70,"line":89},[68,109897,31985],{"class":102},[68,109899,102875],{"class":85},[68,109901,109902,109904,109906,109908],{"class":70,"line":115},[68,109903,32330],{"class":102},[68,109905,48856],{"class":92},[68,109907,48859],{"class":102},[68,109909,48862],{"class":85},[68,109911,109912],{"class":70,"line":280},[68,109913,4000],{"emptyLinePlaceholder":1679},[68,109915,109916],{"class":70,"line":301},[68,109917,4000],{"emptyLinePlaceholder":1679},[68,109919,109920,109922,109924],{"class":70,"line":320},[68,109921,102888],{"class":92},[68,109923,15161],{"class":102},[68,109925,102893],{"class":872},[68,109927,109928],{"class":70,"line":2915},[68,109929,109930],{"class":872},"\u003Cmujoco model=\"renderer_demo\">\n",[68,109932,109933],{"class":70,"line":2921},[68,109934,102903],{"class":872},[68,109936,109937],{"class":70,"line":2933},[68,109938,4000],{"emptyLinePlaceholder":1679},[68,109940,109941],{"class":70,"line":3214},[68,109942,102912],{"class":872},[68,109944,109945],{"class":70,"line":3219},[68,109946,109660],{"class":872},[68,109948,109949],{"class":70,"line":3225},[68,109950,109951],{"class":872},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[68,109953,109954],{"class":70,"line":3230},[68,109955,109665],{"class":872},[68,109957,109958],{"class":70,"line":3244},[68,109959,4000],{"emptyLinePlaceholder":1679},[68,109961,109962],{"class":70,"line":3249},[68,109963,102926],{"class":872},[68,109965,109966],{"class":70,"line":3255},[68,109967,102931],{"class":872},[68,109969,109970],{"class":70,"line":3276},[68,109971,109682],{"class":872},[68,109973,109974],{"class":70,"line":3281},[68,109975,102941],{"class":872},[68,109977,109978],{"class":70,"line":3295},[68,109979,102946],{"class":872},[68,109981,109982],{"class":70,"line":3300},[68,109983,102951],{"class":872},[68,109985,109986],{"class":70,"line":3329},[68,109987,97273],{"class":872},[68,109989,109990],{"class":70,"line":3334},[68,109991,4000],{"emptyLinePlaceholder":1679},[68,109993,109994],{"class":70,"line":3351},[68,109995,4000],{"emptyLinePlaceholder":1679},[68,109997,109998,110000,110002,110004,110006],{"class":70,"line":3356},[68,109999,33540],{"class":102},[68,110001,3574],{"class":587},[68,110003,102972],{"class":85},[68,110005,97261],{"class":92},[68,110007,5338],{"class":85},[68,110009,110010,110012,110014,110016,110018],{"class":70,"line":3361},[68,110011,102981],{"class":85},[68,110013,869],{"class":102},[68,110015,102986],{"class":85},[68,110017,102888],{"class":92},[68,110019,1757],{"class":85},[68,110021,110022,110024,110026],{"class":70,"line":3366},[68,110023,102995],{"class":85},[68,110025,869],{"class":102},[68,110027,103000],{"class":85},[68,110029,110030,110033,110035,110037,110039,110041,110043,110045,110047,110049,110051],{"class":70,"line":3380},[68,110031,110032],{"class":85},"    renderer ",[68,110034,869],{"class":102},[68,110036,109447],{"class":85},[68,110038,26576],{"class":6815},[68,110040,869],{"class":102},[68,110042,43935],{"class":92},[68,110044,1002],{"class":85},[68,110046,26572],{"class":6815},[68,110048,869],{"class":102},[68,110050,109462],{"class":92},[68,110052,1757],{"class":85},[68,110054,110055],{"class":70,"line":3385},[68,110056,4000],{"emptyLinePlaceholder":1679},[68,110058,110059,110061,110063,110065,110067,110069,110071],{"class":70,"line":4177},[68,110060,4800],{"class":102},[68,110062,103075],{"class":85},[68,110064,27637],{"class":102},[68,110066,34036],{"class":92},[68,110068,997],{"class":85},[68,110070,2047],{"class":92},[68,110072,32379],{"class":85},[68,110074,110075],{"class":70,"line":4191},[68,110076,103090],{"class":85},[68,110078,110079],{"class":70,"line":4199},[68,110080,4000],{"emptyLinePlaceholder":1679},[68,110082,110083,110086,110089,110091,110094],{"class":70,"line":4204},[68,110084,110085],{"class":85},"    renderer.update_scene(data, ",[68,110087,110088],{"class":6815},"camera",[68,110090,869],{"class":102},[68,110092,110093],{"class":872},"\"fixed_camera\"",[68,110095,1757],{"class":85},[68,110097,110098,110101,110103],{"class":70,"line":4210},[68,110099,110100],{"class":85},"    image ",[68,110102,869],{"class":102},[68,110104,109158],{"class":85},[68,110106,110107],{"class":70,"line":4216},[68,110108,4000],{"emptyLinePlaceholder":1679},[68,110110,110111,110114,110116,110119,110121],{"class":70,"line":4221},[68,110112,110113],{"class":85},"    output_path ",[68,110115,869],{"class":102},[68,110117,110118],{"class":85}," Path(",[68,110120,109588],{"class":872},[68,110122,1757],{"class":85},[68,110124,110125],{"class":70,"line":9547},[68,110126,110127],{"class":85},"    Image.fromarray(image).save(output_path)\n",[68,110129,110130],{"class":70,"line":9571},[68,110131,110132],{"class":85},"    renderer.close()\n",[68,110134,110135],{"class":70,"line":9576},[68,110136,4000],{"emptyLinePlaceholder":1679},[68,110138,110139,110141,110143,110146],{"class":70,"line":9582},[68,110140,32892],{"class":92},[68,110142,997],{"class":85},[68,110144,110145],{"class":872},"\"saved:\"",[68,110147,110148],{"class":85},", output_path.resolve())\n",[68,110150,110151,110153,110155,110158],{"class":70,"line":9609},[68,110152,32892],{"class":92},[68,110154,997],{"class":85},[68,110156,110157],{"class":872},"\"image shape:\"",[68,110159,110160],{"class":85},", image.shape)\n",[68,110162,110163],{"class":70,"line":9614},[68,110164,4000],{"emptyLinePlaceholder":1679},[68,110166,110167],{"class":70,"line":9620},[68,110168,4000],{"emptyLinePlaceholder":1679},[68,110170,110171,110173,110175,110177,110179],{"class":70,"line":9632},[68,110172,3134],{"class":102},[68,110174,32813],{"class":92},[68,110176,103133],{"class":102},[68,110178,103136],{"class":872},[68,110180,5338],{"class":85},[68,110182,110183],{"class":70,"line":9644},[68,110184,103143],{"class":85},[19,110186,105143],{},[58,110188,110190],{"className":25416,"code":110189,"language":25418,"meta":63,"style":63},"touch ch5_renderer.py\n",[65,110191,110192],{"__ignoreMap":63},[68,110193,110194,110196],{"class":70,"line":71},[68,110195,102857],{"class":587},[68,110197,110198],{"class":872}," ch5_renderer.py\n",[43,110200,103146],{"id":103146},[19,110202,110203],{},"viewer 上下文：",[58,110205,110207],{"className":31971,"code":110206,"language":31973,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[65,110208,110209],{"__ignoreMap":63},[68,110210,110211,110213,110215,110217],{"class":70,"line":71},[68,110212,109406],{"class":102},[68,110214,109409],{"class":85},[68,110216,32976],{"class":102},[68,110218,109414],{"class":85},[19,110220,110221,110223],{},[65,110222,109406],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110225,110226],{},"窗口循环：",[58,110228,110230],{"className":31971,"code":110229,"language":31973,"meta":63,"style":63},"while viewer.is_running() and data.time \u003C 5.0:\n",[65,110231,110232],{"__ignoreMap":63},[68,110233,110234,110237,110239,110241,110243,110245,110247],{"class":70,"line":71},[68,110235,110236],{"class":102},"while",[68,110238,109760],{"class":85},[68,110240,32055],{"class":102},[68,110242,109765],{"class":85},[68,110244,861],{"class":102},[68,110246,109770],{"class":92},[68,110248,5338],{"class":85},[19,110250,110251],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110253,110254],{},"固定相机：",[58,110256,110258],{"className":54652,"code":110257,"language":54654,"meta":63,"style":63},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[65,110259,110260],{"__ignoreMap":63},[68,110261,110262,110264,110266,110268,110270,110272,110274,110276,110279,110282,110284,110287],{"class":70,"line":71},[68,110263,861],{"class":85},[68,110265,110088],{"class":81},[68,110267,16516],{"class":587},[68,110269,869],{"class":85},[68,110271,110093],{"class":872},[68,110273,102680],{"class":587},[68,110275,869],{"class":85},[68,110277,110278],{"class":872},"\"1.5 -2.0 1.2\"",[68,110280,110281],{"class":587}," xyaxes",[68,110283,869],{"class":85},[68,110285,110286],{"class":872},"\"1 0.75 0 0 0 1\"",[68,110288,102718],{"class":85},[19,110290,110291],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[43,110293,110295],{"id":110294},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[58,110297,110299],{"className":31971,"code":110298,"language":31973,"meta":63,"style":63},"import time\n",[65,110300,110301],{"__ignoreMap":63},[68,110302,110303,110305],{"class":70,"line":71},[68,110304,31985],{"class":102},[68,110306,33422],{"class":85},[19,110308,110309],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[58,110311,110313],{"className":31971,"code":110312,"language":31973,"meta":63,"style":63},"import mujoco\nimport mujoco.viewer\n",[65,110314,110315,110321],{"__ignoreMap":63},[68,110316,110317,110319],{"class":70,"line":71},[68,110318,31985],{"class":102},[68,110320,102875],{"class":85},[68,110322,110323,110325],{"class":70,"line":78},[68,110324,31985],{"class":102},[68,110326,109125],{"class":85},[19,110328,110329],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[58,110331,110332],{"className":31971,"code":110206,"language":31973,"meta":63,"style":63},[65,110333,110334],{"__ignoreMap":63},[68,110335,110336,110338,110340,110342],{"class":70,"line":71},[68,110337,109406],{"class":102},[68,110339,109409],{"class":85},[68,110341,32976],{"class":102},[68,110343,109414],{"class":85},[19,110345,110346,110347,110350],{},"打开一个 viewer 窗口。",[65,110348,110349],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[58,110352,110353],{"className":31971,"code":110229,"language":31973,"meta":63,"style":63},[65,110354,110355],{"__ignoreMap":63},[68,110356,110357,110359,110361,110363,110365,110367,110369],{"class":70,"line":71},[68,110358,110236],{"class":102},[68,110360,109760],{"class":85},[68,110362,32055],{"class":102},[68,110364,109765],{"class":85},[68,110366,861],{"class":102},[68,110368,109770],{"class":92},[68,110370,5338],{"class":85},[19,110372,110373,110374,110377],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[65,110375,110376],{},"viewer.is_running()"," 会变成 false，循环结束。",[58,110379,110381],{"className":31971,"code":110380,"language":31973,"meta":63,"style":63},"step_start = time.time()\n",[65,110382,110383],{"__ignoreMap":63},[68,110384,110385,110388,110390],{"class":70,"line":71},[68,110386,110387],{"class":85},"step_start ",[68,110389,869],{"class":102},[68,110391,109782],{"class":85},[19,110393,110394],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[58,110396,110397],{"className":31971,"code":109491,"language":31973,"meta":63,"style":63},[65,110398,110399,110403],{"__ignoreMap":63},[68,110400,110401],{"class":70,"line":71},[68,110402,106078],{"class":85},[68,110404,110405],{"class":70,"line":78},[68,110406,109502],{"class":85},[19,110408,110409,110411,110412,110414,110415,110417,110418,110421],{},[65,110410,102789],{}," 推进物理仿真。",[65,110413,109510],{}," 把最新的 ",[65,110416,34994],{}," 同步到窗口里显示。没有 ",[65,110419,110420],{},"sync()","，窗口可能看不到最新状态。",[58,110423,110424],{"className":31971,"code":109521,"language":31973,"meta":63,"style":63},[65,110425,110426],{"__ignoreMap":63},[68,110427,110428,110430,110432,110434,110436,110438,110440],{"class":70,"line":71},[68,110429,109528],{"class":85},[68,110431,869],{"class":102},[68,110433,109533],{"class":85},[68,110435,2268],{"class":102},[68,110437,109538],{"class":85},[68,110439,2268],{"class":102},[68,110441,109543],{"class":85},[19,110443,110444],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[58,110446,110448],{"className":31971,"code":110447,"language":31973,"meta":63,"style":63},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[65,110449,110450,110462],{"__ignoreMap":63},[68,110451,110452,110454,110456,110458,110460],{"class":70,"line":71},[68,110453,3134],{"class":102},[68,110455,109820],{"class":85},[68,110457,2695],{"class":102},[68,110459,5692],{"class":92},[68,110461,5338],{"class":85},[68,110463,110464],{"class":70,"line":78},[68,110465,110466],{"class":85},"    time.sleep(sleep_time)\n",[19,110468,110469],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[43,110471,110473],{"id":110472},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[58,110475,110477],{"className":31971,"code":110476,"language":31973,"meta":63,"style":63},"from pathlib import Path\n",[65,110478,110479],{"__ignoreMap":63},[68,110480,110481,110483,110485,110487],{"class":70,"line":71},[68,110482,32330],{"class":102},[68,110484,109884],{"class":85},[68,110486,31985],{"class":102},[68,110488,109889],{"class":85},[19,110490,110491,110492,110495,110496,110499],{},"导入 ",[65,110493,110494],{},"Path","，用来处理文件路径。相比直接写字符串，",[65,110497,110498],{},"Path(\"render_output.png\")"," 更清晰。",[58,110501,110503],{"className":31971,"code":110502,"language":31973,"meta":63,"style":63},"from PIL import Image\n",[65,110504,110505],{"__ignoreMap":63},[68,110506,110507,110509,110511,110513],{"class":70,"line":71},[68,110508,32330],{"class":102},[68,110510,48856],{"class":92},[68,110512,48859],{"class":102},[68,110514,48862],{"class":85},[19,110516,110517],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[58,110519,110520],{"className":54652,"code":110257,"language":54654,"meta":63,"style":63},[65,110521,110522],{"__ignoreMap":63},[68,110523,110524,110526,110528,110530,110532,110534,110536,110538,110540,110542,110544,110546],{"class":70,"line":71},[68,110525,861],{"class":85},[68,110527,110088],{"class":81},[68,110529,16516],{"class":587},[68,110531,869],{"class":85},[68,110533,110093],{"class":872},[68,110535,102680],{"class":587},[68,110537,869],{"class":85},[68,110539,110278],{"class":872},[68,110541,110281],{"class":587},[68,110543,869],{"class":85},[68,110545,110286],{"class":872},[68,110547,102718],{"class":85},[19,110549,110550,110551,110553,110554,110556,110557,110560,110561,110563],{},"定义一个相机。",[65,110552,81387],{}," 是相机名字。",[65,110555,105719],{}," 是相机在世界里的位置。",[65,110558,110559],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[65,110562,105719],{}," 来调视角。",[58,110565,110567],{"className":31971,"code":110566,"language":31973,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[65,110568,110569],{"__ignoreMap":63},[68,110570,110571,110573,110575,110577,110579,110581,110583,110585,110587,110589,110591],{"class":70,"line":71},[68,110572,109143],{"class":85},[68,110574,869],{"class":102},[68,110576,109447],{"class":85},[68,110578,26576],{"class":6815},[68,110580,869],{"class":102},[68,110582,43935],{"class":92},[68,110584,1002],{"class":85},[68,110586,26572],{"class":6815},[68,110588,869],{"class":102},[68,110590,109462],{"class":92},[68,110592,1757],{"class":85},[19,110594,110595,110596,102592,110598,110600],{},"创建离屏渲染器。",[65,110597,26576],{},[65,110599,26572],{}," 决定输出图片大小。",[58,110602,110603],{"className":31971,"code":103250,"language":31973,"meta":63,"style":63},[65,110604,110605,110621],{"__ignoreMap":63},[68,110606,110607,110609,110611,110613,110615,110617,110619],{"class":70,"line":71},[68,110608,4624],{"class":102},[68,110610,103075],{"class":85},[68,110612,27637],{"class":102},[68,110614,34036],{"class":92},[68,110616,997],{"class":85},[68,110618,2047],{"class":92},[68,110620,32379],{"class":85},[68,110622,110623],{"class":70,"line":78},[68,110624,103273],{"class":85},[19,110626,110627],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[58,110629,110631],{"className":31971,"code":110630,"language":31973,"meta":63,"style":63},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[65,110632,110633],{"__ignoreMap":63},[68,110634,110635,110638,110640,110642,110644],{"class":70,"line":71},[68,110636,110637],{"class":85},"renderer.update_scene(data, ",[68,110639,110088],{"class":6815},[68,110641,869],{"class":102},[68,110643,110093],{"class":872},[68,110645,1757],{"class":85},[19,110647,110648,110649,110651,110652,110655],{},"告诉 renderer：用当前 ",[65,110650,34994],{}," 的状态更新画面，并使用名为 ",[65,110653,110654],{},"fixed_camera"," 的相机视角。",[58,110657,110658],{"className":31971,"code":109553,"language":31973,"meta":63,"style":63},[65,110659,110660],{"__ignoreMap":63},[68,110661,110662,110664,110666],{"class":70,"line":71},[68,110663,109153],{"class":85},[68,110665,869],{"class":102},[68,110667,109158],{"class":85},[19,110669,110670,110671,110674],{},"真正渲染出图像。",[65,110672,110673],{},"image"," 是一个 NumPy 数组，不是文件。",[58,110676,110678],{"className":31971,"code":110677,"language":31973,"meta":63,"style":63},"Image.fromarray(image).save(output_path)\n",[65,110679,110680],{"__ignoreMap":63},[68,110681,110682],{"class":70,"line":71},[68,110683,110677],{"class":85},[19,110685,110686,110687,29978],{},"把数组转换成图片，并保存到 ",[65,110688,110689],{},"render_output.png",[58,110691,110693],{"className":31971,"code":110692,"language":31973,"meta":63,"style":63},"renderer.close()\n",[65,110694,110695],{"__ignoreMap":63},[68,110696,110697],{"class":70,"line":71},[68,110698,110692],{"class":85},[19,110700,110701],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110703,103890],{"id":103889},[19,110705,110706,110707,110709,110710,29978],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[65,110708,110689],{},"，并输出图像数组形状，例如 ",[65,110711,110712],{},"(480, 640, 3)",[19,110714,110715],{},"如果图片里看不到方块，先检查：",[48,110717,110718,110721,110724],{},[51,110719,110720],{},"方块是否掉到相机视野外。",[51,110722,110723],{},"camera 位置是否合理。",[51,110725,110726,110727,110730],{},"是否在 ",[65,110728,110729],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110732,103922],{"id":103921},[19,110734,110735],{},"运行 viewer:",[58,110737,110739],{"className":25416,"code":110738,"language":25418,"meta":63,"style":63},"python ch5_viewer.py\n",[65,110740,110741],{"__ignoreMap":63},[68,110742,110743,110745],{"class":70,"line":71},[68,110744,31973],{"class":587},[68,110746,109869],{"class":872},[19,110748,110749],{},"运行 renderer:",[58,110751,110753],{"className":25416,"code":110752,"language":25418,"meta":63,"style":63},"python ch5_renderer.py\n",[65,110754,110755],{"__ignoreMap":63},[68,110756,110757,110759],{"class":70,"line":71},[68,110758,31973],{"class":587},[68,110760,110198],{"class":872},[19,110762,110763],{},"如果在服务器上运行:",[58,110765,110767],{"className":25416,"code":110766,"language":25418,"meta":63,"style":63},"MUJOCO_GL=egl python ch5_renderer.py\n",[65,110768,110769],{"__ignoreMap":63},[68,110770,110771,110773,110775,110777,110780],{"class":70,"line":71},[68,110772,109387],{"class":85},[68,110774,869],{"class":102},[68,110776,109377],{"class":872},[68,110778,110779],{"class":587}," python",[68,110781,110198],{"class":872},[19,110783,109355],{},[58,110785,110787],{"className":25416,"code":110786,"language":25418,"meta":63,"style":63},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[65,110788,110789],{"__ignoreMap":63},[68,110790,110791,110793,110795,110797,110799],{"class":70,"line":71},[68,110792,109387],{"class":85},[68,110794,869],{"class":102},[68,110796,109381],{"class":872},[68,110798,110779],{"class":587},[68,110800,110198],{"class":872},[19,110802,110803],{},"再做几个练习：",[48,110805,110806,110813,110816,110822],{},[51,110807,110808,110809,110812],{},"把 renderer 分辨率改成 ",[65,110810,110811],{},"height=240, width=320","，观察输出 shape。",[51,110814,110815],{},"把方块颜色改成蓝色，重新保存图片。",[51,110817,110818,110819,110821],{},"把相机 ",[65,110820,105719],{}," 改远一点，观察画面中物体是否变小。",[51,110823,110824,110825,103988,110828,110831],{},"把 viewer 示例中的 ",[65,110826,110827],{},"data.time \u003C 5.0",[65,110829,110830],{},"data.time \u003C 20.0","，观察更长时间。",[14,110833,104027],{"id":104026},[43,110835,110837],{"id":110836},"viewer-窗口打不开","viewer 窗口打不开",[19,110839,110840],{},"安装:",[58,110842,110844],{"className":25416,"code":110843,"language":25418,"meta":63,"style":63},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[65,110845,110846],{"__ignoreMap":63},[68,110847,110848,110850,110852,110854,110856,110858,110860,110862,110864,110866,110868],{"class":70,"line":71},[68,110849,26171],{"class":587},[68,110851,27909],{"class":872},[68,110853,25428],{"class":872},[68,110855,27994],{"class":92},[68,110857,104080],{"class":872},[68,110859,102408],{"class":872},[68,110861,104085],{"class":872},[68,110863,102421],{"class":872},[68,110865,102427],{"class":872},[68,110867,102418],{"class":872},[68,110869,110870],{"class":872}," libXinerama\n",[43,110872,110874],{"id":110873},"glfwerror",[65,110875,110876],{},"GLFWError",[19,110878,110879],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[43,110881,110883],{"id":110882},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110885,110886,110887,84116,110889,110891],{},"尝试 ",[65,110888,102611],{},[65,110890,102614],{},"。可能存在版本差异。",[43,110893,110894],{"id":110894},"保存图片是黑的",[19,110896,104149],{},[48,110898,110899,110902,110905,110915],{},[51,110900,110901],{},"XML 里是否有 light。",[51,110903,110904],{},"相机是否对着模型。",[51,110906,110907,110908,110911,110912,29978],{},"是否先 ",[65,110909,110910],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[65,110913,110914],{},"renderer.render()",[51,110916,110917],{},"物体是否已经掉出视野。",[43,110919,110920],{"id":110920},"远程服务器没有显示器",[19,110922,110923],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[58,110925,110926],{"className":25416,"code":110766,"language":25418,"meta":63,"style":63},[65,110927,110928],{"__ignoreMap":63},[68,110929,110930,110932,110934,110936,110938],{"class":70,"line":71},[68,110931,109387],{"class":85},[68,110933,869],{"class":102},[68,110935,109377],{"class":872},[68,110937,110779],{"class":587},[68,110939,110198],{"class":872},[19,110941,110942],{},"如果 EGL 不可用，再尝试：",[58,110944,110945],{"className":25416,"code":110786,"language":25418,"meta":63,"style":63},[65,110946,110947],{"__ignoreMap":63},[68,110948,110949,110951,110953,110955,110957],{"class":70,"line":71},[68,110950,109387],{"class":85},[68,110952,869],{"class":102},[68,110954,109381],{"class":872},[68,110956,110779],{"class":587},[68,110958,110198],{"class":872},[14,110960,104181],{"id":104180},[19,110962,110963],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[48,110965,110966,110969,110972],{},[51,110967,110968],{},"先用 viewer 看模型和控制是否正常。",[51,110970,110971],{},"再用 renderer 保存图片或构造视觉观测。",[51,110973,110974],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1652,110976,110977],{},"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":63,"searchDepth":78,"depth":78,"links":110979},[110980,110981,110982,110987,110992,110993,110994,111001],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":110983},[110984,110985,110986],{"id":109484,"depth":89,"text":109485},{"id":109514,"depth":89,"text":109515},{"id":109549,"depth":89,"text":109550},{"id":102826,"depth":78,"text":102827,"children":110988},[110989,110990,110991],{"id":103146,"depth":89,"text":103146},{"id":110294,"depth":89,"text":110295},{"id":110472,"depth":89,"text":110473},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":110995},[110996,110997,110998,110999,111000],{"id":110836,"depth":89,"text":110837},{"id":110873,"depth":89,"text":110876},{"id":110882,"depth":89,"text":110883},{"id":110894,"depth":89,"text":110894},{"id":110920,"depth":89,"text":110920},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109092,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111008,"title":111009,"body":111010,"description":63,"extension":1677,"meta":112921,"navigation":1679,"path":112922,"seo":112923,"stem":112924,"__hash__":112925},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111011,"toc":112897},[111012,111015,111017,111020,111022,111041,111044,111050,111053,111055,111057,111081,111083,111097,111099,111140,111142,111153,111155,111158,111164,111167,111201,111204,111236,111239,111271,111275,111278,111318,111321,111327,111330,111336,111340,111343,111349,111352,111356,111359,111399,111401,111414,111417,111419,112001,112003,112015,112018,112029,112031,112034,112053,112065,112068,112089,112092,112095,112138,112141,112144,112164,112171,112173,112191,112206,112209,112215,112218,112224,112241,112248,112279,112290,112324,112335,112352,112361,112369,112374,112388,112391,112412,112418,112432,112437,112467,112477,112502,112510,112533,112536,112552,112555,112563,112569,112591,112604,112625,112634,112673,112684,112686,112689,112695,112698,112701,112707,112710,112730,112733,112735,112774,112776,112779,112787,112790,112793,112820,112823,112833,112839,112842,112848,112850,112856,112860,112863,112865,112868,112892,112895],[10,111013,111009],{"id":111014},"_6控制任务cartpole",[14,111016,102221],{"id":102220},[19,111018,111019],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111021,105904],{},[48,111023,111024,111027,111029,111032,111035,111038],{},[51,111025,111026],{},"slide joint",[51,111028,107757],{},[51,111030,111031],{},"cart force actuator",[51,111033,111034],{},"状态观测",[51,111036,111037],{},"简单控制循环",[51,111039,111040],{},"reward 设计雏形",[19,111042,111043],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[58,111045,111048],{"className":111046,"code":111047,"language":6786,"meta":63},[6784],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[65,111049,111047],{"__ignoreMap":63},[19,111051,111052],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111054,102344],{"id":102343},[19,111056,102347],{},[58,111058,111059],{"className":25416,"code":105961,"language":25418,"meta":63,"style":63},[65,111060,111061],{"__ignoreMap":63},[68,111062,111063,111065,111067,111069,111071,111073,111075,111077,111079],{"class":70,"line":71},[68,111064,26171],{"class":587},[68,111066,27909],{"class":872},[68,111068,25428],{"class":872},[68,111070,27994],{"class":92},[68,111072,105976],{"class":872},[68,111074,102372],{"class":872},[68,111076,104075],{"class":872},[68,111078,102388],{"class":872},[68,111080,105985],{"class":872},[19,111082,104392],{},[58,111084,111085],{"className":25416,"code":102493,"language":25418,"meta":63,"style":63},[65,111086,111087],{"__ignoreMap":63},[68,111088,111089,111091,111093,111095],{"class":70,"line":71},[68,111090,25425],{"class":587},[68,111092,25428],{"class":872},[68,111094,102504],{"class":872},[68,111096,102507],{"class":872},[19,111098,104409],{},[58,111100,111102],{"className":25416,"code":111101,"language":25418,"meta":63,"style":63},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[65,111103,111104,111121,111130],{"__ignoreMap":63},[68,111105,111106,111108,111110,111112,111115,111117,111119],{"class":70,"line":71},[68,111107,31923],{"class":587},[68,111109,30769],{"class":872},[68,111111,26710],{"class":92},[68,111113,111114],{"class":872}," mujoco-cartpole",[68,111116,102549],{"class":872},[68,111118,102552],{"class":92},[68,111120,102555],{"class":92},[68,111122,111123,111125,111127],{"class":70,"line":78},[68,111124,31923],{"class":587},[68,111126,102562],{"class":872},[68,111128,111129],{"class":872}," mujoco-cartpole\n",[68,111131,111132,111134,111136,111138],{"class":70,"line":89},[68,111133,25425],{"class":587},[68,111135,25428],{"class":872},[68,111137,102504],{"class":872},[68,111139,102507],{"class":872},[19,111141,102578],{},[48,111143,111144,111147,111150],{},[51,111145,111146],{},"本章不依赖 Gymnasium。",[51,111148,111149],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[51,111151,111152],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111154,102619],{"id":102618},[19,111156,111157],{},"Cartpole 的模型结构:",[58,111159,111162],{"className":111160,"code":111161,"language":6786,"meta":63},[6784],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[65,111163,111161],{"__ignoreMap":63},[19,111165,111166],{},"小车通过 slide joint 左右移动:",[58,111168,111170],{"className":54652,"code":111169,"language":54654,"meta":63,"style":63},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[65,111171,111172],{"__ignoreMap":63},[68,111173,111174,111176,111178,111180,111182,111185,111187,111189,111192,111194,111196,111199],{"class":70,"line":71},[68,111175,861],{"class":85},[68,111177,104529],{"class":81},[68,111179,16516],{"class":587},[68,111181,869],{"class":85},[68,111183,111184],{"class":872},"\"cart_x\"",[68,111186,55408],{"class":587},[68,111188,869],{"class":85},[68,111190,111191],{"class":872},"\"slide\"",[68,111193,107601],{"class":587},[68,111195,869],{"class":85},[68,111197,111198],{"class":872},"\"1 0 0\"",[68,111200,102718],{"class":85},[19,111202,111203],{},"杆子通过 hinge joint 旋转:",[58,111205,111207],{"className":54652,"code":111206,"language":54654,"meta":63,"style":63},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[65,111208,111209],{"__ignoreMap":63},[68,111210,111211,111213,111215,111217,111219,111222,111224,111226,111228,111230,111232,111234],{"class":70,"line":71},[68,111212,861],{"class":85},[68,111214,104529],{"class":81},[68,111216,16516],{"class":587},[68,111218,869],{"class":85},[68,111220,111221],{"class":872},"\"pole_hinge\"",[68,111223,55408],{"class":587},[68,111225,869],{"class":85},[68,111227,107592],{"class":872},[68,111229,107601],{"class":587},[68,111231,869],{"class":85},[68,111233,107606],{"class":872},[68,111235,102718],{"class":85},[19,111237,111238],{},"控制力作用在小车 slide joint 上:",[58,111240,111242],{"className":54652,"code":111241,"language":54654,"meta":63,"style":63},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[65,111243,111244],{"__ignoreMap":63},[68,111245,111246,111248,111250,111252,111254,111257,111259,111261,111263,111265,111267,111269],{"class":70,"line":71},[68,111247,861],{"class":85},[68,111249,107647],{"class":81},[68,111251,16516],{"class":587},[68,111253,869],{"class":85},[68,111255,111256],{"class":872},"\"cart_motor\"",[68,111258,107657],{"class":587},[68,111260,869],{"class":85},[68,111262,111184],{"class":872},[68,111264,107664],{"class":587},[68,111266,869],{"class":85},[68,111268,55900],{"class":872},[68,111270,102718],{"class":85},[43,111272,111274],{"id":111273},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111276,111277],{},"这个简化模型有两个关节：",[120,111279,111280,111291],{},[123,111281,111282],{},[126,111283,111284,111286,111288],{},[129,111285,104332],{"align":131},[129,111287,25331],{"align":131},[129,111289,111290],{"align":131},"对应状态",[137,111292,111293,111306],{},[126,111294,111295,111300,111303],{},[142,111296,111297],{"align":131},[65,111298,111299],{},"cart_x",[142,111301,111302],{"align":131},"slide",[142,111304,111305],{"align":131},"小车 x 位置",[126,111307,111308,111313,111315],{},[142,111309,111310],{"align":131},[65,111311,111312],{},"pole_hinge",[142,111314,107413],{"align":131},[142,111316,111317],{"align":131},"杆子角度",[19,111319,111320],{},"所以：",[58,111322,111325],{"className":111323,"code":111324,"language":6786,"meta":63},[6784],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[65,111326,111324],{"__ignoreMap":63},[19,111328,111329],{},"把它们拼起来就是观测：",[58,111331,111334],{"className":111332,"code":111333,"language":6786,"meta":63},[6784],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[65,111335,111333],{"__ignoreMap":63},[43,111337,111339],{"id":111338},"action-是什么","action 是什么",[19,111341,111342],{},"本章只有一个 actuator：",[58,111344,111347],{"className":111345,"code":111346,"language":6786,"meta":63},[6784],"data.ctrl[0] = action\n",[65,111348,111346],{"__ignoreMap":63},[19,111350,111351],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[43,111353,111355],{"id":111354},"reward-是什么","reward 是什么",[19,111357,111358],{},"奖励函数：",[58,111360,111362],{"className":31971,"code":111361,"language":31973,"meta":63,"style":63},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[65,111363,111364],{"__ignoreMap":63},[68,111365,111366,111368,111371,111373,111375,111377,111380,111382,111385,111387,111389,111391,111394,111396],{"class":70,"line":71},[68,111367,18641],{"class":102},[68,111369,111370],{"class":92}," float",[68,111372,997],{"class":85},[68,111374,103977],{"class":92},[68,111376,53856],{"class":102},[68,111378,111379],{"class":92}," 0.1",[68,111381,8117],{"class":102},[68,111383,111384],{"class":85}," cart_x ",[68,111386,2191],{"class":102},[68,111388,111384],{"class":85},[68,111390,2268],{"class":102},[68,111392,111393],{"class":85}," pole_angle ",[68,111395,2191],{"class":102},[68,111397,111398],{"class":85}," pole_angle)\n",[19,111400,107799],{},[48,111402,111403,111408,111411],{},[51,111404,111405,111406,29978],{},"基础奖励是 ",[65,111407,103977],{},[51,111409,111410],{},"小车离中心越远，扣分越多。",[51,111412,111413],{},"杆子角度越大，扣分越多。",[19,111415,111416],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111418,102827],{"id":102826},[58,111420,111422],{"className":31971,"code":111421,"language":31973,"meta":63,"style":63},"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",[65,111423,111424,111430,111440,111444,111448,111456,111461,111465,111469,111473,111478,111482,111487,111492,111497,111501,111506,111511,111516,111520,111524,111528,111532,111536,111541,111545,111549,111553,111557,111561,111571,111578,111582,111586,111600,111614,111627,111657,111661,111665,111677,111689,111697,111701,111714,111718,111722,111731,111735,111751,111761,111774,111787,111791,111814,111832,111836,111848,111852,111856,111866,111876,111880,111896,111937,111941,111961,111977,111981,111985,111997],{"__ignoreMap":63},[68,111425,111426,111428],{"class":70,"line":71},[68,111427,31985],{"class":102},[68,111429,102875],{"class":85},[68,111431,111432,111434,111436,111438],{"class":70,"line":78},[68,111433,31985],{"class":102},[68,111435,32973],{"class":85},[68,111437,32976],{"class":102},[68,111439,32979],{"class":85},[68,111441,111442],{"class":70,"line":89},[68,111443,4000],{"emptyLinePlaceholder":1679},[68,111445,111446],{"class":70,"line":115},[68,111447,4000],{"emptyLinePlaceholder":1679},[68,111449,111450,111452,111454],{"class":70,"line":280},[68,111451,102888],{"class":92},[68,111453,15161],{"class":102},[68,111455,102893],{"class":872},[68,111457,111458],{"class":70,"line":301},[68,111459,111460],{"class":872},"\u003Cmujoco model=\"cartpole\">\n",[68,111462,111463],{"class":70,"line":320},[68,111464,102903],{"class":872},[68,111466,111467],{"class":70,"line":2915},[68,111468,4000],{"emptyLinePlaceholder":1679},[68,111470,111471],{"class":70,"line":2921},[68,111472,102912],{"class":872},[68,111474,111475],{"class":70,"line":2933},[68,111476,111477],{"class":872},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,111479,111480],{"class":70,"line":3214},[68,111481,4000],{"emptyLinePlaceholder":1679},[68,111483,111484],{"class":70,"line":3219},[68,111485,111486],{"class":872},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[68,111488,111489],{"class":70,"line":3225},[68,111490,111491],{"class":872},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[68,111493,111494],{"class":70,"line":3230},[68,111495,111496],{"class":872},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[68,111498,111499],{"class":70,"line":3244},[68,111500,4000],{"emptyLinePlaceholder":1679},[68,111502,111503],{"class":70,"line":3249},[68,111504,111505],{"class":872},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[68,111507,111508],{"class":70,"line":3255},[68,111509,111510],{"class":872},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[68,111512,111513],{"class":70,"line":3276},[68,111514,111515],{"class":872},"        \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",[68,111517,111518],{"class":70,"line":3281},[68,111519,108011],{"class":872},[68,111521,111522],{"class":70,"line":3295},[68,111523,102941],{"class":872},[68,111525,111526],{"class":70,"line":3300},[68,111527,102946],{"class":872},[68,111529,111530],{"class":70,"line":3329},[68,111531,4000],{"emptyLinePlaceholder":1679},[68,111533,111534],{"class":70,"line":3334},[68,111535,108028],{"class":872},[68,111537,111538],{"class":70,"line":3351},[68,111539,111540],{"class":872},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,111542,111543],{"class":70,"line":3356},[68,111544,108038],{"class":872},[68,111546,111547],{"class":70,"line":3361},[68,111548,102951],{"class":872},[68,111550,111551],{"class":70,"line":3366},[68,111552,97273],{"class":872},[68,111554,111555],{"class":70,"line":3380},[68,111556,4000],{"emptyLinePlaceholder":1679},[68,111558,111559],{"class":70,"line":3385},[68,111560,4000],{"emptyLinePlaceholder":1679},[68,111562,111563,111565,111568],{"class":70,"line":4177},[68,111564,33540],{"class":102},[68,111566,111567],{"class":587}," get_observation",[68,111569,111570],{"class":85},"(data: mujoco.MjData) -> np.ndarray:\n",[68,111572,111573,111575],{"class":70,"line":4191},[68,111574,5689],{"class":102},[68,111576,111577],{"class":85}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[68,111579,111580],{"class":70,"line":4199},[68,111581,4000],{"emptyLinePlaceholder":1679},[68,111583,111584],{"class":70,"line":4204},[68,111585,4000],{"emptyLinePlaceholder":1679},[68,111587,111588,111590,111593,111596,111598],{"class":70,"line":4210},[68,111589,33540],{"class":102},[68,111591,111592],{"class":587}," compute_reward",[68,111594,111595],{"class":85},"(obs: np.ndarray) -> ",[68,111597,1790],{"class":92},[68,111599,5338],{"class":85},[68,111601,111602,111605,111607,111610,111612],{"class":70,"line":4216},[68,111603,111604],{"class":85},"    cart_x ",[68,111606,869],{"class":102},[68,111608,111609],{"class":85}," obs[",[68,111611,600],{"class":92},[68,111613,34839],{"class":85},[68,111615,111616,111619,111621,111623,111625],{"class":70,"line":4221},[68,111617,111618],{"class":85},"    pole_angle ",[68,111620,869],{"class":102},[68,111622,111609],{"class":85},[68,111624,99],{"class":92},[68,111626,34839],{"class":85},[68,111628,111629,111631,111633,111635,111637,111639,111641,111643,111645,111647,111649,111651,111653,111655],{"class":70,"line":9547},[68,111630,5689],{"class":102},[68,111632,111370],{"class":92},[68,111634,997],{"class":85},[68,111636,103977],{"class":92},[68,111638,53856],{"class":102},[68,111640,111379],{"class":92},[68,111642,8117],{"class":102},[68,111644,111384],{"class":85},[68,111646,2191],{"class":102},[68,111648,111384],{"class":85},[68,111650,2268],{"class":102},[68,111652,111393],{"class":85},[68,111654,2191],{"class":102},[68,111656,111398],{"class":85},[68,111658,111659],{"class":70,"line":9571},[68,111660,4000],{"emptyLinePlaceholder":1679},[68,111662,111663],{"class":70,"line":9576},[68,111664,4000],{"emptyLinePlaceholder":1679},[68,111666,111667,111669,111671,111673,111675],{"class":70,"line":9582},[68,111668,33540],{"class":102},[68,111670,3574],{"class":587},[68,111672,102972],{"class":85},[68,111674,97261],{"class":92},[68,111676,5338],{"class":85},[68,111678,111679,111681,111683,111685,111687],{"class":70,"line":9609},[68,111680,102981],{"class":85},[68,111682,869],{"class":102},[68,111684,102986],{"class":85},[68,111686,102888],{"class":92},[68,111688,1757],{"class":85},[68,111690,111691,111693,111695],{"class":70,"line":9614},[68,111692,102995],{"class":85},[68,111694,869],{"class":102},[68,111696,103000],{"class":85},[68,111698,111699],{"class":70,"line":9620},[68,111700,4000],{"emptyLinePlaceholder":1679},[68,111702,111703,111705,111707,111709,111711],{"class":70,"line":9632},[68,111704,106642],{"class":85},[68,111706,99],{"class":92},[68,111708,6042],{"class":85},[68,111710,869],{"class":102},[68,111712,111713],{"class":92}," 0.1\n",[68,111715,111716],{"class":70,"line":9644},[68,111717,106655],{"class":85},[68,111719,111720],{"class":70,"line":9656},[68,111721,4000],{"emptyLinePlaceholder":1679},[68,111723,111724,111727,111729],{"class":70,"line":11314},[68,111725,111726],{"class":85},"    total_reward ",[68,111728,869],{"class":102},[68,111730,106334],{"class":92},[68,111732,111733],{"class":70,"line":11339},[68,111734,4000],{"emptyLinePlaceholder":1679},[68,111736,111737,111739,111741,111743,111745,111747,111749],{"class":70,"line":11362},[68,111738,4800],{"class":102},[68,111740,33209],{"class":85},[68,111742,27637],{"class":102},[68,111744,34036],{"class":92},[68,111746,997],{"class":85},[68,111748,8009],{"class":92},[68,111750,32379],{"class":85},[68,111752,111753,111756,111758],{"class":70,"line":11386},[68,111754,111755],{"class":85},"        obs ",[68,111757,869],{"class":102},[68,111759,111760],{"class":85}," get_observation(data)\n",[68,111762,111763,111766,111768,111770,111772],{"class":70,"line":11391},[68,111764,111765],{"class":85},"        pole_angle ",[68,111767,869],{"class":102},[68,111769,111609],{"class":85},[68,111771,99],{"class":92},[68,111773,34839],{"class":85},[68,111775,111776,111779,111781,111783,111785],{"class":70,"line":11396},[68,111777,111778],{"class":85},"        pole_angular_velocity ",[68,111780,869],{"class":102},[68,111782,111609],{"class":85},[68,111784,288],{"class":92},[68,111786,34839],{"class":85},[68,111788,111789],{"class":70,"line":11401},[68,111790,4000],{"emptyLinePlaceholder":1679},[68,111792,111793,111796,111798,111801,111803,111805,111807,111809,111811],{"class":70,"line":11410},[68,111794,111795],{"class":85},"        action ",[68,111797,869],{"class":102},[68,111799,111800],{"class":92}," 2.0",[68,111802,8117],{"class":102},[68,111804,111393],{"class":85},[68,111806,2217],{"class":102},[68,111808,63451],{"class":92},[68,111810,8117],{"class":102},[68,111812,111813],{"class":85}," pole_angular_velocity\n",[68,111815,111816,111818,111820,111822,111824,111826,111828,111830],{"class":70,"line":11415},[68,111817,111795],{"class":85},[68,111819,869],{"class":102},[68,111821,109020],{"class":85},[68,111823,2268],{"class":102},[68,111825,103977],{"class":92},[68,111827,1002],{"class":85},[68,111829,103977],{"class":92},[68,111831,1757],{"class":85},[68,111833,111834],{"class":70,"line":11421},[68,111835,4000],{"emptyLinePlaceholder":1679},[68,111837,111838,111840,111842,111844,111846],{"class":70,"line":11442},[68,111839,108190],{"class":85},[68,111841,600],{"class":92},[68,111843,6042],{"class":85},[68,111845,869],{"class":102},[68,111847,109043],{"class":85},[68,111849,111850],{"class":70,"line":11448},[68,111851,103090],{"class":85},[68,111853,111854],{"class":70,"line":11462},[68,111855,4000],{"emptyLinePlaceholder":1679},[68,111857,111858,111861,111863],{"class":70,"line":11468},[68,111859,111860],{"class":85},"        reward ",[68,111862,869],{"class":102},[68,111864,111865],{"class":85}," compute_reward(get_observation(data))\n",[68,111867,111868,111871,111873],{"class":70,"line":11495},[68,111869,111870],{"class":85},"        total_reward ",[68,111872,11075],{"class":102},[68,111874,111875],{"class":85}," reward\n",[68,111877,111878],{"class":70,"line":11504},[68,111879,4000],{"emptyLinePlaceholder":1679},[68,111881,111882,111884,111886,111888,111890,111892,111894],{"class":70,"line":11510},[68,111883,4097],{"class":102},[68,111885,33209],{"class":85},[68,111887,2064],{"class":102},[68,111889,7353],{"class":92},[68,111891,103133],{"class":102},[68,111893,5692],{"class":92},[68,111895,5338],{"class":85},[68,111897,111898,111900,111902,111905,111908,111911,111914,111916,111919,111922,111924,111926,111928,111930,111933,111935],{"class":70,"line":11518},[68,111899,36243],{"class":92},[68,111901,997],{"class":85},[68,111903,111904],{"class":872},"\"step:\"",[68,111906,111907],{"class":85},", step, ",[68,111909,111910],{"class":872},"\"obs:\"",[68,111912,111913],{"class":85},", np.round(obs, ",[68,111915,288],{"class":92},[68,111917,111918],{"class":85},"), ",[68,111920,111921],{"class":872},"\"action:\"",[68,111923,1002],{"class":85},[68,111925,33611],{"class":92},[68,111927,997],{"class":85},[68,111929,1790],{"class":92},[68,111931,111932],{"class":85},"(action), ",[68,111934,288],{"class":92},[68,111936,32090],{"class":85},[68,111938,111939],{"class":70,"line":11523},[68,111940,4000],{"emptyLinePlaceholder":1679},[68,111942,111943,111945,111947,111950,111952,111954,111957,111959],{"class":70,"line":18199},[68,111944,32892],{"class":92},[68,111946,997],{"class":85},[68,111948,111949],{"class":872},"\"total_reward:\"",[68,111951,1002],{"class":85},[68,111953,33611],{"class":92},[68,111955,111956],{"class":85},"(total_reward, ",[68,111958,288],{"class":92},[68,111960,32090],{"class":85},[68,111962,111963,111965,111967,111970,111973,111975],{"class":70,"line":18205},[68,111964,32892],{"class":92},[68,111966,997],{"class":85},[68,111968,111969],{"class":872},"\"final obs:\"",[68,111971,111972],{"class":85},", np.round(get_observation(data), ",[68,111974,288],{"class":92},[68,111976,32090],{"class":85},[68,111978,111979],{"class":70,"line":18228},[68,111980,4000],{"emptyLinePlaceholder":1679},[68,111982,111983],{"class":70,"line":18234},[68,111984,4000],{"emptyLinePlaceholder":1679},[68,111986,111987,111989,111991,111993,111995],{"class":70,"line":18257},[68,111988,3134],{"class":102},[68,111990,32813],{"class":92},[68,111992,103133],{"class":102},[68,111994,103136],{"class":872},[68,111996,5338],{"class":85},[68,111998,111999],{"class":70,"line":18271},[68,112000,103143],{"class":85},[19,112002,105143],{},[58,112004,112006],{"className":25416,"code":112005,"language":25418,"meta":63,"style":63},"touch ch6_cartpole.py\n",[65,112007,112008],{"__ignoreMap":63},[68,112009,112010,112012],{"class":70,"line":71},[68,112011,102857],{"class":587},[68,112013,112014],{"class":872}," ch6_cartpole.py\n",[19,112016,112017],{},"运行：",[58,112019,112021],{"className":25416,"code":112020,"language":25418,"meta":63,"style":63},"python ch6_cartpole.py\n",[65,112022,112023],{"__ignoreMap":63},[68,112024,112025,112027],{"class":70,"line":71},[68,112026,31973],{"class":587},[68,112028,112014],{"class":872},[43,112030,103146],{"id":103146},[19,112032,112033],{},"构造观测：",[58,112035,112037],{"className":31971,"code":112036,"language":31973,"meta":63,"style":63},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[65,112038,112039,112047],{"__ignoreMap":63},[68,112040,112041,112043,112045],{"class":70,"line":71},[68,112042,33540],{"class":102},[68,112044,111567],{"class":587},[68,112046,111570],{"class":85},[68,112048,112049,112051],{"class":70,"line":78},[68,112050,5689],{"class":102},[68,112052,111577],{"class":85},[19,112054,112055,112058,112059,112061,112062,112064],{},[65,112056,112057],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[65,112060,105603],{}," 2 维，",[65,112063,105933],{}," 2 维，所以 obs 是 4 维。",[19,112066,112067],{},"设置初始角度：",[58,112069,112071],{"className":31971,"code":112070,"language":31973,"meta":63,"style":63},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[65,112072,112073,112085],{"__ignoreMap":63},[68,112074,112075,112077,112079,112081,112083],{"class":70,"line":71},[68,112076,106272],{"class":85},[68,112078,99],{"class":92},[68,112080,6042],{"class":85},[68,112082,869],{"class":102},[68,112084,111713],{"class":92},[68,112086,112087],{"class":70,"line":78},[68,112088,106116],{"class":85},[19,112090,112091],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112093,112094],{},"简单反馈控制：",[58,112096,112098],{"className":31971,"code":112097,"language":31973,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[65,112099,112100,112120],{"__ignoreMap":63},[68,112101,112102,112104,112106,112108,112110,112112,112114,112116,112118],{"class":70,"line":71},[68,112103,109015],{"class":85},[68,112105,869],{"class":102},[68,112107,111800],{"class":92},[68,112109,8117],{"class":102},[68,112111,111393],{"class":85},[68,112113,2217],{"class":102},[68,112115,63451],{"class":92},[68,112117,8117],{"class":102},[68,112119,111813],{"class":85},[68,112121,112122,112124,112126,112128,112130,112132,112134,112136],{"class":70,"line":78},[68,112123,109015],{"class":85},[68,112125,869],{"class":102},[68,112127,109020],{"class":85},[68,112129,2268],{"class":102},[68,112131,103977],{"class":92},[68,112133,1002],{"class":85},[68,112135,103977],{"class":92},[68,112137,1757],{"class":85},[19,112139,112140],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112142,112143],{},"限制动作：",[58,112145,112147],{"className":31971,"code":112146,"language":31973,"meta":63,"style":63},"np.clip(action, -1.0, 1.0)\n",[65,112148,112149],{"__ignoreMap":63},[68,112150,112151,112154,112156,112158,112160,112162],{"class":70,"line":71},[68,112152,112153],{"class":85},"np.clip(action, ",[68,112155,2268],{"class":102},[68,112157,103977],{"class":92},[68,112159,1002],{"class":85},[68,112161,103977],{"class":92},[68,112163,1757],{"class":85},[19,112165,112166,112167,112170],{},"因为 XML 里 ",[65,112168,112169],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[43,112172,103282],{"id":103282},[58,112174,112175],{"className":31971,"code":112036,"language":31973,"meta":63,"style":63},[65,112176,112177,112185],{"__ignoreMap":63},[68,112178,112179,112181,112183],{"class":70,"line":71},[68,112180,33540],{"class":102},[68,112182,111567],{"class":587},[68,112184,111570],{"class":85},[68,112186,112187,112189],{"class":70,"line":78},[68,112188,5689],{"class":102},[68,112190,111577],{"class":85},[19,112192,112193,112194,112197,112198,112201,112202,112205],{},"这段定义了一个函数，用来获取当前观测。",[65,112195,112196],{},"data.qpos.copy()"," 是位置数组副本，",[65,112199,112200],{},"data.qvel.copy()"," 是速度数组副本。",[65,112203,112204],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112207,112208],{},"在本章模型里：",[58,112210,112213],{"className":112211,"code":112212,"language":6786,"meta":63},[6784],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[65,112214,112212],{"__ignoreMap":63},[19,112216,112217],{},"所以返回的 obs 是：",[58,112219,112222],{"className":112220,"code":112221,"language":6786,"meta":63},[6784],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[65,112223,112221],{"__ignoreMap":63},[58,112225,112227],{"className":31971,"code":112226,"language":31973,"meta":63,"style":63},"def compute_reward(obs: np.ndarray) -> float:\n",[65,112228,112229],{"__ignoreMap":63},[68,112230,112231,112233,112235,112237,112239],{"class":70,"line":71},[68,112232,33540],{"class":102},[68,112234,111592],{"class":587},[68,112236,111595],{"class":85},[68,112238,1790],{"class":92},[68,112240,5338],{"class":85},[19,112242,112243,112244,112247],{},"这行定义奖励函数。输入是观测 ",[65,112245,112246],{},"obs","，输出是一个浮点数奖励。",[58,112249,112251],{"className":31971,"code":112250,"language":31973,"meta":63,"style":63},"cart_x = obs[0]\npole_angle = obs[1]\n",[65,112252,112253,112266],{"__ignoreMap":63},[68,112254,112255,112258,112260,112262,112264],{"class":70,"line":71},[68,112256,112257],{"class":85},"cart_x ",[68,112259,869],{"class":102},[68,112261,111609],{"class":85},[68,112263,600],{"class":92},[68,112265,34839],{"class":85},[68,112267,112268,112271,112273,112275,112277],{"class":70,"line":78},[68,112269,112270],{"class":85},"pole_angle ",[68,112272,869],{"class":102},[68,112274,111609],{"class":85},[68,112276,99],{"class":92},[68,112278,34839],{"class":85},[19,112280,112281,112282,112285,112286,112289],{},"数组索引从 0 开始。",[65,112283,112284],{},"obs[0]"," 是第一个元素，也就是小车位置。",[65,112287,112288],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[58,112291,112292],{"className":31971,"code":111361,"language":31973,"meta":63,"style":63},[65,112293,112294],{"__ignoreMap":63},[68,112295,112296,112298,112300,112302,112304,112306,112308,112310,112312,112314,112316,112318,112320,112322],{"class":70,"line":71},[68,112297,18641],{"class":102},[68,112299,111370],{"class":92},[68,112301,997],{"class":85},[68,112303,103977],{"class":92},[68,112305,53856],{"class":102},[68,112307,111379],{"class":92},[68,112309,8117],{"class":102},[68,112311,111384],{"class":85},[68,112313,2191],{"class":102},[68,112315,111384],{"class":85},[68,112317,2268],{"class":102},[68,112319,111393],{"class":85},[68,112321,2191],{"class":102},[68,112323,111398],{"class":85},[19,112325,112326,112327,112330,112331,112334],{},"这行计算奖励。",[65,112328,112329],{},"cart_x * cart_x"," 是小车位置的平方，",[65,112332,112333],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[58,112336,112338],{"className":31971,"code":112337,"language":31973,"meta":63,"style":63},"data.qpos[1] = 0.1\n",[65,112339,112340],{"__ignoreMap":63},[68,112341,112342,112344,112346,112348,112350],{"class":70,"line":71},[68,112343,106272],{"class":85},[68,112345,99],{"class":92},[68,112347,6042],{"class":85},[68,112349,869],{"class":102},[68,112351,111713],{"class":92},[19,112353,112354,112355,112357,112358,112360],{},"手动设置杆子的初始角度。因为 ",[65,112356,107029],{}," 是小车位置，",[65,112359,107032],{}," 是杆子角度，所以这里改的是杆子。",[58,112362,112363],{"className":31971,"code":106116,"language":31973,"meta":63,"style":63},[65,112364,112365],{"__ignoreMap":63},[68,112366,112367],{"class":70,"line":71},[68,112368,106116],{"class":85},[19,112370,107075,112371,112373],{},[65,112372,105603],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[58,112375,112377],{"className":31971,"code":112376,"language":31973,"meta":63,"style":63},"total_reward = 0.0\n",[65,112378,112379],{"__ignoreMap":63},[68,112380,112381,112384,112386],{"class":70,"line":71},[68,112382,112383],{"class":85},"total_reward ",[68,112385,869],{"class":102},[68,112387,106334],{"class":92},[19,112389,112390],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[58,112392,112394],{"className":31971,"code":112393,"language":31973,"meta":63,"style":63},"for step in range(1000):\n",[65,112395,112396],{"__ignoreMap":63},[68,112397,112398,112400,112402,112404,112406,112408,112410],{"class":70,"line":71},[68,112399,4624],{"class":102},[68,112401,33209],{"class":85},[68,112403,27637],{"class":102},[68,112405,34036],{"class":92},[68,112407,997],{"class":85},[68,112409,8009],{"class":92},[68,112411,32379],{"class":85},[19,112413,112414,112415,112417],{},"循环 1000 步。",[65,112416,108707],{}," 是当前步数，从 0 到 999。",[58,112419,112421],{"className":31971,"code":112420,"language":31973,"meta":63,"style":63},"obs = get_observation(data)\n",[65,112422,112423],{"__ignoreMap":63},[68,112424,112425,112428,112430],{"class":70,"line":71},[68,112426,112427],{"class":85},"obs ",[68,112429,869],{"class":102},[68,112431,111760],{"class":85},[19,112433,112434,112435,29978],{},"读取当前状态，保存到 ",[65,112436,112246],{},[58,112438,112440],{"className":31971,"code":112439,"language":31973,"meta":63,"style":63},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[65,112441,112442,112454],{"__ignoreMap":63},[68,112443,112444,112446,112448,112450,112452],{"class":70,"line":71},[68,112445,112270],{"class":85},[68,112447,869],{"class":102},[68,112449,111609],{"class":85},[68,112451,99],{"class":92},[68,112453,34839],{"class":85},[68,112455,112456,112459,112461,112463,112465],{"class":70,"line":78},[68,112457,112458],{"class":85},"pole_angular_velocity ",[68,112460,869],{"class":102},[68,112462,111609],{"class":85},[68,112464,288],{"class":92},[68,112466,34839],{"class":85},[19,112468,112469,112470,112473,112474,29978],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[65,112471,112472],{},"obs[3]","？因为 obs 的顺序是 ",[65,112475,112476],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[58,112478,112480],{"className":31971,"code":112479,"language":31973,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[65,112481,112482],{"__ignoreMap":63},[68,112483,112484,112486,112488,112490,112492,112494,112496,112498,112500],{"class":70,"line":71},[68,112485,109015],{"class":85},[68,112487,869],{"class":102},[68,112489,111800],{"class":92},[68,112491,8117],{"class":102},[68,112493,111393],{"class":85},[68,112495,2217],{"class":102},[68,112497,63451],{"class":92},[68,112499,8117],{"class":102},[68,112501,111813],{"class":85},[19,112503,112504,112505,102592,112507,112509],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[65,112506,106833],{},[65,112508,36922],{}," 是人为设置的系数，不是固定公式。",[58,112511,112513],{"className":31971,"code":112512,"language":31973,"meta":63,"style":63},"action = np.clip(action, -1.0, 1.0)\n",[65,112514,112515],{"__ignoreMap":63},[68,112516,112517,112519,112521,112523,112525,112527,112529,112531],{"class":70,"line":71},[68,112518,109015],{"class":85},[68,112520,869],{"class":102},[68,112522,109020],{"class":85},[68,112524,2268],{"class":102},[68,112526,103977],{"class":92},[68,112528,1002],{"class":85},[68,112530,103977],{"class":92},[68,112532,1757],{"class":85},[19,112534,112535],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[58,112537,112538],{"className":31971,"code":111346,"language":31973,"meta":63,"style":63},[65,112539,112540],{"__ignoreMap":63},[68,112541,112542,112544,112546,112548,112550],{"class":70,"line":71},[68,112543,107444],{"class":85},[68,112545,600],{"class":92},[68,112547,6042],{"class":85},[68,112549,869],{"class":102},[68,112551,109043],{"class":85},[19,112553,112554],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[58,112556,112557],{"className":31971,"code":106078,"language":31973,"meta":63,"style":63},[65,112558,112559],{"__ignoreMap":63},[68,112560,112561],{"class":70,"line":71},[68,112562,106078],{"class":85},[19,112564,112565,112566,112568],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[65,112567,107699],{}," 计算小车和杆子的下一刻状态。",[58,112570,112572],{"className":31971,"code":112571,"language":31973,"meta":63,"style":63},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[65,112573,112574,112583],{"__ignoreMap":63},[68,112575,112576,112579,112581],{"class":70,"line":71},[68,112577,112578],{"class":85},"reward ",[68,112580,869],{"class":102},[68,112582,111865],{"class":85},[68,112584,112585,112587,112589],{"class":70,"line":78},[68,112586,112383],{"class":85},[68,112588,11075],{"class":102},[68,112590,111875],{"class":85},[19,112592,112593,112594,112596,112597,112600,112601,29978],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[65,112595,11075],{}," 是简写，",[65,112598,112599],{},"total_reward += reward"," 等价于 ",[65,112602,112603],{},"total_reward = total_reward + reward",[58,112605,112607],{"className":31971,"code":112606,"language":31973,"meta":63,"style":63},"if step % 100 == 0:\n",[65,112608,112609],{"__ignoreMap":63},[68,112610,112611,112613,112615,112617,112619,112621,112623],{"class":70,"line":71},[68,112612,3134],{"class":102},[68,112614,33209],{"class":85},[68,112616,2064],{"class":102},[68,112618,7353],{"class":92},[68,112620,103133],{"class":102},[68,112622,5692],{"class":92},[68,112624,5338],{"class":85},[19,112626,112627,112629,112630,112633],{},[65,112628,2064],{}," 是取余数。",[65,112631,112632],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[58,112635,112637],{"className":31971,"code":112636,"language":31973,"meta":63,"style":63},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[65,112638,112639],{"__ignoreMap":63},[68,112640,112641,112643,112645,112647,112649,112651,112653,112655,112657,112659,112661,112663,112665,112667,112669,112671],{"class":70,"line":71},[68,112642,32008],{"class":92},[68,112644,997],{"class":85},[68,112646,111904],{"class":872},[68,112648,111907],{"class":85},[68,112650,111910],{"class":872},[68,112652,111913],{"class":85},[68,112654,288],{"class":92},[68,112656,111918],{"class":85},[68,112658,111921],{"class":872},[68,112660,1002],{"class":85},[68,112662,33611],{"class":92},[68,112664,997],{"class":85},[68,112666,1790],{"class":92},[68,112668,111932],{"class":85},[68,112670,288],{"class":92},[68,112672,32090],{"class":85},[19,112674,112675,112676,112679,112680,112683],{},"打印当前步数、观测和动作。",[65,112677,112678],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[65,112681,112682],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112685,103890],{"id":103889},[19,112687,112688],{},"观测向量:",[58,112690,112693],{"className":112691,"code":112692,"language":6786,"meta":63},[6784],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[65,112694,112692],{"__ignoreMap":63},[19,112696,112697],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112699,112700],{},"每隔 100 步会打印一次：",[58,112702,112705],{"className":112703,"code":112704,"language":6786,"meta":63},[6784],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[65,112706,112704],{"__ignoreMap":63},[19,112708,112709],{},"重点观察：",[48,112711,112712,112718,112723],{},[51,112713,112714,112717],{},[65,112715,112716],{},"pole_angle"," 是否越来越大。",[51,112719,112720,112722],{},[65,112721,111299],{}," 是否跑得太远。",[51,112724,112725,112726,84116,112728,29978],{},"action 是否经常被 clip 到 ",[65,112727,105488],{},[65,112729,99],{},[19,112731,112732],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112734,103922],{"id":103921},[48,112736,112737,112743,112746,112752,112762,112768,112771],{},[51,112738,112739,112740,29978],{},"把初始角度改为 ",[65,112741,112742],{},"data.qpos[1] = 0.3",[51,112744,112745],{},"重新运行，观察控制是否变差。",[51,112747,112748,112749,112751],{},"把 actuator ",[65,112750,108640],{}," 改小。",[51,112753,112754,112755,112758,112759,29978],{},"打印 ",[65,112756,112757],{},"model.nq, model.nv, model.nu","，应为 ",[65,112760,112761],{},"2 2 1",[51,112763,112764,112765,112767],{},"把 reward 里的 ",[65,112766,112333],{}," 系数改大，观察总奖励变化。",[51,112769,112770],{},"把控制器改成反号，观察杆子是否更容易倒。",[51,112772,112773],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112775,104027],{"id":104026},[43,112777,112778],{"id":112778},"杆子方向和预期不一致",[19,112780,103970,112781,112783,112784,112786],{},[65,112782,107812],{}," 和 capsule 的 ",[65,112785,104749],{},"，必要时用 viewer 可视化确认。",[43,112788,112789],{"id":112789},"控制器越控越倒",[19,112791,112792],{},"说明反馈符号可能反了，尝试:",[58,112794,112796],{"className":31971,"code":112795,"language":31973,"meta":63,"style":63},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[65,112797,112798],{"__ignoreMap":63},[68,112799,112800,112802,112804,112806,112808,112810,112812,112814,112816,112818],{"class":70,"line":71},[68,112801,109015],{"class":85},[68,112803,869],{"class":102},[68,112805,53856],{"class":102},[68,112807,106833],{"class":92},[68,112809,8117],{"class":102},[68,112811,111393],{"class":85},[68,112813,2268],{"class":102},[68,112815,63451],{"class":92},[68,112817,8117],{"class":102},[68,112819,111813],{"class":85},[43,112821,112822],{"id":112822},"小车飞走",[19,112824,112825,112826,112828,112829,112832],{},"降低 ",[65,112827,108640],{}," 或缩小 ",[65,112830,112831],{},"action"," 的 clip 范围。",[43,112834,112836,112838],{"id":112835},"obs3-为什么是杆子角速度",[65,112837,112472],{}," 为什么是杆子角速度",[19,112840,112841],{},"因为这个模型里：",[58,112843,112846],{"className":112844,"code":112845,"language":6786,"meta":63},[6784],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[65,112847,112845],{"__ignoreMap":63},[19,112849,111320],{},[58,112851,112854],{"className":112852,"code":112853,"language":6786,"meta":63},[6784],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[65,112855,112853],{"__ignoreMap":63},[43,112857,112859],{"id":112858},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112861,112862],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112864,104181],{"id":104180},[19,112866,112867],{},"一个控制任务通常包含：",[48,112869,112870,112873,112881,112886,112889],{},[51,112871,112872],{},"模型：Cartpole 的 body、joint、actuator。",[51,112874,112875,112876,1949,112878,112880],{},"观测：从 ",[65,112877,105603],{},[65,112879,105933],{}," 里取状态。",[51,112882,112883,112884,29978],{},"动作：写入 ",[65,112885,102650],{},[51,112887,112888],{},"奖励：根据任务目标打分。",[51,112890,112891],{},"循环：obs -> action -> step -> reward。",[19,112893,112894],{},"这就是后面 Gymnasium 环境的基本骨架。",[1652,112896,105859],{},{"title":63,"searchDepth":78,"depth":78,"links":112898},[112899,112900,112901,112906,112910,112911,112912,112920],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":112902},[112903,112904,112905],{"id":111273,"depth":89,"text":111274},{"id":111338,"depth":89,"text":111339},{"id":111354,"depth":89,"text":111355},{"id":102826,"depth":78,"text":102827,"children":112907},[112908,112909],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":112913},[112914,112915,112916,112917,112919],{"id":112778,"depth":89,"text":112778},{"id":112789,"depth":89,"text":112789},{"id":112822,"depth":89,"text":112822},{"id":112835,"depth":89,"text":112918},"obs[3] 为什么是杆子角速度",{"id":112858,"depth":89,"text":112859},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111009,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112927,"title":112928,"body":112929,"description":63,"extension":1677,"meta":114943,"navigation":1679,"path":114944,"seo":114945,"stem":114946,"__hash__":114947},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112930,"toc":114919},[112931,112934,112936,112939,112941,112958,112961,112964,112970,112973,112975,112977,113001,113003,113017,113019,113060,113062,113080,113082,113085,113091,113094,113122,113126,113132,113157,113160,113191,113198,113201,113204,113210,113213,113219,113222,113228,113232,113235,113260,113263,113265,114025,114027,114039,114041,114052,114054,114057,114074,114077,114079,114090,114093,114095,114141,114144,114157,114160,114242,114245,114247,114263,114273,114286,114289,114328,114338,114349,114359,114372,114375,114404,114407,114417,114420,114426,114443,114454,114456,114462,114479,114490,114511,114514,114526,114529,114550,114553,114561,114569,114586,114589,114658,114665,114673,114676,114689,114696,114698,114701,114707,114710,114713,114719,114725,114727,114767,114769,114775,114784,114787,114789,114809,114812,114815,114821,114825,114827,114854,114857,114860,114887,114893,114896,114899,114901,114904,114907,114913,114916],[10,112932,112928],{"id":112933},"_7控制任务reacher-机械臂到达目标",[14,112935,102221],{"id":102220},[19,112937,112938],{},"本章搭建一个二维两关节 reacher 任务。",[19,112940,105904],{},[48,112942,112943,112946,112949,112952,112955],{},[51,112944,112945],{},"两个 hinge joint",[51,112947,112948],{},"两个 motor actuator",[51,112950,112951],{},"site 作为末端点和目标点",[51,112953,112954],{},"根据末端和目标距离设计 reward",[51,112956,112957],{},"构造机械臂任务的基本形式",[19,112959,112960],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112962,112963],{},"Reacher 任务可以理解为：",[58,112965,112968],{"className":112966,"code":112967,"language":6786,"meta":63},[6784],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[65,112969,112967],{"__ignoreMap":63},[19,112971,112972],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112974,102344],{"id":102343},[19,112976,102347],{},[58,112978,112979],{"className":25416,"code":105961,"language":25418,"meta":63,"style":63},[65,112980,112981],{"__ignoreMap":63},[68,112982,112983,112985,112987,112989,112991,112993,112995,112997,112999],{"class":70,"line":71},[68,112984,26171],{"class":587},[68,112986,27909],{"class":872},[68,112988,25428],{"class":872},[68,112990,27994],{"class":92},[68,112992,105976],{"class":872},[68,112994,102372],{"class":872},[68,112996,104075],{"class":872},[68,112998,102388],{"class":872},[68,113000,105985],{"class":872},[19,113002,104392],{},[58,113004,113005],{"className":25416,"code":102493,"language":25418,"meta":63,"style":63},[65,113006,113007],{"__ignoreMap":63},[68,113008,113009,113011,113013,113015],{"class":70,"line":71},[68,113010,25425],{"class":587},[68,113012,25428],{"class":872},[68,113014,102504],{"class":872},[68,113016,102507],{"class":872},[19,113018,104409],{},[58,113020,113022],{"className":25416,"code":113021,"language":25418,"meta":63,"style":63},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[65,113023,113024,113041,113050],{"__ignoreMap":63},[68,113025,113026,113028,113030,113032,113035,113037,113039],{"class":70,"line":71},[68,113027,31923],{"class":587},[68,113029,30769],{"class":872},[68,113031,26710],{"class":92},[68,113033,113034],{"class":872}," mujoco-reacher",[68,113036,102549],{"class":872},[68,113038,102552],{"class":92},[68,113040,102555],{"class":92},[68,113042,113043,113045,113047],{"class":70,"line":78},[68,113044,31923],{"class":587},[68,113046,102562],{"class":872},[68,113048,113049],{"class":872}," mujoco-reacher\n",[68,113051,113052,113054,113056,113058],{"class":70,"line":89},[68,113053,25425],{"class":587},[68,113055,25428],{"class":872},[68,113057,102504],{"class":872},[68,113059,102507],{"class":872},[19,113061,102578],{},[48,113063,113064,113067,113070],{},[51,113065,113066],{},"本章使用低维状态，不使用图像输入。",[51,113068,113069],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[51,113071,113072,113073,1949,113075,1949,113077,113079],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[65,113074,105603],{},[65,113076,105933],{},[65,113078,105253],{}," 的方法一致。",[14,113081,102619],{"id":102618},[19,113083,113084],{},"Reacher 任务核心:",[58,113086,113089],{"className":113087,"code":113088,"language":6786,"meta":63},[6784],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[65,113090,113088],{"__ignoreMap":63},[19,113092,113093],{},"读取 site 世界坐标:",[58,113095,113097],{"className":31971,"code":113096,"language":31973,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[65,113098,113099,113112],{"__ignoreMap":63},[68,113100,113101,113103,113105,113107,113110],{"class":70,"line":71},[68,113102,105207],{"class":85},[68,113104,869],{"class":102},[68,113106,104978],{"class":85},[68,113108,113109],{"class":872},"\"tip\"",[68,113111,1757],{"class":85},[68,113113,113114,113117,113119],{"class":70,"line":78},[68,113115,113116],{"class":85},"tip_pos ",[68,113118,869],{"class":102},[68,113120,113121],{"class":85}," data.site_xpos[site_id]\n",[43,113123,113125],{"id":113124},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113127,113128,113129,113131],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[65,113130,105603],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[58,113133,113135],{"className":31971,"code":113134,"language":31973,"meta":63,"style":63},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[65,113136,113137,113147],{"__ignoreMap":63},[68,113138,113139,113142,113144],{"class":70,"line":71},[68,113140,113141],{"class":85},"tip ",[68,113143,869],{"class":102},[68,113145,113146],{"class":85}," data.site_xpos[tip_site_id]\n",[68,113148,113149,113152,113154],{"class":70,"line":78},[68,113150,113151],{"class":85},"target ",[68,113153,869],{"class":102},[68,113155,113156],{"class":85}," data.site_xpos[target_site_id]\n",[19,113158,113159],{},"这样 reward 就很容易写：",[58,113161,113163],{"className":31971,"code":113162,"language":31973,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[65,113164,113165,113180],{"__ignoreMap":63},[68,113166,113167,113170,113172,113175,113177],{"class":70,"line":71},[68,113168,113169],{"class":85},"dist ",[68,113171,869],{"class":102},[68,113173,113174],{"class":85}," np.linalg.norm(tip ",[68,113176,2268],{"class":102},[68,113178,113179],{"class":85}," target)\n",[68,113181,113182,113184,113186,113188],{"class":70,"line":78},[68,113183,112578],{"class":85},[68,113185,869],{"class":102},[68,113187,53856],{"class":102},[68,113189,113190],{"class":85},"dist\n",[19,113192,113193,113194,113197],{},"距离越小，",[65,113195,113196],{},"-dist"," 越接近 0，奖励越高。",[43,113199,113200],{"id":113200},"两关节机械臂的状态",[19,113202,113203],{},"这个模型有两个 hinge joint：",[58,113205,113208],{"className":113206,"code":113207,"language":6786,"meta":63},[6784],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[65,113209,113207],{"__ignoreMap":63},[19,113211,113212],{},"再加上末端和目标位置：",[58,113214,113217],{"className":113215,"code":113216,"language":6786,"meta":63},[6784],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[65,113218,113216],{"__ignoreMap":63},[19,113220,113221],{},"总维度：",[58,113223,113226],{"className":113224,"code":113225,"language":6786,"meta":63},[6784],"2 + 2 + 3 + 3 = 10\n",[65,113227,113225],{"__ignoreMap":63},[43,113229,113231],{"id":113230},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113233,113234],{},"本章把重力设为：",[58,113236,113238],{"className":54652,"code":113237,"language":54654,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[65,113239,113240],{"__ignoreMap":63},[68,113241,113242,113244,113246,113248,113250,113252,113254,113256,113258],{"class":70,"line":71},[68,113243,861],{"class":85},[68,113245,70748],{"class":81},[68,113247,102768],{"class":587},[68,113249,869],{"class":85},[68,113251,102773],{"class":872},[68,113253,102776],{"class":587},[68,113255,869],{"class":85},[68,113257,105344],{"class":872},[68,113259,102718],{"class":85},[19,113261,113262],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113264,102827],{"id":102826},[58,113266,113268],{"className":31971,"code":113267,"language":31973,"meta":63,"style":63},"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",[65,113269,113270,113276,113286,113290,113294,113302,113307,113312,113316,113320,113325,113330,113334,113339,113344,113349,113353,113358,113363,113368,113373,113377,113381,113385,113389,113393,113398,113403,113407,113411,113415,113419,113423,113438,113447,113459,113482,113489,113493,113497,113507,113521,113535,113542,113546,113550,113564,113576,113588,113601,113616,113633,113637,113641,113653,113665,113673,113681,113685,113701,113706,113719,113732,113747,113751,113786,113818,113822,113826,113835,113839,113855,113865,113876,113892,113908,113924,113940,113944,113962,113982,114001,114005,114009,114021],{"__ignoreMap":63},[68,113271,113272,113274],{"class":70,"line":71},[68,113273,31985],{"class":102},[68,113275,102875],{"class":85},[68,113277,113278,113280,113282,113284],{"class":70,"line":78},[68,113279,31985],{"class":102},[68,113281,32973],{"class":85},[68,113283,32976],{"class":102},[68,113285,32979],{"class":85},[68,113287,113288],{"class":70,"line":89},[68,113289,4000],{"emptyLinePlaceholder":1679},[68,113291,113292],{"class":70,"line":115},[68,113293,4000],{"emptyLinePlaceholder":1679},[68,113295,113296,113298,113300],{"class":70,"line":280},[68,113297,102888],{"class":92},[68,113299,15161],{"class":102},[68,113301,102893],{"class":872},[68,113303,113304],{"class":70,"line":301},[68,113305,113306],{"class":872},"\u003Cmujoco model=\"two_link_reacher\">\n",[68,113308,113309],{"class":70,"line":320},[68,113310,113311],{"class":872},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[68,113313,113314],{"class":70,"line":2915},[68,113315,4000],{"emptyLinePlaceholder":1679},[68,113317,113318],{"class":70,"line":2921},[68,113319,102912],{"class":872},[68,113321,113322],{"class":70,"line":2933},[68,113323,113324],{"class":872},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[68,113326,113327],{"class":70,"line":3214},[68,113328,113329],{"class":872},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[68,113331,113332],{"class":70,"line":3219},[68,113333,4000],{"emptyLinePlaceholder":1679},[68,113335,113336],{"class":70,"line":3225},[68,113337,113338],{"class":872},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[68,113340,113341],{"class":70,"line":3230},[68,113342,113343],{"class":872},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,113345,113346],{"class":70,"line":3244},[68,113347,113348],{"class":872},"      \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",[68,113350,113351],{"class":70,"line":3249},[68,113352,4000],{"emptyLinePlaceholder":1679},[68,113354,113355],{"class":70,"line":3255},[68,113356,113357],{"class":872},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[68,113359,113360],{"class":70,"line":3276},[68,113361,113362],{"class":872},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,113364,113365],{"class":70,"line":3281},[68,113366,113367],{"class":872},"        \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",[68,113369,113370],{"class":70,"line":3295},[68,113371,113372],{"class":872},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[68,113374,113375],{"class":70,"line":3300},[68,113376,108011],{"class":872},[68,113378,113379],{"class":70,"line":3329},[68,113380,102941],{"class":872},[68,113382,113383],{"class":70,"line":3334},[68,113384,102946],{"class":872},[68,113386,113387],{"class":70,"line":3351},[68,113388,4000],{"emptyLinePlaceholder":1679},[68,113390,113391],{"class":70,"line":3356},[68,113392,108028],{"class":872},[68,113394,113395],{"class":70,"line":3361},[68,113396,113397],{"class":872},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,113399,113400],{"class":70,"line":3366},[68,113401,113402],{"class":872},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,113404,113405],{"class":70,"line":3380},[68,113406,108038],{"class":872},[68,113408,113409],{"class":70,"line":3385},[68,113410,102951],{"class":872},[68,113412,113413],{"class":70,"line":4177},[68,113414,97273],{"class":872},[68,113416,113417],{"class":70,"line":4191},[68,113418,4000],{"emptyLinePlaceholder":1679},[68,113420,113421],{"class":70,"line":4199},[68,113422,4000],{"emptyLinePlaceholder":1679},[68,113424,113425,113427,113430,113433,113435],{"class":70,"line":4204},[68,113426,33540],{"class":102},[68,113428,113429],{"class":587}," site_position",[68,113431,113432],{"class":85},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[68,113434,2903],{"class":92},[68,113436,113437],{"class":85},") -> np.ndarray:\n",[68,113439,113440,113442,113444],{"class":70,"line":4210},[68,113441,104973],{"class":85},[68,113443,869],{"class":102},[68,113445,113446],{"class":85}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[68,113448,113449,113451,113453,113455,113457],{"class":70,"line":4216},[68,113450,4700],{"class":102},[68,113452,105022],{"class":85},[68,113454,861],{"class":102},[68,113456,5692],{"class":92},[68,113458,5338],{"class":85},[68,113460,113461,113463,113465,113467,113469,113472,113474,113476,113478,113480],{"class":70,"line":4221},[68,113462,105005],{"class":102},[68,113464,105008],{"class":92},[68,113466,997],{"class":85},[68,113468,1801],{"class":102},[68,113470,113471],{"class":872},"\"site not found: ",[68,113473,2632],{"class":92},[68,113475,81387],{"class":85},[68,113477,2681],{"class":92},[68,113479,1987],{"class":872},[68,113481,1757],{"class":85},[68,113483,113484,113486],{"class":70,"line":9547},[68,113485,5689],{"class":102},[68,113487,113488],{"class":85}," data.site_xpos[site_id].copy()\n",[68,113490,113491],{"class":70,"line":9571},[68,113492,4000],{"emptyLinePlaceholder":1679},[68,113494,113495],{"class":70,"line":9576},[68,113496,4000],{"emptyLinePlaceholder":1679},[68,113498,113499,113501,113504],{"class":70,"line":9582},[68,113500,33540],{"class":102},[68,113502,113503],{"class":587}," get_obs",[68,113505,113506],{"class":85},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[68,113508,113509,113512,113514,113517,113519],{"class":70,"line":9609},[68,113510,113511],{"class":85},"    tip ",[68,113513,869],{"class":102},[68,113515,113516],{"class":85}," site_position(model, data, ",[68,113518,113109],{"class":872},[68,113520,1757],{"class":85},[68,113522,113523,113526,113528,113530,113533],{"class":70,"line":9614},[68,113524,113525],{"class":85},"    target ",[68,113527,869],{"class":102},[68,113529,113516],{"class":85},[68,113531,113532],{"class":872},"\"target\"",[68,113534,1757],{"class":85},[68,113536,113537,113539],{"class":70,"line":9620},[68,113538,5689],{"class":102},[68,113540,113541],{"class":85}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[68,113543,113544],{"class":70,"line":9632},[68,113545,4000],{"emptyLinePlaceholder":1679},[68,113547,113548],{"class":70,"line":9644},[68,113549,4000],{"emptyLinePlaceholder":1679},[68,113551,113552,113554,113557,113560,113562],{"class":70,"line":9656},[68,113553,33540],{"class":102},[68,113555,113556],{"class":587}," reward",[68,113558,113559],{"class":85},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[68,113561,1790],{"class":92},[68,113563,5338],{"class":85},[68,113565,113566,113568,113570,113572,113574],{"class":70,"line":11314},[68,113567,113511],{"class":85},[68,113569,869],{"class":102},[68,113571,113516],{"class":85},[68,113573,113109],{"class":872},[68,113575,1757],{"class":85},[68,113577,113578,113580,113582,113584,113586],{"class":70,"line":11339},[68,113579,113525],{"class":85},[68,113581,869],{"class":102},[68,113583,113516],{"class":85},[68,113585,113532],{"class":872},[68,113587,1757],{"class":85},[68,113589,113590,113593,113595,113597,113599],{"class":70,"line":11362},[68,113591,113592],{"class":85},"    dist ",[68,113594,869],{"class":102},[68,113596,113174],{"class":85},[68,113598,2268],{"class":102},[68,113600,113179],{"class":85},[68,113602,113603,113606,113608,113611,113613],{"class":70,"line":11386},[68,113604,113605],{"class":85},"    control_cost ",[68,113607,869],{"class":102},[68,113609,113610],{"class":92}," 0.01",[68,113612,8117],{"class":102},[68,113614,113615],{"class":85}," np.sum(np.square(data.ctrl))\n",[68,113617,113618,113620,113622,113624,113626,113628,113630],{"class":70,"line":11391},[68,113619,5689],{"class":102},[68,113621,111370],{"class":92},[68,113623,997],{"class":85},[68,113625,2268],{"class":102},[68,113627,113169],{"class":85},[68,113629,2268],{"class":102},[68,113631,113632],{"class":85}," control_cost)\n",[68,113634,113635],{"class":70,"line":11396},[68,113636,4000],{"emptyLinePlaceholder":1679},[68,113638,113639],{"class":70,"line":11401},[68,113640,4000],{"emptyLinePlaceholder":1679},[68,113642,113643,113645,113647,113649,113651],{"class":70,"line":11410},[68,113644,33540],{"class":102},[68,113646,3574],{"class":587},[68,113648,102972],{"class":85},[68,113650,97261],{"class":92},[68,113652,5338],{"class":85},[68,113654,113655,113657,113659,113661,113663],{"class":70,"line":11415},[68,113656,102981],{"class":85},[68,113658,869],{"class":102},[68,113660,102986],{"class":85},[68,113662,102888],{"class":92},[68,113664,1757],{"class":85},[68,113666,113667,113669,113671],{"class":70,"line":11421},[68,113668,102995],{"class":85},[68,113670,869],{"class":102},[68,113672,103000],{"class":85},[68,113674,113675,113677,113679],{"class":70,"line":11442},[68,113676,111726],{"class":85},[68,113678,869],{"class":102},[68,113680,106334],{"class":92},[68,113682,113683],{"class":70,"line":11448},[68,113684,4000],{"emptyLinePlaceholder":1679},[68,113686,113687,113689,113691,113693,113695,113697,113699],{"class":70,"line":11462},[68,113688,4800],{"class":102},[68,113690,33209],{"class":85},[68,113692,27637],{"class":102},[68,113694,34036],{"class":92},[68,113696,997],{"class":85},[68,113698,66656],{"class":92},[68,113700,32379],{"class":85},[68,113702,113703],{"class":70,"line":11468},[68,113704,113705],{"class":85},"        mujoco.mj_forward(model, data)\n",[68,113707,113708,113711,113713,113715,113717],{"class":70,"line":11495},[68,113709,113710],{"class":85},"        tip ",[68,113712,869],{"class":102},[68,113714,113516],{"class":85},[68,113716,113109],{"class":872},[68,113718,1757],{"class":85},[68,113720,113721,113724,113726,113728,113730],{"class":70,"line":11504},[68,113722,113723],{"class":85},"        target ",[68,113725,869],{"class":102},[68,113727,113516],{"class":85},[68,113729,113532],{"class":872},[68,113731,1757],{"class":85},[68,113733,113734,113737,113739,113742,113744],{"class":70,"line":11510},[68,113735,113736],{"class":85},"        error ",[68,113738,869],{"class":102},[68,113740,113741],{"class":85}," target ",[68,113743,2268],{"class":102},[68,113745,113746],{"class":85}," tip\n",[68,113748,113749],{"class":70,"line":11518},[68,113750,4000],{"emptyLinePlaceholder":1679},[68,113752,113753,113755,113757,113759,113761,113764,113766,113768,113771,113773,113776,113778,113780,113782,113784],{"class":70,"line":11523},[68,113754,108190],{"class":85},[68,113756,600],{"class":92},[68,113758,6042],{"class":85},[68,113760,869],{"class":102},[68,113762,113763],{"class":85}," np.clip(",[68,113765,106833],{"class":92},[68,113767,8117],{"class":102},[68,113769,113770],{"class":85}," error[",[68,113772,267],{"class":92},[68,113774,113775],{"class":85},"], ",[68,113777,2268],{"class":102},[68,113779,103977],{"class":92},[68,113781,1002],{"class":85},[68,113783,103977],{"class":92},[68,113785,1757],{"class":85},[68,113787,113788,113790,113792,113794,113796,113798,113800,113802,113804,113806,113808,113810,113812,113814,113816],{"class":70,"line":18199},[68,113789,108190],{"class":85},[68,113791,99],{"class":92},[68,113793,6042],{"class":85},[68,113795,869],{"class":102},[68,113797,113763],{"class":85},[68,113799,106833],{"class":92},[68,113801,8117],{"class":102},[68,113803,113770],{"class":85},[68,113805,600],{"class":92},[68,113807,113775],{"class":85},[68,113809,2268],{"class":102},[68,113811,103977],{"class":92},[68,113813,1002],{"class":85},[68,113815,103977],{"class":92},[68,113817,1757],{"class":85},[68,113819,113820],{"class":70,"line":18205},[68,113821,4000],{"emptyLinePlaceholder":1679},[68,113823,113824],{"class":70,"line":18228},[68,113825,103090],{"class":85},[68,113827,113828,113830,113832],{"class":70,"line":18234},[68,113829,111870],{"class":85},[68,113831,11075],{"class":102},[68,113833,113834],{"class":85}," reward(model, data)\n",[68,113836,113837],{"class":70,"line":18257},[68,113838,4000],{"emptyLinePlaceholder":1679},[68,113840,113841,113843,113845,113847,113849,113851,113853],{"class":70,"line":18271},[68,113842,4097],{"class":102},[68,113844,33209],{"class":85},[68,113846,2064],{"class":102},[68,113848,7353],{"class":92},[68,113850,103133],{"class":102},[68,113852,5692],{"class":92},[68,113854,5338],{"class":85},[68,113856,113857,113860,113862],{"class":70,"line":18291},[68,113858,113859],{"class":85},"            obs ",[68,113861,869],{"class":102},[68,113863,113864],{"class":85}," get_obs(model, data)\n",[68,113866,113867,113869,113871,113873],{"class":70,"line":18297},[68,113868,36243],{"class":92},[68,113870,997],{"class":85},[68,113872,111904],{"class":872},[68,113874,113875],{"class":85},", step)\n",[68,113877,113878,113880,113882,113885,113888,113890],{"class":70,"line":18308},[68,113879,36243],{"class":92},[68,113881,997],{"class":85},[68,113883,113884],{"class":872},"\"  tip:\"",[68,113886,113887],{"class":85},", np.round(tip, ",[68,113889,288],{"class":92},[68,113891,32090],{"class":85},[68,113893,113894,113896,113898,113901,113904,113906],{"class":70,"line":18331},[68,113895,36243],{"class":92},[68,113897,997],{"class":85},[68,113899,113900],{"class":872},"\"  target:\"",[68,113902,113903],{"class":85},", np.round(target, ",[68,113905,288],{"class":92},[68,113907,32090],{"class":85},[68,113909,113910,113912,113914,113917,113920,113922],{"class":70,"line":18353},[68,113911,36243],{"class":92},[68,113913,997],{"class":85},[68,113915,113916],{"class":872},"\"  ctrl:\"",[68,113918,113919],{"class":85},", np.round(data.ctrl.copy(), ",[68,113921,288],{"class":92},[68,113923,32090],{"class":85},[68,113925,113926,113928,113930,113933,113936,113938],{"class":70,"line":18358},[68,113927,36243],{"class":92},[68,113929,997],{"class":85},[68,113931,113932],{"class":872},"\"  obs_dim:\"",[68,113934,113935],{"class":85},", obs.shape[",[68,113937,600],{"class":92},[68,113939,6256],{"class":85},[68,113941,113942],{"class":70,"line":18364},[68,113943,4000],{"emptyLinePlaceholder":1679},[68,113945,113946,113948,113950,113952,113954,113956,113958,113960],{"class":70,"line":18378},[68,113947,32892],{"class":92},[68,113949,997],{"class":85},[68,113951,111949],{"class":872},[68,113953,1002],{"class":85},[68,113955,33611],{"class":92},[68,113957,111956],{"class":85},[68,113959,288],{"class":92},[68,113961,32090],{"class":85},[68,113963,113964,113966,113968,113971,113974,113976,113978,113980],{"class":70,"line":18391},[68,113965,32892],{"class":92},[68,113967,997],{"class":85},[68,113969,113970],{"class":872},"\"final tip:\"",[68,113972,113973],{"class":85},", np.round(site_position(model, data, ",[68,113975,113109],{"class":872},[68,113977,111918],{"class":85},[68,113979,288],{"class":92},[68,113981,32090],{"class":85},[68,113983,113984,113986,113988,113991,113993,113995,113997,113999],{"class":70,"line":18396},[68,113985,32892],{"class":92},[68,113987,997],{"class":85},[68,113989,113990],{"class":872},"\"target:\"",[68,113992,113973],{"class":85},[68,113994,113532],{"class":872},[68,113996,111918],{"class":85},[68,113998,288],{"class":92},[68,114000,32090],{"class":85},[68,114002,114003],{"class":70,"line":18410},[68,114004,4000],{"emptyLinePlaceholder":1679},[68,114006,114007],{"class":70,"line":18415},[68,114008,4000],{"emptyLinePlaceholder":1679},[68,114010,114011,114013,114015,114017,114019],{"class":70,"line":18421},[68,114012,3134],{"class":102},[68,114014,32813],{"class":92},[68,114016,103133],{"class":102},[68,114018,103136],{"class":872},[68,114020,5338],{"class":85},[68,114022,114023],{"class":70,"line":18426},[68,114024,103143],{"class":85},[19,114026,105143],{},[58,114028,114030],{"className":25416,"code":114029,"language":25418,"meta":63,"style":63},"touch ch7_reacher.py\n",[65,114031,114032],{"__ignoreMap":63},[68,114033,114034,114036],{"class":70,"line":71},[68,114035,102857],{"class":587},[68,114037,114038],{"class":872}," ch7_reacher.py\n",[19,114040,112017],{},[58,114042,114044],{"className":25416,"code":114043,"language":25418,"meta":63,"style":63},"python ch7_reacher.py\n",[65,114045,114046],{"__ignoreMap":63},[68,114047,114048,114050],{"class":70,"line":71},[68,114049,31973],{"class":587},[68,114051,114038],{"class":872},[43,114053,103146],{"id":103146},[19,114055,114056],{},"读取 site 坐标：",[58,114058,114060],{"className":31971,"code":114059,"language":31973,"meta":63,"style":63},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[65,114061,114062],{"__ignoreMap":63},[68,114063,114064,114066,114068,114070,114072],{"class":70,"line":71},[68,114065,33540],{"class":102},[68,114067,113429],{"class":587},[68,114069,113432],{"class":85},[68,114071,2903],{"class":92},[68,114073,113437],{"class":85},[19,114075,114076],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114078,112033],{},[58,114080,114082],{"className":31971,"code":114081,"language":31973,"meta":63,"style":63},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[65,114083,114084],{"__ignoreMap":63},[68,114085,114086,114088],{"class":70,"line":71},[68,114087,18641],{"class":102},[68,114089,113541],{"class":85},[19,114091,114092],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114094,111358],{},[58,114096,114098],{"className":31971,"code":114097,"language":31973,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[65,114099,114100,114112,114125],{"__ignoreMap":63},[68,114101,114102,114104,114106,114108,114110],{"class":70,"line":71},[68,114103,113169],{"class":85},[68,114105,869],{"class":102},[68,114107,113174],{"class":85},[68,114109,2268],{"class":102},[68,114111,113179],{"class":85},[68,114113,114114,114117,114119,114121,114123],{"class":70,"line":78},[68,114115,114116],{"class":85},"control_cost ",[68,114118,869],{"class":102},[68,114120,113610],{"class":92},[68,114122,8117],{"class":102},[68,114124,113615],{"class":85},[68,114126,114127,114129,114131,114133,114135,114137,114139],{"class":70,"line":89},[68,114128,18641],{"class":102},[68,114130,111370],{"class":92},[68,114132,997],{"class":85},[68,114134,2268],{"class":102},[68,114136,113169],{"class":85},[68,114138,2268],{"class":102},[68,114140,113632],{"class":85},[19,114142,114143],{},"奖励由两部分组成：",[48,114145,114146,114151],{},[51,114147,114148,114150],{},[65,114149,113196],{},"：末端离目标越远，奖励越低。",[51,114152,114153,114156],{},[65,114154,114155],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114158,114159],{},"简单控制器：",[58,114161,114163],{"className":31971,"code":114162,"language":31973,"meta":63,"style":63},"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",[65,114164,114165,114178,114210],{"__ignoreMap":63},[68,114166,114167,114170,114172,114174,114176],{"class":70,"line":71},[68,114168,114169],{"class":85},"error ",[68,114171,869],{"class":102},[68,114173,113741],{"class":85},[68,114175,2268],{"class":102},[68,114177,113746],{"class":85},[68,114179,114180,114182,114184,114186,114188,114190,114192,114194,114196,114198,114200,114202,114204,114206,114208],{"class":70,"line":78},[68,114181,107444],{"class":85},[68,114183,600],{"class":92},[68,114185,6042],{"class":85},[68,114187,869],{"class":102},[68,114189,113763],{"class":85},[68,114191,106833],{"class":92},[68,114193,8117],{"class":102},[68,114195,113770],{"class":85},[68,114197,267],{"class":92},[68,114199,113775],{"class":85},[68,114201,2268],{"class":102},[68,114203,103977],{"class":92},[68,114205,1002],{"class":85},[68,114207,103977],{"class":92},[68,114209,1757],{"class":85},[68,114211,114212,114214,114216,114218,114220,114222,114224,114226,114228,114230,114232,114234,114236,114238,114240],{"class":70,"line":89},[68,114213,107444],{"class":85},[68,114215,99],{"class":92},[68,114217,6042],{"class":85},[68,114219,869],{"class":102},[68,114221,113763],{"class":85},[68,114223,106833],{"class":92},[68,114225,8117],{"class":102},[68,114227,113770],{"class":85},[68,114229,600],{"class":92},[68,114231,113775],{"class":85},[68,114233,2268],{"class":102},[68,114235,103977],{"class":92},[68,114237,1002],{"class":85},[68,114239,103977],{"class":92},[68,114241,1757],{"class":85},[19,114243,114244],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[43,114246,103282],{"id":103282},[58,114248,114249],{"className":31971,"code":114059,"language":31973,"meta":63,"style":63},[65,114250,114251],{"__ignoreMap":63},[68,114252,114253,114255,114257,114259,114261],{"class":70,"line":71},[68,114254,33540],{"class":102},[68,114256,113429],{"class":587},[68,114258,113432],{"class":85},[68,114260,2903],{"class":92},[68,114262,113437],{"class":85},[19,114264,114265,114266,114268,114269,84116,114271,29978],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[65,114267,81387],{}," 是 site 的名字，比如 ",[65,114270,113109],{},[65,114272,113532],{},[58,114274,114276],{"className":31971,"code":114275,"language":31973,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[65,114277,114278],{"__ignoreMap":63},[68,114279,114280,114282,114284],{"class":70,"line":71},[68,114281,105207],{"class":85},[68,114283,869],{"class":102},[68,114285,113446],{"class":85},[19,114287,114288],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[58,114290,114292],{"className":31971,"code":114291,"language":31973,"meta":63,"style":63},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[65,114293,114294,114306],{"__ignoreMap":63},[68,114295,114296,114298,114300,114302,114304],{"class":70,"line":71},[68,114297,3134],{"class":102},[68,114299,105022],{"class":85},[68,114301,861],{"class":102},[68,114303,5692],{"class":92},[68,114305,5338],{"class":85},[68,114307,114308,114310,114312,114314,114316,114318,114320,114322,114324,114326],{"class":70,"line":78},[68,114309,105468],{"class":102},[68,114311,105008],{"class":92},[68,114313,997],{"class":85},[68,114315,1801],{"class":102},[68,114317,113471],{"class":872},[68,114319,2632],{"class":92},[68,114321,81387],{"class":85},[68,114323,2681],{"class":92},[68,114325,1987],{"class":872},[68,114327,1757],{"class":85},[19,114329,114330,114331,114334,114335,114337],{},"如果 site 没找到，就主动报错。",[65,114332,114333],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[65,114336,81387],{}," 的值放进字符串里。",[58,114339,114341],{"className":31971,"code":114340,"language":31973,"meta":63,"style":63},"return data.site_xpos[site_id].copy()\n",[65,114342,114343],{"__ignoreMap":63},[68,114344,114345,114347],{"class":70,"line":71},[68,114346,18641],{"class":102},[68,114348,113488],{"class":85},[19,114350,114351,114352,114354,114355,114358],{},"返回这个 site 的世界坐标。",[65,114353,105253],{}," 里的每一行都是一个 site 的 ",[65,114356,114357],{},"(x, y, z)"," 坐标。",[58,114360,114362],{"className":31971,"code":114361,"language":31973,"meta":63,"style":63},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[65,114363,114364],{"__ignoreMap":63},[68,114365,114366,114368,114370],{"class":70,"line":71},[68,114367,33540],{"class":102},[68,114369,113503],{"class":587},[68,114371,113506],{"class":85},[19,114373,114374],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[58,114376,114378],{"className":31971,"code":114377,"language":31973,"meta":63,"style":63},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[65,114379,114380,114392],{"__ignoreMap":63},[68,114381,114382,114384,114386,114388,114390],{"class":70,"line":71},[68,114383,113141],{"class":85},[68,114385,869],{"class":102},[68,114387,113516],{"class":85},[68,114389,113109],{"class":872},[68,114391,1757],{"class":85},[68,114393,114394,114396,114398,114400,114402],{"class":70,"line":78},[68,114395,113151],{"class":85},[68,114397,869],{"class":102},[68,114399,113516],{"class":85},[68,114401,113532],{"class":872},[68,114403,1757],{"class":85},[19,114405,114406],{},"分别读取末端点和目标点的世界坐标。",[58,114408,114409],{"className":31971,"code":114081,"language":31973,"meta":63,"style":63},[65,114410,114411],{"__ignoreMap":63},[68,114412,114413,114415],{"class":70,"line":71},[68,114414,18641],{"class":102},[68,114416,113541],{"class":85},[19,114418,114419],{},"把四部分拼成一个观测数组：",[58,114421,114424],{"className":114422,"code":114423,"language":6786,"meta":63},[6784],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[65,114425,114423],{"__ignoreMap":63},[58,114427,114429],{"className":31971,"code":114428,"language":31973,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\n",[65,114430,114431],{"__ignoreMap":63},[68,114432,114433,114435,114437,114439,114441],{"class":70,"line":71},[68,114434,113169],{"class":85},[68,114436,869],{"class":102},[68,114438,113174],{"class":85},[68,114440,2268],{"class":102},[68,114442,113179],{"class":85},[19,114444,114445,114446,114449,114450,114453],{},"计算 tip 到 target 的距离。",[65,114447,114448],{},"tip - target"," 得到一个三维向量，",[65,114451,114452],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114455,16230],{},[58,114457,114460],{"className":114458,"code":114459,"language":6786,"meta":63},[6784],"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",[65,114461,114459],{"__ignoreMap":63},[58,114463,114465],{"className":31971,"code":114464,"language":31973,"meta":63,"style":63},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[65,114466,114467],{"__ignoreMap":63},[68,114468,114469,114471,114473,114475,114477],{"class":70,"line":71},[68,114470,114116],{"class":85},[68,114472,869],{"class":102},[68,114474,113610],{"class":92},[68,114476,8117],{"class":102},[68,114478,113615],{"class":85},[19,114480,114481,114482,114485,114486,114489],{},"计算动作惩罚。",[65,114483,114484],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[65,114487,114488],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[58,114491,114493],{"className":31971,"code":114492,"language":31973,"meta":63,"style":63},"return float(-dist - control_cost)\n",[65,114494,114495],{"__ignoreMap":63},[68,114496,114497,114499,114501,114503,114505,114507,114509],{"class":70,"line":71},[68,114498,18641],{"class":102},[68,114500,111370],{"class":92},[68,114502,997],{"class":85},[68,114504,2268],{"class":102},[68,114506,113169],{"class":85},[68,114508,2268],{"class":102},[68,114510,113632],{"class":85},[19,114512,114513],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[58,114515,114516],{"className":31971,"code":112376,"language":31973,"meta":63,"style":63},[65,114517,114518],{"__ignoreMap":63},[68,114519,114520,114522,114524],{"class":70,"line":71},[68,114521,112383],{"class":85},[68,114523,869],{"class":102},[68,114525,106334],{"class":92},[19,114527,114528],{},"累计奖励变量，记录整个运行过程的总分。",[58,114530,114532],{"className":31971,"code":114531,"language":31973,"meta":63,"style":63},"for step in range(500):\n",[65,114533,114534],{"__ignoreMap":63},[68,114535,114536,114538,114540,114542,114544,114546,114548],{"class":70,"line":71},[68,114537,4624],{"class":102},[68,114539,33209],{"class":85},[68,114541,27637],{"class":102},[68,114543,34036],{"class":92},[68,114545,997],{"class":85},[68,114547,66656],{"class":92},[68,114549,32379],{"class":85},[19,114551,114552],{},"运行 500 个控制步。",[58,114554,114555],{"className":31971,"code":106116,"language":31973,"meta":63,"style":63},[65,114556,114557],{"__ignoreMap":63},[68,114558,114559],{"class":70,"line":71},[68,114560,106116],{"class":85},[19,114562,114563,114564,102592,114566,114568],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[65,114565,104804],{},[65,114567,104807],{}," 是当前状态下的坐标。",[58,114570,114572],{"className":31971,"code":114571,"language":31973,"meta":63,"style":63},"error = target - tip\n",[65,114573,114574],{"__ignoreMap":63},[68,114575,114576,114578,114580,114582,114584],{"class":70,"line":71},[68,114577,114169],{"class":85},[68,114579,869],{"class":102},[68,114581,113741],{"class":85},[68,114583,2268],{"class":102},[68,114585,113746],{"class":85},[19,114587,114588],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[58,114590,114592],{"className":31971,"code":114591,"language":31973,"meta":63,"style":63},"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",[65,114593,114594,114626],{"__ignoreMap":63},[68,114595,114596,114598,114600,114602,114604,114606,114608,114610,114612,114614,114616,114618,114620,114622,114624],{"class":70,"line":71},[68,114597,107444],{"class":85},[68,114599,600],{"class":92},[68,114601,6042],{"class":85},[68,114603,869],{"class":102},[68,114605,113763],{"class":85},[68,114607,106833],{"class":92},[68,114609,8117],{"class":102},[68,114611,113770],{"class":85},[68,114613,267],{"class":92},[68,114615,113775],{"class":85},[68,114617,2268],{"class":102},[68,114619,103977],{"class":92},[68,114621,1002],{"class":85},[68,114623,103977],{"class":92},[68,114625,1757],{"class":85},[68,114627,114628,114630,114632,114634,114636,114638,114640,114642,114644,114646,114648,114650,114652,114654,114656],{"class":70,"line":78},[68,114629,107444],{"class":85},[68,114631,99],{"class":92},[68,114633,6042],{"class":85},[68,114635,869],{"class":102},[68,114637,113763],{"class":85},[68,114639,106833],{"class":92},[68,114641,8117],{"class":102},[68,114643,113770],{"class":85},[68,114645,600],{"class":92},[68,114647,113775],{"class":85},[68,114649,2268],{"class":102},[68,114651,103977],{"class":92},[68,114653,1002],{"class":85},[68,114655,103977],{"class":92},[68,114657,1757],{"class":85},[19,114659,114660,114661,114664],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[65,114662,114663],{},"error -> ctrl -> step"," 的流程。",[58,114666,114667],{"className":31971,"code":106078,"language":31973,"meta":63,"style":63},[65,114668,114669],{"__ignoreMap":63},[68,114670,114671],{"class":70,"line":71},[68,114672,106078],{"class":85},[19,114674,114675],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[58,114677,114679],{"className":31971,"code":114678,"language":31973,"meta":63,"style":63},"obs = get_obs(model, data)\n",[65,114680,114681],{"__ignoreMap":63},[68,114682,114683,114685,114687],{"class":70,"line":71},[68,114684,112427],{"class":85},[68,114686,869],{"class":102},[68,114688,113864],{"class":85},[19,114690,114691,114692,114695],{},"读取最新观测。后面打印 ",[65,114693,114694],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114697,103890],{"id":103889},[19,114699,114700],{},"观测维度为:",[58,114702,114705],{"className":114703,"code":114704,"language":6786,"meta":63},[6784],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[65,114706,114704],{"__ignoreMap":63},[19,114708,114709],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114711,114712],{},"程序每 100 步打印：",[58,114714,114717],{"className":114715,"code":114716,"language":6786,"meta":63},[6784],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[65,114718,114716],{"__ignoreMap":63},[19,114720,114721,114722,114724],{},"如果控制有效，你应该看到最终 ",[65,114723,104804],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114726,103922],{"id":103921},[48,114728,114729,114732,114735,114741,114747,114754,114764],{},[51,114730,114731],{},"修改目标点位置。",[51,114733,114734],{},"重新运行，观察最终 tip 是否变化。",[51,114736,114737,114738,114740],{},"把 gravity 改成 ",[65,114739,104163],{},"，观察控制是否变差。",[51,114742,112754,114743,112758,114745,29978],{},[65,114744,103732],{},[65,114746,267],{},[51,114748,103985,114749,103988,114751,114753],{},[65,114750,112169],{},[65,114752,108880],{},"，观察机械臂是否更难移动。",[51,114755,103985,114756,84107,114758,103988,114760,114763],{},[65,114757,104807],{},[65,114759,105719],{},[65,114761,114762],{},"0.2 0 0.6","，观察 reward 和 final tip。",[51,114765,114766],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114768,104027],{"id":104026},[43,114770,114772],{"id":114771},"site-not-found",[65,114773,114774],{},"site not found",[19,114776,114777,114778,102592,114781,29978],{},"检查 XML 中是否有 ",[65,114779,114780],{},"site name=\"tip\"",[65,114782,114783],{},"site name=\"target\"",[43,114785,114786],{"id":114786},"机械臂完全不动",[19,114788,104097],{},[48,114790,114791,114796,114799,114804],{},[51,114792,114793,114795],{},[65,114794,103732],{}," 是否为 2",[51,114797,114798],{},"actuator 是否引用正确 joint",[51,114800,114801,114803],{},[65,114802,102650],{}," 是否被赋值",[51,114805,114806,114807],{},"是否执行了 ",[65,114808,102259],{},[43,114810,114811],{"id":114811},"控制效果不好",[19,114813,114814],{},"正常。本章重点不是控制器最优，而是任务结构:",[58,114816,114819],{"className":114817,"code":114818,"language":6786,"meta":63},[6784],"obs → action → mj_step → reward → next_obs\n",[65,114820,114818],{"__ignoreMap":63},[43,114822,114824],{"id":114823},"tip-坐标不变化","tip 坐标不变化",[19,114826,104149],{},[48,114828,114829,114834,114842,114851],{},[51,114830,114831,114832,29978],{},"是否每步调用了 ",[65,114833,102259],{},[51,114835,114836,114837,102592,114839,29978],{},"是否写入了 ",[65,114838,107699],{},[65,114840,114841],{},"data.ctrl[1]",[51,114843,114844,114845,1949,114848,29978],{},"actuator 是否正确引用 ",[65,114846,114847],{},"joint1",[65,114849,114850],{},"joint2",[51,114852,114853],{},"控制输入是否太小。",[43,114855,114856],{"id":114856},"目标点不会动",[19,114858,114859],{},"本章的 target 是固定 site：",[58,114861,114863],{"className":54652,"code":114862,"language":54654,"meta":63,"style":63},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[65,114864,114865],{"__ignoreMap":63},[68,114866,114867,114869,114871,114873,114875,114877,114879,114881,114884],{"class":70,"line":71},[68,114868,861],{"class":85},[68,114870,104783],{"class":81},[68,114872,16516],{"class":587},[68,114874,869],{"class":85},[68,114876,113532],{"class":872},[68,114878,102680],{"class":587},[68,114880,869],{"class":85},[68,114882,114883],{"class":872},"\"0.5 0 0.4\"",[68,114885,114886],{"class":85}," ...\u002F>\n",[19,114888,114889,114890,114892],{},"它直接挂在 ",[65,114891,103415],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[43,114894,114895],{"id":114895},"机械臂不像真实机械臂",[19,114897,114898],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114900,104181],{"id":104180},[19,114902,114903],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114905,114906],{},"核心公式：",[58,114908,114911],{"className":114909,"code":114910,"language":6786,"meta":63},[6784],"distance = ||tip - target||\nreward = -distance - action_cost\n",[65,114912,114910],{"__ignoreMap":63},[19,114914,114915],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1652,114917,114918],{},"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":63,"searchDepth":78,"depth":78,"links":114920},[114921,114922,114923,114928,114932,114933,114934,114942],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":114924},[114925,114926,114927],{"id":113124,"depth":89,"text":113125},{"id":113200,"depth":89,"text":113200},{"id":113230,"depth":89,"text":113231},{"id":102826,"depth":78,"text":102827,"children":114929},[114930,114931],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":114935},[114936,114937,114938,114939,114940,114941],{"id":114771,"depth":89,"text":114774},{"id":114786,"depth":89,"text":114786},{"id":114811,"depth":89,"text":114811},{"id":114823,"depth":89,"text":114824},{"id":114856,"depth":89,"text":114856},{"id":114895,"depth":89,"text":114895},{"id":104180,"depth":78,"text":104181},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112928,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114949,"title":114950,"body":114951,"description":63,"extension":1677,"meta":118413,"navigation":1679,"path":118414,"seo":118415,"stem":118416,"__hash__":118417},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114952,"toc":118384},[114953,114956,114958,114961,114964,114989,114992,114998,115001,115007,115009,115011,115035,115037,115055,115057,115100,115102,115129,115131,115134,115186,115189,115195,115204,115207,115245,115248,115287,115290,115298,115305,115308,115314,115316,115370,115377,115422,115425,115429,115445,115455,115457,116718,116720,116732,116734,116745,116747,116750,116771,116774,116777,116810,116816,116819,116852,116855,116858,116899,116904,116918,116921,116934,116939,116962,116964,116979,116989,117004,117011,117031,117046,117064,117067,117084,117092,117108,117114,117146,117159,117191,117201,117236,117250,117296,117310,117352,117363,117376,117382,117415,117418,117445,117455,117495,117505,117522,117529,117547,117550,117591,117604,117619,117622,117645,117648,117660,117663,117682,117687,117708,117711,117726,117729,117763,117775,117790,117793,117818,117821,117840,117843,117875,117878,117902,117908,117938,117945,117958,117961,117963,117965,117971,117974,117977,117989,117992,117994,118048,118050,118054,118060,118069,118072,118079,118081,118104,118107,118111,118113,118131,118137,118139,118172,118175,118181,118185,118188,118208,118213,118217,118224,118244,118249,118253,118256,118276,118279,118365,118369,118372,118378,118381],[10,114954,114950],{"id":114955},"_8gymnasium-风格强化学习接口基础",[14,114957,102221],{"id":102220},[19,114959,114960],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114962,114963],{},"你将实现:",[58,114965,114967],{"className":31971,"code":114966,"language":31973,"meta":63,"style":63},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[65,114968,114969,114979],{"__ignoreMap":63},[68,114970,114971,114974,114976],{"class":70,"line":71},[68,114972,114973],{"class":85},"obs, info ",[68,114975,869],{"class":102},[68,114977,114978],{"class":85}," env.reset()\n",[68,114980,114981,114984,114986],{"class":70,"line":78},[68,114982,114983],{"class":85},"obs, reward, terminated, truncated, info ",[68,114985,869],{"class":102},[68,114987,114988],{"class":85}," env.step(action)\n",[19,114990,114991],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114993,114994,114995,114997],{},"前面章节的代码都是“脚本式”的：在 ",[65,114996,103869],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114999,115000],{},"可以先记住 Gymnasium 环境的核心交互：",[58,115002,115005],{"className":115003,"code":115004,"language":6786,"meta":63},[6784],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[65,115006,115004],{"__ignoreMap":63},[14,115008,102344],{"id":102343},[19,115010,102347],{},[58,115012,115013],{"className":25416,"code":105961,"language":25418,"meta":63,"style":63},[65,115014,115015],{"__ignoreMap":63},[68,115016,115017,115019,115021,115023,115025,115027,115029,115031,115033],{"class":70,"line":71},[68,115018,26171],{"class":587},[68,115020,27909],{"class":872},[68,115022,25428],{"class":872},[68,115024,27994],{"class":92},[68,115026,105976],{"class":872},[68,115028,102372],{"class":872},[68,115030,104075],{"class":872},[68,115032,102388],{"class":872},[68,115034,105985],{"class":872},[19,115036,104392],{},[58,115038,115040],{"className":25416,"code":115039,"language":25418,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[65,115041,115042],{"__ignoreMap":63},[68,115043,115044,115046,115048,115050,115052],{"class":70,"line":71},[68,115045,25425],{"class":587},[68,115047,25428],{"class":872},[68,115049,102504],{"class":872},[68,115051,109284],{"class":872},[68,115053,115054],{"class":872}," gymnasium\n",[19,115056,104409],{},[58,115058,115060],{"className":25416,"code":115059,"language":25418,"meta":63,"style":63},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[65,115061,115062,115079,115088],{"__ignoreMap":63},[68,115063,115064,115066,115068,115070,115073,115075,115077],{"class":70,"line":71},[68,115065,31923],{"class":587},[68,115067,30769],{"class":872},[68,115069,26710],{"class":92},[68,115071,115072],{"class":872}," mujoco-gym-api",[68,115074,102549],{"class":872},[68,115076,102552],{"class":92},[68,115078,102555],{"class":92},[68,115080,115081,115083,115085],{"class":70,"line":78},[68,115082,31923],{"class":587},[68,115084,102562],{"class":872},[68,115086,115087],{"class":872}," mujoco-gym-api\n",[68,115089,115090,115092,115094,115096,115098],{"class":70,"line":89},[68,115091,25425],{"class":587},[68,115093,25428],{"class":872},[68,115095,102504],{"class":872},[68,115097,109284],{"class":872},[68,115099,115054],{"class":872},[19,115101,102578],{},[48,115103,115104,115114,115117,115123],{},[51,115105,115106,115107,115110,115111,29978],{},"本章使用 ",[65,115108,115109],{},"gymnasium","，不是旧版 ",[65,115112,115113],{},"gym",[51,115115,115116],{},"Gymnasium API 与旧 Gym API 有差异。",[51,115118,115119,115120,29978],{},"旧 Gym 常见返回值是 4 个: ",[65,115121,115122],{},"obs, reward, done, info",[51,115124,115125,115126,29978],{},"Gymnasium 返回值是 5 个: ",[65,115127,115128],{},"obs, reward, terminated, truncated, info",[14,115130,102619],{"id":102618},[19,115132,115133],{},"强化学习环境接口包含:",[120,115135,115136,115145],{},[123,115137,115138],{},[126,115139,115140,115143],{},[129,115141,115142],{"align":131},"方法",[129,115144,135],{"align":131},[137,115146,115147,115157,115167,115177],{},[126,115148,115149,115154],{},[142,115150,115151],{"align":131},[65,115152,115153],{},"reset()",[142,115155,115156],{"align":131},"重置环境",[126,115158,115159,115164],{},[142,115160,115161],{"align":131},[65,115162,115163],{},"step(action)",[142,115165,115166],{"align":131},"执行动作",[126,115168,115169,115174],{},[142,115170,115171],{"align":131},[65,115172,115173],{},"observation_space",[142,115175,115176],{"align":131},"观测空间",[126,115178,115179,115184],{},[142,115180,115181],{"align":131},[65,115182,115183],{},"action_space",[142,115185,25249],{"align":131},[19,115187,115188],{},"一个最小环境需要完成:",[58,115190,115193],{"className":115191,"code":115192,"language":6786,"meta":63},[6784],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[65,115194,115192],{"__ignoreMap":63},[43,115196,115198,102592,115201,106211],{"id":115197},"terminated-和-truncated-的区别",[65,115199,115200],{},"terminated",[65,115202,115203],{},"truncated",[19,115205,115206],{},"Gymnasium 把“结束”拆成两个概念：",[120,115208,115209,115219],{},[123,115210,115211],{},[126,115212,115213,115215,115217],{},[129,115214,106147],{"align":131},[129,115216,102274],{"align":131},[129,115218,22782],{"align":131},[137,115220,115221,115233],{},[126,115222,115223,115227,115230],{},[142,115224,115225],{"align":131},[65,115226,115200],{},[142,115228,115229],{"align":131},"任务自然结束",[142,115231,115232],{"align":131},"机械臂到达目标、机器人摔倒",[126,115234,115235,115239,115242],{},[142,115236,115237],{"align":131},[65,115238,115203],{},[142,115240,115241],{"align":131},"因外部限制截断",[142,115243,115244],{"align":131},"达到最大步数、时间限制",[19,115246,115247],{},"本章中：",[58,115249,115251],{"className":31971,"code":115250,"language":31973,"meta":63,"style":63},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[65,115252,115253,115268],{"__ignoreMap":63},[68,115254,115255,115258,115260,115263,115265],{"class":70,"line":71},[68,115256,115257],{"class":85},"terminated ",[68,115259,869],{"class":102},[68,115261,115262],{"class":85}," dist ",[68,115264,861],{"class":102},[68,115266,115267],{"class":92}," 0.05\n",[68,115269,115270,115273,115275,115277,115280,115282,115284],{"class":70,"line":78},[68,115271,115272],{"class":85},"truncated ",[68,115274,869],{"class":102},[68,115276,40466],{"class":92},[68,115278,115279],{"class":85},".steps ",[68,115281,3312],{"class":102},[68,115283,40466],{"class":92},[68,115285,115286],{"class":85},".max_steps\n",[19,115288,115289],{},"也就是：",[48,115291,115292,115295],{},[51,115293,115294],{},"末端距离目标小于 0.05，任务成功结束。",[51,115296,115297],{},"步数超过上限，episode 被截断。",[43,115299,115301,102592,115303],{"id":115300},"observation_space-和-action_space",[65,115302,115173],{},[65,115304,115183],{},[19,115306,115307],{},"这两个对象告诉算法：",[58,115309,115312],{"className":115310,"code":115311,"language":6786,"meta":63},[6784],"观测长什么样\n动作允许多大\n",[65,115313,115311],{"__ignoreMap":63},[19,115315,16230],{},[58,115317,115319],{"className":31971,"code":115318,"language":31973,"meta":63,"style":63},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[65,115320,115321],{"__ignoreMap":63},[68,115322,115323,115325,115328,115330,115333,115336,115339,115341,115343,115346,115348,115350,115352,115354,115356,115358,115360,115363,115365,115367],{"class":70,"line":71},[68,115324,32416],{"class":92},[68,115326,115327],{"class":85},".action_space ",[68,115329,869],{"class":102},[68,115331,115332],{"class":85}," spaces.Box(",[68,115334,115335],{"class":6815},"low",[68,115337,115338],{"class":102},"=-",[68,115340,103977],{"class":92},[68,115342,1002],{"class":85},[68,115344,115345],{"class":6815},"high",[68,115347,869],{"class":102},[68,115349,103977],{"class":92},[68,115351,1002],{"class":85},[68,115353,97538],{"class":6815},[68,115355,869],{"class":102},[68,115357,997],{"class":85},[68,115359,267],{"class":92},[68,115361,115362],{"class":85},",), ",[68,115364,95076],{"class":6815},[68,115366,869],{"class":102},[68,115368,115369],{"class":85},"np.float32)\n",[19,115371,115372,115373,115376],{},"表示动作是 2 维数组，每个值都在 ",[65,115374,115375],{},"[-1, 1]"," 范围内。",[58,115378,115380],{"className":31971,"code":115379,"language":31973,"meta":63,"style":63},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[65,115381,115382],{"__ignoreMap":63},[68,115383,115384,115386,115389,115391,115393,115395,115397,115400,115402,115404,115406,115408,115410,115412,115414,115416,115418,115420],{"class":70,"line":71},[68,115385,32416],{"class":92},[68,115387,115388],{"class":85},".observation_space ",[68,115390,869],{"class":102},[68,115392,115332],{"class":85},[68,115394,115335],{"class":6815},[68,115396,115338],{"class":102},[68,115398,115399],{"class":85},"np.inf, ",[68,115401,115345],{"class":6815},[68,115403,869],{"class":102},[68,115405,115399],{"class":85},[68,115407,97538],{"class":6815},[68,115409,869],{"class":102},[68,115411,997],{"class":85},[68,115413,2182],{"class":92},[68,115415,115362],{"class":85},[68,115417,95076],{"class":6815},[68,115419,869],{"class":102},[68,115421,115369],{"class":85},[19,115423,115424],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[43,115426,115428],{"id":115427},"frame_skip-是什么","frame_skip 是什么",[58,115430,115432],{"className":31971,"code":115431,"language":31973,"meta":63,"style":63},"self.frame_skip = 5\n",[65,115433,115434],{"__ignoreMap":63},[68,115435,115436,115438,115441,115443],{"class":70,"line":71},[68,115437,32416],{"class":92},[68,115439,115440],{"class":85},".frame_skip ",[68,115442,869],{"class":102},[68,115444,56011],{"class":92},[19,115446,115447,115448,115451,115452,115454],{},"表示外部调用一次 ",[65,115449,115450],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[65,115453,102789],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115456,102827],{"id":102826},[58,115458,115460],{"className":31971,"code":115459,"language":31973,"meta":63,"style":63},"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",[65,115461,115462,115474,115480,115490,115501,115505,115509,115517,115522,115526,115530,115534,115538,115542,115546,115550,115555,115559,115563,115567,115572,115576,115580,115584,115588,115592,115596,115600,115604,115608,115612,115616,115620,115624,115642,115657,115661,115674,115684,115699,115716,115720,115741,115760,115785,115799,115803,115813,115825,115835,115839,115881,115919,115923,115933,115949,115964,115983,115990,115994,116007,116022,116037,116050,116069,116085,116089,116130,116145,116160,116164,116203,116214,116227,116231,116241,116250,116254,116264,116279,116297,116301,116312,116329,116342,116346,116356,116360,116371,116382,116386,116400,116414,116430,116434,116447,116464,116479,116486,116490,116494,116506,116516,116534,116546,116558,116562,116570,116586,116595,116604,116612,116654,116667,116672,116676,116694,116698,116702,116714],{"__ignoreMap":63},[68,115463,115464,115466,115469,115471],{"class":70,"line":71},[68,115465,31985],{"class":102},[68,115467,115468],{"class":85}," gymnasium ",[68,115470,32976],{"class":102},[68,115472,115473],{"class":85}," gym\n",[68,115475,115476,115478],{"class":70,"line":78},[68,115477,31985],{"class":102},[68,115479,102875],{"class":85},[68,115481,115482,115484,115486,115488],{"class":70,"line":89},[68,115483,31985],{"class":102},[68,115485,32973],{"class":85},[68,115487,32976],{"class":102},[68,115489,32979],{"class":85},[68,115491,115492,115494,115496,115498],{"class":70,"line":115},[68,115493,32330],{"class":102},[68,115495,115468],{"class":85},[68,115497,31985],{"class":102},[68,115499,115500],{"class":85}," spaces\n",[68,115502,115503],{"class":70,"line":280},[68,115504,4000],{"emptyLinePlaceholder":1679},[68,115506,115507],{"class":70,"line":301},[68,115508,4000],{"emptyLinePlaceholder":1679},[68,115510,115511,115513,115515],{"class":70,"line":320},[68,115512,102888],{"class":92},[68,115514,15161],{"class":102},[68,115516,102893],{"class":872},[68,115518,115519],{"class":70,"line":2915},[68,115520,115521],{"class":872},"\u003Cmujoco model=\"gym_reacher\">\n",[68,115523,115524],{"class":70,"line":2921},[68,115525,113311],{"class":872},[68,115527,115528],{"class":70,"line":2933},[68,115529,4000],{"emptyLinePlaceholder":1679},[68,115531,115532],{"class":70,"line":3214},[68,115533,102912],{"class":872},[68,115535,115536],{"class":70,"line":3219},[68,115537,113329],{"class":872},[68,115539,115540],{"class":70,"line":3225},[68,115541,4000],{"emptyLinePlaceholder":1679},[68,115543,115544],{"class":70,"line":3230},[68,115545,113338],{"class":872},[68,115547,115548],{"class":70,"line":3244},[68,115549,113343],{"class":872},[68,115551,115552],{"class":70,"line":3249},[68,115553,115554],{"class":872},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[68,115556,115557],{"class":70,"line":3255},[68,115558,4000],{"emptyLinePlaceholder":1679},[68,115560,115561],{"class":70,"line":3276},[68,115562,113357],{"class":872},[68,115564,115565],{"class":70,"line":3281},[68,115566,113362],{"class":872},[68,115568,115569],{"class":70,"line":3295},[68,115570,115571],{"class":872},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[68,115573,115574],{"class":70,"line":3300},[68,115575,113372],{"class":872},[68,115577,115578],{"class":70,"line":3329},[68,115579,108011],{"class":872},[68,115581,115582],{"class":70,"line":3334},[68,115583,102941],{"class":872},[68,115585,115586],{"class":70,"line":3351},[68,115587,102946],{"class":872},[68,115589,115590],{"class":70,"line":3356},[68,115591,4000],{"emptyLinePlaceholder":1679},[68,115593,115594],{"class":70,"line":3361},[68,115595,108028],{"class":872},[68,115597,115598],{"class":70,"line":3366},[68,115599,113397],{"class":872},[68,115601,115602],{"class":70,"line":3380},[68,115603,113402],{"class":872},[68,115605,115606],{"class":70,"line":3385},[68,115607,108038],{"class":872},[68,115609,115610],{"class":70,"line":4177},[68,115611,102951],{"class":872},[68,115613,115614],{"class":70,"line":4191},[68,115615,97273],{"class":872},[68,115617,115618],{"class":70,"line":4199},[68,115619,4000],{"emptyLinePlaceholder":1679},[68,115621,115622],{"class":70,"line":4204},[68,115623,4000],{"emptyLinePlaceholder":1679},[68,115625,115626,115628,115631,115633,115635,115637,115640],{"class":70,"line":4210},[68,115627,16291],{"class":102},[68,115629,115630],{"class":587}," ReacherEnv",[68,115632,997],{"class":85},[68,115634,115113],{"class":587},[68,115636,2294],{"class":85},[68,115638,115639],{"class":587},"Env",[68,115641,32379],{"class":85},[68,115643,115644,115647,115649,115651,115654],{"class":70,"line":4216},[68,115645,115646],{"class":85},"    metadata ",[68,115648,869],{"class":102},[68,115650,6047],{"class":85},[68,115652,115653],{"class":872},"\"render_modes\"",[68,115655,115656],{"class":85},": []}\n",[68,115658,115659],{"class":70,"line":4221},[68,115660,4000],{"emptyLinePlaceholder":1679},[68,115662,115663,115665,115667,115670,115672],{"class":70,"line":9547},[68,115664,32394],{"class":102},[68,115666,32397],{"class":92},[68,115668,115669],{"class":85},"(self) -> ",[68,115671,97261],{"class":92},[68,115673,5338],{"class":85},[68,115675,115676,115678,115680,115682],{"class":70,"line":9571},[68,115677,32410],{"class":92},[68,115679,18856],{"class":85},[68,115681,32422],{"class":92},[68,115683,3577],{"class":85},[68,115685,115686,115688,115691,115693,115695,115697],{"class":70,"line":9576},[68,115687,32438],{"class":92},[68,115689,115690],{"class":85},".model ",[68,115692,869],{"class":102},[68,115694,102986],{"class":85},[68,115696,102888],{"class":92},[68,115698,1757],{"class":85},[68,115700,115701,115703,115706,115708,115711,115713],{"class":70,"line":9582},[68,115702,32438],{"class":92},[68,115704,115705],{"class":85},".data ",[68,115707,869],{"class":102},[68,115709,115710],{"class":85}," mujoco.MjData(",[68,115712,32416],{"class":92},[68,115714,115715],{"class":85},".model)\n",[68,115717,115718],{"class":70,"line":9609},[68,115719,4000],{"emptyLinePlaceholder":1679},[68,115721,115722,115724,115727,115729,115732,115734,115737,115739],{"class":70,"line":9614},[68,115723,32438],{"class":92},[68,115725,115726],{"class":85},".tip_site_id ",[68,115728,869],{"class":102},[68,115730,115731],{"class":85}," mujoco.mj_name2id(",[68,115733,32416],{"class":92},[68,115735,115736],{"class":85},".model, mujoco.mjtObj.mjOBJ_SITE, ",[68,115738,113109],{"class":872},[68,115740,1757],{"class":85},[68,115742,115743,115745,115748,115750,115752,115754,115756,115758],{"class":70,"line":9620},[68,115744,32438],{"class":92},[68,115746,115747],{"class":85},".target_site_id ",[68,115749,869],{"class":102},[68,115751,115731],{"class":85},[68,115753,32416],{"class":92},[68,115755,115736],{"class":85},[68,115757,113532],{"class":872},[68,115759,1757],{"class":85},[68,115761,115762,115764,115766,115768,115770,115772,115775,115777,115779,115781,115783],{"class":70,"line":9632},[68,115763,4097],{"class":102},[68,115765,40466],{"class":92},[68,115767,115726],{"class":85},[68,115769,861],{"class":102},[68,115771,5692],{"class":92},[68,115773,115774],{"class":102}," or",[68,115776,40466],{"class":92},[68,115778,115747],{"class":85},[68,115780,861],{"class":102},[68,115782,5692],{"class":92},[68,115784,5338],{"class":85},[68,115786,115787,115790,115792,115794,115797],{"class":70,"line":9644},[68,115788,115789],{"class":102},"            raise",[68,115791,105008],{"class":92},[68,115793,997],{"class":85},[68,115795,115796],{"class":872},"\"required sites not found\"",[68,115798,1757],{"class":85},[68,115800,115801],{"class":70,"line":9656},[68,115802,4000],{"emptyLinePlaceholder":1679},[68,115804,115805,115807,115809,115811],{"class":70,"line":11314},[68,115806,32438],{"class":92},[68,115808,115440],{"class":85},[68,115810,869],{"class":102},[68,115812,56011],{"class":92},[68,115814,115815,115817,115820,115822],{"class":70,"line":11339},[68,115816,32438],{"class":92},[68,115818,115819],{"class":85},".max_steps ",[68,115821,869],{"class":102},[68,115823,115824],{"class":92}," 200\n",[68,115826,115827,115829,115831,115833],{"class":70,"line":11362},[68,115828,32438],{"class":92},[68,115830,115279],{"class":85},[68,115832,869],{"class":102},[68,115834,48926],{"class":92},[68,115836,115837],{"class":70,"line":11386},[68,115838,4000],{"emptyLinePlaceholder":1679},[68,115840,115841,115843,115845,115847,115849,115851,115853,115855,115857,115859,115861,115863,115865,115867,115869,115871,115873,115875,115877,115879],{"class":70,"line":11391},[68,115842,32438],{"class":92},[68,115844,115327],{"class":85},[68,115846,869],{"class":102},[68,115848,115332],{"class":85},[68,115850,115335],{"class":6815},[68,115852,115338],{"class":102},[68,115854,103977],{"class":92},[68,115856,1002],{"class":85},[68,115858,115345],{"class":6815},[68,115860,869],{"class":102},[68,115862,103977],{"class":92},[68,115864,1002],{"class":85},[68,115866,97538],{"class":6815},[68,115868,869],{"class":102},[68,115870,997],{"class":85},[68,115872,267],{"class":92},[68,115874,115362],{"class":85},[68,115876,95076],{"class":6815},[68,115878,869],{"class":102},[68,115880,115369],{"class":85},[68,115882,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913,115915,115917],{"class":70,"line":11396},[68,115884,32438],{"class":92},[68,115886,115388],{"class":85},[68,115888,869],{"class":102},[68,115890,115332],{"class":85},[68,115892,115335],{"class":6815},[68,115894,115338],{"class":102},[68,115896,115399],{"class":85},[68,115898,115345],{"class":6815},[68,115900,869],{"class":102},[68,115902,115399],{"class":85},[68,115904,97538],{"class":6815},[68,115906,869],{"class":102},[68,115908,997],{"class":85},[68,115910,2182],{"class":92},[68,115912,115362],{"class":85},[68,115914,95076],{"class":6815},[68,115916,869],{"class":102},[68,115918,115369],{"class":85},[68,115920,115921],{"class":70,"line":11401},[68,115922,4000],{"emptyLinePlaceholder":1679},[68,115924,115925,115927,115930],{"class":70,"line":11410},[68,115926,32394],{"class":102},[68,115928,115929],{"class":587}," _get_obs",[68,115931,115932],{"class":85},"(self) -> np.ndarray:\n",[68,115934,115935,115937,115939,115941,115944,115946],{"class":70,"line":11415},[68,115936,113710],{"class":85},[68,115938,869],{"class":102},[68,115940,40466],{"class":92},[68,115942,115943],{"class":85},".data.site_xpos[",[68,115945,32416],{"class":92},[68,115947,115948],{"class":85},".tip_site_id].copy()\n",[68,115950,115951,115953,115955,115957,115959,115961],{"class":70,"line":11421},[68,115952,113723],{"class":85},[68,115954,869],{"class":102},[68,115956,40466],{"class":92},[68,115958,115943],{"class":85},[68,115960,32416],{"class":92},[68,115962,115963],{"class":85},".target_site_id].copy()\n",[68,115965,115966,115968,115970,115973,115975,115978,115980],{"class":70,"line":11442},[68,115967,111755],{"class":85},[68,115969,869],{"class":102},[68,115971,115972],{"class":85}," np.concatenate([",[68,115974,32416],{"class":92},[68,115976,115977],{"class":85},".data.qpos.copy(), ",[68,115979,32416],{"class":92},[68,115981,115982],{"class":85},".data.qvel.copy(), tip, target])\n",[68,115984,115985,115987],{"class":70,"line":11448},[68,115986,16349],{"class":102},[68,115988,115989],{"class":85}," obs.astype(np.float32)\n",[68,115991,115992],{"class":70,"line":11462},[68,115993,4000],{"emptyLinePlaceholder":1679},[68,115995,115996,115998,116001,116003,116005],{"class":70,"line":11468},[68,115997,32394],{"class":102},[68,115999,116000],{"class":587}," _get_reward",[68,116002,115669],{"class":85},[68,116004,1790],{"class":92},[68,116006,5338],{"class":85},[68,116008,116009,116011,116013,116015,116017,116019],{"class":70,"line":11495},[68,116010,113710],{"class":85},[68,116012,869],{"class":102},[68,116014,40466],{"class":92},[68,116016,115943],{"class":85},[68,116018,32416],{"class":92},[68,116020,116021],{"class":85},".tip_site_id]\n",[68,116023,116024,116026,116028,116030,116032,116034],{"class":70,"line":11504},[68,116025,113723],{"class":85},[68,116027,869],{"class":102},[68,116029,40466],{"class":92},[68,116031,115943],{"class":85},[68,116033,32416],{"class":92},[68,116035,116036],{"class":85},".target_site_id]\n",[68,116038,116039,116042,116044,116046,116048],{"class":70,"line":11510},[68,116040,116041],{"class":85},"        dist ",[68,116043,869],{"class":102},[68,116045,113174],{"class":85},[68,116047,2268],{"class":102},[68,116049,113179],{"class":85},[68,116051,116052,116055,116057,116059,116061,116064,116066],{"class":70,"line":11518},[68,116053,116054],{"class":85},"        control_cost ",[68,116056,869],{"class":102},[68,116058,113610],{"class":92},[68,116060,8117],{"class":102},[68,116062,116063],{"class":85}," np.sum(np.square(",[68,116065,32416],{"class":92},[68,116067,116068],{"class":85},".data.ctrl))\n",[68,116070,116071,116073,116075,116077,116079,116081,116083],{"class":70,"line":11523},[68,116072,16349],{"class":102},[68,116074,111370],{"class":92},[68,116076,997],{"class":85},[68,116078,2268],{"class":102},[68,116080,113169],{"class":85},[68,116082,2268],{"class":102},[68,116084,113632],{"class":85},[68,116086,116087],{"class":70,"line":18199},[68,116088,4000],{"emptyLinePlaceholder":1679},[68,116090,116091,116093,116096,116099,116101,116104,116106,116108,116110,116112,116114,116117,116120,116122,116124,116126,116128],{"class":70,"line":18205},[68,116092,32394],{"class":102},[68,116094,116095],{"class":587}," reset",[68,116097,116098],{"class":85},"(self, ",[68,116100,2191],{"class":102},[68,116102,116103],{"class":85},", seed: ",[68,116105,1754],{"class":92},[68,116107,26704],{"class":102},[68,116109,40526],{"class":92},[68,116111,15161],{"class":102},[68,116113,40526],{"class":92},[68,116115,116116],{"class":85},", options: ",[68,116118,116119],{"class":92},"dict",[68,116121,26704],{"class":102},[68,116123,40526],{"class":92},[68,116125,15161],{"class":102},[68,116127,40526],{"class":92},[68,116129,32379],{"class":85},[68,116131,116132,116134,116137,116140,116142],{"class":70,"line":18228},[68,116133,32410],{"class":92},[68,116135,116136],{"class":85},"().reset(",[68,116138,116139],{"class":6815},"seed",[68,116141,869],{"class":102},[68,116143,116144],{"class":85},"seed)\n",[68,116146,116147,116150,116152,116155,116157],{"class":70,"line":18234},[68,116148,116149],{"class":85},"        mujoco.mj_resetData(",[68,116151,32416],{"class":92},[68,116153,116154],{"class":85},".model, ",[68,116156,32416],{"class":92},[68,116158,116159],{"class":85},".data)\n",[68,116161,116162],{"class":70,"line":18257},[68,116163,4000],{"emptyLinePlaceholder":1679},[68,116165,116166,116168,116171,116173,116175,116178,116180,116182,116184,116186,116188,116190,116192,116194,116196,116198,116200],{"class":70,"line":18271},[68,116167,32438],{"class":92},[68,116169,116170],{"class":85},".data.qpos[:] ",[68,116172,869],{"class":102},[68,116174,40466],{"class":92},[68,116176,116177],{"class":85},".np_random.uniform(",[68,116179,115335],{"class":6815},[68,116181,115338],{"class":102},[68,116183,1013],{"class":92},[68,116185,1002],{"class":85},[68,116187,115345],{"class":6815},[68,116189,869],{"class":102},[68,116191,1013],{"class":92},[68,116193,1002],{"class":85},[68,116195,33089],{"class":6815},[68,116197,869],{"class":102},[68,116199,32416],{"class":92},[68,116201,116202],{"class":85},".model.nq)\n",[68,116204,116205,116207,116210,116212],{"class":70,"line":18291},[68,116206,32438],{"class":92},[68,116208,116209],{"class":85},".data.qvel[:] ",[68,116211,869],{"class":102},[68,116213,106334],{"class":92},[68,116215,116216,116219,116221,116223,116225],{"class":70,"line":18297},[68,116217,116218],{"class":85},"        mujoco.mj_forward(",[68,116220,32416],{"class":92},[68,116222,116154],{"class":85},[68,116224,32416],{"class":92},[68,116226,116159],{"class":85},[68,116228,116229],{"class":70,"line":18308},[68,116230,4000],{"emptyLinePlaceholder":1679},[68,116232,116233,116235,116237,116239],{"class":70,"line":18331},[68,116234,32438],{"class":92},[68,116236,115279],{"class":85},[68,116238,869],{"class":102},[68,116240,48926],{"class":92},[68,116242,116243,116245,116247],{"class":70,"line":18353},[68,116244,16349],{"class":102},[68,116246,40466],{"class":92},[68,116248,116249],{"class":85},"._get_obs(), {}\n",[68,116251,116252],{"class":70,"line":18358},[68,116253,4000],{"emptyLinePlaceholder":1679},[68,116255,116256,116258,116261],{"class":70,"line":18364},[68,116257,32394],{"class":102},[68,116259,116260],{"class":587}," step",[68,116262,116263],{"class":85},"(self, action):\n",[68,116265,116266,116268,116270,116273,116275,116277],{"class":70,"line":18378},[68,116267,111795],{"class":85},[68,116269,869],{"class":102},[68,116271,116272],{"class":85}," np.asarray(action, ",[68,116274,95076],{"class":6815},[68,116276,869],{"class":102},[68,116278,115369],{"class":85},[68,116280,116281,116283,116285,116287,116289,116292,116294],{"class":70,"line":18391},[68,116282,111795],{"class":85},[68,116284,869],{"class":102},[68,116286,109020],{"class":85},[68,116288,32416],{"class":92},[68,116290,116291],{"class":85},".action_space.low, ",[68,116293,32416],{"class":92},[68,116295,116296],{"class":85},".action_space.high)\n",[68,116298,116299],{"class":70,"line":18396},[68,116300,4000],{"emptyLinePlaceholder":1679},[68,116302,116303,116305,116308,116310],{"class":70,"line":18410},[68,116304,32438],{"class":92},[68,116306,116307],{"class":85},".data.ctrl[:] ",[68,116309,869],{"class":102},[68,116311,109043],{"class":85},[68,116313,116314,116316,116318,116320,116322,116324,116326],{"class":70,"line":18415},[68,116315,5002],{"class":102},[68,116317,103075],{"class":85},[68,116319,27637],{"class":102},[68,116321,34036],{"class":92},[68,116323,997],{"class":85},[68,116325,32416],{"class":92},[68,116327,116328],{"class":85},".frame_skip):\n",[68,116330,116331,116334,116336,116338,116340],{"class":70,"line":18421},[68,116332,116333],{"class":85},"            mujoco.mj_step(",[68,116335,32416],{"class":92},[68,116337,116154],{"class":85},[68,116339,32416],{"class":92},[68,116341,116159],{"class":85},[68,116343,116344],{"class":70,"line":18426},[68,116345,4000],{"emptyLinePlaceholder":1679},[68,116347,116348,116350,116352,116354],{"class":70,"line":18440},[68,116349,32438],{"class":92},[68,116351,115279],{"class":85},[68,116353,11075],{"class":102},[68,116355,57283],{"class":92},[68,116357,116358],{"class":70,"line":18445},[68,116359,4000],{"emptyLinePlaceholder":1679},[68,116361,116362,116364,116366,116368],{"class":70,"line":18450},[68,116363,111755],{"class":85},[68,116365,869],{"class":102},[68,116367,40466],{"class":92},[68,116369,116370],{"class":85},"._get_obs()\n",[68,116372,116373,116375,116377,116379],{"class":70,"line":18464},[68,116374,111860],{"class":85},[68,116376,869],{"class":102},[68,116378,40466],{"class":92},[68,116380,116381],{"class":85},"._get_reward()\n",[68,116383,116384],{"class":70,"line":18476},[68,116385,4000],{"emptyLinePlaceholder":1679},[68,116387,116388,116390,116392,116394,116396,116398],{"class":70,"line":18481},[68,116389,113710],{"class":85},[68,116391,869],{"class":102},[68,116393,40466],{"class":92},[68,116395,115943],{"class":85},[68,116397,32416],{"class":92},[68,116399,116021],{"class":85},[68,116401,116402,116404,116406,116408,116410,116412],{"class":70,"line":18494},[68,116403,113723],{"class":85},[68,116405,869],{"class":102},[68,116407,40466],{"class":92},[68,116409,115943],{"class":85},[68,116411,32416],{"class":92},[68,116413,116036],{"class":85},[68,116415,116416,116418,116420,116422,116425,116427],{"class":70,"line":18499},[68,116417,116041],{"class":85},[68,116419,869],{"class":102},[68,116421,111370],{"class":92},[68,116423,116424],{"class":85},"(np.linalg.norm(tip ",[68,116426,2268],{"class":102},[68,116428,116429],{"class":85}," target))\n",[68,116431,116432],{"class":70,"line":18504},[68,116433,4000],{"emptyLinePlaceholder":1679},[68,116435,116436,116439,116441,116443,116445],{"class":70,"line":18509},[68,116437,116438],{"class":85},"        terminated ",[68,116440,869],{"class":102},[68,116442,115262],{"class":85},[68,116444,861],{"class":102},[68,116446,115267],{"class":92},[68,116448,116449,116452,116454,116456,116458,116460,116462],{"class":70,"line":18522},[68,116450,116451],{"class":85},"        truncated ",[68,116453,869],{"class":102},[68,116455,40466],{"class":92},[68,116457,115279],{"class":85},[68,116459,3312],{"class":102},[68,116461,40466],{"class":92},[68,116463,115286],{"class":85},[68,116465,116466,116469,116471,116473,116476],{"class":70,"line":18527},[68,116467,116468],{"class":85},"        info ",[68,116470,869],{"class":102},[68,116472,6047],{"class":85},[68,116474,116475],{"class":872},"\"distance\"",[68,116477,116478],{"class":85},": dist}\n",[68,116480,116481,116483],{"class":70,"line":34226},[68,116482,16349],{"class":102},[68,116484,116485],{"class":85}," obs, reward, terminated, truncated, info\n",[68,116487,116488],{"class":70,"line":34232},[68,116489,4000],{"emptyLinePlaceholder":1679},[68,116491,116492],{"class":70,"line":34238},[68,116493,4000],{"emptyLinePlaceholder":1679},[68,116495,116496,116498,116500,116502,116504],{"class":70,"line":34244},[68,116497,33540],{"class":102},[68,116499,3574],{"class":587},[68,116501,102972],{"class":85},[68,116503,97261],{"class":92},[68,116505,5338],{"class":85},[68,116507,116508,116511,116513],{"class":70,"line":34250},[68,116509,116510],{"class":85},"    env ",[68,116512,869],{"class":102},[68,116514,116515],{"class":85}," ReacherEnv()\n",[68,116517,116518,116521,116523,116526,116528,116530,116532],{"class":70,"line":34261},[68,116519,116520],{"class":85},"    obs, info ",[68,116522,869],{"class":102},[68,116524,116525],{"class":85}," env.reset(",[68,116527,116139],{"class":6815},[68,116529,869],{"class":102},[68,116531,600],{"class":92},[68,116533,1757],{"class":85},[68,116535,116536,116538,116540,116543],{"class":70,"line":34267},[68,116537,32892],{"class":92},[68,116539,997],{"class":85},[68,116541,116542],{"class":872},"\"initial obs shape:\"",[68,116544,116545],{"class":85},", obs.shape)\n",[68,116547,116548,116550,116552,116555],{"class":70,"line":34287},[68,116549,32892],{"class":92},[68,116551,997],{"class":85},[68,116553,116554],{"class":872},"\"initial info:\"",[68,116556,116557],{"class":85},", info)\n",[68,116559,116560],{"class":70,"line":34293},[68,116561,4000],{"emptyLinePlaceholder":1679},[68,116563,116564,116566,116568],{"class":70,"line":34304},[68,116565,111726],{"class":85},[68,116567,869],{"class":102},[68,116569,106334],{"class":92},[68,116571,116572,116574,116576,116578,116580,116582,116584],{"class":70,"line":34310},[68,116573,4800],{"class":102},[68,116575,33209],{"class":85},[68,116577,27637],{"class":102},[68,116579,34036],{"class":92},[68,116581,997],{"class":85},[68,116583,2436],{"class":92},[68,116585,32379],{"class":85},[68,116587,116588,116590,116592],{"class":70,"line":34316},[68,116589,111795],{"class":85},[68,116591,869],{"class":102},[68,116593,116594],{"class":85}," env.action_space.sample()\n",[68,116596,116597,116600,116602],{"class":70,"line":34322},[68,116598,116599],{"class":85},"        obs, reward, terminated, truncated, info ",[68,116601,869],{"class":102},[68,116603,114988],{"class":85},[68,116605,116606,116608,116610],{"class":70,"line":34328},[68,116607,111870],{"class":85},[68,116609,11075],{"class":102},[68,116611,111875],{"class":85},[68,116613,116614,116616,116618,116620,116622,116625,116627,116629,116632,116634,116636,116639,116641,116643,116646,116648,116650,116652],{"class":70,"line":34334},[68,116615,34044],{"class":92},[68,116617,997],{"class":85},[68,116619,111904],{"class":872},[68,116621,111907],{"class":85},[68,116623,116624],{"class":872},"\"reward:\"",[68,116626,1002],{"class":85},[68,116628,33611],{"class":92},[68,116630,116631],{"class":85},"(reward, ",[68,116633,288],{"class":92},[68,116635,111918],{"class":85},[68,116637,116638],{"class":872},"\"distance:\"",[68,116640,1002],{"class":85},[68,116642,33611],{"class":92},[68,116644,116645],{"class":85},"(info[",[68,116647,116475],{"class":872},[68,116649,113775],{"class":85},[68,116651,288],{"class":92},[68,116653,32090],{"class":85},[68,116655,116656,116658,116661,116664],{"class":70,"line":34340},[68,116657,4097],{"class":102},[68,116659,116660],{"class":85}," terminated ",[68,116662,116663],{"class":102},"or",[68,116665,116666],{"class":85}," truncated:\n",[68,116668,116669],{"class":70,"line":34346},[68,116670,116671],{"class":102},"            break\n",[68,116673,116674],{"class":70,"line":34366},[68,116675,4000],{"emptyLinePlaceholder":1679},[68,116677,116678,116680,116682,116684,116686,116688,116690,116692],{"class":70,"line":34372},[68,116679,32892],{"class":92},[68,116681,997],{"class":85},[68,116683,111949],{"class":872},[68,116685,1002],{"class":85},[68,116687,33611],{"class":92},[68,116689,111956],{"class":85},[68,116691,288],{"class":92},[68,116693,32090],{"class":85},[68,116695,116696],{"class":70,"line":34388},[68,116697,4000],{"emptyLinePlaceholder":1679},[68,116699,116700],{"class":70,"line":34394},[68,116701,4000],{"emptyLinePlaceholder":1679},[68,116703,116704,116706,116708,116710,116712],{"class":70,"line":34408},[68,116705,3134],{"class":102},[68,116707,32813],{"class":92},[68,116709,103133],{"class":102},[68,116711,103136],{"class":872},[68,116713,5338],{"class":85},[68,116715,116716],{"class":70,"line":34414},[68,116717,103143],{"class":85},[19,116719,105143],{},[58,116721,116723],{"className":25416,"code":116722,"language":25418,"meta":63,"style":63},"touch ch8_gym_env.py\n",[65,116724,116725],{"__ignoreMap":63},[68,116726,116727,116729],{"class":70,"line":71},[68,116728,102857],{"class":587},[68,116730,116731],{"class":872}," ch8_gym_env.py\n",[19,116733,112017],{},[58,116735,116737],{"className":25416,"code":116736,"language":25418,"meta":63,"style":63},"python ch8_gym_env.py\n",[65,116738,116739],{"__ignoreMap":63},[68,116740,116741,116743],{"class":70,"line":71},[68,116742,31973],{"class":587},[68,116744,116731],{"class":872},[43,116746,103146],{"id":103146},[19,116748,116749],{},"继承 Gymnasium 环境：",[58,116751,116753],{"className":31971,"code":116752,"language":31973,"meta":63,"style":63},"class ReacherEnv(gym.Env):\n",[65,116754,116755],{"__ignoreMap":63},[68,116756,116757,116759,116761,116763,116765,116767,116769],{"class":70,"line":71},[68,116758,16291],{"class":102},[68,116760,115630],{"class":587},[68,116762,997],{"class":85},[68,116764,115113],{"class":587},[68,116766,2294],{"class":85},[68,116768,115639],{"class":587},[68,116770,32379],{"class":85},[19,116772,116773],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116775,116776],{},"初始化模型：",[58,116778,116780],{"className":31971,"code":116779,"language":31973,"meta":63,"style":63},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[65,116781,116782,116796],{"__ignoreMap":63},[68,116783,116784,116786,116788,116790,116792,116794],{"class":70,"line":71},[68,116785,32416],{"class":92},[68,116787,115690],{"class":85},[68,116789,869],{"class":102},[68,116791,102986],{"class":85},[68,116793,102888],{"class":92},[68,116795,1757],{"class":85},[68,116797,116798,116800,116802,116804,116806,116808],{"class":70,"line":78},[68,116799,32416],{"class":92},[68,116801,115705],{"class":85},[68,116803,869],{"class":102},[68,116805,115710],{"class":85},[68,116807,32416],{"class":92},[68,116809,115715],{"class":85},[19,116811,116812,116813,116815],{},"这和前面章节一样，只是现在放到了类的 ",[65,116814,32422],{}," 里。",[19,116817,116818],{},"缓存 site ID：",[58,116820,116822],{"className":31971,"code":116821,"language":31973,"meta":63,"style":63},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[65,116823,116824,116838],{"__ignoreMap":63},[68,116825,116826,116828,116830,116832,116834,116836],{"class":70,"line":71},[68,116827,32416],{"class":92},[68,116829,115726],{"class":85},[68,116831,869],{"class":102},[68,116833,115731],{"class":85},[68,116835,91130],{"class":92},[68,116837,1757],{"class":85},[68,116839,116840,116842,116844,116846,116848,116850],{"class":70,"line":78},[68,116841,32416],{"class":92},[68,116843,115747],{"class":85},[68,116845,869],{"class":102},[68,116847,115731],{"class":85},[68,116849,91130],{"class":92},[68,116851,1757],{"class":85},[19,116853,116854],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116856,116857],{},"reset：",[58,116859,116861],{"className":31971,"code":116860,"language":31973,"meta":63,"style":63},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[65,116862,116863],{"__ignoreMap":63},[68,116864,116865,116867,116869,116871,116873,116875,116877,116879,116881,116883,116885,116887,116889,116891,116893,116895,116897],{"class":70,"line":71},[68,116866,33540],{"class":102},[68,116868,116095],{"class":587},[68,116870,116098],{"class":85},[68,116872,2191],{"class":102},[68,116874,116103],{"class":85},[68,116876,1754],{"class":92},[68,116878,26704],{"class":102},[68,116880,40526],{"class":92},[68,116882,15161],{"class":102},[68,116884,40526],{"class":92},[68,116886,116116],{"class":85},[68,116888,116119],{"class":92},[68,116890,26704],{"class":102},[68,116892,40526],{"class":92},[68,116894,15161],{"class":102},[68,116896,40526],{"class":92},[68,116898,32379],{"class":85},[19,116900,116901,116903],{},[65,116902,71638],{}," 做四件事：",[48,116905,116906,116909,116912,116915],{},[51,116907,116908],{},"设置随机种子。",[51,116910,116911],{},"重置 MuJoCo data。",[51,116913,116914],{},"随机初始化关节角。",[51,116916,116917],{},"返回初始观测和 info。",[19,116919,116920],{},"step：",[58,116922,116924],{"className":31971,"code":116923,"language":31973,"meta":63,"style":63},"def step(self, action):\n",[65,116925,116926],{"__ignoreMap":63},[68,116927,116928,116930,116932],{"class":70,"line":71},[68,116929,33540],{"class":102},[68,116931,116260],{"class":587},[68,116933,116263],{"class":85},[19,116935,116936,116938],{},[65,116937,108707],{}," 做六件事：",[48,116940,116941,116944,116950,116953,116956,116959],{},[51,116942,116943],{},"检查并裁剪 action。",[51,116945,116946,116947,29978],{},"写入 ",[65,116948,116949],{},"self.data.ctrl",[51,116951,116952],{},"连续推进若干个 MuJoCo 物理步。",[51,116954,116955],{},"计算新观测。",[51,116957,116958],{},"计算奖励和结束条件。",[51,116960,116961],{},"返回 Gymnasium 标准五元组。",[43,116963,103282],{"id":103282},[58,116965,116967],{"className":31971,"code":116966,"language":31973,"meta":63,"style":63},"import gymnasium as gym\n",[65,116968,116969],{"__ignoreMap":63},[68,116970,116971,116973,116975,116977],{"class":70,"line":71},[68,116972,31985],{"class":102},[68,116974,115468],{"class":85},[68,116976,32976],{"class":102},[68,116978,115473],{"class":85},[19,116980,116981,116982,116984,116985,116988],{},"导入 Gymnasium，并起别名 ",[65,116983,115113],{},"。后面写 ",[65,116986,116987],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[58,116990,116992],{"className":31971,"code":116991,"language":31973,"meta":63,"style":63},"from gymnasium import spaces\n",[65,116993,116994],{"__ignoreMap":63},[68,116995,116996,116998,117000,117002],{"class":70,"line":71},[68,116997,32330],{"class":102},[68,116999,115468],{"class":85},[68,117001,31985],{"class":102},[68,117003,115500],{"class":85},[19,117005,117006,117007,117010],{},"导入空间定义工具。",[65,117008,117009],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[58,117012,117013],{"className":31971,"code":116752,"language":31973,"meta":63,"style":63},[65,117014,117015],{"__ignoreMap":63},[68,117016,117017,117019,117021,117023,117025,117027,117029],{"class":70,"line":71},[68,117018,16291],{"class":102},[68,117020,115630],{"class":587},[68,117022,997],{"class":85},[68,117024,115113],{"class":587},[68,117026,2294],{"class":85},[68,117028,115639],{"class":587},[68,117030,32379],{"class":85},[19,117032,117033,117034,117037,117038,117040,117041,102592,117043,117045],{},"定义一个类，名字叫 ",[65,117035,117036],{},"ReacherEnv","。括号里的 ",[65,117039,116987],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[65,117042,71638],{},[65,117044,108707],{}," 这两个核心方法。",[58,117047,117049],{"className":31971,"code":117048,"language":31973,"meta":63,"style":63},"metadata = {\"render_modes\": []}\n",[65,117050,117051],{"__ignoreMap":63},[68,117052,117053,117056,117058,117060,117062],{"class":70,"line":71},[68,117054,117055],{"class":85},"metadata ",[68,117057,869],{"class":102},[68,117059,6047],{"class":85},[68,117061,115653],{"class":872},[68,117063,115656],{"class":85},[19,117065,117066],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[58,117068,117070],{"className":31971,"code":117069,"language":31973,"meta":63,"style":63},"def __init__(self) -> None:\n",[65,117071,117072],{"__ignoreMap":63},[68,117073,117074,117076,117078,117080,117082],{"class":70,"line":71},[68,117075,33540],{"class":102},[68,117077,32397],{"class":92},[68,117079,115669],{"class":85},[68,117081,97261],{"class":92},[68,117083,5338],{"class":85},[19,117085,117086,117088,117089,29978],{},[65,117087,32422],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[65,117090,117091],{},"env = ReacherEnv()",[58,117093,117095],{"className":31971,"code":117094,"language":31973,"meta":63,"style":63},"super().__init__()\n",[65,117096,117097],{"__ignoreMap":63},[68,117098,117099,117102,117104,117106],{"class":70,"line":71},[68,117100,117101],{"class":92},"super",[68,117103,18856],{"class":85},[68,117105,32422],{"class":92},[68,117107,3577],{"class":85},[19,117109,117110,117111,117113],{},"调用父类 ",[65,117112,116987],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[58,117115,117116],{"className":31971,"code":116779,"language":31973,"meta":63,"style":63},[65,117117,117118,117132],{"__ignoreMap":63},[68,117119,117120,117122,117124,117126,117128,117130],{"class":70,"line":71},[68,117121,32416],{"class":92},[68,117123,115690],{"class":85},[68,117125,869],{"class":102},[68,117127,102986],{"class":85},[68,117129,102888],{"class":92},[68,117131,1757],{"class":85},[68,117133,117134,117136,117138,117140,117142,117144],{"class":70,"line":78},[68,117135,32416],{"class":92},[68,117137,115705],{"class":85},[68,117139,869],{"class":102},[68,117141,115710],{"class":85},[68,117143,32416],{"class":92},[68,117145,115715],{"class":85},[19,117147,117148,117149,117151,117152,102592,117155,117158],{},"把 MuJoCo 模型和状态保存到 ",[65,117150,32416],{}," 上。",[65,117153,117154],{},"self.model",[65,117156,117157],{},"self.data"," 表示这个环境对象自己的模型和状态。",[58,117160,117161],{"className":31971,"code":116821,"language":31973,"meta":63,"style":63},[65,117162,117163,117177],{"__ignoreMap":63},[68,117164,117165,117167,117169,117171,117173,117175],{"class":70,"line":71},[68,117166,32416],{"class":92},[68,117168,115726],{"class":85},[68,117170,869],{"class":102},[68,117172,115731],{"class":85},[68,117174,91130],{"class":92},[68,117176,1757],{"class":85},[68,117178,117179,117181,117183,117185,117187,117189],{"class":70,"line":78},[68,117180,32416],{"class":92},[68,117182,115747],{"class":85},[68,117184,869],{"class":102},[68,117186,115731],{"class":85},[68,117188,91130],{"class":92},[68,117190,1757],{"class":85},[19,117192,117193,117194,102592,117197,117200],{},"提前查好 tip 和 target 的 site ID。这样 ",[65,117195,117196],{},"_get_obs",[65,117198,117199],{},"_get_reward"," 里就不用每次按名字查找。",[58,117202,117204],{"className":31971,"code":117203,"language":31973,"meta":63,"style":63},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[65,117205,117206,117216,117226],{"__ignoreMap":63},[68,117207,117208,117210,117212,117214],{"class":70,"line":71},[68,117209,32416],{"class":92},[68,117211,115440],{"class":85},[68,117213,869],{"class":102},[68,117215,56011],{"class":92},[68,117217,117218,117220,117222,117224],{"class":70,"line":78},[68,117219,32416],{"class":92},[68,117221,115819],{"class":85},[68,117223,869],{"class":102},[68,117225,115824],{"class":92},[68,117227,117228,117230,117232,117234],{"class":70,"line":89},[68,117229,32416],{"class":92},[68,117231,115279],{"class":85},[68,117233,869],{"class":102},[68,117235,48926],{"class":92},[19,117237,117238,117241,117242,117245,117246,117249],{},[65,117239,117240],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[65,117243,117244],{},"max_steps"," 是一个 episode 最多运行多少步。",[65,117247,117248],{},"steps"," 记录当前 episode 已经走了多少步。",[58,117251,117252],{"className":31971,"code":115318,"language":31973,"meta":63,"style":63},[65,117253,117254],{"__ignoreMap":63},[68,117255,117256,117258,117260,117262,117264,117266,117268,117270,117272,117274,117276,117278,117280,117282,117284,117286,117288,117290,117292,117294],{"class":70,"line":71},[68,117257,32416],{"class":92},[68,117259,115327],{"class":85},[68,117261,869],{"class":102},[68,117263,115332],{"class":85},[68,117265,115335],{"class":6815},[68,117267,115338],{"class":102},[68,117269,103977],{"class":92},[68,117271,1002],{"class":85},[68,117273,115345],{"class":6815},[68,117275,869],{"class":102},[68,117277,103977],{"class":92},[68,117279,1002],{"class":85},[68,117281,97538],{"class":6815},[68,117283,869],{"class":102},[68,117285,997],{"class":85},[68,117287,267],{"class":92},[68,117289,115362],{"class":85},[68,117291,95076],{"class":6815},[68,117293,869],{"class":102},[68,117295,115369],{"class":85},[19,117297,117298,117299,117302,117303,102592,117306,117309],{},"定义动作空间。",[65,117300,117301],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[65,117304,117305],{},"low=-1.0",[65,117307,117308],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[58,117311,117312],{"className":31971,"code":115379,"language":31973,"meta":63,"style":63},[65,117313,117314],{"__ignoreMap":63},[68,117315,117316,117318,117320,117322,117324,117326,117328,117330,117332,117334,117336,117338,117340,117342,117344,117346,117348,117350],{"class":70,"line":71},[68,117317,32416],{"class":92},[68,117319,115388],{"class":85},[68,117321,869],{"class":102},[68,117323,115332],{"class":85},[68,117325,115335],{"class":6815},[68,117327,115338],{"class":102},[68,117329,115399],{"class":85},[68,117331,115345],{"class":6815},[68,117333,869],{"class":102},[68,117335,115399],{"class":85},[68,117337,97538],{"class":6815},[68,117339,869],{"class":102},[68,117341,997],{"class":85},[68,117343,2182],{"class":92},[68,117345,115362],{"class":85},[68,117347,95076],{"class":6815},[68,117349,869],{"class":102},[68,117351,115369],{"class":85},[19,117353,117354,117355,117358,117359,117362],{},"定义观测空间。",[65,117356,117357],{},"shape=(10,)"," 表示观测是 10 个数。",[65,117360,117361],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[58,117364,117366],{"className":31971,"code":117365,"language":31973,"meta":63,"style":63},"def _get_obs(self) -> np.ndarray:\n",[65,117367,117368],{"__ignoreMap":63},[68,117369,117370,117372,117374],{"class":70,"line":71},[68,117371,33540],{"class":102},[68,117373,115929],{"class":587},[68,117375,115932],{"class":85},[19,117377,117378,117379,117381],{},"定义内部函数，用来生成观测。函数名前面的 ",[65,117380,2727],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[58,117383,117385],{"className":31971,"code":117384,"language":31973,"meta":63,"style":63},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[65,117386,117387,117401],{"__ignoreMap":63},[68,117388,117389,117391,117393,117395,117397,117399],{"class":70,"line":71},[68,117390,113141],{"class":85},[68,117392,869],{"class":102},[68,117394,40466],{"class":92},[68,117396,115943],{"class":85},[68,117398,32416],{"class":92},[68,117400,115948],{"class":85},[68,117402,117403,117405,117407,117409,117411,117413],{"class":70,"line":78},[68,117404,113151],{"class":85},[68,117406,869],{"class":102},[68,117408,40466],{"class":92},[68,117410,115943],{"class":85},[68,117412,32416],{"class":92},[68,117414,115963],{"class":85},[19,117416,117417],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[58,117419,117421],{"className":31971,"code":117420,"language":31973,"meta":63,"style":63},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[65,117422,117423,117439],{"__ignoreMap":63},[68,117424,117425,117427,117429,117431,117433,117435,117437],{"class":70,"line":71},[68,117426,112427],{"class":85},[68,117428,869],{"class":102},[68,117430,115972],{"class":85},[68,117432,32416],{"class":92},[68,117434,115977],{"class":85},[68,117436,32416],{"class":92},[68,117438,115982],{"class":85},[68,117440,117441,117443],{"class":70,"line":78},[68,117442,18641],{"class":102},[68,117444,115989],{"class":85},[19,117446,117447,117448,117451,117452,117454],{},"拼接观测，并转换成 ",[65,117449,117450],{},"float32","。很多强化学习库默认使用 ",[65,117453,117450],{},"，所以这里主动转换。",[58,117456,117457],{"className":31971,"code":116860,"language":31973,"meta":63,"style":63},[65,117458,117459],{"__ignoreMap":63},[68,117460,117461,117463,117465,117467,117469,117471,117473,117475,117477,117479,117481,117483,117485,117487,117489,117491,117493],{"class":70,"line":71},[68,117462,33540],{"class":102},[68,117464,116095],{"class":587},[68,117466,116098],{"class":85},[68,117468,2191],{"class":102},[68,117470,116103],{"class":85},[68,117472,1754],{"class":92},[68,117474,26704],{"class":102},[68,117476,40526],{"class":92},[68,117478,15161],{"class":102},[68,117480,40526],{"class":92},[68,117482,116116],{"class":85},[68,117484,116119],{"class":92},[68,117486,26704],{"class":102},[68,117488,40526],{"class":92},[68,117490,15161],{"class":102},[68,117492,40526],{"class":92},[68,117494,32379],{"class":85},[19,117496,117497,117498,117500,117501,117504],{},"定义 reset。",[65,117499,116139],{}," 用来控制随机数，保证实验可以复现。",[65,117502,117503],{},"options"," 用来接收额外配置，本章暂时不用。",[58,117506,117508],{"className":31971,"code":117507,"language":31973,"meta":63,"style":63},"super().reset(seed=seed)\n",[65,117509,117510],{"__ignoreMap":63},[68,117511,117512,117514,117516,117518,117520],{"class":70,"line":71},[68,117513,117101],{"class":92},[68,117515,116136],{"class":85},[68,117517,116139],{"class":6815},[68,117519,869],{"class":102},[68,117521,116144],{"class":85},[19,117523,117524,117525,117528],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[65,117526,117527],{},"self.np_random"," 生成可复现的随机数。",[58,117530,117532],{"className":31971,"code":117531,"language":31973,"meta":63,"style":63},"mujoco.mj_resetData(self.model, self.data)\n",[65,117533,117534],{"__ignoreMap":63},[68,117535,117536,117539,117541,117543,117545],{"class":70,"line":71},[68,117537,117538],{"class":85},"mujoco.mj_resetData(",[68,117540,32416],{"class":92},[68,117542,116154],{"class":85},[68,117544,32416],{"class":92},[68,117546,116159],{"class":85},[19,117548,117549],{},"把 MuJoCo 状态重置到默认状态。",[58,117551,117553],{"className":31971,"code":117552,"language":31973,"meta":63,"style":63},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[65,117554,117555],{"__ignoreMap":63},[68,117556,117557,117559,117561,117563,117565,117567,117569,117571,117573,117575,117577,117579,117581,117583,117585,117587,117589],{"class":70,"line":71},[68,117558,32416],{"class":92},[68,117560,116170],{"class":85},[68,117562,869],{"class":102},[68,117564,40466],{"class":92},[68,117566,116177],{"class":85},[68,117568,115335],{"class":6815},[68,117570,115338],{"class":102},[68,117572,1013],{"class":92},[68,117574,1002],{"class":85},[68,117576,115345],{"class":6815},[68,117578,869],{"class":102},[68,117580,1013],{"class":92},[68,117582,1002],{"class":85},[68,117584,33089],{"class":6815},[68,117586,869],{"class":102},[68,117588,32416],{"class":92},[68,117590,116202],{"class":85},[19,117592,116914,117593,117596,117597,117600,117601,117603],{},[65,117594,117595],{},"[:]"," 表示修改整个数组。",[65,117598,117599],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[65,117602,103724],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[58,117605,117607],{"className":31971,"code":117606,"language":31973,"meta":63,"style":63},"self.data.qvel[:] = 0.0\n",[65,117608,117609],{"__ignoreMap":63},[68,117610,117611,117613,117615,117617],{"class":70,"line":71},[68,117612,32416],{"class":92},[68,117614,116209],{"class":85},[68,117616,869],{"class":102},[68,117618,106334],{"class":92},[19,117620,117621],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[58,117623,117625],{"className":31971,"code":117624,"language":31973,"meta":63,"style":63},"self.steps = 0\nreturn self._get_obs(), {}\n",[65,117626,117627,117637],{"__ignoreMap":63},[68,117628,117629,117631,117633,117635],{"class":70,"line":71},[68,117630,32416],{"class":92},[68,117632,115279],{"class":85},[68,117634,869],{"class":102},[68,117636,48926],{"class":92},[68,117638,117639,117641,117643],{"class":70,"line":78},[68,117640,18641],{"class":102},[68,117642,40466],{"class":92},[68,117644,116249],{"class":85},[19,117646,117647],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[58,117649,117650],{"className":31971,"code":116923,"language":31973,"meta":63,"style":63},[65,117651,117652],{"__ignoreMap":63},[68,117653,117654,117656,117658],{"class":70,"line":71},[68,117655,33540],{"class":102},[68,117657,116260],{"class":587},[68,117659,116263],{"class":85},[19,117661,117662],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[58,117664,117666],{"className":31971,"code":117665,"language":31973,"meta":63,"style":63},"action = np.asarray(action, dtype=np.float32)\n",[65,117667,117668],{"__ignoreMap":63},[68,117669,117670,117672,117674,117676,117678,117680],{"class":70,"line":71},[68,117671,109015],{"class":85},[68,117673,869],{"class":102},[68,117675,116272],{"class":85},[68,117677,95076],{"class":6815},[68,117679,869],{"class":102},[68,117681,115369],{"class":85},[19,117683,117684,117685,29978],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[65,117686,117450],{},[58,117688,117690],{"className":31971,"code":117689,"language":31973,"meta":63,"style":63},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[65,117691,117692],{"__ignoreMap":63},[68,117693,117694,117696,117698,117700,117702,117704,117706],{"class":70,"line":71},[68,117695,109015],{"class":85},[68,117697,869],{"class":102},[68,117699,109020],{"class":85},[68,117701,32416],{"class":92},[68,117703,116291],{"class":85},[68,117705,32416],{"class":92},[68,117707,116296],{"class":85},[19,117709,117710],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[58,117712,117714],{"className":31971,"code":117713,"language":31973,"meta":63,"style":63},"self.data.ctrl[:] = action\n",[65,117715,117716],{"__ignoreMap":63},[68,117717,117718,117720,117722,117724],{"class":70,"line":71},[68,117719,32416],{"class":92},[68,117721,116307],{"class":85},[68,117723,869],{"class":102},[68,117725,109043],{"class":85},[19,117727,117728],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[58,117730,117732],{"className":31971,"code":117731,"language":31973,"meta":63,"style":63},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[65,117733,117734,117750],{"__ignoreMap":63},[68,117735,117736,117738,117740,117742,117744,117746,117748],{"class":70,"line":71},[68,117737,4624],{"class":102},[68,117739,103075],{"class":85},[68,117741,27637],{"class":102},[68,117743,34036],{"class":92},[68,117745,997],{"class":85},[68,117747,32416],{"class":92},[68,117749,116328],{"class":85},[68,117751,117752,117755,117757,117759,117761],{"class":70,"line":78},[68,117753,117754],{"class":85},"    mujoco.mj_step(",[68,117756,32416],{"class":92},[68,117758,116154],{"class":85},[68,117760,32416],{"class":92},[68,117762,116159],{"class":85},[19,117764,117765,117766,117769,117770,117772,117773,29978],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[65,117767,117768],{},"frame_skip=5","，所以外部调用一次 ",[65,117771,115450],{},"，内部实际执行 5 次 ",[65,117774,102789],{},[58,117776,117778],{"className":31971,"code":117777,"language":31973,"meta":63,"style":63},"self.steps += 1\n",[65,117779,117780],{"__ignoreMap":63},[68,117781,117782,117784,117786,117788],{"class":70,"line":71},[68,117783,32416],{"class":92},[68,117785,115279],{"class":85},[68,117787,11075],{"class":102},[68,117789,57283],{"class":92},[19,117791,117792],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[58,117794,117796],{"className":31971,"code":117795,"language":31973,"meta":63,"style":63},"obs = self._get_obs()\nreward = self._get_reward()\n",[65,117797,117798,117808],{"__ignoreMap":63},[68,117799,117800,117802,117804,117806],{"class":70,"line":71},[68,117801,112427],{"class":85},[68,117803,869],{"class":102},[68,117805,40466],{"class":92},[68,117807,116370],{"class":85},[68,117809,117810,117812,117814,117816],{"class":70,"line":78},[68,117811,112578],{"class":85},[68,117813,869],{"class":102},[68,117815,40466],{"class":92},[68,117817,116381],{"class":85},[19,117819,117820],{},"计算新的观测和奖励。",[58,117822,117824],{"className":31971,"code":117823,"language":31973,"meta":63,"style":63},"dist = float(np.linalg.norm(tip - target))\n",[65,117825,117826],{"__ignoreMap":63},[68,117827,117828,117830,117832,117834,117836,117838],{"class":70,"line":71},[68,117829,113169],{"class":85},[68,117831,869],{"class":102},[68,117833,111370],{"class":92},[68,117835,116424],{"class":85},[68,117837,2268],{"class":102},[68,117839,116429],{"class":85},[19,117841,117842],{},"计算末端到目标的距离，并转换成 Python float。",[58,117844,117845],{"className":31971,"code":115250,"language":31973,"meta":63,"style":63},[65,117846,117847,117859],{"__ignoreMap":63},[68,117848,117849,117851,117853,117855,117857],{"class":70,"line":71},[68,117850,115257],{"class":85},[68,117852,869],{"class":102},[68,117854,115262],{"class":85},[68,117856,861],{"class":102},[68,117858,115267],{"class":92},[68,117860,117861,117863,117865,117867,117869,117871,117873],{"class":70,"line":78},[68,117862,115272],{"class":85},[68,117864,869],{"class":102},[68,117866,40466],{"class":92},[68,117868,115279],{"class":85},[68,117870,3312],{"class":102},[68,117872,40466],{"class":92},[68,117874,115286],{"class":85},[19,117876,117877],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[58,117879,117881],{"className":31971,"code":117880,"language":31973,"meta":63,"style":63},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[65,117882,117883,117896],{"__ignoreMap":63},[68,117884,117885,117888,117890,117892,117894],{"class":70,"line":71},[68,117886,117887],{"class":85},"info ",[68,117889,869],{"class":102},[68,117891,6047],{"class":85},[68,117893,116475],{"class":872},[68,117895,116478],{"class":85},[68,117897,117898,117900],{"class":70,"line":78},[68,117899,18641],{"class":102},[68,117901,116485],{"class":85},[19,117903,117904,117907],{},[65,117905,117906],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[58,117909,117911],{"className":31971,"code":117910,"language":31973,"meta":63,"style":63},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[65,117912,117913,117922],{"__ignoreMap":63},[68,117914,117915,117918,117920],{"class":70,"line":71},[68,117916,117917],{"class":85},"env ",[68,117919,869],{"class":102},[68,117921,116515],{"class":85},[68,117923,117924,117926,117928,117930,117932,117934,117936],{"class":70,"line":78},[68,117925,114973],{"class":85},[68,117927,869],{"class":102},[68,117929,116525],{"class":85},[68,117931,116139],{"class":6815},[68,117933,869],{"class":102},[68,117935,600],{"class":92},[68,117937,1757],{"class":85},[19,117939,117940,117941,117944],{},"创建环境并重置。",[65,117942,117943],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[58,117946,117948],{"className":31971,"code":117947,"language":31973,"meta":63,"style":63},"action = env.action_space.sample()\n",[65,117949,117950],{"__ignoreMap":63},[68,117951,117952,117954,117956],{"class":70,"line":71},[68,117953,109015],{"class":85},[68,117955,869],{"class":102},[68,117957,116594],{"class":85},[19,117959,117960],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117962,103890],{"id":103889},[19,117964,107057],{},[58,117966,117969],{"className":117967,"code":117968,"language":6786,"meta":63},[6784],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[65,117970,117968],{"__ignoreMap":63},[19,117972,117973],{},"这个环境已经具备强化学习环境的基本结构。",[19,117975,117976],{},"主函数里使用随机动作：",[58,117978,117979],{"className":31971,"code":117947,"language":31973,"meta":63,"style":63},[65,117980,117981],{"__ignoreMap":63},[68,117982,117983,117985,117987],{"class":70,"line":71},[68,117984,109015],{"class":85},[68,117986,869],{"class":102},[68,117988,116594],{"class":85},[19,117990,117991],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117993,103922],{"id":103921},[48,117995,117996,117999,118005,118014,118023,118032,118038],{},[51,117997,117998],{},"运行程序。",[51,118000,118001,118002,29978],{},"确认 ",[65,118003,118004],{},"obs.shape == (10,)",[51,118006,112754,118007,118010,118011,29978],{},[65,118008,118009],{},"env.action_space","，应类似 ",[65,118012,118013],{},"Box(-1.0, 1.0, (2,), float32)",[51,118015,107158,118016,118019,118020,29978],{},[65,118017,118018],{},"self.max_steps = 10","，确认环境会更快 ",[65,118021,118022],{},"truncated=True",[51,118024,103985,118025,103988,118028,118031],{},[65,118026,118027],{},"terminated = dist \u003C 0.05",[65,118029,118030],{},"dist \u003C 0.2","，观察是否更容易结束。",[51,118033,103985,118034,118037],{},[65,118035,118036],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[51,118039,118040,118041,118043,118044,118047],{},"在 ",[65,118042,117906],{}," 里加入 ",[65,118045,118046],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118049,104027],{"id":104026},[43,118051,118053],{"id":118052},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118055,118056,118057,118059],{},"Gymnasium 的 ",[65,118058,108707],{}," 返回 5 个值:",[58,118061,118063],{"className":31971,"code":118062,"language":31973,"meta":63,"style":63},"obs, reward, terminated, truncated, info\n",[65,118064,118065],{"__ignoreMap":63},[68,118066,118067],{"class":70,"line":71},[68,118068,118062],{"class":85},[19,118070,118071],{},"不是旧 Gym 的 4 个值。",[43,118073,118075,118078],{"id":118074},"datactrl-action-维度错误",[65,118076,118077],{},"data.ctrl[:] = action"," 维度错误",[19,118080,104097],{},[58,118082,118084],{"className":31971,"code":118083,"language":31973,"meta":63,"style":63},"print(self.model.nu)\nprint(action.shape)\n",[65,118085,118086,118097],{"__ignoreMap":63},[68,118087,118088,118090,118092,118094],{"class":70,"line":71},[68,118089,32008],{"class":92},[68,118091,997],{"class":85},[68,118093,32416],{"class":92},[68,118095,118096],{"class":85},".model.nu)\n",[68,118098,118099,118101],{"class":70,"line":78},[68,118100,32008],{"class":92},[68,118102,118103],{"class":85},"(action.shape)\n",[19,118105,118106],{},"两者必须匹配。",[43,118108,118110],{"id":118109},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118112,104036],{},[58,118114,118116],{"className":31971,"code":118115,"language":31973,"meta":63,"style":63},"mujoco.mj_forward(self.model, self.data)\n",[65,118117,118118],{"__ignoreMap":63},[68,118119,118120,118123,118125,118127,118129],{"class":70,"line":71},[68,118121,118122],{"class":85},"mujoco.mj_forward(",[68,118124,32416],{"class":92},[68,118126,116154],{"class":85},[68,118128,32416],{"class":92},[68,118130,116159],{"class":85},[43,118132,118134,118136],{"id":118133},"observation_space-维度和-obs-不一致",[65,118135,115173],{}," 维度和 obs 不一致",[19,118138,104149],{},[58,118140,118142],{"className":31971,"code":118141,"language":31973,"meta":63,"style":63},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[65,118143,118144,118154,118161],{"__ignoreMap":63},[68,118145,118146,118148,118150,118152],{"class":70,"line":71},[68,118147,112427],{"class":85},[68,118149,869],{"class":102},[68,118151,40466],{"class":92},[68,118153,116370],{"class":85},[68,118155,118156,118158],{"class":70,"line":78},[68,118157,32008],{"class":92},[68,118159,118160],{"class":85},"(obs.shape)\n",[68,118162,118163,118165,118167,118169],{"class":70,"line":89},[68,118164,32008],{"class":92},[68,118166,997],{"class":85},[68,118168,32416],{"class":92},[68,118170,118171],{"class":85},".observation_space.shape)\n",[19,118173,118174],{},"两者必须一致。本章观测是：",[58,118176,118179],{"className":118177,"code":118178,"language":6786,"meta":63},[6784],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[65,118180,118178],{"__ignoreMap":63},[43,118182,118184],{"id":118183},"action-超过范围","action 超过范围",[19,118186,118187],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[58,118189,118190],{"className":31971,"code":117689,"language":31973,"meta":63,"style":63},[65,118191,118192],{"__ignoreMap":63},[68,118193,118194,118196,118198,118200,118202,118204,118206],{"class":70,"line":71},[68,118195,109015],{"class":85},[68,118197,869],{"class":102},[68,118199,109020],{"class":85},[68,118201,32416],{"class":92},[68,118203,116291],{"class":85},[68,118205,32416],{"class":92},[68,118207,116296],{"class":85},[19,118209,118210,118211,29978],{},"这能避免无效动作直接写入 ",[65,118212,102650],{},[43,118214,118216],{"id":118215},"忘记返回-info","忘记返回 info",[19,118218,118056,118219,102592,118221,118223],{},[65,118220,71638],{},[65,118222,108707],{}," 都会返回 info：",[58,118225,118226],{"className":31971,"code":114966,"language":31973,"meta":63,"style":63},[65,118227,118228,118236],{"__ignoreMap":63},[68,118229,118230,118232,118234],{"class":70,"line":71},[68,118231,114973],{"class":85},[68,118233,869],{"class":102},[68,118235,114978],{"class":85},[68,118237,118238,118240,118242],{"class":70,"line":78},[68,118239,114983],{"class":85},[68,118241,869],{"class":102},[68,118243,114988],{"class":85},[19,118245,118246,118247,29978],{},"即使暂时没有额外信息，也返回 ",[65,118248,34052],{},[14,118250,118252],{"id":118251},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118254,118255],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[48,118257,118258,118261,118264,118267,118270,118273],{},[51,118259,118260],{},"更稳定的 reward。",[51,118262,118263],{},"合理的 episode 长度。",[51,118265,118266],{},"可重复的随机目标采样。",[51,118268,118269],{},"render 接口。",[51,118271,118272],{},"环境注册代码。",[51,118274,118275],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118277,118278],{},"如果只是自己写训练循环，最小形式是：",[58,118280,118282],{"className":31971,"code":118281,"language":31973,"meta":63,"style":63},"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",[65,118283,118284,118292,118308,118312,118328,118337,118346,118356],{"__ignoreMap":63},[68,118285,118286,118288,118290],{"class":70,"line":71},[68,118287,117917],{"class":85},[68,118289,869],{"class":102},[68,118291,116515],{"class":85},[68,118293,118294,118296,118298,118300,118302,118304,118306],{"class":70,"line":78},[68,118295,114973],{"class":85},[68,118297,869],{"class":102},[68,118299,116525],{"class":85},[68,118301,116139],{"class":6815},[68,118303,869],{"class":102},[68,118305,600],{"class":92},[68,118307,1757],{"class":85},[68,118309,118310],{"class":70,"line":89},[68,118311,4000],{"emptyLinePlaceholder":1679},[68,118313,118314,118316,118318,118320,118322,118324,118326],{"class":70,"line":115},[68,118315,4624],{"class":102},[68,118317,103075],{"class":85},[68,118319,27637],{"class":102},[68,118321,34036],{"class":92},[68,118323,997],{"class":85},[68,118325,8009],{"class":92},[68,118327,32379],{"class":85},[68,118329,118330,118333,118335],{"class":70,"line":280},[68,118331,118332],{"class":85},"    action ",[68,118334,869],{"class":102},[68,118336,116594],{"class":85},[68,118338,118339,118342,118344],{"class":70,"line":301},[68,118340,118341],{"class":85},"    obs, reward, terminated, truncated, info ",[68,118343,869],{"class":102},[68,118345,114988],{"class":85},[68,118347,118348,118350,118352,118354],{"class":70,"line":320},[68,118349,4700],{"class":102},[68,118351,116660],{"class":85},[68,118353,116663],{"class":102},[68,118355,116666],{"class":85},[68,118357,118358,118361,118363],{"class":70,"line":2915},[68,118359,118360],{"class":85},"        obs, info ",[68,118362,869],{"class":102},[68,118364,114978],{"class":85},[14,118366,118368],{"id":118367},"_9本章小结","9.本章小结",[19,118370,118371],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[58,118373,118376],{"className":118374,"code":118375,"language":6786,"meta":63},[6784],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[65,118377,118375],{"__ignoreMap":63},[19,118379,118380],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1652,118382,118383],{},"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":63,"searchDepth":78,"depth":78,"links":118385},[118386,118387,118388,118395,118399,118400,118401,118411,118412],{"id":102220,"depth":78,"text":102221},{"id":102343,"depth":78,"text":102344},{"id":102618,"depth":78,"text":102619,"children":118389},[118390,118392,118394],{"id":115197,"depth":89,"text":118391},"terminated 和 truncated 的区别",{"id":115300,"depth":89,"text":118393},"observation_space 和 action_space",{"id":115427,"depth":89,"text":115428},{"id":102826,"depth":78,"text":102827,"children":118396},[118397,118398],{"id":103146,"depth":89,"text":103146},{"id":103282,"depth":89,"text":103282},{"id":103889,"depth":78,"text":103890},{"id":103921,"depth":78,"text":103922},{"id":104026,"depth":78,"text":104027,"children":118402},[118403,118404,118406,118407,118409,118410],{"id":118052,"depth":89,"text":118053},{"id":118074,"depth":89,"text":118405},"data.ctrl[:] = action 维度错误",{"id":118109,"depth":89,"text":118110},{"id":118133,"depth":89,"text":118408},"observation_space 维度和 obs 不一致",{"id":118183,"depth":89,"text":118184},{"id":118215,"depth":89,"text":118216},{"id":118251,"depth":78,"text":118252},{"id":118367,"depth":78,"text":118368},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114950,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118419,"title":118420,"body":118421,"description":118844,"extension":1677,"meta":118845,"navigation":1679,"path":118846,"seo":118847,"stem":118848,"__hash__":118849},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118422,"toc":118834},[118423,118427,118430,118433,118453,118459,118465,118475,118478,118481,118501,118504,118508,118511,118517,118520,118534,118537,118540,118614,118617,118623,118626,118649,118652,118702,118705,118711,118714,118717,118720,118739,118742,118748,118751,118754,118757,118777,118780,118783,118786,118831],[10,118424,118426],{"id":118425},"mujoco-学习","MuJoCo 学习",[19,118428,118429],{},"初版",[19,118431,118432],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[48,118434,118435,118438,118441,118450],{},[51,118436,118437],{},"MuJoCo 模型文件在描述什么。",[51,118439,118440],{},"Python 代码怎样读取和推进仿真。",[51,118442,118443,1949,118445,1949,118447,118449],{},[65,118444,105603],{},[65,118446,105933],{},[65,118448,105936],{}," 这些数组为什么重要。",[51,118451,118452],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118454,118455,118456,118458],{},"默认环境为 Fedora 44、Python >= 3.10、",[65,118457,102601],{}," 官方 Python bindings。",[19,118460,118461,118462,118464],{},"注意：本文禁止使用 ",[65,118463,102586],{},"。所有示例均使用：",[58,118466,118467],{"className":31971,"code":103152,"language":31973,"meta":63,"style":63},[65,118468,118469],{"__ignoreMap":63},[68,118470,118471,118473],{"class":70,"line":71},[68,118472,31985],{"class":102},[68,118474,102875],{"class":85},[14,118476,118477],{"id":118477},"适合谁阅读",[19,118479,118480],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[48,118482,118483,118486,118489,118492],{},[51,118484,118485],{},"没学过 MuJoCo，只会一点 Python。",[51,118487,118488],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[51,118490,118491],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[51,118493,118494,118495,118497,118498,118500],{},"以前接触过 ",[65,118496,102586],{},"，现在想迁移到官方 ",[65,118499,102595],{}," Python bindings。",[19,118502,118503],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118505,118507],{"id":118506},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118509,118510],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[58,118512,118515],{"className":118513,"code":118514,"language":6786,"meta":63},[6784],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[65,118516,118514],{"__ignoreMap":63},[19,118518,118519],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[48,118521,118522,118525,118528,118531],{},[51,118523,118524],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[51,118526,118527],{},"快速测试控制算法，不必一开始就上真实机器人。",[51,118529,118530],{},"生成强化学习环境。",[51,118532,118533],{},"采集状态、动作、图像、奖励等训练数据。",[14,118535,118536],{"id":118536},"学习前的心智模型",[19,118538,118539],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[120,118541,118542,118554],{},[123,118543,118544],{},[126,118545,118546,118549,118552],{},[129,118547,118548],{"align":131},"部分",[129,118550,118551],{"align":131},"负责什么",[129,118553,22782],{"align":131},[137,118555,118556,118567,118579,118591,118603],{},[126,118557,118558,118561,118564],{},[142,118559,118560],{"align":131},"MJCF XML",[142,118562,118563],{"align":131},"定义世界和机器人结构",[142,118565,118566],{"align":131},"地面、盒子、关节、电机、摄像头",[126,118568,118569,118573,118576],{},[142,118570,118571],{"align":131},[65,118572,102283],{},[142,118574,118575],{"align":131},"编译后的静态模型",[142,118577,118578],{"align":131},"有几个关节、有几个电机、时间步长是多少",[126,118580,118581,118585,118588],{},[142,118582,118583],{"align":131},[65,118584,102293],{},[142,118586,118587],{"align":131},"运行中的动态状态",[142,118589,118590],{"align":131},"当前时间、位置、速度、电机输入",[126,118592,118593,118597,118600],{},[142,118594,118595],{"align":131},[65,118596,102789],{},[142,118598,118599],{"align":131},"推进一步物理仿真",[142,118601,118602],{"align":131},"根据重力、力、碰撞更新状态",[126,118604,118605,118608,118611],{},[142,118606,118607],{"align":131},"Viewer \u002F Renderer",[142,118609,118610],{"align":131},"把仿真显示出来",[142,118612,118613],{"align":131},"打开窗口或保存图片",[19,118615,118616],{},"一句话总结：",[58,118618,118621],{"className":118619,"code":118620,"language":6786,"meta":63},[6784],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[65,118622,118620],{"__ignoreMap":63},[19,118624,118625],{},"参考来源：",[168,118627,118628,118635,118642],{},[51,118629,118630,118631],{},"MuJoCo Python 官方文档：",[1974,118632,118633],{"href":118633,"rel":118634},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25459],[51,118636,118637,118638],{},"MuJoCo XML Reference：",[1974,118639,118640],{"href":118640,"rel":118641},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25459],[51,118643,118644,118645],{},"MuJoCo Overview：",[1974,118646,118647],{"href":118647,"rel":118648},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25459],[14,118650,118651],{"id":118651},"章节目录",[48,118653,118654,118660,118666,118672,118678,118684,118690,118696],{},[51,118655,118656],{},[1974,118657,118659],{"href":118658},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[51,118661,118662],{},[1974,118663,118665],{"href":118664},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[51,118667,118668],{},[1974,118669,118671],{"href":118670},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[51,118673,118674],{},[1974,118675,118677],{"href":118676},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[51,118679,118680],{},[1974,118681,118683],{"href":118682},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[51,118685,118686],{},[1974,118687,118689],{"href":118688},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[51,118691,118692],{},[1974,118693,118695],{"href":118694},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[51,118697,118698],{},[1974,118699,118701],{"href":118700},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118703,118704],{"id":118704},"推荐学习路线",[58,118706,118709],{"className":118707,"code":118708,"language":6786,"meta":63},[6784],"环境安装\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",[65,118710,118708],{"__ignoreMap":63},[19,118712,118713],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118715,118716],{"id":118716},"建议的目录结构",[19,118718,118719],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[58,118721,118723],{"className":25416,"code":118722,"language":25418,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[65,118724,118725,118733],{"__ignoreMap":63},[68,118726,118727,118729,118731],{"class":70,"line":71},[68,118728,102840],{"class":587},[68,118730,30809],{"class":92},[68,118732,102845],{"class":872},[68,118734,118735,118737],{"class":70,"line":78},[68,118736,102850],{"class":92},[68,118738,102845],{"class":872},[19,118740,118741],{},"每一章的代码都单独保存：",[58,118743,118746],{"className":118744,"code":118745,"language":6786,"meta":63},[6784],"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",[65,118747,118745],{"__ignoreMap":63},[19,118749,118750],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118752,118753],{"id":118753},"学习方法",[19,118755,118756],{},"每章建议按这个顺序操作：",[48,118758,118759,118762,118765,118768,118771,118774],{},[51,118760,118761],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[51,118763,118764],{},"复制最小可运行代码，保存成指定文件。",[51,118766,118767],{},"运行代码，确认没有报错。",[51,118769,118770],{},"对照“运行结果说明”理解输出。",[51,118772,118773],{},"做“验证步骤”，主动改一两个参数。",[51,118775,118776],{},"遇到报错先看“常见错误与解决方案”。",[19,118778,118779],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118781,118782],{"id":118782},"全局排错顺序",[19,118784,118785],{},"遇到问题时，按下面顺序查：",[48,118787,118788,118794,118800,118805,118808,118811,118818,118828],{},[51,118789,118790,118791],{},"Python 环境是否激活：",[65,118792,118793],{},"which python",[51,118795,118796,118797],{},"MuJoCo 是否能导入：",[65,118798,118799],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[51,118801,118802,118803],{},"是否误装了 ",[65,118804,102586],{},[51,118806,118807],{},"XML 标签是否闭合、属性是否拼写正确",[51,118809,118810],{},"actuator 引用的 joint 名字是否存在",[51,118812,118813,118815,118816],{},[65,118814,102650],{}," 的长度是否等于 ",[65,118817,103732],{},[51,118819,107158,118820,84116,118822,118824,118825],{},[65,118821,105603],{},[65,118823,105933],{}," 后是否调用了 ",[65,118826,118827],{},"mujoco.mj_forward",[51,118829,118830],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1652,118832,118833],{},"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":63,"searchDepth":78,"depth":78,"links":118835},[118836,118837,118838,118839,118840,118841,118842,118843],{"id":118477,"depth":78,"text":118477},{"id":118506,"depth":78,"text":118507},{"id":118536,"depth":78,"text":118536},{"id":118651,"depth":78,"text":118651},{"id":118704,"depth":78,"text":118704},{"id":118716,"depth":78,"text":118716},{"id":118753,"depth":78,"text":118753},{"id":118782,"depth":78,"text":118782},"仿真搭建。",{"category":24973},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118420,"description":118844},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118851,"title":118852,"body":118853,"description":1676,"extension":1677,"meta":119308,"navigation":1679,"path":119309,"seo":119310,"stem":119311,"__hash__":119312},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118854,"toc":119306},[118855,118858,118861,118867,119303],[10,118856,118852],{"id":118857},"_1-最常用的基本操作更新",[19,118859,118860],{},"装linux系统教程：",[19,118862,118863],{},[1974,118864,118865],{"href":118865,"rel":118866},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25459],[58,118868,118872],{"className":118869,"code":118870,"language":118871,"meta":63,"style":63},"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",[65,118873,118874,118879,118884,118893,118898,118907,118912,118932,118937,118948,118953,118962,118967,118995,119000,119019,119024,119043,119047,119052,119068,119072,119077,119107,119111,119116,119132,119136,119141,119156,119160,119165,119181,119185,119190,119202,119214,119218,119223,119240,119244,119249,119267,119271,119276,119285,119289,119294],{"__ignoreMap":63},[68,118875,118876],{"class":70,"line":71},[68,118877,118878],{"class":74},"#更新相关的知识\n",[68,118880,118881],{"class":70,"line":78},[68,118882,118883],{"class":74},"# 更新软件包列表（从服务器获取最新软件信息）\n",[68,118885,118886,118888,118891],{"class":70,"line":89},[68,118887,26171],{"class":587},[68,118889,118890],{"class":872}," apt",[68,118892,27836],{"class":872},[68,118894,118895],{"class":70,"line":115},[68,118896,118897],{"class":74},"# 升级所有可更新的软件包（不删除旧包）\n",[68,118899,118900,118902,118904],{"class":70,"line":280},[68,118901,26171],{"class":587},[68,118903,118890],{"class":872},[68,118905,118906],{"class":872}," upgrade\n",[68,118908,118909],{"class":70,"line":301},[68,118910,118911],{"class":74},"#更新和升级软件包\n",[68,118913,118914,118916,118918,118921,118923,118925,118927,118930],{"class":70,"line":320},[68,118915,26171],{"class":587},[68,118917,118890],{"class":872},[68,118919,118920],{"class":872}," update",[68,118922,27784],{"class":85},[68,118924,26171],{"class":587},[68,118926,118890],{"class":872},[68,118928,118929],{"class":872}," upgrade",[68,118931,102555],{"class":92},[68,118933,118934],{"class":70,"line":2915},[68,118935,118936],{"class":74},"#列出可更新的软件包及版本信息\n",[68,118938,118939,118942,118945],{"class":70,"line":2921},[68,118940,118941],{"class":587},"apt",[68,118943,118944],{"class":872}," list",[68,118946,118947],{"class":92}," --upgradable\n",[68,118949,118950],{"class":70,"line":2933},[68,118951,118952],{"class":74},"#彻底升级（处理依赖关系，可能删除旧包）\n",[68,118954,118955,118957,118959],{"class":70,"line":3214},[68,118956,26171],{"class":587},[68,118958,118890],{"class":872},[68,118960,118961],{"class":872}," full-upgrade\n",[68,118963,118964],{"class":70,"line":3219},[68,118965,118966],{"class":74},"#设置指定版本\n",[68,118968,118969,118971,118973,118975,118977,118980,118982,118984,118986,118988,118991,118993],{"class":70,"line":3225},[68,118970,26171],{"class":587},[68,118972,118890],{"class":872},[68,118974,25428],{"class":872},[68,118976,30495],{"class":102},[68,118978,118979],{"class":872},"package_nam",[68,118981,1821],{"class":85},[68,118983,2695],{"class":102},[68,118985,869],{"class":872},[68,118987,861],{"class":102},[68,118989,118990],{"class":872},"version_numbe",[68,118992,2406],{"class":85},[68,118994,876],{"class":102},[68,118996,118997],{"class":70,"line":3230},[68,118998,118999],{"class":74},"#只安装软件包不升级\n",[68,119001,119002,119004,119006,119008,119010,119012,119014,119016],{"class":70,"line":3244},[68,119003,26171],{"class":587},[68,119005,118890],{"class":872},[68,119007,25428],{"class":872},[68,119009,30495],{"class":102},[68,119011,118979],{"class":872},[68,119013,1821],{"class":85},[68,119015,2695],{"class":102},[68,119017,119018],{"class":92}," --no-upgrade\n",[68,119020,119021],{"class":70,"line":3249},[68,119022,119023],{"class":74},"#只升级，不存在就不安装\n",[68,119025,119026,119028,119030,119032,119034,119036,119038,119040],{"class":70,"line":3255},[68,119027,26171],{"class":587},[68,119029,118890],{"class":872},[68,119031,25428],{"class":872},[68,119033,30495],{"class":102},[68,119035,118979],{"class":872},[68,119037,1821],{"class":85},[68,119039,2695],{"class":102},[68,119041,119042],{"class":92}," --only-upgrade\n",[68,119044,119045],{"class":70,"line":3276},[68,119046,4000],{"emptyLinePlaceholder":1679},[68,119048,119049],{"class":70,"line":3281},[68,119050,119051],{"class":74},"#安装指定的软件命令\n",[68,119053,119054,119056,119058,119060,119062,119064,119066],{"class":70,"line":3295},[68,119055,26171],{"class":587},[68,119057,118890],{"class":872},[68,119059,25428],{"class":872},[68,119061,30495],{"class":102},[68,119063,118979],{"class":872},[68,119065,1821],{"class":85},[68,119067,876],{"class":102},[68,119069,119070],{"class":70,"line":3300},[68,119071,4000],{"emptyLinePlaceholder":1679},[68,119073,119074],{"class":70,"line":3329},[68,119075,119076],{"class":74},"#安装多个软件包\n",[68,119078,119079,119081,119083,119085,119087,119090,119093,119095,119097,119100,119102,119104],{"class":70,"line":3334},[68,119080,26171],{"class":587},[68,119082,118890],{"class":872},[68,119084,25428],{"class":872},[68,119086,30495],{"class":102},[68,119088,119089],{"class":872},"package_",[68,119091,119092],{"class":102},"1>",[68,119094,30495],{"class":102},[68,119096,119089],{"class":872},[68,119098,119099],{"class":102},"2>",[68,119101,30495],{"class":102},[68,119103,119089],{"class":872},[68,119105,119106],{"class":102},"3>\n",[68,119108,119109],{"class":70,"line":3351},[68,119110,4000],{"emptyLinePlaceholder":1679},[68,119112,119113],{"class":70,"line":3356},[68,119114,119115],{"class":74},"#更新指定的软件命令\n",[68,119117,119118,119120,119122,119124,119126,119128,119130],{"class":70,"line":3361},[68,119119,26171],{"class":587},[68,119121,118890],{"class":872},[68,119123,118920],{"class":872},[68,119125,30495],{"class":102},[68,119127,118979],{"class":872},[68,119129,1821],{"class":85},[68,119131,876],{"class":102},[68,119133,119134],{"class":70,"line":3366},[68,119135,4000],{"emptyLinePlaceholder":1679},[68,119137,119138],{"class":70,"line":3380},[68,119139,119140],{"class":74},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[68,119142,119143,119145,119148,119150,119152,119154],{"class":70,"line":3385},[68,119144,118941],{"class":587},[68,119146,119147],{"class":872}," show",[68,119149,30495],{"class":102},[68,119151,118979],{"class":872},[68,119153,1821],{"class":85},[68,119155,876],{"class":102},[68,119157,119158],{"class":70,"line":4177},[68,119159,4000],{"emptyLinePlaceholder":1679},[68,119161,119162],{"class":70,"line":4191},[68,119163,119164],{"class":74},"#删除软件包命令\n",[68,119166,119167,119169,119171,119173,119175,119177,119179],{"class":70,"line":4199},[68,119168,26171],{"class":587},[68,119170,118890],{"class":872},[68,119172,27673],{"class":872},[68,119174,30495],{"class":102},[68,119176,118979],{"class":872},[68,119178,1821],{"class":85},[68,119180,876],{"class":102},[68,119182,119183],{"class":70,"line":4204},[68,119184,4000],{"emptyLinePlaceholder":1679},[68,119186,119187],{"class":70,"line":4210},[68,119188,119189],{"class":74},"# 清理旧版本和缓存（释放磁盘空间）\n",[68,119191,119192,119194,119196,119199],{"class":70,"line":4216},[68,119193,26171],{"class":587},[68,119195,118890],{"class":872},[68,119197,119198],{"class":872}," autoremove",[68,119200,119201],{"class":74},"  # 删除不再需要的依赖和库文件\n",[68,119203,119204,119206,119208,119211],{"class":70,"line":4221},[68,119205,26171],{"class":587},[68,119207,118890],{"class":872},[68,119209,119210],{"class":872}," clean",[68,119212,119213],{"class":74},"       # 清理下载的缓存包\n",[68,119215,119216],{"class":70,"line":9547},[68,119217,4000],{"emptyLinePlaceholder":1679},[68,119219,119220],{"class":70,"line":9571},[68,119221,119222],{"class":74},"#移除软件包及配置文件\n",[68,119224,119225,119227,119229,119232,119234,119236,119238],{"class":70,"line":9576},[68,119226,26171],{"class":587},[68,119228,118890],{"class":872},[68,119230,119231],{"class":872}," purge",[68,119233,30495],{"class":102},[68,119235,118979],{"class":872},[68,119237,1821],{"class":85},[68,119239,876],{"class":102},[68,119241,119242],{"class":70,"line":9582},[68,119243,4000],{"emptyLinePlaceholder":1679},[68,119245,119246],{"class":70,"line":9609},[68,119247,119248],{"class":74},"#查找软件包命令\n",[68,119250,119251,119253,119255,119258,119260,119263,119265],{"class":70,"line":9614},[68,119252,26171],{"class":587},[68,119254,118890],{"class":872},[68,119256,119257],{"class":872}," search",[68,119259,30495],{"class":102},[68,119261,119262],{"class":872},"keywor",[68,119264,2050],{"class":85},[68,119266,876],{"class":102},[68,119268,119269],{"class":70,"line":9620},[68,119270,4000],{"emptyLinePlaceholder":1679},[68,119272,119273],{"class":70,"line":9632},[68,119274,119275],{"class":74},"#列出所有已安装的包\n",[68,119277,119278,119280,119282],{"class":70,"line":9644},[68,119279,118941],{"class":587},[68,119281,118944],{"class":872},[68,119283,119284],{"class":92}," --installed\n",[68,119286,119287],{"class":70,"line":9656},[68,119288,4000],{"emptyLinePlaceholder":1679},[68,119290,119291],{"class":70,"line":11314},[68,119292,119293],{"class":74},"#列出所有已安装的包的版本信息\n",[68,119295,119296,119298,119300],{"class":70,"line":11339},[68,119297,118941],{"class":587},[68,119299,118944],{"class":872},[68,119301,119302],{"class":92}," --all-versions\n",[1652,119304,119305],{},"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":63,"searchDepth":78,"depth":78,"links":119307},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118852,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119314,"title":119315,"body":119316,"description":1676,"extension":1677,"meta":120057,"navigation":1679,"path":120058,"seo":120059,"stem":120060,"__hash__":120061},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119317,"toc":120044},[119318,119321,119325,119328,119334,119338,119342,119348,119353,119358,119363,119368,119373,119376,119379,119382,119385,119389,119392,119397,119400,119405,119408,119413,119420,119423,119426,119429,119432,119435,119446,119450,119454,119459,119464,119468,119473,119477,119482,119486,119490,119495,119498,119543,119548,119552,119556,119561,119567,119572,119582,119587,119597,119602,119607,119634,119638,119641,119646,119649,119674,119678,119683,119686,119691,119696,119716,119721,119724,119739,119743,119796,119799,119804,119808,119811,119826,119829,119832,119837,119841,119845,119848,119852,119856,119859,119864,119869,119873,119880,119888,119891,119898,119903,119908,119911,119916,119923,119928,119935,119939,119941,119946,119950,119953,119956,119961,119964,119969,119972,119977,119982,119987,119991,119996,120000,120041],[10,119319,119315],{"id":119320},"_2-linux装机教程",[14,119322,119324],{"id":119323},"_21-实体机","2.1 实体机",[19,119326,119327],{},"使用清华源：（Ubuntu24.04）",[19,119329,119330],{},[1974,119331,119332],{"href":119332,"rel":119333},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25459],[14,119335,119337],{"id":119336},"_22-普通虚拟机","2.2 普通虚拟机",[43,119339,119341],{"id":119340},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119343,119344],{},[1974,119345,119346],{"href":119346,"rel":119347},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25459],[19,119349,119350],{},[38,119351],{"alt":63,"src":119352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119354,119355],{},[38,119356],{"alt":63,"src":119357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119359,119360],{},[38,119361],{"alt":63,"src":119362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119364,119365],{},[38,119366],{"alt":63,"src":119367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119369,119370],{},[38,119371],{"alt":63,"src":119372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119374,119375],{},"内存4G（4096MB）；",[19,119377,119378],{},"CPU给4个核；",[19,119380,119381],{},"硬盘动态分配60G；",[19,119383,119384],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[43,119386,119388],{"id":119387},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119390,119391],{},"按照1.1的步骤下载Ubuntu",[19,119393,119394],{},[38,119395],{"alt":63,"src":119396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119398,119399],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119401,119402],{},[38,119403],{"alt":63,"src":119404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119406,119407],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119409,119410],{},[38,119411],{"alt":63,"src":119412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119414,119415,119416,119419],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1890,119417,119418],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119421,119422],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119424,119425],{},"将改动写入磁盘吗 继续",[19,119427,119428],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119430,119431],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119433,119434],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119436,119437,119438,119441,119442,119445],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1890,119439,119440],{},"除了"," 选不发送系统信息与不升级之外， ",[1890,119443,119444],{},"其它"," 都跳过或前进）",[43,119447,119449],{"id":119448},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23593,119451,119453],{"id":119452},"_2231-全屏","2.2.3.1 全屏",[19,119455,119456],{},[38,119457],{"alt":63,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119460,119461],{},[38,119462],{"alt":63,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23593,119465,119467],{"id":119466},"_2232-文件交换","2.2.3.2 文件交换",[19,119469,119470],{},[38,119471],{"alt":63,"src":119472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23593,119474,119476],{"id":119475},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119478,119479],{},[38,119480],{"alt":63,"src":119481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119483,119485],{"id":119484},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[43,119487,119489],{"id":119488},"_231-简介与优缺点","2.3.1 简介与优缺点",[48,119491,119492],{},[51,119493,119494],{},"什么情况下推荐？",[19,119496,119497],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[48,119499,119500],{"start":78},[51,119501,119502,119503],{},"优缺点：",[48,119504,119505,119535],{},[51,119506,119507,119508],{},"优点：",[48,119509,119510,119513,119520,119523,119526,119529,119532],{},[51,119511,119512],{},"WSL2是最好的Linux发行版;(bushi)",[51,119514,119515,119516,119519],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1890,119517,119518],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[51,119521,119522],{},"非常方便调用USB设备，可以USB直通;",[51,119524,119525],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[51,119527,119528],{},"非常方便Win与WSL2互相传文件等协同操作;",[51,119530,119531],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[51,119533,119534],{},"非常方便使用Windows的VScode远程开发;",[51,119536,119537,119538],{},"缺点：",[48,119539,119540],{},[51,119541,119542],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119544,119545],{},[38,119546],{"alt":63,"src":119547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[43,119549,119551],{"id":119550},"_232-安装教程","2.3.2 安装教程",[23593,119553,119555],{"id":119554},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[48,119557,119558],{},[51,119559,119560],{},"方法一(图形界面)",[19,119562,119563,119564,26213],{},"用Win+R输入",[65,119565,119566],{},"appwiz.cpl",[19,119568,119569],{},[38,119570],{"alt":63,"src":119571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119573,119574,119575,119578,119579,28067],{},"点击OK进入 ",[1890,119576,119577],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1890,119580,119581],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119583,119584],{},[38,119585],{"alt":63,"src":119586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119588,119589,119590,102592,119593,119596],{},"选择 ",[1890,119591,119592],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1890,119594,119595],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119598,119599],{},[38,119600],{"alt":63,"src":119601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[48,119603,119604],{"start":78},[51,119605,119606],{},"方法二(命令行)",[58,119608,119612],{"className":119609,"code":119610,"language":119611,"meta":63,"style":63},"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",[65,119613,119614,119619,119624,119629],{"__ignoreMap":63},[68,119615,119616],{"class":70,"line":71},[68,119617,119618],{},"# 开启 Linux 子系统\n",[68,119620,119621],{"class":70,"line":78},[68,119622,119623],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[68,119625,119626],{"class":70,"line":89},[68,119627,119628],{},"# 开启虚拟机平台\n",[68,119630,119631],{"class":70,"line":115},[68,119632,119633],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23593,119635,119637],{"id":119636},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119639,119640],{},"用管理员权限打开powershell",[19,119642,119643],{},[38,119644],{"alt":63,"src":119645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119647,119648],{},"升级WSL并设置默认版本为WSL2",[58,119650,119652],{"className":119609,"code":119651,"language":119611,"meta":63,"style":63},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[65,119653,119654,119659,119664,119669],{"__ignoreMap":63},[68,119655,119656],{"class":70,"line":71},[68,119657,119658],{},"# 更新 wsl\n",[68,119660,119661],{"class":70,"line":78},[68,119662,119663],{},"wsl --update\n",[68,119665,119666],{"class":70,"line":89},[68,119667,119668],{},"# 将 wsl 版本设置为 wsl2\n",[68,119670,119671],{"class":70,"line":115},[68,119672,119673],{},"wsl --set-default-version 2\n",[23593,119675,119677],{"id":119676},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[48,119679,119680],{},[51,119681,119682],{},"方式一(商店下载)",[19,119684,119685],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119687,119688],{},[38,119689],{"alt":63,"src":119690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[48,119692,119693],{"start":78},[51,119694,119695],{},"方式二(命令行安装)",[58,119697,119699],{"className":119609,"code":119698,"language":119611,"meta":63,"style":63},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[65,119700,119701,119706,119711],{"__ignoreMap":63},[68,119702,119703],{"class":70,"line":71},[68,119704,119705],{},"# 列出可安装的 Linux 版本\n",[68,119707,119708],{"class":70,"line":78},[68,119709,119710],{},"#（需要科学手段）\n",[68,119712,119713],{"class":70,"line":89},[68,119714,119715],{},"wsl --list --online\n",[19,119717,119718],{},[38,119719],{"alt":63,"src":119720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119722,119723],{},"选择对应发行版并安装",[58,119725,119727],{"className":119609,"code":119726,"language":119611,"meta":63,"style":63},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[65,119728,119729,119734],{"__ignoreMap":63},[68,119730,119731],{"class":70,"line":71},[68,119732,119733],{},"# Ubuntu安装完毕后需要重启系统\n",[68,119735,119736],{"class":70,"line":78},[68,119737,119738],{},"wsl --install -d Ubuntu-24.04\n",[23593,119740,119742],{"id":119741},"_2324-查看系统状态","2.3.2.4 查看系统状态",[58,119744,119746],{"className":119609,"code":119745,"language":119611,"meta":63,"style":63},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[65,119747,119748,119753,119758,119763,119768,119772,119776,119781,119786,119791],{"__ignoreMap":63},[68,119749,119750],{"class":70,"line":71},[68,119751,119752],{},"# 查看 wsl\n",[68,119754,119755],{"class":70,"line":78},[68,119756,119757],{},"wsl -l\n",[68,119759,119760],{"class":70,"line":89},[68,119761,119762],{},"# 查看 wsl 运行版本或模式\n",[68,119764,119765],{"class":70,"line":115},[68,119766,119767],{},"wsl -l -v\n",[68,119769,119770],{"class":70,"line":280},[68,119771,4000],{"emptyLinePlaceholder":1679},[68,119773,119774],{"class":70,"line":301},[68,119775,4000],{"emptyLinePlaceholder":1679},[68,119777,119778],{"class":70,"line":320},[68,119779,119780],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[68,119782,119783],{"class":70,"line":2915},[68,119784,119785],{},"wsl --set-version \u003Cdistro> 2\n",[68,119787,119788],{"class":70,"line":2921},[68,119789,119790],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[68,119792,119793],{"class":70,"line":2933},[68,119794,119795],{},"wsl --unregister \u003Cdistro>\n",[19,119797,119798],{},"输出Version为2即正常",[19,119800,119801],{},[38,119802],{"alt":63,"src":119803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23593,119805,119807],{"id":119806},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119809,119810],{},"直接在Powershell里输入wsl命令进入子系统",[58,119812,119814],{"className":119609,"code":119813,"language":119611,"meta":63,"style":63},"# 进入子系统\nwsl\n",[65,119815,119816,119821],{"__ignoreMap":63},[68,119817,119818],{"class":70,"line":71},[68,119819,119820],{},"# 进入子系统\n",[68,119822,119823],{"class":70,"line":78},[68,119824,119825],{},"wsl\n",[19,119827,119828],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119830,119831],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119833,119834],{},[38,119835],{"alt":63,"src":119836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[43,119838,119840],{"id":119839},"_233-配置各种环境","2.3.3 配置各种环境",[23593,119842,119844],{"id":119843},"_2331-换源","2.3.3.1 换源",[19,119846,119847],{},"(同实体机LINUX，往下找教程)",[23593,119849,119851],{"id":119850},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24505,119853,119855],{"id":119854},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119857,119858],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119860,119861],{},[38,119862],{"alt":63,"src":119863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119865,119866],{},[38,119867],{"alt":63,"src":119868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24505,119870,119872],{"id":119871},"_23322-cuda","2.3.3.2.2 CUDA",[19,119874,119875,119876],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[1974,119877,119878],{"href":119878,"rel":119879},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25459],[19,119881,119882,119885],{},[38,119883],{"alt":63,"src":119884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[38,119886],{"alt":63,"src":119887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119889,119890],{},"在下方的网站，选择合适的版本。",[19,119892,119893,119894],{},"WSL2 专属 CUDA 指南：",[1974,119895,119896],{"href":119896,"rel":119897},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25459],[19,119899,119900],{},[1890,119901,119902],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119904,119905],{},[38,119906],{"alt":63,"src":119907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119909,119910],{},"挨行敲一遍",[19,119912,119913],{},[38,119914],{"alt":63,"src":119915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119917,119918,119919,119922],{},"敲完后，输入",[65,119920,119921],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119924,119925],{},[38,119926],{"alt":63,"src":119927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119929,119930,119931,119934],{},"（请详看下方教程的",[1890,119932,119933],{},"安装CUDA的配置环境来看","如何配置环境）",[24505,119936,119938],{"id":119937},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119940,119847],{},[19,119942,119943],{},[38,119944],{"alt":63,"src":119945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23593,119947,119949],{"id":119948},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119951,119952],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119954,119955],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119957,119958],{},[38,119959],{"alt":63,"src":119960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119962,119963],{},"连接WSL2",[19,119965,119966],{},[38,119967],{"alt":63,"src":119968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119970,119971],{},"远程开发成功。",[19,119973,119974],{},[38,119975],{"alt":63,"src":119976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119978,119979],{},[38,119980],{"alt":63,"src":119981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119983,119984],{},[38,119985],{"alt":63,"src":119986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23593,119988,119990],{"id":119989},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119992,119993],{},[38,119994],{"alt":63,"src":119995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23593,119997,119999],{"id":119998},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[58,120001,120003],{"className":118869,"code":120002,"language":118871,"meta":63,"style":63},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[65,120004,120005,120013,120021,120032,120036],{"__ignoreMap":63},[68,120006,120007,120009,120011],{"class":70,"line":71},[68,120008,26171],{"class":587},[68,120010,118890],{"class":872},[68,120012,27836],{"class":872},[68,120014,120015,120017,120019],{"class":70,"line":78},[68,120016,26171],{"class":587},[68,120018,118890],{"class":872},[68,120020,118906],{"class":872},[68,120022,120023,120025,120027,120029],{"class":70,"line":89},[68,120024,26171],{"class":587},[68,120026,118890],{"class":872},[68,120028,25428],{"class":872},[68,120030,120031],{"class":872}," mesa-utils\n",[68,120033,120034],{"class":70,"line":115},[68,120035,4000],{"emptyLinePlaceholder":1679},[68,120037,120038],{"class":70,"line":280},[68,120039,120040],{"class":74},"#然后重启wsl2即可\n",[1652,120042,120043],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-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":63,"searchDepth":78,"depth":78,"links":120045},[120046,120047,120052],{"id":119323,"depth":78,"text":119324},{"id":119336,"depth":78,"text":119337,"children":120048},[120049,120050,120051],{"id":119340,"depth":89,"text":119341},{"id":119387,"depth":89,"text":119388},{"id":119448,"depth":89,"text":119449},{"id":119484,"depth":78,"text":119485,"children":120053},[120054,120055,120056],{"id":119488,"depth":89,"text":119489},{"id":119550,"depth":89,"text":119551},{"id":119839,"depth":89,"text":119840},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119315,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120063,"title":120064,"body":120065,"description":1676,"extension":1677,"meta":123001,"navigation":1679,"path":123002,"seo":123003,"stem":123004,"__hash__":123005},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120066,"toc":122973},[120067,120070,120074,120080,120084,120090,120094,120282,120285,120290,120294,120298,120301,120304,120310,120315,120318,120321,120326,120359,120364,120368,120445,120448,120453,120457,120460,120499,120502,120511,120529,120534,120541,120658,120663,120666,120693,120698,120702,120711,120761,120768,120772,120775,120789,120796,120830,120835,120839,120862,120865,120870,120874,120877,120880,120883,120925,120929,120932,120935,120976,120980,120984,120987,120992,120997,121000,121023,121026,121034,121039,121042,121047,121052,121055,121060,121064,121069,121092,121097,121159,121167,121172,121177,121180,121185,121188,121193,121198,121216,121221,121227,121232,121246,121250,121253,121256,121259,121302,121305,121310,121411,121414,121419,121423,121427,121464,121468,121472,121476,121522,121526,121571,121575,121582,121590,121645,121648,121725,121728,121751,121755,121758,121763,121768,121776,121779,121784,121789,121794,121797,121802,121811,121814,121819,121822,121893,121898,121901,121906,121909,121914,121917,121922,121925,121930,121935,121938,122013,122016,122029,122034,122037,122051,122054,122083,122088,122117,122120,122125,122129,122134,122143,122146,122151,122154,122159,122162,122165,122170,122173,122178,122183,122186,122191,122194,122319,122324,122354,122357,122362,122367,122384,122387,122430,122433,122460,122465,122478,122621,122625,122630,122644,122647,122698,122701,122731,122734,122750,122755,122769,122772,122839,122844,122853,122858,122861,122873,122878,122885,122909,122912,122917,122920,122939,122944,122951,122963,122970],[10,120068,120064],{"id":120069},"_3-安装必备配置",[14,120071,120073],{"id":120072},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[58,120075,120078],{"className":120076,"code":120077,"language":6786},[6784],"  打开下方网站（注意，该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",[65,120079,120077],{"__ignoreMap":63},[43,120081,120083],{"id":120082},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[58,120085,120088],{"className":120086,"code":120087,"language":6786},[6784],"  输入以下命令\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",[65,120089,120087],{"__ignoreMap":63},[43,120091,120093],{"id":120092},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[58,120095,120099],{"className":120096,"code":120097,"language":120098,"meta":63,"style":63},"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",[65,120100,120101,120109,120120,120132,120146,120150,120160,120165,120169,120173,120178,120182,120194,120198,120203,120207,120218,120222,120238,120242,120253,120257,120262,120266,120274],{"__ignoreMap":63},[68,120102,120103,120105,120107],{"class":70,"line":71},[68,120104,26171],{"class":587},[68,120106,118890],{"class":872},[68,120108,27836],{"class":872},[68,120110,120111,120113,120115,120117],{"class":70,"line":78},[68,120112,26171],{"class":587},[68,120114,118890],{"class":872},[68,120116,25428],{"class":872},[68,120118,120119],{"class":872}," vim\n",[68,120121,120122,120124,120127,120129],{"class":70,"line":89},[68,120123,26171],{"class":587},[68,120125,120126],{"class":872}," rm",[68,120128,26919],{"class":92},[68,120130,120131],{"class":872}," \u002Fetc\u002Fapt\u002Fsources.list\n",[68,120133,120134,120136,120138,120140,120143],{"class":70,"line":115},[68,120135,26171],{"class":587},[68,120137,120126],{"class":872},[68,120139,26919],{"class":92},[68,120141,120142],{"class":872}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[68,120144,120145],{"class":92},"**\n",[68,120147,120148],{"class":70,"line":280},[68,120149,4000],{"emptyLinePlaceholder":1679},[68,120151,120152,120154,120157],{"class":70,"line":301},[68,120153,26171],{"class":587},[68,120155,120156],{"class":872}," vim",[68,120158,120159],{"class":872}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[68,120161,120162],{"class":70,"line":320},[68,120163,120164],{"class":872},"```\n",[68,120166,120167],{"class":70,"line":2915},[68,120168,4000],{"emptyLinePlaceholder":1679},[68,120170,120171],{"class":70,"line":2921},[68,120172,4000],{"emptyLinePlaceholder":1679},[68,120174,120175],{"class":70,"line":2933},[68,120176,120177],{"class":587},"选择好Ubuntu版本后，复制下方的内容。\n",[68,120179,120180],{"class":70,"line":3214},[68,120181,4000],{"emptyLinePlaceholder":1679},[68,120183,120184,120186,120189,120192],{"class":70,"line":3219},[68,120185,1962],{"class":102},[68,120187,120188],{"class":872},"[](",[68,120190,120191],{"class":587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[68,120193,1757],{"class":872},[68,120195,120196],{"class":70,"line":3225},[68,120197,4000],{"emptyLinePlaceholder":1679},[68,120199,120200],{"class":70,"line":3230},[68,120201,120202],{"class":587},"粘贴进去\n",[68,120204,120205],{"class":70,"line":3244},[68,120206,4000],{"emptyLinePlaceholder":1679},[68,120208,120209,120211,120213,120216],{"class":70,"line":3249},[68,120210,1962],{"class":102},[68,120212,120188],{"class":872},[68,120214,120215],{"class":587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[68,120217,1757],{"class":872},[68,120219,120220],{"class":70,"line":3255},[68,120221,4000],{"emptyLinePlaceholder":1679},[68,120223,120224,120227,120230,120233,120235],{"class":70,"line":3276},[68,120225,120226],{"class":587},"按一下ESC，然后英文冒号，输入",[68,120228,120229],{"class":872}," `",[68,120231,120232],{"class":587},":wq!",[68,120234,2707],{"class":872},[68,120236,120237],{"class":587},"然后回车\n",[68,120239,120240],{"class":70,"line":3281},[68,120241,4000],{"emptyLinePlaceholder":1679},[68,120243,120244,120246,120248,120251],{"class":70,"line":3295},[68,120245,1962],{"class":102},[68,120247,120188],{"class":872},[68,120249,120250],{"class":587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[68,120252,1757],{"class":872},[68,120254,120255],{"class":70,"line":3300},[68,120256,4000],{"emptyLinePlaceholder":1679},[68,120258,120259],{"class":70,"line":3329},[68,120260,120261],{"class":587},"输入以下命令\n",[68,120263,120264],{"class":70,"line":3334},[68,120265,4000],{"emptyLinePlaceholder":1679},[68,120267,120268,120271],{"class":70,"line":3351},[68,120269,120270],{"class":872},"```",[68,120272,120273],{"class":587},"Bash\n",[68,120275,120276,120278,120280],{"class":70,"line":3356},[68,120277,26171],{"class":587},[68,120279,118890],{"class":872},[68,120281,27836],{"class":872},[19,120283,120284],{},"这里被替换成对应学校则成功",[19,120286,120287],{},[38,120288],{"alt":63,"src":120289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120291,120293],{"id":120292},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[43,120295,120297],{"id":120296},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120299,120300],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120302,120303],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120305,120306],{},[1974,120307,120308],{"href":120308,"rel":120309},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25459],[19,120311,120312],{},[38,120313],{"alt":63,"src":120314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120316,120317],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120319,120320],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120322,120323],{},[38,120324],{"alt":63,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[58,120327,120329],{"className":118869,"code":120328,"language":118871,"meta":63,"style":63},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[65,120330,120331,120336,120343,120348],{"__ignoreMap":63},[68,120332,120333],{"class":70,"line":71},[68,120334,120335],{"class":74},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[68,120337,120338,120340],{"class":70,"line":78},[68,120339,102850],{"class":92},[68,120341,120342],{"class":872}," ~\u002FDownloads\n",[68,120344,120345],{"class":70,"line":89},[68,120346,120347],{"class":74},"#下方chrome安装包名不一定是这个，根据名字来看\n",[68,120349,120350,120352,120354,120356],{"class":70,"line":115},[68,120351,26171],{"class":587},[68,120353,118890],{"class":872},[68,120355,25428],{"class":872},[68,120357,120358],{"class":872}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120360,120361],{},[38,120362],{"alt":63,"src":120363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[43,120365,120367],{"id":120366},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[58,120369,120371],{"className":118869,"code":120370,"language":118871,"meta":63,"style":63},"# 老版\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",[65,120372,120373,120378,120386,120397,120402,120406,120411,120421,120429,120440],{"__ignoreMap":63},[68,120374,120375],{"class":70,"line":71},[68,120376,120377],{"class":74},"# 老版\n",[68,120379,120380,120382,120384],{"class":70,"line":78},[68,120381,26171],{"class":587},[68,120383,118890],{"class":872},[68,120385,27836],{"class":872},[68,120387,120388,120390,120392,120394],{"class":70,"line":89},[68,120389,26171],{"class":587},[68,120391,118890],{"class":872},[68,120393,25428],{"class":872},[68,120395,120396],{"class":872}," neofetch\n",[68,120398,120399],{"class":70,"line":115},[68,120400,120401],{"class":587},"neofetch\n",[68,120403,120404],{"class":70,"line":280},[68,120405,4000],{"emptyLinePlaceholder":1679},[68,120407,120408],{"class":70,"line":301},[68,120409,120410],{"class":74},"# 新版\n",[68,120412,120413,120415,120418],{"class":70,"line":320},[68,120414,26171],{"class":587},[68,120416,120417],{"class":872}," add-apt-repository",[68,120419,120420],{"class":872}," ppa:zhangsongcui3371\u002Ffastfetch\n",[68,120422,120423,120425,120427],{"class":70,"line":2915},[68,120424,26171],{"class":587},[68,120426,118890],{"class":872},[68,120428,27836],{"class":872},[68,120430,120431,120433,120435,120437],{"class":70,"line":2921},[68,120432,26171],{"class":587},[68,120434,118890],{"class":872},[68,120436,25428],{"class":872},[68,120438,120439],{"class":872}," fastfetch\n",[68,120441,120442],{"class":70,"line":2933},[68,120443,120444],{"class":587},"fastfetch\n",[19,120446,120447],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120449,120450],{},[38,120451],{"alt":63,"src":120452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[43,120454,120456],{"id":120455},"_323-移除snap应用","3.2.3 移除snap应用",[19,120458,120459],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[58,120461,120463],{"className":118869,"code":120462,"language":118871,"meta":63,"style":63},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[65,120464,120465,120477,120488],{"__ignoreMap":63},[68,120466,120467,120469,120471,120474],{"class":70,"line":71},[68,120468,26171],{"class":587},[68,120470,28107],{"class":872},[68,120472,120473],{"class":872}," disable",[68,120475,120476],{"class":872}," snapd.service\n",[68,120478,120479,120481,120483,120485],{"class":70,"line":78},[68,120480,26171],{"class":587},[68,120482,28107],{"class":872},[68,120484,120473],{"class":872},[68,120486,120487],{"class":872}," snapd.socket\n",[68,120489,120490,120492,120494,120496],{"class":70,"line":89},[68,120491,26171],{"class":587},[68,120493,28107],{"class":872},[68,120495,120473],{"class":872},[68,120497,120498],{"class":872}," snapd.seeded.service\n",[19,120500,120501],{},"然后查看snap应用列表",[19,120503,120504,120505,120510],{},"根据你安装的选择不同（最小安装或普通安装），有",[1974,120506,120509],{"href":120507,"rel":120508},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25459],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[58,120512,120514],{"className":118869,"code":120513,"language":118871,"meta":63,"style":63},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[65,120515,120516,120521],{"__ignoreMap":63},[68,120517,120518],{"class":70,"line":71},[68,120519,120520],{"class":74},"# 查询当前系统上snap安装了哪些app\n",[68,120522,120523,120526],{"class":70,"line":78},[68,120524,120525],{"class":587},"snap",[68,120527,120528],{"class":872}," list\n",[19,120530,120531],{},[38,120532],{"alt":63,"src":120533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120535,120536,120537,120540],{},"卸载掉图中所有应用，按照 ",[1890,120538,120539],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[58,120542,120544],{"className":118869,"code":120543,"language":118871,"meta":63,"style":63},"#移除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",[65,120545,120546,120551,120563,120568,120579,120584,120595,120600,120611,120616,120620,120625,120636,120647],{"__ignoreMap":63},[68,120547,120548],{"class":70,"line":71},[68,120549,120550],{"class":74},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[68,120552,120553,120555,120558,120560],{"class":70,"line":78},[68,120554,26171],{"class":587},[68,120556,120557],{"class":872}," snap",[68,120559,27673],{"class":872},[68,120561,120562],{"class":872}," snap-store\n",[68,120564,120565],{"class":70,"line":89},[68,120566,120567],{"class":74},"#移除firefox浏览器\n",[68,120569,120570,120572,120574,120576],{"class":70,"line":115},[68,120571,26171],{"class":587},[68,120573,120557],{"class":872},[68,120575,27673],{"class":872},[68,120577,120578],{"class":872}," firefox\n",[68,120580,120581],{"class":70,"line":280},[68,120582,120583],{"class":74},"#移除gnome-42-2204\n",[68,120585,120586,120588,120590,120592],{"class":70,"line":301},[68,120587,26171],{"class":587},[68,120589,120557],{"class":872},[68,120591,27673],{"class":872},[68,120593,120594],{"class":872}," gnome-42-2204\n",[68,120596,120597],{"class":70,"line":320},[68,120598,120599],{"class":74},"#移除gtk-common-themes\n",[68,120601,120602,120604,120606,120608],{"class":70,"line":2915},[68,120603,26171],{"class":587},[68,120605,120557],{"class":872},[68,120607,27673],{"class":872},[68,120609,120610],{"class":872}," gtk-common-themes\n",[68,120612,120613],{"class":70,"line":2921},[68,120614,120615],{"class":74},"#移除其它...\n",[68,120617,120618],{"class":70,"line":2933},[68,120619,4274],{"class":85},[68,120621,120622],{"class":70,"line":3214},[68,120623,120624],{"class":74},"#移除core22,bare以及snapd\n",[68,120626,120627,120629,120631,120633],{"class":70,"line":3219},[68,120628,26171],{"class":587},[68,120630,120557],{"class":872},[68,120632,27673],{"class":872},[68,120634,120635],{"class":872}," core22\n",[68,120637,120638,120640,120642,120644],{"class":70,"line":3225},[68,120639,26171],{"class":587},[68,120641,120557],{"class":872},[68,120643,27673],{"class":872},[68,120645,120646],{"class":872}," bare\n",[68,120648,120649,120651,120653,120655],{"class":70,"line":3230},[68,120650,26171],{"class":587},[68,120652,120557],{"class":872},[68,120654,27673],{"class":872},[68,120656,120657],{"class":872}," snapd\n",[19,120659,120660],{},[38,120661],{"alt":63,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120664,120665],{},"输入以下命令查看是否还有snap包",[58,120667,120669],{"className":118869,"code":120668,"language":118871,"meta":63,"style":63},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[65,120670,120671,120677,120681,120685,120689],{"__ignoreMap":63},[68,120672,120673,120675],{"class":70,"line":71},[68,120674,120525],{"class":587},[68,120676,120528],{"class":872},[68,120678,120679],{"class":70,"line":78},[68,120680,120377],{"class":74},[68,120682,120683],{"class":70,"line":89},[68,120684,120401],{"class":587},[68,120686,120687],{"class":70,"line":115},[68,120688,120410],{"class":74},[68,120690,120691],{"class":70,"line":280},[68,120692,120444],{"class":587},[19,120694,120695],{},[38,120696],{"alt":63,"src":120697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[43,120699,120701],{"id":120700},"_324-移除snap","3.2.4 移除snap",[19,120703,120704,120705,120710],{},"在删除掉",[1974,120706,120709],{"href":120707,"rel":120708},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25459],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[58,120712,120714],{"className":118869,"code":120713,"language":118871,"meta":63,"style":63}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[65,120715,120716,120721,120734,120739,120750],{"__ignoreMap":63},[68,120717,120718],{"class":70,"line":71},[68,120719,120720],{"class":74}," #使用apt移除掉snap\n",[68,120722,120723,120725,120727,120729,120732],{"class":70,"line":78},[68,120724,26171],{"class":587},[68,120726,118890],{"class":872},[68,120728,119198],{"class":872},[68,120730,120731],{"class":92}," --purge",[68,120733,120657],{"class":872},[68,120735,120736],{"class":70,"line":89},[68,120737,120738],{"class":74},"#移除snapd的一些目录\n",[68,120740,120741,120743,120745,120747],{"class":70,"line":115},[68,120742,26171],{"class":587},[68,120744,120126],{"class":872},[68,120746,26919],{"class":92},[68,120748,120749],{"class":872}," \u002Fvar\u002Fcache\u002Fsnapd\n",[68,120751,120752,120754,120756,120758],{"class":70,"line":280},[68,120753,26171],{"class":587},[68,120755,120126],{"class":872},[68,120757,26919],{"class":92},[68,120759,120760],{"class":872}," ~\u002Fsnap\n",[19,120762,120763,120764,120767],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[65,120765,120766],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[43,120769,120771],{"id":120770},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120773,120774],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[58,120776,120778],{"className":118869,"code":120777,"language":118871,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[65,120779,120780],{"__ignoreMap":63},[68,120781,120782,120784,120786],{"class":70,"line":71},[68,120783,26171],{"class":587},[68,120785,120156],{"class":872},[68,120787,120788],{"class":872}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120790,120791,120792,120795],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[65,120793,120794],{},":wq"," 回车",[58,120797,120799],{"className":118869,"code":120798,"language":118871,"meta":63,"style":63},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[65,120800,120801,120808,120822],{"__ignoreMap":63},[68,120802,120803,120806],{"class":70,"line":71},[68,120804,120805],{"class":587},"Package:",[68,120807,120657],{"class":872},[68,120809,120810,120813,120816,120819],{"class":70,"line":78},[68,120811,120812],{"class":587},"Pin:",[68,120814,120815],{"class":872}," release",[68,120817,120818],{"class":872}," a=",[68,120820,120821],{"class":92},"*\n",[68,120823,120824,120827],{"class":70,"line":89},[68,120825,120826],{"class":587},"Pin-Priority:",[68,120828,120829],{"class":92}," -10\n",[19,120831,120832],{},[38,120833],{"alt":63,"src":120834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[43,120836,120838],{"id":120837},"_326-测试是否成功","3.2.6 测试是否成功",[58,120840,120842],{"className":118869,"code":120841,"language":118871,"meta":63,"style":63},"sudo apt update\nsudo apt install firefox\n",[65,120843,120844,120852],{"__ignoreMap":63},[68,120845,120846,120848,120850],{"class":70,"line":71},[68,120847,26171],{"class":587},[68,120849,118890],{"class":872},[68,120851,27836],{"class":872},[68,120853,120854,120856,120858,120860],{"class":70,"line":78},[68,120855,26171],{"class":587},[68,120857,118890],{"class":872},[68,120859,25428],{"class":872},[68,120861,120578],{"class":872},[19,120863,120864],{},"这里提示snapd无法被安装，就证明成功了",[19,120866,120867],{},[38,120868],{"alt":63,"src":120869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[43,120871,120873],{"id":120872},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120875,120876],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120878,120879],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120881,120882],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[58,120884,120886],{"className":118869,"code":120885,"language":118871,"meta":63,"style":63},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[65,120887,120888,120893,120902,120907,120915],{"__ignoreMap":63},[68,120889,120890],{"class":70,"line":71},[68,120891,120892],{"class":74},"# 添加Mozilla提供的源\n",[68,120894,120895,120897,120899],{"class":70,"line":78},[68,120896,26171],{"class":587},[68,120898,120417],{"class":872},[68,120900,120901],{"class":872}," ppa:mozillateam\u002Fppa\n",[68,120903,120904],{"class":70,"line":89},[68,120905,120906],{"class":74},"# 安装Firefox\n",[68,120908,120909,120911,120913],{"class":70,"line":115},[68,120910,26171],{"class":587},[68,120912,118890],{"class":872},[68,120914,27836],{"class":872},[68,120916,120917,120919,120921,120923],{"class":70,"line":280},[68,120918,26171],{"class":587},[68,120920,118890],{"class":872},[68,120922,25428],{"class":872},[68,120924,120578],{"class":872},[43,120926,120928],{"id":120927},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120930,120931],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120933,120934],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[58,120936,120938],{"className":118869,"code":120937,"language":118871,"meta":63,"style":63},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[65,120939,120940,120945,120955,120963,120967],{"__ignoreMap":63},[68,120941,120942],{"class":70,"line":71},[68,120943,120944],{"class":74},"#删掉禁止安装snap的配置文件\n",[68,120946,120947,120949,120951,120953],{"class":70,"line":78},[68,120948,26171],{"class":587},[68,120950,120126],{"class":872},[68,120952,26919],{"class":92},[68,120954,120788],{"class":872},[68,120956,120957,120959,120961],{"class":70,"line":89},[68,120958,26171],{"class":587},[68,120960,118890],{"class":872},[68,120962,27836],{"class":872},[68,120964,120965],{"class":70,"line":115},[68,120966,4000],{"emptyLinePlaceholder":1679},[68,120968,120969,120971,120973],{"class":70,"line":280},[68,120970,26171],{"class":587},[68,120972,118890],{"class":872},[68,120974,120975],{"class":872}," dist-update\n",[14,120977,120979],{"id":120978},"_33-中文输入法","3.3 中文输入法",[43,120981,120983],{"id":120982},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120985,120986],{},"官网下载搜狗输入法",[19,120988,120989],{},[38,120990],{"alt":63,"src":120991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120993,120994],{},[38,120995],{"alt":63,"src":120996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120998,120999],{},"打开终端输入如下",[58,121001,121003],{"className":118869,"code":121002,"language":118871,"meta":63,"style":63},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[65,121004,121005,121012],{"__ignoreMap":63},[68,121006,121007,121009],{"class":70,"line":71},[68,121008,102850],{"class":92},[68,121010,121011],{"class":872}," ~\u002FDownloads\u002F\n",[68,121013,121014,121016,121018,121020],{"class":70,"line":78},[68,121015,26171],{"class":587},[68,121017,118890],{"class":872},[68,121019,25428],{"class":872},[68,121021,121022],{"class":872}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121024,121025],{},"打开Fcitx",[19,121027,121028,121031],{},[38,121029],{"alt":63,"src":121030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[38,121032],{"alt":63,"src":121033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121035,121036],{},[38,121037],{"alt":63,"src":121038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121040,121041],{},"添加搜狗输入法",[19,121043,121044],{},[38,121045],{"alt":63,"src":121046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121048,121049],{},[38,121050],{"alt":63,"src":121051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121053,121054],{},"将搜狗输入法设置为唯一输入法",[19,121056,121057],{},[38,121058],{"alt":63,"src":121059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[43,121061,121063],{"id":121062},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[48,121065,121066],{},[51,121067,121068],{},"卸载旧输入法",[58,121070,121072],{"className":120096,"code":121071,"language":120098,"meta":63,"style":63},"sudo apt purge fcitx* ibus*\n",[65,121073,121074],{"__ignoreMap":63},[68,121075,121076,121078,121080,121082,121085,121087,121090],{"class":70,"line":71},[68,121077,26171],{"class":587},[68,121079,118890],{"class":872},[68,121081,119231],{"class":872},[68,121083,121084],{"class":872}," fcitx",[68,121086,2191],{"class":92},[68,121088,121089],{"class":872}," ibus",[68,121091,120821],{"class":92},[48,121093,121094],{"start":78},[51,121095,121096],{},"安装Fcitx5",[58,121098,121100],{"className":118869,"code":121099,"language":118871,"meta":63,"style":63},"# 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",[65,121101,121102,121107,121121,121125,121130,121139,121147],{"__ignoreMap":63},[68,121103,121104],{"class":70,"line":71},[68,121105,121106],{"class":74},"# Ubuntu22.04及以上、Debian12及以上\n",[68,121108,121109,121111,121113,121115,121118],{"class":70,"line":78},[68,121110,26171],{"class":587},[68,121112,118890],{"class":872},[68,121114,25428],{"class":872},[68,121116,121117],{"class":872}," fcitx5",[68,121119,121120],{"class":872}," fcitx5-chinese-addons\n",[68,121122,121123],{"class":70,"line":89},[68,121124,4000],{"emptyLinePlaceholder":1679},[68,121126,121127],{"class":70,"line":115},[68,121128,121129],{"class":74},"# Ubuntu20.04\n",[68,121131,121132,121134,121136],{"class":70,"line":280},[68,121133,26171],{"class":587},[68,121135,120417],{"class":872},[68,121137,121138],{"class":872}," ppa:zhsj\u002Ffcitx5\n",[68,121140,121141,121143,121145],{"class":70,"line":301},[68,121142,26171],{"class":587},[68,121144,118890],{"class":872},[68,121146,27836],{"class":872},[68,121148,121149,121151,121153,121155,121157],{"class":70,"line":320},[68,121150,26171],{"class":587},[68,121152,118890],{"class":872},[68,121154,25428],{"class":872},[68,121156,121117],{"class":872},[68,121158,121120],{"class":872},[48,121160,121161,121164],{"start":89},[51,121162,121163],{},"Reboot System",[51,121165,121166],{},"启动Fcitx5",[19,121168,121169],{},[38,121170],{"alt":63,"src":121171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[48,121173,121174],{"start":280},[51,121175,121176],{},"修改一些设置",[19,121178,121179],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121181,121182],{},[38,121183],{"alt":63,"src":121184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121186,121187],{},"添加快捷键以便于更好切换中英文",[19,121189,121190],{},[38,121191],{"alt":63,"src":121192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[48,121194,121195],{"start":301},[51,121196,121197],{},"重启",[58,121199,121201],{"className":120096,"code":121200,"language":120098,"meta":63,"style":63},"sudo shutdown -r now\n",[65,121202,121203],{"__ignoreMap":63},[68,121204,121205,121207,121210,121213],{"class":70,"line":71},[68,121206,26171],{"class":587},[68,121208,121209],{"class":872}," shutdown",[68,121211,121212],{"class":92}," -r",[68,121214,121215],{"class":872}," now\n",[48,121217,121218],{"start":320},[51,121219,121220],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121222,121223],{},[1974,121224,121225],{"href":121225,"rel":121226},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25459],[48,121228,121229],{"start":2915},[51,121230,121231],{},"再重启",[58,121233,121234],{"className":120096,"code":121200,"language":120098,"meta":63,"style":63},[65,121235,121236],{"__ignoreMap":63},[68,121237,121238,121240,121242,121244],{"class":70,"line":71},[68,121239,26171],{"class":587},[68,121241,121209],{"class":872},[68,121243,121212],{"class":92},[68,121245,121215],{"class":872},[14,121247,121249],{"id":121248},"_34-pip3源替换","3.4 pip3源替换",[19,121251,121252],{},"非Debian系发行版需要做。",[19,121254,121255],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121257,121258],{},"使用dnf的系统也可能不用做。",[58,121260,121262],{"className":118869,"code":121261,"language":118871,"meta":63,"style":63},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[65,121263,121264,121269,121276,121281,121286],{"__ignoreMap":63},[68,121265,121266],{"class":70,"line":71},[68,121267,121268],{"class":74},"# 检查是否已安装 pip\n",[68,121270,121271,121274],{"class":70,"line":78},[68,121272,121273],{"class":587},"pip3",[68,121275,27887],{"class":92},[68,121277,121278],{"class":70,"line":89},[68,121279,121280],{"class":74},"# 如果未安装，先安装 pip3（见下方）\n",[68,121282,121283],{"class":70,"line":115},[68,121284,121285],{"class":74},"# 配置 pip 使用清华源\n",[68,121287,121288,121290,121293,121296,121299],{"class":70,"line":280},[68,121289,121273],{"class":587},[68,121291,121292],{"class":872}," config",[68,121294,121295],{"class":872}," set",[68,121297,121298],{"class":872}," global.index-url",[68,121300,121301],{"class":872}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121303,121304],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121306,121307],{},[38,121308],{"alt":63,"src":121309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[58,121311,121313],{"className":118869,"code":121312,"language":118871,"meta":63,"style":63},"#安装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",[65,121314,121315,121320,121328,121339,121343,121348,121367,121371,121376,121388,121392,121397],{"__ignoreMap":63},[68,121316,121317],{"class":70,"line":71},[68,121318,121319],{"class":74},"#安装pip3\n",[68,121321,121322,121324,121326],{"class":70,"line":78},[68,121323,26171],{"class":587},[68,121325,118890],{"class":872},[68,121327,27836],{"class":872},[68,121329,121330,121332,121334,121336],{"class":70,"line":89},[68,121331,26171],{"class":587},[68,121333,27670],{"class":872},[68,121335,25428],{"class":872},[68,121337,121338],{"class":872}," python3-pip\n",[68,121340,121341],{"class":70,"line":115},[68,121342,4000],{"emptyLinePlaceholder":1679},[68,121344,121345],{"class":70,"line":280},[68,121346,121347],{"class":74},"#更新pip3\n",[68,121349,121350,121352,121354,121356,121358,121360,121363,121365],{"class":70,"line":301},[68,121351,102453],{"class":587},[68,121353,102456],{"class":92},[68,121355,102479],{"class":872},[68,121357,25428],{"class":872},[68,121359,28024],{"class":92},[68,121361,121362],{"class":872}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[68,121364,102484],{"class":92},[68,121366,102487],{"class":872},[68,121368,121369],{"class":70,"line":320},[68,121370,4000],{"emptyLinePlaceholder":1679},[68,121372,121373],{"class":70,"line":2915},[68,121374,121375],{"class":74},"#设置pip源为清华源\n",[68,121377,121378,121380,121382,121384,121386],{"class":70,"line":2921},[68,121379,121273],{"class":587},[68,121381,121292],{"class":872},[68,121383,121295],{"class":872},[68,121385,121298],{"class":872},[68,121387,121301],{"class":872},[68,121389,121390],{"class":70,"line":2933},[68,121391,4000],{"emptyLinePlaceholder":1679},[68,121393,121394],{"class":70,"line":3214},[68,121395,121396],{"class":74},"#测试\n",[68,121398,121399,121401,121403,121405,121407,121409],{"class":70,"line":3219},[68,121400,102453],{"class":587},[68,121402,102456],{"class":92},[68,121404,102479],{"class":872},[68,121406,25428],{"class":872},[68,121408,102484],{"class":92},[68,121410,102487],{"class":872},[19,121412,121413],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121415,121416],{},[38,121417],{"alt":63,"src":121418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121420,121422],{"id":121421},"_35-显卡驱动安装","3.5 显卡驱动安装",[43,121424,121426],{"id":121425},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[58,121428,121430],{"className":120096,"code":121429,"language":120098,"meta":63,"style":63},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[65,121431,121432,121437,121452,121457],{"__ignoreMap":63},[68,121433,121434],{"class":70,"line":71},[68,121435,121436],{"class":74},"# 如果是使用apt安装的驱动\n",[68,121438,121439,121441,121443,121445,121447,121450],{"class":70,"line":78},[68,121440,26171],{"class":587},[68,121442,27670],{"class":872},[68,121444,27673],{"class":872},[68,121446,120731],{"class":92},[68,121448,121449],{"class":872}," nvidia",[68,121451,120821],{"class":92},[68,121453,121454],{"class":70,"line":89},[68,121455,121456],{"class":74},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[68,121458,121459,121461],{"class":70,"line":115},[68,121460,26171],{"class":587},[68,121462,121463],{"class":872}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[43,121465,121467],{"id":121466},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23593,121469,121471],{"id":121470},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24505,121473,121475],{"id":121474},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[58,121477,121479],{"className":120096,"code":121478,"language":120098,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,121480,121481,121486,121497,121502,121512,121517],{"__ignoreMap":63},[68,121482,121483],{"class":70,"line":71},[68,121484,121485],{"class":74},"# 安装英伟达驱动\n",[68,121487,121488,121490,121492,121494],{"class":70,"line":78},[68,121489,26171],{"class":587},[68,121491,118890],{"class":872},[68,121493,25428],{"class":872},[68,121495,121496],{"class":872}," nvidia-driver-版本号\n",[68,121498,121499],{"class":70,"line":89},[68,121500,121501],{"class":74},"# 重启 \n",[68,121503,121504,121506,121508,121510],{"class":70,"line":115},[68,121505,26171],{"class":587},[68,121507,121209],{"class":872},[68,121509,121212],{"class":92},[68,121511,121215],{"class":872},[68,121513,121514],{"class":70,"line":280},[68,121515,121516],{"class":74},"# 检查驱动是否安装成功\n",[68,121518,121519],{"class":70,"line":301},[68,121520,121521],{"class":587},"nvidia-smi\n",[24505,121523,121525],{"id":121524},"_35212-debian","3.5.2.1.2 Debian",[58,121527,121529],{"className":120096,"code":121528,"language":120098,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,121530,121531,121535,121549,121553,121563,121567],{"__ignoreMap":63},[68,121532,121533],{"class":70,"line":71},[68,121534,121485],{"class":74},[68,121536,121537,121539,121541,121543,121546],{"class":70,"line":78},[68,121538,26171],{"class":587},[68,121540,118890],{"class":872},[68,121542,25428],{"class":872},[68,121544,121545],{"class":872}," nvidia-driver",[68,121547,121548],{"class":872}," nvidia-settings\n",[68,121550,121551],{"class":70,"line":89},[68,121552,121501],{"class":74},[68,121554,121555,121557,121559,121561],{"class":70,"line":115},[68,121556,26171],{"class":587},[68,121558,121209],{"class":872},[68,121560,121212],{"class":92},[68,121562,121215],{"class":872},[68,121564,121565],{"class":70,"line":280},[68,121566,121516],{"class":74},[68,121568,121569],{"class":70,"line":301},[68,121570,121521],{"class":587},[23593,121572,121574],{"id":121573},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121576,121577,121578,121581],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1890,121579,121580],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121583,121584,121585],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25148,121586,121587],{},[1890,121588,121589],{},"（也可以不禁用桌面环境，直接进行下一步。）",[58,121591,121593],{"className":120096,"code":121592,"language":120098,"meta":63,"style":63},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[65,121594,121595,121600,121610,121615,121628,121633],{"__ignoreMap":63},[68,121596,121597],{"class":70,"line":71},[68,121598,121599],{"class":74},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[68,121601,121602,121604,121607],{"class":70,"line":78},[68,121603,26171],{"class":587},[68,121605,121606],{"class":872}," telinit",[68,121608,121609],{"class":92}," 3\n",[68,121611,121612],{"class":70,"line":89},[68,121613,121614],{"class":74},"# ubuntu 使用下方命令\n",[68,121616,121617,121619,121622,121625],{"class":70,"line":115},[68,121618,26171],{"class":587},[68,121620,121621],{"class":872}," service",[68,121623,121624],{"class":872}," lightdm",[68,121626,121627],{"class":872}," stop\n",[68,121629,121630],{"class":70,"line":280},[68,121631,121632],{"class":74},"# Fedora 使用下方命令\n",[68,121634,121635,121637,121639,121642],{"class":70,"line":301},[68,121636,26171],{"class":587},[68,121638,28107],{"class":872},[68,121640,121641],{"class":872}," isolate",[68,121643,121644],{"class":872}," multi-user.target\n",[19,121646,121647],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[58,121649,121651],{"className":120096,"code":121650,"language":120098,"meta":63,"style":63},"# 编译环境+准备工作\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",[65,121652,121653,121658,121669,121674,121681,121686,121698,121703,121710,121715],{"__ignoreMap":63},[68,121654,121655],{"class":70,"line":71},[68,121656,121657],{"class":74},"# 编译环境+准备工作\n",[68,121659,121660,121662,121664,121666],{"class":70,"line":78},[68,121661,26171],{"class":587},[68,121663,118890],{"class":872},[68,121665,25428],{"class":872},[68,121667,121668],{"class":872}," build-essential\n",[68,121670,121671],{"class":70,"line":89},[68,121672,121673],{"class":74},"# 进入到.run目录中\n",[68,121675,121676,121678],{"class":70,"line":115},[68,121677,102850],{"class":92},[68,121679,121680],{"class":872}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[68,121682,121683],{"class":70,"line":280},[68,121684,121685],{"class":74},"# 给驱动文件增加可执行权限：\n",[68,121687,121688,121690,121692,121695],{"class":70,"line":301},[68,121689,26171],{"class":587},[68,121691,26174],{"class":872},[68,121693,121694],{"class":872}," a+x",[68,121696,121697],{"class":872}," NVIDIA-Linux-x86_64-550.107.02.run\n",[68,121699,121700],{"class":70,"line":320},[68,121701,121702],{"class":74},"# 然后执行安装：\n",[68,121704,121705,121707],{"class":70,"line":2915},[68,121706,26171],{"class":587},[68,121708,121709],{"class":872}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[68,121711,121712],{"class":70,"line":2921},[68,121713,121714],{"class":74},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[68,121716,121717,121719,121722],{"class":70,"line":2933},[68,121718,26171],{"class":587},[68,121720,121721],{"class":872}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[68,121723,121724],{"class":92},"  --no-opengl-files\n",[19,121726,121727],{},"安装完毕重启即可",[58,121729,121731],{"className":120096,"code":121730,"language":120098,"meta":63,"style":63},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,121732,121733,121737,121743,121747],{"__ignoreMap":63},[68,121734,121735],{"class":70,"line":71},[68,121736,121501],{"class":74},[68,121738,121739,121741],{"class":70,"line":78},[68,121740,26171],{"class":587},[68,121742,28241],{"class":872},[68,121744,121745],{"class":70,"line":89},[68,121746,121516],{"class":74},[68,121748,121749],{"class":70,"line":115},[68,121750,121521],{"class":587},[43,121752,121754],{"id":121753},"_353-安装cuda","3.5.3 安装CUDA",[19,121756,121757],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121759,121760],{},[38,121761],{"alt":63,"src":121762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[48,121764,121765],{},[51,121766,121767],{},"先查看显卡驱动所支持的最高CUDA版本",[58,121769,121770],{"className":120096,"code":121521,"language":120098,"meta":63,"style":63},[65,121771,121772],{"__ignoreMap":63},[68,121773,121774],{"class":70,"line":71},[68,121775,121521],{"class":587},[19,121777,121778],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121780,121781],{},[38,121782],{"alt":63,"src":121783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[48,121785,121786],{"start":78},[51,121787,121788],{},"下载CUDA并安装CUDA",[19,121790,119875,121791],{},[1974,121792,119878],{"href":119878,"rel":121793},[25459],[19,121795,121796],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121798,121799],{},[38,121800],{"alt":63,"src":121801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121803,121804,121805,121810],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[1974,121806,121809],{"href":121807,"rel":121808},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25459],"Vinci机器人队单片机教程","）",[19,121812,121813],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121815,121816],{},[38,121817],{"alt":63,"src":121818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121820,121821],{},"将最下方框框里的命令敲入终端",[58,121823,121825],{"className":120096,"code":121824,"language":120098,"meta":63,"style":63},"# 在当前文件夹下创建一个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",[65,121826,121827,121832,121841,121846,121853,121858,121866,121871,121882,121887],{"__ignoreMap":63},[68,121828,121829],{"class":70,"line":71},[68,121830,121831],{"class":74},"# 在当前文件夹下创建一个ttt的子文件夹\n",[68,121833,121834,121836,121838],{"class":70,"line":78},[68,121835,102840],{"class":587},[68,121837,30809],{"class":92},[68,121839,121840],{"class":872}," .\u002Fttt\n",[68,121842,121843],{"class":70,"line":89},[68,121844,121845],{"class":74},"# 进入ttt文件夹\n",[68,121847,121848,121850],{"class":70,"line":115},[68,121849,102850],{"class":92},[68,121851,121852],{"class":872}," ttt\n",[68,121854,121855],{"class":70,"line":280},[68,121856,121857],{"class":74},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[68,121859,121860,121863],{"class":70,"line":301},[68,121861,121862],{"class":587},"wget",[68,121864,121865],{"class":872}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[68,121867,121868],{"class":70,"line":320},[68,121869,121870],{"class":74},"# 给予权限\n",[68,121872,121873,121875,121877,121879],{"class":70,"line":2915},[68,121874,26171],{"class":587},[68,121876,26174],{"class":872},[68,121878,121694],{"class":872},[68,121880,121881],{"class":872}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[68,121883,121884],{"class":70,"line":2921},[68,121885,121886],{"class":74},"# 运行脚本\n",[68,121888,121889,121891],{"class":70,"line":2933},[68,121890,26171],{"class":587},[68,121892,121881],{"class":872},[19,121894,121895],{},[38,121896],{"alt":63,"src":121897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121899,121900],{},"正在安装中：",[19,121902,121903],{},[38,121904],{"alt":63,"src":121905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121907,121908],{},"输入accept接受即可",[19,121910,121911],{},[38,121912],{"alt":63,"src":121913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121915,121916],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121918,121919],{},[38,121920],{"alt":63,"src":121921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121923,121924],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121926,121927],{},[38,121928],{"alt":63,"src":121929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[48,121931,121932],{"start":89},[51,121933,121934],{},"配置环境",[19,121936,121937],{},"根据上方确认一下路径，比如我上面红色框起来的为",[58,121939,121941],{"className":120096,"code":121940,"language":120098,"meta":63,"style":63},"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",[65,121942,121943,121959,121974],{"__ignoreMap":63},[68,121944,121945,121948,121951,121954,121957],{"class":70,"line":71},[68,121946,121947],{"class":587},"Please",[68,121949,121950],{"class":872}," make",[68,121952,121953],{"class":872}," sure",[68,121955,121956],{"class":872}," that",[68,121958,4274],{"class":85},[68,121960,121961,121963,121966,121969,121972],{"class":70,"line":78},[68,121962,53856],{"class":587},[68,121964,121965],{"class":872},"   PATH",[68,121967,121968],{"class":872}," includes",[68,121970,121971],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[68,121973,4274],{"class":85},[68,121975,121976,121978,121981,121983,121986,121989,121991,121994,121997,122000,122003,122005,122008,122010],{"class":70,"line":89},[68,121977,53856],{"class":587},[68,121979,121980],{"class":872},"   LD_LIBRARY_PATH",[68,121982,121968],{"class":872},[68,121984,121985],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[68,121987,121988],{"class":872}," or,",[68,121990,6808],{"class":872},[68,121992,121993],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[68,121995,121996],{"class":872}," to",[68,121998,121999],{"class":872}," \u002Fetc\u002Fld.so.conf",[68,122001,122002],{"class":872}," and",[68,122004,28824],{"class":872},[68,122006,122007],{"class":872}," ldconfig",[68,122009,66187],{"class":872},[68,122011,122012],{"class":872}," root\n",[19,122014,122015],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[58,122017,122019],{"className":120096,"code":122018,"language":120098,"meta":63,"style":63},"which nvcc\n",[65,122020,122021],{"__ignoreMap":63},[68,122022,122023,122026],{"class":70,"line":71},[68,122024,122025],{"class":92},"which",[68,122027,122028],{"class":872}," nvcc\n",[19,122030,122031],{},[38,122032],{"alt":63,"src":122033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122035,122036],{},"所以我进行以下操作：",[58,122038,122040],{"className":120096,"code":122039,"language":120098,"meta":63,"style":63},"sudo vim ~\u002F.bashrc\n",[65,122041,122042],{"__ignoreMap":63},[68,122043,122044,122046,122048],{"class":70,"line":71},[68,122045,26171],{"class":587},[68,122047,120156],{"class":872},[68,122049,122050],{"class":872}," ~\u002F.bashrc\n",[19,122052,122053],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[58,122055,122057],{"className":120096,"code":122056,"language":120098,"meta":63,"style":63},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[65,122058,122059,122071],{"__ignoreMap":63},[68,122060,122061,122063,122066,122068],{"class":70,"line":71},[68,122062,26637],{"class":102},[68,122064,122065],{"class":85}," PATH",[68,122067,869],{"class":102},[68,122069,122070],{"class":85},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[68,122072,122073,122075,122078,122080],{"class":70,"line":78},[68,122074,26637],{"class":102},[68,122076,122077],{"class":85}," LD_LIBRARY_PATH",[68,122079,869],{"class":102},[68,122081,122082],{"class":85},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122084,122085],{},[38,122086],{"alt":63,"src":122087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[58,122089,122091],{"className":120096,"code":122090,"language":120098,"meta":63,"style":63},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[65,122092,122093,122098,122104,122109],{"__ignoreMap":63},[68,122094,122095],{"class":70,"line":71},[68,122096,122097],{"class":74},"# 刷新当前终端的环境变量\n",[68,122099,122100,122102],{"class":70,"line":78},[68,122101,102467],{"class":92},[68,122103,122050],{"class":872},[68,122105,122106],{"class":70,"line":89},[68,122107,122108],{"class":74},"# 验证CUDA是否安装成功\n",[68,122110,122111,122114],{"class":70,"line":115},[68,122112,122113],{"class":587},"nvcc",[68,122115,122116],{"class":92}," -V\n",[19,122118,122119],{},"出现下图这种则安装成功。",[19,122121,122122],{},[38,122123],{"alt":63,"src":122124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[43,122126,122128],{"id":122127},"_354-安装cudnn","3.5.4 安装cuDNN",[48,122130,122131],{},[51,122132,122133],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122135,122136,122137,122142],{},"前往 NVIDIA cuDNN 下载页面：",[1974,122138,122141],{"href":122139,"rel":122140},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25459],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122144,122145],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122147,122148],{},[38,122149],{"alt":63,"src":122150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122152,122153],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122155,122156],{},[38,122157],{"alt":63,"src":122158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122160,122161],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122163,122164],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122166,122167],{},[1890,122168,122169],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122171,122172],{},"下载好的：",[19,122174,122175],{},[38,122176],{"alt":63,"src":122177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[48,122179,122180],{"start":78},[51,122181,122182],{},"安装cuDNN",[19,122184,122185],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122187,122188],{},[38,122189],{"alt":63,"src":122190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122192,122193],{},"解压文件，并复制到对应位置完成安装",[58,122195,122197],{"className":120096,"code":122196,"language":120098,"meta":63,"style":63},"# 解压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",[65,122198,122199,122204,122215,122220,122227,122232,122248,122262,122267,122278,122287,122291,122307],{"__ignoreMap":63},[68,122200,122201],{"class":70,"line":71},[68,122202,122203],{"class":74},"# 解压cuDNN文件\n",[68,122205,122206,122209,122212],{"class":70,"line":78},[68,122207,122208],{"class":587},"tar",[68,122210,122211],{"class":92}," -xvf",[68,122213,122214],{"class":872}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[68,122216,122217],{"class":70,"line":89},[68,122218,122219],{"class":74},"# cd进文件夹\n",[68,122221,122222,122224],{"class":70,"line":115},[68,122223,102850],{"class":92},[68,122225,122226],{"class":872}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[68,122228,122229],{"class":70,"line":280},[68,122230,122231],{"class":74},"# 复制cuDNN文件到CUDA目录\n",[68,122233,122234,122236,122238,122241,122243,122246],{"class":70,"line":301},[68,122235,26171],{"class":587},[68,122237,29454],{"class":872},[68,122239,122240],{"class":872}," include\u002Fcudnn",[68,122242,2191],{"class":92},[68,122244,122245],{"class":872},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[68,122247,4274],{"class":85},[68,122249,122250,122252,122254,122257,122259],{"class":70,"line":320},[68,122251,26171],{"class":587},[68,122253,29454],{"class":872},[68,122255,122256],{"class":872}," lib\u002Flibcudnn",[68,122258,2191],{"class":92},[68,122260,122261],{"class":872},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[68,122263,122264],{"class":70,"line":2915},[68,122265,122266],{"class":74},"# 对比一下有没有缺文件\n",[68,122268,122269,122271,122274,122276],{"class":70,"line":2921},[68,122270,28355],{"class":587},[68,122272,122273],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[68,122275,2191],{"class":92},[68,122277,4274],{"class":85},[68,122279,122280,122282,122285],{"class":70,"line":2933},[68,122281,28355],{"class":587},[68,122283,122284],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[68,122286,120821],{"class":92},[68,122288,122289],{"class":70,"line":3214},[68,122290,121870],{"class":74},[68,122292,122293,122295,122297,122300,122302,122304],{"class":70,"line":3219},[68,122294,26171],{"class":587},[68,122296,26174],{"class":872},[68,122298,122299],{"class":872}," a+r",[68,122301,122273],{"class":872},[68,122303,2191],{"class":92},[68,122305,122306],{"class":85},"   \n",[68,122308,122309,122311,122313,122315,122317],{"class":70,"line":3225},[68,122310,26171],{"class":587},[68,122312,26174],{"class":872},[68,122314,122299],{"class":872},[68,122316,122284],{"class":872},[68,122318,120821],{"class":92},[48,122320,122321],{"start":89},[51,122322,122323],{},"检查是否安装成功",[58,122325,122327],{"className":120096,"code":122326,"language":120098,"meta":63,"style":63},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[65,122328,122329,122334],{"__ignoreMap":63},[68,122330,122331],{"class":70,"line":71},[68,122332,122333],{"class":74},"# 检查cuDNN版本命令\n",[68,122335,122336,122339,122342,122344,122346,122349,122352],{"class":70,"line":78},[68,122337,122338],{"class":587},"cat",[68,122340,122341],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[68,122343,26704],{"class":102},[68,122345,31829],{"class":587},[68,122347,122348],{"class":872}," CUDNN_MAJOR",[68,122350,122351],{"class":92}," -A",[68,122353,49316],{"class":92},[19,122355,122356],{},"出现下图这样的就是安装成功了",[19,122358,122359],{},[38,122360],{"alt":63,"src":122361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[48,122363,122364],{"start":115},[51,122365,122366],{},"软链接(一般不需要)",[58,122368,122370],{"className":120096,"code":122369,"language":120098,"meta":63,"style":63},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[65,122371,122372,122377],{"__ignoreMap":63},[68,122373,122374],{"class":70,"line":71},[68,122375,122376],{"class":74},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[68,122378,122379,122381],{"class":70,"line":78},[68,122380,26171],{"class":587},[68,122382,122383],{"class":872}," ldconfig\n",[19,122385,122386],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[58,122388,122393],{"className":122389,"code":122390,"language":122391,"meta":122392,"style":63},"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",[65,122394,122395,122400,122405,122410,122415,122420,122425],{"__ignoreMap":63},[68,122396,122397],{"class":70,"line":71},[68,122398,122399],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[68,122401,122402],{"class":70,"line":78},[68,122403,122404],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[68,122406,122407],{"class":70,"line":89},[68,122408,122409],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[68,122411,122412],{"class":70,"line":115},[68,122413,122414],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[68,122416,122417],{"class":70,"line":280},[68,122418,122419],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[68,122421,122422],{"class":70,"line":301},[68,122423,122424],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[68,122426,122427],{"class":70,"line":320},[68,122428,122429],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122431,122432],{},"运行下方的命令",[58,122434,122436],{"className":120096,"code":122435,"language":120098,"meta":63,"style":63},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[65,122437,122438,122443,122450,122455],{"__ignoreMap":63},[68,122439,122440],{"class":70,"line":71},[68,122441,122442],{"class":74},"# cd进入CUDA路径\n",[68,122444,122445,122447],{"class":70,"line":78},[68,122446,102850],{"class":92},[68,122448,122449],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[68,122451,122452],{"class":70,"line":89},[68,122453,122454],{"class":74}," # 查看本路径下的需要软链接的文件名\n",[68,122456,122457],{"class":70,"line":115},[68,122458,122459],{"class":587}," ls\n",[19,122461,122462],{},[38,122463],{"alt":63,"src":122464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122466,122467,122468,20005,122471,20005,122474,122477],{},"如上图，我需要将",[65,122469,122470],{},"libcudnn_xxx_xxxxx.so.8.9.7",[65,122472,122473],{},"libcudnn_xxx_xxxxx.so.8",[65,122475,122476],{},"libcudnn_xxx_xxxxx.so","软链接",[58,122479,122481],{"className":120096,"code":122480,"language":120098,"meta":63,"style":63},"# 创建符号链接。对于每个 .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",[65,122482,122483,122488,122504,122518,122532,122546,122560,122574,122588,122593,122599,122604],{"__ignoreMap":63},[68,122484,122485],{"class":70,"line":71},[68,122486,122487],{"class":74},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[68,122489,122490,122492,122495,122498,122501],{"class":70,"line":78},[68,122491,26171],{"class":587},[68,122493,122494],{"class":872}," ln",[68,122496,122497],{"class":92}," -sf",[68,122499,122500],{"class":872}," libcudnn_cnn_train.so.8.9.7",[68,122502,122503],{"class":872}," libcudnn_cnn_train.so.8\n",[68,122505,122506,122508,122510,122512,122515],{"class":70,"line":89},[68,122507,26171],{"class":587},[68,122509,122494],{"class":872},[68,122511,122497],{"class":92},[68,122513,122514],{"class":872}," libcudnn_adv_infer.so.8.9.7",[68,122516,122517],{"class":872}," libcudnn_adv_infer.so.8\n",[68,122519,122520,122522,122524,122526,122529],{"class":70,"line":115},[68,122521,26171],{"class":587},[68,122523,122494],{"class":872},[68,122525,122497],{"class":92},[68,122527,122528],{"class":872}," libcudnn_adv_train.so.8.9.7",[68,122530,122531],{"class":872}," libcudnn_adv_train.so.8\n",[68,122533,122534,122536,122538,122540,122543],{"class":70,"line":280},[68,122535,26171],{"class":587},[68,122537,122494],{"class":872},[68,122539,122497],{"class":92},[68,122541,122542],{"class":872}," libcudnn_cnn_infer.so.8.9.7",[68,122544,122545],{"class":872}," libcudnn_cnn_infer.so.8\n",[68,122547,122548,122550,122552,122554,122557],{"class":70,"line":301},[68,122549,26171],{"class":587},[68,122551,122494],{"class":872},[68,122553,122497],{"class":92},[68,122555,122556],{"class":872}," libcudnn.so.8.9.7",[68,122558,122559],{"class":872}," libcudnn.so.8\n",[68,122561,122562,122564,122566,122568,122571],{"class":70,"line":320},[68,122563,26171],{"class":587},[68,122565,122494],{"class":872},[68,122567,122497],{"class":92},[68,122569,122570],{"class":872}," libcudnn_ops_infer.so.8.9.7",[68,122572,122573],{"class":872}," libcudnn_ops_infer.so.8\n",[68,122575,122576,122578,122580,122582,122585],{"class":70,"line":2915},[68,122577,26171],{"class":587},[68,122579,122494],{"class":872},[68,122581,122497],{"class":92},[68,122583,122584],{"class":872}," libcudnn_ops_train.so.8.9.7",[68,122586,122587],{"class":872}," libcudnn_ops_train.so.8\n",[68,122589,122590],{"class":70,"line":2921},[68,122591,122592],{"class":74},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[68,122594,122595,122597],{"class":70,"line":2933},[68,122596,26171],{"class":587},[68,122598,122383],{"class":872},[68,122600,122601],{"class":70,"line":3214},[68,122602,122603],{"class":74},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[68,122605,122606,122608,122611,122614,122616,122619],{"class":70,"line":3219},[68,122607,28355],{"class":587},[68,122609,122610],{"class":92}," -l",[68,122612,122613],{"class":872}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[68,122615,2191],{"class":92},[68,122617,122618],{"class":872},".so",[68,122620,120821],{"class":92},[43,122622,122624],{"id":122623},"_355-常见问题","3.5.5 常见问题",[48,122626,122627],{},[51,122628,122629],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[58,122631,122633],{"className":120096,"code":122632,"language":120098,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[65,122634,122635],{"__ignoreMap":63},[68,122636,122637,122639,122641],{"class":70,"line":71},[68,122638,26171],{"class":587},[68,122640,120156],{"class":872},[68,122642,122643],{"class":872}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122645,122646],{},"blacklist-nouveau.conf文件内容如下：",[58,122648,122650],{"className":120096,"code":122649,"language":120098,"meta":63,"style":63},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[65,122651,122652,122660,122667,122679,122689],{"__ignoreMap":63},[68,122653,122654,122657],{"class":70,"line":71},[68,122655,122656],{"class":587},"blacklist",[68,122658,122659],{"class":872}," nouveau\n",[68,122661,122662,122664],{"class":70,"line":78},[68,122663,122656],{"class":587},[68,122665,122666],{"class":872}," lbm-nouveau\n",[68,122668,122669,122671,122674,122677],{"class":70,"line":89},[68,122670,117503],{"class":587},[68,122672,122673],{"class":872}," nouveau",[68,122675,122676],{"class":872}," modeset=",[68,122678,4684],{"class":92},[68,122680,122681,122684,122686],{"class":70,"line":115},[68,122682,122683],{"class":92},"alias",[68,122685,122673],{"class":872},[68,122687,122688],{"class":872}," off\n",[68,122690,122691,122693,122696],{"class":70,"line":280},[68,122692,122683],{"class":92},[68,122694,122695],{"class":872}," lbm-nouveau",[68,122697,122688],{"class":872},[19,122699,122700],{},"接着运行下方命令",[58,122702,122704],{"className":120096,"code":122703,"language":120098,"meta":63,"style":63},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[65,122705,122706,122716,122721],{"__ignoreMap":63},[68,122707,122708,122710,122713],{"class":70,"line":71},[68,122709,26171],{"class":587},[68,122711,122712],{"class":872}," update-initramfs",[68,122714,122715],{"class":92}," -u\n",[68,122717,122718],{"class":70,"line":78},[68,122719,122720],{"class":587},"或者\n",[68,122722,122723,122725,122728],{"class":70,"line":89},[68,122724,26171],{"class":587},[68,122726,122727],{"class":872}," dracut",[68,122729,122730],{"class":92}," --force\n",[19,122732,122733],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[58,122735,122737],{"className":120096,"code":122736,"language":120098,"meta":63,"style":63},"lsmod | grep nouveau\n",[65,122738,122739],{"__ignoreMap":63},[68,122740,122741,122744,122746,122748],{"class":70,"line":71},[68,122742,122743],{"class":587},"lsmod",[68,122745,26704],{"class":102},[68,122747,31829],{"class":587},[68,122749,122659],{"class":872},[48,122751,122752],{"start":78},[51,122753,122754],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[58,122756,122758],{"className":120096,"code":122757,"language":120098,"meta":63,"style":63},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[65,122759,122760],{"__ignoreMap":63},[68,122761,122762,122764,122766],{"class":70,"line":71},[68,122763,26171],{"class":587},[68,122765,120156],{"class":872},[68,122767,122768],{"class":872}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122770,122771],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[58,122773,122775],{"className":120096,"code":122774,"language":120098,"meta":63,"style":63},"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",[65,122776,122777,122785,122793,122801,122808,122816,122826,122834],{"__ignoreMap":63},[68,122778,122779,122782],{"class":70,"line":71},[68,122780,122781],{"class":587},"Section",[68,122783,122784],{"class":872}," \"OutputClass\"\n",[68,122786,122787,122790],{"class":70,"line":78},[68,122788,122789],{"class":587},"   Identifier",[68,122791,122792],{"class":872}," \"nvidia\"\n",[68,122794,122795,122798],{"class":70,"line":89},[68,122796,122797],{"class":587},"   MatchDriver",[68,122799,122800],{"class":872}," \"nvidia-drm\"\n",[68,122802,122803,122806],{"class":70,"line":115},[68,122804,122805],{"class":587},"   Driver",[68,122807,122792],{"class":872},[68,122809,122810,122813],{"class":70,"line":280},[68,122811,122812],{"class":587},"   Option",[68,122814,122815],{"class":872}," \"AllowEmptyInitialConfiguration\"\n",[68,122817,122818,122820,122823],{"class":70,"line":301},[68,122819,122812],{"class":587},[68,122821,122822],{"class":872}," \"PrimaryGPU\"",[68,122824,122825],{"class":872}," \"yes\"\n",[68,122827,122828,122831],{"class":70,"line":320},[68,122829,122830],{"class":587},"   ModulePath",[68,122832,122833],{"class":872}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[68,122835,122836],{"class":70,"line":2915},[68,122837,122838],{"class":587},"EndSection\n",[48,122840,122841],{"start":89},[51,122842,122843],{},"安装N卡驱动提示错误",[58,122845,122847],{"className":122389,"code":122846,"language":122391,"meta":122392,"style":63},"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",[65,122848,122849],{"__ignoreMap":63},[68,122850,122851],{"class":70,"line":71},[68,122852,122846],{},[48,122854,122855],{},[51,122856,122857],{},"检查当前运行的内核版本：",[19,122859,122860],{},"运行以下命令以查看你当前正在使用的内核版本：",[58,122862,122864],{"className":118869,"code":122863,"language":118871,"meta":63,"style":63},"uname -r\n",[65,122865,122866],{"__ignoreMap":63},[68,122867,122868,122870],{"class":70,"line":71},[68,122869,71786],{"class":587},[68,122871,122872],{"class":92}," -r\n",[48,122874,122875],{"start":78},[51,122876,122877],{},"安装内核开发文件：",[19,122879,122880,122881,122884],{},"确保你已经安装了与当前内核版本相匹配的 ",[65,122882,122883],{},"kernel-devel"," 包。运行以下命令来安装：",[58,122886,122888],{"className":118869,"code":122887,"language":118871,"meta":63,"style":63},"sudo dnf install kernel-devel-$(uname -r)\n",[65,122889,122890],{"__ignoreMap":63},[68,122891,122892,122894,122896,122898,122901,122903,122905,122907],{"class":70,"line":71},[68,122893,26171],{"class":587},[68,122895,27909],{"class":872},[68,122897,25428],{"class":872},[68,122899,122900],{"class":872}," kernel-devel-",[68,122902,26694],{"class":85},[68,122904,71786],{"class":587},[68,122906,121212],{"class":92},[68,122908,1757],{"class":85},[19,122910,122911],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[48,122913,122914],{"start":89},[51,122915,122916],{},"安装内核源代码（如果需要）：",[19,122918,122919],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[58,122921,122923],{"className":118869,"code":122922,"language":118871,"meta":63,"style":63},"sudo dnf install kernel-headers kernel-source\n",[65,122924,122925],{"__ignoreMap":63},[68,122926,122927,122929,122931,122933,122936],{"class":70,"line":71},[68,122928,26171],{"class":587},[68,122930,27909],{"class":872},[68,122932,25428],{"class":872},[68,122934,122935],{"class":872}," kernel-headers",[68,122937,122938],{"class":872}," kernel-source\n",[48,122940,122941],{"start":115},[51,122942,122943],{},"检查安装：",[19,122945,122946,122947,122950],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[65,122948,122949],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[58,122952,122954],{"className":118869,"code":122953,"language":118871,"meta":63,"style":63},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[65,122955,122956],{"__ignoreMap":63},[68,122957,122958,122960],{"class":70,"line":71},[68,122959,28355],{"class":587},[68,122961,122962],{"class":872}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122964,122965,122966,122969],{},"如果仍然遇到问题，可以通过 ",[65,122967,122968],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1652,122971,122972],{},"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":63,"searchDepth":78,"depth":78,"links":122974},[122975,122979,122989,122993,122994],{"id":120072,"depth":78,"text":120073,"children":122976},[122977,122978],{"id":120082,"depth":89,"text":120083},{"id":120092,"depth":89,"text":120093},{"id":120292,"depth":78,"text":120293,"children":122980},[122981,122982,122983,122984,122985,122986,122987,122988],{"id":120296,"depth":89,"text":120297},{"id":120366,"depth":89,"text":120367},{"id":120455,"depth":89,"text":120456},{"id":120700,"depth":89,"text":120701},{"id":120770,"depth":89,"text":120771},{"id":120837,"depth":89,"text":120838},{"id":120872,"depth":89,"text":120873},{"id":120927,"depth":89,"text":120928},{"id":120978,"depth":78,"text":120979,"children":122990},[122991,122992],{"id":120982,"depth":89,"text":120983},{"id":121062,"depth":89,"text":121063},{"id":121248,"depth":78,"text":121249},{"id":121421,"depth":78,"text":121422,"children":122995},[122996,122997,122998,122999,123000],{"id":121425,"depth":89,"text":121426},{"id":121466,"depth":89,"text":121467},{"id":121753,"depth":89,"text":121754},{"id":122127,"depth":89,"text":122128},{"id":122623,"depth":89,"text":122624},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120064,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123007,"title":123008,"body":123009,"description":1676,"extension":1677,"meta":123349,"navigation":1679,"path":123350,"seo":123351,"stem":123352,"__hash__":123353},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123010,"toc":123347},[123011,123014,123019,123022,123268,123273,123276,123312,123315,123344],[10,123012,123008],{"id":123013},"_4-命令教程长期积累",[48,123015,123016],{},[51,123017,123018],{},"大多数命令",[19,123020,123021],{},"常用 Linux 命令速查：",[58,123023,123025],{"className":118869,"code":123024,"language":118871,"meta":63,"style":63},"# 文件与目录\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",[65,123026,123027,123032,123039,123046,123054,123061,123068,123076,123084,123091,123098,123106,123110,123115,123122,123130,123137,123141,123146,123153,123161,123169,123177,123185,123189,123194,123202,123209,123216,123224,123232,123236,123241,123250,123259],{"__ignoreMap":63},[68,123028,123029],{"class":70,"line":71},[68,123030,123031],{"class":74},"# 文件与目录\n",[68,123033,123034,123036],{"class":70,"line":78},[68,123035,28355],{"class":587},[68,123037,123038],{"class":74},"        # 列出目录内容\n",[68,123040,123041,123043],{"class":70,"line":89},[68,123042,102850],{"class":92},[68,123044,123045],{"class":74},"        # 切换目录\n",[68,123047,123048,123051],{"class":70,"line":115},[68,123049,123050],{"class":92},"pwd",[68,123052,123053],{"class":74},"       # 显示当前路径\n",[68,123055,123056,123058],{"class":70,"line":280},[68,123057,102840],{"class":587},[68,123059,123060],{"class":74},"     # 创建目录\n",[68,123062,123063,123065],{"class":70,"line":301},[68,123064,26916],{"class":587},[68,123066,123067],{"class":74},"        # 删除文件或目录\n",[68,123069,123070,123073],{"class":70,"line":320},[68,123071,123072],{"class":587},"cp",[68,123074,123075],{"class":74},"        # 复制文件或目录\n",[68,123077,123078,123081],{"class":70,"line":2915},[68,123079,123080],{"class":587},"mv",[68,123082,123083],{"class":74},"        # 移动\u002F重命名文件或目录\n",[68,123085,123086,123088],{"class":70,"line":2921},[68,123087,102857],{"class":587},[68,123089,123090],{"class":74},"     # 创建空文件\n",[68,123092,123093,123095],{"class":70,"line":2933},[68,123094,122338],{"class":587},[68,123096,123097],{"class":74},"       # 查看文件内容\n",[68,123099,123100,123103],{"class":70,"line":3214},[68,123101,123102],{"class":587},"head\u002Ftail",[68,123104,123105],{"class":74}," # 查看文件头部\u002F尾部\n",[68,123107,123108],{"class":70,"line":3219},[68,123109,4000],{"emptyLinePlaceholder":1679},[68,123111,123112],{"class":70,"line":3225},[68,123113,123114],{"class":74},"# 权限管理\n",[68,123116,123117,123119],{"class":70,"line":3230},[68,123118,26206],{"class":587},[68,123120,123121],{"class":74},"     # 修改文件权限\n",[68,123123,123124,123127],{"class":70,"line":3244},[68,123125,123126],{"class":587},"chown",[68,123128,123129],{"class":74},"     # 修改文件所有者\n",[68,123131,123132,123134],{"class":70,"line":3249},[68,123133,26171],{"class":587},[68,123135,123136],{"class":74},"      # 以管理员身份执行\n",[68,123138,123139],{"class":70,"line":3255},[68,123140,4000],{"emptyLinePlaceholder":1679},[68,123142,123143],{"class":70,"line":3276},[68,123144,123145],{"class":74},"# 系统信息\n",[68,123147,123148,123150],{"class":70,"line":3281},[68,123149,71786],{"class":587},[68,123151,123152],{"class":74},"     # 系统信息\n",[68,123154,123155,123158],{"class":70,"line":3295},[68,123156,123157],{"class":587},"df",[68,123159,123160],{"class":74},"        # 磁盘使用情况\n",[68,123162,123163,123166],{"class":70,"line":3300},[68,123164,123165],{"class":587},"free",[68,123167,123168],{"class":74},"      # 内存使用情况\n",[68,123170,123171,123174],{"class":70,"line":3329},[68,123172,123173],{"class":587},"top\u002Fhtop",[68,123175,123176],{"class":74},"  # 进程监控\n",[68,123178,123179,123182],{"class":70,"line":3334},[68,123180,123181],{"class":587},"ps",[68,123183,123184],{"class":74},"        # 查看进程\n",[68,123186,123187],{"class":70,"line":3351},[68,123188,4000],{"emptyLinePlaceholder":1679},[68,123190,123191],{"class":70,"line":3356},[68,123192,123193],{"class":74},"# 网络\n",[68,123195,123196,123199],{"class":70,"line":3361},[68,123197,123198],{"class":587},"ping",[68,123200,123201],{"class":74},"      # 测试网络连通性\n",[68,123203,123204,123206],{"class":70,"line":3366},[68,123205,28443],{"class":587},[68,123207,123208],{"class":74},"      # 发送 HTTP 请求\n",[68,123210,123211,123213],{"class":70,"line":3380},[68,123212,121862],{"class":587},[68,123214,123215],{"class":74},"      # 下载文件\n",[68,123217,123218,123221],{"class":70,"line":3385},[68,123219,123220],{"class":587},"ssh",[68,123222,123223],{"class":74},"       # 远程登录\n",[68,123225,123226,123229],{"class":70,"line":4177},[68,123227,123228],{"class":587},"scp",[68,123230,123231],{"class":74},"       # 远程文件传输\n",[68,123233,123234],{"class":70,"line":4191},[68,123235,4000],{"emptyLinePlaceholder":1679},[68,123237,123238],{"class":70,"line":4199},[68,123239,123240],{"class":74},"# 包管理（Debian\u002FUbuntu）\n",[68,123242,123243,123245,123247],{"class":70,"line":4204},[68,123244,118941],{"class":587},[68,123246,118920],{"class":872},[68,123248,123249],{"class":74},"   # 更新软件源\n",[68,123251,123252,123254,123256],{"class":70,"line":4210},[68,123253,118941],{"class":587},[68,123255,25428],{"class":872},[68,123257,123258],{"class":74},"  # 安装软件包\n",[68,123260,123261,123263,123265],{"class":70,"line":4216},[68,123262,118941],{"class":587},[68,123264,27673],{"class":872},[68,123266,123267],{"class":74},"   # 卸载软件包\n",[48,123269,123270],{"start":78},[51,123271,123272],{},"KDE Dolphin 以root打开",[19,123274,123275],{},"kde5",[58,123277,123279],{"className":118869,"code":123278,"language":118871,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[65,123280,123281],{"__ignoreMap":63},[68,123282,123283,123286,123289,123292,123294,123296,123299,123302,123304,123307,123309],{"class":70,"line":71},[68,123284,123285],{"class":587},"pkexec",[68,123287,123288],{"class":872}," env",[68,123290,123291],{"class":872}," DISPLAY=",[68,123293,29736],{"class":85},[68,123295,29794],{"class":872},[68,123297,123298],{"class":85},"$XAUTHORITY ",[68,123300,123301],{"class":872},"KDE_SESSION_VERSION=",[68,123303,2055],{"class":92},[68,123305,123306],{"class":872}," KDE_FULL_SESSION=",[68,123308,2966],{"class":92},[68,123310,123311],{"class":872}," dolphin\n",[19,123313,123314],{},"kde6",[58,123316,123318],{"className":118869,"code":123317,"language":118871,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[65,123319,123320],{"__ignoreMap":63},[68,123321,123322,123324,123326,123328,123330,123332,123334,123336,123338,123340,123342],{"class":70,"line":71},[68,123323,123285],{"class":587},[68,123325,123288],{"class":872},[68,123327,123291],{"class":872},[68,123329,29736],{"class":85},[68,123331,29794],{"class":872},[68,123333,123298],{"class":85},[68,123335,123301],{"class":872},[68,123337,2080],{"class":92},[68,123339,123306],{"class":872},[68,123341,2966],{"class":92},[68,123343,123311],{"class":872},[1652,123345,123346],{},"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":63,"searchDepth":78,"depth":78,"links":123348},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123008,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123355,"title":123356,"body":123357,"description":1676,"extension":1677,"meta":123371,"navigation":1679,"path":123372,"seo":123373,"stem":123374,"__hash__":123375},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123358,"toc":123369},[123359,123362],[10,123360,123356],{"id":123361},"_5-各种环境配置",[19,123363,123364],{},[1974,123365,123368],{"href":123366,"rel":123367},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25459],"电控组环境搭建大全",{"title":63,"searchDepth":78,"depth":78,"links":123370},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123356,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123377,"title":123378,"body":123379,"description":1676,"extension":1677,"meta":123727,"navigation":1679,"path":123728,"seo":123729,"stem":123730,"__hash__":123731},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123380,"toc":123719},[123381,123384,123388,123392,123396,123401,123408,123412,123705,123709,123716],[10,123382,123378],{"id":123383},"_6-拓展功能",[14,123385,123387],{"id":123386},"_61-wine","6.1 Wine",[14,123389,123391],{"id":123390},"_62-android","6.2 Android",[43,123393,123395],{"id":123394},"_621-i卡a卡","6.2.1 I卡、A卡",[48,123397,123398],{},[51,123399,123400],{},"Wayland-Waydroid(体验超级好)",[19,123402,123403,123404],{},"Waydroid 官网与安装指南：",[1974,123405,123406],{"href":123406,"rel":123407},"https:\u002F\u002Fwaydro.id\u002F",[25459],[43,123409,123411],{"id":123410},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[48,123413,123414],{},[51,123415,123416,123417,123419,123420,123424,123426,123429,123434,123631],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55300,123418],{},"BlissOS 官网下载：",[1974,123421,123422],{"href":123422,"rel":123423},"https:\u002F\u002Fblissos.org\u002F",[25459],[55300,123425],{},[38,123427],{"alt":63,"src":123428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[48,123430,123431],{"start":89},[51,123432,123433],{},"比较推荐的配置",[58,123435,123437],{"className":118869,"code":123436,"language":118871,"meta":63,"style":63},"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",[65,123438,123439,123446,123456,123466,123476,123488,123498,123505,123515,123524,123533,123543,123553,123562,123572,123582,123594,123604,123613,123623],{"__ignoreMap":63},[68,123440,123441,123444],{"class":70,"line":71},[68,123442,123443],{"class":587},"qemu-system-x86_64",[68,123445,26273],{"class":92},[68,123447,123448,123451,123454],{"class":70,"line":78},[68,123449,123450],{"class":92},"        -M",[68,123452,123453],{"class":872}," q35,vmport=off",[68,123455,26273],{"class":92},[68,123457,123458,123461,123464],{"class":70,"line":89},[68,123459,123460],{"class":92},"        -accel",[68,123462,123463],{"class":872}," kvm",[68,123465,26273],{"class":92},[68,123467,123468,123471,123474],{"class":70,"line":115},[68,123469,123470],{"class":92},"        -cpu",[68,123472,123473],{"class":872}," qemu64,+sse3,+sse4.2",[68,123475,26273],{"class":92},[68,123477,123478,123481,123484,123486],{"class":70,"line":280},[68,123479,123480],{"class":92},"        -smp",[68,123482,123483],{"class":872}," 8,cores=",[68,123485,2029],{"class":92},[68,123487,26273],{"class":92},[68,123489,123490,123493,123496],{"class":70,"line":301},[68,123491,123492],{"class":92},"        -m",[68,123494,123495],{"class":872}," 6G",[68,123497,26273],{"class":92},[68,123499,123500,123503],{"class":70,"line":320},[68,123501,123502],{"class":92},"        -usb",[68,123504,26273],{"class":92},[68,123506,123507,123510,123513],{"class":70,"line":2915},[68,123508,123509],{"class":92},"        -device",[68,123511,123512],{"class":872}," virtio-tablet",[68,123514,26273],{"class":92},[68,123516,123517,123519,123522],{"class":70,"line":2921},[68,123518,123509],{"class":92},[68,123520,123521],{"class":872}," virtio-keyboard",[68,123523,26273],{"class":92},[68,123525,123526,123528,123531],{"class":70,"line":2933},[68,123527,123509],{"class":92},[68,123529,123530],{"class":872}," usb-tablet",[68,123532,26273],{"class":92},[68,123534,123535,123538,123541],{"class":70,"line":3214},[68,123536,123537],{"class":92},"        -bios",[68,123539,123540],{"class":872}," OVMF-pure-efi64.fd",[68,123542,26273],{"class":92},[68,123544,123545,123548,123551],{"class":70,"line":3219},[68,123546,123547],{"class":92},"        -net",[68,123549,123550],{"class":872}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[68,123552,26273],{"class":92},[68,123554,123555,123557,123560],{"class":70,"line":3225},[68,123556,123547],{"class":92},[68,123558,123559],{"class":872}," nic,model=virtio",[68,123561,26273],{"class":92},[68,123563,123564,123567,123570],{"class":70,"line":3230},[68,123565,123566],{"class":92},"        -audio",[68,123568,123569],{"class":872}," sdl,model=hda",[68,123571,26273],{"class":92},[68,123573,123574,123577,123580],{"class":70,"line":3244},[68,123575,123576],{"class":92},"        -display",[68,123578,123579],{"class":872}," sdl,gl=on,show-cursor=on",[68,123581,26273],{"class":92},[68,123583,123584,123586,123589,123592],{"class":70,"line":3249},[68,123585,123509],{"class":92},[68,123587,123588],{"class":872}," virtio-vga-gl,xres=1920,yres=",[68,123590,123591],{"class":92},"1080",[68,123593,26273],{"class":92},[68,123595,123596,123599,123602],{"class":70,"line":3255},[68,123597,123598],{"class":92},"        -drive",[68,123600,123601],{"class":872}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[68,123603,26273],{"class":92},[68,123605,123606,123608,123611],{"class":70,"line":3276},[68,123607,123598],{"class":92},[68,123609,123610],{"class":872}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[68,123612,26273],{"class":92},[68,123614,123615,123618,123621],{"class":70,"line":3281},[68,123616,123617],{"class":92},"        -monitor",[68,123619,123620],{"class":872}," stdio",[68,123622,26273],{"class":92},[68,123624,123625,123628],{"class":70,"line":3295},[68,123626,123627],{"class":92},"        -serial",[68,123629,123630],{"class":872}," none\n",[48,123632,123633],{"start":280},[51,123634,123635,123636],{},"常用操作：",[48,123637,123638,123641,123697],{},[51,123639,123640],{},"全屏：Ctrl+Alt+F",[51,123642,123643,123644,123649],{},"adb调试",[48,123645,123646],{},[51,123647,123648],{},"使Linux与Android用ADB连接。",[58,123650,123652],{"className":118869,"code":123651,"language":118871,"meta":63,"style":63},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[65,123653,123654,123659,123670,123675,123687,123692],{"__ignoreMap":63},[68,123655,123656],{"class":70,"line":71},[68,123657,123658],{"class":74},"# 连接安卓\n",[68,123660,123661,123664,123667],{"class":70,"line":78},[68,123662,123663],{"class":587},"adb",[68,123665,123666],{"class":872}," connect",[68,123668,123669],{"class":92}," 127.0.0.1\n",[68,123671,123672],{"class":70,"line":89},[68,123673,123674],{"class":74},"# 打开shell\n",[68,123676,123677,123679,123681,123684],{"class":70,"line":115},[68,123678,123663],{"class":587},[68,123680,28477],{"class":92},[68,123682,123683],{"class":872}," 127.0.0.1:5555",[68,123685,123686],{"class":872}," shell\n",[68,123688,123689],{"class":70,"line":280},[68,123690,123691],{"class":74},"# 使用root权限\n",[68,123693,123694],{"class":70,"line":301},[68,123695,123696],{"class":587},"su\n",[51,123698,123699,123700],{},"中文输入法",[48,123701,123702],{},[51,123703,123704],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123706,123708],{"id":123707},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123710,123711,123712],{},"rEFInd 官网与文档：",[1974,123713,123714],{"href":123714,"rel":123715},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25459],[1652,123717,123718],{},"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":63,"searchDepth":78,"depth":78,"links":123720},[123721,123722,123726],{"id":123386,"depth":78,"text":123387},{"id":123390,"depth":78,"text":123391,"children":123723},[123724,123725],{"id":123394,"depth":89,"text":123395},{"id":123410,"depth":89,"text":123411},{"id":123707,"depth":78,"text":123708},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123378,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123733,"title":123734,"body":123735,"description":1676,"extension":1677,"meta":127034,"navigation":1679,"path":127035,"seo":127036,"stem":127037,"__hash__":127038},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123736,"toc":127008},[123737,123740,123744,123747,123754,124004,124007,124079,124082,124086,124090,124095,124098,124101,124104,124109,124112,124115,124118,124123,124126,124131,124134,124137,124142,124145,124150,124153,124157,124161,124164,124169,124172,124186,124189,124192,124201,124204,124213,124216,124219,124228,124231,124240,124243,124246,124255,124258,124261,124276,124279,124282,124291,124296,124299,124302,124311,124314,124323,124326,124335,124338,124347,124352,124355,124363,124368,124371,124380,124383,124391,124396,124399,124408,124411,124414,124418,124421,124426,124429,124434,124448,124453,124458,124469,124474,124480,124485,124500,124505,124508,124513,124518,124523,124531,124536,124543,124548,124559,124564,124567,124571,124574,124577,124582,124585,124604,124609,124612,124621,124626,124629,124651,124654,124684,124687,124692,124695,124709,124714,124733,124736,124739,124744,124756,124761,124766,124769,124774,124777,124792,124795,124800,124805,124809,124814,124854,124857,124861,124867,124873,124878,124881,124888,124893,124900,124903,124906,124913,124927,124930,124990,124993,125007,125019,125022,125025,125028,125092,125095,125098,125101,125121,125124,125129,125136,125140,125143,125147,125152,125157,125161,125164,125167,125209,125214,125217,125239,125254,125256,125261,125273,125333,125335,125337,125391,125393,125395,125401,125406,125409,125414,125418,125421,125483,125488,125491,125493,125497,125509,125591,125593,125595,125649,125655,125657,125661,125666,125668,125673,125677,125697,125732,125736,125739,125742,125745,125752,125755,125767,125770,125785,125788,125807,125855,125858,125875,125878,125892,125897,125900,125909,125924,125936,125974,125979,125988,125993,125998,126024,126033,126037,126041,126046,126049,126053,126057,126062,126065,126070,126073,126078,126081,126086,126089,126093,126098,126101,126106,126109,126113,126118,126121,126126,126129,126134,126137,126141,126146,126149,126154,126157,126162,126165,126169,126174,126177,126182,126185,126190,126193,126198,126201,126206,126209,126214,126217,126221,126226,126229,126234,126241,126245,126250,126253,126258,126261,126265,126270,126273,126276,126279,126282,126285,126289,126292,126302,126307,126312,126334,126339,126344,126351,126355,126360,126363,126366,126371,126374,126377,126380,126383,126386,126389,126392,126395,126398,126401,126404,126407,126412,126417,126422,126427,126432,126437,126442,126445,126449,126452,126456,126461,126466,126471,126476,126480,126486,126494,126499,126502,126507,126522,126525,126530,126564,126579,126582,126637,126663,126675,126678,126687,126690,126705,126710,126713,126719,126724,126727,126732,126735,126740,126745,126752,126755,126770,126773,126808,126813,126821,126859,126862,126865,126870,126873,126878,126889,126923,126928,126931,126940,126945,126951,126954,126959,126968,126973,126976,126979,126984,126992,126995,127000,127005],[10,123738,123734],{"id":123739},"_7-其他操作",[14,123741,123743],{"id":123742},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123745,123746],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123748,123749,123750,123753],{},"进入工控机的硬盘目录，进入",[65,123751,123752],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[58,123755,123759],{"className":123756,"code":123757,"language":123758,"meta":63,"style":63},"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",[65,123760,123761,123769,123780,123787,123794,123806,123813,123825,123836,123847,123854,123861,123868,123880,123892,123899,123911,123923,123930,123942,123954,123966,123977,123984,123995],{"__ignoreMap":63},[68,123762,123763,123766],{"class":70,"line":71},[68,123764,123765],{"class":81},"network",[68,123767,123768],{"class":85},": \n",[68,123770,123771,123774,123776,123778],{"class":70,"line":78},[68,123772,123773],{"class":81},"  version",[68,123775,96],{"class":85},[68,123777,267],{"class":92},[68,123779,4274],{"class":85},[68,123781,123782,123785],{"class":70,"line":89},[68,123783,123784],{"class":81},"  wifis",[68,123786,123768],{"class":85},[68,123788,123789,123792],{"class":70,"line":115},[68,123790,123791],{"class":81},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[68,123793,123768],{"class":85},[68,123795,123796,123799,123801,123804],{"class":70,"line":280},[68,123797,123798],{"class":81},"      renderer",[68,123800,96],{"class":85},[68,123802,123803],{"class":872},"NetworkManager",[68,123805,4274],{"class":85},[68,123807,123808,123811],{"class":70,"line":301},[68,123809,123810],{"class":81},"      match",[68,123812,123768],{"class":85},[68,123814,123815,123818,123820,123823],{"class":70,"line":320},[68,123816,123817],{"class":81},"        name",[68,123819,96],{"class":85},[68,123821,123822],{"class":872},"\"wlan0\"",[68,123824,4274],{"class":85},[68,123826,123827,123830,123832,123834],{"class":70,"line":2915},[68,123828,123829],{"class":81},"      dhcp4",[68,123831,96],{"class":85},[68,123833,2966],{"class":92},[68,123835,4274],{"class":85},[68,123837,123838,123841,123843,123845],{"class":70,"line":2921},[68,123839,123840],{"class":81},"      dhcp6",[68,123842,96],{"class":85},[68,123844,2966],{"class":92},[68,123846,4274],{"class":85},[68,123848,123849,123852],{"class":70,"line":2933},[68,123850,123851],{"class":81},"      access-points",[68,123853,123768],{"class":85},[68,123855,123856,123859],{"class":70,"line":3214},[68,123857,123858],{"class":872},"        \"EMIS_Vinci_Robocon_5G\"",[68,123860,123768],{"class":85},[68,123862,123863,123866],{"class":70,"line":3219},[68,123864,123865],{"class":81},"          auth",[68,123867,123768],{"class":85},[68,123869,123870,123873,123875,123878],{"class":70,"line":3225},[68,123871,123872],{"class":81},"            key-management",[68,123874,96],{"class":85},[68,123876,123877],{"class":872},"\"psk\"",[68,123879,4274],{"class":85},[68,123881,123882,123885,123887,123890],{"class":70,"line":3230},[68,123883,123884],{"class":81},"            password",[68,123886,96],{"class":85},[68,123888,123889],{"class":872},"\"vinci666\"",[68,123891,4274],{"class":85},[68,123893,123894,123897],{"class":70,"line":3244},[68,123895,123896],{"class":81},"          networkmanager",[68,123898,123768],{"class":85},[68,123900,123901,123904,123906,123909],{"class":70,"line":3249},[68,123902,123903],{"class":81},"            uuid",[68,123905,96],{"class":85},[68,123907,123908],{"class":872},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[68,123910,4274],{"class":85},[68,123912,123913,123916,123918,123921],{"class":70,"line":3255},[68,123914,123915],{"class":81},"            name",[68,123917,96],{"class":85},[68,123919,123920],{"class":872},"\"EMIS_Vinci_Robocon_5G\"",[68,123922,4274],{"class":85},[68,123924,123925,123928],{"class":70,"line":3276},[68,123926,123927],{"class":81},"            passthrough",[68,123929,123768],{"class":85},[68,123931,123932,123935,123937,123940],{"class":70,"line":3281},[68,123933,123934],{"class":81},"              wifi-security.auth-alg",[68,123936,96],{"class":85},[68,123938,123939],{"class":872},"\"open\"",[68,123941,4274],{"class":85},[68,123943,123944,123947,123949,123952],{"class":70,"line":3295},[68,123945,123946],{"class":81},"              ipv6.addr-gen-mode",[68,123948,96],{"class":85},[68,123950,123951],{"class":872},"\"default\"",[68,123953,4274],{"class":85},[68,123955,123956,123959,123961,123964],{"class":70,"line":3300},[68,123957,123958],{"class":81},"              ipv6.ip6-privacy",[68,123960,96],{"class":85},[68,123962,123963],{"class":872},"\"-1\"",[68,123965,4274],{"class":85},[68,123967,123968,123971,123973,123975],{"class":70,"line":3329},[68,123969,123970],{"class":81},"              proxy._",[68,123972,96],{"class":85},[68,123974,9251],{"class":872},[68,123976,4274],{"class":85},[68,123978,123979,123982],{"class":70,"line":3334},[68,123980,123981],{"class":81},"      networkmanager",[68,123983,123768],{"class":85},[68,123985,123986,123989,123991,123993],{"class":70,"line":3351},[68,123987,123988],{"class":81},"        uuid",[68,123990,96],{"class":85},[68,123992,123908],{"class":872},[68,123994,4274],{"class":85},[68,123996,123997,123999,124001],{"class":70,"line":3356},[68,123998,123817],{"class":81},[68,124000,96],{"class":85},[68,124002,124003],{"class":872},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124005,124006],{},"将其改为新wifi的名和密码：",[58,124008,124010],{"className":123756,"code":124009,"language":123758,"meta":63,"style":63},"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",[65,124011,124012,124018,124027,124033,124040,124049,124057,124063,124069],{"__ignoreMap":63},[68,124013,124014,124016],{"class":70,"line":71},[68,124015,123765],{"class":81},[68,124017,5338],{"class":85},[68,124019,124020,124022,124024],{"class":70,"line":78},[68,124021,123773],{"class":81},[68,124023,96],{"class":85},[68,124025,124026],{"class":92},"2\n",[68,124028,124029,124031],{"class":70,"line":89},[68,124030,123784],{"class":81},[68,124032,5338],{"class":85},[68,124034,124035,124038],{"class":70,"line":115},[68,124036,124037],{"class":81},"    wlan0",[68,124039,5338],{"class":85},[68,124041,124042,124044,124046],{"class":70,"line":280},[68,124043,123829],{"class":81},[68,124045,96],{"class":85},[68,124047,124048],{"class":92},"true\n",[68,124050,124051,124053,124055],{"class":70,"line":301},[68,124052,123840],{"class":81},[68,124054,96],{"class":85},[68,124056,124048],{"class":92},[68,124058,124059,124061],{"class":70,"line":320},[68,124060,123851],{"class":81},[68,124062,5338],{"class":85},[68,124064,124065,124067],{"class":70,"line":2915},[68,124066,123858],{"class":872},[68,124068,5338],{"class":85},[68,124070,124071,124074,124076],{"class":70,"line":2921},[68,124072,124073],{"class":81},"          password",[68,124075,96],{"class":85},[68,124077,124078],{"class":872},"\"vinci666\"\n",[19,124080,124081],{},"工控机开机即可连上网。",[14,124083,124085],{"id":124084},"_72-ssh远程开发","7.2 SSH远程开发",[43,124087,124089],{"id":124088},"_721-环境准备","7.2.1 环境准备",[19,124091,124092],{},[1890,124093,124094],{},"1.硬件准备",[19,124096,124097],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124099,124100],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124102,124103],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124105,124106],{},[1890,124107,124108],{},"2.设置固定IP",[19,124110,124111],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124113,124114],{},"1.进入设置界面",[19,124116,124117],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124119,124120],{},[38,124121],{"alt":63,"src":124122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124124,124125],{},"2.配置所连接的网络",[19,124127,124128],{},[38,124129],{"alt":63,"src":124130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124132,124133],{},"3.设置固定IP",[19,124135,124136],{},"查看当前IP地址。",[19,124138,124139],{},[38,124140],{"alt":63,"src":124141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124143,124144],{},"设置固定IP。",[19,124146,124147],{},[38,124148],{"alt":63,"src":124149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124151,124152],{},"至此，IP配置完毕。",[43,124154,124156],{"id":124155},"_722-环境搭建","7.2.2 环境搭建",[19,124158,124159],{},[1890,124160,27347],{},[19,124162,124163],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124165,124166],{},[1890,124167,124168],{},"实现",[19,124170,124171],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[48,124173,124174,124177,124180,124183],{},[51,124175,124176],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[51,124178,124179],{},"远程主机启动SSH服务；",[51,124181,124182],{},"本地主机登陆远程主机；",[51,124184,124185],{},"实现数据传输。",[19,124187,124188],{},"1.安装SSH客户端与服务端",[19,124190,124191],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[58,124193,124195],{"className":122389,"code":124194,"language":122391,"meta":122392,"style":63}," sudo apt install openssh-server\n",[65,124196,124197],{"__ignoreMap":63},[68,124198,124199],{"class":70,"line":71},[68,124200,124194],{},[19,124202,124203],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[58,124205,124207],{"className":122389,"code":124206,"language":122391,"meta":122392,"style":63},"sudo apt install openssh-client\n",[65,124208,124209],{"__ignoreMap":63},[68,124210,124211],{"class":70,"line":71},[68,124212,124206],{},[19,124214,124215],{},"2.远程主机启动SSH服务",[19,124217,124218],{},"远程主机启动 ssh 服务命令如下：",[58,124220,124222],{"className":122389,"code":124221,"language":122391,"meta":122392,"style":63},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[65,124223,124224],{"__ignoreMap":63},[68,124225,124226],{"class":70,"line":71},[68,124227,124221],{},[19,124229,124230],{},"启动后可使用如下命令查看服务是否正常运行：",[58,124232,124234],{"className":122389,"code":124233,"language":122391,"meta":122392,"style":63},"ps -e | grep ssh\n",[65,124235,124236],{"__ignoreMap":63},[68,124237,124238],{"class":70,"line":71},[68,124239,124233],{},[19,124241,124242],{},"如果启动成功，会包含 sshd 程序。",[19,124244,124245],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[58,124247,124249],{"className":122389,"code":124248,"language":122391,"meta":122392,"style":63},"sudo systemctl enable ssh\n",[65,124250,124251],{"__ignoreMap":63},[68,124252,124253],{"class":70,"line":71},[68,124254,124248],{},[19,124256,124257],{},"3.本地远程登录",[19,124259,124260],{},"登录远程主机可以调用如下命令:",[58,124262,124264],{"className":118869,"code":124263,"language":118871,"meta":63,"style":63},"ssh -X 用户名@ip地址\n",[65,124265,124266],{"__ignoreMap":63},[68,124267,124268,124270,124273],{"class":70,"line":71},[68,124269,123220],{"class":587},[68,124271,124272],{"class":92}," -X",[68,124274,124275],{"class":872}," 用户名@ip地址\n",[19,124277,124278],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124280,124281],{},"如果退出，可以调用exit命令：",[58,124283,124285],{"className":122389,"code":124284,"language":122391,"meta":122392,"style":63},"exit\n",[65,124286,124287],{"__ignoreMap":63},[68,124288,124289],{"class":70,"line":71},[68,124290,124284],{},[19,124292,124293],{},[1890,124294,124295],{},"4.实现数据传输",[19,124297,124298],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124300,124301],{},"上传文件指令格式如下：",[58,124303,124305],{"className":122389,"code":124304,"language":122391,"meta":122392,"style":63},"scp 本地文件路径 账号@ip:路径\n",[65,124306,124307],{"__ignoreMap":63},[68,124308,124309],{"class":70,"line":71},[68,124310,124304],{},[19,124312,124313],{},"上传文件夹指令格式如下：",[58,124315,124317],{"className":122389,"code":124316,"language":122391,"meta":122392,"style":63},"scp -r 本地文件夹路径 账号@ip:路径\n",[65,124318,124319],{"__ignoreMap":63},[68,124320,124321],{"class":70,"line":71},[68,124322,124316],{},[19,124324,124325],{},"下载文件指令格式如下：",[58,124327,124329],{"className":122389,"code":124328,"language":122391,"meta":122392,"style":63},"scp 账号@ip:路径 本地文件夹路径\n",[65,124330,124331],{"__ignoreMap":63},[68,124332,124333],{"class":70,"line":71},[68,124334,124328],{},[19,124336,124337],{},"下载文件夹指令格式如下：",[58,124339,124341],{"className":122389,"code":124340,"language":122391,"meta":122392,"style":63},"scp -r 账号@ip:路径 本地文件夹路径\n",[65,124342,124343],{"__ignoreMap":63},[68,124344,124345],{"class":70,"line":71},[68,124346,124340],{},[19,124348,124349],{},[1890,124350,124351],{},"优化",[19,124353,124354],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[48,124356,124357,124360],{},[51,124358,124359],{},"本地生成密钥对；",[51,124361,124362],{},"将公钥上传至远程主机。",[19,124364,124365],{},[1890,124366,124367],{},"1.生成密钥对",[19,124369,124370],{},"本地客户端生成公私钥：（一路回车默认即可）",[58,124372,124374],{"className":122389,"code":124373,"language":122391,"meta":122392,"style":63},"ssh-keygen\n",[65,124375,124376],{"__ignoreMap":63},[68,124377,124378],{"class":70,"line":71},[68,124379,124373],{},[19,124381,124382],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[48,124384,124385,124388],{},[51,124386,124387],{},"id_rsa （私钥）；",[51,124389,124390],{},"id_rsa.pub (公钥)。",[19,124392,124393],{},[1890,124394,124395],{},"2.公钥上传",[19,124397,124398],{},"上传指令如下：",[58,124400,124402],{"className":122389,"code":124401,"language":122391,"meta":122392,"style":63},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[65,124403,124404],{"__ignoreMap":63},[68,124405,124406],{"class":70,"line":71},[68,124407,124401],{},[19,124409,124410],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124412,124413],{},"以后再远程登录就无需录入密码了。",[43,124415,124417],{"id":124416},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124419,124420],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124422,124423],{},[1890,124424,124425],{},"1.准备工作",[19,124427,124428],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124430,124431],{},[1890,124432,124433],{},"2.为VScode安装远程开发插件",[19,124435,124436,124437,124440,124441,124444,124445,29978],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[65,124438,124439],{},"扩展：商店","的搜索栏输入",[65,124442,124443],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[65,124446,124447],{},"安装",[19,124449,124450],{},[38,124451],{"alt":63,"src":124452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124454,124455],{},[1890,124456,124457],{},"3.配置远程连接",[19,124459,124460,124461,124464,124465,124468],{},"步骤1：使用快捷键",[65,124462,124463],{},"ctrl + shift + p","打开命令输入窗口，并输入",[65,124466,124467],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124470,124471],{},[38,124472],{"alt":63,"src":124473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124475,124476,124477,29978],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[65,124478,124479],{},"Add New SSH Host",[19,124481,124482],{},[38,124483],{"alt":63,"src":124484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124486,124487,124488,124491,124492,124495,124496,124499],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[65,124489,124490],{},"ssh +X ubuntu@192.168.43.164","，其中，",[65,124493,124494],{},"ubuntu","需要替换为你的登录用户名，",[65,124497,124498],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124501,124502],{},[38,124503],{"alt":63,"src":124504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124506,124507],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124509,124510],{},[38,124511],{"alt":63,"src":124512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124514,124515],{},[38,124516],{"alt":63,"src":124517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124519,124520],{},[1890,124521,124522],{},"4.使用",[19,124524,124525,124526,124464,124528,124530],{},"步骤1：继续使用快捷键",[65,124527,124463],{},[65,124529,124467],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124532,124533],{},[38,124534],{"alt":63,"src":124535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124537,124538,124539,124542],{},"或者，也可以点击侧边栏的",[65,124540,124541],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124544,124545],{},[38,124546],{"alt":63,"src":124547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124549,124550,124551,124554,124555,124558],{},"步骤2：选择菜单栏的",[65,124552,124553],{},"文件","下的",[65,124556,124557],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124560,124561],{},[38,124562],{"alt":63,"src":124563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124565,124566],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124568,124570],{"id":124569},"_73-远程桌面","7.3 远程桌面",[19,124572,124573],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124575,124576],{},"我们选择使用VNC来看。",[48,124578,124579],{},[51,124580,124581],{},"安装VNC服务器：",[19,124583,124584],{},"这里以TigerVNC为例进行安装：",[58,124586,124588],{"className":118869,"code":124587,"language":118871,"meta":63,"style":63},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[65,124589,124590],{"__ignoreMap":63},[68,124591,124592,124594,124596,124598,124601],{"class":70,"line":71},[68,124593,26171],{"class":587},[68,124595,118890],{"class":872},[68,124597,25428],{"class":872},[68,124599,124600],{"class":872}," tigervnc-standalone-server",[68,124602,124603],{"class":872}," tigervnc-common\n",[48,124605,124606],{"start":78},[51,124607,124608],{},"设置VNC密码：",[19,124610,124611],{},"为VNC用户设置密码，运行以下命令：",[58,124613,124615],{"className":118869,"code":124614,"language":118871,"meta":63,"style":63},"vncpasswd\n",[65,124616,124617],{"__ignoreMap":63},[68,124618,124619],{"class":70,"line":71},[68,124620,124614],{"class":587},[48,124622,124623],{"start":89},[51,124624,124625],{},"配置VNC启动脚本:",[19,124627,124628],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[58,124630,124632],{"className":118869,"code":124631,"language":118871,"meta":63,"style":63},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[65,124633,124634,124643],{"__ignoreMap":63},[68,124635,124636,124638,124640],{"class":70,"line":71},[68,124637,102840],{"class":587},[68,124639,30809],{"class":92},[68,124641,124642],{"class":872}," ~\u002F.vnc\n",[68,124644,124645,124648],{"class":70,"line":78},[68,124646,124647],{"class":587},"nano",[68,124649,124650],{"class":872}," ~\u002F.vnc\u002Fxstartup\n",[19,124652,124653],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[58,124655,124657],{"className":118869,"code":124656,"language":118871,"meta":63,"style":63},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[65,124658,124659,124664,124672,124679],{"__ignoreMap":63},[68,124660,124661],{"class":70,"line":71},[68,124662,124663],{"class":74},"#!\u002Fbin\u002Fsh\n",[68,124665,124666,124669],{"class":70,"line":78},[68,124667,124668],{"class":92},"unset",[68,124670,124671],{"class":872}," SESSION_MANAGER\n",[68,124673,124674,124676],{"class":70,"line":89},[68,124675,124668],{"class":92},[68,124677,124678],{"class":872}," DBUS_SESSION_BUS_ADDRESS\n",[68,124680,124681],{"class":70,"line":115},[68,124682,124683],{"class":587},"gnome-session\n",[19,124685,124686],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[48,124688,124689],{"start":115},[51,124690,124691],{},"给予执行权限：",[19,124693,124694],{},"为xstartup文件设置执行权限：",[58,124696,124698],{"className":118869,"code":124697,"language":118871,"meta":63,"style":63},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[65,124699,124700],{"__ignoreMap":63},[68,124701,124702,124704,124707],{"class":70,"line":71},[68,124703,26206],{"class":587},[68,124705,124706],{"class":872}," +x",[68,124708,124650],{"class":872},[48,124710,124711],{"start":280},[51,124712,124713],{},"启动VNC服务器：",[58,124715,124717],{"className":118869,"code":124716,"language":118871,"meta":63,"style":63},"vncserver -geometry 1920x1080 -localhost=0\n",[65,124718,124719],{"__ignoreMap":63},[68,124720,124721,124724,124727,124730],{"class":70,"line":71},[68,124722,124723],{"class":587},"vncserver",[68,124725,124726],{"class":92}," -geometry",[68,124728,124729],{"class":872}," 1920x1080",[68,124731,124732],{"class":92}," -localhost=0\n",[19,124734,124735],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124737,124738],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[48,124740,124741],{"start":301},[51,124742,124743],{},"查看已开启的VNC服务器：",[58,124745,124747],{"className":118869,"code":124746,"language":118871,"meta":63,"style":63},"vncserver -list\n",[65,124748,124749],{"__ignoreMap":63},[68,124750,124751,124753],{"class":70,"line":71},[68,124752,124723],{"class":587},[68,124754,124755],{"class":92}," -list\n",[19,124757,124758],{},[38,124759],{"alt":63,"src":124760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[48,124762,124763],{"start":320},[51,124764,124765],{},"连接到VNC服务器：",[19,124767,124768],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[48,124770,124771],{"start":2915},[51,124772,124773],{},"停止VNC服务器：",[19,124775,124776],{},"如果需要停止VNC服务器，可以使用以下命令：",[58,124778,124780],{"className":118869,"code":124779,"language":118871,"meta":63,"style":63},"vncserver -kill :1\n",[65,124781,124782],{"__ignoreMap":63},[68,124783,124784,124786,124789],{"class":70,"line":71},[68,124785,124723],{"class":587},[68,124787,124788],{"class":92}," -kill",[68,124790,124791],{"class":872}," :1\n",[19,124793,124794],{},"将:1替换为你实际使用的显示编号。",[19,124796,124797],{},[38,124798],{"alt":63,"src":124799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124801,124802],{},[38,124803],{"alt":63,"src":124804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124806,124808],{"id":124807},"_74-usb端口设置","7.4 USB端口设置",[19,124810,124811],{},[1890,124812,124813],{},"首先先配置好权限",[58,124815,124817],{"className":118869,"code":124816,"language":118871,"meta":63,"style":63},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[65,124818,124819,124824,124837,124844,124849],{"__ignoreMap":63},[68,124820,124821],{"class":70,"line":71},[68,124822,124823],{"class":74},"# 将用户权限提高\n",[68,124825,124826,124828,124830,124832,124835],{"class":70,"line":78},[68,124827,26171],{"class":587},[68,124829,28168],{"class":872},[68,124831,28171],{"class":92},[68,124833,124834],{"class":872}," dialout",[68,124836,28176],{"class":85},[68,124838,124839,124841],{"class":70,"line":89},[68,124840,28195],{"class":587},[68,124842,124843],{"class":872}," dialout\n",[68,124845,124846],{"class":70,"line":115},[68,124847,124848],{"class":74},"# 查看下面命令是否输出dialout（若输出才正常）\n",[68,124850,124851],{"class":70,"line":280},[68,124852,124853],{"class":587},"groups\n",[19,124855,124856],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[43,124858,124860],{"id":124859},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124862,124863,124866],{},[1890,124864,124865],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124868,124869,124872],{},[1890,124870,124871],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124874,124875],{},[1890,124876,124877],{},"流程如下：",[19,124879,124880],{},"（1）.查找设备idVendor和idProduct",[19,124882,124883,124884,124887],{},"接入两个USB设备，在终端调用指令",[65,124885,124886],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124889,124890],{},[38,124891],{"alt":63,"src":124892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124894,124895,124896,124899],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[65,124897,124898],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124901,124902],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124904,124905],{},"（2）.编写映射规则",[19,124907,124908,124909,124912],{},"在",[65,124910,124911],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[58,124914,124916],{"className":118869,"code":124915,"language":118871,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[65,124917,124918],{"__ignoreMap":63},[68,124919,124920,124922,124924],{"class":70,"line":71},[68,124921,26171],{"class":587},[68,124923,120156],{"class":872},[68,124925,124926],{"class":872}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124928,124929],{},"输入如下内容：",[58,124931,124933],{"className":118869,"code":124932,"language":118871,"meta":63,"style":63},"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",[65,124934,124935,124965],{"__ignoreMap":63},[68,124936,124937,124940,124942,124945,124948,124951,124954,124956,124959,124962],{"class":70,"line":71},[68,124938,124939],{"class":85},"KERNEL",[68,124941,869],{"class":102},[68,124943,124944],{"class":872},"=\"ttyUSB*\",",[68,124946,124947],{"class":587}," ATTRS",[68,124949,124950],{"class":872},"{idVendor}==",[68,124952,124953],{"class":587},"\"10c4\"",[68,124955,2114],{"class":587},[68,124957,124958],{"class":872}," ATTRS{idProduct}==\"ea60\",",[68,124960,124961],{"class":872}," MODE:=\"0777\",",[68,124963,124964],{"class":872}," SYMLINK+=\"mylidar\"\n",[68,124966,124967,124969,124971,124973,124975,124977,124980,124982,124985,124987],{"class":70,"line":78},[68,124968,124939],{"class":85},[68,124970,869],{"class":102},[68,124972,124944],{"class":872},[68,124974,124947],{"class":587},[68,124976,124950],{"class":872},[68,124978,124979],{"class":587},"\"1a86\"",[68,124981,2114],{"class":587},[68,124983,124984],{"class":872}," ATTRS{idProduct}==\"7523\",",[68,124986,124961],{"class":872},[68,124988,124989],{"class":872}," SYMLINK+=\"mycar\"\n",[19,124991,124992],{},"代码解释：",[168,124994,124995,124998,125001,125004],{},[51,124996,124997],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[51,124999,125000],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[51,125002,125003],{},"SYMLINK是符号连接，即绑定的别名；",[51,125005,125006],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125008,125009,125010,125013,125016],{},"***小提示：***",[25148,125011,125012],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[65,125014,125015],{},"\u002Fetc\u002Fudev\u002Frule.d",[25148,125017,125018],{},"目录即可。",[19,125020,125021],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125023,125024],{},"（3）.使规则生效",[19,125026,125027],{},"在终端下输入如下指令：",[58,125029,125031],{"className":118869,"code":125030,"language":118871,"meta":63,"style":63},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[65,125032,125033,125038,125050,125061,125065,125070,125083],{"__ignoreMap":63},[68,125034,125035],{"class":70,"line":71},[68,125036,125037],{"class":74},"# Ubuntu用下方命令\n",[68,125039,125040,125042,125044,125047],{"class":70,"line":78},[68,125041,26171],{"class":587},[68,125043,121621],{"class":872},[68,125045,125046],{"class":872}," udev",[68,125048,125049],{"class":872}," reload\n",[68,125051,125052,125054,125056,125058],{"class":70,"line":89},[68,125053,26171],{"class":587},[68,125055,121621],{"class":872},[68,125057,125046],{"class":872},[68,125059,125060],{"class":872}," restart\n",[68,125062,125063],{"class":70,"line":115},[68,125064,4000],{"emptyLinePlaceholder":1679},[68,125066,125067],{"class":70,"line":280},[68,125068,125069],{"class":74},"#Fedora用下方命令\n",[68,125071,125072,125074,125077,125080],{"class":70,"line":301},[68,125073,26171],{"class":587},[68,125075,125076],{"class":872}," udevadm",[68,125078,125079],{"class":872}," control",[68,125081,125082],{"class":92}," --reload\n",[68,125084,125085,125087,125089],{"class":70,"line":320},[68,125086,26171],{"class":587},[68,125088,125076],{"class":872},[68,125090,125091],{"class":872}," trigger\n",[19,125093,125094],{},"再重新插拔设备即可。",[19,125096,125097],{},"（4）.测试",[19,125099,125100],{},"终端下输入如下指令",[58,125102,125104],{"className":118869,"code":125103,"language":118871,"meta":63,"style":63},"ll \u002Fdev | grep ttyUSB\n",[65,125105,125106],{"__ignoreMap":63},[68,125107,125108,125111,125114,125116,125118],{"class":70,"line":71},[68,125109,125110],{"class":587},"ll",[68,125112,125113],{"class":872}," \u002Fdev",[68,125115,26704],{"class":102},[68,125117,31829],{"class":587},[68,125119,125120],{"class":872}," ttyUSB\n",[19,125122,125123],{},"运行结果如下：",[19,125125,125126],{},[38,125127],{"alt":63,"src":125128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125130,125131,125132,125135],{},"也可以多次插拔USB设备，会发现设备端口",[65,125133,125134],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125137,125138],{},[1890,125139,119537],{},[19,125141,125142],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[43,125144,125146],{"id":125145},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125148,125149,125151],{},[1890,125150,124865],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125153,125154,125156],{},[1890,125155,124871],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125158,125159],{},[1890,125160,124877],{},[19,125162,125163],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125165,125166],{},"调用如下指令查看第一台雷达的USB信息：",[58,125168,125170],{"className":118869,"code":125169,"language":118871,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[65,125171,125172,125192],{"__ignoreMap":63},[68,125173,125174,125177,125179,125182,125185,125187,125189],{"class":70,"line":71},[68,125175,125176],{"class":587},"udevadm",[68,125178,71403],{"class":872},[68,125180,125181],{"class":92}," --attribute-walk",[68,125183,125184],{"class":92}," --name=\u002Fdev\u002FttyUSB0",[68,125186,26704],{"class":102},[68,125188,31829],{"class":587},[68,125190,125191],{"class":872}," KERNELS\n",[68,125193,125194,125196,125198,125200,125203,125205,125207],{"class":70,"line":78},[68,125195,125176],{"class":587},[68,125197,71403],{"class":872},[68,125199,125181],{"class":92},[68,125201,125202],{"class":92}," --name=\u002Fdev\u002FttyACM0",[68,125204,26704],{"class":102},[68,125206,31829],{"class":587},[68,125208,125191],{"class":872},[19,125210,125211],{},[38,125212],{"alt":63,"src":125213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125215,125216],{},"调用如下指令查看第二台雷达的USB信息：",[58,125218,125220],{"className":118869,"code":125219,"language":118871,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[65,125221,125222],{"__ignoreMap":63},[68,125223,125224,125226,125228,125230,125233,125235,125237],{"class":70,"line":71},[68,125225,125176],{"class":587},[68,125227,71403],{"class":872},[68,125229,125181],{"class":92},[68,125231,125232],{"class":92}," --name=\u002Fdev\u002FttyUSB1",[68,125234,26704],{"class":102},[68,125236,31829],{"class":587},[68,125238,125191],{"class":872},[19,125240,125241,125242,125245,125246,125249,125250,125253],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[65,125243,125244],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[65,125247,125248],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1890,125251,125252],{},"唯一性标识","”。",[19,125255,124905],{},[19,125257,124908,125258,125260],{},[65,125259,124911],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[58,125262,125263],{"className":118869,"code":124915,"language":118871,"meta":63,"style":63},[65,125264,125265],{"__ignoreMap":63},[68,125266,125267,125269,125271],{"class":70,"line":71},[68,125268,26171],{"class":587},[68,125270,120156],{"class":872},[68,125272,124926],{"class":872},[58,125274,125276],{"className":118869,"code":125275,"language":118871,"meta":63,"style":63},"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",[65,125277,125278,125307],{"__ignoreMap":63},[68,125279,125280,125282,125284,125286,125289,125291,125294,125297,125299,125302,125304],{"class":70,"line":71},[68,125281,124939],{"class":85},[68,125283,869],{"class":102},[68,125285,124944],{"class":872},[68,125287,125288],{"class":85}," KERNELS",[68,125290,869],{"class":102},[68,125292,125293],{"class":872},"=\"1-1.3:1.0\",",[68,125295,125296],{"class":587}," MODE:",[68,125298,869],{"class":872},[68,125300,125301],{"class":587},"\"0777\"",[68,125303,2114],{"class":587},[68,125305,125306],{"class":872}," SYMLINK+=\"rplidar_front\"\n",[68,125308,125309,125311,125313,125315,125317,125319,125322,125324,125326,125328,125330],{"class":70,"line":78},[68,125310,124939],{"class":85},[68,125312,869],{"class":102},[68,125314,124944],{"class":872},[68,125316,125288],{"class":85},[68,125318,869],{"class":102},[68,125320,125321],{"class":872},"=\"1-1.4:1.0\",",[68,125323,125296],{"class":587},[68,125325,869],{"class":872},[68,125327,125301],{"class":587},[68,125329,2114],{"class":587},[68,125331,125332],{"class":872}," SYMLINK+=\"rplidar_back\"\n",[19,125334,125024],{},[19,125336,125027],{},[58,125338,125339],{"className":118869,"code":125030,"language":118871,"meta":63,"style":63},[65,125340,125341,125345,125355,125365,125369,125373,125383],{"__ignoreMap":63},[68,125342,125343],{"class":70,"line":71},[68,125344,125037],{"class":74},[68,125346,125347,125349,125351,125353],{"class":70,"line":78},[68,125348,26171],{"class":587},[68,125350,121621],{"class":872},[68,125352,125046],{"class":872},[68,125354,125049],{"class":872},[68,125356,125357,125359,125361,125363],{"class":70,"line":89},[68,125358,26171],{"class":587},[68,125360,121621],{"class":872},[68,125362,125046],{"class":872},[68,125364,125060],{"class":872},[68,125366,125367],{"class":70,"line":115},[68,125368,4000],{"emptyLinePlaceholder":1679},[68,125370,125371],{"class":70,"line":280},[68,125372,125069],{"class":74},[68,125374,125375,125377,125379,125381],{"class":70,"line":301},[68,125376,26171],{"class":587},[68,125378,125076],{"class":872},[68,125380,125079],{"class":872},[68,125382,125082],{"class":92},[68,125384,125385,125387,125389],{"class":70,"line":320},[68,125386,26171],{"class":587},[68,125388,125076],{"class":872},[68,125390,125091],{"class":872},[19,125392,125094],{},[19,125394,125097],{},[19,125396,125100,125397,125400],{},[65,125398,125399],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125402,125403],{},[38,125404],{"alt":63,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125407,125408],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125410,125411,125413],{},[1890,125412,119537],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[43,125415,125417],{"id":125416},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125419,125420],{},"（1）.查看所连接的主机USB接口的信息",[58,125422,125424],{"className":118869,"code":125423,"language":118871,"meta":63,"style":63},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[65,125425,125426,125456],{"__ignoreMap":63},[68,125427,125428,125430,125432,125435,125437,125439,125441,125443,125446,125449,125451,125454],{"class":70,"line":71},[68,125429,125176],{"class":587},[68,125431,71403],{"class":872},[68,125433,125434],{"class":92}," -a",[68,125436,30809],{"class":92},[68,125438,30015],{"class":85},[68,125440,125176],{"class":587},[68,125442,71403],{"class":872},[68,125444,125445],{"class":92}," -q",[68,125447,125448],{"class":872}," path",[68,125450,26710],{"class":92},[68,125452,125453],{"class":872}," \u002Fdev\u002FttyACM0",[68,125455,1757],{"class":85},[68,125457,125458,125460,125462,125464,125466,125468,125470,125472,125474,125476,125478,125481],{"class":70,"line":78},[68,125459,125176],{"class":587},[68,125461,71403],{"class":872},[68,125463,125434],{"class":92},[68,125465,30809],{"class":92},[68,125467,30015],{"class":85},[68,125469,125176],{"class":587},[68,125471,71403],{"class":872},[68,125473,125445],{"class":92},[68,125475,125448],{"class":872},[68,125477,26710],{"class":92},[68,125479,125480],{"class":872}," \u002Fdev\u002FttyUSB0",[68,125482,1757],{"class":85},[19,125484,125485],{},[38,125486],{"alt":63,"src":125487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125489,125490],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125492,124905],{},[19,125494,124908,125495,125260],{},[65,125496,124911],{},[58,125498,125499],{"className":118869,"code":124915,"language":118871,"meta":63,"style":63},[65,125500,125501],{"__ignoreMap":63},[68,125502,125503,125505,125507],{"class":70,"line":71},[68,125504,26171],{"class":587},[68,125506,120156],{"class":872},[68,125508,124926],{"class":872},[58,125510,125512],{"className":118869,"code":125511,"language":118871,"meta":63,"style":63},"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",[65,125513,125514,125542,125568],{"__ignoreMap":63},[68,125515,125516,125518,125520,125523,125525,125527,125529,125531,125534,125537,125539],{"class":70,"line":71},[68,125517,124939],{"class":85},[68,125519,869],{"class":102},[68,125521,125522],{"class":872},"=\"ttyACM*\",",[68,125524,124947],{"class":587},[68,125526,124950],{"class":872},[68,125528,124979],{"class":587},[68,125530,2114],{"class":587},[68,125532,125533],{"class":872}," ATTRS{idProduct}==\"55d4\",",[68,125535,125536],{"class":872}," ATTRS{serial}==\"0001\",",[68,125538,124961],{"class":872},[68,125540,125541],{"class":872}," SYMLINK+=\"ttyACM_MCU\"\n",[68,125543,125544,125546,125548,125550,125552,125554,125556,125558,125560,125563,125565],{"class":70,"line":78},[68,125545,124939],{"class":85},[68,125547,869],{"class":102},[68,125549,125522],{"class":872},[68,125551,124947],{"class":587},[68,125553,124950],{"class":872},[68,125555,124979],{"class":587},[68,125557,2114],{"class":587},[68,125559,125533],{"class":872},[68,125561,125562],{"class":872}," ATTRS{serial}==\"0002\",",[68,125564,124961],{"class":872},[68,125566,125567],{"class":872}," SYMLINK+=\"ttyACM_Lidar\"\n",[68,125569,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588],{"class":70,"line":89},[68,125571,124939],{"class":85},[68,125573,869],{"class":102},[68,125575,124944],{"class":872},[68,125577,124947],{"class":587},[68,125579,124950],{"class":872},[68,125581,124979],{"class":587},[68,125583,2114],{"class":587},[68,125585,124984],{"class":872},[68,125587,124961],{"class":872},[68,125589,125590],{"class":872}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125592,125024],{},[19,125594,125027],{},[58,125596,125597],{"className":118869,"code":125030,"language":118871,"meta":63,"style":63},[65,125598,125599,125603,125613,125623,125627,125631,125641],{"__ignoreMap":63},[68,125600,125601],{"class":70,"line":71},[68,125602,125037],{"class":74},[68,125604,125605,125607,125609,125611],{"class":70,"line":78},[68,125606,26171],{"class":587},[68,125608,121621],{"class":872},[68,125610,125046],{"class":872},[68,125612,125049],{"class":872},[68,125614,125615,125617,125619,125621],{"class":70,"line":89},[68,125616,26171],{"class":587},[68,125618,121621],{"class":872},[68,125620,125046],{"class":872},[68,125622,125060],{"class":872},[68,125624,125625],{"class":70,"line":115},[68,125626,4000],{"emptyLinePlaceholder":1679},[68,125628,125629],{"class":70,"line":280},[68,125630,125069],{"class":74},[68,125632,125633,125635,125637,125639],{"class":70,"line":301},[68,125634,26171],{"class":587},[68,125636,125076],{"class":872},[68,125638,125079],{"class":872},[68,125640,125082],{"class":92},[68,125642,125643,125645,125647],{"class":70,"line":320},[68,125644,26171],{"class":587},[68,125646,125076],{"class":872},[68,125648,125091],{"class":872},[19,125650,125651,125652],{},"再重新插拔设备即可，或者 ",[1890,125653,125654],{},"直接重启系统。",[19,125656,125097],{},[19,125658,125100,125659,125400],{},[65,125660,125399],{},[19,125662,125663],{},[38,125664],{"alt":63,"src":125665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125667,125408],{},[19,125669,125670,125672],{},[1890,125671,119537],{}," 一些设备可能没有串口号等。",[43,125674,125676],{"id":125675},"_744-其他注意事项","7.4.4 其他注意事项",[19,125678,125679,125680,125682,125683,125686,125687,20005,125690,125693,125694,125696],{},"并非所有的USB设备端口号都是",[65,125681,125134],{},"的格式，比如Arduino的端口号可能是",[65,125684,125685],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[65,125688,125689],{},"videon",[65,125691,125692],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[65,125695,125689],{},"端口，绑定时需要关联的也是该接口。",[19,125698,125699,125700,125703,125704,125707,125708,125710,125711,125714,125715,125718,125719,125722,125723,125722,125726,125722,125729,29978],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[65,125701,125702],{},"KERNEL==\"ttyUSB*\"","修改为",[65,125705,125706],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[65,125709,125702],{},"修改为类似于",[65,125712,125713],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[65,125716,125717],{},"video[0,2,4,6]","表示可以绑定的端口为",[65,125720,125721],{},"video0","或",[65,125724,125725],{},"video2",[65,125727,125728],{},"video4",[65,125730,125731],{},"video6",[14,125733,125735],{"id":125734},"_75-挂载内网网页","7.5 挂载内网网页",[19,125737,125738],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125740,125741],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125743,125744],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125746,125747,125748],{},"Termux 下载地址（F-Droid）：",[1974,125749,125750],{"href":125750,"rel":125751},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25459],[19,125753,125754],{},"首先打开app后，先更新软件缓存：",[58,125756,125758],{"className":118869,"code":125757,"language":118871,"meta":63,"style":63},"pkg update\n",[65,125759,125760],{"__ignoreMap":63},[68,125761,125762,125765],{"class":70,"line":71},[68,125763,125764],{"class":587},"pkg",[68,125766,27836],{"class":872},[19,125768,125769],{},"然后换源",[58,125771,125773],{"className":118869,"code":125772,"language":118871,"meta":63,"style":63},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[65,125774,125775],{"__ignoreMap":63},[68,125776,125777,125779,125782],{"class":70,"line":71},[68,125778,124647],{"class":587},[68,125780,125781],{"class":85}," $PREFIX",[68,125783,125784],{"class":872},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125786,125787],{},"将该文件内容替换为下面：",[58,125789,125791],{"className":118869,"code":125790,"language":118871,"meta":63,"style":63},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[65,125792,125793],{"__ignoreMap":63},[68,125794,125795,125798,125801,125804],{"class":70,"line":71},[68,125796,125797],{"class":587},"deb",[68,125799,125800],{"class":872}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[68,125802,125803],{"class":872}," stable",[68,125805,125806],{"class":872}," main\n",[168,125808,125809,125836],{},[51,125810,125811,125812,125814,125815],{},"如果你使用的是",[65,125813,124647],{},"编辑器：",[168,125816,125817,125824,125830],{},[51,125818,125819,125820,125823],{},"按 ",[65,125821,125822],{},"Ctrl+O"," 保存文件。",[51,125825,125819,125826,125829],{},[65,125827,125828],{},"Enter"," 确认文件名。",[51,125831,125819,125832,125835],{},[65,125833,125834],{},"Ctrl+X"," 退出编辑器。",[51,125837,125811,125838,125814,125841],{},[65,125839,125840],{},"vim",[168,125842,125843,125849],{},[51,125844,125819,125845,125848],{},[65,125846,125847],{},"Esc"," 退出编辑模式。",[51,125850,125851,125852,125854],{},"输入 ",[65,125853,120794],{}," 保存并退出。",[19,125856,125857],{},"接下来重新更新软件源：",[58,125859,125861],{"className":118869,"code":125860,"language":118871,"meta":63,"style":63},"pkg update && pkg upgrade\n",[65,125862,125863],{"__ignoreMap":63},[68,125864,125865,125867,125869,125871,125873],{"class":70,"line":71},[68,125866,125764],{"class":587},[68,125868,118920],{"class":872},[68,125870,27784],{"class":85},[68,125872,125764],{"class":587},[68,125874,118906],{"class":872},[19,125876,125877],{},"安装python：",[58,125879,125881],{"className":118869,"code":125880,"language":118871,"meta":63,"style":63},"pkg install python\n",[65,125882,125883],{"__ignoreMap":63},[68,125884,125885,125887,125889],{"class":70,"line":71},[68,125886,125764],{"class":587},[68,125888,25428],{"class":872},[68,125890,125891],{"class":872}," python\n",[19,125893,125894,28067],{},[1890,125895,125896],{},"通过Termux访问设备存储",[19,125898,125899],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[58,125901,125903],{"className":118869,"code":125902,"language":118871,"meta":63,"style":63},"termux-setup-storage\n",[65,125904,125905],{"__ignoreMap":63},[68,125906,125907],{"class":70,"line":71},[68,125908,125902],{"class":587},[48,125910,125911],{},[51,125912,125913,28067,125916],{},[1890,125914,125915],{},"进入HTML文件所在的目录",[48,125917,125918],{},[51,125919,125920,125921,125923],{},"使用",[65,125922,102850],{},"命令进入HTML文件所在的目录：",[58,125925,125927],{"className":118869,"code":125926,"language":118871,"meta":63,"style":63},"cd ~\u002Fyour_html_folder\n",[65,125928,125929],{"__ignoreMap":63},[68,125930,125931,125933],{"class":70,"line":71},[68,125932,102850],{"class":92},[68,125934,125935],{"class":872}," ~\u002Fyour_html_folder\n",[48,125937,125938],{"start":78},[51,125939,125940,28067,125943,125948,125965],{},[1890,125941,125942],{},"启动Python HTTP服务器",[48,125944,125945],{},[51,125946,125947],{},"运行以下命令启动一个简单的HTTP服务器：",[58,125949,125951],{"className":118869,"code":125950,"language":118871,"meta":63,"style":63},"python -m http.server 8000\n",[65,125952,125953],{"__ignoreMap":63},[68,125954,125955,125957,125959,125962],{"class":70,"line":71},[68,125956,31973],{"class":587},[68,125958,102456],{"class":92},[68,125960,125961],{"class":872}," http.server",[68,125963,125964],{"class":92}," 8000\n",[48,125966,125967],{"start":89},[51,125968,125969,125970,125973],{},"这会在端口",[65,125971,125972],{},"8000","上启动一个Web服务器。",[168,125975,125976],{},[51,125977,125978],{},"启动服务器后，Termux会显示日志信息，例如：",[58,125980,125982],{"className":122389,"code":125981,"language":122391,"meta":122392,"style":63},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[65,125983,125984],{"__ignoreMap":63},[68,125985,125986],{"class":70,"line":71},[68,125987,125981],{},[168,125989,125990],{},[51,125991,125992],{},"这表示服务器已成功启动。",[19,125994,125995],{},[1890,125996,125997],{},"在浏览器中访问HTML文件",[48,125999,126000],{},[51,126001,126002,28067,126005,126010],{},[1890,126003,126004],{},"在同一设备上访问",[48,126006,126007],{},[51,126008,126009],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[58,126011,126014],{"className":126012,"code":126013,"language":73243,"meta":63,"style":63},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[65,126015,126016],{"__ignoreMap":63},[68,126017,126018,126021],{"class":70,"line":71},[68,126019,126020],{"class":85},"http:",[68,126022,126023],{"class":74},"\u002F\u002Flocalhost:8000\n",[168,126025,126026],{},[51,126027,126028,126029,126032],{},"如果HTML文件中有",[65,126030,126031],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126034,126036],{"id":126035},"_76-linux重点知识","7.6 Linux重点知识",[43,126038,126040],{"id":126039},"_761-关于点的说明","7.6.1 关于点的说明",[19,126042,126043],{},[38,126044],{"alt":63,"src":126045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126047,126048],{},"一点本目录，两点上目录",[43,126050,126052],{"id":126051},"_762-目录","7.6.2 目录",[23593,126054,126056],{"id":126055},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126058,126059],{},[1890,126060,126061],{},"\u002Fboot:",[19,126063,126064],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126066,126067],{},[1890,126068,126069],{},"\u002Fetc:",[19,126071,126072],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126074,126075],{},[1890,126076,126077],{},"\u002Flib：",[19,126079,126080],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126082,126083],{},[1890,126084,126085],{},"\u002Fsys:",[19,126087,126088],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23593,126090,126092],{"id":126091},"_7622-指令集合","7.6.2.2 指令集合",[19,126094,126095],{},[1890,126096,126097],{},"\u002Fbin:",[19,126099,126100],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126102,126103],{},[1890,126104,126105],{},"\u002Fsbin:",[19,126107,126108],{},"只有系统管理员才能使用的程序和指令",[23593,126110,126112],{"id":126111},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126114,126115],{},[1890,126116,126117],{},"\u002Fdev:",[19,126119,126120],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126122,126123],{},[1890,126124,126125],{},"\u002Fmedia:",[19,126127,126128],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126130,126131],{},[1890,126132,126133],{},"\u002Fmnt:",[19,126135,126136],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23593,126138,126140],{"id":126139},"_7624-临时文件","7.6.2.4 临时文件",[19,126142,126143],{},[1890,126144,126145],{},"\u002Frun:",[19,126147,126148],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126150,126151],{},[1890,126152,126153],{},"\u002Flost+found:",[19,126155,126156],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126158,126159],{},[1890,126160,126161],{},"\u002Ftmp:",[19,126163,126164],{},"这个目录是用来存放一些临时文件的",[23593,126166,126168],{"id":126167},"_7625-账户","7.6.2.5 账户",[19,126170,126171],{},[1890,126172,126173],{},"\u002Froot：",[19,126175,126176],{},"系统管理员的用户主目录",[19,126178,126179,28067],{},[1890,126180,126181],{},"\u002Fhome",[19,126183,126184],{},"用户的主目录，以用户的账号命名的",[19,126186,126187,28067],{},[1890,126188,126189],{},"\u002Fusr",[19,126191,126192],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126194,126195],{},[1890,126196,126197],{},"\u002Fusr\u002Fbin：",[19,126199,126200],{},"系统用户使用的应用程序与指令",[19,126202,126203],{},[1890,126204,126205],{},"\u002Fusr\u002Fsbin：",[19,126207,126208],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126210,126211],{},[1890,126212,126213],{},"\u002Fusr\u002Fsrc：",[19,126215,126216],{},"内核源代码默认的放置目录",[23593,126218,126220],{"id":126219},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126222,126223],{},[1890,126224,126225],{},"\u002Fvar：",[19,126227,126228],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126230,126231],{},[1890,126232,126233],{},"\u002Fproc:",[19,126235,126236,126237,126240],{},"管理 ",[1890,126238,126239],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23593,126242,126244],{"id":126243},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126246,126247],{},[1890,126248,126249],{},"\u002Fopt:",[19,126251,126252],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126254,126255],{},[1890,126256,126257],{},"\u002Fsrv:",[19,126259,126260],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[43,126262,126264],{"id":126263},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126266,126267],{},[38,126268],{"alt":63,"src":126269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126271,126272],{},"windows-->linux:",[19,126274,126275],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126277,126278],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126280,126281],{},"linux传输文件到windows",[19,126283,126284],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[43,126286,126288],{"id":126287},"_764-易忘知识","7.6.4 易忘知识",[19,126290,126291],{},"操作系统内核查看",[58,126293,126294],{"className":118869,"code":122863,"language":118871,"meta":63,"style":63},[65,126295,126296],{"__ignoreMap":63},[68,126297,126298,126300],{"class":70,"line":71},[68,126299,71786],{"class":587},[68,126301,122872],{"class":92},[19,126303,126304],{},[38,126305],{"alt":63,"src":126306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126308,126309],{},[38,126310],{"alt":63,"src":126311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[58,126313,126315],{"className":118869,"code":126314,"language":118871,"meta":63,"style":63},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[65,126316,126317,126329],{"__ignoreMap":63},[68,126318,126319,126321,126324,126327],{"class":70,"line":71},[68,126320,123080],{"class":587},[68,126322,126323],{"class":872}," mvtest",[68,126325,126326],{"class":872}," mvtest2",[68,126328,4274],{"class":85},[68,126330,126331],{"class":70,"line":78},[68,126332,126333],{"class":587},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126335,126336],{},[38,126337],{"alt":63,"src":126338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126340,126341],{},[38,126342],{"alt":63,"src":126343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126345,126346,126347,126350],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[65,126348,126349],{},"du -a"," 可以快速查看磁盘使用细节。",[43,126352,126354],{"id":126353},"_765-vim","7.6.5 Vim",[19,126356,126357],{},[38,126358],{"alt":63,"src":126359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126361,126362],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126364,126365],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126367,126368],{},[1890,126369,126370],{},"1.命令模式：",[19,126372,126373],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126375,126376],{},"x 删除当前光标所在处的字符",[19,126378,126379],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126381,126382],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126384,126385],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126387,126388],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126390,126391],{},"dd 剪切当前行",[19,126393,126394],{},"yy 复制当前行",[19,126396,126397],{},"p 粘贴剪贴板内容到光标下方",[19,126399,126400],{},"P 粘贴剪贴板内容到光标上方",[19,126402,126403],{},"u 撤销上一次操作",[19,126405,126406],{},"ctrl+r 重做上一次操作",[19,126408,126409,126411],{},[2531,126410],{}," 保存文件",[19,126413,126414,126416],{},[2381,126415],{}," 退出Vim编辑器",[19,126418,126419,126421],{},[2381,126420],{},"! 强制退出Vim编辑器，不保存修改",[19,126423,126424],{},[1890,126425,126426],{},"2.输入模式：",[19,126428,126429],{},[38,126430],{"alt":63,"src":126431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126433,126434],{},[1890,126435,126436],{},"3.底线命令模式：",[19,126438,126439],{},[38,126440],{"alt":63,"src":126441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126443,126444],{},"按下esc可以退出底线命令模式",[43,126446,126448],{"id":126447},"_766-apt","7.6.6 apt",[19,126450,126451],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[43,126453,126455],{"id":126454},"_767-home与root的区别","7.6.7 home与root的区别",[19,126457,126458],{},[38,126459],{"alt":63,"src":126460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126462,126463],{},[38,126464],{"alt":63,"src":126465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126467,126468],{},[38,126469],{"alt":63,"src":126470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126472,126473],{},[38,126474],{"alt":63,"src":126475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[43,126477,126479],{"id":126478},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126481,126482],{},[1974,126483,126484],{"href":126484,"rel":126485},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25459],[48,126487,126488,126491],{},[51,126489,126490],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[51,126492,126493],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126495,126496],{},[38,126497],{"alt":63,"src":126498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126500,126501],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126503,126504],{},[38,126505],{"alt":63,"src":126506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[58,126508,126510],{"className":122389,"code":126509,"language":122391,"meta":122392,"style":63},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[65,126511,126512,126517],{"__ignoreMap":63},[68,126513,126514],{"class":70,"line":71},[68,126515,126516],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[68,126518,126519],{"class":70,"line":78},[68,126520,126521],{},".\u002Fpycharm.sh\n",[19,126523,126524],{},"3️⃣创建.desktop文件",[19,126526,126527],{},[1890,126528,126529],{},"原理：",[168,126531,126532,126542],{},[51,126533,126534,126535,126541],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1890,126536,126537,126540],{},[65,126538,126539],{},".desktop"," 文件"," 来识别应用。",[51,126543,126544,126546,126547],{},[65,126545,126539],{}," 文件相当于一个“应用注册表”，告诉系统：",[168,126548,126549,126552,126555,126558,126561],{},[51,126550,126551],{},"应用名字（Name）",[51,126553,126554],{},"图标（Icon）",[51,126556,126557],{},"执行命令（Exec）",[51,126559,126560],{},"分类（Categories）",[51,126562,126563],{},"是否需要终端（Terminal）",[58,126565,126567],{"className":122389,"code":126566,"language":122391,"meta":122392,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[65,126568,126569,126574],{"__ignoreMap":63},[68,126570,126571],{"class":70,"line":71},[68,126572,126573],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[68,126575,126576],{"class":70,"line":78},[68,126577,126578],{},"nano pycharm.desktop\n",[19,126580,126581],{},"nano是一个命令行下的编辑器，也可以使用vim",[58,126583,126585],{"className":122389,"code":126584,"language":122391,"meta":122392,"style":63},"[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",[65,126586,126587,126592,126597,126602,126607,126612,126617,126622,126627,126632],{"__ignoreMap":63},[68,126588,126589],{"class":70,"line":71},[68,126590,126591],{},"[Desktop Entry]\n",[68,126593,126594],{"class":70,"line":78},[68,126595,126596],{},"Version=1.0\n",[68,126598,126599],{"class":70,"line":89},[68,126600,126601],{},"Type=Application\n",[68,126603,126604],{"class":70,"line":115},[68,126605,126606],{},"Name=PyCharm\n",[68,126608,126609],{"class":70,"line":280},[68,126610,126611],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[68,126613,126614],{"class":70,"line":301},[68,126615,126616],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[68,126618,126619],{"class":70,"line":320},[68,126620,126621],{},"Comment=JetBrains PyCharm IDE\n",[68,126623,126624],{"class":70,"line":2915},[68,126625,126626],{},"Categories=Development;IDE;\n",[68,126628,126629],{"class":70,"line":2921},[68,126630,126631],{},"Terminal=false\n",[68,126633,126634],{"class":70,"line":2933},[68,126635,126636],{},"StartupWMClass=jetbrains-pycharm\n",[168,126638,126639,126645,126651,126657],{},[51,126640,126641,126644],{},[65,126642,126643],{},"Exec"," → 点击图标时执行的命令",[51,126646,126647,126650],{},[65,126648,126649],{},"Icon"," → 显示在菜单和桌面上的图标",[51,126652,126653,126656],{},[65,126654,126655],{},"Terminal=false"," → 不打开终端",[51,126658,126659,126662],{},[65,126660,126661],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126664,126665,126666],"blockquote",{},[19,126667,126668,126669,126671,126672],{},"可以理解成 ",[65,126670,126539],{}," 文件是 Linux 的 ",[1890,126673,126674],{},"快捷方式配置文件",[19,126676,126677],{},"4️⃣设置可执行权限",[58,126679,126681],{"className":122389,"code":126680,"language":122391,"meta":122392,"style":63},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[65,126682,126683],{"__ignoreMap":63},[68,126684,126685],{"class":70,"line":71},[68,126686,126680],{},[19,126688,126689],{},"5️⃣桌面图标启动的话如下：",[58,126691,126693],{"className":122389,"code":126692,"language":122391,"meta":122392,"style":63},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[65,126694,126695,126700],{"__ignoreMap":63},[68,126696,126697],{"class":70,"line":71},[68,126698,126699],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[68,126701,126702],{"class":70,"line":78},[68,126703,126704],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[48,126706,126707],{"start":89},[51,126708,126709],{},"下载Appimage文件实现软件的安装",[19,126711,126712],{},"1️⃣先下载appimage",[19,126714,126715],{},[1974,126716,126717],{"href":126717,"rel":126718},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25459],[19,126720,126721],{},[38,126722],{"alt":63,"src":126723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126725,126726],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126728,126729],{},[38,126730],{"alt":63,"src":126731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126733,126734],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126736,126737],{},[38,126738],{"alt":63,"src":126739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126741,126742],{},[38,126743],{"alt":63,"src":126744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126746,126747,126748,126751],{},"3️⃣给他们放在",[65,126749,126750],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126753,126754],{},"4️⃣给软件执行权限",[58,126756,126758],{"className":122389,"code":126757,"language":122391,"meta":122392,"style":63},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[65,126759,126760,126765],{"__ignoreMap":63},[68,126761,126762],{"class":70,"line":71},[68,126763,126764],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[68,126766,126767],{"class":70,"line":78},[68,126768,126769],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126771,126772],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[58,126774,126776],{"className":118869,"code":126775,"language":118871,"meta":63,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[65,126777,126778,126785,126792,126798],{"__ignoreMap":63},[68,126779,126780,126782],{"class":70,"line":71},[68,126781,102850],{"class":92},[68,126783,126784],{"class":872}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[68,126786,126787,126789],{"class":70,"line":78},[68,126788,102857],{"class":587},[68,126790,126791],{"class":872}," .\u002Fqqmusic.desktop\n",[68,126793,126794,126796],{"class":70,"line":89},[68,126795,125840],{"class":587},[68,126797,126791],{"class":872},[68,126799,126800,126802,126804,126806],{"class":70,"line":115},[68,126801,26171],{"class":587},[68,126803,26174],{"class":872},[68,126805,124706],{"class":872},[68,126807,126791],{"class":872},[19,126809,126810,126812],{},[65,126811,102857],{},"：一个 Linux 命令，主要功能是：",[168,126814,126815,126818],{},[51,126816,126817],{},"如果文件不存在，就创建一个新的空文件",[51,126819,126820],{},"如果文件已存在，就更新该文件的最后修改时间",[58,126822,126824],{"className":122389,"code":126823,"language":122391,"meta":122392,"style":63},"[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",[65,126825,126826,126830,126835,126840,126845,126849,126854],{"__ignoreMap":63},[68,126827,126828],{"class":70,"line":71},[68,126829,126591],{},[68,126831,126832],{"class":70,"line":78},[68,126833,126834],{},"Name=QQ音乐\n",[68,126836,126837],{"class":70,"line":89},[68,126838,126839],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[68,126841,126842],{"class":70,"line":115},[68,126843,126844],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[68,126846,126847],{"class":70,"line":280},[68,126848,126601],{},[68,126850,126851],{"class":70,"line":301},[68,126852,126853],{},"Categories=Audio;Music;Player;\n",[68,126855,126856],{"class":70,"line":320},[68,126857,126858],{},"Comment=QQ Music Client for Linux\n",[19,126860,126861],{},"将文件复制进去",[19,126863,126864],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126866,126867],{},[38,126868],{"alt":63,"src":126869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126871,126872],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126874,126875],{},[38,126876],{"alt":63,"src":126877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126879,126880,126881,126884,126885,126888],{},"如果你用的不是KDE，那么也可以直接修改",[65,126882,126883],{},"qqmuic.desktop","：在exec的末尾加上",[65,126886,126887],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[58,126890,126892],{"className":122389,"code":126891,"language":122391,"meta":122392,"style":63},"[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",[65,126893,126894,126898,126902,126907,126911,126915,126919],{"__ignoreMap":63},[68,126895,126896],{"class":70,"line":71},[68,126897,126591],{},[68,126899,126900],{"class":70,"line":78},[68,126901,126834],{},[68,126903,126904],{"class":70,"line":89},[68,126905,126906],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[68,126908,126909],{"class":70,"line":115},[68,126910,126844],{},[68,126912,126913],{"class":70,"line":280},[68,126914,126601],{},[68,126916,126917],{"class":70,"line":301},[68,126918,126853],{},[68,126920,126921],{"class":70,"line":320},[68,126922,126858],{},[19,126924,126925],{},[38,126926],{"alt":63,"src":126927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126929,126930],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[58,126932,126934],{"className":122389,"code":126933,"language":122391,"meta":122392,"style":63},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[65,126935,126936],{"__ignoreMap":63},[68,126937,126938],{"class":70,"line":71},[68,126939,126933],{},[48,126941,126942],{"start":115},[51,126943,126944],{},"去Flathub上安装软件",[19,126946,126947],{},[1974,126948,126949],{"href":126949,"rel":126950},"https:\u002F\u002Fflathub.org\u002F",[25459],[19,126952,126953],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126955,126956],{},[38,126957],{"alt":63,"src":126958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[58,126960,126962],{"className":122389,"code":126961,"language":122391,"meta":122392,"style":63},"flatpak install flathub com.obsproject.Studio\n",[65,126963,126964],{"__ignoreMap":63},[68,126965,126966],{"class":70,"line":71},[68,126967,126961],{},[19,126969,126970],{},[38,126971],{"alt":63,"src":126972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126974,126975],{},"2️⃣运行软件",[19,126977,126978],{},"a.官方方式：",[19,126980,126981],{},[38,126982],{"alt":63,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[58,126985,126986],{"className":122389,"code":126961,"language":122391,"meta":122392,"style":63},[65,126987,126988],{"__ignoreMap":63},[68,126989,126990],{"class":70,"line":71},[68,126991,126961],{},[19,126993,126994],{},"b.当普通软件运行：",[19,126996,126997],{},[38,126998],{"alt":63,"src":126999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127001,127002],{},[38,127003],{"alt":63,"src":127004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1652,127006,127007],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-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":63,"searchDepth":78,"depth":78,"links":127009},[127010,127011,127016,127017,127023,127024],{"id":123742,"depth":78,"text":123743},{"id":124084,"depth":78,"text":124085,"children":127012},[127013,127014,127015],{"id":124088,"depth":89,"text":124089},{"id":124155,"depth":89,"text":124156},{"id":124416,"depth":89,"text":124417},{"id":124569,"depth":78,"text":124570},{"id":124807,"depth":78,"text":124808,"children":127018},[127019,127020,127021,127022],{"id":124859,"depth":89,"text":124860},{"id":125145,"depth":89,"text":125146},{"id":125416,"depth":89,"text":125417},{"id":125675,"depth":89,"text":125676},{"id":125734,"depth":78,"text":125735},{"id":126035,"depth":78,"text":126036,"children":127025},[127026,127027,127028,127029,127030,127031,127032,127033],{"id":126039,"depth":89,"text":126040},{"id":126051,"depth":89,"text":126052},{"id":126263,"depth":89,"text":126264},{"id":126287,"depth":89,"text":126288},{"id":126353,"depth":89,"text":126354},{"id":126447,"depth":89,"text":126448},{"id":126454,"depth":89,"text":126455},{"id":126478,"depth":89,"text":126479},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123734,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127040,"title":127041,"body":127042,"description":1676,"extension":1677,"meta":127046,"navigation":1679,"path":127047,"seo":127048,"stem":127049,"__hash__":127050},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127043,"toc":127044},[],{"title":63,"searchDepth":78,"depth":78,"links":127045},[],{"category":31856},"\u002Fwiki\u002F2025-01-27-linux",{"title":127041,"description":1676},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127052,"title":127053,"body":127054,"description":127058,"extension":1677,"meta":127449,"navigation":1679,"path":127450,"seo":127451,"stem":127452,"__hash__":127453},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127055,"toc":127447},[127056,127059,127063,127080,127083,127136,127140,127142,127182,127191,127195,127198,127439,127444],[19,127057,127058],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127060,127062],{"id":127061},"_1ubuntu环境配置","1.Ubuntu环境配置",[48,127064,127065,127068,127071,127074,127077],{},[51,127066,127067],{},"ubuntu环境换源",[51,127069,127070],{},"安装cuda",[51,127072,127073],{},"安装miniconda",[51,127075,127076],{},"安装pytorch",[51,127078,127079],{},"安装genesis",[19,127081,127082],{},"参考链接：",[58,127084,127086],{"className":25416,"code":127085,"language":25418,"meta":63,"style":63},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[65,127087,127088],{"__ignoreMap":63},[68,127089,127090,127093,127096,127099,127101,127104,127107,127109,127112,127115,127117,127120,127123,127125,127128,127131,127133],{"class":70,"line":71},[68,127091,127092],{"class":587},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[68,127094,127095],{"class":872},"=blogdetail",[68,127097,127098],{"class":85},"&sharetype",[68,127100,869],{"class":102},[68,127102,127103],{"class":872},"blogdetail",[68,127105,127106],{"class":85},"&sharerId",[68,127108,869],{"class":102},[68,127110,127111],{"class":872},"144728092",[68,127113,127114],{"class":85},"&sharerefer",[68,127116,869],{"class":102},[68,127118,127119],{"class":872},"PC",[68,127121,127122],{"class":85},"&sharesource",[68,127124,869],{"class":102},[68,127126,127127],{"class":872},"qq_69379513",[68,127129,127130],{"class":85},"&sharefrom",[68,127132,869],{"class":102},[68,127134,127135],{"class":872},"from_link\n",[10,127137,127139],{"id":127138},"_2genesis-报错issue","2.Genesis 报错issue",[19,127141,127082],{},[58,127143,127144],{"className":25416,"code":127085,"language":25418,"meta":63,"style":63},[65,127145,127146],{"__ignoreMap":63},[68,127147,127148,127150,127152,127154,127156,127158,127160,127162,127164,127166,127168,127170,127172,127174,127176,127178,127180],{"class":70,"line":71},[68,127149,127092],{"class":587},[68,127151,127095],{"class":872},[68,127153,127098],{"class":85},[68,127155,869],{"class":102},[68,127157,127103],{"class":872},[68,127159,127106],{"class":85},[68,127161,869],{"class":102},[68,127163,127111],{"class":872},[68,127165,127114],{"class":85},[68,127167,869],{"class":102},[68,127169,127119],{"class":872},[68,127171,127122],{"class":85},[68,127173,869],{"class":102},[68,127175,127127],{"class":872},[68,127177,127130],{"class":85},[68,127179,869],{"class":102},[68,127181,127135],{"class":872},[58,127183,127185],{"className":25416,"code":127184,"language":25418,"meta":63,"style":63},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[65,127186,127187],{"__ignoreMap":63},[68,127188,127189],{"class":70,"line":71},[68,127190,127184],{"class":587},[10,127192,127194],{"id":127193},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127196,127197],{},"hello_robot.py",[58,127199,127201],{"className":31971,"code":127200,"language":31973,"meta":63,"style":63},"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",[65,127202,127203,127209,127224,127228,127240,127252,127256,127269,127273,127292,127302,127312,127326,127330,127334,127339,127343,127353,127360,127374,127381,127391,127396,127400,127418,127423,127427,127434],{"__ignoreMap":63},[68,127204,127205,127207],{"class":70,"line":71},[68,127206,31985],{"class":102},[68,127208,46898],{"class":85},[68,127210,127211,127214,127217,127219,127221],{"class":70,"line":78},[68,127212,127213],{"class":85},"os.environ[",[68,127215,127216],{"class":872},"'PYOPENGL_PLATFORM'",[68,127218,6042],{"class":85},[68,127220,869],{"class":102},[68,127222,127223],{"class":872}," 'glx'\n",[68,127225,127226],{"class":70,"line":89},[68,127227,4000],{"emptyLinePlaceholder":1679},[68,127229,127230,127232,127235,127237],{"class":70,"line":115},[68,127231,31985],{"class":102},[68,127233,127234],{"class":85}," genesis ",[68,127236,32976],{"class":102},[68,127238,127239],{"class":85}," gs\n",[68,127241,127242,127244,127247,127249],{"class":70,"line":280},[68,127243,32330],{"class":102},[68,127245,127246],{"class":85}," pynput ",[68,127248,31985],{"class":102},[68,127250,127251],{"class":85}," keyboard\n",[68,127253,127254],{"class":70,"line":301},[68,127255,4000],{"emptyLinePlaceholder":1679},[68,127257,127258,127261,127264,127266],{"class":70,"line":320},[68,127259,127260],{"class":85},"gs.init(",[68,127262,127263],{"class":6815},"backend",[68,127265,869],{"class":102},[68,127267,127268],{"class":85},"gs.gpu)\n",[68,127270,127271],{"class":70,"line":2915},[68,127272,4000],{"emptyLinePlaceholder":1679},[68,127274,127275,127278,127280,127283,127286,127288,127290],{"class":70,"line":2921},[68,127276,127277],{"class":85},"scene ",[68,127279,869],{"class":102},[68,127281,127282],{"class":85}," gs.Scene(",[68,127284,127285],{"class":6815},"show_viewer",[68,127287,869],{"class":102},[68,127289,33069],{"class":92},[68,127291,1757],{"class":85},[68,127293,127294,127297,127299],{"class":70,"line":2933},[68,127295,127296],{"class":85},"plane ",[68,127298,869],{"class":102},[68,127300,127301],{"class":85}," scene.add_entity(gs.morphs.Plane())\n",[68,127303,127304,127307,127309],{"class":70,"line":3214},[68,127305,127306],{"class":85},"franka ",[68,127308,869],{"class":102},[68,127310,127311],{"class":85}," scene.add_entity(\n",[68,127313,127314,127317,127319,127321,127324],{"class":70,"line":3219},[68,127315,127316],{"class":85},"    gs.morphs.MJCF(",[68,127318,46947],{"class":6815},[68,127320,869],{"class":102},[68,127322,127323],{"class":872},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[68,127325,39640],{"class":85},[68,127327,127328],{"class":70,"line":3225},[68,127329,1757],{"class":85},[68,127331,127332],{"class":70,"line":3230},[68,127333,4000],{"emptyLinePlaceholder":1679},[68,127335,127336],{"class":70,"line":3244},[68,127337,127338],{"class":85},"scene.build()\n",[68,127340,127341],{"class":70,"line":3249},[68,127342,4000],{"emptyLinePlaceholder":1679},[68,127344,127345,127347,127350],{"class":70,"line":3255},[68,127346,33540],{"class":102},[68,127348,127349],{"class":587}," on_press",[68,127351,127352],{"class":85},"(key):\n",[68,127354,127355,127358],{"class":70,"line":3276},[68,127356,127357],{"class":102},"    try",[68,127359,5338],{"class":85},[68,127361,127362,127364,127367,127369,127372],{"class":70,"line":3281},[68,127363,4097],{"class":102},[68,127365,127366],{"class":85}," key.char ",[68,127368,4548],{"class":102},[68,127370,127371],{"class":872}," 'q'",[68,127373,5338],{"class":85},[68,127375,127376,127378],{"class":70,"line":3295},[68,127377,17327],{"class":102},[68,127379,127380],{"class":92}," False\n",[68,127382,127383,127386,127389],{"class":70,"line":3300},[68,127384,127385],{"class":102},"    except",[68,127387,127388],{"class":92}," AttributeError",[68,127390,5338],{"class":85},[68,127392,127393],{"class":70,"line":3329},[68,127394,127395],{"class":102},"        pass\n",[68,127397,127398],{"class":70,"line":3334},[68,127399,4000],{"emptyLinePlaceholder":1679},[68,127401,127402,127405,127407,127410,127413,127415],{"class":70,"line":3351},[68,127403,127404],{"class":85},"listener ",[68,127406,869],{"class":102},[68,127408,127409],{"class":85}," keyboard.Listener(",[68,127411,127412],{"class":6815},"on_press",[68,127414,869],{"class":102},[68,127416,127417],{"class":85},"on_press)\n",[68,127419,127420],{"class":70,"line":3356},[68,127421,127422],{"class":85},"listener.start()\n",[68,127424,127425],{"class":70,"line":3361},[68,127426,4000],{"emptyLinePlaceholder":1679},[68,127428,127429,127431],{"class":70,"line":3366},[68,127430,110236],{"class":102},[68,127432,127433],{"class":85}," listener.running:\n",[68,127435,127436],{"class":70,"line":3380},[68,127437,127438],{"class":85},"    scene.step()\n",[19,127440,127441],{},[38,127442],{"alt":63,"src":127443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1652,127445,127446],{},"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":63,"searchDepth":78,"depth":78,"links":127448},[],{"category":24973},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127053,"description":127058},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127455,"title":127456,"body":127457,"description":1676,"extension":1677,"meta":127472,"navigation":1679,"path":127473,"seo":127474,"stem":127475,"__hash__":127476},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127458,"toc":127469},[127459,127462,127466],[10,127460,127456],{"id":127461},"_1-基础知识",[14,127463,127465],{"id":127464},"_11-js的组成","1.1 js的组成",[19,127467,127468],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":63,"searchDepth":78,"depth":78,"links":127470},[127471],{"id":127464,"depth":78,"text":127465},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127456,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127478,"title":127479,"body":127480,"description":1676,"extension":1677,"meta":127619,"navigation":1679,"path":127620,"seo":127621,"stem":127622,"__hash__":127623},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127481,"toc":127607},[127482,127485,127489,127492,127496,127506,127510,127513,127516,127519,127523,127530,127536,127540,127546,127557,127561,127564,127568,127571,127575,127578,127582,127585,127589,127592,127595,127598,127601,127604],[10,127483,127479],{"id":127484},"_2-vscode必备内容",[14,127486,127488],{"id":127487},"_21-标签分类","2.1 标签分类",[19,127490,127491],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127493,127495],{"id":127494},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127497,127498,127499,127501,127502,127505],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[65,127500,1962],{}," 然后按 ",[65,127503,127504],{},"Tab","，快速自动生成基本结构。",[14,127507,127509],{"id":127508},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127511,127512],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127514,127515],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127517,127518],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127520,127522],{"id":127521},"_24-视图缩放","2.4 视图缩放",[19,127524,127525,127526,127529],{},"缩放视图 ",[65,127527,127528],{},"ctrl+"," 可实现代码增大。",[19,127531,127532,127535],{},[65,127533,127534],{},"ctrl-"," 可实现代码减小。",[14,127537,127539],{"id":127538},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127541,127542,127543,29978],{},"VSCode 新建文件快捷键为 ",[65,127544,127545],{},"ctrl+N",[19,127547,127548,127549,127552,127553,127556],{},"保存快捷键为 ",[65,127550,127551],{},"ctrl+S","，将文本保存为 ",[65,127554,127555],{},".html"," 文件。",[14,127558,127560],{"id":127559},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127562,127563],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127565,127567],{"id":127566},"_27-vscode-icons","2.7 vscode-icons",[19,127569,127570],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127572,127574],{"id":127573},"_28-easy-less","2.8 Easy LESS",[19,127576,127577],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127579,127581],{"id":127580},"_29-会了吧插件","2.9 会了吧插件",[19,127583,127584],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127586,127588],{"id":127587},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127590,127591],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127593,127594],{},"②选定多个相同的单词:ctrl+D",[19,127596,127597],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127599,127600],{},"④全局替换某些单词:ctrl+h",[19,127602,127603],{},"⑤快速定位到某一行:ctrl+g",[19,127605,127606],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":63,"searchDepth":78,"depth":78,"links":127608},[127609,127610,127611,127612,127613,127614,127615,127616,127617,127618],{"id":127487,"depth":78,"text":127488},{"id":127494,"depth":78,"text":127495},{"id":127508,"depth":78,"text":127509},{"id":127521,"depth":78,"text":127522},{"id":127538,"depth":78,"text":127539},{"id":127559,"depth":78,"text":127560},{"id":127566,"depth":78,"text":127567},{"id":127573,"depth":78,"text":127574},{"id":127580,"depth":78,"text":127581},{"id":127587,"depth":78,"text":127588},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127479,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127625,"title":127626,"body":127627,"description":1676,"extension":1677,"meta":127786,"navigation":1679,"path":127787,"seo":127788,"stem":127789,"__hash__":127790},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127628,"toc":127778},[127629,127632,127636,127646,127652,127658,127662,127671,127675,127680,127683,127686,127690,127693,127703,127712,127721,127730,127740,127747,127752,127757,127770],[10,127630,127626],{"id":127631},"_3-html文本与容器标签",[14,127633,127635],{"id":127634},"_31-标题标签","3.1 标题标签",[19,127637,127638,127641,127642,127645],{},[65,127639,127640],{},"\u003Ch1>","我是一级标签",[65,127643,127644],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127647,127648,127641,127650],{},[65,127649,127640],{},[65,127651,127644],{},[19,127653,124908,127654,127657],{},[65,127655,127656],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127659,127661],{"id":127660},"_32-段落标签","3.2 段落标签",[19,127663,127664,127667,127668],{},[65,127665,127666],{},"\u003Cp>","....",[65,127669,127670],{},"\u003C\u002Fp>",[14,127672,127674],{"id":127673},"_33-换行标签","3.3 换行标签",[19,127676,127677],{},[65,127678,127679],{},"\u003Cbr \u002F>",[19,127681,127682],{},"具有强制换行的作用",[19,127684,127685],{},"单标签",[14,127687,127689],{"id":127688},"_34-文本格式化标签","3.4 文本格式化标签",[19,127691,127692],{},"提供粗体、斜体和下划线等效果",[19,127694,127695,127696,84116,127699,127702],{},"加粗：",[65,127697,127698],{},"\u003Cstrong>...\u003C\u002Fstrong>",[65,127700,127701],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127704,127705,127706,84116,127709,127702],{},"斜体：",[65,127707,127708],{},"\u003Cem>...\u003C\u002Fem>",[65,127710,127711],{},"\u003Ci>...\u003C\u002Fi>",[19,127713,127714,127715,84116,127718,127702],{},"删除线：",[65,127716,127717],{},"\u003Cdel>...\u003C\u002Fdel>",[65,127719,127720],{},"\u003Cs>...\u003C\u002Fs>",[19,127722,127723,127724,84116,127727,127702],{},"下划线：",[65,127725,127726],{},"\u003Cins>...\u003C\u002Fins>",[65,127728,127729],{},"\u003Cu>...\u003C\u002Fu>",[14,127731,127733,127734,20005,127737,104267],{"id":127732},"_35-div和span标签","3.5 ",[65,127735,127736],{},"\u003Cdiv>",[65,127738,127739],{},"\u003Cspan>",[19,127741,127742,102592,127744,127746],{},[65,127743,127736],{},[65,127745,127739],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127748,127749],{},[65,127750,127751],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127753,127754],{},[65,127755,127756],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127758,127759,127760,127762,127763,127765,127766,127769],{},"两者特点：①",[65,127761,127736],{}," 标签用来布局，但一行通常只放一个 ",[65,127764,127736],{},"。可以理解为一个大盒子，独占一行，在 ",[65,127767,127768],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127771,78827,127772,127774,127775,127777],{},[65,127773,127739],{}," 标签也可用于布局，一行可以放多个 ",[65,127776,127739],{},"，可理解为小盒子。",{"title":63,"searchDepth":78,"depth":78,"links":127779},[127780,127781,127782,127783,127784],{"id":127634,"depth":78,"text":127635},{"id":127660,"depth":78,"text":127661},{"id":127673,"depth":78,"text":127674},{"id":127688,"depth":78,"text":127689},{"id":127732,"depth":78,"text":127785},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127626,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127792,"title":127793,"body":127794,"description":1676,"extension":1677,"meta":127990,"navigation":1679,"path":127991,"seo":127992,"stem":127993,"__hash__":127994},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127795,"toc":127982},[127796,127799,127803,127806,127812,127819,127825,127831,127834,127837,127840,127843,127846,127849,127852,127856,127859,127862,127865,127871,127877,127883,127890,127894,127900,127906,127909,127912,127918,127924,127930,127933,127936,127940,127943,127953,127959,127963,127972,127976,127979],[10,127797,127793],{"id":127798},"_4-html图像与链接",[14,127800,127802],{"id":127801},"_41-图像标签","4.1 图像标签",[19,127804,127805],{},"（1）标签",[19,127807,127808,127811],{},[65,127809,127810],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127813,127814,127815,127818],{},"src是",[65,127816,127817],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127820,127821,127822],{},"alt:文本，替换文本。图像不能显示的文字 ",[65,127823,127824],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127826,127827,127828],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[65,127829,127830],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127832,127833],{},"width:像素，设置图像的宽度",[19,127835,127836],{},"height:像素，设置图像的高度",[19,127838,127839],{},"border：像素，设置图像的边框粗细",[19,127841,127842],{},"（2）图像标签属性的注意点：",[19,127844,127845],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127847,127848],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127850,127851],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127853,127855],{"id":127854},"_42-路径注意要点","4.2 路径注意要点：",[19,127857,127858],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127860,127861],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127863,127864],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127866,127867,127868],{},"①同一级路径：图像文件位于HTML文件同一级，如",[65,127869,127870],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127872,127873,127874],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[65,127875,127876],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127878,127879,127880],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[65,127881,127882],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127884,127885,127886,1987],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[1974,127887,127888],{"href":127888,"rel":127889},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25459],[14,127891,127893],{"id":127892},"_43-超链接标签","4.3 超链接标签",[19,127895,127896,127899],{},[65,127897,127898],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127901,127902,127903],{},"①语法格式：",[65,127904,127905],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127907,127908],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127910,127911],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127913,127914,127915],{},"③链接分类：外部链接：",[65,127916,127917],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127919,127920,127921],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[65,127922,127923],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127925,127926,127927],{},"空链接：如果当时没有确定链接目标时，",[65,127928,127929],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127931,127932],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127934,127935],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127937,127939],{"id":127938},"_44-锚点链接","4.4 锚点链接",[19,127941,127942],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127944,127945,127946,127949,127950],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[65,127947,127948],{},"\u003Ca href=\"#two\">","第二级",[65,127951,127952],{},"\u003C\u002Fa>",[19,127954,127955,127956],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[65,127957,127958],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127960,127962],{"id":127961},"_45-注释标签","4.5 注释标签",[19,127964,127965,127968,127969],{},[65,127966,127967],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[65,127970,127971],{},"ctrl+\u002F",[14,127973,127975],{"id":127974},"_46-特殊字符","4.6 特殊字符",[19,127977,127978],{},"可以实现添加多个空格",[38,127980],{"style":40,"src":127981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":63,"searchDepth":78,"depth":78,"links":127983},[127984,127985,127986,127987,127988,127989],{"id":127801,"depth":78,"text":127802},{"id":127854,"depth":78,"text":127855},{"id":127892,"depth":78,"text":127893},{"id":127938,"depth":78,"text":127939},{"id":127961,"depth":78,"text":127962},{"id":127974,"depth":78,"text":127975},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127793,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127996,"title":127997,"body":127998,"description":1676,"extension":1677,"meta":128289,"navigation":1679,"path":128290,"seo":128291,"stem":128292,"__hash__":128293},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127999,"toc":128280},[128000,128003,128007,128010,128013,128016,128019,128022,128025,128028,128031,128034,128054,128060,128064,128067,128070,128073,128076,128079,128082,128086,128089,128092,128095,128098,128111,128116,128119,128122,128135,128138,128141,128144,128147,128150,128154,128157,128164,128167,128170,128173,128176,128179,128185,128188,128191,128197,128200,128203,128206,128212,128215,128218,128232,128239,128242,128245,128252,128261,128264,128267,128270,128274,128277],[10,128001,127997],{"id":128002},"_5-html表格列表与表单",[14,128004,128006],{"id":128005},"_51-表格标签","5.1 表格标签",[19,128008,128009],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128011,128012],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128014,128015],{},"②表格基本语法：",[38,128017],{"style":40,"src":128018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128020,128021],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[38,128023],{"style":40,"src":128024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128026,128027],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[38,128029],{"style":40,"src":128030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128032,128033],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128035,128036,128039,128040,128042,128043,128046,128047,128049,128050,128053],{},[65,128037,128038],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[65,128041,128038],{},"内部必须拥有",[65,128044,128045],{},"\u003Ctr>","标签，一般位于第一行，",[65,128048,128038],{},"比",[65,128051,128052],{},"\u003Cth>","范围广",[19,128055,128056,128059],{},[65,128057,128058],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128061,128063],{"id":128062},"_52-合并单元格","5.2 合并单元格",[19,128065,128066],{},"（1）合并单元格方式：",[19,128068,128069],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128071,128072],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128074,128075],{},"（2）目标单元格：",[19,128077,128078],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128080,128081],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128083,128085],{"id":128084},"_53-列表标签","5.3 列表标签",[19,128087,128088],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128090,128091],{},"①无序列表：",[38,128093],{"style":40,"src":128094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128096,128097],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128099,128100,128103,128104,128107,128108,128110],{},[65,128101,128102],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[65,128105,128106],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[65,128109,128102],{},"中输入其他标签或文字是不对的",[19,128112,128113,128115],{},[65,128114,128106],{},"之间相当于一个容器，可以容纳所有元素",[19,128117,128118],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128120,128121],{},"在css中去除前边的小圆点采用如下代码:",[58,128123,128125],{"className":60,"code":128124,"language":62,"meta":63,"style":63},"list-style: none;\n",[65,128126,128127],{"__ignoreMap":63},[68,128128,128129,128132],{"class":70,"line":71},[68,128130,128131],{"class":81},"list-style",[68,128133,128134],{"class":85},": none;\n",[19,128136,128137],{},"②有序列表：",[38,128139],{"style":40,"src":128140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128142,128143],{},"③自定义列表：",[38,128145],{"style":40,"src":128146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[38,128148],{"style":40,"src":128149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128151,128153],{"id":128152},"_54-表单标签","5.4 表单标签",[19,128155,128156],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128158,128159,128160,128163],{},"（1）表单域：包含单元素的区域，",[65,128161,128162],{},"\u003Cform>","标签可以实现信息的收集和传递。",[38,128165],{"style":40,"src":128166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128168,128169],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128171,128172],{},"表单元素提交必须有name属性",[19,128174,128175],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128177,128178],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128180,78804,128181,128184],{},[65,128182,128183],{},"\u003Cinput>","输入表单元素",[38,128186],{"style":40,"src":128187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[38,128189],{"style":40,"src":128190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128192,128193,128194],{},"单选按钮：",[65,128195,128196],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[38,128198],{"style":40,"src":128199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128201,128202],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[38,128204],{"style":40,"src":128205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128207,128208,128211],{},[1890,128209,128210],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128213,128214],{},"②select下拉表单元素：可以节约页面控件",[38,128216],{"style":40,"src":128217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128219,128220,15392,128222,128225,128226,128228,128229,128231],{},[1890,128221,1780],{},[65,128223,128224],{},"\u003Cselect>","中至少包含一对",[65,128227,104287],{},"；在",[65,128230,104287],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128233,128234,128235,128238],{},"③",[65,128236,128237],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[38,128240],{"style":40,"src":128241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128243,128244],{},"3行20列",[14,128246,128248,128249,104267],{"id":128247},"_55-lable标签","5.5 ",[65,128250,128251],{},"\u003Clable>",[19,128253,128254,128255,128257,128258,128260],{},"它不是表单标签，但常常与表单标签搭配使用，",[65,128256,128251],{},"标签用于绑定一个表单标签，当点击",[65,128259,128251],{},"标签内的文本",[19,128262,128263],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[38,128265],{"style":40,"src":128266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[38,128268],{"style":40,"src":128269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128271,128273],{"id":128272},"_56-实例","5.6 实例",[38,128275],{"style":40,"src":128276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1652,128278,128279],{},"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":63,"searchDepth":78,"depth":78,"links":128281},[128282,128283,128284,128285,128286,128288],{"id":128005,"depth":78,"text":128006},{"id":128062,"depth":78,"text":128063},{"id":128084,"depth":78,"text":128085},{"id":128152,"depth":78,"text":128153},{"id":128247,"depth":78,"text":128287},"5.5 \u003Clable>标签",{"id":128272,"depth":78,"text":128273},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127997,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128295,"title":128296,"body":128297,"description":1676,"extension":1677,"meta":128845,"navigation":1679,"path":128846,"seo":128847,"stem":128848,"__hash__":128849},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128298,"toc":128820},[128299,128302,128306,128309,128312,128316,128319,128322,128325,128328,128331,128334,128337,128341,128344,128348,128351,128354,128357,128361,128364,128367,128370,128376,128379,128382,128385,128388,128391,128394,128397,128430,128434,128437,128440,128443,128447,128450,128453,128456,128459,128462,128466,128469,128472,128475,128479,128482,128486,128489,128493,128496,128501,128505,128508,128512,128515,128518,128521,128524,128551,128554,128558,128561,128564,128569,128572,128575,128579,128582,128586,128589,128592,128595,128599,128602,128605,128608,128612,128615,128618,128621,128625,128629,128632,128672,128675,128679,128686,128689,128693,128696,128742,128746,128749,128752,128755,128783,128787,128790,128817],[10,128300,128296],{"id":128301},"_6-css语法与文本样式",[14,128303,128305],{"id":128304},"_61-css语法规范","6.1 css语法规范",[19,128307,128308],{},"由两部分组成，选择器及一条或多条声明",[38,128310],{"style":40,"src":128311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128313,128314],{},[1890,128315,1780],{},[19,128317,128318],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128320,128321],{},"②属性与属性值以“键值对”的形式出现",[19,128323,128324],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128326,128327],{},"④属性和属性值之间用英文“;”分开",[38,128329],{"style":40,"src":128330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[38,128332],{"style":40,"src":128333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[38,128335],{"style":40,"src":128336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128338,128340],{"id":128339},"_62-css选择器","6.2 css选择器",[19,128342,128343],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[43,128345,128347],{"id":128346},"_621-标签选择器","6.2.1 标签选择器",[19,128349,128350],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128352,128353],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[38,128355],{"style":40,"src":128356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[43,128358,128360],{"id":128359},"_622-类选择器","6.2.2 类选择器",[19,128362,128363],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128365,128366],{},"②样例",[38,128368],{"style":40,"src":128369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128371,128372,128373,128375],{},"③ ",[1890,128374,128210],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128377,128378],{},"可以理解为给这个标签起了个名字，来表示；",[19,128380,128381],{},"长名称或词组可以使用横线来为选择器命名；",[19,128383,128384],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128386,128387],{},"命名要有意义；",[38,128389],{"style":40,"src":128390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128392,128393],{},"类选择器也可以指定特殊的元素p.center{}",[19,128395,128396],{},"p.center和.center都对",[58,128398,128400],{"className":60,"code":128399,"language":62,"meta":63,"style":63},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[65,128401,128402,128407,128416,128426],{"__ignoreMap":63},[68,128403,128404],{"class":70,"line":71},[68,128405,128406],{"class":74},"\u002F* 类选择器指定特殊元素 *\u002F\n",[68,128408,128409,128411,128414],{"class":70,"line":78},[68,128410,19],{"class":81},[68,128412,128413],{"class":587},".center",[68,128415,86],{"class":85},[68,128417,128418,128420,128422,128424],{"class":70,"line":89},[68,128419,72107],{"class":92},[68,128421,96],{"class":85},[68,128423,53179],{"class":92},[68,128425,112],{"class":85},[68,128427,128428],{"class":70,"line":115},[68,128429,118],{"class":85},[43,128431,128433],{"id":128432},"_623-多类名使用","6.2.3 多类名使用",[19,128435,128436],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[38,128438],{"style":40,"src":128439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128441,128442],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[43,128444,128446],{"id":128445},"_624-id选择器","6.2.4 id选择器",[19,128448,128449],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128451,128452],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[38,128454],{"style":40,"src":128455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128457,128458],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128460,128461],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[43,128463,128465],{"id":128464},"_625-通配符选择器","6.2.5 通配符选择器",[19,128467,128468],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128470,128471],{},"* {",[19,128473,128474],{},"color=\"red\"}",[43,128476,128478],{"id":128477},"_626-总结","6.2.6 总结",[38,128480],{"style":40,"src":128481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128483,128485],{"id":128484},"_63-css字体属性","6.3 css字体属性",[19,128487,128488],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[43,128490,128492],{"id":128491},"_631-字体系列","6.3.1 字体系列",[19,128494,128495],{},"font-family: '宋体';",[19,128497,128498,128500],{},[1890,128499,1780],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[43,128502,128504],{"id":128503},"_632-字体大小","6.3.2 字体大小",[19,128506,128507],{},"font-size: 20px",[19,128509,128510,28067],{},[1890,128511,128210],{},[19,128513,128514],{},"①px（像素）大小是网页的最常用单位",[19,128516,128517],{},"②谷歌浏览器默认为16px",[19,128519,128520],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128522,128523],{},"④可以给body指定整个页面的大小：会自动引用",[58,128525,128527],{"className":60,"code":128526,"language":62,"meta":63,"style":63},"body {\n  font-size: 16px;\n}\n",[65,128528,128529,128535,128547],{"__ignoreMap":63},[68,128530,128531,128533],{"class":70,"line":71},[68,128532,53385],{"class":81},[68,128534,86],{"class":85},[68,128536,128537,128539,128541,128543,128545],{"class":70,"line":78},[68,128538,72206],{"class":92},[68,128540,96],{"class":85},[68,128542,2337],{"class":92},[68,128544,103],{"class":102},[68,128546,112],{"class":85},[68,128548,128549],{"class":70,"line":89},[68,128550,118],{"class":85},[19,128552,128553],{},"⑤标题标签比较特殊，需要单独指定大小",[43,128555,128557],{"id":128556},"_633-字体粗细","6.3.3 字体粗细",[19,128559,128560],{},"font-weight: bold;",[19,128562,128563],{},"font-weight: 100；",[19,128565,128566,128568],{},[1890,128567,1780],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128570,128571],{},"font-weight= 400;",[19,128573,128574],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[43,128576,128578],{"id":128577},"_634-文字样式","6.3.4 文字样式",[19,128580,128581],{},"font-style: normal；",[19,128583,128584,28067],{},[1890,128585,1284],{},[19,128587,128588],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128590,128591],{},"②italic：浏览器会显示斜体的字体样式",[38,128593],{"style":40,"src":128594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[43,128596,128598],{"id":128597},"_635-字体符合属性","6.3.5 字体符合属性",[38,128600],{"style":40,"src":128601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[38,128603],{"style":40,"src":128604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128606,128607],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128609,128610,28067],{},[1890,128611,128210],{},[19,128613,128614],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128616,128617],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128619,128620],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128622,128624],{"id":128623},"_64-css-test文本属性","6.4 css test文本属性",[43,128626,128628],{"id":128627},"_641-文本颜色","6.4.1 文本颜色",[19,128630,128631],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[58,128633,128635],{"className":60,"code":128634,"language":62,"meta":63,"style":63},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[65,128636,128637,128642,128648,128658,128663,128668],{"__ignoreMap":63},[68,128638,128639],{"class":70,"line":71},[68,128640,128641],{"class":74},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[68,128643,128644,128646],{"class":70,"line":78},[68,128645,19],{"class":81},[68,128647,86],{"class":85},[68,128649,128650,128652,128654,128656],{"class":70,"line":89},[68,128651,72484],{"class":92},[68,128653,96],{"class":85},[68,128655,59005],{"class":92},[68,128657,112],{"class":85},[68,128659,128660],{"class":70,"line":115},[68,128661,128662],{"class":74},"  \u002F* color: #ff0000; *\u002F\n",[68,128664,128665],{"class":70,"line":280},[68,128666,128667],{"class":74},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[68,128669,128670],{"class":70,"line":301},[68,128671,118],{"class":85},[38,128673],{"style":40,"src":128674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[43,128676,128678],{"id":128677},"_642-对齐文本","6.4.2 对齐文本",[19,128680,128681,128682,128685],{},"text-align属于用于设置元素内文本内容的 ",[1890,128683,128684],{},"水平对齐"," 方式",[19,128687,128688],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[43,128690,128692],{"id":128691},"_643-装饰文本","6.4.3 装饰文本",[19,128694,128695],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[58,128697,128699],{"className":60,"code":128698,"language":62,"meta":63,"style":63},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[65,128700,128701,128707,128717,128721,128727,128738],{"__ignoreMap":63},[68,128702,128703,128705],{"class":70,"line":71},[68,128704,1974],{"class":81},[68,128706,86],{"class":85},[68,128708,128709,128711,128713,128715],{"class":70,"line":78},[68,128710,72083],{"class":92},[68,128712,96],{"class":85},[68,128714,56321],{"class":92},[68,128716,112],{"class":85},[68,128718,128719],{"class":70,"line":89},[68,128720,118],{"class":85},[68,128722,128723,128725],{"class":70,"line":115},[68,128724,19],{"class":81},[68,128726,86],{"class":85},[68,128728,128729,128731,128733,128736],{"class":70,"line":280},[68,128730,72083],{"class":92},[68,128732,96],{"class":85},[68,128734,128735],{"class":92},"underline",[68,128737,112],{"class":85},[68,128739,128740],{"class":70,"line":301},[68,128741,118],{"class":85},[43,128743,128745],{"id":128744},"_644-文本缩进","6.4.4 文本缩进",[19,128747,128748],{},"实现文本的第一行首行缩进自己指定的距离",[19,128750,128751],{},"20px往右边走；-20px往左边走",[19,128753,128754],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[58,128756,128758],{"className":60,"code":128757,"language":62,"meta":63,"style":63},"p {\n  text-indent: 2em;\n}\n",[65,128759,128760,128766,128779],{"__ignoreMap":63},[68,128761,128762,128764],{"class":70,"line":71},[68,128763,19],{"class":81},[68,128765,86],{"class":85},[68,128767,128768,128771,128773,128775,128777],{"class":70,"line":78},[68,128769,128770],{"class":92},"  text-indent",[68,128772,96],{"class":85},[68,128774,267],{"class":92},[68,128776,25148],{"class":102},[68,128778,112],{"class":85},[68,128780,128781],{"class":70,"line":89},[68,128782,118],{"class":85},[43,128784,128786],{"id":128785},"_645-行间距","6.4.5 行间距",[19,128788,128789],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[58,128791,128793],{"className":60,"code":128792,"language":62,"meta":63,"style":63},"p {\n  line-height: 1.6;\n}\n",[65,128794,128795,128801,128813],{"__ignoreMap":63},[68,128796,128797,128799],{"class":70,"line":71},[68,128798,19],{"class":81},[68,128800,86],{"class":85},[68,128802,128803,128806,128808,128811],{"class":70,"line":78},[68,128804,128805],{"class":92},"  line-height",[68,128807,96],{"class":85},[68,128809,128810],{"class":92},"1.6",[68,128812,112],{"class":85},[68,128814,128815],{"class":70,"line":89},[68,128816,118],{"class":85},[1652,128818,128819],{},"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":63,"searchDepth":78,"depth":78,"links":128821},[128822,128823,128831,128838],{"id":128304,"depth":78,"text":128305},{"id":128339,"depth":78,"text":128340,"children":128824},[128825,128826,128827,128828,128829,128830],{"id":128346,"depth":89,"text":128347},{"id":128359,"depth":89,"text":128360},{"id":128432,"depth":89,"text":128433},{"id":128445,"depth":89,"text":128446},{"id":128464,"depth":89,"text":128465},{"id":128477,"depth":89,"text":128478},{"id":128484,"depth":78,"text":128485,"children":128832},[128833,128834,128835,128836,128837],{"id":128491,"depth":89,"text":128492},{"id":128503,"depth":89,"text":128504},{"id":128556,"depth":89,"text":128557},{"id":128577,"depth":89,"text":128578},{"id":128597,"depth":89,"text":128598},{"id":128623,"depth":78,"text":128624,"children":128839},[128840,128841,128842,128843,128844],{"id":128627,"depth":89,"text":128628},{"id":128677,"depth":89,"text":128678},{"id":128691,"depth":89,"text":128692},{"id":128744,"depth":89,"text":128745},{"id":128785,"depth":89,"text":128786},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128296,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128851,"title":128852,"body":128853,"description":1676,"extension":1677,"meta":129500,"navigation":1679,"path":129501,"seo":129502,"stem":129503,"__hash__":129504},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128854,"toc":129481},[128855,128858,128862,128866,128924,128928,128938,128941,128944,128948,128973,128977,128980,128983,128986,128989,128992,128996,128999,129002,129044,129047,129073,129079,129082,129086,129090,129096,129099,129102,129105,129108,129111,129114,129159,129163,129166,129169,129173,129177,129206,129209,129214,129217,129220,129223,129226,129230,129234,129237,129239,129242,129246,129249,129253,129256,129259,129262,129266,129270,129276,129286,129289,129292,129295,129298,129301,129424,129432,129440,129478],[10,128856,128852],{"id":128857},"_7-css引入方式与选择器进阶",[14,128859,128861],{"id":128860},"_71-css引入方式","7.1 css引入方式",[43,128863,128865],{"id":128864},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[58,128867,128869],{"className":847,"code":128868,"language":849,"meta":63,"style":63},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[65,128870,128871,128879,128886,128898,128911,128916],{"__ignoreMap":63},[68,128872,128873,128875,128877],{"class":70,"line":71},[68,128874,861],{"class":85},[68,128876,1652],{"class":81},[68,128878,876],{"class":85},[68,128880,128881,128884],{"class":70,"line":78},[68,128882,128883],{"class":81},"  h1",[68,128885,86],{"class":85},[68,128887,128888,128891,128893,128896],{"class":70,"line":89},[68,128889,128890],{"class":92},"    color",[68,128892,96],{"class":85},[68,128894,128895],{"class":92},"blue",[68,128897,112],{"class":85},[68,128899,128900,128903,128905,128907,128909],{"class":70,"line":115},[68,128901,128902],{"class":92},"    font-size",[68,128904,96],{"class":85},[68,128906,2536],{"class":92},[68,128908,103],{"class":102},[68,128910,112],{"class":85},[68,128912,128913],{"class":70,"line":280},[68,128914,128915],{"class":85},"  }\n",[68,128917,128918,128920,128922],{"class":70,"line":301},[68,128919,886],{"class":85},[68,128921,1652],{"class":81},[68,128923,876],{"class":85},[19,128925,128926,28067],{},[1890,128927,128210],{},[19,128929,78804,128930,128933,128934,128937],{},[65,128931,128932],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[65,128935,128936],{},"\u003Chead>","标签中",[19,128939,128940],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128942,128943],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[43,128945,128947],{"id":128946},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[58,128949,128951],{"className":847,"code":128950,"language":849,"meta":63,"style":63},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[65,128952,128953],{"__ignoreMap":63},[68,128954,128955,128957,128959,128961,128963,128966,128969,128971],{"class":70,"line":71},[68,128956,861],{"class":85},[68,128958,19],{"class":81},[68,128960,64209],{"class":587},[68,128962,869],{"class":85},[68,128964,128965],{"class":872},"\"color: red; font-size: 16px;\"",[68,128967,128968],{"class":85},">这是一个段落\u003C\u002F",[68,128970,19],{"class":81},[68,128972,876],{"class":85},[19,128974,128975,28067],{},[1890,128976,128210],{},[19,128978,128979],{},"①style其实就是标签的属性",[19,128981,128982],{},"②在双引号中间，写法要符合css规范",[19,128984,128985],{},"③可以控制当前的标签设置样式",[19,128987,128988],{},"④书写繁琐，简单时才用",[19,128990,128991],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[43,128993,128995],{"id":128994},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128997,128998],{},"使用最多，单独建一个css文件，然后html引用",[19,129000,129001],{},"①css文件部分： style.css",[58,129003,129005],{"className":60,"code":129004,"language":62,"meta":63,"style":63},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[65,129006,129007,129012,129018,129028,129040],{"__ignoreMap":63},[68,129008,129009],{"class":70,"line":71},[68,129010,129011],{"class":74},"\u002F* style.css *\u002F\n",[68,129013,129014,129016],{"class":70,"line":78},[68,129015,10],{"class":81},[68,129017,86],{"class":85},[68,129019,129020,129022,129024,129026],{"class":70,"line":89},[68,129021,72484],{"class":92},[68,129023,96],{"class":85},[68,129025,128895],{"class":92},[68,129027,112],{"class":85},[68,129029,129030,129032,129034,129036,129038],{"class":70,"line":115},[68,129031,72206],{"class":92},[68,129033,96],{"class":85},[68,129035,2536],{"class":92},[68,129037,103],{"class":102},[68,129039,112],{"class":85},[68,129041,129042],{"class":70,"line":280},[68,129043,118],{"class":85},[19,129045,129046],{},"②html部分",[58,129048,129050],{"className":847,"code":129049,"language":849,"meta":63,"style":63},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[65,129051,129052],{"__ignoreMap":63},[68,129053,129054,129056,129058,129060,129062,129064,129066,129068,129071],{"class":70,"line":71},[68,129055,861],{"class":85},[68,129057,70587],{"class":81},[68,129059,70590],{"class":587},[68,129061,869],{"class":85},[68,129063,70595],{"class":872},[68,129065,62641],{"class":587},[68,129067,869],{"class":85},[68,129069,129070],{"class":872},"\"style.css\"",[68,129072,876],{"class":85},[19,129074,129075,129078],{},[65,129076,129077],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129080,129081],{},"ctrl+0回到页面原来大小",[14,129083,129085],{"id":129084},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[43,129087,129089],{"id":129088},"_721-快速生成html","7.2.1 快速生成html",[19,129091,129092,129093],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[65,129094,129095],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129097,129098],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129100,129101],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129103,129104],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129106,129107],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129109,129110],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129112,129113],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[58,129115,129117],{"className":847,"code":129116,"language":849,"meta":63,"style":63},"\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",[65,129118,129119,129124,129129,129134,129139,129144,129149,129154],{"__ignoreMap":63},[68,129120,129121],{"class":70,"line":71},[68,129122,129123],{"class":74},"\u003C!-- Emmet 语法示例 -->\n",[68,129125,129126],{"class":70,"line":78},[68,129127,129128],{"class":74},"\u003C!-- div*3        → 生成3个div -->\n",[68,129130,129131],{"class":70,"line":89},[68,129132,129133],{"class":74},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[68,129135,129136],{"class":70,"line":115},[68,129137,129138],{"class":74},"\u003C!-- div+p        → 兄弟div和p -->\n",[68,129140,129141],{"class":70,"line":280},[68,129142,129143],{"class":74},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[68,129145,129146],{"class":70,"line":301},[68,129147,129148],{"class":74},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[68,129150,129151],{"class":70,"line":320},[68,129152,129153],{"class":74},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[68,129155,129156],{"class":70,"line":2915},[68,129157,129158],{"class":74},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[43,129160,129162],{"id":129161},"_722-快速生成css","7.2.2 快速生成css",[19,129164,129165],{},"简写开头",[19,129167,129168],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129170,129172],{"id":129171},"_73-css复合选择器","7.3 css复合选择器",[43,129174,129176],{"id":129175},"_731-后代选择器","7.3.1 后代选择器",[58,129178,129180],{"className":60,"code":129179,"language":62,"meta":63,"style":63},".parent .child {\n  color: blue;\n}\n",[65,129181,129182,129192,129202],{"__ignoreMap":63},[68,129183,129184,129187,129190],{"class":70,"line":71},[68,129185,129186],{"class":587},".parent",[68,129188,129189],{"class":587}," .child",[68,129191,86],{"class":85},[68,129193,129194,129196,129198,129200],{"class":70,"line":78},[68,129195,72484],{"class":92},[68,129197,96],{"class":85},[68,129199,128895],{"class":92},[68,129201,112],{"class":85},[68,129203,129204],{"class":70,"line":89},[68,129205,118],{"class":85},[19,129207,129208],{},"元素1 元素2 {样式声明}",[19,129210,129211],{},[1890,129212,129213],{},"注意点:",[19,129215,129216],{},"①元素1和元素2中间用空格隔开",[19,129218,129219],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129221,129222],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129224,129225],{},"④元素1和元素2可以是任意基础选择器",[43,129227,129229],{"id":129228},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129231,129232],{},[1890,129233,129213],{},[19,129235,129236],{},"①元素1和元素2中间用大于号隔开",[19,129238,129219],{},[19,129240,129241],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[43,129243,129245],{"id":129244},"_733-并集选择器","7.3.3 并集选择器",[19,129247,129248],{},"元素1，元素2 {样式声明}",[19,129250,129251],{},[1890,129252,129213],{},[19,129254,129255],{},"①元素1和元素2中间用逗号隔开",[19,129257,129258],{},"②逗号可以理解为和的意思",[19,129260,129261],{},"③并集选择器通常用于集体声明",[43,129263,129265],{"id":129264},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129267,129268],{},[1890,129269,129213],{},[19,129271,129272,129273,129275],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70587,129274],{},"－:visited－:hover－:active。",[19,129277,129278,129279,129282,129283,27334],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129280,129281],"hover",{}," 、 ",[129284,129285],"first-child",{},[19,129287,129288],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129290,129291],{},"link对没访问的进行设置",[19,129293,129294],{},"vistied对已访问的进行改变",[19,129296,129297],{},"hover鼠标经过就会变",[19,129299,129300],{},"active常按(点)就会变",[58,129302,129304],{"className":60,"code":129303,"language":62,"meta":63,"style":63},"\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",[65,129305,129306,129311,129320,129330,129340,129344,129353,129364,129368,129376,129386,129396,129400,129409,129420],{"__ignoreMap":63},[68,129307,129308],{"class":70,"line":71},[68,129309,129310],{"class":74},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[68,129312,129313,129315,129318],{"class":70,"line":78},[68,129314,1974],{"class":81},[68,129316,129317],{"class":587},":link",[68,129319,86],{"class":85},[68,129321,129322,129324,129326,129328],{"class":70,"line":89},[68,129323,72484],{"class":92},[68,129325,96],{"class":85},[68,129327,63952],{"class":92},[68,129329,112],{"class":85},[68,129331,129332,129334,129336,129338],{"class":70,"line":115},[68,129333,72083],{"class":92},[68,129335,96],{"class":85},[68,129337,56321],{"class":92},[68,129339,112],{"class":85},[68,129341,129342],{"class":70,"line":280},[68,129343,118],{"class":85},[68,129345,129346,129348,129351],{"class":70,"line":301},[68,129347,1974],{"class":81},[68,129349,129350],{"class":587},":visited",[68,129352,86],{"class":85},[68,129354,129355,129357,129359,129362],{"class":70,"line":320},[68,129356,72484],{"class":92},[68,129358,96],{"class":85},[68,129360,129361],{"class":92},"purple",[68,129363,112],{"class":85},[68,129365,129366],{"class":70,"line":2915},[68,129367,118],{"class":85},[68,129369,129370,129372,129374],{"class":70,"line":2921},[68,129371,1974],{"class":81},[68,129373,62524],{"class":587},[68,129375,86],{"class":85},[68,129377,129378,129380,129382,129384],{"class":70,"line":2933},[68,129379,72484],{"class":92},[68,129381,96],{"class":85},[68,129383,56473],{"class":92},[68,129385,112],{"class":85},[68,129387,129388,129390,129392,129394],{"class":70,"line":3214},[68,129389,72083],{"class":92},[68,129391,96],{"class":85},[68,129393,128735],{"class":92},[68,129395,112],{"class":85},[68,129397,129398],{"class":70,"line":3219},[68,129399,118],{"class":85},[68,129401,129402,129404,129407],{"class":70,"line":3225},[68,129403,1974],{"class":81},[68,129405,129406],{"class":587},":active",[68,129408,86],{"class":85},[68,129410,129411,129413,129415,129418],{"class":70,"line":3230},[68,129412,72484],{"class":92},[68,129414,96],{"class":85},[68,129416,129417],{"class":92},"green",[68,129419,112],{"class":85},[68,129421,129422],{"class":70,"line":3244},[68,129423,118],{"class":85},[43,129425,129427,129428,129431],{"id":129426},"_735-伪类选择器","7.3.5 ",[129429,129430],"focus",{},"伪类选择器",[19,129433,129434,129436,129437,129439],{},[129429,129435],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[65,129438,128183],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[58,129441,129443],{"className":60,"code":129442,"language":62,"meta":63,"style":63},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[65,129444,129445,129453,129464,129474],{"__ignoreMap":63},[68,129446,129447,129449,129451],{"class":70,"line":71},[68,129448,55405],{"class":81},[68,129450,63484],{"class":587},[68,129452,86],{"class":85},[68,129454,129455,129458,129460,129462],{"class":70,"line":78},[68,129456,129457],{"class":92},"  border-color",[68,129459,96],{"class":85},[68,129461,56473],{"class":92},[68,129463,112],{"class":85},[68,129465,129466,129468,129470,129472],{"class":70,"line":89},[68,129467,72378],{"class":92},[68,129469,96],{"class":85},[68,129471,56321],{"class":92},[68,129473,112],{"class":85},[68,129475,129476],{"class":70,"line":115},[68,129477,118],{"class":85},[1652,129479,129480],{},"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":63,"searchDepth":78,"depth":78,"links":129482},[129483,129488,129492],{"id":128860,"depth":78,"text":128861,"children":129484},[129485,129486,129487],{"id":128864,"depth":89,"text":128865},{"id":128946,"depth":89,"text":128947},{"id":128994,"depth":89,"text":128995},{"id":129084,"depth":78,"text":129085,"children":129489},[129490,129491],{"id":129088,"depth":89,"text":129089},{"id":129161,"depth":89,"text":129162},{"id":129171,"depth":78,"text":129172,"children":129493},[129494,129495,129496,129497,129498],{"id":129175,"depth":89,"text":129176},{"id":129228,"depth":89,"text":129229},{"id":129244,"depth":89,"text":129245},{"id":129264,"depth":89,"text":129265},{"id":129426,"depth":89,"text":129499},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128852,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129506,"title":129507,"body":129508,"description":1676,"extension":1677,"meta":131430,"navigation":1679,"path":131431,"seo":131432,"stem":131433,"__hash__":131434},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129509,"toc":131404},[129510,129513,129517,129526,129530,129556,129561,129564,129567,129570,129573,129577,129580,129590,129598,129602,129637,129642,129645,129648,129651,129654,129658,129661,129670,129674,129687,129692,129695,129698,129701,129705,129708,129712,129715,129770,129773,129804,129807,129861,129865,129868,130034,130157,130160,130163,130166,130169,130173,130176,130180,130183,130186,130190,130193,130224,130251,130279,130282,130286,130312,130355,130359,130453,130456,130483,130486,130489,130492,130495,130498,130501,130504,130507,130510,130514,130571,130598,130602,130650,130654,130695,130697,130700,130703,130706,130709,130713,130804,130807,130810,130813,130817,130940,131141,131145,131149,131152,131155,131158,131162,131165,131168,131193,131196,131199,131202,131205,131208,131212,131220,131282,131285,131343,131346,131349,131352,131355,131358,131361,131364,131401],[10,129511,129507],{"id":129512},"_8-css显示模式与背景特性",[14,129514,129516],{"id":129515},"_81-css元素显示模式","8.1 css元素显示模式",[19,129518,129519,129520,129522,129523,129525],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[65,129521,127736],{},"自己占一行，比如一行可以放多个",[65,129524,127739],{},"，HTML 元素一般分为块元素和行内元素两种类型",[43,129527,129529],{"id":129528},"_811-块元素","8.1.1 块元素",[19,129531,129532,129533,129535,129536,1949,129539,1949,129541,1949,129543,1949,129546,1949,129549,129552,129553,129555],{},"常见的块元素有",[65,129534,127640],{},"~",[65,129537,129538],{},"\u003Ch6>",[65,129540,127666],{},[65,129542,127736],{},[65,129544,129545],{},"\u003Cul>",[65,129547,129548],{},"\u003Col>",[65,129550,129551],{},"\u003Cli>","等，其中 ",[65,129554,127736],{}," 标签是最典型的块元素",[19,129557,129558],{},[1890,129559,129560],{},"块级元素的特点：",[19,129562,129563],{},"① 比较霸道，自己独占一行。",[19,129565,129566],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129568,129569],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129571,129572],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129574,129575],{},[1890,129576,1780],{},[19,129578,129579],{},"①文字类的元素内不能使用块级元素",[19,129581,78827,129582,129584,129585,129587,129588],{},[65,129583,127666],{}," 标签主要用于存放文字，因此 ",[65,129586,127666],{}," 里面不能放块级元素，特别是不能放",[65,129589,127736],{},[19,129591,129592,129593,129535,129595,129597],{},"⑥同理， ",[65,129594,127640],{},[65,129596,129538],{},"等都是文字类块级标签，里面也不能放其他块级元素",[43,129599,129601],{"id":129600},"_812-行内元素","8.1.2 行内元素",[19,129603,129604,129605,1949,129607,1949,129610,1949,129613,1949,129616,1949,129619,1949,129622,1949,129625,1949,129628,1949,129631,129633,129634,129636],{},"常见的行内元素有 ",[65,129606,127898],{},[65,129608,129609],{},"\u003Cstrong>",[65,129611,129612],{},"\u003Cb>",[65,129614,129615],{},"\u003Cem>",[65,129617,129618],{},"\u003Ci>",[65,129620,129621],{},"\u003Cdel>",[65,129623,129624],{},"\u003Cs>",[65,129626,129627],{},"\u003Cins>",[65,129629,129630],{},"\u003Cu>",[65,129632,127739],{}," 等，其中 ",[65,129635,127739],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129638,129639],{},[1890,129640,129641],{},"特点：",[19,129643,129644],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129646,129647],{},"② 高、宽直接设置是无效的。",[19,129649,129650],{},"③ 默认宽度就是它本身内容的宽度。",[19,129652,129653],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129655,129656],{},[1890,129657,1780],{},[19,129659,129660],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129662,129663,129664,129666,129667,129669],{},"②特殊情况链接 ",[65,129665,127898],{}," 里面可以放块级元素，但是给 ",[65,129668,127898],{}," 转换一下块级模式最安全",[43,129671,129673],{"id":129672},"_813-行内块元素","8.1.3 行内块元素",[19,129675,129676,129677,1949,129680,1949,129683,129686],{},"在行内元素中有几个特殊的标签 —— ",[65,129678,129679],{},"\u003Cimg \u002F>",[65,129681,129682],{},"\u003Cinput \u002F>",[65,129684,129685],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129688,129689],{},[1890,129690,129691],{},"行内块元素的特点：",[19,129693,129694],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129696,129697],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129699,129700],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[43,129702,129704],{"id":129703},"_814-总结","8.1.4 总结",[38,129706],{"style":40,"src":129707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[43,129709,129711],{"id":129710},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129713,129714],{},"①转换为块元素：display:block;",[58,129716,129718],{"className":60,"code":129717,"language":62,"meta":63,"style":63},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[65,129719,129720,129725,129731,129742,129754,129766],{"__ignoreMap":63},[68,129721,129722],{"class":70,"line":71},[68,129723,129724],{"class":74},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[68,129726,129727,129729],{"class":70,"line":78},[68,129728,1974],{"class":81},[68,129730,86],{"class":85},[68,129732,129733,129736,129738,129740],{"class":70,"line":89},[68,129734,129735],{"class":92},"  display",[68,129737,96],{"class":85},[68,129739,62453],{"class":92},[68,129741,112],{"class":85},[68,129743,129744,129746,129748,129750,129752],{"class":70,"line":115},[68,129745,72149],{"class":92},[68,129747,96],{"class":85},[68,129749,2047],{"class":92},[68,129751,103],{"class":102},[68,129753,112],{"class":85},[68,129755,129756,129758,129760,129762,129764],{"class":70,"line":280},[68,129757,72368],{"class":92},[68,129759,96],{"class":85},[68,129761,2137],{"class":92},[68,129763,103],{"class":102},[68,129765,112],{"class":85},[68,129767,129768],{"class":70,"line":301},[68,129769,118],{"class":85},[19,129771,129772],{},"②转换为行内元素：display:inline;",[58,129774,129776],{"className":60,"code":129775,"language":62,"meta":63,"style":63},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[65,129777,129778,129783,129789,129800],{"__ignoreMap":63},[68,129779,129780],{"class":70,"line":71},[68,129781,129782],{"class":74},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[68,129784,129785,129787],{"class":70,"line":78},[68,129786,82],{"class":81},[68,129788,86],{"class":85},[68,129790,129791,129793,129795,129798],{"class":70,"line":89},[68,129792,129735],{"class":92},[68,129794,96],{"class":85},[68,129796,129797],{"class":92},"inline",[68,129799,112],{"class":85},[68,129801,129802],{"class":70,"line":115},[68,129803,118],{"class":85},[19,129805,129806],{},"③转换为行内块：display:inline-block;",[58,129808,129810],{"className":60,"code":129809,"language":62,"meta":63,"style":63},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[65,129811,129812,129817,129823,129833,129845,129857],{"__ignoreMap":63},[68,129813,129814],{"class":70,"line":71},[68,129815,129816],{"class":74},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[68,129818,129819,129821],{"class":70,"line":78},[68,129820,68],{"class":81},[68,129822,86],{"class":85},[68,129824,129825,129827,129829,129831],{"class":70,"line":89},[68,129826,129735],{"class":92},[68,129828,96],{"class":85},[68,129830,73962],{"class":92},[68,129832,112],{"class":85},[68,129834,129835,129837,129839,129841,129843],{"class":70,"line":115},[68,129836,72149],{"class":92},[68,129838,96],{"class":85},[68,129840,2348],{"class":92},[68,129842,103],{"class":102},[68,129844,112],{"class":85},[68,129846,129847,129849,129851,129853,129855],{"class":70,"line":280},[68,129848,72368],{"class":92},[68,129850,96],{"class":85},[68,129852,2686],{"class":92},[68,129854,103],{"class":102},[68,129856,112],{"class":85},[68,129858,129859],{"class":70,"line":301},[68,129860,118],{"class":85},[43,129862,129864],{"id":129863},"_816-小米侧边栏","8.1.6 小米侧边栏",[38,129866],{"style":40,"src":129867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[58,129869,129871],{"className":847,"code":129870,"language":849,"meta":63,"style":63},"\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",[65,129872,129873,129878,129893,129912,129931,129950,129969,129988,130007,130026],{"__ignoreMap":63},[68,129874,129875],{"class":70,"line":71},[68,129876,129877],{"class":74},"\u003C!-- 小米侧边栏案例 -->\n",[68,129879,129880,129882,129884,129886,129888,129891],{"class":70,"line":78},[68,129881,861],{"class":85},[68,129883,82],{"class":81},[68,129885,866],{"class":587},[68,129887,869],{"class":85},[68,129889,129890],{"class":872},"\"sidebar\"",[68,129892,876],{"class":85},[68,129894,129895,129897,129899,129901,129903,129905,129908,129910],{"class":70,"line":89},[68,129896,53729],{"class":85},[68,129898,1974],{"class":81},[68,129900,62641],{"class":587},[68,129902,869],{"class":85},[68,129904,62646],{"class":872},[68,129906,129907],{"class":85},">手机 电话卡\u003C\u002F",[68,129909,1974],{"class":81},[68,129911,876],{"class":85},[68,129913,129914,129916,129918,129920,129922,129924,129927,129929],{"class":70,"line":115},[68,129915,53729],{"class":85},[68,129917,1974],{"class":81},[68,129919,62641],{"class":587},[68,129921,869],{"class":85},[68,129923,62646],{"class":872},[68,129925,129926],{"class":85},">电视 盒子\u003C\u002F",[68,129928,1974],{"class":81},[68,129930,876],{"class":85},[68,129932,129933,129935,129937,129939,129941,129943,129946,129948],{"class":70,"line":280},[68,129934,53729],{"class":85},[68,129936,1974],{"class":81},[68,129938,62641],{"class":587},[68,129940,869],{"class":85},[68,129942,62646],{"class":872},[68,129944,129945],{"class":85},">笔记本 平板\u003C\u002F",[68,129947,1974],{"class":81},[68,129949,876],{"class":85},[68,129951,129952,129954,129956,129958,129960,129962,129965,129967],{"class":70,"line":301},[68,129953,53729],{"class":85},[68,129955,1974],{"class":81},[68,129957,62641],{"class":587},[68,129959,869],{"class":85},[68,129961,62646],{"class":872},[68,129963,129964],{"class":85},">出行 穿戴\u003C\u002F",[68,129966,1974],{"class":81},[68,129968,876],{"class":85},[68,129970,129971,129973,129975,129977,129979,129981,129984,129986],{"class":70,"line":320},[68,129972,53729],{"class":85},[68,129974,1974],{"class":81},[68,129976,62641],{"class":587},[68,129978,869],{"class":85},[68,129980,62646],{"class":872},[68,129982,129983],{"class":85},">智能 路由器\u003C\u002F",[68,129985,1974],{"class":81},[68,129987,876],{"class":85},[68,129989,129990,129992,129994,129996,129998,130000,130003,130005],{"class":70,"line":2915},[68,129991,53729],{"class":85},[68,129993,1974],{"class":81},[68,129995,62641],{"class":587},[68,129997,869],{"class":85},[68,129999,62646],{"class":872},[68,130001,130002],{"class":85},">健康 儿童\u003C\u002F",[68,130004,1974],{"class":81},[68,130006,876],{"class":85},[68,130008,130009,130011,130013,130015,130017,130019,130022,130024],{"class":70,"line":2921},[68,130010,53729],{"class":85},[68,130012,1974],{"class":81},[68,130014,62641],{"class":587},[68,130016,869],{"class":85},[68,130018,62646],{"class":872},[68,130020,130021],{"class":85},">耳机 音响\u003C\u002F",[68,130023,1974],{"class":81},[68,130025,876],{"class":85},[68,130027,130028,130030,130032],{"class":70,"line":2933},[68,130029,886],{"class":85},[68,130031,82],{"class":81},[68,130033,876],{"class":85},[58,130035,130037],{"className":60,"code":130036,"language":62,"meta":63,"style":63},".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",[65,130038,130039,130048,130058,130071,130083,130095,130107,130117,130128,130132,130142,130153],{"__ignoreMap":63},[68,130040,130041,130044,130046],{"class":70,"line":71},[68,130042,130043],{"class":587},".sidebar",[68,130045,3002],{"class":81},[68,130047,86],{"class":85},[68,130049,130050,130052,130054,130056],{"class":70,"line":78},[68,130051,129735],{"class":92},[68,130053,96],{"class":85},[68,130055,62453],{"class":92},[68,130057,112],{"class":85},[68,130059,130060,130062,130064,130067,130069],{"class":70,"line":89},[68,130061,72149],{"class":92},[68,130063,96],{"class":85},[68,130065,130066],{"class":92},"234",[68,130068,103],{"class":102},[68,130070,112],{"class":85},[68,130072,130073,130075,130077,130079,130081],{"class":70,"line":115},[68,130074,72368],{"class":92},[68,130076,96],{"class":85},[68,130078,2188],{"class":92},[68,130080,103],{"class":102},[68,130082,112],{"class":85},[68,130084,130085,130087,130089,130091,130093],{"class":70,"line":280},[68,130086,128805],{"class":92},[68,130088,96],{"class":85},[68,130090,2188],{"class":92},[68,130092,103],{"class":102},[68,130094,112],{"class":85},[68,130096,130097,130099,130101,130103,130105],{"class":70,"line":301},[68,130098,72403],{"class":92},[68,130100,96],{"class":85},[68,130102,2686],{"class":92},[68,130104,103],{"class":102},[68,130106,112],{"class":85},[68,130108,130109,130111,130113,130115],{"class":70,"line":320},[68,130110,72484],{"class":92},[68,130112,96],{"class":85},[68,130114,62426],{"class":92},[68,130116,112],{"class":85},[68,130118,130119,130121,130123,130126],{"class":70,"line":2915},[68,130120,72458],{"class":92},[68,130122,96],{"class":85},[68,130124,130125],{"class":92},"#55585a",[68,130127,112],{"class":85},[68,130129,130130],{"class":70,"line":2921},[68,130131,118],{"class":85},[68,130133,130134,130136,130138,130140],{"class":70,"line":2933},[68,130135,130043],{"class":587},[68,130137,3002],{"class":81},[68,130139,62524],{"class":587},[68,130141,86],{"class":85},[68,130143,130144,130146,130148,130151],{"class":70,"line":3214},[68,130145,72458],{"class":92},[68,130147,96],{"class":85},[68,130149,130150],{"class":92},"#ff6700",[68,130152,112],{"class":85},[68,130154,130155],{"class":70,"line":3219},[68,130156,118],{"class":85},[38,130158],{"style":40,"src":130159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130161,130162],{},"行高=盒子高度：实现文字的垂直居中",[19,130164,130165],{},"原理讲解：",[38,130167],{"style":40,"src":130168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130170,130172],{"id":130171},"_82-css背景","8.2 css背景",[19,130174,130175],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[43,130177,130179],{"id":130178},"_821-背景颜色","8.2.1 背景颜色",[19,130181,130182],{},"background-color:颜色值;",[19,130184,130185],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[43,130187,130189],{"id":130188},"_822-背景图片","8.2.2 背景图片",[19,130191,130192],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[58,130194,130196],{"className":60,"code":130195,"language":62,"meta":63,"style":63},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[65,130197,130198,130204,130220],{"__ignoreMap":63},[68,130199,130200,130202],{"class":70,"line":71},[68,130201,82],{"class":81},[68,130203,86],{"class":85},[68,130205,130206,130209,130211,130213,130215,130218],{"class":70,"line":78},[68,130207,130208],{"class":92},"  background-image",[68,130210,96],{"class":85},[68,130212,63310],{"class":92},[68,130214,997],{"class":85},[68,130216,130217],{"class":6815},"images\u002Fbg.png",[68,130219,1016],{"class":85},[68,130221,130222],{"class":70,"line":89},[68,130223,118],{"class":85},[120,130225,130226,130235],{},[123,130227,130228],{},[126,130229,130230,130233],{},[129,130231,130232],{"align":131},"参数值",[129,130234,135],{"align":131},[137,130236,130237,130244],{},[126,130238,130239,130241],{},[142,130240,56321],{"align":131},[142,130242,130243],{"align":131},"无背景图（默认的）",[126,130245,130246,130248],{},[142,130247,63310],{"align":131},[142,130249,130250],{"align":131},"使用绝对或相对地址指定背景图像",[58,130252,130253],{"className":60,"code":130195,"language":62,"meta":63,"style":63},[65,130254,130255,130261,130275],{"__ignoreMap":63},[68,130256,130257,130259],{"class":70,"line":71},[68,130258,82],{"class":81},[68,130260,86],{"class":85},[68,130262,130263,130265,130267,130269,130271,130273],{"class":70,"line":78},[68,130264,130208],{"class":92},[68,130266,96],{"class":85},[68,130268,63310],{"class":92},[68,130270,997],{"class":85},[68,130272,130217],{"class":6815},[68,130274,1016],{"class":85},[68,130276,130277],{"class":70,"line":89},[68,130278,118],{"class":85},[19,130280,130281],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[43,130283,130285],{"id":130284},"_823-背景平铺","8.2.3 背景平铺",[58,130287,130289],{"className":60,"code":130288,"language":62,"meta":63,"style":63},"div {\n  background-repeat: no-repeat;\n}\n",[65,130290,130291,130297,130308],{"__ignoreMap":63},[68,130292,130293,130295],{"class":70,"line":71},[68,130294,82],{"class":81},[68,130296,86],{"class":85},[68,130298,130299,130302,130304,130306],{"class":70,"line":78},[68,130300,130301],{"class":92},"  background-repeat",[68,130303,96],{"class":85},[68,130305,63320],{"class":92},[68,130307,112],{"class":85},[68,130309,130310],{"class":70,"line":89},[68,130311,118],{"class":85},[120,130313,130314,130322],{},[123,130315,130316],{},[126,130317,130318,130320],{},[129,130319,130232],{"align":131},[129,130321,135],{"align":131},[137,130323,130324,130332,130339,130347],{},[126,130325,130326,130329],{},[142,130327,130328],{"align":131},"repeat",[142,130330,130331],{"align":131},"背景图像在纵向和横向上平铺（默认的）",[126,130333,130334,130336],{},[142,130335,63320],{"align":131},[142,130337,130338],{"align":131},"背景图像不平铺",[126,130340,130341,130344],{},[142,130342,130343],{"align":131},"repeat-x",[142,130345,130346],{"align":131},"背景图像在横向上平铺",[126,130348,130349,130352],{},[142,130350,130351],{"align":131},"repeat-y",[142,130353,130354],{"align":131},"背景图像在纵向平铺",[43,130356,130358],{"id":130357},"_824-背景图片位置","8.2.4 背景图片位置",[58,130360,130362],{"className":60,"code":130361,"language":62,"meta":63,"style":63},"\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",[65,130363,130364,130369,130375,130389,130393,130398,130404,130420,130424,130429,130435,130449],{"__ignoreMap":63},[68,130365,130366],{"class":70,"line":71},[68,130367,130368],{"class":74},"\u002F* 方位名词 *\u002F\n",[68,130370,130371,130373],{"class":70,"line":78},[68,130372,82],{"class":81},[68,130374,86],{"class":85},[68,130376,130377,130380,130382,130384,130387],{"class":70,"line":89},[68,130378,130379],{"class":92},"  background-position",[68,130381,96],{"class":85},[68,130383,53179],{"class":92},[68,130385,130386],{"class":92}," top",[68,130388,112],{"class":85},[68,130390,130391],{"class":70,"line":115},[68,130392,118],{"class":85},[68,130394,130395],{"class":70,"line":280},[68,130396,130397],{"class":74},"\u002F* 精确单位 *\u002F\n",[68,130399,130400,130402],{"class":70,"line":301},[68,130401,82],{"class":81},[68,130403,86],{"class":85},[68,130405,130406,130408,130410,130412,130414,130416,130418],{"class":70,"line":320},[68,130407,130379],{"class":92},[68,130409,96],{"class":85},[68,130411,2436],{"class":92},[68,130413,103],{"class":102},[68,130415,59088],{"class":92},[68,130417,103],{"class":102},[68,130419,112],{"class":85},[68,130421,130422],{"class":70,"line":2915},[68,130423,118],{"class":85},[68,130425,130426],{"class":70,"line":2921},[68,130427,130428],{"class":74},"\u002F* 混合单位 *\u002F\n",[68,130430,130431,130433],{"class":70,"line":2933},[68,130432,82],{"class":81},[68,130434,86],{"class":85},[68,130436,130437,130439,130441,130443,130445,130447],{"class":70,"line":3214},[68,130438,130379],{"class":92},[68,130440,96],{"class":85},[68,130442,2436],{"class":92},[68,130444,103],{"class":102},[68,130446,18739],{"class":92},[68,130448,112],{"class":85},[68,130450,130451],{"class":70,"line":3219},[68,130452,118],{"class":85},[19,130454,130455],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[120,130457,130458,130466],{},[123,130459,130460],{},[126,130461,130462,130464],{},[129,130463,130232],{"align":131},[129,130465,27463],{"align":131},[137,130467,130468,130475],{},[126,130469,130470,130472],{},[142,130471,53553],{"align":131},[142,130473,130474],{"align":131},"百分数|由浮点数和单位标识符组成的长度值",[126,130476,130477,130480],{},[142,130478,130479],{"align":131},"position",[142,130481,130482],{"align":131},"top|center|bottom|left|center|right 方位名词",[19,130484,130485],{},"其他说明：",[19,130487,130488],{},"①参数是方位名词",[19,130490,130491],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130493,130494],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130496,130497],{},"②参数是精确单位",[19,130499,130500],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130502,130503],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130505,130506],{},"③参数是混合单位",[19,130508,130509],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[43,130511,130513],{"id":130512},"_825-背景图片固定","8.2.5 背景图片固定",[58,130515,130517],{"className":60,"code":130516,"language":62,"meta":63,"style":63},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[65,130518,130519,130524,130530,130542,130546,130551,130557,130567],{"__ignoreMap":63},[68,130520,130521],{"class":70,"line":71},[68,130522,130523],{"class":74},"\u002F* 背景滚动（默认） *\u002F\n",[68,130525,130526,130528],{"class":70,"line":78},[68,130527,82],{"class":81},[68,130529,86],{"class":85},[68,130531,130532,130535,130537,130540],{"class":70,"line":89},[68,130533,130534],{"class":92},"  background-attachment",[68,130536,96],{"class":85},[68,130538,130539],{"class":92},"scroll",[68,130541,112],{"class":85},[68,130543,130544],{"class":70,"line":115},[68,130545,118],{"class":85},[68,130547,130548],{"class":70,"line":280},[68,130549,130550],{"class":74},"\u002F* 背景固定 *\u002F\n",[68,130552,130553,130555],{"class":70,"line":301},[68,130554,82],{"class":81},[68,130556,86],{"class":85},[68,130558,130559,130561,130563,130565],{"class":70,"line":320},[68,130560,130534],{"class":92},[68,130562,96],{"class":85},[68,130564,87809],{"class":92},[68,130566,112],{"class":85},[68,130568,130569],{"class":70,"line":2915},[68,130570,118],{"class":85},[120,130572,130573,130582],{},[123,130574,130575],{},[126,130576,130577,130580],{},[129,130578,130579],{"align":131},"参数",[129,130581,135],{"align":131},[137,130583,130584,130591],{},[126,130585,130586,130588],{},[142,130587,130539],{"align":131},[142,130589,130590],{"align":131},"背景图像是随对象内容滚动",[126,130592,130593,130595],{},[142,130594,87809],{"align":131},[142,130596,130597],{"align":131},"背景图像固定",[43,130599,130601],{"id":130600},"_826-背景样式合写","8.2.6 背景样式合写",[58,130603,130605],{"className":60,"code":130604,"language":62,"meta":63,"style":63},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[65,130606,130607,130612,130618,130646],{"__ignoreMap":63},[68,130608,130609],{"class":70,"line":71},[68,130610,130611],{"class":74},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[68,130613,130614,130616],{"class":70,"line":78},[68,130615,82],{"class":81},[68,130617,86],{"class":85},[68,130619,130620,130622,130624,130626,130629,130631,130633,130635,130637,130640,130642,130644],{"class":70,"line":89},[68,130621,72191],{"class":92},[68,130623,96],{"class":85},[68,130625,62426],{"class":92},[68,130627,130628],{"class":92}," url",[68,130630,997],{"class":85},[68,130632,130217],{"class":6815},[68,130634,15311],{"class":85},[68,130636,63320],{"class":92},[68,130638,130639],{"class":92}," fixed",[68,130641,18739],{"class":92},[68,130643,130386],{"class":92},[68,130645,112],{"class":85},[68,130647,130648],{"class":70,"line":115},[68,130649,118],{"class":85},[43,130651,130653],{"id":130652},"_827-背景色半透明","8.2.7 背景色半透明",[58,130655,130657],{"className":60,"code":130656,"language":62,"meta":63,"style":63},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[65,130658,130659,130665,130691],{"__ignoreMap":63},[68,130660,130661,130663],{"class":70,"line":71},[68,130662,82],{"class":81},[68,130664,86],{"class":85},[68,130666,130667,130669,130671,130673,130675,130677,130679,130681,130683,130685,130687,130689],{"class":70,"line":78},[68,130668,72191],{"class":92},[68,130670,96],{"class":85},[68,130672,56694],{"class":92},[68,130674,997],{"class":85},[68,130676,600],{"class":92},[68,130678,1002],{"class":85},[68,130680,600],{"class":92},[68,130682,1002],{"class":85},[68,130684,600],{"class":92},[68,130686,1002],{"class":85},[68,130688,1137],{"class":92},[68,130690,1016],{"class":85},[68,130692,130693],{"class":70,"line":89},[68,130694,118],{"class":85},[19,130696,100971],{},[19,130698,130699],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130701,130702],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130704,130705],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130707,130708],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[43,130710,130712],{"id":130711},"_828-总结","8.2.8 总结",[120,130714,130715,130725],{},[123,130716,130717],{},[126,130718,130719,130721,130723],{},[129,130720,132],{"align":131},[129,130722,135],{"align":131},[129,130724,1029],{"align":131},[137,130726,130727,130738,130749,130760,130771,130782,130793],{},[126,130728,130729,130732,130735],{},[142,130730,130731],{"align":131},"background-color",[142,130733,130734],{"align":131},"背景颜色",[142,130736,130737],{"align":131},"预定义的颜色值\u002F十六进制\u002FRGB代码",[126,130739,130740,130743,130746],{},[142,130741,130742],{"align":131},"background-image",[142,130744,130745],{"align":131},"背景图片",[142,130747,130748],{"align":131},"url(图片路径)",[126,130750,130751,130754,130757],{},[142,130752,130753],{"align":131},"background-repeat",[142,130755,130756],{"align":131},"是否平铺",[142,130758,130759],{"align":131},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[126,130761,130762,130765,130768],{},[142,130763,130764],{"align":131},"background-position",[142,130766,130767],{"align":131},"背景位置",[142,130769,130770],{"align":131},"length\u002Fposition 分别是x和y坐标",[126,130772,130773,130776,130779],{},[142,130774,130775],{"align":131},"background-attachment",[142,130777,130778],{"align":131},"背景附着",[142,130780,130781],{"align":131},"scroll(背景滚动) \u002Ffixed (背景固定)",[126,130783,130784,130787,130790],{},[142,130785,130786],{"align":131},"背景简写",[142,130788,130789],{"align":131},"书写更简单",[142,130791,130792],{"align":131},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[126,130794,130795,130798,130801],{},[142,130796,130797],{"align":131},"背景半透明",[142,130799,130800],{"align":131},"背景颜色半透明",[142,130802,130803],{"align":131},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130805,130806],{},"颜色渐变：",[38,130808],{"style":40,"src":130809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[38,130811],{"style":40,"src":130812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[43,130814,130816],{"id":130815},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[58,130818,130820],{"className":847,"code":130819,"language":849,"meta":63,"style":63},"\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",[65,130821,130822,130837,130856,130875,130894,130913,130932],{"__ignoreMap":63},[68,130823,130824,130826,130828,130830,130832,130835],{"class":70,"line":71},[68,130825,861],{"class":85},[68,130827,82],{"class":81},[68,130829,866],{"class":587},[68,130831,869],{"class":85},[68,130833,130834],{"class":872},"\"nav\"",[68,130836,876],{"class":85},[68,130838,130839,130841,130843,130845,130847,130849,130852,130854],{"class":70,"line":78},[68,130840,53729],{"class":85},[68,130842,1974],{"class":81},[68,130844,62641],{"class":587},[68,130846,869],{"class":85},[68,130848,62646],{"class":872},[68,130850,130851],{"class":85},">五彩导航1\u003C\u002F",[68,130853,1974],{"class":81},[68,130855,876],{"class":85},[68,130857,130858,130860,130862,130864,130866,130868,130871,130873],{"class":70,"line":89},[68,130859,53729],{"class":85},[68,130861,1974],{"class":81},[68,130863,62641],{"class":587},[68,130865,869],{"class":85},[68,130867,62646],{"class":872},[68,130869,130870],{"class":85},">五彩导航2\u003C\u002F",[68,130872,1974],{"class":81},[68,130874,876],{"class":85},[68,130876,130877,130879,130881,130883,130885,130887,130890,130892],{"class":70,"line":115},[68,130878,53729],{"class":85},[68,130880,1974],{"class":81},[68,130882,62641],{"class":587},[68,130884,869],{"class":85},[68,130886,62646],{"class":872},[68,130888,130889],{"class":85},">五彩导航3\u003C\u002F",[68,130891,1974],{"class":81},[68,130893,876],{"class":85},[68,130895,130896,130898,130900,130902,130904,130906,130909,130911],{"class":70,"line":280},[68,130897,53729],{"class":85},[68,130899,1974],{"class":81},[68,130901,62641],{"class":587},[68,130903,869],{"class":85},[68,130905,62646],{"class":872},[68,130907,130908],{"class":85},">五彩导航4\u003C\u002F",[68,130910,1974],{"class":81},[68,130912,876],{"class":85},[68,130914,130915,130917,130919,130921,130923,130925,130928,130930],{"class":70,"line":301},[68,130916,53729],{"class":85},[68,130918,1974],{"class":81},[68,130920,62641],{"class":587},[68,130922,869],{"class":85},[68,130924,62646],{"class":872},[68,130926,130927],{"class":85},">五彩导航5\u003C\u002F",[68,130929,1974],{"class":81},[68,130931,876],{"class":85},[68,130933,130934,130936,130938],{"class":70,"line":320},[68,130935,886],{"class":85},[68,130937,82],{"class":81},[68,130939,876],{"class":85},[58,130941,130943],{"className":60,"code":130942,"language":62,"meta":63,"style":63},".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",[65,130944,130945,130954,130964,130976,130988,130998,131010,131020,131024,131049,131072,131095,131118],{"__ignoreMap":63},[68,130946,130947,130950,130952],{"class":70,"line":71},[68,130948,130949],{"class":587},".nav",[68,130951,3002],{"class":81},[68,130953,86],{"class":85},[68,130955,130956,130958,130960,130962],{"class":70,"line":78},[68,130957,129735],{"class":92},[68,130959,96],{"class":85},[68,130961,73962],{"class":92},[68,130963,112],{"class":85},[68,130965,130966,130968,130970,130972,130974],{"class":70,"line":89},[68,130967,72149],{"class":92},[68,130969,96],{"class":85},[68,130971,2553],{"class":92},[68,130973,103],{"class":102},[68,130975,112],{"class":85},[68,130977,130978,130980,130982,130984,130986],{"class":70,"line":115},[68,130979,72368],{"class":92},[68,130981,96],{"class":85},[68,130983,2592],{"class":92},[68,130985,103],{"class":102},[68,130987,112],{"class":85},[68,130989,130990,130992,130994,130996],{"class":70,"line":280},[68,130991,72107],{"class":92},[68,130993,96],{"class":85},[68,130995,53179],{"class":92},[68,130997,112],{"class":85},[68,130999,131000,131002,131004,131006,131008],{"class":70,"line":301},[68,131001,128805],{"class":92},[68,131003,96],{"class":85},[68,131005,2592],{"class":92},[68,131007,103],{"class":102},[68,131009,112],{"class":85},[68,131011,131012,131014,131016,131018],{"class":70,"line":320},[68,131013,72484],{"class":92},[68,131015,96],{"class":85},[68,131017,62426],{"class":92},[68,131019,112],{"class":85},[68,131021,131022],{"class":70,"line":2915},[68,131023,118],{"class":85},[68,131025,131026,131028,131030,131033,131035,131037,131040,131042,131044,131046],{"class":70,"line":2921},[68,131027,130949],{"class":587},[68,131029,3002],{"class":81},[68,131031,131032],{"class":587},":nth-child",[68,131034,997],{"class":85},[68,131036,99],{"class":92},[68,131038,131039],{"class":85},") { ",[68,131041,130731],{"class":92},[68,131043,96],{"class":85},[68,131045,130150],{"class":92},[68,131047,131048],{"class":85},"; }\n",[68,131050,131051,131053,131055,131057,131059,131061,131063,131065,131067,131070],{"class":70,"line":2933},[68,131052,130949],{"class":587},[68,131054,3002],{"class":81},[68,131056,131032],{"class":587},[68,131058,997],{"class":85},[68,131060,267],{"class":92},[68,131062,131039],{"class":85},[68,131064,130731],{"class":92},[68,131066,96],{"class":85},[68,131068,131069],{"class":92},"#ff0000",[68,131071,131048],{"class":85},[68,131073,131074,131076,131078,131080,131082,131084,131086,131088,131090,131093],{"class":70,"line":3214},[68,131075,130949],{"class":587},[68,131077,3002],{"class":81},[68,131079,131032],{"class":587},[68,131081,997],{"class":85},[68,131083,288],{"class":92},[68,131085,131039],{"class":85},[68,131087,130731],{"class":92},[68,131089,96],{"class":85},[68,131091,131092],{"class":92},"#00a4ff",[68,131094,131048],{"class":85},[68,131096,131097,131099,131101,131103,131105,131107,131109,131111,131113,131116],{"class":70,"line":3219},[68,131098,130949],{"class":587},[68,131100,3002],{"class":81},[68,131102,131032],{"class":587},[68,131104,997],{"class":85},[68,131106,2029],{"class":92},[68,131108,131039],{"class":85},[68,131110,130731],{"class":92},[68,131112,96],{"class":85},[68,131114,131115],{"class":92},"#ff00ff",[68,131117,131048],{"class":85},[68,131119,131120,131122,131124,131126,131128,131130,131132,131134,131136,131139],{"class":70,"line":3225},[68,131121,130949],{"class":587},[68,131123,3002],{"class":81},[68,131125,131032],{"class":587},[68,131127,997],{"class":85},[68,131129,2055],{"class":92},[68,131131,131039],{"class":85},[68,131133,130731],{"class":92},[68,131135,96],{"class":85},[68,131137,131138],{"class":92},"#00ff00",[68,131140,131048],{"class":85},[14,131142,131144],{"id":131143},"_83-css三大特性","8.3 css三大特性",[43,131146,131148],{"id":131147},"_831-层叠性","8.3.1 层叠性",[19,131150,131151],{},"为了解决样式冲突问题",[19,131153,131154],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131156,131157],{},"   ②样式不冲突，不会层叠",[43,131159,131161],{"id":131160},"_832-继承性","8.3.2 继承性",[19,131163,131164],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131166,131167],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[58,131169,131171],{"className":60,"code":131170,"language":62,"meta":63,"style":63},"p {\n  color: #333;\n}\n",[65,131172,131173,131179,131189],{"__ignoreMap":63},[68,131174,131175,131177],{"class":70,"line":71},[68,131176,19],{"class":81},[68,131178,86],{"class":85},[68,131180,131181,131183,131185,131187],{"class":70,"line":78},[68,131182,72484],{"class":92},[68,131184,96],{"class":85},[68,131186,63952],{"class":92},[68,131188,112],{"class":85},[68,131190,131191],{"class":70,"line":89},[68,131192,118],{"class":85},[38,131194],{"style":40,"src":131195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131197,131198],{},"解释：①行高可以跟单位也可以不跟单位",[19,131200,131201],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131203,131204],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131206,131207],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[43,131209,131211],{"id":131210},"_833-优先级","8.3.3 优先级",[48,131213,131214,131217],{},[51,131215,131216],{},"选择器相同，则执行层叠性",[51,131218,131219],{},"选择器不同，则根据选择器权重执行",[120,131221,131222,131232],{},[123,131223,131224],{},[126,131225,131226,131229],{},[129,131227,131228],{"align":131},"选择器",[129,131230,131231],{"align":131},"选择器权重",[137,131233,131234,131242,131250,131258,131266,131274],{},[126,131235,131236,131239],{},[142,131237,131238],{"align":131},"继承 或者*",[142,131240,131241],{"align":131},"0，0，0，0",[126,131243,131244,131247],{},[142,131245,131246],{"align":131},"标签选择器",[142,131248,131249],{"align":131},"0，0，0，1",[126,131251,131252,131255],{},[142,131253,131254],{"align":131},"类选择器，伪类选择器",[142,131256,131257],{"align":131},"0，0，1，0",[126,131259,131260,131263],{},[142,131261,131262],{"align":131},"ID选择器",[142,131264,131265],{"align":131},"0，1，0，0",[126,131267,131268,131271],{},[142,131269,131270],{"align":131},"行内样式",[142,131272,131273],{"align":131},"1，0，0，0",[126,131275,131276,131279],{},[142,131277,131278],{"align":131},"！important",[142,131280,131281],{"align":131},"无穷大",[19,131283,131284],{},"! important用法：",[58,131286,131288],{"className":60,"code":131287,"language":62,"meta":63,"style":63},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[65,131289,131290,131295,131301,131314,131318,131323,131329,131339],{"__ignoreMap":63},[68,131291,131292],{"class":70,"line":71},[68,131293,131294],{"class":74},"\u002F* !important 拥有最高优先级 *\u002F\n",[68,131296,131297,131299],{"class":70,"line":78},[68,131298,82],{"class":81},[68,131300,86],{"class":85},[68,131302,131303,131305,131307,131309,131312],{"class":70,"line":89},[68,131304,72484],{"class":92},[68,131306,96],{"class":85},[68,131308,53231],{"class":92},[68,131310,131311],{"class":102}," !important",[68,131313,112],{"class":85},[68,131315,131316],{"class":70,"line":115},[68,131317,118],{"class":85},[68,131319,131320],{"class":70,"line":280},[68,131321,131322],{"class":74},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[68,131324,131325,131327],{"class":70,"line":301},[68,131326,82],{"class":81},[68,131328,86],{"class":85},[68,131330,131331,131333,131335,131337],{"class":70,"line":320},[68,131332,72484],{"class":92},[68,131334,96],{"class":85},[68,131336,59005],{"class":92},[68,131338,112],{"class":85},[68,131340,131341],{"class":70,"line":2915},[68,131342,118],{"class":85},[19,131344,131345],{},"优先级注意点：",[19,131347,131348],{},"①权重是有4组数字组成,但是不会有进位",[19,131350,131351],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131353,131354],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131356,131357],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131359,131360],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131362,131363],{},"⑥复合选择器",[120,131365,131366,131376],{},[123,131367,131368],{},[126,131369,131370,131373],{},[129,131371,131372],{"align":131},"div ul li",[129,131374,131375],{"align":131},"0,0,0,3",[137,131377,131378,131386,131394],{},[126,131379,131380,131383],{},[142,131381,131382],{"align":131},".nav ul li",[142,131384,131385],{"align":131},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[126,131387,131388,131391],{},[142,131389,131390],{"align":131},"a:hover",[142,131392,131393],{"align":131},"0,0,1,1",[126,131395,131396,131399],{},[142,131397,131398],{"align":131},".nav a",[142,131400,131393],{"align":131},[1652,131402,131403],{},"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":63,"searchDepth":78,"depth":78,"links":131405},[131406,131414,131425],{"id":129515,"depth":78,"text":129516,"children":131407},[131408,131409,131410,131411,131412,131413],{"id":129528,"depth":89,"text":129529},{"id":129600,"depth":89,"text":129601},{"id":129672,"depth":89,"text":129673},{"id":129703,"depth":89,"text":129704},{"id":129710,"depth":89,"text":129711},{"id":129863,"depth":89,"text":129864},{"id":130171,"depth":78,"text":130172,"children":131415},[131416,131417,131418,131419,131420,131421,131422,131423,131424],{"id":130178,"depth":89,"text":130179},{"id":130188,"depth":89,"text":130189},{"id":130284,"depth":89,"text":130285},{"id":130357,"depth":89,"text":130358},{"id":130512,"depth":89,"text":130513},{"id":130600,"depth":89,"text":130601},{"id":130652,"depth":89,"text":130653},{"id":130711,"depth":89,"text":130712},{"id":130815,"depth":89,"text":130816},{"id":131143,"depth":78,"text":131144,"children":131426},[131427,131428,131429],{"id":131147,"depth":89,"text":131148},{"id":131160,"depth":89,"text":131161},{"id":131210,"depth":89,"text":131211},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129507,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":4,"title":5,"body":131436,"description":1676,"extension":1677,"meta":132785,"navigation":1679,"path":1680,"seo":132786,"stem":1682,"__hash__":1683},{"type":7,"value":131437,"toc":132764},[131438,131440,131442,131444,131446,131448,131450,131452,131454,131456,131458,131464,131498,131528,131530,131540,131544,131578,131580,131662,131666,131668,131696,131698,131702,131708,131710,131716,131752,131788,131792,131794,131796,131798,131800,131802,131804,131806,131808,131810,131814,131850,131854,131856,131858,131890,131894,131896,131898,131900,131902,131934,131936,131938,131940,131972,131974,131976,131978,131980,131982,132014,132016,132018,132032,132034,132040,132042,132044,132048,132050,132082,132086,132088,132122,132124,132128,132130,132132,132162,132164,132176,132180,132230,132278,132282,132334,132370,132372,132374,132376,132378,132384,132386,132388,132396,132400,132444,132474,132476,132478,132480,132482,132526,132528,132530,132532,132534,132536,132538,132582,132584,132586,132588,132590,132592,132594,132598,132600,132644,132646,132648,132650,132652,132654,132698,132700,132702,132704,132706,132708,132738,132740,132742,132744,132746,132752,132754,132756,132758,132760,132762],[10,131439,5],{"id":12},[14,131441,17],{"id":16},[19,131443,21],{},[19,131445,24],{},[19,131447,27],{},[19,131449,30],{},[19,131451,33],{},[19,131453,36],{},[38,131455],{"style":40,"src":41},[43,131457,46],{"id":45},[48,131459,131460,131462],{},[51,131461,53],{},[51,131463,56],{},[58,131465,131466],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,131467,131468,131472,131478,131494],{"__ignoreMap":63},[68,131469,131470],{"class":70,"line":71},[68,131471,75],{"class":74},[68,131473,131474,131476],{"class":70,"line":78},[68,131475,82],{"class":81},[68,131477,86],{"class":85},[68,131479,131480,131482,131484,131486,131488,131490,131492],{"class":70,"line":89},[68,131481,93],{"class":92},[68,131483,96],{"class":85},[68,131485,99],{"class":92},[68,131487,103],{"class":102},[68,131489,106],{"class":92},[68,131491,109],{"class":92},[68,131493,112],{"class":85},[68,131495,131496],{"class":70,"line":115},[68,131497,118],{"class":85},[120,131499,131500,131508],{},[123,131501,131502],{},[126,131503,131504,131506],{},[129,131505,132],{"align":131},[129,131507,135],{"align":131},[137,131509,131510,131516,131522],{},[126,131511,131512,131514],{},[142,131513,144],{"align":131},[142,131515,147],{"align":131},[126,131517,131518,131520],{},[142,131519,152],{"align":131},[142,131521,155],{"align":131},[126,131523,131524,131526],{},[142,131525,160],{"align":131},[142,131527,163],{"align":131},[19,131529,166],{},[168,131531,131532,131534,131536,131538],{},[51,131533,172],{},[51,131535,175],{},[51,131537,178],{},[51,131539,181],{},[48,131541,131542],{"start":89},[51,131543,186],{},[58,131545,131546],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,131547,131548,131552,131558,131574],{"__ignoreMap":63},[68,131549,131550],{"class":70,"line":71},[68,131551,75],{"class":74},[68,131553,131554,131556],{"class":70,"line":78},[68,131555,82],{"class":81},[68,131557,86],{"class":85},[68,131559,131560,131562,131564,131566,131568,131570,131572],{"class":70,"line":89},[68,131561,93],{"class":92},[68,131563,96],{"class":85},[68,131565,99],{"class":92},[68,131567,103],{"class":102},[68,131569,106],{"class":92},[68,131571,109],{"class":92},[68,131573,112],{"class":85},[68,131575,131576],{"class":70,"line":115},[68,131577,118],{"class":85},[19,131579,223],{},[58,131581,131582],{"className":60,"code":226,"language":62,"meta":63,"style":63},[65,131583,131584,131588,131594,131610,131626,131642,131658],{"__ignoreMap":63},[68,131585,131586],{"class":70,"line":71},[68,131587,233],{"class":74},[68,131589,131590,131592],{"class":70,"line":78},[68,131591,82],{"class":81},[68,131593,86],{"class":85},[68,131595,131596,131598,131600,131602,131604,131606,131608],{"class":70,"line":89},[68,131597,244],{"class":92},[68,131599,96],{"class":85},[68,131601,99],{"class":92},[68,131603,103],{"class":102},[68,131605,106],{"class":92},[68,131607,255],{"class":92},[68,131609,112],{"class":85},[68,131611,131612,131614,131616,131618,131620,131622,131624],{"class":70,"line":115},[68,131613,262],{"class":92},[68,131615,96],{"class":85},[68,131617,267],{"class":92},[68,131619,103],{"class":102},[68,131621,272],{"class":92},[68,131623,275],{"class":92},[68,131625,112],{"class":85},[68,131627,131628,131630,131632,131634,131636,131638,131640],{"class":70,"line":280},[68,131629,283],{"class":92},[68,131631,96],{"class":85},[68,131633,288],{"class":92},[68,131635,103],{"class":102},[68,131637,293],{"class":92},[68,131639,296],{"class":92},[68,131641,112],{"class":85},[68,131643,131644,131646,131648,131650,131652,131654,131656],{"class":70,"line":301},[68,131645,304],{"class":92},[68,131647,96],{"class":85},[68,131649,99],{"class":92},[68,131651,103],{"class":102},[68,131653,106],{"class":92},[68,131655,315],{"class":92},[68,131657,112],{"class":85},[68,131659,131660],{"class":70,"line":320},[68,131661,118],{"class":85},[48,131663,131664],{"start":115},[51,131665,327],{},[19,131667,330],{},[58,131669,131670],{"className":60,"code":333,"language":62,"meta":63,"style":63},[65,131671,131672,131676,131682,131692],{"__ignoreMap":63},[68,131673,131674],{"class":70,"line":71},[68,131675,340],{"class":74},[68,131677,131678,131680],{"class":70,"line":78},[68,131679,120],{"class":81},[68,131681,86],{"class":85},[68,131683,131684,131686,131688,131690],{"class":70,"line":89},[68,131685,351],{"class":92},[68,131687,96],{"class":85},[68,131689,356],{"class":92},[68,131691,112],{"class":85},[68,131693,131694],{"class":70,"line":115},[68,131695,118],{"class":85},[19,131697,365],{},[48,131699,131700],{"start":280},[51,131701,370],{},[168,131703,131704,131706],{},[51,131705,375],{},[51,131707,378],{},[43,131709,382],{"id":381},[48,131711,131712,131714],{},[51,131713,387],{},[51,131715,56],{},[120,131717,131718,131726],{},[123,131719,131720],{},[126,131721,131722,131724],{},[129,131723,398],{"align":131},[129,131725,401],{"align":131},[137,131727,131728,131734,131740,131746],{},[126,131729,131730,131732],{},[142,131731,408],{"align":131},[142,131733,411],{"align":131},[126,131735,131736,131738],{},[142,131737,416],{"align":131},[142,131739,419],{"align":131},[126,131741,131742,131744],{},[142,131743,424],{"align":131},[142,131745,427],{"align":131},[126,131747,131748,131750],{},[142,131749,432],{"align":131},[142,131751,435],{"align":131},[120,131753,131754,131762],{},[123,131755,131756],{},[126,131757,131758,131760],{},[129,131759,132],{"align":131},[129,131761,135],{"align":131},[137,131763,131764,131770,131776,131782],{},[126,131765,131766,131768],{},[142,131767,452],{"align":131},[142,131769,455],{"align":131},[126,131771,131772,131774],{},[142,131773,460],{"align":131},[142,131775,463],{"align":131},[126,131777,131778,131780],{},[142,131779,468],{"align":131},[142,131781,471],{"align":131},[126,131783,131784,131786],{},[142,131785,476],{"align":131},[142,131787,479],{"align":131},[48,131789,131790],{"start":89},[51,131791,484],{},[19,131793,487],{},[19,131795,490],{},[19,131797,493],{},[19,131799,496],{},[19,131801,499],{},[19,131803,502],{},[19,131805,505],{},[19,131807,508],{},[43,131809,512],{"id":511},[48,131811,131812],{},[51,131813,517],{},[120,131815,131816,131824],{},[123,131817,131818],{},[126,131819,131820,131822],{},[129,131821,132],{"align":131},[129,131823,135],{"align":131},[137,131825,131826,131832,131838,131844],{},[126,131827,131828,131830],{},[142,131829,534],{"align":131},[142,131831,537],{"align":131},[126,131833,131834,131836],{},[142,131835,542],{"align":131},[142,131837,545],{"align":131},[126,131839,131840,131842],{},[142,131841,550],{"align":131},[142,131843,553],{"align":131},[126,131845,131846,131848],{},[142,131847,558],{"align":131},[142,131849,561],{"align":131},[48,131851,131852],{"start":78},[51,131853,566],{},[19,131855,569],{},[19,131857,572],{},[58,131859,131860],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,131861,131862,131866,131872,131886],{"__ignoreMap":63},[68,131863,131864],{"class":70,"line":71},[68,131865,582],{"class":74},[68,131867,131868,131870],{"class":70,"line":78},[68,131869,588],{"class":587},[68,131871,86],{"class":85},[68,131873,131874,131876,131878,131880,131882,131884],{"class":70,"line":89},[68,131875,595],{"class":92},[68,131877,96],{"class":85},[68,131879,600],{"class":92},[68,131881,603],{"class":92},[68,131883,606],{"class":85},[68,131885,609],{"class":74},[68,131887,131888],{"class":70,"line":115},[68,131889,118],{"class":85},[48,131891,131892],{"start":89},[51,131893,618],{},[19,131895,621],{},[38,131897],{"style":40,"src":624},[19,131899,627],{},[19,131901,630],{},[58,131903,131904],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,131905,131906,131910,131916,131930],{"__ignoreMap":63},[68,131907,131908],{"class":70,"line":71},[68,131909,582],{"class":74},[68,131911,131912,131914],{"class":70,"line":78},[68,131913,588],{"class":587},[68,131915,86],{"class":85},[68,131917,131918,131920,131922,131924,131926,131928],{"class":70,"line":89},[68,131919,595],{"class":92},[68,131921,96],{"class":85},[68,131923,600],{"class":92},[68,131925,603],{"class":92},[68,131927,606],{"class":85},[68,131929,609],{"class":74},[68,131931,131932],{"class":70,"line":115},[68,131933,118],{"class":85},[19,131935,665],{},[19,131937,668],{},[38,131939],{"style":40,"src":671},[58,131941,131942],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,131943,131944,131948,131954,131968],{"__ignoreMap":63},[68,131945,131946],{"class":70,"line":71},[68,131947,582],{"class":74},[68,131949,131950,131952],{"class":70,"line":78},[68,131951,588],{"class":587},[68,131953,86],{"class":85},[68,131955,131956,131958,131960,131962,131964,131966],{"class":70,"line":89},[68,131957,595],{"class":92},[68,131959,96],{"class":85},[68,131961,600],{"class":92},[68,131963,603],{"class":92},[68,131965,606],{"class":85},[68,131967,609],{"class":74},[68,131969,131970],{"class":70,"line":115},[68,131971,118],{"class":85},[38,131973],{"style":40,"src":706},[19,131975,709],{},[19,131977,712],{},[43,131979,716],{"id":715},[19,131981,719],{},[58,131983,131984],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,131985,131986,131990,131996,132010],{"__ignoreMap":63},[68,131987,131988],{"class":70,"line":71},[68,131989,582],{"class":74},[68,131991,131992,131994],{"class":70,"line":78},[68,131993,588],{"class":587},[68,131995,86],{"class":85},[68,131997,131998,132000,132002,132004,132006,132008],{"class":70,"line":89},[68,131999,595],{"class":92},[68,132001,96],{"class":85},[68,132003,600],{"class":92},[68,132005,603],{"class":92},[68,132007,606],{"class":85},[68,132009,609],{"class":74},[68,132011,132012],{"class":70,"line":115},[68,132013,118],{"class":85},[19,132015,754],{},[43,132017,758],{"id":757},[168,132019,132020,132022,132024,132026,132028,132030],{},[51,132021,763],{},[51,132023,766],{},[51,132025,769],{},[51,132027,772],{},[51,132029,775],{},[51,132031,778],{},[38,132033],{"style":40,"src":781},[168,132035,132036,132038],{},[51,132037,786],{},[51,132039,789],{},[38,132041],{"style":40,"src":792},[43,132043,796],{"id":795},[48,132045,132046],{},[51,132047,801],{},[38,132049],{"style":40,"src":804},[58,132051,132052],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,132053,132054,132058,132064,132078],{"__ignoreMap":63},[68,132055,132056],{"class":70,"line":71},[68,132057,582],{"class":74},[68,132059,132060,132062],{"class":70,"line":78},[68,132061,588],{"class":587},[68,132063,86],{"class":85},[68,132065,132066,132068,132070,132072,132074,132076],{"class":70,"line":89},[68,132067,595],{"class":92},[68,132069,96],{"class":85},[68,132071,600],{"class":92},[68,132073,603],{"class":92},[68,132075,606],{"class":85},[68,132077,609],{"class":74},[68,132079,132080],{"class":70,"line":115},[68,132081,118],{"class":85},[48,132083,132084],{"start":78},[51,132085,841],{},[38,132087],{"style":40,"src":844},[58,132089,132090],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,132091,132092,132096,132110,132114],{"__ignoreMap":63},[68,132093,132094],{"class":70,"line":71},[68,132095,856],{"class":74},[68,132097,132098,132100,132102,132104,132106,132108],{"class":70,"line":78},[68,132099,861],{"class":85},[68,132101,82],{"class":81},[68,132103,866],{"class":587},[68,132105,869],{"class":85},[68,132107,873],{"class":872},[68,132109,876],{"class":85},[68,132111,132112],{"class":70,"line":89},[68,132113,881],{"class":85},[68,132115,132116,132118,132120],{"class":70,"line":115},[68,132117,886],{"class":85},[68,132119,82],{"class":81},[68,132121,876],{"class":85},[43,132123,894],{"id":893},[48,132125,132126],{},[51,132127,899],{},[19,132129,902],{},[38,132131],{"style":40,"src":905},[58,132133,132134],{"className":60,"code":908,"language":62,"meta":63,"style":63},[65,132135,132136,132142,132158],{"__ignoreMap":63},[68,132137,132138,132140],{"class":70,"line":71},[68,132139,82],{"class":81},[68,132141,86],{"class":85},[68,132143,132144,132146,132148,132150,132152,132154,132156],{"class":70,"line":78},[68,132145,93],{"class":92},[68,132147,96],{"class":85},[68,132149,99],{"class":92},[68,132151,103],{"class":102},[68,132153,106],{"class":92},[68,132155,109],{"class":92},[68,132157,112],{"class":85},[68,132159,132160],{"class":70,"line":89},[68,132161,118],{"class":85},[19,132163,939],{},[168,132165,132166,132168,132170,132172,132174],{},[51,132167,944],{},[51,132169,947],{},[51,132171,950],{},[51,132173,953],{},[51,132175,956],{},[48,132177,132178],{"start":78},[51,132179,961],{},[58,132181,132182],{"className":60,"code":964,"language":62,"meta":63,"style":63},[65,132183,132184,132190,132226],{"__ignoreMap":63},[68,132185,132186,132188],{"class":70,"line":71},[68,132187,82],{"class":81},[68,132189,86],{"class":85},[68,132191,132192,132194,132196,132198,132200,132202,132204,132206,132208,132210,132212,132214,132216,132218,132220,132222,132224],{"class":70,"line":78},[68,132193,977],{"class":92},[68,132195,96],{"class":85},[68,132197,600],{"class":92},[68,132199,984],{"class":92},[68,132201,103],{"class":102},[68,132203,989],{"class":92},[68,132205,103],{"class":102},[68,132207,994],{"class":92},[68,132209,997],{"class":85},[68,132211,600],{"class":92},[68,132213,1002],{"class":85},[68,132215,600],{"class":92},[68,132217,1002],{"class":85},[68,132219,600],{"class":92},[68,132221,1002],{"class":85},[68,132223,1013],{"class":92},[68,132225,1016],{"class":85},[68,132227,132228],{"class":70,"line":89},[68,132229,118],{"class":85},[120,132231,132232,132240],{},[123,132233,132234],{},[126,132235,132236,132238],{},[129,132237,1029],{"align":131},[129,132239,1032],{"align":131},[137,132241,132242,132248,132254,132260,132266,132272],{},[126,132243,132244,132246],{},[142,132245,1039],{"align":131},[142,132247,1042],{"align":131},[126,132249,132250,132252],{},[142,132251,1047],{"align":131},[142,132253,1050],{"align":131},[126,132255,132256,132258],{},[142,132257,1055],{"align":131},[142,132259,1058],{"align":131},[126,132261,132262,132264],{},[142,132263,1063],{"align":131},[142,132265,1066],{"align":131},[126,132267,132268,132270],{},[142,132269,1071],{"align":131},[142,132271,1074],{"align":131},[126,132273,132274,132276],{},[142,132275,1079],{"align":131},[142,132277,1082],{"align":131},[48,132279,132280],{"start":89},[51,132281,1087],{},[58,132283,132284],{"className":60,"code":1090,"language":62,"meta":63,"style":63},[65,132285,132286,132292,132330],{"__ignoreMap":63},[68,132287,132288,132290],{"class":70,"line":71},[68,132289,19],{"class":81},[68,132291,86],{"class":85},[68,132293,132294,132296,132298,132300,132302,132304,132306,132308,132310,132312,132314,132316,132318,132320,132322,132324,132326,132328],{"class":70,"line":78},[68,132295,1103],{"class":92},[68,132297,96],{"class":85},[68,132299,99],{"class":92},[68,132301,103],{"class":102},[68,132303,1112],{"class":92},[68,132305,103],{"class":102},[68,132307,984],{"class":92},[68,132309,103],{"class":102},[68,132311,994],{"class":92},[68,132313,997],{"class":85},[68,132315,600],{"class":92},[68,132317,1002],{"class":85},[68,132319,600],{"class":92},[68,132321,1002],{"class":85},[68,132323,600],{"class":92},[68,132325,1002],{"class":85},[68,132327,1137],{"class":92},[68,132329,1016],{"class":85},[68,132331,132332],{"class":70,"line":89},[68,132333,118],{"class":85},[120,132335,132336,132344],{},[123,132337,132338],{},[126,132339,132340,132342],{},[129,132341,1029],{"align":131},[129,132343,1032],{"align":131},[137,132345,132346,132352,132358,132364],{},[126,132347,132348,132350],{},[142,132349,1039],{"align":131},[142,132351,1042],{"align":131},[126,132353,132354,132356],{},[142,132355,1047],{"align":131},[142,132357,1168],{"align":131},[126,132359,132360,132362],{},[142,132361,1055],{"align":131},[142,132363,1175],{"align":131},[126,132365,132366,132368],{},[142,132367,1071],{"align":131},[142,132369,1074],{"align":131},[14,132371,1185],{"id":1184},[43,132373,1189],{"id":1188},[19,132375,1192],{},[43,132377,1196],{"id":1195},[48,132379,132380,132382],{},[51,132381,1201],{},[51,132383,1204],{},[19,132385,1207],{},[19,132387,1210],{},[168,132389,132390,132392,132394],{},[51,132391,1215],{},[51,132393,1218],{},[51,132395,1221],{},[48,132397,132398],{"start":89},[51,132399,1226],{},[58,132401,132402],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,132403,132404,132410,132420,132424,132430,132440],{"__ignoreMap":63},[68,132405,132406,132408],{"class":70,"line":71},[68,132407,1236],{"class":587},[68,132409,86],{"class":85},[68,132411,132412,132414,132416,132418],{"class":70,"line":78},[68,132413,1243],{"class":92},[68,132415,96],{"class":85},[68,132417,131],{"class":92},[68,132419,112],{"class":85},[68,132421,132422],{"class":70,"line":89},[68,132423,118],{"class":85},[68,132425,132426,132428],{"class":70,"line":115},[68,132427,1258],{"class":587},[68,132429,86],{"class":85},[68,132431,132432,132434,132436,132438],{"class":70,"line":280},[68,132433,1243],{"class":92},[68,132435,96],{"class":85},[68,132437,1269],{"class":92},[68,132439,112],{"class":85},[68,132441,132442],{"class":70,"line":301},[68,132443,118],{"class":85},[120,132445,132446,132454],{},[123,132447,132448],{},[126,132449,132450,132452],{},[129,132451,1284],{"align":131},[129,132453,1032],{"align":131},[137,132455,132456,132462,132468],{},[126,132457,132458,132460],{},[142,132459,131],{"align":131},[142,132461,1295],{"align":131},[126,132463,132464,132466],{},[142,132465,1269],{"align":131},[142,132467,1302],{"align":131},[126,132469,132470,132472],{},[142,132471,1307],{"align":131},[142,132473,1310],{"align":131},[19,132475,1313],{},[19,132477,1316],{},[19,132479,1319],{},[19,132481,1322],{},[58,132483,132484],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,132485,132486,132492,132502,132506,132512,132522],{"__ignoreMap":63},[68,132487,132488,132490],{"class":70,"line":71},[68,132489,1236],{"class":587},[68,132491,86],{"class":85},[68,132493,132494,132496,132498,132500],{"class":70,"line":78},[68,132495,1243],{"class":92},[68,132497,96],{"class":85},[68,132499,131],{"class":92},[68,132501,112],{"class":85},[68,132503,132504],{"class":70,"line":89},[68,132505,118],{"class":85},[68,132507,132508,132510],{"class":70,"line":115},[68,132509,1258],{"class":587},[68,132511,86],{"class":85},[68,132513,132514,132516,132518,132520],{"class":70,"line":280},[68,132515,1243],{"class":92},[68,132517,96],{"class":85},[68,132519,1269],{"class":92},[68,132521,112],{"class":85},[68,132523,132524],{"class":70,"line":301},[68,132525,118],{"class":85},[19,132527,1369],{},[19,132529,1372],{},[19,132531,1375],{},[19,132533,1378],{},[19,132535,1381],{},[19,132537,1384],{},[58,132539,132540],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,132541,132542,132548,132558,132562,132568,132578],{"__ignoreMap":63},[68,132543,132544,132546],{"class":70,"line":71},[68,132545,1236],{"class":587},[68,132547,86],{"class":85},[68,132549,132550,132552,132554,132556],{"class":70,"line":78},[68,132551,1243],{"class":92},[68,132553,96],{"class":85},[68,132555,131],{"class":92},[68,132557,112],{"class":85},[68,132559,132560],{"class":70,"line":89},[68,132561,118],{"class":85},[68,132563,132564,132566],{"class":70,"line":115},[68,132565,1258],{"class":587},[68,132567,86],{"class":85},[68,132569,132570,132572,132574,132576],{"class":70,"line":280},[68,132571,1243],{"class":92},[68,132573,96],{"class":85},[68,132575,1269],{"class":92},[68,132577,112],{"class":85},[68,132579,132580],{"class":70,"line":301},[68,132581,118],{"class":85},[19,132583,1431],{},[19,132585,1434],{},[19,132587,1437],{},[19,132589,1440],{},[19,132591,1443],{},[19,132593,1446],{},[19,132595,132596,1452],{},[1450,132597],{},[19,132599,1455],{},[58,132601,132602],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,132603,132604,132610,132620,132624,132630,132640],{"__ignoreMap":63},[68,132605,132606,132608],{"class":70,"line":71},[68,132607,1236],{"class":587},[68,132609,86],{"class":85},[68,132611,132612,132614,132616,132618],{"class":70,"line":78},[68,132613,1243],{"class":92},[68,132615,96],{"class":85},[68,132617,131],{"class":92},[68,132619,112],{"class":85},[68,132621,132622],{"class":70,"line":89},[68,132623,118],{"class":85},[68,132625,132626,132628],{"class":70,"line":115},[68,132627,1258],{"class":587},[68,132629,86],{"class":85},[68,132631,132632,132634,132636,132638],{"class":70,"line":280},[68,132633,1243],{"class":92},[68,132635,96],{"class":85},[68,132637,1269],{"class":92},[68,132639,112],{"class":85},[68,132641,132642],{"class":70,"line":301},[68,132643,118],{"class":85},[19,132645,1502],{},[19,132647,1505],{},[19,132649,1508],{},[19,132651,1511],{},[19,132653,1514],{},[58,132655,132656],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,132657,132658,132664,132674,132678,132684,132694],{"__ignoreMap":63},[68,132659,132660,132662],{"class":70,"line":71},[68,132661,1236],{"class":587},[68,132663,86],{"class":85},[68,132665,132666,132668,132670,132672],{"class":70,"line":78},[68,132667,1243],{"class":92},[68,132669,96],{"class":85},[68,132671,131],{"class":92},[68,132673,112],{"class":85},[68,132675,132676],{"class":70,"line":89},[68,132677,118],{"class":85},[68,132679,132680,132682],{"class":70,"line":115},[68,132681,1258],{"class":587},[68,132683,86],{"class":85},[68,132685,132686,132688,132690,132692],{"class":70,"line":280},[68,132687,1243],{"class":92},[68,132689,96],{"class":85},[68,132691,1269],{"class":92},[68,132693,112],{"class":85},[68,132695,132696],{"class":70,"line":301},[68,132697,118],{"class":85},[19,132699,1561],{},[19,132701,1505],{},[19,132703,1566],{},[14,132705,1570],{"id":1569},[43,132707,1574],{"id":1573},[120,132709,132710,132718],{},[123,132711,132712],{},[126,132713,132714,132716],{},[129,132715,1583],{"align":131},[129,132717,1586],{"align":131},[137,132719,132720,132726,132732],{},[126,132721,132722,132724],{},[142,132723,1593],{"align":131},[142,132725,1596],{"align":131},[126,132727,132728,132730],{},[142,132729,1601],{"align":131},[142,132731,1604],{"align":131},[126,132733,132734,132736],{},[142,132735,1609],{"align":131},[142,132737,1612],{"align":131},[43,132739,1616],{"id":1615},[19,132741,1619],{},[19,132743,1622],{},[43,132745,1626],{"id":1625},[168,132747,132748,132750],{},[51,132749,1631],{},[51,132751,1634],{},[43,132753,1638],{"id":1637},[19,132755,1641],{},[38,132757],{"style":40,"src":1644},[19,132759,1647],{},[38,132761],{"style":40,"src":1650},[1652,132763,1654],{},{"title":63,"searchDepth":78,"depth":78,"links":132765},[132766,132775,132779],{"id":16,"depth":78,"text":17,"children":132767},[132768,132769,132770,132771,132772,132773,132774],{"id":45,"depth":89,"text":46},{"id":381,"depth":89,"text":382},{"id":511,"depth":89,"text":512},{"id":715,"depth":89,"text":716},{"id":757,"depth":89,"text":758},{"id":795,"depth":89,"text":796},{"id":893,"depth":89,"text":894},{"id":1184,"depth":78,"text":1185,"children":132776},[132777,132778],{"id":1188,"depth":89,"text":1189},{"id":1195,"depth":89,"text":1196},{"id":1569,"depth":78,"text":1570,"children":132780},[132781,132782,132783,132784],{"id":1573,"depth":89,"text":1574},{"id":1615,"depth":89,"text":1616},{"id":1625,"depth":89,"text":1626},{"id":1637,"depth":89,"text":1638},{},{"title":5,"description":1676},{"id":132788,"title":132789,"body":132790,"description":1676,"extension":1677,"meta":133431,"navigation":1679,"path":133432,"seo":133433,"stem":133434,"__hash__":133435},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132791,"toc":133419},[132792,132795,132799,132825,132859,132863,132867,132870,132912,132919,132929,132937,132939,132942,132945,132948,132955,132969,132973,132976,133005,133009,133012,133026,133030,133033,133061,133065,133068,133094,133098,133103,133136,133141,133169,133173,133190,133236,133241,133285,133302,133409,133417],[10,132793,132789],{"id":132794},"_10-css规范与学成在线案例",[14,132796,132798],{"id":132797},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[48,132800,132801,132807,132813,132819],{},[51,132802,132803,132806],{},[1890,132804,132805],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[51,132808,132809,132812],{},[1890,132810,132811],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[51,132814,132815,132818],{},[1890,132816,132817],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[51,132820,132821,132824],{},[1890,132822,132823],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[58,132826,132827],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,132828,132829,132833,132839,132855],{"__ignoreMap":63},[68,132830,132831],{"class":70,"line":71},[68,132832,75],{"class":74},[68,132834,132835,132837],{"class":70,"line":78},[68,132836,82],{"class":81},[68,132838,86],{"class":85},[68,132840,132841,132843,132845,132847,132849,132851,132853],{"class":70,"line":89},[68,132842,93],{"class":92},[68,132844,96],{"class":85},[68,132846,99],{"class":92},[68,132848,103],{"class":102},[68,132850,106],{"class":92},[68,132852,109],{"class":92},[68,132854,112],{"class":85},[68,132856,132857],{"class":70,"line":115},[68,132858,118],{"class":85},[14,132860,132862],{"id":132861},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[43,132864,132866],{"id":132865},"_1021-header头部制作","10.2.1 header头部制作",[38,132868],{"style":40,"src":132869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[168,132871,132872,132879,132886,132892,132899,132906],{},[51,132873,132874,132875,132878],{},"1号是版心盒子 ",[1890,132876,132877],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[51,132880,132881,132882,132885],{},"版心盒子 里面包含 2号盒子 ",[1890,132883,132884],{},"logo"," 图标",[51,132887,132888,132889,132891],{},"版心盒子 里面包含 3号盒子 ",[1890,132890,55297],{}," 导航栏",[51,132893,132894,132895,132898],{},"版心盒子 里面包含 4号盒子 ",[1890,132896,132897],{},"search"," 搜索框",[51,132900,132901,132902,132905],{},"版心盒子 里面包含 5号盒子 ",[1890,132903,132904],{},"user"," 个人信息",[51,132907,132908,132909],{},"注意，要求里面的 ",[1890,132910,132911],{},"4个子盒子 必须都浮动",[48,132913,132914],{},[51,132915,132916],{},[1890,132917,132918],{},"导航栏注意点:",[19,132920,132921,132922,132925,132926],{},"实际开发中， ",[1890,132923,132924],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1890,132927,132928],{},"用 li 包含链接(li+a)的做法",[168,132930,132931,132934],{},[51,132932,132933],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[51,132935,132936],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132938,1210],{},[19,132940,132941],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132943,132944],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132946,132947],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[48,132949,132950],{"start":78},[51,132951,132952],{},[1890,132953,132954],{},"4号盒子search的细节：",[168,132956,132957,132960,132963],{},[51,132958,132959],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[51,132961,132962],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[51,132964,132965,132968],{},[65,132966,132967],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[43,132970,132972],{"id":132971},"_1022-banner制作","10.2.2 banner制作",[38,132974],{"style":40,"src":132975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[168,132977,132978,132985,132991,132998],{},[51,132979,132980,132981,132984],{},"1号盒子是通栏的大盒子 ",[1890,132982,132983],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[51,132986,132987,132988,132990],{},"2号盒子是版心 ",[1890,132989,2531],{}," ， 要水平居中对齐",[51,132992,132993,132994,132997],{},"3号盒子版心内，左对齐 ",[1890,132995,132996],{},"subnav"," 侧导航栏",[51,132999,133000,133001,133004],{},"4号盒子版心内，右对齐 ",[1890,133002,133003],{},"course"," 课程",[43,133006,133008],{"id":133007},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[38,133010],{"style":40,"src":133011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[168,133013,133014,133017,133020,133023],{},[51,133015,133016],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[51,133018,133019],{},"1号盒子是标题 H3 左侧浮动",[51,133021,133022],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[51,133024,133025],{},"3号盒子 右浮动 mod 修改",[43,133027,133029],{"id":133028},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[38,133031],{"style":40,"src":133032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[168,133034,133035,133041,133048,133055,133058],{},[51,133036,133037,133038,133040],{},"1号盒子为最大的盒子 ",[1890,133039,55298],{}," 版心水平居中对齐",[51,133042,133043,133044,133047],{},"2号盒子为上面部分 ",[1890,133045,133046],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[51,133049,133050,133051,133054],{},"3号盒子为底下部分 ",[1890,133052,133053],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[51,133056,133057],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[51,133059,133060],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[43,133062,133064],{"id":133063},"_1025-底部模块制作","10.2.5 底部模块制作",[38,133066],{"style":40,"src":133067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[168,133069,133070,133077,133080,133087],{},[51,133071,133072,133073,133076],{},"1号盒子通栏大盒子 底部 ",[1890,133074,133075],{},"footer"," 给高度 底色是白色",[51,133078,133079],{},"2号盒子版心水平居中",[51,133081,133082,133083,133086],{},"3号盒子版权 ",[1890,133084,133085],{},"copyright"," 左对齐",[51,133088,133089,133090,133093],{},"4号盒子 链接组 ",[1890,133091,133092],{},"links"," 右对齐",[43,133095,133097],{"id":133096},"_1026-代码模块","10.2.6 代码模块",[48,133099,133100],{},[51,133101,133102],{},"html部分",[58,133104,133106],{"className":847,"code":133105,"language":849,"meta":63,"style":63},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[65,133107,133108],{"__ignoreMap":63},[68,133109,133110,133112,133114,133116,133118,133121,133124,133126,133129,133132,133134],{"class":70,"line":71},[68,133111,861],{"class":85},[68,133113,1974],{"class":81},[68,133115,62641],{"class":587},[68,133117,869],{"class":85},[68,133119,133120],{"class":872},"\"https:\u002F\u002Fexample.com\"",[68,133122,133123],{"class":587}," target",[68,133125,869],{"class":85},[68,133127,133128],{"class":872},"\"_blank\"",[68,133130,133131],{"class":85},">链接文字\u003C\u002F",[68,133133,1974],{"class":81},[68,133135,876],{"class":85},[48,133137,133138],{"start":78},[51,133139,133140],{},"css部分",[58,133142,133143],{"className":847,"code":133105,"language":849,"meta":63,"style":63},[65,133144,133145],{"__ignoreMap":63},[68,133146,133147,133149,133151,133153,133155,133157,133159,133161,133163,133165,133167],{"class":70,"line":71},[68,133148,861],{"class":85},[68,133150,1974],{"class":81},[68,133152,62641],{"class":587},[68,133154,869],{"class":85},[68,133156,133120],{"class":872},[68,133158,133123],{"class":587},[68,133160,869],{"class":85},[68,133162,133128],{"class":872},[68,133164,133131],{"class":85},[68,133166,1974],{"class":81},[68,133168,876],{"class":85},[43,133170,133172],{"id":133171},"_1027-收获","10.2.7 收获",[48,133174,133175,133178,133181,133184,133187],{},[51,133176,133177],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[51,133179,133180],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[51,133182,133183],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[51,133185,133186],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[51,133188,133189],{},"遗忘代码",[58,133191,133193],{"className":60,"code":133192,"language":62,"meta":63,"style":63},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[65,133194,133195,133217,133222,133232],{"__ignoreMap":63},[68,133196,133197,133199,133201,133203,133205,133207,133209,133211,133213,133215],{"class":70,"line":71},[68,133198,82],{"class":81},[68,133200,1002],{"class":85},[68,133202,19],{"class":81},[68,133204,1002],{"class":85},[68,133206,10],{"class":81},[68,133208,1002],{"class":85},[68,133210,168],{"class":81},[68,133212,1002],{"class":85},[68,133214,51],{"class":81},[68,133216,86],{"class":85},[68,133218,133219],{"class":70,"line":78},[68,133220,133221],{"class":74},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[68,133223,133224,133226,133228,133230],{"class":70,"line":89},[68,133225,129735],{"class":92},[68,133227,96],{"class":85},[68,133229,62453],{"class":92},[68,133231,112],{"class":85},[68,133233,133234],{"class":70,"line":115},[68,133235,118],{"class":85},[48,133237,133238],{"start":301},[51,133239,133240],{},"html引css的程序",[58,133242,133243],{"className":60,"code":133192,"language":62,"meta":63,"style":63},[65,133244,133245,133267,133271,133281],{"__ignoreMap":63},[68,133246,133247,133249,133251,133253,133255,133257,133259,133261,133263,133265],{"class":70,"line":71},[68,133248,82],{"class":81},[68,133250,1002],{"class":85},[68,133252,19],{"class":81},[68,133254,1002],{"class":85},[68,133256,10],{"class":81},[68,133258,1002],{"class":85},[68,133260,168],{"class":81},[68,133262,1002],{"class":85},[68,133264,51],{"class":81},[68,133266,86],{"class":85},[68,133268,133269],{"class":70,"line":78},[68,133270,133221],{"class":74},[68,133272,133273,133275,133277,133279],{"class":70,"line":89},[68,133274,129735],{"class":92},[68,133276,96],{"class":85},[68,133278,62453],{"class":92},[68,133280,112],{"class":85},[68,133282,133283],{"class":70,"line":115},[68,133284,118],{"class":85},[48,133286,133287,133290,133293,133296,133299],{"start":320},[51,133288,133289],{},"浮动的盒子不会有外边距合并问题",[51,133291,133292],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[51,133294,133295],{},"ctrl+g快速定位行；shift+alt多个光标",[51,133297,133298],{},"学习上方各个模块的选择器起名方法，以后就这样用",[51,133300,133301],{},"在写选择器时尽量写全一些，例如",[58,133303,133305],{"className":60,"code":133304,"language":62,"meta":63,"style":63},"\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",[65,133306,133307,133312,133328,133333,133348,133353,133368,133373,133388,133393],{"__ignoreMap":63},[68,133308,133309],{"class":70,"line":71},[68,133310,133311],{"class":74},"\u002F* 静态定位（默认） *\u002F\n",[68,133313,133314,133317,133319,133321,133323,133326],{"class":70,"line":78},[68,133315,133316],{"class":587},".static",[68,133318,81384],{"class":85},[68,133320,130479],{"class":92},[68,133322,96],{"class":85},[68,133324,133325],{"class":92},"static",[68,133327,131048],{"class":85},[68,133329,133330],{"class":70,"line":89},[68,133331,133332],{"class":74},"\u002F* 相对定位 *\u002F\n",[68,133334,133335,133338,133340,133342,133344,133346],{"class":70,"line":115},[68,133336,133337],{"class":587},".relative",[68,133339,81384],{"class":85},[68,133341,130479],{"class":92},[68,133343,96],{"class":85},[68,133345,56348],{"class":92},[68,133347,131048],{"class":85},[68,133349,133350],{"class":70,"line":280},[68,133351,133352],{"class":74},"\u002F* 绝对定位 *\u002F\n",[68,133354,133355,133358,133360,133362,133364,133366],{"class":70,"line":301},[68,133356,133357],{"class":587},".absolute",[68,133359,81384],{"class":85},[68,133361,130479],{"class":92},[68,133363,96],{"class":85},[68,133365,56415],{"class":92},[68,133367,131048],{"class":85},[68,133369,133370],{"class":70,"line":320},[68,133371,133372],{"class":74},"\u002F* 固定定位 *\u002F\n",[68,133374,133375,133378,133380,133382,133384,133386],{"class":70,"line":2915},[68,133376,133377],{"class":587},".fixed",[68,133379,81384],{"class":85},[68,133381,130479],{"class":92},[68,133383,96],{"class":85},[68,133385,87809],{"class":92},[68,133387,131048],{"class":85},[68,133389,133390],{"class":70,"line":2921},[68,133391,133392],{"class":74},"\u002F* 粘性定位 *\u002F\n",[68,133394,133395,133398,133400,133402,133404,133407],{"class":70,"line":2933},[68,133396,133397],{"class":587},".sticky",[68,133399,81384],{"class":85},[68,133401,130479],{"class":92},[68,133403,96],{"class":85},[68,133405,133406],{"class":92},"sticky",[68,133408,131048],{"class":85},[48,133410,133411,133414],{"start":3219},[51,133412,133413],{},"一定要用好注释",[51,133415,133416],{},"浮动的盒子不会有外边距合并的问题",[1652,133418,1654],{},{"title":63,"searchDepth":78,"depth":78,"links":133420},[133421,133422],{"id":132797,"depth":78,"text":132798},{"id":132861,"depth":78,"text":132862,"children":133423},[133424,133425,133426,133427,133428,133429,133430],{"id":132865,"depth":89,"text":132866},{"id":132971,"depth":89,"text":132972},{"id":133007,"depth":89,"text":133008},{"id":133028,"depth":89,"text":133029},{"id":133063,"depth":89,"text":133064},{"id":133096,"depth":89,"text":133097},{"id":133171,"depth":89,"text":133172},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132789,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133437,"title":133438,"body":133439,"description":1676,"extension":1677,"meta":134925,"navigation":1679,"path":134926,"seo":134927,"stem":134928,"__hash__":134929},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133440,"toc":134917},[133441,133444,133448,133452,133463,133467,133484,133528,133561,133564,133581,133584,133587,133631,133635,133639,133642,133645,133649,133652,133663,133726,133767,133770,133785,133839,133847,133850,133861,133915,133941,133944,133957,134011,134043,134097,134120,134174,134177,134180,134187,134241,134262,134316,134319,134322,134407,134415,134472,134495,134499,134502,134520,134524,134543,134597,134635,134639,134642,134645,134667,134671,134679,134682,134687,134698,134701,134705,134719,134763,134766,134770,134773,134778,134804,134809,134886,134889,134893,134896,134899,134902,134905,134908,134911,134914],[10,133442,133438],{"id":133443},"_11-传统布局与定位体系",[14,133445,133447],{"id":133446},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[43,133449,133451],{"id":133450},"_1111-普通流标准流","11.1.1 普通流（标准流）",[168,133453,133454,133457,133460],{},[51,133455,133456],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[51,133458,133459],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[51,133461,133462],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[43,133464,133466],{"id":133465},"_1112-浮动","11.1.2 浮动",[168,133468,133469,133472,133475,133478,133481],{},[51,133470,133471],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[51,133473,133474],{},"浮动可以改变元素标签默认的排列方式",[51,133476,133477],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[51,133479,133480],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[51,133482,133483],{},"在使用行内块转换时盒子之间是有空隙的",[58,133485,133486],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,133487,133488,133494,133504,133508,133514,133524],{"__ignoreMap":63},[68,133489,133490,133492],{"class":70,"line":71},[68,133491,1236],{"class":587},[68,133493,86],{"class":85},[68,133495,133496,133498,133500,133502],{"class":70,"line":78},[68,133497,1243],{"class":92},[68,133499,96],{"class":85},[68,133501,131],{"class":92},[68,133503,112],{"class":85},[68,133505,133506],{"class":70,"line":89},[68,133507,118],{"class":85},[68,133509,133510,133512],{"class":70,"line":115},[68,133511,1258],{"class":587},[68,133513,86],{"class":85},[68,133515,133516,133518,133520,133522],{"class":70,"line":280},[68,133517,1243],{"class":92},[68,133519,96],{"class":85},[68,133521,1269],{"class":92},[68,133523,112],{"class":85},[68,133525,133526],{"class":70,"line":301},[68,133527,118],{"class":85},[120,133529,133530,133538],{},[123,133531,133532],{},[126,133533,133534,133536],{},[129,133535,1284],{"align":131},[129,133537,1032],{"align":131},[137,133539,133540,133547,133554],{},[126,133541,133542,133544],{},[142,133543,56321],{"align":131},[142,133545,133546],{"align":131},"元素不浮动（默认值）",[126,133548,133549,133551],{},[142,133550,131],{"align":131},[142,133552,133553],{"align":131},"元素向左浮动",[126,133555,133556,133558],{},[142,133557,1269],{"align":131},[142,133559,133560],{"align":131},"元素向右浮动",[19,133562,133563],{},"浮动重点：",[168,133565,133566,133569,133572,133575,133578],{},[51,133567,133568],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[51,133570,133571],{},"浮动的元素会一行内显示并且元素顶部对齐",[51,133573,133574],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[51,133576,133577],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[51,133579,133580],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133582,133583],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133585,133586],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[58,133588,133589],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,133590,133591,133597,133607,133611,133617,133627],{"__ignoreMap":63},[68,133592,133593,133595],{"class":70,"line":71},[68,133594,1236],{"class":587},[68,133596,86],{"class":85},[68,133598,133599,133601,133603,133605],{"class":70,"line":78},[68,133600,1243],{"class":92},[68,133602,96],{"class":85},[68,133604,131],{"class":92},[68,133606,112],{"class":85},[68,133608,133609],{"class":70,"line":89},[68,133610,118],{"class":85},[68,133612,133613,133615],{"class":70,"line":115},[68,133614,1258],{"class":587},[68,133616,86],{"class":85},[68,133618,133619,133621,133623,133625],{"class":70,"line":280},[68,133620,1243],{"class":92},[68,133622,96],{"class":85},[68,133624,1269],{"class":92},[68,133626,112],{"class":85},[68,133628,133629],{"class":70,"line":301},[68,133630,118],{"class":85},[43,133632,133634],{"id":133633},"_1113-定位","11.1.3 定位",[23593,133636,133638],{"id":133637},"_11131-使用场景","11.1.3.1 使用场景",[19,133640,133641],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133643,133644],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23593,133646,133648],{"id":133647},"_11132-定位组成","11.1.3.2 定位组成",[19,133650,133651],{},"定位 = 定位模式 + 边偏移",[48,133653,133654],{},[51,133655,133656,133659,133660],{},[1890,133657,133658],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1890,133661,133662],{},"定位模式",[58,133664,133666],{"className":60,"code":133665,"language":62,"meta":63,"style":63},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[65,133667,133668,133674,133688,133705,133722],{"__ignoreMap":63},[68,133669,133670,133672],{"class":70,"line":71},[68,133671,588],{"class":587},[68,133673,86],{"class":85},[68,133675,133676,133679,133681,133683,133685],{"class":70,"line":78},[68,133677,133678],{"class":92},"  position",[68,133680,96],{"class":85},[68,133682,56348],{"class":92},[68,133684,606],{"class":85},[68,133686,133687],{"class":74},"\u002F* 定位模式 *\u002F\n",[68,133689,133690,133693,133695,133697,133699,133702],{"class":70,"line":89},[68,133691,133692],{"class":92},"  top",[68,133694,96],{"class":85},[68,133696,2182],{"class":92},[68,133698,103],{"class":102},[68,133700,133701],{"class":85},";           ",[68,133703,133704],{"class":74},"\u002F* 边偏移：上 *\u002F\n",[68,133706,133707,133710,133712,133714,133716,133719],{"class":70,"line":115},[68,133708,133709],{"class":92},"  left",[68,133711,96],{"class":85},[68,133713,2436],{"class":92},[68,133715,103],{"class":102},[68,133717,133718],{"class":85},";          ",[68,133720,133721],{"class":74},"\u002F* 边偏移：左 *\u002F\n",[68,133723,133724],{"class":70,"line":280},[68,133725,118],{"class":85},[120,133727,133728,133737],{},[123,133729,133730],{},[126,133731,133732,133734],{},[129,133733,1029],{"align":131},[129,133735,133736],{"align":131},"语义",[137,133738,133739,133746,133753,133760],{},[126,133740,133741,133743],{},[142,133742,133325],{"align":131},[142,133744,133745],{"align":131},"静态定位",[126,133747,133748,133750],{},[142,133749,56348],{"align":131},[142,133751,133752],{"align":131},"相对定位",[126,133754,133755,133757],{},[142,133756,56415],{"align":131},[142,133758,133759],{"align":131},"绝对定位",[126,133761,133762,133764],{},[142,133763,87809],{"align":131},[142,133765,133766],{"align":131},"固定定位",[19,133768,133769],{},"（1）静态定位：",[168,133771,133772,133783],{},[51,133773,133774,133775,133778,133779,133782],{},"静态定位是元素的 ",[1890,133776,133777],{},"默认定位方式"," ， ",[1890,133780,133781],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[51,133784,6780],{},[58,133786,133787],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,133788,133789,133795,133807,133821,133835],{"__ignoreMap":63},[68,133790,133791,133793],{"class":70,"line":71},[68,133792,588],{"class":587},[68,133794,86],{"class":85},[68,133796,133797,133799,133801,133803,133805],{"class":70,"line":78},[68,133798,133678],{"class":92},[68,133800,96],{"class":85},[68,133802,56348],{"class":92},[68,133804,606],{"class":85},[68,133806,133687],{"class":74},[68,133808,133809,133811,133813,133815,133817,133819],{"class":70,"line":89},[68,133810,133692],{"class":92},[68,133812,96],{"class":85},[68,133814,2182],{"class":92},[68,133816,103],{"class":102},[68,133818,133701],{"class":85},[68,133820,133704],{"class":74},[68,133822,133823,133825,133827,133829,133831,133833],{"class":70,"line":115},[68,133824,133709],{"class":92},[68,133826,96],{"class":85},[68,133828,2436],{"class":92},[68,133830,103],{"class":102},[68,133832,133718],{"class":85},[68,133834,133721],{"class":74},[68,133836,133837],{"class":70,"line":280},[68,133838,118],{"class":85},[168,133840,133841,133844],{},[51,133842,133843],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[51,133845,133846],{},"静态定位在布局时我们几乎不用的",[19,133848,133849],{},"（2）相对定位",[168,133851,133852,133859],{},[51,133853,133854,133855,133858],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1890,133856,133857],{},"原来的位置"," 来说的（自恋型）",[51,133860,6780],{},[58,133862,133863],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,133864,133865,133871,133883,133897,133911],{"__ignoreMap":63},[68,133866,133867,133869],{"class":70,"line":71},[68,133868,588],{"class":587},[68,133870,86],{"class":85},[68,133872,133873,133875,133877,133879,133881],{"class":70,"line":78},[68,133874,133678],{"class":92},[68,133876,96],{"class":85},[68,133878,56348],{"class":92},[68,133880,606],{"class":85},[68,133882,133687],{"class":74},[68,133884,133885,133887,133889,133891,133893,133895],{"class":70,"line":89},[68,133886,133692],{"class":92},[68,133888,96],{"class":85},[68,133890,2182],{"class":92},[68,133892,103],{"class":102},[68,133894,133701],{"class":85},[68,133896,133704],{"class":74},[68,133898,133899,133901,133903,133905,133907,133909],{"class":70,"line":115},[68,133900,133709],{"class":92},[68,133902,96],{"class":85},[68,133904,2436],{"class":92},[68,133906,103],{"class":102},[68,133908,133718],{"class":85},[68,133910,133721],{"class":74},[68,133912,133913],{"class":70,"line":280},[68,133914,118],{"class":85},[168,133916,133917],{},[51,133918,133919,133920,133922,133923,133925,133926,133929,133930,133933,133934,133936,133937,133940],{},"相对定位的特点：",[55300,133921],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55300,133924],{},"  ② ",[1890,133927,133928],{},"原来"," 在标准流的 ",[1890,133931,133932],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55300,133935],{},"  ③因此， ",[1890,133938,133939],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133942,133943],{},"（3）绝对定位",[168,133945,133946,133955],{},[51,133947,133948,133950,133951,133954],{},[1890,133949,133759],{}," 是元素在移动位置的时候，是相对于它 ",[1890,133952,133953],{},"祖先元素"," 来说的（拼爹型）",[51,133956,6780],{},[58,133958,133959],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,133960,133961,133967,133979,133993,134007],{"__ignoreMap":63},[68,133962,133963,133965],{"class":70,"line":71},[68,133964,588],{"class":587},[68,133966,86],{"class":85},[68,133968,133969,133971,133973,133975,133977],{"class":70,"line":78},[68,133970,133678],{"class":92},[68,133972,96],{"class":85},[68,133974,56348],{"class":92},[68,133976,606],{"class":85},[68,133978,133687],{"class":74},[68,133980,133981,133983,133985,133987,133989,133991],{"class":70,"line":89},[68,133982,133692],{"class":92},[68,133984,96],{"class":85},[68,133986,2182],{"class":92},[68,133988,103],{"class":102},[68,133990,133701],{"class":85},[68,133992,133704],{"class":74},[68,133994,133995,133997,133999,134001,134003,134005],{"class":70,"line":115},[68,133996,133709],{"class":92},[68,133998,96],{"class":85},[68,134000,2436],{"class":92},[68,134002,103],{"class":102},[68,134004,133718],{"class":85},[68,134006,133721],{"class":74},[68,134008,134009],{"class":70,"line":280},[68,134010,118],{"class":85},[168,134012,134013,134028,134037,134040],{},[51,134014,134015,134016,134018,134019,134021,134022,134024,134025,134027],{},"绝对定位的特点：",[55300,134017],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55300,134020],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55300,134023],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55300,134026],{},"  (4)固定定位",[51,134029,134030,134032,134033,134036],{},[1890,134031,133766],{}," 是元素 ",[1890,134034,134035],{},"固定于浏览器可视区的位置"," 。（认死理型）",[51,134038,134039],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[51,134041,134042],{},"语法:",[58,134044,134045],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,134046,134047,134053,134065,134079,134093],{"__ignoreMap":63},[68,134048,134049,134051],{"class":70,"line":71},[68,134050,588],{"class":587},[68,134052,86],{"class":85},[68,134054,134055,134057,134059,134061,134063],{"class":70,"line":78},[68,134056,133678],{"class":92},[68,134058,96],{"class":85},[68,134060,56348],{"class":92},[68,134062,606],{"class":85},[68,134064,133687],{"class":74},[68,134066,134067,134069,134071,134073,134075,134077],{"class":70,"line":89},[68,134068,133692],{"class":92},[68,134070,96],{"class":85},[68,134072,2182],{"class":92},[68,134074,103],{"class":102},[68,134076,133701],{"class":85},[68,134078,133704],{"class":74},[68,134080,134081,134083,134085,134087,134089,134091],{"class":70,"line":115},[68,134082,133709],{"class":92},[68,134084,96],{"class":85},[68,134086,2436],{"class":92},[68,134088,103],{"class":102},[68,134090,133718],{"class":85},[68,134092,133721],{"class":74},[68,134094,134095],{"class":70,"line":280},[68,134096,118],{"class":85},[168,134098,134099,134108],{},[51,134100,134101,134102,134104,134105,134107],{},"特点:",[55300,134103],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55300,134106],{},"  ②固定定位不再占有原先的位置,完全脱标",[51,134109,134110,134111,134113,134114,134116,134117,134119],{},"固定在版心位置的方法:",[55300,134112],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55300,134115],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55300,134118],{},"  实例：",[58,134121,134122],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,134123,134124,134130,134142,134156,134170],{"__ignoreMap":63},[68,134125,134126,134128],{"class":70,"line":71},[68,134127,588],{"class":587},[68,134129,86],{"class":85},[68,134131,134132,134134,134136,134138,134140],{"class":70,"line":78},[68,134133,133678],{"class":92},[68,134135,96],{"class":85},[68,134137,56348],{"class":92},[68,134139,606],{"class":85},[68,134141,133687],{"class":74},[68,134143,134144,134146,134148,134150,134152,134154],{"class":70,"line":89},[68,134145,133692],{"class":92},[68,134147,96],{"class":85},[68,134149,2182],{"class":92},[68,134151,103],{"class":102},[68,134153,133701],{"class":85},[68,134155,133704],{"class":74},[68,134157,134158,134160,134162,134164,134166,134168],{"class":70,"line":115},[68,134159,133709],{"class":92},[68,134161,96],{"class":85},[68,134163,2436],{"class":92},[68,134165,103],{"class":102},[68,134167,133718],{"class":85},[68,134169,133721],{"class":74},[68,134171,134172],{"class":70,"line":280},[68,134173,118],{"class":85},[38,134175],{"style":40,"src":134176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134178,134179],{},"(5)粘性定位",[168,134181,134182,134185],{},[51,134183,134184],{},"粘性定位可以被认为是相对定位和固定定位的混合",[51,134186,6780],{},[58,134188,134189],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,134190,134191,134197,134209,134223,134237],{"__ignoreMap":63},[68,134192,134193,134195],{"class":70,"line":71},[68,134194,588],{"class":587},[68,134196,86],{"class":85},[68,134198,134199,134201,134203,134205,134207],{"class":70,"line":78},[68,134200,133678],{"class":92},[68,134202,96],{"class":85},[68,134204,56348],{"class":92},[68,134206,606],{"class":85},[68,134208,133687],{"class":74},[68,134210,134211,134213,134215,134217,134219,134221],{"class":70,"line":89},[68,134212,133692],{"class":92},[68,134214,96],{"class":85},[68,134216,2182],{"class":92},[68,134218,103],{"class":102},[68,134220,133701],{"class":85},[68,134222,133704],{"class":74},[68,134224,134225,134227,134229,134231,134233,134235],{"class":70,"line":115},[68,134226,133709],{"class":92},[68,134228,96],{"class":85},[68,134230,2436],{"class":92},[68,134232,103],{"class":102},[68,134234,133718],{"class":85},[68,134236,133721],{"class":74},[68,134238,134239],{"class":70,"line":280},[68,134240,118],{"class":85},[168,134242,134243],{},[51,134244,134245,134246,134248,134249,134251,134252,134254,134255,134258,134259,134261],{},"粘性定位的特点：",[55300,134247],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55300,134250],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55300,134253],{},"  ③必须添加 top 、left、right、bottom ",[1890,134256,134257],{},"其中一个"," 才有效",[55300,134260],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[58,134263,134264],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,134265,134266,134272,134284,134298,134312],{"__ignoreMap":63},[68,134267,134268,134270],{"class":70,"line":71},[68,134269,588],{"class":587},[68,134271,86],{"class":85},[68,134273,134274,134276,134278,134280,134282],{"class":70,"line":78},[68,134275,133678],{"class":92},[68,134277,96],{"class":85},[68,134279,56348],{"class":92},[68,134281,606],{"class":85},[68,134283,133687],{"class":74},[68,134285,134286,134288,134290,134292,134294,134296],{"class":70,"line":89},[68,134287,133692],{"class":92},[68,134289,96],{"class":85},[68,134291,2182],{"class":92},[68,134293,103],{"class":102},[68,134295,133701],{"class":85},[68,134297,133704],{"class":74},[68,134299,134300,134302,134304,134306,134308,134310],{"class":70,"line":115},[68,134301,133709],{"class":92},[68,134303,96],{"class":85},[68,134305,2436],{"class":92},[68,134307,103],{"class":102},[68,134309,133718],{"class":85},[68,134311,133721],{"class":74},[68,134313,134314],{"class":70,"line":280},[68,134315,118],{"class":85},[38,134317],{"style":40,"src":134318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134320,134321],{},"(6)总结",[120,134323,134324,134339],{},[123,134325,134326],{},[126,134327,134328,134330,134333,134336],{},[129,134329,133662],{"align":131},[129,134331,134332],{"align":131},"是否脱标",[129,134334,134335],{"align":131},"移动位置",[129,134337,134338],{"align":131},"是否常用",[137,134340,134341,134354,134368,134382,134395],{},[126,134342,134343,134346,134348,134351],{},[142,134344,134345],{"align":131},"Static 静态定位",[142,134347,106251],{"align":131},[142,134349,134350],{"align":131},"不能使用边偏移",[142,134352,134353],{"align":131},"很少",[126,134355,134356,134359,134362,134365],{},[142,134357,134358],{"align":131},"Relative 相对定位",[142,134360,134361],{"align":131},"否(占有位置)",[142,134363,134364],{"align":131},"相对于自身位置移动",[142,134366,134367],{"align":131},"基本单独使用",[126,134369,134370,134373,134376,134379],{},[142,134371,134372],{"align":131},"Absolute 绝对定位",[142,134374,134375],{"align":131},"是(不占有位置)",[142,134377,134378],{"align":131},"带有定位的父级",[142,134380,134381],{"align":131},"要和定位父级元素搭配使用",[126,134383,134384,134387,134389,134392],{},[142,134385,134386],{"align":131},"Fixed 固定定位",[142,134388,134375],{"align":131},[142,134390,134391],{"align":131},"浏览器可视区",[142,134393,134394],{"align":131},"单独使用,不需要父级",[126,134396,134397,134400,134402,134404],{},[142,134398,134399],{"align":131},"Sticky 粘性定位",[142,134401,134361],{"align":131},[142,134403,134391],{"align":131},[142,134405,134406],{"align":131},"当前阶段少",[48,134408,134409],{"start":78},[51,134410,134411,134414],{},[1890,134412,134413],{},"边偏移"," 则决定了该元素的最终位置",[120,134416,134417,134428],{},[123,134418,134419],{},[126,134420,134421,134424,134426],{},[129,134422,134423],{"align":131},"边偏移属性",[129,134425,29085],{"align":131},[129,134427,1032],{"align":131},[137,134429,134430,134441,134452,134462],{},[126,134431,134432,134435,134438],{},[142,134433,134434],{"align":131},"top",[142,134436,134437],{"align":131},"top: 80px;",[142,134439,134440],{"align":131},"顶端偏移量，定义元素相对于父元素上边线的距离",[126,134442,134443,134446,134449],{},[142,134444,134445],{"align":131},"bottom",[142,134447,134448],{"align":131},"bottom: 80px ;",[142,134450,134451],{"align":131},"底部偏移量，定义元素相对于其父元素下边线的距离",[126,134453,134454,134456,134459],{},[142,134455,131],{"align":131},[142,134457,134458],{"align":131},"left: 80px ;",[142,134460,134461],{"align":131},"左侧偏移量，定义元素相对于其父元素左边线的距离",[126,134463,134464,134466,134469],{},[142,134465,1269],{"align":131},[142,134467,134468],{"align":131},"right: 80px ;",[142,134470,134471],{"align":131},"右侧偏移量，定义元素相对于其父元素右边线的距离",[168,134473,134474],{},[51,134475,1210,134476,134478,134479,134481,134482,134484,134485,134488,134489,134491,134492,134494],{},[55300,134477],{},"  ① ",[1890,134480,134413],{}," 需要和 ",[1890,134483,133662],{}," 联合使用， ",[1890,134486,134487],{},"单独使用无效"," ；",[55300,134490],{},"  ②top和bottom不要同时使用",[55300,134493],{},"  ③left和right不要同时使用",[23593,134496,134498],{"id":134497},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134500,134501],{},"子级是绝对定位的话，父级要用相对定位",[168,134503,134504,134507,134510,134513],{},[51,134505,134506],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[51,134508,134509],{},"父盒子需要加定位限制子盒子在父盒子内显示",[51,134511,134512],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[51,134514,134515,134516,134519],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1890,134517,134518],{},"子绝父绝"," 也会遇到",[23593,134521,134523],{"id":134522},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[168,134525,134526,134541],{},[51,134527,134528,134529,134532,134533,134536,134537,134540],{},"在使用 ",[1890,134530,134531],{},"定位"," 布局时，可能会 ",[1890,134534,134535],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1890,134538,134539],{},"z-index"," 来控制盒子的前后次序 (z轴)",[51,134542,6780],{},[58,134544,134545],{"className":60,"code":133665,"language":62,"meta":63,"style":63},[65,134546,134547,134553,134565,134579,134593],{"__ignoreMap":63},[68,134548,134549,134551],{"class":70,"line":71},[68,134550,588],{"class":587},[68,134552,86],{"class":85},[68,134554,134555,134557,134559,134561,134563],{"class":70,"line":78},[68,134556,133678],{"class":92},[68,134558,96],{"class":85},[68,134560,56348],{"class":92},[68,134562,606],{"class":85},[68,134564,133687],{"class":74},[68,134566,134567,134569,134571,134573,134575,134577],{"class":70,"line":89},[68,134568,133692],{"class":92},[68,134570,96],{"class":85},[68,134572,2182],{"class":92},[68,134574,103],{"class":102},[68,134576,133701],{"class":85},[68,134578,133704],{"class":74},[68,134580,134581,134583,134585,134587,134589,134591],{"class":70,"line":115},[68,134582,133709],{"class":92},[68,134584,96],{"class":85},[68,134586,2436],{"class":92},[68,134588,103],{"class":102},[68,134590,133718],{"class":85},[68,134592,133721],{"class":74},[68,134594,134595],{"class":70,"line":280},[68,134596,118],{"class":85},[168,134598,134599],{},[51,134600,134601,134602,134478,134604,134606,134607,129282,134610,84116,134613,134615,134616,134618,134619,134622,134623,134488,134626,134628,134629,134632,134634],{},"z-index的特性",[55300,134603],{},[1890,134605,1284],{}," ： ",[1890,134608,134609],{},"正整数",[1890,134611,134612],{},"负整数",[1890,134614,600],{}," ，默认值是 0，数值越大，盒子越靠上；",[55300,134617],{},"  ②如果 ",[1890,134620,134621],{},"属性值相同"," ，则按照书写顺序， ",[1890,134624,134625],{},"后来居上",[55300,134627],{},"  ③数字后面 ",[1890,134630,134631],{},"不能加单位",[55300,134633],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23593,134636,134638],{"id":134637},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134640,134641],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134643,134644],{},"方法:",[168,134646,134647,134657],{},[51,134648,134649,134650,134653,134654],{},"left: 50%; 让 ",[1890,134651,134652],{},"盒子的左侧"," 移动到 ",[1890,134655,134656],{},"父级元素的水平中心位置",[51,134658,134659,134660,134663,134664],{},"margin-left: -100px; 让盒子 ",[1890,134661,134662],{},"向左"," 移动 ",[1890,134665,134666],{},"自身宽度的一半",[23593,134668,134670],{"id":134669},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[48,134672,134673,134676],{},[51,134674,134675],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[51,134677,134678],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134680,134681],{},"也就是说绝对定位和固定定位和浮动类似",[48,134683,134684],{"start":89},[51,134685,134686],{},"display 是显示模式， 可以改变显示模式有以下方式:",[168,134688,134689,134692,134695],{},[51,134690,134691],{},"可以用inline-block 转换为行内块",[51,134693,134694],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[51,134696,134697],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134699,134700],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23593,134702,134704],{"id":134703},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[48,134706,134707,134710,134713,134716],{},[51,134708,134709],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[51,134711,134712],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[51,134714,134715],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[51,134717,134718],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[58,134720,134721],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,134722,134723,134729,134739,134743,134749,134759],{"__ignoreMap":63},[68,134724,134725,134727],{"class":70,"line":71},[68,134726,1236],{"class":587},[68,134728,86],{"class":85},[68,134730,134731,134733,134735,134737],{"class":70,"line":78},[68,134732,1243],{"class":92},[68,134734,96],{"class":85},[68,134736,131],{"class":92},[68,134738,112],{"class":85},[68,134740,134741],{"class":70,"line":89},[68,134742,118],{"class":85},[68,134744,134745,134747],{"class":70,"line":115},[68,134746,1258],{"class":587},[68,134748,86],{"class":85},[68,134750,134751,134753,134755,134757],{"class":70,"line":280},[68,134752,1243],{"class":92},[68,134754,96],{"class":85},[68,134756,1269],{"class":92},[68,134758,112],{"class":85},[68,134760,134761],{"class":70,"line":301},[68,134762,118],{"class":85},[38,134764],{"style":40,"src":134765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23593,134767,134769],{"id":134768},"_11138-轮播图","11.1.3.8 轮播图",[38,134771],{"style":40,"src":134772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[48,134774,134775],{},[51,134776,134777],{},"制作顺序:",[168,134779,134780,134783,134786,134795],{},[51,134781,134782],{},"大盒子我们类名为： tb-promo 淘宝广告",[51,134784,134785],{},"里面先放一张图片",[51,134787,134788,134789,134791,134792,134794],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55300,134790],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55300,134793],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[51,134796,134797,134798,134800,134801,134803],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55300,134799],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55300,134802],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[48,134805,134806],{"start":78},[51,134807,134808],{},"代码模块",[58,134810,134812],{"className":60,"code":134811,"language":62,"meta":63,"style":63},"\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",[65,134813,134814,134819,134826,134836,134846,134856,134860,134865,134872,134882],{"__ignoreMap":63},[68,134815,134816],{"class":70,"line":71},[68,134817,134818],{"class":74},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[68,134820,134821,134824],{"class":70,"line":78},[68,134822,134823],{"class":587},".son",[68,134825,86],{"class":85},[68,134827,134828,134830,134832,134834],{"class":70,"line":89},[68,134829,133678],{"class":92},[68,134831,96],{"class":85},[68,134833,56415],{"class":92},[68,134835,112],{"class":85},[68,134837,134838,134840,134842,134844],{"class":70,"line":115},[68,134839,133692],{"class":92},[68,134841,96],{"class":85},[68,134843,600],{"class":92},[68,134845,112],{"class":85},[68,134847,134848,134850,134852,134854],{"class":70,"line":280},[68,134849,133709],{"class":92},[68,134851,96],{"class":85},[68,134853,600],{"class":92},[68,134855,112],{"class":85},[68,134857,134858],{"class":70,"line":301},[68,134859,118],{"class":85},[68,134861,134862],{"class":70,"line":320},[68,134863,134864],{"class":74},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[68,134866,134867,134870],{"class":70,"line":2915},[68,134868,134869],{"class":587},".father",[68,134871,86],{"class":85},[68,134873,134874,134876,134878,134880],{"class":70,"line":2921},[68,134875,133678],{"class":92},[68,134877,96],{"class":85},[68,134879,56348],{"class":92},[68,134881,112],{"class":85},[68,134883,134884],{"class":70,"line":2933},[68,134885,118],{"class":85},[19,134887,134888],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[43,134890,134892],{"id":134891},"_1114-定位数值的移动","11.1.4 定位数值的移动",[38,134894],{"style":40,"src":134895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134897,134898],{},"✨ 黄金口诀：",[19,134900,134901],{},"\"TOP正下负上，LEFT正右负左\"",[19,134903,134904],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134906,134907],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134909,134910],{},"✨ 简单记：",[19,134912,134913],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1652,134915,134916],{},"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":63,"searchDepth":78,"depth":78,"links":134918},[134919],{"id":133446,"depth":78,"text":133447,"children":134920},[134921,134922,134923,134924],{"id":133450,"depth":89,"text":133451},{"id":133465,"depth":89,"text":133466},{"id":133633,"depth":89,"text":133634},{"id":134891,"depth":89,"text":134892},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133438,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134931,"title":134932,"body":134933,"description":1676,"extension":1677,"meta":136356,"navigation":1679,"path":136357,"seo":136358,"stem":136359,"__hash__":136360},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134934,"toc":136335},[134935,134938,134942,134950,134954,134959,134967,134979,134983,134988,134996,135007,135011,135016,135057,135065,135069,135072,135075,135078,135172,135175,135269,135272,135366,135369,135372,135407,135410,135413,135443,135446,135449,135452,135455,135458,135461,135464,135534,135537,135541,135545,135586,135590,135596,135599,135602,135606,135609,135612,135615,135696,135699,135702,135706,135710,135713,135716,135719,135722,135725,135731,135740,135744,135763,135767,135777,135780,135783,135786,135789,135792,135795,135798,135801,135810,135814,135823,135826,135831,135884,135889,136055,136058,136061,136066,136069,136072,136075,136078,136083,136231,136234,136237,136242,136245,136250,136284,136287,136290,136294,136297,136304,136307,136310,136313,136316,136319,136322,136325,136329,136332],[10,134936,134932],{"id":134937},"_12-显示隐藏与图形资源",[14,134939,134941],{"id":134940},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[168,134943,134944,134947],{},[51,134945,134946],{},"目的:让一个元素在页面中消失或者显示出来",[51,134948,134949],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[43,134951,134953],{"id":134952},"_1211-display-显示","12.1.1 display 显示",[48,134955,134956],{},[51,134957,134958],{},"display 设置或检索对象是否及如何显示",[168,134960,134961,134964],{},[51,134962,134963],{},"display: none;隐藏对象",[51,134965,134966],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[48,134968,134969,134976],{"start":78},[51,134970,134971,134972,134975],{},"特点： display 隐藏元素后， ",[1890,134973,134974],{},"不再占"," 有原来的位置",[51,134977,134978],{},"在js中使用非常的广泛",[43,134980,134982],{"id":134981},"_1212-visibility可见性","12.1.2 visibility可见性",[48,134984,134985],{},[51,134986,134987],{},"visibility 属性用于指定一个元素应可见还是隐藏",[168,134989,134990,134993],{},[51,134991,134992],{},"visibility： visible；元素可见",[51,134994,134995],{},"visibility：hidden；元素隐藏",[48,134997,134998,135001,135004],{"start":78},[51,134999,135000],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[51,135002,135003],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[51,135005,135006],{},"隐藏后继续占有原有位置",[43,135008,135010],{"id":135009},"_1213-overflow溢出","12.1.3 overflow溢出",[168,135012,135013],{},[51,135014,135015],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[120,135017,135018,135026],{},[123,135019,135020],{},[126,135021,135022,135024],{},[129,135023,1284],{"align":131},[129,135025,1032],{"align":131},[137,135027,135028,135036,135043,135050],{},[126,135029,135030,135033],{},[142,135031,135032],{"align":131},"visible",[142,135034,135035],{"align":131},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[126,135037,135038,135040],{},[142,135039,63298],{"align":131},[142,135041,135042],{"align":131},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[126,135044,135045,135047],{},[142,135046,130539],{"align":131},[142,135048,135049],{"align":131},"不管超出内容否，总是显示滚动条",[126,135051,135052,135054],{},[142,135053,74241],{"align":131},[142,135055,135056],{"align":131},"超出自动显示滚动条，不超出不显示滚动条",[168,135058,135059,135062],{},[51,135060,135061],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[51,135063,135064],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[43,135066,135068],{"id":135067},"_1214-案例收获","12.1.4 案例收获",[38,135070],{"style":40,"src":135071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135073,135074],{},"问题：没做出来动态效果，使用hover没实现",[19,135076,135077],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[58,135079,135080],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,135081,135082,135086,135100,135104,135118,135122,135136,135140,135154,135158],{"__ignoreMap":63},[68,135083,135084],{"class":70,"line":71},[68,135085,133311],{"class":74},[68,135087,135088,135090,135092,135094,135096,135098],{"class":70,"line":78},[68,135089,133316],{"class":587},[68,135091,81384],{"class":85},[68,135093,130479],{"class":92},[68,135095,96],{"class":85},[68,135097,133325],{"class":92},[68,135099,131048],{"class":85},[68,135101,135102],{"class":70,"line":89},[68,135103,133332],{"class":74},[68,135105,135106,135108,135110,135112,135114,135116],{"class":70,"line":115},[68,135107,133337],{"class":587},[68,135109,81384],{"class":85},[68,135111,130479],{"class":92},[68,135113,96],{"class":85},[68,135115,56348],{"class":92},[68,135117,131048],{"class":85},[68,135119,135120],{"class":70,"line":280},[68,135121,133352],{"class":74},[68,135123,135124,135126,135128,135130,135132,135134],{"class":70,"line":301},[68,135125,133357],{"class":587},[68,135127,81384],{"class":85},[68,135129,130479],{"class":92},[68,135131,96],{"class":85},[68,135133,56415],{"class":92},[68,135135,131048],{"class":85},[68,135137,135138],{"class":70,"line":320},[68,135139,133372],{"class":74},[68,135141,135142,135144,135146,135148,135150,135152],{"class":70,"line":2915},[68,135143,133377],{"class":587},[68,135145,81384],{"class":85},[68,135147,130479],{"class":92},[68,135149,96],{"class":85},[68,135151,87809],{"class":92},[68,135153,131048],{"class":85},[68,135155,135156],{"class":70,"line":2921},[68,135157,133392],{"class":74},[68,135159,135160,135162,135164,135166,135168,135170],{"class":70,"line":2933},[68,135161,133397],{"class":587},[68,135163,81384],{"class":85},[68,135165,130479],{"class":92},[68,135167,96],{"class":85},[68,135169,133406],{"class":92},[68,135171,131048],{"class":85},[19,135173,135174],{},"完整代码：",[58,135176,135177],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,135178,135179,135183,135197,135201,135215,135219,135233,135237,135251,135255],{"__ignoreMap":63},[68,135180,135181],{"class":70,"line":71},[68,135182,133311],{"class":74},[68,135184,135185,135187,135189,135191,135193,135195],{"class":70,"line":78},[68,135186,133316],{"class":587},[68,135188,81384],{"class":85},[68,135190,130479],{"class":92},[68,135192,96],{"class":85},[68,135194,133325],{"class":92},[68,135196,131048],{"class":85},[68,135198,135199],{"class":70,"line":89},[68,135200,133332],{"class":74},[68,135202,135203,135205,135207,135209,135211,135213],{"class":70,"line":115},[68,135204,133337],{"class":587},[68,135206,81384],{"class":85},[68,135208,130479],{"class":92},[68,135210,96],{"class":85},[68,135212,56348],{"class":92},[68,135214,131048],{"class":85},[68,135216,135217],{"class":70,"line":280},[68,135218,133352],{"class":74},[68,135220,135221,135223,135225,135227,135229,135231],{"class":70,"line":301},[68,135222,133357],{"class":587},[68,135224,81384],{"class":85},[68,135226,130479],{"class":92},[68,135228,96],{"class":85},[68,135230,56415],{"class":92},[68,135232,131048],{"class":85},[68,135234,135235],{"class":70,"line":320},[68,135236,133372],{"class":74},[68,135238,135239,135241,135243,135245,135247,135249],{"class":70,"line":2915},[68,135240,133377],{"class":587},[68,135242,81384],{"class":85},[68,135244,130479],{"class":92},[68,135246,96],{"class":85},[68,135248,87809],{"class":92},[68,135250,131048],{"class":85},[68,135252,135253],{"class":70,"line":2921},[68,135254,133392],{"class":74},[68,135256,135257,135259,135261,135263,135265,135267],{"class":70,"line":2933},[68,135258,133397],{"class":587},[68,135260,81384],{"class":85},[68,135262,130479],{"class":92},[68,135264,96],{"class":85},[68,135266,133406],{"class":92},[68,135268,131048],{"class":85},[19,135270,135271],{},"分布思路重点详解：",[58,135273,135274],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,135275,135276,135280,135294,135298,135312,135316,135330,135334,135348,135352],{"__ignoreMap":63},[68,135277,135278],{"class":70,"line":71},[68,135279,133311],{"class":74},[68,135281,135282,135284,135286,135288,135290,135292],{"class":70,"line":78},[68,135283,133316],{"class":587},[68,135285,81384],{"class":85},[68,135287,130479],{"class":92},[68,135289,96],{"class":85},[68,135291,133325],{"class":92},[68,135293,131048],{"class":85},[68,135295,135296],{"class":70,"line":89},[68,135297,133332],{"class":74},[68,135299,135300,135302,135304,135306,135308,135310],{"class":70,"line":115},[68,135301,133337],{"class":587},[68,135303,81384],{"class":85},[68,135305,130479],{"class":92},[68,135307,96],{"class":85},[68,135309,56348],{"class":92},[68,135311,131048],{"class":85},[68,135313,135314],{"class":70,"line":280},[68,135315,133352],{"class":74},[68,135317,135318,135320,135322,135324,135326,135328],{"class":70,"line":301},[68,135319,133357],{"class":587},[68,135321,81384],{"class":85},[68,135323,130479],{"class":92},[68,135325,96],{"class":85},[68,135327,56415],{"class":92},[68,135329,131048],{"class":85},[68,135331,135332],{"class":70,"line":320},[68,135333,133372],{"class":74},[68,135335,135336,135338,135340,135342,135344,135346],{"class":70,"line":2915},[68,135337,133377],{"class":587},[68,135339,81384],{"class":85},[68,135341,130479],{"class":92},[68,135343,96],{"class":85},[68,135345,87809],{"class":92},[68,135347,131048],{"class":85},[68,135349,135350],{"class":70,"line":2921},[68,135351,133392],{"class":74},[68,135353,135354,135356,135358,135360,135362,135364],{"class":70,"line":2933},[68,135355,133397],{"class":587},[68,135357,81384],{"class":85},[68,135359,130479],{"class":92},[68,135361,96],{"class":85},[68,135363,133406],{"class":92},[68,135365,131048],{"class":85},[38,135367],{"style":40,"src":135368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135370,135371],{},"图片太大，盒子太小，此时需要修改图片的大小",[58,135373,135375],{"className":847,"code":135374,"language":849,"meta":63,"style":63},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[65,135376,135377],{"__ignoreMap":63},[68,135378,135379,135381,135383,135385,135387,135390,135392,135394,135397,135400,135402,135405],{"class":70,"line":71},[68,135380,861],{"class":85},[68,135382,38],{"class":81},[68,135384,56823],{"class":587},[68,135386,869],{"class":85},[68,135388,135389],{"class":872},"\"images\u002Fpic.jpg\"",[68,135391,56831],{"class":587},[68,135393,869],{"class":85},[68,135395,135396],{"class":872},"\"描述文字\"",[68,135398,135399],{"class":587}," title",[68,135401,869],{"class":85},[68,135403,135404],{"class":872},"\"悬停提示\"",[68,135406,876],{"class":85},[38,135408],{"style":40,"src":135409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135411,135412],{},"制造遮罩层",[58,135414,135415],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,135416,135417],{"__ignoreMap":63},[68,135418,135419,135421,135423,135425,135427,135429,135431,135433,135435,135437,135439,135441],{"class":70,"line":71},[68,135420,861],{"class":85},[68,135422,38],{"class":81},[68,135424,56823],{"class":587},[68,135426,869],{"class":85},[68,135428,135389],{"class":872},[68,135430,56831],{"class":587},[68,135432,869],{"class":85},[68,135434,135396],{"class":872},[68,135436,135399],{"class":587},[68,135438,869],{"class":85},[68,135440,135404],{"class":872},[68,135442,876],{"class":85},[19,135444,135445],{},"此时是这样的为标准流",[38,135447],{"style":40,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135450,135451],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135453,135454],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135456,135457],{},"让他在中间，用center(background-position)",[19,135459,135460],{},"将需要变的尽可能放到一个盒子中",[19,135462,135463],{},"放大盒子上内部盒子发生变化",[58,135465,135467],{"className":60,"code":135466,"language":62,"meta":63,"style":63},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[65,135468,135469,135475,135485,135489,135496,135506,135518,135530],{"__ignoreMap":63},[68,135470,135471,135473],{"class":70,"line":71},[68,135472,129186],{"class":587},[68,135474,86],{"class":85},[68,135476,135477,135479,135481,135483],{"class":70,"line":78},[68,135478,133678],{"class":92},[68,135480,96],{"class":85},[68,135482,56348],{"class":92},[68,135484,112],{"class":85},[68,135486,135487],{"class":70,"line":89},[68,135488,118],{"class":85},[68,135490,135491,135494],{"class":70,"line":115},[68,135492,135493],{"class":587},".child",[68,135495,86],{"class":85},[68,135497,135498,135500,135502,135504],{"class":70,"line":280},[68,135499,133678],{"class":92},[68,135501,96],{"class":85},[68,135503,56415],{"class":92},[68,135505,112],{"class":85},[68,135507,135508,135510,135512,135514,135516],{"class":70,"line":301},[68,135509,133692],{"class":92},[68,135511,96],{"class":85},[68,135513,2392],{"class":92},[68,135515,2064],{"class":102},[68,135517,112],{"class":85},[68,135519,135520,135522,135524,135526,135528],{"class":70,"line":320},[68,135521,133709],{"class":92},[68,135523,96],{"class":85},[68,135525,2392],{"class":92},[68,135527,2064],{"class":102},[68,135529,112],{"class":85},[68,135531,135532],{"class":70,"line":2915},[68,135533,118],{"class":85},[19,135535,135536],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135538,135540],{"id":135539},"_122-精灵图","12.2 精灵图",[43,135542,135544],{"id":135543},"_1221-理解","12.2.1 理解",[48,135546,135547,135565],{},[51,135548,135549,135550,133778,135553,135556,135557,135560,135561,135564],{},"目的： ",[1890,135551,135552],{},"为了有效地减少服务器接收和发送请求的次数",[1890,135554,135555],{},"提高"," 页面的 ",[1890,135558,135559],{},"加载速度"," ，出现了 ",[1890,135562,135563],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[51,135566,135567,135568,135570,135571,135573,135574,135576,135577,135579,135580,135582,135583,135585],{},"使用精灵图核心：",[55300,135569],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55300,135572],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55300,135575],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55300,135578],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55300,135581],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55300,135584],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[43,135587,135589],{"id":135588},"_1222-扒图","12.2.2 扒图",[58,135591,135594],{"className":135592,"code":135593,"language":6786},[6784],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[65,135595,135593],{"__ignoreMap":63},[38,135597],{"style":40,"src":135598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[38,135600],{"style":40,"src":135601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[43,135603,135605],{"id":135604},"_1223-精灵图的实现","12.2.3 精灵图的实现",[38,135607],{"style":40,"src":135608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135610,135611],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[38,135613],{"style":40,"src":135614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[58,135616,135618],{"className":60,"code":135617,"language":62,"meta":63,"style":63},"\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",[65,135619,135620,135625,135632,135644,135656,135675,135692],{"__ignoreMap":63},[68,135621,135622],{"class":70,"line":71},[68,135623,135624],{"class":74},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[68,135626,135627,135630],{"class":70,"line":78},[68,135628,135629],{"class":587},".icon",[68,135631,86],{"class":85},[68,135633,135634,135636,135638,135640,135642],{"class":70,"line":89},[68,135635,72149],{"class":92},[68,135637,96],{"class":85},[68,135639,2436],{"class":92},[68,135641,103],{"class":102},[68,135643,112],{"class":85},[68,135645,135646,135648,135650,135652,135654],{"class":70,"line":115},[68,135647,72368],{"class":92},[68,135649,96],{"class":85},[68,135651,2436],{"class":92},[68,135653,103],{"class":102},[68,135655,112],{"class":85},[68,135657,135658,135660,135662,135664,135666,135669,135671,135673],{"class":70,"line":280},[68,135659,72191],{"class":92},[68,135661,96],{"class":85},[68,135663,63310],{"class":92},[68,135665,997],{"class":85},[68,135667,135668],{"class":6815},"sprites.png",[68,135670,15311],{"class":85},[68,135672,63320],{"class":92},[68,135674,112],{"class":85},[68,135676,135677,135679,135681,135683,135685,135688,135690],{"class":70,"line":301},[68,135678,130379],{"class":92},[68,135680,96],{"class":85},[68,135682,53349],{"class":92},[68,135684,103],{"class":102},[68,135686,135687],{"class":92}," -20",[68,135689,103],{"class":102},[68,135691,112],{"class":85},[68,135693,135694],{"class":70,"line":320},[68,135695,118],{"class":85},[38,135697],{"style":40,"src":135698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135700,135701],{},"在前端中坐标轴的正方向是右和下",[14,135703,135705],{"id":135704},"_123-字体图标","12.3 字体图标",[43,135707,135709],{"id":135708},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135711,135712],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135714,135715],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135717,135718],{},"1.图片文件还是比较大的。",[19,135720,135721],{},"2.图片本身放大和缩小会失真。",[19,135723,135724],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135726,135727,135728,27334],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1890,135729,135730],{},"字体图标 iconfont",[19,135732,135733,135736,135737,29978],{},[1890,135734,135735],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1890,135738,135739],{},"展示的是图标，本质属于字体",[43,135741,135743],{"id":135742},"_1232-字体图标的优点","12.3.2 字体图标的优点",[168,135745,135746,135751,135754,135757,135760],{},[51,135747,135748,135750],{},[1890,135749,27470],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[51,135752,135753],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[51,135755,135756],{},"兼容性：几乎支持所有的浏览器，请放心使用",[51,135758,135759],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[51,135761,135762],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[43,135764,135766],{"id":135765},"_1233-字体库下载网站","12.3.3 字体库下载网站",[168,135768,135769],{},[51,135770,135771,135772],{},"icomoon字体库：",[1974,135773,135776],{"href":135774,"rel":135775},"http:\u002F\u002Ficomoon.io\u002F",[25459],"http:\u002F\u002Ficomoon.io",[19,135778,135779],{},"进去之后点icomoon app",[38,135781],{"style":40,"src":135782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135784,135785],{},"可以对其编辑：",[38,135787],{"style":40,"src":135788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135790,135791],{},"生成字体：",[38,135793],{"style":40,"src":135794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135796,135797],{},"下载：",[38,135799],{"style":40,"src":135800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[168,135802,135803],{},[51,135804,135805,135806],{},"阿里iconfont字体库： ",[1974,135807,135808],{"href":135808,"rel":135809},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25459],[43,135811,135813],{"id":135812},"_1234-字体图标的引入","12.3.4 字体图标的引入",[48,135815,135816],{},[51,135817,135818,135819,135822],{},"把下载包里面的 ",[1890,135820,135821],{},"fonts"," 文件夹放入页面根目录下",[38,135824],{"style":40,"src":135825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[48,135827,135828],{"start":78},[51,135829,135830],{},"字体文件格式",[120,135832,135833,135842],{},[123,135834,135835],{},[126,135836,135837,135840],{},[129,135838,135839],{"align":131},"格式",[129,135841,25334],{"align":131},[137,135843,135844,135854,135864,135874],{},[126,135845,135846,135851],{},[142,135847,135848],{"align":131},[1890,135849,135850],{},".ttf",[142,135852,135853],{"align":131},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[126,135855,135856,135861],{},[142,135857,135858],{"align":131},[1890,135859,135860],{},".woff",[142,135862,135863],{"align":131},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[126,135865,135866,135871],{},[142,135867,135868],{"align":131},[1890,135869,135870],{},".eot",[142,135872,135873],{"align":131},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[126,135875,135876,135881],{},[142,135877,135878],{"align":131},[1890,135879,135880],{},"svg",[142,135882,135883],{"align":131},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[48,135885,135886],{"start":89},[51,135887,135888],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[58,135890,135892],{"className":60,"code":135891,"language":62,"meta":63,"style":63},"\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",[65,135893,135894,135899,135906,135918,135934,135959,135980,136000,136020,136024,136030,136040,136051],{"__ignoreMap":63},[68,135895,135896],{"class":70,"line":71},[68,135897,135898],{"class":74},"\u002F* 引入字体图标 *\u002F\n",[68,135900,135901,135904],{"class":70,"line":78},[68,135902,135903],{"class":102},"@font-face",[68,135905,86],{"class":85},[68,135907,135908,135911,135913,135916],{"class":70,"line":89},[68,135909,135910],{"class":92},"  font-family",[68,135912,96],{"class":85},[68,135914,135915],{"class":872},"'icomoon'",[68,135917,112],{"class":85},[68,135919,135920,135923,135925,135927,135929,135932],{"class":70,"line":115},[68,135921,135922],{"class":92},"  src",[68,135924,96],{"class":85},[68,135926,63310],{"class":92},[68,135928,997],{"class":85},[68,135930,135931],{"class":872},"'fonts\u002Ficomoon.eot'",[68,135933,1016],{"class":85},[68,135935,135936,135938,135940,135942,135944,135947,135949,135952,135954,135957],{"class":70,"line":280},[68,135937,135922],{"class":92},[68,135939,96],{"class":85},[68,135941,63310],{"class":92},[68,135943,997],{"class":85},[68,135945,135946],{"class":872},"'fonts\u002Ficomoon.eot?#iefix'",[68,135948,15311],{"class":85},[68,135950,135951],{"class":92},"format",[68,135953,997],{"class":85},[68,135955,135956],{"class":872},"'embedded-opentype'",[68,135958,39640],{"class":85},[68,135960,135961,135964,135966,135969,135971,135973,135975,135978],{"class":70,"line":301},[68,135962,135963],{"class":92},"       url",[68,135965,997],{"class":85},[68,135967,135968],{"class":872},"'fonts\u002Ficomoon.woff'",[68,135970,15311],{"class":85},[68,135972,135951],{"class":92},[68,135974,997],{"class":85},[68,135976,135977],{"class":872},"'woff'",[68,135979,39640],{"class":85},[68,135981,135982,135984,135986,135989,135991,135993,135995,135998],{"class":70,"line":320},[68,135983,135963],{"class":92},[68,135985,997],{"class":85},[68,135987,135988],{"class":872},"'fonts\u002Ficomoon.ttf'",[68,135990,15311],{"class":85},[68,135992,135951],{"class":92},[68,135994,997],{"class":85},[68,135996,135997],{"class":872},"'truetype'",[68,135999,39640],{"class":85},[68,136001,136002,136004,136006,136009,136011,136013,136015,136018],{"class":70,"line":2915},[68,136003,135963],{"class":92},[68,136005,997],{"class":85},[68,136007,136008],{"class":872},"'fonts\u002Ficomoon.svg#icomoon'",[68,136010,15311],{"class":85},[68,136012,135951],{"class":92},[68,136014,997],{"class":85},[68,136016,136017],{"class":872},"'svg'",[68,136019,1016],{"class":85},[68,136021,136022],{"class":70,"line":2921},[68,136023,118],{"class":85},[68,136025,136026,136028],{"class":70,"line":2933},[68,136027,135629],{"class":587},[68,136029,86],{"class":85},[68,136031,136032,136034,136036,136038],{"class":70,"line":3214},[68,136033,135910],{"class":92},[68,136035,96],{"class":85},[68,136037,135915],{"class":872},[68,136039,112],{"class":85},[68,136041,136042,136045,136047,136049],{"class":70,"line":3219},[68,136043,136044],{"class":92},"  font-style",[68,136046,96],{"class":85},[68,136048,65424],{"class":92},[68,136050,112],{"class":85},[68,136052,136053],{"class":70,"line":3225},[68,136054,118],{"class":85},[19,136056,136057],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[38,136059],{"style":40,"src":136060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[48,136062,136063],{"start":115},[51,136064,136065],{},"添加字体",[38,136067],{"style":40,"src":136068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136070,136071],{},"复制：",[38,136073],{"style":40,"src":136074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136076,136077],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[48,136079,136080],{"start":280},[51,136081,136082],{},"代码展示：",[58,136084,136085],{"className":60,"code":135891,"language":62,"meta":63,"style":63},[65,136086,136087,136091,136097,136107,136121,136143,136161,136179,136197,136201,136207,136217,136227],{"__ignoreMap":63},[68,136088,136089],{"class":70,"line":71},[68,136090,135898],{"class":74},[68,136092,136093,136095],{"class":70,"line":78},[68,136094,135903],{"class":102},[68,136096,86],{"class":85},[68,136098,136099,136101,136103,136105],{"class":70,"line":89},[68,136100,135910],{"class":92},[68,136102,96],{"class":85},[68,136104,135915],{"class":872},[68,136106,112],{"class":85},[68,136108,136109,136111,136113,136115,136117,136119],{"class":70,"line":115},[68,136110,135922],{"class":92},[68,136112,96],{"class":85},[68,136114,63310],{"class":92},[68,136116,997],{"class":85},[68,136118,135931],{"class":872},[68,136120,1016],{"class":85},[68,136122,136123,136125,136127,136129,136131,136133,136135,136137,136139,136141],{"class":70,"line":280},[68,136124,135922],{"class":92},[68,136126,96],{"class":85},[68,136128,63310],{"class":92},[68,136130,997],{"class":85},[68,136132,135946],{"class":872},[68,136134,15311],{"class":85},[68,136136,135951],{"class":92},[68,136138,997],{"class":85},[68,136140,135956],{"class":872},[68,136142,39640],{"class":85},[68,136144,136145,136147,136149,136151,136153,136155,136157,136159],{"class":70,"line":301},[68,136146,135963],{"class":92},[68,136148,997],{"class":85},[68,136150,135968],{"class":872},[68,136152,15311],{"class":85},[68,136154,135951],{"class":92},[68,136156,997],{"class":85},[68,136158,135977],{"class":872},[68,136160,39640],{"class":85},[68,136162,136163,136165,136167,136169,136171,136173,136175,136177],{"class":70,"line":320},[68,136164,135963],{"class":92},[68,136166,997],{"class":85},[68,136168,135988],{"class":872},[68,136170,15311],{"class":85},[68,136172,135951],{"class":92},[68,136174,997],{"class":85},[68,136176,135997],{"class":872},[68,136178,39640],{"class":85},[68,136180,136181,136183,136185,136187,136189,136191,136193,136195],{"class":70,"line":2915},[68,136182,135963],{"class":92},[68,136184,997],{"class":85},[68,136186,136008],{"class":872},[68,136188,15311],{"class":85},[68,136190,135951],{"class":92},[68,136192,997],{"class":85},[68,136194,136017],{"class":872},[68,136196,1016],{"class":85},[68,136198,136199],{"class":70,"line":2921},[68,136200,118],{"class":85},[68,136202,136203,136205],{"class":70,"line":2933},[68,136204,135629],{"class":587},[68,136206,86],{"class":85},[68,136208,136209,136211,136213,136215],{"class":70,"line":3214},[68,136210,135910],{"class":92},[68,136212,96],{"class":85},[68,136214,135915],{"class":872},[68,136216,112],{"class":85},[68,136218,136219,136221,136223,136225],{"class":70,"line":3219},[68,136220,136044],{"class":92},[68,136222,96],{"class":85},[68,136224,65424],{"class":92},[68,136226,112],{"class":85},[68,136228,136229],{"class":70,"line":3225},[68,136230,118],{"class":85},[38,136232],{"style":40,"src":136233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136235,136236],{},"更加细节展示：",[48,136238,136239],{},[51,136240,136241],{},"html 标签内添加小图标",[38,136243],{"style":40,"src":136244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[48,136246,136247],{"start":78},[51,136248,136249],{},"给标签定义字体",[58,136251,136252],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,136253,136254,136258,136272,136276],{"__ignoreMap":63},[68,136255,136256],{"class":70,"line":71},[68,136257,856],{"class":74},[68,136259,136260,136262,136264,136266,136268,136270],{"class":70,"line":78},[68,136261,861],{"class":85},[68,136263,82],{"class":81},[68,136265,866],{"class":587},[68,136267,869],{"class":85},[68,136269,873],{"class":872},[68,136271,876],{"class":85},[68,136273,136274],{"class":70,"line":89},[68,136275,881],{"class":85},[68,136277,136278,136280,136282],{"class":70,"line":115},[68,136279,886],{"class":85},[68,136281,82],{"class":81},[68,136283,876],{"class":85},[19,136285,136286],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[38,136288],{"style":40,"src":136289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[43,136291,136293],{"id":136292},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136295,136296],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136298,136299,136300,136303],{},"把压缩包里面的 ",[1890,136301,136302],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136305,136306],{},"打开网站，点下方：",[38,136308],{"style":40,"src":136309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[38,136311],{"style":40,"src":136312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[38,136314],{"style":40,"src":136315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136317,136318],{},"点yes重新加载",[19,136320,136321],{},"然后重复之前的操作就可以实现了",[19,136323,136324],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[43,136326,136328],{"id":136327},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[38,136330],{"style":40,"src":136331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1652,136333,136334],{},"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":63,"searchDepth":78,"depth":78,"links":136336},[136337,136343,136348],{"id":134940,"depth":78,"text":134941,"children":136338},[136339,136340,136341,136342],{"id":134952,"depth":89,"text":134953},{"id":134981,"depth":89,"text":134982},{"id":135009,"depth":89,"text":135010},{"id":135067,"depth":89,"text":135068},{"id":135539,"depth":78,"text":135540,"children":136344},[136345,136346,136347],{"id":135543,"depth":89,"text":135544},{"id":135588,"depth":89,"text":135589},{"id":135604,"depth":89,"text":135605},{"id":135704,"depth":78,"text":135705,"children":136349},[136350,136351,136352,136353,136354,136355],{"id":135708,"depth":89,"text":135709},{"id":135742,"depth":89,"text":135743},{"id":135765,"depth":89,"text":135766},{"id":135812,"depth":89,"text":135813},{"id":136292,"depth":89,"text":136293},{"id":136327,"depth":89,"text":136328},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134932,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136362,"title":136363,"body":136364,"description":1676,"extension":1677,"meta":137591,"navigation":1679,"path":137592,"seo":137593,"stem":137594,"__hash__":137595},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136365,"toc":137572},[136366,136369,136373,136376,136390,136458,136488,136491,136495,136499,136601,136648,136652,136655,136658,136692,136695,136698,136701,136704,136707,136710,136713,136715,136718,136721,136724,136727,136730,136733,136736,136764,136767,136771,136774,136781,136784,136787,136813,136816,136820,136823,136826,136833,136837,136840,136842,136874,136877,136880,136892,136898,136901,136904,136907,136909,136913,136916,136919,136922,136967,136971,136973,136976,136983,137025,137028,137032,137037,137051,137055,137058,137061,137064,137067,137070,137104,137107,137110,137164,137167,137170,137173,137176,137228,137231,137234,137283,137287,137289,137292,137295,137298,137301,137304,137362,137365,137371,137374,137377,137409,137412,137416,137420,137423,137455,137459,137462,137506,137510,137513,137516,137519,137522,137525,137528,137531,137533,137536,137538,137541,137544,137547,137550,137555,137558,137560,137563,137566,137569],[10,136367,136363],{"id":136368},"_13-界面样式与布局技巧",[14,136370,136372],{"id":136371},"_131-css三角","13.1 css三角",[19,136374,136375],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[168,136377,136378,136381,136384,136387],{},[51,136379,136380],{},"用css 边框可以模拟三角效果",[51,136382,136383],{},"宽度高度为0",[51,136385,136386],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[51,136388,136389],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[58,136391,136393],{"className":60,"code":136392,"language":62,"meta":63,"style":63},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[65,136394,136395,136400,136407,136417,136427,136443,136454],{"__ignoreMap":63},[68,136396,136397],{"class":70,"line":71},[68,136398,136399],{"class":74},"\u002F* CSS 实现三角形 *\u002F\n",[68,136401,136402,136405],{"class":70,"line":78},[68,136403,136404],{"class":587},".triangle",[68,136406,86],{"class":85},[68,136408,136409,136411,136413,136415],{"class":70,"line":89},[68,136410,72149],{"class":92},[68,136412,96],{"class":85},[68,136414,600],{"class":92},[68,136416,112],{"class":85},[68,136418,136419,136421,136423,136425],{"class":70,"line":115},[68,136420,72368],{"class":92},[68,136422,96],{"class":85},[68,136424,600],{"class":92},[68,136426,112],{"class":85},[68,136428,136429,136431,136433,136435,136437,136439,136441],{"class":70,"line":280},[68,136430,93],{"class":92},[68,136432,96],{"class":85},[68,136434,2182],{"class":92},[68,136436,103],{"class":102},[68,136438,106],{"class":92},[68,136440,65574],{"class":92},[68,136442,112],{"class":85},[68,136444,136445,136448,136450,136452],{"class":70,"line":301},[68,136446,136447],{"class":92},"  border-bottom-color",[68,136449,96],{"class":85},[68,136451,63952],{"class":92},[68,136453,112],{"class":85},[68,136455,136456],{"class":70,"line":320},[68,136457,118],{"class":85},[58,136459,136460],{"className":60,"code":908,"language":62,"meta":63,"style":63},[65,136461,136462,136468,136484],{"__ignoreMap":63},[68,136463,136464,136466],{"class":70,"line":71},[68,136465,82],{"class":81},[68,136467,86],{"class":85},[68,136469,136470,136472,136474,136476,136478,136480,136482],{"class":70,"line":78},[68,136471,93],{"class":92},[68,136473,96],{"class":85},[68,136475,99],{"class":92},[68,136477,103],{"class":102},[68,136479,106],{"class":92},[68,136481,109],{"class":92},[68,136483,112],{"class":85},[68,136485,136486],{"class":70,"line":89},[68,136487,118],{"class":85},[38,136489],{"style":40,"src":136490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136492,136494],{"id":136493},"_132-css用户界面样式","13.2 css用户界面样式",[43,136496,136498],{"id":136497},"_1321-鼠标样式","13.2.1 鼠标样式",[58,136500,136502],{"className":60,"code":136501,"language":62,"meta":63,"style":63},"\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",[65,136503,136504,136509,136528,136546,136565,136582],{"__ignoreMap":63},[68,136505,136506],{"class":70,"line":71},[68,136507,136508],{"class":74},"\u002F* 鼠标样式 *\u002F\n",[68,136510,136511,136513,136515,136518,136520,136522,136525],{"class":70,"line":78},[68,136512,82],{"class":81},[68,136514,81384],{"class":85},[68,136516,136517],{"class":92},"cursor",[68,136519,96],{"class":85},[68,136521,63614],{"class":92},[68,136523,136524],{"class":85},"; }   ",[68,136526,136527],{"class":74},"\u002F* 手型 *\u002F\n",[68,136529,136530,136532,136534,136536,136538,136541,136543],{"class":70,"line":89},[68,136531,82],{"class":81},[68,136533,81384],{"class":85},[68,136535,136517],{"class":92},[68,136537,96],{"class":85},[68,136539,136540],{"class":92},"default",[68,136542,136524],{"class":85},[68,136544,136545],{"class":74},"\u002F* 默认 *\u002F\n",[68,136547,136548,136550,136552,136554,136556,136559,136562],{"class":70,"line":115},[68,136549,82],{"class":81},[68,136551,81384],{"class":85},[68,136553,136517],{"class":92},[68,136555,96],{"class":85},[68,136557,136558],{"class":92},"move",[68,136560,136561],{"class":85},"; }      ",[68,136563,136564],{"class":74},"\u002F* 移动 *\u002F\n",[68,136566,136567,136569,136571,136573,136575,136577,136579],{"class":70,"line":280},[68,136568,82],{"class":81},[68,136570,81384],{"class":85},[68,136572,136517],{"class":92},[68,136574,96],{"class":85},[68,136576,6786],{"class":92},[68,136578,136561],{"class":85},[68,136580,136581],{"class":74},"\u002F* 文本 *\u002F\n",[68,136583,136584,136586,136588,136590,136592,136595,136598],{"class":70,"line":301},[68,136585,82],{"class":81},[68,136587,81384],{"class":85},[68,136589,136517],{"class":92},[68,136591,96],{"class":85},[68,136593,136594],{"class":92},"not-allowed",[68,136596,136597],{"class":85},"; } ",[68,136599,136600],{"class":74},"\u002F* 禁止 *\u002F\n",[120,136602,136603,136611],{},[123,136604,136605],{},[126,136606,136607,136609],{},[129,136608,1284],{"align":131},[129,136610,1032],{"align":131},[137,136612,136613,136620,136627,136634,136641],{},[126,136614,136615,136617],{},[142,136616,136540],{"align":131},[142,136618,136619],{"align":131},"小白 默认",[126,136621,136622,136624],{},[142,136623,63614],{"align":131},[142,136625,136626],{"align":131},"小手",[126,136628,136629,136631],{},[142,136630,136558],{"align":131},[142,136632,136633],{"align":131},"移动",[126,136635,136636,136638],{},[142,136637,6786],{"align":131},[142,136639,136640],{"align":131},"文本",[126,136642,136643,136645],{},[142,136644,136594],{"align":131},[142,136646,136647],{"align":131},"禁止",[43,136649,136651],{"id":136650},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136653,136654],{},"去除表单轮廓线",[19,136656,136657],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[58,136659,136660],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,136661,136662,136666,136672,136688],{"__ignoreMap":63},[68,136663,136664],{"class":70,"line":71},[68,136665,75],{"class":74},[68,136667,136668,136670],{"class":70,"line":78},[68,136669,82],{"class":81},[68,136671,86],{"class":85},[68,136673,136674,136676,136678,136680,136682,136684,136686],{"class":70,"line":89},[68,136675,93],{"class":92},[68,136677,96],{"class":85},[68,136679,99],{"class":92},[68,136681,103],{"class":102},[68,136683,106],{"class":92},[68,136685,109],{"class":92},[68,136687,112],{"class":85},[68,136689,136690],{"class":70,"line":115},[68,136691,118],{"class":85},[19,136693,136694],{},"文本域：",[38,136696],{"style":40,"src":136697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136699,136700],{},"此时会有一个空白区域",[38,136702],{"style":40,"src":136703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136705,136706],{},"写在同一行就不会出现这个问题",[38,136708],{"style":40,"src":136709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136711,136712],{},"文本域是行内块元素，一定记住！！！",[19,136714,99808],{},[38,136716],{"style":40,"src":136717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136719,136720],{},"文本域尽量放在一行",[19,136722,136723],{},"知识回顾：cols是列，rols是行",[38,136725],{"style":40,"src":136726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136728,136729],{},"它可以进行拖动，显然这是我们不愿意看到的",[38,136731],{"style":40,"src":136732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136734,136735],{},"使用resize进行解决",[58,136737,136739],{"className":60,"code":136738,"language":62,"meta":63,"style":63},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[65,136740,136741,136747,136760],{"__ignoreMap":63},[68,136742,136743,136745],{"class":70,"line":71},[68,136744,55405],{"class":81},[68,136746,86],{"class":85},[68,136748,136749,136751,136753,136755,136757],{"class":70,"line":78},[68,136750,72378],{"class":92},[68,136752,96],{"class":85},[68,136754,56321],{"class":92},[68,136756,606],{"class":85},[68,136758,136759],{"class":74},"\u002F* 取消表单轮廓线 *\u002F\n",[68,136761,136762],{"class":70,"line":89},[68,136763,118],{"class":85},[19,136765,136766],{},"此时就无法通过右下方实现拖动了",[43,136768,136770],{"id":136769},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136772,136773],{},"实现一个盒子中的文字和图片对齐",[19,136775,136776,136777,136780],{},"用于设置一个元素的 ",[1890,136778,136779],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136782,136783],{},"图片和文字默认是基线对齐",[38,136785],{"style":40,"src":136786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[58,136788,136789],{"className":60,"code":136738,"language":62,"meta":63,"style":63},[65,136790,136791,136797,136809],{"__ignoreMap":63},[68,136792,136793,136795],{"class":70,"line":71},[68,136794,55405],{"class":81},[68,136796,86],{"class":85},[68,136798,136799,136801,136803,136805,136807],{"class":70,"line":78},[68,136800,72378],{"class":92},[68,136802,96],{"class":85},[68,136804,56321],{"class":92},[68,136806,606],{"class":85},[68,136808,136759],{"class":74},[68,136810,136811],{"class":70,"line":89},[68,136812,118],{"class":85},[38,136814],{"style":40,"src":136815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23593,136817,136819],{"id":136818},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136821,136822],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[38,136824],{"style":40,"src":136825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136827,136828,136829,136832],{},"此时可以给图片、表单这些行内块元素的 ",[1890,136830,136831],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23593,136834,136836],{"id":136835},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136838,136839],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136841,16230],{},[58,136843,136845],{"className":60,"code":136844,"language":62,"meta":63,"style":63},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[65,136846,136847,136852,136858,136870],{"__ignoreMap":63},[68,136848,136849],{"class":70,"line":71},[68,136850,136851],{"class":74},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[68,136853,136854,136856],{"class":70,"line":78},[68,136855,38],{"class":81},[68,136857,86],{"class":85},[68,136859,136860,136863,136865,136868],{"class":70,"line":89},[68,136861,136862],{"class":92},"  vertical-align",[68,136864,96],{"class":85},[68,136866,136867],{"class":92},"middle",[68,136869,112],{"class":85},[68,136871,136872],{"class":70,"line":115},[68,136873,118],{"class":85},[38,136875],{"style":40,"src":136876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136878,136879],{},"主要解决方法有两种：",[48,136881,136882],{},[51,136883,136884,136887,136888,136891],{},[1890,136885,136886],{},"给图片"," 添加 ",[1890,136889,136890],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136893,136894,136895],{},"2.把图片转换为块级元素 ",[1890,136896,136897],{},"display: block",[19,136899,136900],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136902,136903],{},"img {",[19,136905,136906],{},"vertical-align:middle;",[19,136908,2681],{},[43,136910,136912],{"id":136911},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136914,136915],{},"效果：",[38,136917],{"style":40,"src":136918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136920,136921],{},"单行文本溢出显示省略号--必须满足三个条件：",[58,136923,136925],{"className":60,"code":136924,"language":62,"meta":63,"style":63},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[65,136926,136927,136932,136938,136948,136953,136963],{"__ignoreMap":63},[68,136928,136929],{"class":70,"line":71},[68,136930,136931],{"class":74},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[68,136933,136934,136936],{"class":70,"line":78},[68,136935,38],{"class":81},[68,136937,86],{"class":85},[68,136939,136940,136942,136944,136946],{"class":70,"line":89},[68,136941,136862],{"class":92},[68,136943,96],{"class":85},[68,136945,136867],{"class":92},[68,136947,112],{"class":85},[68,136949,136950],{"class":70,"line":115},[68,136951,136952],{"class":74},"  \u002F* 或 *\u002F\n",[68,136954,136955,136957,136959,136961],{"class":70,"line":280},[68,136956,129735],{"class":92},[68,136958,96],{"class":85},[68,136960,62453],{"class":92},[68,136962,112],{"class":85},[68,136964,136965],{"class":70,"line":301},[68,136966,118],{"class":85},[43,136968,136970],{"id":136969},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136972,136915],{},[38,136974],{"style":40,"src":136975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136977,136978,136979,136982],{},"多行文本溢出显示省略号， ",[1890,136980,136981],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[58,136984,136985],{"className":60,"code":136924,"language":62,"meta":63,"style":63},[65,136986,136987,136991,136997,137007,137011,137021],{"__ignoreMap":63},[68,136988,136989],{"class":70,"line":71},[68,136990,136931],{"class":74},[68,136992,136993,136995],{"class":70,"line":78},[68,136994,38],{"class":81},[68,136996,86],{"class":85},[68,136998,136999,137001,137003,137005],{"class":70,"line":89},[68,137000,136862],{"class":92},[68,137002,96],{"class":85},[68,137004,136867],{"class":92},[68,137006,112],{"class":85},[68,137008,137009],{"class":70,"line":115},[68,137010,136952],{"class":74},[68,137012,137013,137015,137017,137019],{"class":70,"line":280},[68,137014,129735],{"class":92},[68,137016,96],{"class":85},[68,137018,62453],{"class":92},[68,137020,112],{"class":85},[68,137022,137023],{"class":70,"line":301},[68,137024,118],{"class":85},[19,137026,137027],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137029,137031],{"id":137030},"_133-常见布局技巧","13.3 常见布局技巧",[19,137033,137034],{},[1890,137035,137036],{},"巧妙利用一个技术更快更好的布局：",[48,137038,137039,137042,137045,137048],{},[51,137040,137041],{},"margin负值的运用",[51,137043,137044],{},"文字围绕浮动元素",[51,137046,137047],{},"行内块的巧妙运用",[51,137049,137050],{},"CSS三角强化",[43,137052,137054],{"id":137053},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137056,137057],{},"应用场景：",[38,137059],{"style":40,"src":137060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[38,137062],{"style":40,"src":137063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137065,137066],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137068,137069],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[58,137071,137072],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,137073,137074,137078,137084,137100],{"__ignoreMap":63},[68,137075,137076],{"class":70,"line":71},[68,137077,75],{"class":74},[68,137079,137080,137082],{"class":70,"line":78},[68,137081,82],{"class":81},[68,137083,86],{"class":85},[68,137085,137086,137088,137090,137092,137094,137096,137098],{"class":70,"line":89},[68,137087,93],{"class":92},[68,137089,96],{"class":85},[68,137091,99],{"class":92},[68,137093,103],{"class":102},[68,137095,106],{"class":92},[68,137097,109],{"class":92},[68,137099,112],{"class":85},[68,137101,137102],{"class":70,"line":115},[68,137103,118],{"class":85},[38,137105],{"style":40,"src":137106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137108,137109],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[58,137111,137113],{"className":60,"code":137112,"language":62,"meta":63,"style":63},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[65,137114,137115,137120,137126,137136,137148,137160],{"__ignoreMap":63},[68,137116,137117],{"class":70,"line":71},[68,137118,137119],{"class":74},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[68,137121,137122,137124],{"class":70,"line":78},[68,137123,588],{"class":587},[68,137125,86],{"class":85},[68,137127,137128,137130,137132,137134],{"class":70,"line":89},[68,137129,133678],{"class":92},[68,137131,96],{"class":85},[68,137133,56348],{"class":92},[68,137135,112],{"class":85},[68,137137,137138,137140,137142,137144,137146],{"class":70,"line":115},[68,137139,133692],{"class":92},[68,137141,96],{"class":85},[68,137143,2182],{"class":92},[68,137145,103],{"class":102},[68,137147,112],{"class":85},[68,137149,137150,137152,137154,137156,137158],{"class":70,"line":280},[68,137151,133709],{"class":92},[68,137153,96],{"class":85},[68,137155,2436],{"class":92},[68,137157,103],{"class":102},[68,137159,112],{"class":85},[68,137161,137162],{"class":70,"line":301},[68,137163,118],{"class":85},[19,137165,137166],{},"加上上述代码会发现：",[38,137168],{"style":40,"src":137169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137171,137172],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137174,137175],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[58,137177,137178],{"className":60,"code":137112,"language":62,"meta":63,"style":63},[65,137179,137180,137184,137190,137200,137212,137224],{"__ignoreMap":63},[68,137181,137182],{"class":70,"line":71},[68,137183,137119],{"class":74},[68,137185,137186,137188],{"class":70,"line":78},[68,137187,588],{"class":587},[68,137189,86],{"class":85},[68,137191,137192,137194,137196,137198],{"class":70,"line":89},[68,137193,133678],{"class":92},[68,137195,96],{"class":85},[68,137197,56348],{"class":92},[68,137199,112],{"class":85},[68,137201,137202,137204,137206,137208,137210],{"class":70,"line":115},[68,137203,133692],{"class":92},[68,137205,96],{"class":85},[68,137207,2182],{"class":92},[68,137209,103],{"class":102},[68,137211,112],{"class":85},[68,137213,137214,137216,137218,137220,137222],{"class":70,"line":280},[68,137215,133709],{"class":92},[68,137217,96],{"class":85},[68,137219,2436],{"class":92},[68,137221,103],{"class":102},[68,137223,112],{"class":85},[68,137225,137226],{"class":70,"line":301},[68,137227,118],{"class":85},[19,137229,137230],{},"解决方式2：",[19,137232,137233],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[58,137235,137237],{"className":60,"code":137236,"language":62,"meta":63,"style":63},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[65,137238,137239,137245,137255,137267,137279],{"__ignoreMap":63},[68,137240,137241,137243],{"class":70,"line":71},[68,137242,82],{"class":81},[68,137244,86],{"class":85},[68,137246,137247,137249,137251,137253],{"class":70,"line":78},[68,137248,133678],{"class":92},[68,137250,96],{"class":85},[68,137252,56348],{"class":92},[68,137254,112],{"class":85},[68,137256,137257,137259,137261,137263,137265],{"class":70,"line":89},[68,137258,133692],{"class":92},[68,137260,96],{"class":85},[68,137262,2182],{"class":92},[68,137264,103],{"class":102},[68,137266,112],{"class":85},[68,137268,137269,137271,137273,137275,137277],{"class":70,"line":115},[68,137270,133709],{"class":92},[68,137272,96],{"class":85},[68,137274,2436],{"class":92},[68,137276,103],{"class":102},[68,137278,112],{"class":85},[68,137280,137281],{"class":70,"line":280},[68,137282,118],{"class":85},[43,137284,137286],{"id":137285},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137288,137057],{},[38,137290],{"style":40,"src":137291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137293,137294],{},"实现结构图：",[38,137296],{"style":40,"src":137297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137299,137300],{},"巧妙运用浮动元素不会压住文字的特性",[19,137302,137303],{},"代码显示：",[58,137305,137307],{"className":60,"code":137306,"language":62,"meta":63,"style":63},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[65,137308,137309,137315,137325,137329,137334,137338,137344,137358],{"__ignoreMap":63},[68,137310,137311,137313],{"class":70,"line":71},[68,137312,588],{"class":587},[68,137314,86],{"class":85},[68,137316,137317,137319,137321,137323],{"class":70,"line":78},[68,137318,1243],{"class":92},[68,137320,96],{"class":85},[68,137322,131],{"class":92},[68,137324,112],{"class":85},[68,137326,137327],{"class":70,"line":89},[68,137328,118],{"class":85},[68,137330,137331],{"class":70,"line":115},[68,137332,137333],{"class":85},"```Css\n",[68,137335,137336],{"class":70,"line":280},[68,137337,582],{"class":74},[68,137339,137340,137342],{"class":70,"line":301},[68,137341,588],{"class":587},[68,137343,86],{"class":85},[68,137345,137346,137348,137350,137352,137354,137356],{"class":70,"line":320},[68,137347,595],{"class":92},[68,137349,96],{"class":85},[68,137351,600],{"class":92},[68,137353,603],{"class":92},[68,137355,606],{"class":85},[68,137357,609],{"class":74},[68,137359,137360],{"class":70,"line":2915},[68,137361,118],{"class":85},[19,137363,137364],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[58,137366,137369],{"className":137367,"code":137368,"language":6786},[6784],"\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",[65,137370,137368],{"__ignoreMap":63},[38,137372],{"style":40,"src":137373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137375,137376],{},"最终展示结果：",[58,137378,137379],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,137380,137381,137385,137391,137405],{"__ignoreMap":63},[68,137382,137383],{"class":70,"line":71},[68,137384,582],{"class":74},[68,137386,137387,137389],{"class":70,"line":78},[68,137388,588],{"class":587},[68,137390,86],{"class":85},[68,137392,137393,137395,137397,137399,137401,137403],{"class":70,"line":89},[68,137394,595],{"class":92},[68,137396,96],{"class":85},[68,137398,600],{"class":92},[68,137400,603],{"class":92},[68,137402,606],{"class":85},[68,137404,609],{"class":74},[68,137406,137407],{"class":70,"line":115},[68,137408,118],{"class":85},[38,137410],{"style":40,"src":137411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137413,137415],{"id":137414},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[43,137417,137419],{"id":137418},"_1341-原理","13.4.1 原理",[38,137421],{"style":40,"src":137422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[58,137424,137425],{"className":60,"code":575,"language":62,"meta":63,"style":63},[65,137426,137427,137431,137437,137451],{"__ignoreMap":63},[68,137428,137429],{"class":70,"line":71},[68,137430,582],{"class":74},[68,137432,137433,137435],{"class":70,"line":78},[68,137434,588],{"class":587},[68,137436,86],{"class":85},[68,137438,137439,137441,137443,137445,137447,137449],{"class":70,"line":89},[68,137440,595],{"class":92},[68,137442,96],{"class":85},[68,137444,600],{"class":92},[68,137446,603],{"class":92},[68,137448,606],{"class":85},[68,137450,609],{"class":74},[68,137452,137453],{"class":70,"line":115},[68,137454,118],{"class":85},[43,137456,137458],{"id":137457},"_1342-实例","13.4.2 实例",[38,137460],{"style":40,"src":137461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[58,137463,137464],{"className":60,"code":1229,"language":62,"meta":63,"style":63},[65,137465,137466,137472,137482,137486,137492,137502],{"__ignoreMap":63},[68,137467,137468,137470],{"class":70,"line":71},[68,137469,1236],{"class":587},[68,137471,86],{"class":85},[68,137473,137474,137476,137478,137480],{"class":70,"line":78},[68,137475,1243],{"class":92},[68,137477,96],{"class":85},[68,137479,131],{"class":92},[68,137481,112],{"class":85},[68,137483,137484],{"class":70,"line":89},[68,137485,118],{"class":85},[68,137487,137488,137490],{"class":70,"line":115},[68,137489,1258],{"class":587},[68,137491,86],{"class":85},[68,137493,137494,137496,137498,137500],{"class":70,"line":280},[68,137495,1243],{"class":92},[68,137497,96],{"class":85},[68,137499,1269],{"class":92},[68,137501,112],{"class":85},[68,137503,137504],{"class":70,"line":301},[68,137505,118],{"class":85},[14,137507,137509],{"id":137508},"_135-css的初始化","13.5 css的初始化",[19,137511,137512],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137514,137515],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137517,137518],{},"每个网页都必须首先进行 CSS初始化。",[19,137520,137521],{},"这里我们以 京东CSS初始化代码为例。",[19,137523,137524],{},"在网页右键查看网页源代码",[19,137526,137527],{},"找到css的link引入语句",[19,137529,137530],{},"然后ctrl+f 输入body",[19,137532,78804],{},[38,137534],{"style":40,"src":137535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137537,78827],{},[38,137539],{"style":40,"src":137540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137542,137543],{},"③打开了网页上传压缩的代码",[38,137545],{"style":40,"src":137546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137548,137549],{},"④从body前可以查看这个网页的初始化代码",[19,137551,137552],{},[1890,137553,137554],{},"Unicode编码字体：",[19,137556,137557],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137559,84784],{},[19,137561,137562],{},"黑体 \\9ED1\\4F53",[19,137564,137565],{},"宋体 \\5B8B\\4F53",[19,137567,137568],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1652,137570,137571],{},"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":63,"searchDepth":78,"depth":78,"links":137573},[137574,137575,137582,137586,137590],{"id":136371,"depth":78,"text":136372},{"id":136493,"depth":78,"text":136494,"children":137576},[137577,137578,137579,137580,137581],{"id":136497,"depth":89,"text":136498},{"id":136650,"depth":89,"text":136651},{"id":136769,"depth":89,"text":136770},{"id":136911,"depth":89,"text":136912},{"id":136969,"depth":89,"text":136970},{"id":137030,"depth":78,"text":137031,"children":137583},[137584,137585],{"id":137053,"depth":89,"text":137054},{"id":137285,"depth":89,"text":137286},{"id":137414,"depth":78,"text":137415,"children":137587},[137588,137589],{"id":137418,"depth":89,"text":137419},{"id":137457,"depth":89,"text":137458},{"id":137508,"depth":78,"text":137509},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136363,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137597,"title":137598,"body":137599,"description":1676,"extension":1677,"meta":139285,"navigation":1679,"path":139286,"seo":139287,"stem":139288,"__hash__":139289},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137600,"toc":139274},[137601,137604,137608,137612,137615,137622,137625,137628,137666,137669,137671,137685,137689,137698,137702,137707,137710,137713,137716,137751,137756,137759,137789,137792,137797,137800,137803,137833,137836,137890,137893,137897,137902,137914,137917,137921,137951,137954,137959,137962,137992,137995,137999,138016,138020,138024,138027,138060,138063,138067,138070,138073,138076,138079,138082,138193,138196,138199,138202,138304,138307,138311,138315,138319,138322,138362,138365,138367,138383,138387,138390,138395,138476,138479,138482,138608,138613,138616,138624,138627,138632,138717,138720,138724,138727,138730,138734,138754,138759,138843,138846,138851,138854,138857,138935,138938,138941,138944,138947,138950,138955,138958,138961,139033,139036,139041,139044,139141,139144,139150,139153,139156,139159,139162,139165,139168,139171,139174,139178,139183,139186,139219,139224,139227,139268,139271],[10,137602,137598],{"id":137603},"_14-html5与css3新特性",[14,137605,137607],{"id":137606},"_141-html5的新特性","14.1 HTML5的新特性",[43,137609,137611],{"id":137610},"_1411-基本标签","14.1.1 基本标签",[19,137613,137614],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137616,137617,137618,137621],{},"这些新特性都有兼容性问题，基本是 ",[1890,137619,137620],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137623,137624],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137626,137627],{},"现在使用的是新特性：",[168,137629,137630,137636,137642,137648,137654,137660],{},[51,137631,137632,137635],{},[65,137633,137634],{},"\u003Cheader>"," 头部标签",[51,137637,137638,137641],{},[65,137639,137640],{},"\u003Cnav>"," 导航标签",[51,137643,137644,137647],{},[65,137645,137646],{},"\u003Carticle>"," 内容标签",[51,137649,137650,137653],{},[65,137651,137652],{},"\u003Csection>"," 定义文档某个区域",[51,137655,137656,137659],{},[65,137657,137658],{},"\u003Caside>"," 侧边栏标签",[51,137661,137662,137665],{},[65,137663,137664],{},"\u003Cfooter>"," 尾部标签",[38,137667],{"style":40,"src":137668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137670,1780],{},[168,137672,137673,137676,137679,137682],{},[51,137674,137675],{},"这种语义化标准主要是针对搜索引擎的",[51,137677,137678],{},"这些标签页面中可以经常使用",[51,137680,137681],{},"在IE9中，需要把这些元素转换为块级元素",[51,137683,137684],{},"移动端更喜欢使用这些标签",[43,137686,137688],{"id":137687},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137690,137691,137692,137694,137695,137697],{},"音频 ",[1890,137693,29767],{}," 和视频 ",[1890,137696,29776],{}," 两个标签",[23593,137699,137701],{"id":137700},"_14121-视频标签-video","14.1.2.1 视频标签- video",[48,137703,137704],{},[51,137705,137706],{},"支持格式：",[38,137708],{"style":40,"src":137709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137711,137712],{},"尽量使用MP4，兼容性好",[19,137714,137715],{},"用MP4就可以",[58,137717,137719],{"className":847,"code":137718,"language":849,"meta":63,"style":63},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[65,137720,137721],{"__ignoreMap":63},[68,137722,137723,137725,137727,137729,137731,137734,137736,137739,137742,137745,137747,137749],{"class":70,"line":71},[68,137724,861],{"class":85},[68,137726,29776],{"class":81},[68,137728,56823],{"class":587},[68,137730,869],{"class":85},[68,137732,137733],{"class":872},"\"movie.mp4\"",[68,137735,93999],{"class":587},[68,137737,137738],{"class":587}," autoplay",[68,137740,137741],{"class":587}," muted",[68,137743,137744],{"class":587}," loop",[68,137746,56898],{"class":85},[68,137748,29776],{"class":81},[68,137750,876],{"class":85},[48,137752,137753],{"start":78},[51,137754,137755],{},"兼容写法",[19,137757,137758],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[58,137760,137761],{"className":847,"code":137718,"language":849,"meta":63,"style":63},[65,137762,137763],{"__ignoreMap":63},[68,137764,137765,137767,137769,137771,137773,137775,137777,137779,137781,137783,137785,137787],{"class":70,"line":71},[68,137766,861],{"class":85},[68,137768,29776],{"class":81},[68,137770,56823],{"class":587},[68,137772,869],{"class":85},[68,137774,137733],{"class":872},[68,137776,93999],{"class":587},[68,137778,137738],{"class":587},[68,137780,137741],{"class":587},[68,137782,137744],{"class":587},[68,137784,56898],{"class":85},[68,137786,29776],{"class":81},[68,137788,876],{"class":85},[19,137790,137791],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[48,137793,137794],{"start":89},[51,137795,137796],{},"video常用属性",[38,137798],{"style":40,"src":137799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137801,137802],{},"poster属性后面是跟的等待加载图片的地址",[58,137804,137805],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,137806,137807],{"__ignoreMap":63},[68,137808,137809,137811,137813,137815,137817,137819,137821,137823,137825,137827,137829,137831],{"class":70,"line":71},[68,137810,861],{"class":85},[68,137812,38],{"class":81},[68,137814,56823],{"class":587},[68,137816,869],{"class":85},[68,137818,135389],{"class":872},[68,137820,56831],{"class":587},[68,137822,869],{"class":85},[68,137824,135396],{"class":872},[68,137826,135399],{"class":587},[68,137828,869],{"class":85},[68,137830,135404],{"class":872},[68,137832,876],{"class":85},[19,137834,137835],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[58,137837,137839],{"className":60,"code":137838,"language":62,"meta":63,"style":63},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[65,137840,137841,137846,137852,137876,137881,137886],{"__ignoreMap":63},[68,137842,137843],{"class":70,"line":71},[68,137844,137845],{"class":74},"\u002F* 2D 位移 *\u002F\n",[68,137847,137848,137850],{"class":70,"line":78},[68,137849,82],{"class":81},[68,137851,86],{"class":85},[68,137853,137854,137857,137859,137862,137864,137866,137868,137870,137872,137874],{"class":70,"line":89},[68,137855,137856],{"class":92},"  transform",[68,137858,96],{"class":85},[68,137860,137861],{"class":92},"translate",[68,137863,997],{"class":85},[68,137865,2047],{"class":92},[68,137867,103],{"class":102},[68,137869,1002],{"class":85},[68,137871,2392],{"class":92},[68,137873,103],{"class":102},[68,137875,1016],{"class":85},[68,137877,137878],{"class":70,"line":115},[68,137879,137880],{"class":74},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[68,137882,137883],{"class":70,"line":280},[68,137884,137885],{"class":74},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[68,137887,137888],{"class":70,"line":301},[68,137889,118],{"class":85},[19,137891,137892],{},"muted:自动静音属性",[23593,137894,137896],{"id":137895},"_14122-音频标签audio","14.1.2.2 音频标签audio",[48,137898,137899],{},[51,137900,137901],{},"基本使用",[19,137903,137904,137905,137910,137911],{},"当前 ",[1890,137906,137907],{},[65,137908,137909],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1890,137912,137913],{},"mp3格式",[38,137915],{"style":40,"src":137916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[48,137918,137919],{"start":78},[51,137920,137755],{},[58,137922,137923],{"className":847,"code":137718,"language":849,"meta":63,"style":63},[65,137924,137925],{"__ignoreMap":63},[68,137926,137927,137929,137931,137933,137935,137937,137939,137941,137943,137945,137947,137949],{"class":70,"line":71},[68,137928,861],{"class":85},[68,137930,29776],{"class":81},[68,137932,56823],{"class":587},[68,137934,869],{"class":85},[68,137936,137733],{"class":872},[68,137938,93999],{"class":587},[68,137940,137738],{"class":587},[68,137942,137741],{"class":587},[68,137944,137744],{"class":587},[68,137946,56898],{"class":85},[68,137948,29776],{"class":81},[68,137950,876],{"class":85},[19,137952,137953],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[48,137955,137956],{"start":89},[51,137957,137958],{},"常用属性",[38,137960],{"style":40,"src":137961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[58,137963,137964],{"className":847,"code":137718,"language":849,"meta":63,"style":63},[65,137965,137966],{"__ignoreMap":63},[68,137967,137968,137970,137972,137974,137976,137978,137980,137982,137984,137986,137988,137990],{"class":70,"line":71},[68,137969,861],{"class":85},[68,137971,29776],{"class":81},[68,137973,56823],{"class":587},[68,137975,869],{"class":85},[68,137977,137733],{"class":872},[68,137979,93999],{"class":587},[68,137981,137738],{"class":587},[68,137983,137741],{"class":587},[68,137985,137744],{"class":587},[68,137987,56898],{"class":85},[68,137989,29776],{"class":81},[68,137991,876],{"class":85},[19,137993,137994],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23593,137996,137998],{"id":137997},"_14123-总结","14.1.2.3 总结",[168,138000,138001,138004,138007,138010,138013],{},[51,138002,138003],{},"音频标签和视频标签使用方式基本一致",[51,138005,138006],{},"浏览器支持情况不同",[51,138008,138009],{},"谷歌浏览器把音频和视频自动播放禁止了",[51,138011,138012],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[51,138014,138015],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[43,138017,138019],{"id":138018},"_1413-表单元素","14.1.3 表单元素",[23593,138021,138023],{"id":138022},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[38,138025],{"style":40,"src":138026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[58,138028,138030],{"className":847,"code":138029,"language":849,"meta":63,"style":63},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[65,138031,138032],{"__ignoreMap":63},[68,138033,138034,138036,138038,138040,138042,138044,138046,138048,138051,138053,138055,138058],{"class":70,"line":71},[68,138035,861],{"class":85},[68,138037,55405],{"class":81},[68,138039,55408],{"class":587},[68,138041,869],{"class":85},[68,138043,64282],{"class":872},[68,138045,16516],{"class":587},[68,138047,869],{"class":85},[68,138049,138050],{"class":872},"\"username\"",[68,138052,62604],{"class":587},[68,138054,869],{"class":85},[68,138056,138057],{"class":872},"\"请输入用户名\"",[68,138059,876],{"class":85},[38,138061],{"style":40,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23593,138064,138066],{"id":138065},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[38,138068],{"style":40,"src":138069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138071,138072],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138074,138075],{},"快捷操作：",[38,138077],{"style":40,"src":138078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138080,138081],{},"例子1：",[58,138083,138085],{"className":847,"code":138084,"language":849,"meta":63,"style":63},"\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",[65,138086,138087,138110,138137,138166,138185],{"__ignoreMap":63},[68,138088,138089,138091,138093,138095,138097,138100,138103,138105,138108],{"class":70,"line":71},[68,138090,861],{"class":85},[68,138092,68207],{"class":81},[68,138094,68210],{"class":587},[68,138096,869],{"class":85},[68,138098,138099],{"class":872},"\"\u002Fsubmit\"",[68,138101,138102],{"class":587}," method",[68,138104,869],{"class":85},[68,138106,138107],{"class":872},"\"post\"",[68,138109,876],{"class":85},[68,138111,138112,138114,138116,138118,138120,138122,138124,138126,138128,138130,138132,138135],{"class":70,"line":78},[68,138113,53729],{"class":85},[68,138115,55405],{"class":81},[68,138117,55408],{"class":587},[68,138119,869],{"class":85},[68,138121,64282],{"class":872},[68,138123,16516],{"class":587},[68,138125,869],{"class":85},[68,138127,138050],{"class":872},[68,138129,62604],{"class":587},[68,138131,869],{"class":85},[68,138133,138134],{"class":872},"\"用户名\"",[68,138136,876],{"class":85},[68,138138,138139,138141,138143,138145,138147,138150,138152,138154,138157,138159,138161,138164],{"class":70,"line":89},[68,138140,53729],{"class":85},[68,138142,55405],{"class":81},[68,138144,55408],{"class":587},[68,138146,869],{"class":85},[68,138148,138149],{"class":872},"\"password\"",[68,138151,16516],{"class":587},[68,138153,869],{"class":85},[68,138155,138156],{"class":872},"\"pwd\"",[68,138158,62604],{"class":587},[68,138160,869],{"class":85},[68,138162,138163],{"class":872},"\"密码\"",[68,138165,876],{"class":85},[68,138167,138168,138170,138172,138174,138176,138178,138181,138183],{"class":70,"line":115},[68,138169,53729],{"class":85},[68,138171,55471],{"class":81},[68,138173,55408],{"class":587},[68,138175,869],{"class":85},[68,138177,68230],{"class":872},[68,138179,138180],{"class":85},">提交\u003C\u002F",[68,138182,55471],{"class":81},[68,138184,876],{"class":85},[68,138186,138187,138189,138191],{"class":70,"line":280},[68,138188,886],{"class":85},[68,138190,68207],{"class":81},[68,138192,876],{"class":85},[38,138194],{"style":40,"src":138195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138197,138198],{},"value是表单域的内容",[19,138200,138201],{},"例子2：",[58,138203,138204],{"className":847,"code":138084,"language":849,"meta":63,"style":63},[65,138205,138206,138226,138252,138278,138296],{"__ignoreMap":63},[68,138207,138208,138210,138212,138214,138216,138218,138220,138222,138224],{"class":70,"line":71},[68,138209,861],{"class":85},[68,138211,68207],{"class":81},[68,138213,68210],{"class":587},[68,138215,869],{"class":85},[68,138217,138099],{"class":872},[68,138219,138102],{"class":587},[68,138221,869],{"class":85},[68,138223,138107],{"class":872},[68,138225,876],{"class":85},[68,138227,138228,138230,138232,138234,138236,138238,138240,138242,138244,138246,138248,138250],{"class":70,"line":78},[68,138229,53729],{"class":85},[68,138231,55405],{"class":81},[68,138233,55408],{"class":587},[68,138235,869],{"class":85},[68,138237,64282],{"class":872},[68,138239,16516],{"class":587},[68,138241,869],{"class":85},[68,138243,138050],{"class":872},[68,138245,62604],{"class":587},[68,138247,869],{"class":85},[68,138249,138134],{"class":872},[68,138251,876],{"class":85},[68,138253,138254,138256,138258,138260,138262,138264,138266,138268,138270,138272,138274,138276],{"class":70,"line":89},[68,138255,53729],{"class":85},[68,138257,55405],{"class":81},[68,138259,55408],{"class":587},[68,138261,869],{"class":85},[68,138263,138149],{"class":872},[68,138265,16516],{"class":587},[68,138267,869],{"class":85},[68,138269,138156],{"class":872},[68,138271,62604],{"class":587},[68,138273,869],{"class":85},[68,138275,138163],{"class":872},[68,138277,876],{"class":85},[68,138279,138280,138282,138284,138286,138288,138290,138292,138294],{"class":70,"line":115},[68,138281,53729],{"class":85},[68,138283,55471],{"class":81},[68,138285,55408],{"class":587},[68,138287,869],{"class":85},[68,138289,68230],{"class":872},[68,138291,138180],{"class":85},[68,138293,55471],{"class":81},[68,138295,876],{"class":85},[68,138297,138298,138300,138302],{"class":70,"line":280},[68,138299,886],{"class":85},[68,138301,68207],{"class":81},[68,138303,876],{"class":85},[38,138305],{"style":40,"src":138306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138308,138310],{"id":138309},"_142-css新特性","14.2 CSS新特性",[43,138312,138314],{"id":138313},"_1421-新增选择器","14.2.1 新增选择器",[23593,138316,138318],{"id":138317},"_14211-属性选择器","14.2.1.1 属性选择器",[38,138320],{"style":40,"src":138321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[58,138323,138325],{"className":60,"code":138324,"language":62,"meta":63,"style":63},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[65,138326,138327,138342,138358],{"__ignoreMap":63},[68,138328,138329,138331,138333,138335,138337,138339],{"class":70,"line":71},[68,138330,55405],{"class":81},[68,138332,2626],{"class":85},[68,138334,104680],{"class":587},[68,138336,869],{"class":102},[68,138338,64282],{"class":872},[68,138340,138341],{"class":85},"] {\n",[68,138343,138344,138346,138348,138350,138352,138354,138356],{"class":70,"line":78},[68,138345,93],{"class":92},[68,138347,96],{"class":85},[68,138349,99],{"class":92},[68,138351,103],{"class":102},[68,138353,106],{"class":92},[68,138355,315],{"class":92},[68,138357,112],{"class":85},[68,138359,138360],{"class":70,"line":89},[68,138361,118],{"class":85},[38,138363],{"style":40,"src":138364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138366,1780],{},[168,138368,138369,138372,138375,138378],{},[51,138370,138371],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[51,138373,138374],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[51,138376,138377],{},"属性选择器也可以选择出来自定义的属性",[51,138379,138380,138382],{},[1890,138381,1210],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23593,138384,138386],{"id":138385},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[38,138388],{"style":40,"src":138389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[48,138391,138392],{},[51,138393,138394],{},"fist-child",[58,138396,138398],{"className":60,"code":138397,"language":62,"meta":63,"style":63},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[65,138399,138400,138405,138420,138440,138458],{"__ignoreMap":63},[68,138401,138402],{"class":70,"line":71},[68,138403,138404],{"class":74},"\u002F* 属性选择器 *\u002F\n",[68,138406,138407,138409,138411,138413,138415,138417],{"class":70,"line":78},[68,138408,55405],{"class":81},[68,138410,2626],{"class":85},[68,138412,104680],{"class":587},[68,138414,869],{"class":102},[68,138416,64282],{"class":872},[68,138418,138419],{"class":85},"] { }\n",[68,138421,138422,138424,138426,138428,138431,138434,138437],{"class":70,"line":89},[68,138423,55405],{"class":81},[68,138425,2626],{"class":85},[68,138427,16291],{"class":587},[68,138429,138430],{"class":102},"^=",[68,138432,138433],{"class":872},"\"icon\"",[68,138435,138436],{"class":85},"] { }  ",[68,138438,138439],{"class":74},"\u002F* 以 icon 开头 *\u002F\n",[68,138441,138442,138444,138446,138448,138451,138453,138455],{"class":70,"line":115},[68,138443,55405],{"class":81},[68,138445,2626],{"class":85},[68,138447,16291],{"class":587},[68,138449,138450],{"class":102},"$=",[68,138452,138433],{"class":872},[68,138454,138436],{"class":85},[68,138456,138457],{"class":74},"\u002F* 以 icon 结尾 *\u002F\n",[68,138459,138460,138462,138464,138466,138469,138471,138473],{"class":70,"line":280},[68,138461,55405],{"class":81},[68,138463,2626],{"class":85},[68,138465,16291],{"class":587},[68,138467,138468],{"class":102},"*=",[68,138470,138433],{"class":872},[68,138472,138436],{"class":85},[68,138474,138475],{"class":74},"\u002F* 包含 icon *\u002F\n",[19,138477,138478],{},"ul的第一个儿子文本为红色",[19,138480,138481],{},"一定要在冒号前加空格，不然就是选中所有的了",[58,138483,138485],{"className":60,"code":138484,"language":62,"meta":63,"style":63},".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",[65,138486,138487,138493,138503,138507,138511,138516,138529,138542,138558,138575,138592],{"__ignoreMap":63},[68,138488,138489,138491],{"class":70,"line":71},[68,138490,128413],{"class":587},[68,138492,86],{"class":85},[68,138494,138495,138497,138499,138501],{"class":70,"line":78},[68,138496,72484],{"class":92},[68,138498,96],{"class":85},[68,138500,59005],{"class":92},[68,138502,112],{"class":85},[68,138504,138505],{"class":70,"line":89},[68,138506,118],{"class":85},[68,138508,138509],{"class":70,"line":115},[68,138510,137333],{"class":85},[68,138512,138513],{"class":70,"line":280},[68,138514,138515],{"class":74},"\u002F* 结构伪类选择器 *\u002F\n",[68,138517,138518,138520,138523,138526],{"class":70,"line":301},[68,138519,51],{"class":81},[68,138521,138522],{"class":587},":first-child",[68,138524,138525],{"class":85}," { }           ",[68,138527,138528],{"class":74},"\u002F* 第一个 *\u002F\n",[68,138530,138531,138533,138536,138539],{"class":70,"line":320},[68,138532,51],{"class":81},[68,138534,138535],{"class":587},":last-child",[68,138537,138538],{"class":85}," { }            ",[68,138540,138541],{"class":74},"\u002F* 最后一个 *\u002F\n",[68,138543,138544,138546,138548,138550,138552,138555],{"class":70,"line":2915},[68,138545,51],{"class":81},[68,138547,131032],{"class":587},[68,138549,997],{"class":85},[68,138551,267],{"class":92},[68,138553,138554],{"class":85},") { }          ",[68,138556,138557],{"class":74},"\u002F* 第2个 *\u002F\n",[68,138559,138560,138562,138564,138566,138569,138572],{"class":70,"line":2921},[68,138561,51],{"class":81},[68,138563,131032],{"class":587},[68,138565,997],{"class":85},[68,138567,138568],{"class":92},"2n",[68,138570,138571],{"class":85},") { }         ",[68,138573,138574],{"class":74},"\u002F* 偶数 *\u002F\n",[68,138576,138577,138579,138581,138583,138586,138589],{"class":70,"line":2933},[68,138578,51],{"class":81},[68,138580,131032],{"class":587},[68,138582,997],{"class":85},[68,138584,138585],{"class":92},"2n+1",[68,138587,138588],{"class":85},") { }       ",[68,138590,138591],{"class":74},"\u002F* 奇数 *\u002F\n",[68,138593,138594,138596,138598,138600,138603,138605],{"class":70,"line":3214},[68,138595,51],{"class":81},[68,138597,131032],{"class":587},[68,138599,997],{"class":85},[68,138601,138602],{"class":92},"-n+3",[68,138604,138588],{"class":85},[68,138606,138607],{"class":74},"\u002F* 前3个 *\u002F\n",[82,138609,138612],{"className":138610},[138611],"example","\n  示例内容\n",[19,138614,138615],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[168,138617,138618],{},[51,138619,138620,138623],{},[65,138621,138622],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138625,138626],{},"也就是说它选择的是熊大",[48,138628,138629],{"start":301},[51,138630,138631],{},"权重",[58,138633,138635],{"className":60,"code":138634,"language":62,"meta":63,"style":63},"\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",[65,138636,138637,138641,138651,138661,138675,138689,138703],{"__ignoreMap":63},[68,138638,138639],{"class":70,"line":71},[68,138640,138515],{"class":74},[68,138642,138643,138645,138647,138649],{"class":70,"line":78},[68,138644,51],{"class":81},[68,138646,138522],{"class":587},[68,138648,138525],{"class":85},[68,138650,138528],{"class":74},[68,138652,138653,138655,138657,138659],{"class":70,"line":89},[68,138654,51],{"class":81},[68,138656,138535],{"class":587},[68,138658,138538],{"class":85},[68,138660,138541],{"class":74},[68,138662,138663,138665,138667,138669,138671,138673],{"class":70,"line":115},[68,138664,51],{"class":81},[68,138666,131032],{"class":587},[68,138668,997],{"class":85},[68,138670,267],{"class":92},[68,138672,138554],{"class":85},[68,138674,138557],{"class":74},[68,138676,138677,138679,138681,138683,138685,138687],{"class":70,"line":280},[68,138678,51],{"class":81},[68,138680,131032],{"class":587},[68,138682,997],{"class":85},[68,138684,138568],{"class":92},[68,138686,138571],{"class":85},[68,138688,138574],{"class":74},[68,138690,138691,138693,138695,138697,138699,138701],{"class":70,"line":301},[68,138692,51],{"class":81},[68,138694,131032],{"class":587},[68,138696,997],{"class":85},[68,138698,138585],{"class":92},[68,138700,138588],{"class":85},[68,138702,138591],{"class":74},[68,138704,138705,138707,138709,138711,138713,138715],{"class":70,"line":320},[68,138706,51],{"class":81},[68,138708,131032],{"class":587},[68,138710,997],{"class":85},[68,138712,138602],{"class":92},[68,138714,138588],{"class":85},[68,138716,138607],{"class":74},[19,138718,138719],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23593,138721,138723],{"id":138722},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138725,138726],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[38,138728],{"style":40,"src":138729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[48,138731,138732],{},[51,138733,1780],{},[168,138735,138736,138739,138742,138745,138748,138751],{},[51,138737,138738],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[51,138740,138741],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[51,138743,138744],{},"语法： element::before {}",[51,138746,138747],{},"before 和 after 必须有 content 属性",[51,138749,138750],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[51,138752,138753],{},"伪元素选择器和标签选择器一样，权重为 1",[48,138755,138756],{"start":78},[51,138757,138758],{},"实例",[58,138760,138761],{"className":60,"code":138634,"language":62,"meta":63,"style":63},[65,138762,138763,138767,138777,138787,138801,138815,138829],{"__ignoreMap":63},[68,138764,138765],{"class":70,"line":71},[68,138766,138515],{"class":74},[68,138768,138769,138771,138773,138775],{"class":70,"line":78},[68,138770,51],{"class":81},[68,138772,138522],{"class":587},[68,138774,138525],{"class":85},[68,138776,138528],{"class":74},[68,138778,138779,138781,138783,138785],{"class":70,"line":89},[68,138780,51],{"class":81},[68,138782,138535],{"class":587},[68,138784,138538],{"class":85},[68,138786,138541],{"class":74},[68,138788,138789,138791,138793,138795,138797,138799],{"class":70,"line":115},[68,138790,51],{"class":81},[68,138792,131032],{"class":587},[68,138794,997],{"class":85},[68,138796,267],{"class":92},[68,138798,138554],{"class":85},[68,138800,138557],{"class":74},[68,138802,138803,138805,138807,138809,138811,138813],{"class":70,"line":280},[68,138804,51],{"class":81},[68,138806,131032],{"class":587},[68,138808,997],{"class":85},[68,138810,138568],{"class":92},[68,138812,138571],{"class":85},[68,138814,138574],{"class":74},[68,138816,138817,138819,138821,138823,138825,138827],{"class":70,"line":301},[68,138818,51],{"class":81},[68,138820,131032],{"class":587},[68,138822,997],{"class":85},[68,138824,138585],{"class":92},[68,138826,138588],{"class":85},[68,138828,138591],{"class":74},[68,138830,138831,138833,138835,138837,138839,138841],{"class":70,"line":320},[68,138832,51],{"class":81},[68,138834,131032],{"class":587},[68,138836,997],{"class":85},[68,138838,138602],{"class":92},[68,138840,138588],{"class":85},[68,138842,138607],{"class":74},[38,138844],{"style":40,"src":138845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[48,138847,138848],{"start":89},[51,138849,138850],{},"使用场景1",[38,138852],{"style":40,"src":138853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138855,138856],{},"不需要再加盒子来整红色那部分了",[58,138858,138860],{"className":60,"code":138859,"language":62,"meta":63,"style":63},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[65,138861,138862,138867,138876,138887,138897,138901,138910,138921,138931],{"__ignoreMap":63},[68,138863,138864],{"class":70,"line":71},[68,138865,138866],{"class":74},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[68,138868,138869,138871,138874],{"class":70,"line":78},[68,138870,82],{"class":81},[68,138872,138873],{"class":587},"::before",[68,138875,86],{"class":85},[68,138877,138878,138881,138883,138885],{"class":70,"line":89},[68,138879,138880],{"class":92},"  content",[68,138882,96],{"class":85},[68,138884,9251],{"class":872},[68,138886,112],{"class":85},[68,138888,138889,138891,138893,138895],{"class":70,"line":115},[68,138890,129735],{"class":92},[68,138892,96],{"class":85},[68,138894,62453],{"class":92},[68,138896,112],{"class":85},[68,138898,138899],{"class":70,"line":280},[68,138900,118],{"class":85},[68,138902,138903,138905,138908],{"class":70,"line":301},[68,138904,82],{"class":81},[68,138906,138907],{"class":587},"::after",[68,138909,86],{"class":85},[68,138911,138912,138914,138916,138919],{"class":70,"line":320},[68,138913,138880],{"class":92},[68,138915,96],{"class":85},[68,138917,138918],{"class":872},"\"→\"",[68,138920,112],{"class":85},[68,138922,138923,138925,138927,138929],{"class":70,"line":2915},[68,138924,72484],{"class":92},[68,138926,96],{"class":85},[68,138928,63654],{"class":92},[68,138930,112],{"class":85},[68,138932,138933],{"class":70,"line":2921},[68,138934,118],{"class":85},[38,138936],{"style":40,"src":138937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138939,138940],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[38,138942],{"style":40,"src":138943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138945,138946],{},"但是在引用时需要先转义一下",[19,138948,138949],{},"content='\\e930'",[48,138951,138952],{"start":115},[51,138953,138954],{},"使用场景2",[19,138956,138957],{},"仿土豆效果",[19,138959,138960],{},"通过使用伪元素选择器可以减少body中盒子的数量",[58,138962,138963],{"className":60,"code":138859,"language":62,"meta":63,"style":63},[65,138964,138965,138969,138977,138987,138997,139001,139009,139019,139029],{"__ignoreMap":63},[68,138966,138967],{"class":70,"line":71},[68,138968,138866],{"class":74},[68,138970,138971,138973,138975],{"class":70,"line":78},[68,138972,82],{"class":81},[68,138974,138873],{"class":587},[68,138976,86],{"class":85},[68,138978,138979,138981,138983,138985],{"class":70,"line":89},[68,138980,138880],{"class":92},[68,138982,96],{"class":85},[68,138984,9251],{"class":872},[68,138986,112],{"class":85},[68,138988,138989,138991,138993,138995],{"class":70,"line":115},[68,138990,129735],{"class":92},[68,138992,96],{"class":85},[68,138994,62453],{"class":92},[68,138996,112],{"class":85},[68,138998,138999],{"class":70,"line":280},[68,139000,118],{"class":85},[68,139002,139003,139005,139007],{"class":70,"line":301},[68,139004,82],{"class":81},[68,139006,138907],{"class":587},[68,139008,86],{"class":85},[68,139010,139011,139013,139015,139017],{"class":70,"line":320},[68,139012,138880],{"class":92},[68,139014,96],{"class":85},[68,139016,138918],{"class":872},[68,139018,112],{"class":85},[68,139020,139021,139023,139025,139027],{"class":70,"line":2915},[68,139022,72484],{"class":92},[68,139024,96],{"class":85},[68,139026,63654],{"class":92},[68,139028,112],{"class":85},[68,139030,139031],{"class":70,"line":2921},[68,139032,118],{"class":85},[38,139034],{"style":40,"src":139035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[48,139037,139038],{"start":280},[51,139039,139040],{},"使用场景3",[19,139042,139043],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[58,139045,139047],{"className":60,"code":139046,"language":62,"meta":63,"style":63},".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",[65,139048,139049,139055,139065,139069,139073,139077,139085,139095,139105,139109,139117,139127,139137],{"__ignoreMap":63},[68,139050,139051,139053],{"class":70,"line":71},[68,139052,588],{"class":587},[68,139054,86],{"class":85},[68,139056,139057,139059,139061,139063],{"class":70,"line":78},[68,139058,1243],{"class":92},[68,139060,96],{"class":85},[68,139062,131],{"class":92},[68,139064,112],{"class":85},[68,139066,139067],{"class":70,"line":89},[68,139068,118],{"class":85},[68,139070,139071],{"class":70,"line":115},[68,139072,137333],{"class":85},[68,139074,139075],{"class":70,"line":280},[68,139076,138866],{"class":74},[68,139078,139079,139081,139083],{"class":70,"line":301},[68,139080,82],{"class":81},[68,139082,138873],{"class":587},[68,139084,86],{"class":85},[68,139086,139087,139089,139091,139093],{"class":70,"line":320},[68,139088,138880],{"class":92},[68,139090,96],{"class":85},[68,139092,9251],{"class":872},[68,139094,112],{"class":85},[68,139096,139097,139099,139101,139103],{"class":70,"line":2915},[68,139098,129735],{"class":92},[68,139100,96],{"class":85},[68,139102,62453],{"class":92},[68,139104,112],{"class":85},[68,139106,139107],{"class":70,"line":2921},[68,139108,118],{"class":85},[68,139110,139111,139113,139115],{"class":70,"line":2933},[68,139112,82],{"class":81},[68,139114,138907],{"class":587},[68,139116,86],{"class":85},[68,139118,139119,139121,139123,139125],{"class":70,"line":3214},[68,139120,138880],{"class":92},[68,139122,96],{"class":85},[68,139124,138918],{"class":872},[68,139126,112],{"class":85},[68,139128,139129,139131,139133,139135],{"class":70,"line":3219},[68,139130,72484],{"class":92},[68,139132,96],{"class":85},[68,139134,63654],{"class":92},[68,139136,112],{"class":85},[68,139138,139139],{"class":70,"line":3225},[68,139140,118],{"class":85},[19,139142,139143],{},"div {\nmargin: 0 auto;\n}",[58,139145,139148],{"className":139146,"code":139147,"language":6786},[6784],"\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",[65,139149,139147],{"__ignoreMap":63},[19,139151,139152],{},"如果想让多个元素都发生变化",[19,139154,139155],{},"不能如下操作：",[19,139157,139158],{},"transition: width 2s ease 0.5s;",[19,139160,139161],{},"transition: height 2s ease 0.5s;不对！！！",[19,139163,139164],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139166,139167],{},"使用如下：加逗号隔开",[19,139169,139170],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139172,139173],{},"transition all 2s ease;",[43,139175,139177],{"id":139176},"_1426-过渡练习","14.2.6 过渡练习",[48,139179,139180],{},[51,139181,139182],{},"进度条",[38,139184],{"style":40,"src":139185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[58,139187,139189],{"className":60,"code":139188,"language":62,"meta":63,"style":63},"div {\n  transition: all 0.3s ease;\n}\n",[65,139190,139191,139197,139215],{"__ignoreMap":63},[68,139192,139193,139195],{"class":70,"line":71},[68,139194,82],{"class":81},[68,139196,86],{"class":85},[68,139198,139199,139202,139204,139206,139209,139211,139213],{"class":70,"line":78},[68,139200,139201],{"class":92},"  transition",[68,139203,96],{"class":85},[68,139205,29714],{"class":92},[68,139207,139208],{"class":92}," 0.3",[68,139210,2431],{"class":102},[68,139212,80258],{"class":92},[68,139214,112],{"class":85},[68,139216,139217],{"class":70,"line":89},[68,139218,118],{"class":85},[48,139220,139221],{"start":78},[51,139222,139223],{},"小米logo",[19,139225,139226],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[58,139228,139230],{"className":60,"code":139229,"language":62,"meta":63,"style":63},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[65,139231,139232,139237,139243,139259,139264],{"__ignoreMap":63},[68,139233,139234],{"class":70,"line":71},[68,139235,139236],{"class":74},"\u002F* CSS3 过渡 *\u002F\n",[68,139238,139239,139241],{"class":70,"line":78},[68,139240,82],{"class":81},[68,139242,86],{"class":85},[68,139244,139245,139247,139249,139251,139253,139255,139257],{"class":70,"line":89},[68,139246,139201],{"class":92},[68,139248,96],{"class":85},[68,139250,29714],{"class":92},[68,139252,139208],{"class":92},[68,139254,2431],{"class":102},[68,139256,80258],{"class":92},[68,139258,112],{"class":85},[68,139260,139261],{"class":70,"line":115},[68,139262,139263],{"class":74},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[68,139265,139266],{"class":70,"line":280},[68,139267,118],{"class":85},[19,139269,139270],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1652,139272,139273],{},"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":63,"searchDepth":78,"depth":78,"links":139275},[139276,139281],{"id":137606,"depth":78,"text":137607,"children":139277},[139278,139279,139280],{"id":137610,"depth":89,"text":137611},{"id":137687,"depth":89,"text":137688},{"id":138018,"depth":89,"text":138019},{"id":138309,"depth":78,"text":138310,"children":139282},[139283,139284],{"id":138313,"depth":89,"text":138314},{"id":139176,"depth":89,"text":139177},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137598,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139291,"title":139292,"body":139293,"description":1676,"extension":1677,"meta":141037,"navigation":1679,"path":141038,"seo":141039,"stem":141040,"__hash__":141041},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139294,"toc":141018},[139295,139298,139302,139305,139311,139317,139321,139323,139326,139329,139332,139335,139338,139341,139344,139348,139352,139355,139358,139361,139365,139368,139371,139376,139379,139382,139385,139389,139392,139401,139404,139407,139411,139414,139417,139422,139429,139443,139451,139458,139463,139466,139469,139472,139479,139483,139489,139495,139498,139501,139506,139512,139514,139522,139527,139530,139536,139538,139543,139548,139551,139553,139558,139561,139566,139571,139605,139609,139613,139616,139620,139623,139709,139712,139749,139752,139788,139792,139797,139810,139864,139866,139894,139896,139924,139930,139944,139946,139990,139992,140036,140039,140046,140057,140059,140086,140088,140114,140121,140137,140139,140233,140235,140329,140336,140339,140344,140350,140424,140427,140429,140465,140467,140503,140506,140513,140532,140535,140538,140540,140565,140567,140591,140594,140597,140627,140631,140634,140697,140699,140765,140767,140831,140834,140866,140868,140894,140896,140922,140925,140956,140958,140984,140986,141012,141015],[10,139296,139292],{"id":139297},"_15-品优购项目上篇-搭建与公共模块",[14,139299,139301],{"id":139300},"_151-项目规划","15.1 项目规划",[38,139303],{"style":40,"src":139304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139306,139307,139310],{},[1890,139308,139309],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139312,139313,139316],{},[1890,139314,139315],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139318,139320],{"id":139319},"_152-项目介绍","15.2 项目介绍",[19,139322,139309],{},[38,139324],{"style":40,"src":139325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139327,139328],{},"主页：",[38,139330],{"style":40,"src":139331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139333,139334],{},"列表页：",[38,139336],{"style":40,"src":139337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139339,139340],{},"注册页：",[38,139342],{"style":40,"src":139343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139345,139347],{"id":139346},"_153-项目搭建工作","15.3 项目搭建工作",[43,139349,139351],{"id":139350},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[38,139353],{"style":40,"src":139354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139356,139357],{},"经常更换的图片要放到upload文件夹中",[19,139359,139360],{},"不经常换的放到images文件夹中",[43,139362,139364],{"id":139363},"_1532-创建文件如下","15.3.2 创建文件如下",[38,139366],{"style":40,"src":139367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[38,139369],{"style":40,"src":139370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139372,139373],{},[1890,139374,139375],{},"初始化样式：",[19,139377,139378],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139380,139381],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139383,139384],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[43,139386,139388],{"id":139387},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139390,139391],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139393,139394,139395,139400],{},"这里最典型的应用就是 ",[1890,139396,139397],{},[65,139398,139399],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[38,139402],{"style":40,"src":139403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139405,139406],{},"通过link方法来引入",[43,139408,139410],{"id":139409},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[38,139412],{"style":40,"src":139413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139415,139416],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[48,139418,139419],{},[51,139420,139421],{},"制作favicon图标",[19,139423,139424,139425,139428],{},"①把品优购图标切成 ",[65,139426,139427],{},"png"," 图片",[19,139430,139431,139432,139434,139435,139438,139439],{},"②把 ",[65,139433,139427],{}," 图片转换为 ",[65,139436,139437],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[1974,139440,139441],{"href":139441,"rel":139442},"http:\u002F\u002Fwww.bitbug.net\u002F",[25459],[48,139444,139445,139448],{"start":78},[51,139446,139447],{},"favicon图标放到网站根目录下",[51,139449,139450],{},"HTML页面引入favicon",[19,139452,139453,139454,139457],{},"在html 页面里面的 ",[65,139455,139456],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139459,139460],{},[65,139461,139462],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139464,139465],{},"复制这行代码或者在生成这个的网站进行复制",[38,139467],{"style":40,"src":139468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139470,139471],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139473,139474,139475],{},"例如:",[1974,139476,139477],{"href":139477,"rel":139478},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25459],[43,139480,139482],{"id":139481},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139484,139485,139488],{},[1890,139486,139487],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139490,139491,139494],{},[1890,139492,139493],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139496,139497],{},"页面必须有三个标签用来符合 SEO 优化",[38,139499],{"style":40,"src":139500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[48,139502,139503],{},[51,139504,139505],{},"title网站标题",[19,139507,139508,139511],{},[1890,139509,139510],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139513,70372],{},[168,139515,139516,139519],{},[51,139517,139518],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[51,139520,139521],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[48,139523,139524],{"start":78},[51,139525,139526],{},"description网站描述",[19,139528,139529],{},"简要说明我们网站主要是做什么的",[19,139531,139532,139535],{},[1890,139533,139534],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139537,70372],{},[19,139539,139540],{},[65,139541,139542],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[48,139544,139545],{"start":89},[51,139546,139547],{},"keywords关键词",[19,139549,139550],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139552,70372],{},[19,139554,139555],{},[65,139556,139557],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139559,139560],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139562,139563],{},[1890,139564,139565],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[48,139567,139568],{"start":115},[51,139569,139570],{},"代码总结",[58,139572,139573],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,139574,139575,139579,139593,139597],{"__ignoreMap":63},[68,139576,139577],{"class":70,"line":71},[68,139578,856],{"class":74},[68,139580,139581,139583,139585,139587,139589,139591],{"class":70,"line":78},[68,139582,861],{"class":85},[68,139584,82],{"class":81},[68,139586,866],{"class":587},[68,139588,869],{"class":85},[68,139590,873],{"class":872},[68,139592,876],{"class":85},[68,139594,139595],{"class":70,"line":89},[68,139596,881],{"class":85},[68,139598,139599,139601,139603],{"class":70,"line":115},[68,139600,886],{"class":85},[68,139602,82],{"class":81},[68,139604,876],{"class":85},[14,139606,139608],{"id":139607},"_154-项目公共部分制作","15.4 项目公共部分制作",[43,139610,139612],{"id":139611},"_1541-常用模块类命名","15.4.1 常用模块类命名",[38,139614],{"style":40,"src":139615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[43,139617,139619],{"id":139618},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139621,139622],{},"布局思路：",[168,139624,139625,139628,139631,139653,139686],{},[51,139626,139627],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[51,139629,139630],{},"里面包含版心的盒子",[51,139632,139633,139634],{},"版心盒子里面包含 1 号左侧盒子左浮动",[168,139635,139636,139644,139650],{},[51,139637,139638,139639,23095,139641,139643],{},"1 号盒子 里面包含一个",[65,139640,168],{},[65,139642,168],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[51,139645,139646,139647,139649],{},"里面的内容是水平排列，所以需要给",[65,139648,51],{},"设置浮动",[51,139651,139652],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[51,139654,139655,139656],{},"版心盒子里面包含 2 号右侧盒子右浮动",[168,139657,139658,139672,139677],{},[51,139659,139660,139661,23095,139663,139665,139666,139668,139669,139671],{},"2 号盒子 里面包含一个",[65,139662,168],{},[65,139664,168],{},"包裹",[65,139667,51],{},"，中间的",[65,139670,2656],{},"可以用样式去设置，也可以用字符 |",[51,139673,139674,139675,139649],{},"里面内容水平排列，给",[65,139676,51],{},[51,139678,139679,139680,139682,139683,139685],{},"找到里面所有偶数的 ",[65,139681,51],{}," 设置样式（偶数的 ",[65,139684,51],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[51,139687,139688,139689],{},"需要用到字体图标",[168,139690,139691,139697,139700,139703,139706],{},[51,139692,139693,139694],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[65,139695,139696],{},"arrow-icon",[51,139698,139699],{},"先要引入字体图片的资源",[51,139701,139702],{},"在样式里面利用 font-face 来进行声明",[51,139704,139705],{},"在伪元素的 content属性设置 图标的编码",[51,139707,139708],{},"给伪元素设置font-family属性",[19,139710,139711],{},"结构实例代码：",[58,139713,139715],{"className":60,"code":139714,"language":62,"meta":63,"style":63},"div::before {\n  content: \"\";\n  display: block;\n}\n",[65,139716,139717,139725,139735,139745],{"__ignoreMap":63},[68,139718,139719,139721,139723],{"class":70,"line":71},[68,139720,82],{"class":81},[68,139722,138873],{"class":587},[68,139724,86],{"class":85},[68,139726,139727,139729,139731,139733],{"class":70,"line":78},[68,139728,138880],{"class":92},[68,139730,96],{"class":85},[68,139732,9251],{"class":872},[68,139734,112],{"class":85},[68,139736,139737,139739,139741,139743],{"class":70,"line":89},[68,139738,129735],{"class":92},[68,139740,96],{"class":85},[68,139742,62453],{"class":92},[68,139744,112],{"class":85},[68,139746,139747],{"class":70,"line":115},[68,139748,118],{"class":85},[19,139750,139751],{},"样式实例代码：",[58,139753,139754],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,139755,139756,139764,139774,139784],{"__ignoreMap":63},[68,139757,139758,139760,139762],{"class":70,"line":71},[68,139759,82],{"class":81},[68,139761,138873],{"class":587},[68,139763,86],{"class":85},[68,139765,139766,139768,139770,139772],{"class":70,"line":78},[68,139767,138880],{"class":92},[68,139769,96],{"class":85},[68,139771,9251],{"class":872},[68,139773,112],{"class":85},[68,139775,139776,139778,139780,139782],{"class":70,"line":89},[68,139777,129735],{"class":92},[68,139779,96],{"class":85},[68,139781,62453],{"class":92},[68,139783,112],{"class":85},[68,139785,139786],{"class":70,"line":115},[68,139787,118],{"class":85},[43,139789,139791],{"id":139790},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[168,139793,139794],{},[51,139795,139796],{},"header 盒子必须要有高度",[19,139798,139799,139800,139802,139803],{},"1 号盒子是 ",[65,139801,132884],{}," 标志定位，在正常开发过程中， ",[1890,139804,139805,139806,139809],{},"logo的布局其实是有讲究的，需要进行 ",[65,139807,139808],{},"logoSEO","的优化 （★★★）",[168,139811,139812,139820,139828,139855],{},[51,139813,139814,139816,139817,139819],{},[65,139815,132884],{}," 里面首先放一个 ",[65,139818,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[51,139821,139822,139824,139825,139827],{},[65,139823,10],{}," 里面再放一个链接，可以返回首页的，把 ",[65,139826,132884],{}," 的背景图片给链接即可",[51,139829,139830,139831],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[168,139832,139833,139848],{},[51,139834,139835,139836,139839,139840,139843,139844,139847],{},"方法1：",[65,139837,139838],{},"text-indent"," 移到盒子外面（",[65,139841,139842],{},"text-indent: -9999px",") ，然后 ",[65,139845,139846],{},"overflow:hidden"," ，淘宝的做法",[51,139849,139850,139851,139854],{},"方法2：直接给 ",[65,139852,139853],{},"font-size: 0;"," 就看不到文字了，京东的做法",[51,139856,139857,139858,139860,139861,139863],{},"最后给链接一个 ",[65,139859,52998],{}," 属性，这样鼠标放到 ",[65,139862,132884],{}," 上就可以看到提示文字了",[19,139865,139711],{},[58,139867,139868],{"className":847,"code":133105,"language":849,"meta":63,"style":63},[65,139869,139870],{"__ignoreMap":63},[68,139871,139872,139874,139876,139878,139880,139882,139884,139886,139888,139890,139892],{"class":70,"line":71},[68,139873,861],{"class":85},[68,139875,1974],{"class":81},[68,139877,62641],{"class":587},[68,139879,869],{"class":85},[68,139881,133120],{"class":872},[68,139883,133123],{"class":587},[68,139885,869],{"class":85},[68,139887,133128],{"class":872},[68,139889,133131],{"class":85},[68,139891,1974],{"class":81},[68,139893,876],{"class":85},[19,139895,139751],{},[58,139897,139898],{"className":847,"code":133105,"language":849,"meta":63,"style":63},[65,139899,139900],{"__ignoreMap":63},[68,139901,139902,139904,139906,139908,139910,139912,139914,139916,139918,139920,139922],{"class":70,"line":71},[68,139903,861],{"class":85},[68,139905,1974],{"class":81},[68,139907,62641],{"class":587},[68,139909,869],{"class":85},[68,139911,133120],{"class":872},[68,139913,133123],{"class":587},[68,139915,869],{"class":85},[68,139917,133128],{"class":872},[68,139919,133131],{"class":85},[68,139921,1974],{"class":81},[68,139923,876],{"class":85},[19,139925,139926,139927,139929],{},"2 号盒子是 ",[65,139928,132897],{}," 搜索模块定位",[168,139931,139932,139935,139938,139941],{},[51,139933,139934],{},"search盒子利用定位的方式放在对应的位置",[51,139936,139937],{},"search盒子设置绝对定位，header盒子设置相对定位",[51,139939,139940],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[51,139942,139943],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139945,139711],{},[58,139947,139948],{"className":60,"code":133192,"language":62,"meta":63,"style":63},[65,139949,139950,139972,139976,139986],{"__ignoreMap":63},[68,139951,139952,139954,139956,139958,139960,139962,139964,139966,139968,139970],{"class":70,"line":71},[68,139953,82],{"class":81},[68,139955,1002],{"class":85},[68,139957,19],{"class":81},[68,139959,1002],{"class":85},[68,139961,10],{"class":81},[68,139963,1002],{"class":85},[68,139965,168],{"class":81},[68,139967,1002],{"class":85},[68,139969,51],{"class":81},[68,139971,86],{"class":85},[68,139973,139974],{"class":70,"line":78},[68,139975,133221],{"class":74},[68,139977,139978,139980,139982,139984],{"class":70,"line":89},[68,139979,129735],{"class":92},[68,139981,96],{"class":85},[68,139983,62453],{"class":92},[68,139985,112],{"class":85},[68,139987,139988],{"class":70,"line":115},[68,139989,118],{"class":85},[19,139991,139751],{},[58,139993,139994],{"className":60,"code":133192,"language":62,"meta":63,"style":63},[65,139995,139996,140018,140022,140032],{"__ignoreMap":63},[68,139997,139998,140000,140002,140004,140006,140008,140010,140012,140014,140016],{"class":70,"line":71},[68,139999,82],{"class":81},[68,140001,1002],{"class":85},[68,140003,19],{"class":81},[68,140005,1002],{"class":85},[68,140007,10],{"class":81},[68,140009,1002],{"class":85},[68,140011,168],{"class":81},[68,140013,1002],{"class":85},[68,140015,51],{"class":81},[68,140017,86],{"class":85},[68,140019,140020],{"class":70,"line":78},[68,140021,133221],{"class":74},[68,140023,140024,140026,140028,140030],{"class":70,"line":89},[68,140025,129735],{"class":92},[68,140027,96],{"class":85},[68,140029,62453],{"class":92},[68,140031,112],{"class":85},[68,140033,140034],{"class":70,"line":115},[68,140035,118],{"class":85},[19,140037,140038],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140040,140041,140042,140045],{},"3 号盒子是 ",[65,140043,140044],{},"hotwords"," 热词模块定位",[168,140047,140048,140051,140054],{},[51,140049,140050],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[51,140052,140053],{},"给里面所有的a标签设置 左右10px的外边距",[51,140055,140056],{},"给第一个a标签设置文字变红色（#c81623）",[19,140058,139711],{},[58,140060,140062],{"className":60,"code":140061,"language":62,"meta":63,"style":63},"div {\n  margin: 0 auto;\n}\n",[65,140063,140064,140070,140082],{"__ignoreMap":63},[68,140065,140066,140068],{"class":70,"line":71},[68,140067,82],{"class":81},[68,140069,86],{"class":85},[68,140071,140072,140074,140076,140078,140080],{"class":70,"line":78},[68,140073,595],{"class":92},[68,140075,96],{"class":85},[68,140077,600],{"class":92},[68,140079,603],{"class":92},[68,140081,112],{"class":85},[68,140083,140084],{"class":70,"line":89},[68,140085,118],{"class":85},[19,140087,139751],{},[58,140089,140090],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,140091,140092,140098,140110],{"__ignoreMap":63},[68,140093,140094,140096],{"class":70,"line":71},[68,140095,82],{"class":81},[68,140097,86],{"class":85},[68,140099,140100,140102,140104,140106,140108],{"class":70,"line":78},[68,140101,595],{"class":92},[68,140103,96],{"class":85},[68,140105,600],{"class":92},[68,140107,603],{"class":92},[68,140109,112],{"class":85},[68,140111,140112],{"class":70,"line":89},[68,140113,118],{"class":85},[19,140115,140116,140117,140120],{},"4 号盒子是 ",[65,140118,140119],{},"shopcar"," 购物车模块",[168,140122,140123,140128,140131,140134],{},[51,140124,124908,140125,140127],{},[65,140126,140119],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[51,140129,140130],{},"count 统计部分用绝对定位做",[51,140132,140133],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[51,140135,140136],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140138,139711],{},[58,140140,140141],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,140142,140143,140147,140161,140165,140179,140183,140197,140201,140215,140219],{"__ignoreMap":63},[68,140144,140145],{"class":70,"line":71},[68,140146,133311],{"class":74},[68,140148,140149,140151,140153,140155,140157,140159],{"class":70,"line":78},[68,140150,133316],{"class":587},[68,140152,81384],{"class":85},[68,140154,130479],{"class":92},[68,140156,96],{"class":85},[68,140158,133325],{"class":92},[68,140160,131048],{"class":85},[68,140162,140163],{"class":70,"line":89},[68,140164,133332],{"class":74},[68,140166,140167,140169,140171,140173,140175,140177],{"class":70,"line":115},[68,140168,133337],{"class":587},[68,140170,81384],{"class":85},[68,140172,130479],{"class":92},[68,140174,96],{"class":85},[68,140176,56348],{"class":92},[68,140178,131048],{"class":85},[68,140180,140181],{"class":70,"line":280},[68,140182,133352],{"class":74},[68,140184,140185,140187,140189,140191,140193,140195],{"class":70,"line":301},[68,140186,133357],{"class":587},[68,140188,81384],{"class":85},[68,140190,130479],{"class":92},[68,140192,96],{"class":85},[68,140194,56415],{"class":92},[68,140196,131048],{"class":85},[68,140198,140199],{"class":70,"line":320},[68,140200,133372],{"class":74},[68,140202,140203,140205,140207,140209,140211,140213],{"class":70,"line":2915},[68,140204,133377],{"class":587},[68,140206,81384],{"class":85},[68,140208,130479],{"class":92},[68,140210,96],{"class":85},[68,140212,87809],{"class":92},[68,140214,131048],{"class":85},[68,140216,140217],{"class":70,"line":2921},[68,140218,133392],{"class":74},[68,140220,140221,140223,140225,140227,140229,140231],{"class":70,"line":2933},[68,140222,133397],{"class":587},[68,140224,81384],{"class":85},[68,140226,130479],{"class":92},[68,140228,96],{"class":85},[68,140230,133406],{"class":92},[68,140232,131048],{"class":85},[19,140234,139751],{},[58,140236,140237],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,140238,140239,140243,140257,140261,140275,140279,140293,140297,140311,140315],{"__ignoreMap":63},[68,140240,140241],{"class":70,"line":71},[68,140242,133311],{"class":74},[68,140244,140245,140247,140249,140251,140253,140255],{"class":70,"line":78},[68,140246,133316],{"class":587},[68,140248,81384],{"class":85},[68,140250,130479],{"class":92},[68,140252,96],{"class":85},[68,140254,133325],{"class":92},[68,140256,131048],{"class":85},[68,140258,140259],{"class":70,"line":89},[68,140260,133332],{"class":74},[68,140262,140263,140265,140267,140269,140271,140273],{"class":70,"line":115},[68,140264,133337],{"class":587},[68,140266,81384],{"class":85},[68,140268,130479],{"class":92},[68,140270,96],{"class":85},[68,140272,56348],{"class":92},[68,140274,131048],{"class":85},[68,140276,140277],{"class":70,"line":280},[68,140278,133352],{"class":74},[68,140280,140281,140283,140285,140287,140289,140291],{"class":70,"line":301},[68,140282,133357],{"class":587},[68,140284,81384],{"class":85},[68,140286,130479],{"class":92},[68,140288,96],{"class":85},[68,140290,56415],{"class":92},[68,140292,131048],{"class":85},[68,140294,140295],{"class":70,"line":320},[68,140296,133372],{"class":74},[68,140298,140299,140301,140303,140305,140307,140309],{"class":70,"line":2915},[68,140300,133377],{"class":587},[68,140302,81384],{"class":85},[68,140304,130479],{"class":92},[68,140306,96],{"class":85},[68,140308,87809],{"class":92},[68,140310,131048],{"class":85},[68,140312,140313],{"class":70,"line":2921},[68,140314,133392],{"class":74},[68,140316,140317,140319,140321,140323,140325,140327],{"class":70,"line":2933},[68,140318,133397],{"class":587},[68,140320,81384],{"class":85},[68,140322,130479],{"class":92},[68,140324,96],{"class":85},[68,140326,133406],{"class":92},[68,140328,131048],{"class":85},[43,140330,140332,140333,140335],{"id":140331},"_1544-nav导航模块制作","15.4.4 ",[65,140334,55297],{},"导航模块制作",[38,140337],{"style":40,"src":140338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140340,140341,140343],{},[65,140342,55297],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140345,140346,140347],{},"1 号盒子左侧浮动，",[65,140348,140349],{},"dropdown",[168,140351,140352,140362,140370,140376,140384,140394,140402,140413],{},[51,140353,140354,140355,102592,140358,140361],{},"1号盒子有讲究，根据相关性 里面包含 ",[65,140356,140357],{},".dt",[65,140359,140360],{},".dd"," 两个盒子",[51,140363,140364,140366,140367,140369],{},[65,140365,140357],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[65,140368,140360],{}," 挤到下面去了",[51,140371,140372,140373,140375],{},"给 ",[65,140374,140360],{}," 盒子设置宽度 和 高度，以及背景颜色",[51,140377,140372,140378,140380,140381,121810],{},[65,140379,140360],{}," 盒子里面定义 无序列表 （",[65,140382,140383],{},"ul > li > a",[51,140385,140386,140387,140389,140390,140393],{},"每个 ",[65,140388,51],{}," 都有一个高度（",[65,140391,140392],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[51,140395,140372,140396,140398,140399,121810],{},[65,140397,51],{}," 里面的a设置文字大小（",[65,140400,140401],{},"14px",[51,140403,140372,140404,140406,140407,140409,140410,140412],{},[65,140405,51],{}," 设置 ",[65,140408,129280],{},"，当鼠标移入的时候，让",[65,140411,51],{},"的背景变成白色，让里面的文字变成红色",[51,140414,140415,140417,140418,140420,140421,140423],{},[65,140416,51],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[65,140419,51],{},"的右侧，那么给",[65,140422,51],{},"设置相对定位",[19,140425,140426],{},"一定要注意相关性",[19,140428,139711],{},[58,140430,140431],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,140432,140433,140441,140451,140461],{"__ignoreMap":63},[68,140434,140435,140437,140439],{"class":70,"line":71},[68,140436,82],{"class":81},[68,140438,138873],{"class":587},[68,140440,86],{"class":85},[68,140442,140443,140445,140447,140449],{"class":70,"line":78},[68,140444,138880],{"class":92},[68,140446,96],{"class":85},[68,140448,9251],{"class":872},[68,140450,112],{"class":85},[68,140452,140453,140455,140457,140459],{"class":70,"line":89},[68,140454,129735],{"class":92},[68,140456,96],{"class":85},[68,140458,62453],{"class":92},[68,140460,112],{"class":85},[68,140462,140463],{"class":70,"line":115},[68,140464,118],{"class":85},[19,140466,139751],{},[58,140468,140469],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,140470,140471,140479,140489,140499],{"__ignoreMap":63},[68,140472,140473,140475,140477],{"class":70,"line":71},[68,140474,82],{"class":81},[68,140476,138873],{"class":587},[68,140478,86],{"class":85},[68,140480,140481,140483,140485,140487],{"class":70,"line":78},[68,140482,138880],{"class":92},[68,140484,96],{"class":85},[68,140486,9251],{"class":872},[68,140488,112],{"class":85},[68,140490,140491,140493,140495,140497],{"class":70,"line":89},[68,140492,129735],{"class":92},[68,140494,96],{"class":85},[68,140496,62453],{"class":92},[68,140498,112],{"class":85},[68,140500,140501],{"class":70,"line":115},[68,140502,118],{"class":85},[19,140504,140505],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140507,140508,140509,140512],{},"2 号盒子左侧浮动，",[65,140510,140511],{},"navitems"," 导航栏组",[168,140514,140515,140520,140529],{},[51,140516,140517,140518],{},"里面结构是 ",[65,140519,140383],{},[51,140521,140522,140523,140525,140526,140528],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[65,140524,1974],{},"左右的",[65,140527,32476],{},"把两侧撑开",[51,140530,140531],{},"让文字垂直居中（行高等于高度）",[38,140533],{"style":40,"src":140534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140536,140537],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140539,139711],{},[58,140541,140543],{"className":60,"code":140542,"language":62,"meta":63,"style":63},".box {\n  float: left;\n}\n",[65,140544,140545,140551,140561],{"__ignoreMap":63},[68,140546,140547,140549],{"class":70,"line":71},[68,140548,588],{"class":587},[68,140550,86],{"class":85},[68,140552,140553,140555,140557,140559],{"class":70,"line":78},[68,140554,1243],{"class":92},[68,140556,96],{"class":85},[68,140558,131],{"class":92},[68,140560,112],{"class":85},[68,140562,140563],{"class":70,"line":89},[68,140564,118],{"class":85},[19,140566,139751],{},[58,140568,140569],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,140570,140571,140577,140587],{"__ignoreMap":63},[68,140572,140573,140575],{"class":70,"line":71},[68,140574,588],{"class":587},[68,140576,86],{"class":85},[68,140578,140579,140581,140583,140585],{"class":70,"line":78},[68,140580,1243],{"class":92},[68,140582,96],{"class":85},[68,140584,131],{"class":92},[68,140586,112],{"class":85},[68,140588,140589],{"class":70,"line":89},[68,140590,118],{"class":85},[19,140592,140593],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[38,140595],{"style":40,"src":140596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[58,140598,140599],{"className":60,"code":908,"language":62,"meta":63,"style":63},[65,140600,140601,140607,140623],{"__ignoreMap":63},[68,140602,140603,140605],{"class":70,"line":71},[68,140604,82],{"class":81},[68,140606,86],{"class":85},[68,140608,140609,140611,140613,140615,140617,140619,140621],{"class":70,"line":78},[68,140610,93],{"class":92},[68,140612,96],{"class":85},[68,140614,99],{"class":92},[68,140616,103],{"class":102},[68,140618,106],{"class":92},[68,140620,109],{"class":92},[68,140622,112],{"class":85},[68,140624,140625],{"class":70,"line":89},[68,140626,118],{"class":85},[43,140628,140630],{"id":140629},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[38,140632],{"style":40,"src":140633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[168,140635,140636,140641,140646],{},[51,140637,140638,140640],{},[65,140639,133075],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[51,140642,140643,140645],{},[65,140644,133075],{}," 里面有一个大的版心",[51,140647,140648,140649,140652,140653],{},"版心里面包含 1 号盒子，",[65,140650,140651],{},"mod_service"," 是服务模块，mod 是模块的意思",[168,140654,140655,140660,140673,140689,140694],{},[51,140656,140372,140657,140659],{},[65,140658,140651],{}," 设置高度（80px）和下边框",[51,140661,140662,140663,140666,140667,140669,140670,140672],{},"在里面定义 ",[65,140664,140665],{},"ul > li"," ,每个",[65,140668,51],{}," 宽度是300px 高度是 50px，给每个",[65,140671,51],{},"设置35px的左内边距",[51,140674,140675,140676,140678,140679,140681,140682,140684,140685,20005,140687,121810],{},"在每个",[65,140677,51],{},"里面，放一个 ",[65,140680,24505],{},"（里面放图标），一个",[65,140683,82],{},"（里面放",[65,140686,82],{},[65,140688,19],{},[51,140690,140372,140691,140693],{},[65,140692,24505],{},"设置浮动，让h5与这个div左右排列",[51,140695,140696],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140698,139711],{},[58,140700,140702],{"className":60,"code":140701,"language":62,"meta":63,"style":63},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[65,140703,140704,140710,140722,140734,140761],{"__ignoreMap":63},[68,140705,140706,140708],{"class":70,"line":71},[68,140707,135629],{"class":587},[68,140709,86],{"class":85},[68,140711,140712,140714,140716,140718,140720],{"class":70,"line":78},[68,140713,72149],{"class":92},[68,140715,96],{"class":85},[68,140717,2436],{"class":92},[68,140719,103],{"class":102},[68,140721,112],{"class":85},[68,140723,140724,140726,140728,140730,140732],{"class":70,"line":89},[68,140725,72368],{"class":92},[68,140727,96],{"class":85},[68,140729,2436],{"class":92},[68,140731,103],{"class":102},[68,140733,112],{"class":85},[68,140735,140736,140738,140740,140742,140744,140746,140748,140750,140753,140755,140757,140759],{"class":70,"line":115},[68,140737,72191],{"class":92},[68,140739,96],{"class":85},[68,140741,63310],{"class":92},[68,140743,997],{"class":85},[68,140745,135668],{"class":6815},[68,140747,15311],{"class":85},[68,140749,63320],{"class":92},[68,140751,140752],{"class":92}," -10",[68,140754,103],{"class":102},[68,140756,135687],{"class":92},[68,140758,103],{"class":102},[68,140760,112],{"class":85},[68,140762,140763],{"class":70,"line":280},[68,140764,118],{"class":85},[19,140766,139751],{},[58,140768,140769],{"className":60,"code":140701,"language":62,"meta":63,"style":63},[65,140770,140771,140777,140789,140801,140827],{"__ignoreMap":63},[68,140772,140773,140775],{"class":70,"line":71},[68,140774,135629],{"class":587},[68,140776,86],{"class":85},[68,140778,140779,140781,140783,140785,140787],{"class":70,"line":78},[68,140780,72149],{"class":92},[68,140782,96],{"class":85},[68,140784,2436],{"class":92},[68,140786,103],{"class":102},[68,140788,112],{"class":85},[68,140790,140791,140793,140795,140797,140799],{"class":70,"line":89},[68,140792,72368],{"class":92},[68,140794,96],{"class":85},[68,140796,2436],{"class":92},[68,140798,103],{"class":102},[68,140800,112],{"class":85},[68,140802,140803,140805,140807,140809,140811,140813,140815,140817,140819,140821,140823,140825],{"class":70,"line":115},[68,140804,72191],{"class":92},[68,140806,96],{"class":85},[68,140808,63310],{"class":92},[68,140810,997],{"class":85},[68,140812,135668],{"class":6815},[68,140814,15311],{"class":85},[68,140816,63320],{"class":92},[68,140818,140752],{"class":92},[68,140820,103],{"class":102},[68,140822,135687],{"class":92},[68,140824,103],{"class":102},[68,140826,112],{"class":85},[68,140828,140829],{"class":70,"line":280},[68,140830,118],{"class":85},[19,140832,140833],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[168,140835,140836,140839,140845,140851,140863],{},[51,140837,140838],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[51,140840,140841,140842,121810],{},"里面的布局利用 自定义列表来实现（",[65,140843,140844],{},"dl > dt + dd",[51,140846,140372,140847,140850],{},[65,140848,140849],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[51,140852,140372,140853,140856,140857,20005,140859,140862],{},[65,140854,140855],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[65,140858,140855],{},[65,140860,140861],{},"dd","之间有些距离",[51,140864,140865],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140867,139711],{},[58,140869,140870],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,140871,140872,140878,140890],{"__ignoreMap":63},[68,140873,140874,140876],{"class":70,"line":71},[68,140875,82],{"class":81},[68,140877,86],{"class":85},[68,140879,140880,140882,140884,140886,140888],{"class":70,"line":78},[68,140881,595],{"class":92},[68,140883,96],{"class":85},[68,140885,600],{"class":92},[68,140887,603],{"class":92},[68,140889,112],{"class":85},[68,140891,140892],{"class":70,"line":89},[68,140893,118],{"class":85},[19,140895,139751],{},[58,140897,140898],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,140899,140900,140906,140918],{"__ignoreMap":63},[68,140901,140902,140904],{"class":70,"line":71},[68,140903,82],{"class":81},[68,140905,86],{"class":85},[68,140907,140908,140910,140912,140914,140916],{"class":70,"line":78},[68,140909,595],{"class":92},[68,140911,96],{"class":85},[68,140913,600],{"class":92},[68,140915,603],{"class":92},[68,140917,112],{"class":85},[68,140919,140920],{"class":70,"line":89},[68,140921,118],{"class":85},[19,140923,140924],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[168,140926,140927,140936,140939,140950],{},[51,140928,140929,140930,140932,140933,140935],{},"分为上下两块，上面是 ",[65,140931,133092],{}," 友情链接，下面是 ",[65,140934,133085],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[51,140937,140938],{},"把内容分别复制到相应模块中",[51,140940,140372,140941,140943,140944,140946,140947,140949],{},[65,140942,133092],{}," 设置 15px 的下外边距，给",[65,140945,133092],{}," 里面 的 ",[65,140948,1974],{}," 标签设置 左右 3px 的外边距",[51,140951,140952,140953,140955],{},"给",[65,140954,133085],{}," 设置 20px 的行高",[19,140957,139711],{},[58,140959,140960],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,140961,140962,140968,140980],{"__ignoreMap":63},[68,140963,140964,140966],{"class":70,"line":71},[68,140965,82],{"class":81},[68,140967,86],{"class":85},[68,140969,140970,140972,140974,140976,140978],{"class":70,"line":78},[68,140971,595],{"class":92},[68,140973,96],{"class":85},[68,140975,600],{"class":92},[68,140977,603],{"class":92},[68,140979,112],{"class":85},[68,140981,140982],{"class":70,"line":89},[68,140983,118],{"class":85},[19,140985,139751],{},[58,140987,140988],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,140989,140990,140996,141008],{"__ignoreMap":63},[68,140991,140992,140994],{"class":70,"line":71},[68,140993,82],{"class":81},[68,140995,86],{"class":85},[68,140997,140998,141000,141002,141004,141006],{"class":70,"line":78},[68,140999,595],{"class":92},[68,141001,96],{"class":85},[68,141003,600],{"class":92},[68,141005,603],{"class":92},[68,141007,112],{"class":85},[68,141009,141010],{"class":70,"line":89},[68,141011,118],{"class":85},[19,141013,141014],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1652,141016,141017],{},"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":63,"searchDepth":78,"depth":78,"links":141019},[141020,141021,141022,141029],{"id":139300,"depth":78,"text":139301},{"id":139319,"depth":78,"text":139320},{"id":139346,"depth":78,"text":139347,"children":141023},[141024,141025,141026,141027,141028],{"id":139350,"depth":89,"text":139351},{"id":139363,"depth":89,"text":139364},{"id":139387,"depth":89,"text":139388},{"id":139409,"depth":89,"text":139410},{"id":139481,"depth":89,"text":139482},{"id":139607,"depth":78,"text":139608,"children":141030},[141031,141032,141033,141034,141036],{"id":139611,"depth":89,"text":139612},{"id":139618,"depth":89,"text":139619},{"id":139790,"depth":89,"text":139791},{"id":140331,"depth":89,"text":141035},"15.4.4 nav导航模块制作",{"id":140629,"depth":89,"text":140630},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139292,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141043,"title":141044,"body":141045,"description":1676,"extension":1677,"meta":143447,"navigation":1679,"path":143448,"seo":143449,"stem":143450,"__hash__":143451},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141046,"toc":143424},[141047,141050,141054,141058,141070,141073,141076,141079,141090,141092,141116,141118,141142,141147,141150,141152,141188,141190,141226,141229,141234,141237,141240,141243,141273,141280,141283,141293,141295,141329,141332,141366,141372,141389,141391,141427,141429,141465,141470,141495,141497,141523,141525,141549,141556,141559,141623,141625,141667,141669,141709,141716,141721,141723,141753,141755,141785,141789,141792,141799,141811,141813,141839,141841,141865,141868,141870,141894,141900,141910,141912,141942,141944,141974,141981,142022,142024,142060,142062,142098,142102,142105,142108,142111,142117,142122,142125,142148,142151,142175,142178,142202,142207,142210,142213,142216,142219,142222,142296,142298,142328,142330,142360,142363,142366,142398,142402,142406,142420,142429,142432,142437,142439,142533,142535,142629,142652,142654,142678,142680,142704,142711,142714,142724,142726,142750,142755,142763,142765,142795,142800,142840,142842,142868,142870,142896,142900,142903,142908,142911,142915,142923,142930,142938,142940,142970,142972,143002,143010,143013,143016,143018,143048,143050,143080,143083,143088,143090,143114,143116,143140,143143,143228,143230,143254,143256,143280,143284,143286,143310,143312,143346,143350,143364,143367,143372,143375,143380,143383,143413,143421],[10,141048,141044],{"id":141049},"_16-品优购项目下篇-主体与页面开发",[14,141051,141053],{"id":141052},"_161-项目主体模块制作","16.1 项目主体模块制作",[43,141055,141057],{"id":141056},"_1611-首页制作","16.1.1 首页制作",[19,141059,141060,141062,141063,141065,141066,141069],{},[1890,141061,103632],{}," 主体模块是 ",[1890,141064,75636],{}," 里面专有的，注意需要新的样式文件 ",[1890,141067,141068],{},"index.css，"," 就不要写在common.css中了",[38,141071],{"style":40,"src":141072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[38,141074],{"style":40,"src":141075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141077,141078],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[168,141080,141081,141084,141087],{},[51,141082,141083],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[51,141085,141086],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[51,141088,141089],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141091,139711],{},[58,141093,141094],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,141095,141096,141102,141112],{"__ignoreMap":63},[68,141097,141098,141100],{"class":70,"line":71},[68,141099,588],{"class":587},[68,141101,86],{"class":85},[68,141103,141104,141106,141108,141110],{"class":70,"line":78},[68,141105,1243],{"class":92},[68,141107,96],{"class":85},[68,141109,131],{"class":92},[68,141111,112],{"class":85},[68,141113,141114],{"class":70,"line":89},[68,141115,118],{"class":85},[19,141117,139751],{},[58,141119,141120],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,141121,141122,141128,141138],{"__ignoreMap":63},[68,141123,141124,141126],{"class":70,"line":71},[68,141125,588],{"class":587},[68,141127,86],{"class":85},[68,141129,141130,141132,141134,141136],{"class":70,"line":78},[68,141131,1243],{"class":92},[68,141133,96],{"class":85},[68,141135,131],{"class":92},[68,141137,112],{"class":85},[68,141139,141140],{"class":70,"line":89},[68,141141,118],{"class":85},[48,141143,141144],{},[51,141145,141146],{},"左侧focus模块制作",[38,141148],{"style":40,"src":141149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141151,139711],{},[58,141153,141154],{"className":60,"code":129442,"language":62,"meta":63,"style":63},[65,141155,141156,141164,141174,141184],{"__ignoreMap":63},[68,141157,141158,141160,141162],{"class":70,"line":71},[68,141159,55405],{"class":81},[68,141161,63484],{"class":587},[68,141163,86],{"class":85},[68,141165,141166,141168,141170,141172],{"class":70,"line":78},[68,141167,129457],{"class":92},[68,141169,96],{"class":85},[68,141171,56473],{"class":92},[68,141173,112],{"class":85},[68,141175,141176,141178,141180,141182],{"class":70,"line":89},[68,141177,72378],{"class":92},[68,141179,96],{"class":85},[68,141181,56321],{"class":92},[68,141183,112],{"class":85},[68,141185,141186],{"class":70,"line":115},[68,141187,118],{"class":85},[19,141189,139751],{},[58,141191,141192],{"className":60,"code":129442,"language":62,"meta":63,"style":63},[65,141193,141194,141202,141212,141222],{"__ignoreMap":63},[68,141195,141196,141198,141200],{"class":70,"line":71},[68,141197,55405],{"class":81},[68,141199,63484],{"class":587},[68,141201,86],{"class":85},[68,141203,141204,141206,141208,141210],{"class":70,"line":78},[68,141205,129457],{"class":92},[68,141207,96],{"class":85},[68,141209,56473],{"class":92},[68,141211,112],{"class":85},[68,141213,141214,141216,141218,141220],{"class":70,"line":89},[68,141215,72378],{"class":92},[68,141217,96],{"class":85},[68,141219,56321],{"class":92},[68,141221,112],{"class":85},[68,141223,141224],{"class":70,"line":115},[68,141225,118],{"class":85},[19,141227,141228],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[48,141230,141231],{"start":78},[51,141232,141233],{},"右侧newsflash模块制作",[38,141235],{"style":40,"src":141236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141238,141239],{},"右侧的模块 分为上中下三个盒子",[19,141241,141242],{},"结构代码：",[58,141244,141245],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,141246,141247],{"__ignoreMap":63},[68,141248,141249,141251,141253,141255,141257,141259,141261,141263,141265,141267,141269,141271],{"class":70,"line":71},[68,141250,861],{"class":85},[68,141252,38],{"class":81},[68,141254,56823],{"class":587},[68,141256,869],{"class":85},[68,141258,135389],{"class":872},[68,141260,56831],{"class":587},[68,141262,869],{"class":85},[68,141264,135396],{"class":872},[68,141266,135399],{"class":587},[68,141268,869],{"class":85},[68,141270,135404],{"class":872},[68,141272,876],{"class":85},[19,141274,141275,141276,141279],{},"1 号盒子为 ",[65,141277,141278],{},"news"," 新闻模块 高度为 165px",[38,141281],{"style":40,"src":141282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141284,141285,141286,141289,141290],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[65,141287,141288],{},"news-hd","，下面是 ",[65,141291,141292],{},"news-bd",[19,141294,141242],{},[58,141296,141297],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,141298,141299,141303,141317,141321],{"__ignoreMap":63},[68,141300,141301],{"class":70,"line":71},[68,141302,856],{"class":74},[68,141304,141305,141307,141309,141311,141313,141315],{"class":70,"line":78},[68,141306,861],{"class":85},[68,141308,82],{"class":81},[68,141310,866],{"class":587},[68,141312,869],{"class":85},[68,141314,873],{"class":872},[68,141316,876],{"class":85},[68,141318,141319],{"class":70,"line":89},[68,141320,881],{"class":85},[68,141322,141323,141325,141327],{"class":70,"line":115},[68,141324,886],{"class":85},[68,141326,82],{"class":81},[68,141328,876],{"class":85},[19,141330,141331],{},"样式代码：",[58,141333,141334],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,141335,141336,141340,141354,141358],{"__ignoreMap":63},[68,141337,141338],{"class":70,"line":71},[68,141339,856],{"class":74},[68,141341,141342,141344,141346,141348,141350,141352],{"class":70,"line":78},[68,141343,861],{"class":85},[68,141345,82],{"class":81},[68,141347,866],{"class":587},[68,141349,869],{"class":85},[68,141351,873],{"class":872},[68,141353,876],{"class":85},[68,141355,141356],{"class":70,"line":89},[68,141357,881],{"class":85},[68,141359,141360,141362,141364],{"class":70,"line":115},[68,141361,886],{"class":85},[68,141363,82],{"class":81},[68,141365,876],{"class":85},[19,141367,141368,141369,141371],{},"上面是",[65,141370,141288],{},"，设置高度是 33px，设置下边框",[168,141373,141374,141380],{},[51,141375,141376,141377,141379],{},"里面放一个",[65,141378,24505],{}," 标题",[51,141381,141382,141383,141385,141386,141388],{},"放一个a",[65,141384,104267],{},"，内容是 更多，然后让 ",[65,141387,1974],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141390,141242],{},[58,141392,141393],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,141394,141395,141403,141413,141423],{"__ignoreMap":63},[68,141396,141397,141399,141401],{"class":70,"line":71},[68,141398,82],{"class":81},[68,141400,138873],{"class":587},[68,141402,86],{"class":85},[68,141404,141405,141407,141409,141411],{"class":70,"line":78},[68,141406,138880],{"class":92},[68,141408,96],{"class":85},[68,141410,9251],{"class":872},[68,141412,112],{"class":85},[68,141414,141415,141417,141419,141421],{"class":70,"line":89},[68,141416,129735],{"class":92},[68,141418,96],{"class":85},[68,141420,62453],{"class":92},[68,141422,112],{"class":85},[68,141424,141425],{"class":70,"line":115},[68,141426,118],{"class":85},[19,141428,141331],{},[58,141430,141431],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,141432,141433,141441,141451,141461],{"__ignoreMap":63},[68,141434,141435,141437,141439],{"class":70,"line":71},[68,141436,82],{"class":81},[68,141438,138873],{"class":587},[68,141440,86],{"class":85},[68,141442,141443,141445,141447,141449],{"class":70,"line":78},[68,141444,138880],{"class":92},[68,141446,96],{"class":85},[68,141448,9251],{"class":872},[68,141450,112],{"class":85},[68,141452,141453,141455,141457,141459],{"class":70,"line":89},[68,141454,129735],{"class":92},[68,141456,96],{"class":85},[68,141458,62453],{"class":92},[68,141460,112],{"class":85},[68,141462,141463],{"class":70,"line":115},[68,141464,118],{"class":85},[19,141466,141467,141468],{},"下面是",[65,141469,141292],{},[168,141471,141472,141480],{},[51,141473,141474,141475,102592,141477,141479],{},"里面包含 ",[65,141476,168],{},[65,141478,51],{}," 还有链接",[51,141481,140952,141482,141484,141485,141487,141488,141491,141492],{},[65,141483,51],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[65,141486,1431],{}," 2.设置 ",[65,141489,141490],{},"white-space: nowrap;"," 3. 设置 ",[65,141493,141494],{},"text-overflow: ellipsis;",[19,141496,141242],{},[58,141498,141500],{"className":60,"code":141499,"language":62,"meta":63,"style":63},"div {\n  overflow: hidden;\n}\n",[65,141501,141502,141508,141519],{"__ignoreMap":63},[68,141503,141504,141506],{"class":70,"line":71},[68,141505,82],{"class":81},[68,141507,86],{"class":85},[68,141509,141510,141513,141515,141517],{"class":70,"line":78},[68,141511,141512],{"class":92},"  overflow",[68,141514,96],{"class":85},[68,141516,63298],{"class":92},[68,141518,112],{"class":85},[68,141520,141521],{"class":70,"line":89},[68,141522,118],{"class":85},[19,141524,141331],{},[58,141526,141527],{"className":60,"code":141499,"language":62,"meta":63,"style":63},[65,141528,141529,141535,141545],{"__ignoreMap":63},[68,141530,141531,141533],{"class":70,"line":71},[68,141532,82],{"class":81},[68,141534,86],{"class":85},[68,141536,141537,141539,141541,141543],{"class":70,"line":78},[68,141538,141512],{"class":92},[68,141540,96],{"class":85},[68,141542,63298],{"class":92},[68,141544,112],{"class":85},[68,141546,141547],{"class":70,"line":89},[68,141548,118],{"class":85},[19,141550,141551,141552,141555],{},"2 号盒子为 ",[65,141553,141554],{},"lifeservice"," 生活服务模块 高度为 209px",[38,141557],{"style":40,"src":141558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[168,141560,141561,141564,141574,141598,141609],{},[51,141562,141563],{},"设置边框（左右下边框）",[51,141565,141566,141567,141570,141571,141573],{},"里面的内容 是 ",[65,141568,141569],{},"ul > 12*li","，给",[65,141572,51],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[51,141575,141576,141577],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[168,141578,141579,141584,141593],{},[51,141580,141581,141583],{},[65,141582,141554],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[51,141585,141586,141587,141589,141590,141592],{},"可以让 ",[65,141588,141554],{}," 里面的 ",[65,141591,168],{}," 宽度为 252，就可以装的下 4 个 小 li",[51,141594,141595,141597],{},[65,141596,141554],{}," 盒子 overflow 隐藏多余的部分就可以了",[51,141599,118040,141600,141602,141603,141605,141606,141608],{},[65,141601,51],{}," 里面放一个 ",[65,141604,2177],{},"（里面放图标），下面的文本用 ",[65,141607,19],{}," 标签包裹",[51,141610,140372,141611,141613,141614,141616,141617,140406,141619,141622],{},[65,141612,2177],{}," 设置 24px宽和28px的高（注意 ",[65,141615,2177],{}," 是行内元素， 转成行内块），给 ",[65,141618,51],{},[65,141620,141621],{},"text-align:center"," 让里面内容居中显示",[19,141624,141242],{},[58,141626,141628],{"className":60,"code":141627,"language":62,"meta":63,"style":63},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[65,141629,141630,141648,141653,141663],{"__ignoreMap":63},[68,141631,141632,141634,141636,141638,141640,141642,141644,141646],{"class":70,"line":71},[68,141633,68],{"class":81},[68,141635,1002],{"class":85},[68,141637,1974],{"class":81},[68,141639,1002],{"class":85},[68,141641,25148],{"class":81},[68,141643,1002],{"class":85},[68,141645,1890],{"class":81},[68,141647,86],{"class":85},[68,141649,141650],{"class":70,"line":78},[68,141651,141652],{"class":74},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[68,141654,141655,141657,141659,141661],{"class":70,"line":89},[68,141656,129735],{"class":92},[68,141658,96],{"class":85},[68,141660,129797],{"class":92},[68,141662,112],{"class":85},[68,141664,141665],{"class":70,"line":115},[68,141666,118],{"class":85},[19,141668,141331],{},[58,141670,141671],{"className":60,"code":141627,"language":62,"meta":63,"style":63},[65,141672,141673,141691,141695,141705],{"__ignoreMap":63},[68,141674,141675,141677,141679,141681,141683,141685,141687,141689],{"class":70,"line":71},[68,141676,68],{"class":81},[68,141678,1002],{"class":85},[68,141680,1974],{"class":81},[68,141682,1002],{"class":85},[68,141684,25148],{"class":81},[68,141686,1002],{"class":85},[68,141688,1890],{"class":81},[68,141690,86],{"class":85},[68,141692,141693],{"class":70,"line":78},[68,141694,141652],{"class":74},[68,141696,141697,141699,141701,141703],{"class":70,"line":89},[68,141698,129735],{"class":92},[68,141700,96],{"class":85},[68,141702,129797],{"class":92},[68,141704,112],{"class":85},[68,141706,141707],{"class":70,"line":115},[68,141708,118],{"class":85},[19,141710,141711,141712,141715],{},"3 号盒子为 ",[65,141713,141714],{},"bargain"," 特价商品",[168,141717,141718],{},[51,141719,141720],{},"这个比较简单，直接插入一张图片即可",[19,141722,141242],{},[58,141724,141725],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,141726,141727],{"__ignoreMap":63},[68,141728,141729,141731,141733,141735,141737,141739,141741,141743,141745,141747,141749,141751],{"class":70,"line":71},[68,141730,861],{"class":85},[68,141732,38],{"class":81},[68,141734,56823],{"class":587},[68,141736,869],{"class":85},[68,141738,135389],{"class":872},[68,141740,56831],{"class":587},[68,141742,869],{"class":85},[68,141744,135396],{"class":872},[68,141746,135399],{"class":587},[68,141748,869],{"class":85},[68,141750,135404],{"class":872},[68,141752,876],{"class":85},[19,141754,141331],{},[58,141756,141757],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,141758,141759],{"__ignoreMap":63},[68,141760,141761,141763,141765,141767,141769,141771,141773,141775,141777,141779,141781,141783],{"class":70,"line":71},[68,141762,861],{"class":85},[68,141764,38],{"class":81},[68,141766,56823],{"class":587},[68,141768,869],{"class":85},[68,141770,135389],{"class":872},[68,141772,56831],{"class":587},[68,141774,869],{"class":85},[68,141776,135396],{"class":872},[68,141778,135399],{"class":587},[68,141780,869],{"class":85},[68,141782,135404],{"class":872},[68,141784,876],{"class":85},[43,141786,141788],{"id":141787},"_1612-推荐模块制作","16.1.2 推荐模块制作",[38,141790],{"style":40,"src":141791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141793,141794,141795,141798],{},"大盒子 ",[65,141796,141797],{},"recom"," 推荐模块 recommend",[168,141800,141801],{},[51,141802,141803,141804,141806,141807,141810],{},"给这个 ",[65,141805,141797],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[65,141808,141809],{},"#ebebeb","），设置距离上边 12px",[19,141812,141242],{},[58,141814,141816],{"className":60,"code":141815,"language":62,"meta":63,"style":63},"div {\n  background-color: #f0f0f0;\n}\n",[65,141817,141818,141824,141835],{"__ignoreMap":63},[68,141819,141820,141822],{"class":70,"line":71},[68,141821,82],{"class":81},[68,141823,86],{"class":85},[68,141825,141826,141828,141830,141833],{"class":70,"line":78},[68,141827,72458],{"class":92},[68,141829,96],{"class":85},[68,141831,141832],{"class":92},"#f0f0f0",[68,141834,112],{"class":85},[68,141836,141837],{"class":70,"line":89},[68,141838,118],{"class":85},[19,141840,141331],{},[58,141842,141843],{"className":60,"code":141815,"language":62,"meta":63,"style":63},[65,141844,141845,141851,141861],{"__ignoreMap":63},[68,141846,141847,141849],{"class":70,"line":71},[68,141848,82],{"class":81},[68,141850,86],{"class":85},[68,141852,141853,141855,141857,141859],{"class":70,"line":78},[68,141854,72458],{"class":92},[68,141856,96],{"class":85},[68,141858,141832],{"class":92},[68,141860,112],{"class":85},[68,141862,141863],{"class":70,"line":89},[68,141864,118],{"class":85},[19,141866,141867],{},"里面包含 2 个盒子， 浮动即可",[19,141869,141242],{},[58,141871,141872],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,141873,141874,141880,141890],{"__ignoreMap":63},[68,141875,141876,141878],{"class":70,"line":71},[68,141877,588],{"class":587},[68,141879,86],{"class":85},[68,141881,141882,141884,141886,141888],{"class":70,"line":78},[68,141883,1243],{"class":92},[68,141885,96],{"class":85},[68,141887,131],{"class":92},[68,141889,112],{"class":85},[68,141891,141892],{"class":70,"line":89},[68,141893,118],{"class":85},[19,141895,141896,141897],{},"1 号盒子 ",[65,141898,141899],{},"recom_hd",[168,141901,141902,141905],{},[51,141903,141904],{},"设置宽度205px，高度163px",[51,141906,141376,141907,141909],{},[65,141908,38],{},"标签，插入图片即可",[19,141911,141242],{},[58,141913,141914],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,141915,141916],{"__ignoreMap":63},[68,141917,141918,141920,141922,141924,141926,141928,141930,141932,141934,141936,141938,141940],{"class":70,"line":71},[68,141919,861],{"class":85},[68,141921,38],{"class":81},[68,141923,56823],{"class":587},[68,141925,869],{"class":85},[68,141927,135389],{"class":872},[68,141929,56831],{"class":587},[68,141931,869],{"class":85},[68,141933,135396],{"class":872},[68,141935,135399],{"class":587},[68,141937,869],{"class":85},[68,141939,135404],{"class":872},[68,141941,876],{"class":85},[19,141943,141331],{},[58,141945,141946],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,141947,141948],{"__ignoreMap":63},[68,141949,141950,141952,141954,141956,141958,141960,141962,141964,141966,141968,141970,141972],{"class":70,"line":71},[68,141951,861],{"class":85},[68,141953,38],{"class":81},[68,141955,56823],{"class":587},[68,141957,869],{"class":85},[68,141959,135389],{"class":872},[68,141961,56831],{"class":587},[68,141963,869],{"class":85},[68,141965,135396],{"class":872},[68,141967,135399],{"class":587},[68,141969,869],{"class":85},[68,141971,135404],{"class":872},[68,141973,876],{"class":85},[19,141975,141976,141977,141980],{},"2 号盒子 ",[65,141978,141979],{},"recom_bd"," ，注意里面的小竖线",[168,141982,141983,141994,141997,142002,142007],{},[51,141984,141985,141986,141988,141989,141991,141992],{},"右侧结构里面放 ",[65,141987,168],{}," 包含 4个 ",[65,141990,51],{},"，每个li里面包含一个",[65,141993,38],{},[51,141995,141996],{},"直接利用切片工具把里面的内容当成一张图片",[51,141998,140372,141999,142001],{},[65,142000,51],{}," 设置浮动",[51,142003,140372,142004,142006],{},[65,142005,38],{}," 设置宽高，宽度 248px，高度 163px",[51,142008,142009,142010,141570,142013,142015,142016,142018,142019],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[65,142011,142012],{},"top 10px",[65,142014,51],{},"设置相对定位（注意，最后一个",[65,142017,51],{},"不用设置伪元素），可以利用 ",[65,142020,142021],{},"nth-child(-n+3){...}",[19,142023,141242],{},[58,142025,142026],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,142027,142028,142036,142046,142056],{"__ignoreMap":63},[68,142029,142030,142032,142034],{"class":70,"line":71},[68,142031,82],{"class":81},[68,142033,138873],{"class":587},[68,142035,86],{"class":85},[68,142037,142038,142040,142042,142044],{"class":70,"line":78},[68,142039,138880],{"class":92},[68,142041,96],{"class":85},[68,142043,9251],{"class":872},[68,142045,112],{"class":85},[68,142047,142048,142050,142052,142054],{"class":70,"line":89},[68,142049,129735],{"class":92},[68,142051,96],{"class":85},[68,142053,62453],{"class":92},[68,142055,112],{"class":85},[68,142057,142058],{"class":70,"line":115},[68,142059,118],{"class":85},[19,142061,141331],{},[58,142063,142064],{"className":60,"code":139714,"language":62,"meta":63,"style":63},[65,142065,142066,142074,142084,142094],{"__ignoreMap":63},[68,142067,142068,142070,142072],{"class":70,"line":71},[68,142069,82],{"class":81},[68,142071,138873],{"class":587},[68,142073,86],{"class":85},[68,142075,142076,142078,142080,142082],{"class":70,"line":78},[68,142077,138880],{"class":92},[68,142079,96],{"class":85},[68,142081,9251],{"class":872},[68,142083,112],{"class":85},[68,142085,142086,142088,142090,142092],{"class":70,"line":89},[68,142087,129735],{"class":92},[68,142089,96],{"class":85},[68,142091,62453],{"class":92},[68,142093,112],{"class":85},[68,142095,142096],{"class":70,"line":115},[68,142097,118],{"class":85},[43,142099,142101],{"id":142100},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[38,142103],{"style":40,"src":142104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142106,142107],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142109,142110],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142112,142113,142116],{},[65,142114,142115],{},"box_hd"," 制作",[19,142118,141896,142119,142121],{},[65,142120,142115],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[38,142123],{"style":40,"src":142124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[168,142126,142127,142132,142137,142140],{},[51,142128,142129,142131],{},[65,142130,142115],{}," 给 30px 的高度，2个像素的下边框",[51,142133,142134,142135],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[65,142136,140383],{},[51,142138,142139],{},"左侧盒左浮动，右侧盒子右浮动",[51,142141,142142,142144,142145,142147],{},[65,142143,1974],{},"标签之间的距离用左右的",[65,142146,32476],{},"撑开即可",[19,142149,142150],{},"结构代码",[58,142152,142153],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,142154,142155,142161,142171],{"__ignoreMap":63},[68,142156,142157,142159],{"class":70,"line":71},[68,142158,588],{"class":587},[68,142160,86],{"class":85},[68,142162,142163,142165,142167,142169],{"class":70,"line":78},[68,142164,1243],{"class":92},[68,142166,96],{"class":85},[68,142168,131],{"class":92},[68,142170,112],{"class":85},[68,142172,142173],{"class":70,"line":89},[68,142174,118],{"class":85},[19,142176,142177],{},"样式代码",[58,142179,142180],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,142181,142182,142188,142198],{"__ignoreMap":63},[68,142183,142184,142186],{"class":70,"line":71},[68,142185,588],{"class":587},[68,142187,86],{"class":85},[68,142189,142190,142192,142194,142196],{"class":70,"line":78},[68,142191,1243],{"class":92},[68,142193,96],{"class":85},[68,142195,131],{"class":92},[68,142197,112],{"class":85},[68,142199,142200],{"class":70,"line":89},[68,142201,118],{"class":85},[19,142203,142204,142116],{},[65,142205,142206],{},"box_bd",[19,142208,142209],{},"2 号盒子 box_bd，不要给高度",[38,142211],{"style":40,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142214,142215],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142217,142218],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142220,142221],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[168,142223,142224,142236,142252],{},[51,142225,142226,142228,142229,142232,142233,142235],{},[65,142227,142206],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[65,142230,142231],{},"tab_content","，在",[65,142234,142231],{}," 里面包裹tab选项卡对应的内容",[51,142237,142238,142239,142242,142243,142245,142246,142248,142249,142251],{},"内容被一个大盒子包裹（",[65,142240,142241],{},"tab_list_item","），里面是 ",[65,142244,168],{}," 包裹 5个 ",[65,142247,51],{},"，每个",[65,142250,51],{},"设置对应的宽度，然后设置浮动",[51,142253,142254,142255,142257,142258,142260,142261],{},"而这5个",[65,142256,51],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[65,142259,51],{},"设置",[168,142262,142263,142281,142284],{},[51,142264,142265,142266,142268,142269,142271,142272,142274,142275,142277,142278,142280],{},"第一个小 ",[65,142267,51],{}," 分为上下结构，上面是 ",[65,142270,168],{}," 包裹 ",[65,142273,51],{}," ，",[65,142276,51],{},"里面包裹 ",[65,142279,1974],{},"，下面插入一张图片",[51,142282,142283],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[51,142285,142286,142287,142289,142290,142292,142293,142295],{},"后面的小 ",[65,142288,51],{}," 里面先放一个",[65,142291,1974],{},"标签，然后在",[65,142294,1974],{},"标签里面插入图片即可",[19,142297,142150],{},[58,142299,142300],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,142301,142302],{"__ignoreMap":63},[68,142303,142304,142306,142308,142310,142312,142314,142316,142318,142320,142322,142324,142326],{"class":70,"line":71},[68,142305,861],{"class":85},[68,142307,38],{"class":81},[68,142309,56823],{"class":587},[68,142311,869],{"class":85},[68,142313,135389],{"class":872},[68,142315,56831],{"class":587},[68,142317,869],{"class":85},[68,142319,135396],{"class":872},[68,142321,135399],{"class":587},[68,142323,869],{"class":85},[68,142325,135404],{"class":872},[68,142327,876],{"class":85},[19,142329,142177],{},[58,142331,142332],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,142333,142334],{"__ignoreMap":63},[68,142335,142336,142338,142340,142342,142344,142346,142348,142350,142352,142354,142356,142358],{"class":70,"line":71},[68,142337,861],{"class":85},[68,142339,38],{"class":81},[68,142341,56823],{"class":587},[68,142343,869],{"class":85},[68,142345,135389],{"class":872},[68,142347,56831],{"class":587},[68,142349,869],{"class":85},[68,142351,135396],{"class":872},[68,142353,135399],{"class":587},[68,142355,869],{"class":85},[68,142357,135404],{"class":872},[68,142359,876],{"class":85},[19,142361,142362],{},"tab栏切换需求！！！！！！介绍：",[38,142364],{"style":40,"src":142365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[168,142367,142368,142376,142382,142385],{},[51,142369,142370,142373,142374],{},[65,142371,142372],{},"tab","栏的布局是 ",[65,142375,140383],{},[51,142377,142378,142379,142381],{},"有多少个",[65,142380,142372],{},"选项卡，那么对应就有多少个内容",[51,142383,142384],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[51,142386,142387,142388,142391,142392,142394,142395,142397],{},"等后面我们学习了",[65,142389,142390],{},"js","之后，我们就会配合",[65,142393,142390],{},"来实现，",[65,142396,142372],{},"栏的切换",[14,142399,142401],{"id":142400},"_162-列表制作","16.2 列表制作",[43,142403,142405],{"id":142404},"_1621-准备工作","16.2.1 准备工作",[168,142407,142408,142411,142414,142417],{},[51,142409,142410],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[51,142412,142413],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[51,142415,142416],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[51,142418,142419],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[43,142421,142423,142424,102592,142426,142428],{"id":142422},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[65,142425,132877],{},[65,142427,55297],{}," 修改",[38,142430],{"style":40,"src":142431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[168,142433,142434],{},[51,142435,142436],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142438,141242],{},[58,142440,142441],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,142442,142443,142447,142461,142465,142479,142483,142497,142501,142515,142519],{"__ignoreMap":63},[68,142444,142445],{"class":70,"line":71},[68,142446,133311],{"class":74},[68,142448,142449,142451,142453,142455,142457,142459],{"class":70,"line":78},[68,142450,133316],{"class":587},[68,142452,81384],{"class":85},[68,142454,130479],{"class":92},[68,142456,96],{"class":85},[68,142458,133325],{"class":92},[68,142460,131048],{"class":85},[68,142462,142463],{"class":70,"line":89},[68,142464,133332],{"class":74},[68,142466,142467,142469,142471,142473,142475,142477],{"class":70,"line":115},[68,142468,133337],{"class":587},[68,142470,81384],{"class":85},[68,142472,130479],{"class":92},[68,142474,96],{"class":85},[68,142476,56348],{"class":92},[68,142478,131048],{"class":85},[68,142480,142481],{"class":70,"line":280},[68,142482,133352],{"class":74},[68,142484,142485,142487,142489,142491,142493,142495],{"class":70,"line":301},[68,142486,133357],{"class":587},[68,142488,81384],{"class":85},[68,142490,130479],{"class":92},[68,142492,96],{"class":85},[68,142494,56415],{"class":92},[68,142496,131048],{"class":85},[68,142498,142499],{"class":70,"line":320},[68,142500,133372],{"class":74},[68,142502,142503,142505,142507,142509,142511,142513],{"class":70,"line":2915},[68,142504,133377],{"class":587},[68,142506,81384],{"class":85},[68,142508,130479],{"class":92},[68,142510,96],{"class":85},[68,142512,87809],{"class":92},[68,142514,131048],{"class":85},[68,142516,142517],{"class":70,"line":2921},[68,142518,133392],{"class":74},[68,142520,142521,142523,142525,142527,142529,142531],{"class":70,"line":2933},[68,142522,133397],{"class":587},[68,142524,81384],{"class":85},[68,142526,130479],{"class":92},[68,142528,96],{"class":85},[68,142530,133406],{"class":92},[68,142532,131048],{"class":85},[19,142534,141331],{},[58,142536,142537],{"className":60,"code":133304,"language":62,"meta":63,"style":63},[65,142538,142539,142543,142557,142561,142575,142579,142593,142597,142611,142615],{"__ignoreMap":63},[68,142540,142541],{"class":70,"line":71},[68,142542,133311],{"class":74},[68,142544,142545,142547,142549,142551,142553,142555],{"class":70,"line":78},[68,142546,133316],{"class":587},[68,142548,81384],{"class":85},[68,142550,130479],{"class":92},[68,142552,96],{"class":85},[68,142554,133325],{"class":92},[68,142556,131048],{"class":85},[68,142558,142559],{"class":70,"line":89},[68,142560,133332],{"class":74},[68,142562,142563,142565,142567,142569,142571,142573],{"class":70,"line":115},[68,142564,133337],{"class":587},[68,142566,81384],{"class":85},[68,142568,130479],{"class":92},[68,142570,96],{"class":85},[68,142572,56348],{"class":92},[68,142574,131048],{"class":85},[68,142576,142577],{"class":70,"line":280},[68,142578,133352],{"class":74},[68,142580,142581,142583,142585,142587,142589,142591],{"class":70,"line":301},[68,142582,133357],{"class":587},[68,142584,81384],{"class":85},[68,142586,130479],{"class":92},[68,142588,96],{"class":85},[68,142590,56415],{"class":92},[68,142592,131048],{"class":85},[68,142594,142595],{"class":70,"line":320},[68,142596,133372],{"class":74},[68,142598,142599,142601,142603,142605,142607,142609],{"class":70,"line":2915},[68,142600,133377],{"class":587},[68,142602,81384],{"class":85},[68,142604,130479],{"class":92},[68,142606,96],{"class":85},[68,142608,87809],{"class":92},[68,142610,131048],{"class":85},[68,142612,142613],{"class":70,"line":2921},[68,142614,133392],{"class":74},[68,142616,142617,142619,142621,142623,142625,142627],{"class":70,"line":2933},[68,142618,133397],{"class":587},[68,142620,81384],{"class":85},[68,142622,130479],{"class":92},[68,142624,96],{"class":85},[68,142626,133406],{"class":92},[68,142628,131048],{"class":85},[168,142630,142631,142642],{},[51,142632,142633,142634,142637,142638,102592,142640],{},"1 号盒子左侧浮动 ",[65,142635,142636],{},"sk_list"," 里面包含 ",[65,142639,168],{},[65,142641,51],{},[51,142643,142644,142645,142637,142648,102592,142650],{},"2 号盒子左侧浮动 ",[65,142646,142647],{},"sk_con",[65,142649,168],{},[65,142651,51],{},[19,142653,141242],{},[58,142655,142656],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,142657,142658,142664,142674],{"__ignoreMap":63},[68,142659,142660,142662],{"class":70,"line":71},[68,142661,588],{"class":587},[68,142663,86],{"class":85},[68,142665,142666,142668,142670,142672],{"class":70,"line":78},[68,142667,1243],{"class":92},[68,142669,96],{"class":85},[68,142671,131],{"class":92},[68,142673,112],{"class":85},[68,142675,142676],{"class":70,"line":89},[68,142677,118],{"class":85},[19,142679,141331],{},[58,142681,142682],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,142683,142684,142690,142700],{"__ignoreMap":63},[68,142685,142686,142688],{"class":70,"line":71},[68,142687,588],{"class":587},[68,142689,86],{"class":85},[68,142691,142692,142694,142696,142698],{"class":70,"line":78},[68,142693,1243],{"class":92},[68,142695,96],{"class":85},[68,142697,131],{"class":92},[68,142699,112],{"class":85},[68,142701,142702],{"class":70,"line":89},[68,142703,118],{"class":85},[43,142705,142707,142708],{"id":142706},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[65,142709,142710],{},"sk_container",[38,142712],{"style":40,"src":142713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[168,142715,142716,142721],{},[51,142717,141896,142718,142720],{},[65,142719,142710],{}," 给宽度 1200，不要给高度",[51,142722,142723],{},"一定不要忘记清除浮动",[19,142725,141242],{},[58,142727,142728],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,142729,142730,142736,142746],{"__ignoreMap":63},[68,142731,142732,142734],{"class":70,"line":71},[68,142733,588],{"class":587},[68,142735,86],{"class":85},[68,142737,142738,142740,142742,142744],{"class":70,"line":78},[68,142739,1243],{"class":92},[68,142741,96],{"class":85},[68,142743,131],{"class":92},[68,142745,112],{"class":85},[68,142747,142748],{"class":70,"line":89},[68,142749,118],{"class":85},[48,142751,142752],{},[51,142753,142754],{},"sk_hd制作",[168,142756,142757],{},[51,142758,141976,142759,142762],{},[65,142760,142761],{},"sk_hd"," ，插入图片即可",[19,142764,141242],{},[58,142766,142767],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,142768,142769],{"__ignoreMap":63},[68,142770,142771,142773,142775,142777,142779,142781,142783,142785,142787,142789,142791,142793],{"class":70,"line":71},[68,142772,861],{"class":85},[68,142774,38],{"class":81},[68,142776,56823],{"class":587},[68,142778,869],{"class":85},[68,142780,135389],{"class":872},[68,142782,56831],{"class":587},[68,142784,869],{"class":85},[68,142786,135396],{"class":872},[68,142788,135399],{"class":587},[68,142790,869],{"class":85},[68,142792,135404],{"class":872},[68,142794,876],{"class":85},[48,142796,142797],{"start":78},[51,142798,142799],{},"sk_bd制作",[168,142801,142802],{},[51,142803,142804,142805,142808,142809,102592,142811,142813],{},"3 号盒子 ",[65,142806,142807],{},"sk_bd"," ，里面包含很多的 ",[65,142810,168],{},[65,142812,51],{},[168,142814,142815,142824],{},[51,142816,142817,142818,142820,142821,142823],{},"当鼠标移入到 ",[65,142819,51],{}," 上面的时候显示红色的边框，在这里先给 ",[65,142822,51],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[51,142825,142826,142827,142829,142830,142832,142833,142836,142837,142839],{},"由于给每个 ",[65,142828,51],{}," 都设置了外边距，导致一行的最后一个 ",[65,142831,51],{}," 掉了下来，在这里我们利用 ",[65,142834,142835],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[65,142838,51],{},"，去掉外边距就好了",[19,142841,141242],{},[58,142843,142844],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,142845,142846,142852,142864],{"__ignoreMap":63},[68,142847,142848,142850],{"class":70,"line":71},[68,142849,82],{"class":81},[68,142851,86],{"class":85},[68,142853,142854,142856,142858,142860,142862],{"class":70,"line":78},[68,142855,595],{"class":92},[68,142857,96],{"class":85},[68,142859,600],{"class":92},[68,142861,603],{"class":92},[68,142863,112],{"class":85},[68,142865,142866],{"class":70,"line":89},[68,142867,118],{"class":85},[19,142869,141331],{},[58,142871,142872],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,142873,142874,142880,142892],{"__ignoreMap":63},[68,142875,142876,142878],{"class":70,"line":71},[68,142877,82],{"class":81},[68,142879,86],{"class":85},[68,142881,142882,142884,142886,142888,142890],{"class":70,"line":78},[68,142883,595],{"class":92},[68,142885,96],{"class":85},[68,142887,600],{"class":92},[68,142889,603],{"class":92},[68,142891,112],{"class":85},[68,142893,142894],{"class":70,"line":89},[68,142895,118],{"class":85},[14,142897,142899],{"id":142898},"_163-注册页面制作","16.3 注册页面制作",[38,142901],{"style":40,"src":142902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142904,142905,142907],{},[1890,142906,1210],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[38,142909],{"style":40,"src":142910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[43,142912,142914],{"id":142913},"_1631-准备工作","16.3.1 准备工作",[168,142916,142917,142920],{},[51,142918,142919],{},"创建register.html，引入 base.css，引入favicon图标",[51,142921,142922],{},"创建register.css ，在html页面进行引入",[43,142924,142926,142927,142929],{"id":142925},"_1632-header-头部实现","16.3.2 ",[65,142928,132877],{}," 头部实现",[168,142931,142932,142935],{},[51,142933,142934],{},"整个内容用 版心 进行包裹",[51,142936,142937],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142939,141242],{},[58,142941,142942],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,142943,142944],{"__ignoreMap":63},[68,142945,142946,142948,142950,142952,142954,142956,142958,142960,142962,142964,142966,142968],{"class":70,"line":71},[68,142947,861],{"class":85},[68,142949,38],{"class":81},[68,142951,56823],{"class":587},[68,142953,869],{"class":85},[68,142955,135389],{"class":872},[68,142957,56831],{"class":587},[68,142959,869],{"class":85},[68,142961,135396],{"class":872},[68,142963,135399],{"class":587},[68,142965,869],{"class":85},[68,142967,135404],{"class":872},[68,142969,876],{"class":85},[19,142971,141331],{},[58,142973,142974],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,142975,142976],{"__ignoreMap":63},[68,142977,142978,142980,142982,142984,142986,142988,142990,142992,142994,142996,142998,143000],{"class":70,"line":71},[68,142979,861],{"class":85},[68,142981,38],{"class":81},[68,142983,56823],{"class":587},[68,142985,869],{"class":85},[68,142987,135389],{"class":872},[68,142989,56831],{"class":587},[68,142991,869],{"class":85},[68,142993,135396],{"class":872},[68,142995,135399],{"class":587},[68,142997,869],{"class":85},[68,142999,135404],{"class":872},[68,143001,876],{"class":85},[43,143003,143005,143006,143009],{"id":143004},"_1633-registerarea-主体模块实现","16.3.3 ",[65,143007,143008],{},"registerarea"," 主体模块实现",[38,143011],{"style":40,"src":143012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143014,143015],{},"整个大盒子 高度为 522px，设置4个边框",[19,143017,141242],{},[58,143019,143020],{"className":60,"code":908,"language":62,"meta":63,"style":63},[65,143021,143022,143028,143044],{"__ignoreMap":63},[68,143023,143024,143026],{"class":70,"line":71},[68,143025,82],{"class":81},[68,143027,86],{"class":85},[68,143029,143030,143032,143034,143036,143038,143040,143042],{"class":70,"line":78},[68,143031,93],{"class":92},[68,143033,96],{"class":85},[68,143035,99],{"class":92},[68,143037,103],{"class":102},[68,143039,106],{"class":92},[68,143041,109],{"class":92},[68,143043,112],{"class":85},[68,143045,143046],{"class":70,"line":89},[68,143047,118],{"class":85},[19,143049,141331],{},[58,143051,143052],{"className":60,"code":908,"language":62,"meta":63,"style":63},[65,143053,143054,143060,143076],{"__ignoreMap":63},[68,143055,143056,143058],{"class":70,"line":71},[68,143057,82],{"class":81},[68,143059,86],{"class":85},[68,143061,143062,143064,143066,143068,143070,143072,143074],{"class":70,"line":78},[68,143063,93],{"class":92},[68,143065,96],{"class":85},[68,143067,99],{"class":92},[68,143069,103],{"class":102},[68,143071,106],{"class":92},[68,143073,109],{"class":92},[68,143075,112],{"class":85},[68,143077,143078],{"class":70,"line":89},[68,143079,118],{"class":85},[19,143081,143082],{},"1号盒子 是一个 h3 标签，放标题",[168,143084,143085],{},[51,143086,143087],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143089,141242],{},[58,143091,143092],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,143093,143094,143100,143110],{"__ignoreMap":63},[68,143095,143096,143098],{"class":70,"line":71},[68,143097,588],{"class":587},[68,143099,86],{"class":85},[68,143101,143102,143104,143106,143108],{"class":70,"line":78},[68,143103,1243],{"class":92},[68,143105,96],{"class":85},[68,143107,131],{"class":92},[68,143109,112],{"class":85},[68,143111,143112],{"class":70,"line":89},[68,143113,118],{"class":85},[19,143115,141331],{},[58,143117,143118],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,143119,143120,143126,143136],{"__ignoreMap":63},[68,143121,143122,143124],{"class":70,"line":71},[68,143123,588],{"class":587},[68,143125,86],{"class":85},[68,143127,143128,143130,143132,143134],{"class":70,"line":78},[68,143129,1243],{"class":92},[68,143131,96],{"class":85},[68,143133,131],{"class":92},[68,143135,112],{"class":85},[68,143137,143138],{"class":70,"line":89},[68,143139,118],{"class":85},[19,143141,143142],{},"2号盒子 里面放注册的内容",[168,143144,143145,143148,143157,143171,143184,143187,143190,143208,143222],{},[51,143146,143147],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[51,143149,143150,143151,143153,143154,143156],{},"里面的内容利用 ",[65,143152,168],{}," 包含 ",[65,143155,51],{}," 来实现的（不需要用表格）",[51,143158,140386,143159,143161,143162,143164,143165,143167,143168,143170],{},[65,143160,51],{}," 里面，左侧放 ",[65,143163,35201],{}," 标签， 中间放",[65,143166,55405],{}," 标签， 右侧放 ",[65,143169,68],{}," 提示信息",[51,143172,143173,143174,143176,143177,143179,143180,143183],{},"左侧 ",[65,143175,35201],{},"里面的文字都是右对齐，我们可以给",[65,143178,35201],{},"设置一个宽度（88px），然后利用",[65,143181,143182],{},"text-align"," 来设置右对齐",[51,143185,143186],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[51,143188,143189],{},"右侧 span修饰一下文字颜色",[51,143191,143192,143193],{},"提示信息的样式优化",[168,143194,143195,143198,143201],{},[51,143196,143197],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[51,143199,143200],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[51,143202,143203,143204,143207],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[65,143205,143206],{},"vertical-algin"," 来设置 图片与文字对齐方式",[51,143209,143210,143211],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[168,143212,143213,143219],{},[51,143214,143215,143216,143218],{},"设置 ",[65,143217,25148],{}," 的 左右 12px 的内边距，设置一下文字颜色",[51,143220,143221],{},"分别设置 背景颜色",[51,143223,143224,143225,143227],{},"同意协议 和 完成注册 都是用 ",[65,143226,51],{}," 进行包裹",[19,143229,141242],{},[58,143231,143232],{"className":60,"code":141815,"language":62,"meta":63,"style":63},[65,143233,143234,143240,143250],{"__ignoreMap":63},[68,143235,143236,143238],{"class":70,"line":71},[68,143237,82],{"class":81},[68,143239,86],{"class":85},[68,143241,143242,143244,143246,143248],{"class":70,"line":78},[68,143243,72458],{"class":92},[68,143245,96],{"class":85},[68,143247,141832],{"class":92},[68,143249,112],{"class":85},[68,143251,143252],{"class":70,"line":89},[68,143253,118],{"class":85},[19,143255,141331],{},[58,143257,143258],{"className":60,"code":141815,"language":62,"meta":63,"style":63},[65,143259,143260,143266,143276],{"__ignoreMap":63},[68,143261,143262,143264],{"class":70,"line":71},[68,143263,82],{"class":81},[68,143265,86],{"class":85},[68,143267,143268,143270,143272,143274],{"class":70,"line":78},[68,143269,72458],{"class":92},[68,143271,96],{"class":85},[68,143273,141832],{"class":92},[68,143275,112],{"class":85},[68,143277,143278],{"class":70,"line":89},[68,143279,118],{"class":85},[43,143281,143283],{"id":143282},"_1634-底部实现","16.3.4 底部实现",[19,143285,141242],{},[58,143287,143288],{"className":60,"code":141815,"language":62,"meta":63,"style":63},[65,143289,143290,143296,143306],{"__ignoreMap":63},[68,143291,143292,143294],{"class":70,"line":71},[68,143293,82],{"class":81},[68,143295,86],{"class":85},[68,143297,143298,143300,143302,143304],{"class":70,"line":78},[68,143299,72458],{"class":92},[68,143301,96],{"class":85},[68,143303,141832],{"class":92},[68,143305,112],{"class":85},[68,143307,143308],{"class":70,"line":89},[68,143309,118],{"class":85},[19,143311,141331],{},[58,143313,143314],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,143315,143316,143320,143334,143338],{"__ignoreMap":63},[68,143317,143318],{"class":70,"line":71},[68,143319,856],{"class":74},[68,143321,143322,143324,143326,143328,143330,143332],{"class":70,"line":78},[68,143323,861],{"class":85},[68,143325,82],{"class":81},[68,143327,866],{"class":587},[68,143329,869],{"class":85},[68,143331,873],{"class":872},[68,143333,876],{"class":85},[68,143335,143336],{"class":70,"line":89},[68,143337,881],{"class":85},[68,143339,143340,143342,143344],{"class":70,"line":115},[68,143341,886],{"class":85},[68,143343,82],{"class":81},[68,143345,876],{"class":85},[14,143347,143349],{"id":143348},"_164-项目总结","16.4 项目总结",[48,143351,143352,143355,143358,143361],{},[51,143353,143354],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[51,143356,143357],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[51,143359,143360],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[51,143362,143363],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[38,143365],{"style":40,"src":143366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[48,143368,143369],{"start":280},[51,143370,143371],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[38,143373],{"style":40,"src":143374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[48,143376,143377],{"start":301},[51,143378,143379],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[38,143381],{"style":40,"src":143382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[58,143384,143385],{"className":847,"code":138029,"language":849,"meta":63,"style":63},[65,143386,143387],{"__ignoreMap":63},[68,143388,143389,143391,143393,143395,143397,143399,143401,143403,143405,143407,143409,143411],{"class":70,"line":71},[68,143390,861],{"class":85},[68,143392,55405],{"class":81},[68,143394,55408],{"class":587},[68,143396,869],{"class":85},[68,143398,64282],{"class":872},[68,143400,16516],{"class":587},[68,143402,869],{"class":85},[68,143404,138050],{"class":872},[68,143406,62604],{"class":587},[68,143408,869],{"class":85},[68,143410,138057],{"class":872},[68,143412,876],{"class":85},[48,143414,143415,143418],{"start":320},[51,143416,143417],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[51,143419,143420],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1652,143422,143423],{},"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":63,"searchDepth":78,"depth":78,"links":143425},[143426,143431,143438,143446],{"id":141052,"depth":78,"text":141053,"children":143427},[143428,143429,143430],{"id":141056,"depth":89,"text":141057},{"id":141787,"depth":89,"text":141788},{"id":142100,"depth":89,"text":142101},{"id":142400,"depth":78,"text":142401,"children":143432},[143433,143434,143436],{"id":142404,"depth":89,"text":142405},{"id":142422,"depth":89,"text":143435},"16.2.2 列表页 header 和 nav 修改",{"id":142706,"depth":89,"text":143437},"16.2.3 列表页主体 sk_container",{"id":142898,"depth":78,"text":142899,"children":143439},[143440,143441,143443,143445],{"id":142913,"depth":89,"text":142914},{"id":142925,"depth":89,"text":143442},"16.3.2 header 头部实现",{"id":143004,"depth":89,"text":143444},"16.3.3 registerarea 主体模块实现",{"id":143282,"depth":89,"text":143283},{"id":143348,"depth":78,"text":143349},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141044,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143453,"title":143454,"body":143455,"description":1676,"extension":1677,"meta":143563,"navigation":1679,"path":143564,"seo":143565,"stem":143566,"__hash__":143567},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143456,"toc":143558},[143457,143460,143464,143467,143470,143479,143488,143492,143497,143504,143522,143525,143528,143531,143534,143537,143540,143543,143546,143549,143552,143555],[10,143458,143454],{"id":143459},"_17-web服务器与网站发布",[14,143461,143463],{"id":143462},"_171-web服务器","17.1 Web服务器",[19,143465,143466],{},"把自己网站上传到服务器上，可以让其他人访问",[38,143468],{"style":40,"src":143469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143471,143472,143475,143476],{},[1890,143473,143474],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1890,143477,143478],{},"Web 服务器等",[19,143480,143481,143482,102592,143485,27334],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1890,143483,143484],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1890,143486,143487],{},"远程服务器",[43,143489,143491],{"id":143490},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143493,143494],{},[1890,143495,143496],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143498,143499,143500],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[1974,143501,143502],{"href":143502,"rel":143503},"http:\u002F\u002Ffree.3v.do\u002F",[25459],[168,143505,143506,143509,143512,143519],{},[51,143507,143508],{},"去免费空间网站注册账号。",[51,143510,143511],{},"记录下主机名、用户名、密码、域名。",[51,143513,143514,143515,143518],{},"利用 ",[65,143516,143517],{},"utftp"," 软件 上传网站到远程服务器",[51,143520,143521],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143523,143524],{},"使用软件上传，对上传软件文件进行解压",[38,143526],{"style":40,"src":143527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[38,143529],{"style":40,"src":143530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143532,143533],{},"输入刚刚申请的服务器账号信息：",[38,143535],{"style":40,"src":143536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[38,143538],{"style":40,"src":143539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[38,143541],{"style":40,"src":143542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[38,143544],{"style":40,"src":143545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143547,143548],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[38,143550],{"style":40,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143553,143554],{},"浏览器输入域名即可访问",[19,143556,143557],{},"首页一定必须是index",{"title":63,"searchDepth":78,"depth":78,"links":143559},[143560],{"id":143462,"depth":78,"text":143463,"children":143561},[143562],{"id":143490,"depth":89,"text":143491},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143454,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143569,"title":143570,"body":143571,"description":1676,"extension":1677,"meta":144498,"navigation":1679,"path":144499,"seo":144500,"stem":144501,"__hash__":144502},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143572,"toc":144481},[143573,143576,143580,143583,143586,143597,143600,143604,143608,143613,143616,143619,143622,143625,143629,143655,143659,143663,143666,143669,143673,143706,143710,143713,143716,143780,143784,143788,143791,143794,143797,143801,143846,143850,143853,143883,143887,143891,143894,143897,143901,143904,143973,143976,144084,144086,144092,144096,144099,144102,144198,144201,144205,144229,144233,144236,144240,144243,144247,144250,144253,144256,144259,144263,144266,144269,144273,144277,144280,144283,144286,144289,144293,144296,144300,144303,144306,144351,144355,144359,144362,144365,144368,144400,144404,144407,144441,144445,144448,144478],[10,143574,143570],{"id":143575},"_18-2d动画与3d转换",[14,143577,143579],{"id":143578},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143581,143582],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143584,143585],{},"转换（transform）你可以简单理解为变形",[168,143587,143588,143591,143594],{},[51,143589,143590],{},"移动：translate",[51,143592,143593],{},"旋转：rotate",[51,143595,143596],{},"缩放：scale",[38,143598],{"style":40,"src":143599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[43,143601,143603],{"id":143602},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23593,143605,143607],{"id":143606},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143609,143610,143611],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1890,143612,134531],{},[38,143614],{"style":40,"src":143615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143617,143618],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143620,143621],{},"对于行内元素无效",[19,143623,143624],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23593,143626,143628],{"id":143627},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[58,143630,143631],{"className":60,"code":140061,"language":62,"meta":63,"style":63},[65,143632,143633,143639,143651],{"__ignoreMap":63},[68,143634,143635,143637],{"class":70,"line":71},[68,143636,82],{"class":81},[68,143638,86],{"class":85},[68,143640,143641,143643,143645,143647,143649],{"class":70,"line":78},[68,143642,595],{"class":92},[68,143644,96],{"class":85},[68,143646,600],{"class":92},[68,143648,603],{"class":92},[68,143650,112],{"class":85},[68,143652,143653],{"class":70,"line":89},[68,143654,118],{"class":85},[43,143656,143658],{"id":143657},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23593,143660,143662],{"id":143661},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143664,143665],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[38,143667],{"style":40,"src":143668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23593,143670,143672],{"id":143671},"_18122-旋转效果","18.1.2.2 旋转效果",[58,143674,143676],{"className":60,"code":143675,"language":62,"meta":63,"style":63},"div {\n  transform: rotate(45deg);\n}\n",[65,143677,143678,143684,143702],{"__ignoreMap":63},[68,143679,143680,143682],{"class":70,"line":71},[68,143681,82],{"class":81},[68,143683,86],{"class":85},[68,143685,143686,143688,143690,143693,143695,143697,143700],{"class":70,"line":78},[68,143687,137856],{"class":92},[68,143689,96],{"class":85},[68,143691,143692],{"class":92},"rotate",[68,143694,997],{"class":85},[68,143696,2265],{"class":92},[68,143698,143699],{"class":102},"deg",[68,143701,1016],{"class":85},[68,143703,143704],{"class":70,"line":89},[68,143705,118],{"class":85},[23593,143707,143709],{"id":143708},"_18123-三角做法","18.1.2.3 三角做法",[19,143711,143712],{},"该下标当经过最外层大盒子时会实现向上反转",[38,143714],{"style":40,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[58,143717,143718],{"className":60,"code":136392,"language":62,"meta":63,"style":63},[65,143719,143720,143724,143730,143740,143750,143766,143776],{"__ignoreMap":63},[68,143721,143722],{"class":70,"line":71},[68,143723,136399],{"class":74},[68,143725,143726,143728],{"class":70,"line":78},[68,143727,136404],{"class":587},[68,143729,86],{"class":85},[68,143731,143732,143734,143736,143738],{"class":70,"line":89},[68,143733,72149],{"class":92},[68,143735,96],{"class":85},[68,143737,600],{"class":92},[68,143739,112],{"class":85},[68,143741,143742,143744,143746,143748],{"class":70,"line":115},[68,143743,72368],{"class":92},[68,143745,96],{"class":85},[68,143747,600],{"class":92},[68,143749,112],{"class":85},[68,143751,143752,143754,143756,143758,143760,143762,143764],{"class":70,"line":280},[68,143753,93],{"class":92},[68,143755,96],{"class":85},[68,143757,2182],{"class":92},[68,143759,103],{"class":102},[68,143761,106],{"class":92},[68,143763,65574],{"class":92},[68,143765,112],{"class":85},[68,143767,143768,143770,143772,143774],{"class":70,"line":301},[68,143769,136447],{"class":92},[68,143771,96],{"class":85},[68,143773,63952],{"class":92},[68,143775,112],{"class":85},[68,143777,143778],{"class":70,"line":320},[68,143779,118],{"class":85},[43,143781,143783],{"id":143782},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23593,143785,143787],{"id":143786},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143789,143790],{},"设置中心点",[38,143792],{"style":40,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143795,143796],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23593,143798,143800],{"id":143799},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[58,143802,143804],{"className":60,"code":143803,"language":62,"meta":63,"style":63},"\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",[65,143805,143806,143811,143817,143832,143837,143842],{"__ignoreMap":63},[68,143807,143808],{"class":70,"line":71},[68,143809,143810],{"class":74},"\u002F* 转换中心点 *\u002F\n",[68,143812,143813,143815],{"class":70,"line":78},[68,143814,82],{"class":81},[68,143816,86],{"class":85},[68,143818,143819,143822,143824,143826,143828,143830],{"class":70,"line":89},[68,143820,143821],{"class":92},"  transform-origin",[68,143823,96],{"class":85},[68,143825,53179],{"class":92},[68,143827,18739],{"class":92},[68,143829,606],{"class":85},[68,143831,136545],{"class":74},[68,143833,143834],{"class":70,"line":115},[68,143835,143836],{"class":74},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[68,143838,143839],{"class":70,"line":280},[68,143840,143841],{"class":74},"  \u002F* transform-origin: left top; *\u002F\n",[68,143843,143844],{"class":70,"line":301},[68,143845,118],{"class":85},[23593,143847,143849],{"id":143848},"_18133-旋转案例","18.1.3.3 旋转案例",[38,143851],{"style":40,"src":143852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[58,143854,143855],{"className":60,"code":143675,"language":62,"meta":63,"style":63},[65,143856,143857,143863,143879],{"__ignoreMap":63},[68,143858,143859,143861],{"class":70,"line":71},[68,143860,82],{"class":81},[68,143862,86],{"class":85},[68,143864,143865,143867,143869,143871,143873,143875,143877],{"class":70,"line":78},[68,143866,137856],{"class":92},[68,143868,96],{"class":85},[68,143870,143692],{"class":92},[68,143872,997],{"class":85},[68,143874,2265],{"class":92},[68,143876,143699],{"class":102},[68,143878,1016],{"class":85},[68,143880,143881],{"class":70,"line":89},[68,143882,118],{"class":85},[43,143884,143886],{"id":143885},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23593,143888,143890],{"id":143889},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143892,143893],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[38,143895],{"style":40,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23593,143898,143900],{"id":143899},"_18142-分页按钮","18.1.4.2 分页按钮",[38,143902],{"style":40,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[58,143905,143907],{"className":60,"code":143906,"language":62,"meta":63,"style":63},"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",[65,143908,143909,143915,143931,143935,143939,143944,143950,143964,143969],{"__ignoreMap":63},[68,143910,143911,143913],{"class":70,"line":71},[68,143912,82],{"class":81},[68,143914,86],{"class":85},[68,143916,143917,143919,143921,143924,143926,143929],{"class":70,"line":78},[68,143918,137856],{"class":92},[68,143920,96],{"class":85},[68,143922,143923],{"class":92},"scale",[68,143925,997],{"class":85},[68,143927,143928],{"class":92},"1.2",[68,143930,1016],{"class":85},[68,143932,143933],{"class":70,"line":89},[68,143934,118],{"class":85},[68,143936,143937],{"class":70,"line":115},[68,143938,137333],{"class":85},[68,143940,143941],{"class":70,"line":280},[68,143942,143943],{"class":74},"\u002F* 2D 缩放 *\u002F\n",[68,143945,143946,143948],{"class":70,"line":301},[68,143947,82],{"class":81},[68,143949,86],{"class":85},[68,143951,143952,143954,143956,143958,143960,143962],{"class":70,"line":320},[68,143953,137856],{"class":92},[68,143955,96],{"class":85},[68,143957,143923],{"class":92},[68,143959,997],{"class":85},[68,143961,143928],{"class":92},[68,143963,1016],{"class":85},[68,143965,143966],{"class":70,"line":2915},[68,143967,143968],{"class":74},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[68,143970,143971],{"class":70,"line":2921},[68,143972,118],{"class":85},[19,143974,143975],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[58,143977,143979],{"className":60,"code":143978,"language":62,"meta":63,"style":63},"\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",[65,143980,143981,143986,143996,144017,144038,144042,144047,144053,144080],{"__ignoreMap":63},[68,143982,143983],{"class":70,"line":71},[68,143984,143985],{"class":74},"\u002F* 定义动画 *\u002F\n",[68,143987,143988,143991,143994],{"class":70,"line":78},[68,143989,143990],{"class":102},"@keyframes",[68,143992,143993],{"class":6815}," move",[68,143995,86],{"class":85},[68,143997,143998,144001,144003,144005,144007,144010,144012,144014],{"class":70,"line":89},[68,143999,144000],{"class":587},"  0%",[68,144002,81384],{"class":85},[68,144004,49727],{"class":92},[68,144006,96],{"class":85},[68,144008,144009],{"class":92},"translateX",[68,144011,997],{"class":85},[68,144013,600],{"class":92},[68,144015,144016],{"class":85},"); }\n",[68,144018,144019,144022,144024,144026,144028,144030,144032,144034,144036],{"class":70,"line":115},[68,144020,144021],{"class":587},"  100%",[68,144023,81384],{"class":85},[68,144025,49727],{"class":92},[68,144027,96],{"class":85},[68,144029,144009],{"class":92},[68,144031,997],{"class":85},[68,144033,2047],{"class":92},[68,144035,103],{"class":102},[68,144037,144016],{"class":85},[68,144039,144040],{"class":70,"line":280},[68,144041,118],{"class":85},[68,144043,144044],{"class":70,"line":301},[68,144045,144046],{"class":74},"\u002F* 调用动画 *\u002F\n",[68,144048,144049,144051],{"class":70,"line":320},[68,144050,82],{"class":81},[68,144052,86],{"class":85},[68,144054,144055,144058,144060,144062,144064,144066,144068,144070,144072,144075,144078],{"class":70,"line":2915},[68,144056,144057],{"class":92},"  animation",[68,144059,96],{"class":85},[68,144061,136558],{"class":92},[68,144063,1112],{"class":92},[68,144065,2431],{"class":102},[68,144067,80258],{"class":92},[68,144069,5692],{"class":92},[68,144071,2431],{"class":102},[68,144073,144074],{"class":92}," infinite",[68,144076,144077],{"class":92}," alternate",[68,144079,112],{"class":85},[68,144081,144082],{"class":70,"line":2921},[68,144083,118],{"class":85},[19,144085,143975],{},[58,144087,144090],{"className":144088,"code":144089,"language":6786},[6784],"\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",[65,144091,144089],{"__ignoreMap":63},[23593,144093,144095],{"id":144094},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144097,144098],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[38,144100],{"style":40,"src":144101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[58,144103,144104],{"className":60,"code":143978,"language":62,"meta":63,"style":63},[65,144105,144106,144110,144118,144136,144156,144160,144164,144170,144194],{"__ignoreMap":63},[68,144107,144108],{"class":70,"line":71},[68,144109,143985],{"class":74},[68,144111,144112,144114,144116],{"class":70,"line":78},[68,144113,143990],{"class":102},[68,144115,143993],{"class":6815},[68,144117,86],{"class":85},[68,144119,144120,144122,144124,144126,144128,144130,144132,144134],{"class":70,"line":89},[68,144121,144000],{"class":587},[68,144123,81384],{"class":85},[68,144125,49727],{"class":92},[68,144127,96],{"class":85},[68,144129,144009],{"class":92},[68,144131,997],{"class":85},[68,144133,600],{"class":92},[68,144135,144016],{"class":85},[68,144137,144138,144140,144142,144144,144146,144148,144150,144152,144154],{"class":70,"line":115},[68,144139,144021],{"class":587},[68,144141,81384],{"class":85},[68,144143,49727],{"class":92},[68,144145,96],{"class":85},[68,144147,144009],{"class":92},[68,144149,997],{"class":85},[68,144151,2047],{"class":92},[68,144153,103],{"class":102},[68,144155,144016],{"class":85},[68,144157,144158],{"class":70,"line":280},[68,144159,118],{"class":85},[68,144161,144162],{"class":70,"line":301},[68,144163,144046],{"class":74},[68,144165,144166,144168],{"class":70,"line":320},[68,144167,82],{"class":81},[68,144169,86],{"class":85},[68,144171,144172,144174,144176,144178,144180,144182,144184,144186,144188,144190,144192],{"class":70,"line":2915},[68,144173,144057],{"class":92},[68,144175,96],{"class":85},[68,144177,136558],{"class":92},[68,144179,1112],{"class":92},[68,144181,2431],{"class":102},[68,144183,80258],{"class":92},[68,144185,5692],{"class":92},[68,144187,2431],{"class":102},[68,144189,144074],{"class":92},[68,144191,144077],{"class":92},[68,144193,112],{"class":85},[68,144195,144196],{"class":70,"line":2921},[68,144197,118],{"class":85},[19,144199,144200],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[43,144202,144204],{"id":144203},"_1823-知识点回顾","18.2.3 知识点回顾",[58,144206,144207],{"className":60,"code":130288,"language":62,"meta":63,"style":63},[65,144208,144209,144215,144225],{"__ignoreMap":63},[68,144210,144211,144213],{"class":70,"line":71},[68,144212,82],{"class":81},[68,144214,86],{"class":85},[68,144216,144217,144219,144221,144223],{"class":70,"line":78},[68,144218,130301],{"class":92},[68,144220,96],{"class":85},[68,144222,63320],{"class":92},[68,144224,112],{"class":85},[68,144226,144227],{"class":70,"line":89},[68,144228,118],{"class":85},[14,144230,144232],{"id":144231},"_183-3d-转换","18.3 3D 转换",[19,144234,144235],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[43,144237,144239],{"id":144238},"_1831-坐标轴认识","18.3.1 坐标轴认识",[38,144241],{"style":40,"src":144242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[43,144244,144246],{"id":144245},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[38,144248],{"style":40,"src":144249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144251,144252],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144254,144255],{},"translate3d的效果需要搭配透视perspective来使用",[38,144257],{"style":40,"src":144258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[43,144260,144262],{"id":144261},"_1833-透视-perspective","18.3.3 透视 perspective",[38,144264],{"style":40,"src":144265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144267,144268],{},"透视写在父盒子上，单位为像素",[43,144270,144272],{"id":144271},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23593,144274,144276],{"id":144275},"_18341-分开解释","18.3.4.1 分开解释",[38,144278],{"style":40,"src":144279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[38,144281],{"style":40,"src":144282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[38,144284],{"style":40,"src":144285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144287,144288],{},"总结来说就是左手原则",[23593,144290,144292],{"id":144291},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[38,144294],{"style":40,"src":144295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[43,144297,144299],{"id":144298},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[38,144301],{"style":40,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[38,144304],{"style":40,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[58,144307,144309],{"className":60,"code":144308,"language":62,"meta":63,"style":63},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[65,144310,144311,144317,144330,144347],{"__ignoreMap":63},[68,144312,144313,144315],{"class":70,"line":71},[68,144314,82],{"class":81},[68,144316,86],{"class":85},[68,144318,144319,144322,144324,144326,144328],{"class":70,"line":78},[68,144320,144321],{"class":92},"  perspective",[68,144323,96],{"class":85},[68,144325,66656],{"class":92},[68,144327,103],{"class":102},[68,144329,112],{"class":85},[68,144331,144332,144334,144336,144339,144341,144343,144345],{"class":70,"line":89},[68,144333,137856],{"class":92},[68,144335,96],{"class":85},[68,144337,144338],{"class":92},"rotateX",[68,144340,997],{"class":85},[68,144342,2265],{"class":92},[68,144344,143699],{"class":102},[68,144346,1016],{"class":85},[68,144348,144349],{"class":70,"line":115},[68,144350,118],{"class":85},[43,144352,144354],{"id":144353},"_1836-案例","18.3.6 案例",[23593,144356,144358],{"id":144357},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[38,144360],{"style":40,"src":144361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[38,144363],{"style":40,"src":144364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[38,144366],{"style":40,"src":144367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[58,144369,144371],{"className":60,"code":144370,"language":62,"meta":63,"style":63},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[65,144372,144373,144378,144384,144396],{"__ignoreMap":63},[68,144374,144375],{"class":70,"line":71},[68,144376,144377],{"class":74},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[68,144379,144380,144382],{"class":70,"line":78},[68,144381,134869],{"class":587},[68,144383,86],{"class":85},[68,144385,144386,144388,144390,144392,144394],{"class":70,"line":89},[68,144387,144321],{"class":92},[68,144389,96],{"class":85},[68,144391,66656],{"class":92},[68,144393,103],{"class":102},[68,144395,112],{"class":85},[68,144397,144398],{"class":70,"line":115},[68,144399,118],{"class":85},[23593,144401,144403],{"id":144402},"_18362-3d导航栏","18.3.6.2 3D导航栏",[38,144405],{"style":40,"src":144406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[58,144408,144409],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,144410,144411,144415,144429,144433],{"__ignoreMap":63},[68,144412,144413],{"class":70,"line":71},[68,144414,856],{"class":74},[68,144416,144417,144419,144421,144423,144425,144427],{"class":70,"line":78},[68,144418,861],{"class":85},[68,144420,82],{"class":81},[68,144422,866],{"class":587},[68,144424,869],{"class":85},[68,144426,873],{"class":872},[68,144428,876],{"class":85},[68,144430,144431],{"class":70,"line":89},[68,144432,881],{"class":85},[68,144434,144435,144437,144439],{"class":70,"line":115},[68,144436,886],{"class":85},[68,144438,82],{"class":81},[68,144440,876],{"class":85},[23593,144442,144444],{"id":144443},"_18363-旋转木马","18.3.6.3 旋转木马",[38,144446],{"style":40,"src":144447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[58,144449,144450],{"className":60,"code":143675,"language":62,"meta":63,"style":63},[65,144451,144452,144458,144474],{"__ignoreMap":63},[68,144453,144454,144456],{"class":70,"line":71},[68,144455,82],{"class":81},[68,144457,86],{"class":85},[68,144459,144460,144462,144464,144466,144468,144470,144472],{"class":70,"line":78},[68,144461,137856],{"class":92},[68,144463,96],{"class":85},[68,144465,143692],{"class":92},[68,144467,997],{"class":85},[68,144469,2265],{"class":92},[68,144471,143699],{"class":102},[68,144473,1016],{"class":85},[68,144475,144476],{"class":70,"line":89},[68,144477,118],{"class":85},[1652,144479,144480],{},"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":63,"searchDepth":78,"depth":78,"links":144482},[144483,144490],{"id":143578,"depth":78,"text":143579,"children":144484},[144485,144486,144487,144488,144489],{"id":143602,"depth":89,"text":143603},{"id":143657,"depth":89,"text":143658},{"id":143782,"depth":89,"text":143783},{"id":143885,"depth":89,"text":143886},{"id":144203,"depth":89,"text":144204},{"id":144231,"depth":78,"text":144232,"children":144491},[144492,144493,144494,144495,144496,144497],{"id":144238,"depth":89,"text":144239},{"id":144245,"depth":89,"text":144246},{"id":144261,"depth":89,"text":144262},{"id":144271,"depth":89,"text":144272},{"id":144298,"depth":89,"text":144299},{"id":144353,"depth":89,"text":144354},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143570,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144504,"title":144505,"body":144506,"description":1676,"extension":1677,"meta":144709,"navigation":1679,"path":144710,"seo":144711,"stem":144712,"__hash__":144713},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144507,"toc":144698},[144508,144511,144515,144518,144521,144525,144528,144531,144534,144538,144541,144545,144548,144552,144555,144559,144573,144577,144602,144605,144608,144625,144629,144633,144636,144639,144643,144646,144649,144667,144671,144674,144688,144692,144695],[10,144509,144505],{"id":144510},"_19-移动端基础-前缀现状与视口",[14,144512,144514],{"id":144513},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[38,144516],{"style":40,"src":144517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144519,144520],{},"意思就是加个前缀，增加兼容性",[14,144522,144524],{"id":144523},"_192-移动端现状认识","19.2 移动端现状认识",[38,144526],{"style":40,"src":144527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144529,144530],{},"调试方法：",[38,144532],{"style":40,"src":144533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144535,144537],{"id":144536},"_193-视口","19.3 视口",[19,144539,144540],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[43,144542,144544],{"id":144543},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[38,144546],{"style":40,"src":144547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[43,144549,144551],{"id":144550},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[38,144553],{"style":40,"src":144554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[43,144556,144558],{"id":144557},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[168,144560,144561,144564,144567,144570],{},[51,144562,144563],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[51,144565,144566],{},"理想视口，对设备来讲，是最理想的视口尺寸",[51,144568,144569],{},"需要手动添写meta视口标签通知浏览器操作",[51,144571,144572],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[43,144574,144576],{"id":144575},"_1934-meta视口标签","19.3.4 meta视口标签",[58,144578,144580],{"className":847,"code":144579,"language":849,"meta":63,"style":63},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[65,144581,144582],{"__ignoreMap":63},[68,144583,144584,144586,144588,144590,144592,144594,144596,144598,144600],{"class":70,"line":71},[68,144585,861],{"class":85},[68,144587,52935],{"class":81},[68,144589,16516],{"class":587},[68,144591,869],{"class":85},[68,144593,52982],{"class":872},[68,144595,52962],{"class":587},[68,144597,869],{"class":85},[68,144599,52989],{"class":872},[68,144601,876],{"class":85},[38,144603],{"style":40,"src":144604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144606,144607],{},"标准视口设置：",[48,144609,144610,144613,144616,144619,144622],{},[51,144611,144612],{},"视口宽度和设备保持一致",[51,144614,144615],{},"视口的默认缩放比例1.0",[51,144617,144618],{},"不允许用户自行缩放",[51,144620,144621],{},"最大允许的缩放比例1.0",[51,144623,144624],{},"最小允许的缩放比例1.0",[43,144626,144628],{"id":144627},"_1935-二倍图","19.3.5 二倍图",[23593,144630,144632],{"id":144631},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[38,144634],{"style":40,"src":144635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[38,144637],{"style":40,"src":144638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23593,144640,144642],{"id":144641},"_19352-多倍图","19.3.5.2 多倍图",[38,144644],{"style":40,"src":144645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144647,144648],{},"二倍图法，代码如下：",[58,144650,144652],{"className":60,"code":144651,"language":62,"meta":63,"style":63},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[65,144653,144654,144659],{"__ignoreMap":63},[68,144655,144656],{"class":70,"line":71},[68,144657,144658],{"class":74},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[68,144660,144661,144664],{"class":70,"line":78},[68,144662,144663],{"class":81},"background-size",[68,144665,144666],{"class":85},": 50% 50%;\n",[23593,144668,144670],{"id":144669},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[38,144672],{"style":40,"src":144673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[48,144675,144676,144679,144682,144685],{},[51,144677,144678],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[51,144680,144681],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[51,144683,144684],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[51,144686,144687],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23593,144689,144691],{"id":144690},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[38,144693],{"style":40,"src":144694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1652,144696,144697],{},"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":63,"searchDepth":78,"depth":78,"links":144699},[144700,144701,144702],{"id":144513,"depth":78,"text":144514},{"id":144523,"depth":78,"text":144524},{"id":144536,"depth":78,"text":144537,"children":144703},[144704,144705,144706,144707,144708],{"id":144543,"depth":89,"text":144544},{"id":144550,"depth":89,"text":144551},{"id":144557,"depth":89,"text":144558},{"id":144575,"depth":89,"text":144576},{"id":144627,"depth":89,"text":144628},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144505,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144715,"title":144716,"body":144717,"description":1676,"extension":1677,"meta":145594,"navigation":1679,"path":145595,"seo":145596,"stem":145597,"__hash__":145598},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144718,"toc":145578},[144719,144722,144726,144733,144736,144743,144746,144751,144754,144758,144762,144769,144772,144775,144779,144782,144785,144788,144791,144794,144798,144801,144805,144807,144810,144813,144816,144819,144821,144824,144826,144856,144858,144888,144892,144895,144899,144902,144919,144922,144925,145001,145003,145006,145009,145012,145015,145017,145020,145023,145027,145049,145052,145055,145059,145062,145068,145071,145075,145078,145081,145085,145088,145091,145094,145098,145101,145104,145107,145110,145114,145117,145121,145128,145131,145134,145137,145140,145150,145153,145156,145163,145166,145170,145173,145176,145180,145183,145186,145189,145234,145237,145240,145243,145245,145374,145376,145414,145417,145420,145422,145540,145542,145576],[10,144720,144716],{"id":144721},"_20-移动端布局实战上篇",[14,144723,144725],{"id":144724},"_201-移动端主流方案","20.1 移动端主流方案",[48,144727,144728],{},[51,144729,144730],{},[1890,144731,144732],{},"单独移动端页面（主流）",[38,144734],{"style":40,"src":144735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[48,144737,144738],{"start":78},[51,144739,144740],{},[1890,144741,144742],{},"响应式兼容PC移动端",[38,144744],{"style":40,"src":144745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[48,144747,144748],{"start":89},[51,144749,144750],{},"两种页面选型布局方式",[38,144752],{"style":40,"src":144753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144755,144757],{"id":144756},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[43,144759,144761],{"id":144760},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144763,144764,144765],{},"官网地址： ",[1974,144766,144767],{"href":144767,"rel":144768},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25459],[38,144770],{"style":40,"src":144771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[38,144773],{"style":40,"src":144774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[43,144776,144778],{"id":144777},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[38,144780],{"style":40,"src":144781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[38,144783],{"style":40,"src":144784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144786,144787],{},"去除高亮：",[19,144789,144790],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144792,144793],{},"-webkit- tap-highlight-color: transparent;",[14,144795,144797],{"id":144796},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[38,144799],{"style":40,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144802,144804],{"id":144803},"_204-流式布局案例","20.4 流式布局案例",[19,144806,1780],{},[19,144808,144809],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144811,144812],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144814,144815],{},"图片格式：",[38,144817],{"style":40,"src":144818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144820,136915],{},[38,144822],{"style":40,"src":144823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144825,141242],{},[58,144827,144828],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,144829,144830],{"__ignoreMap":63},[68,144831,144832,144834,144836,144838,144840,144842,144844,144846,144848,144850,144852,144854],{"class":70,"line":71},[68,144833,861],{"class":85},[68,144835,38],{"class":81},[68,144837,56823],{"class":587},[68,144839,869],{"class":85},[68,144841,135389],{"class":872},[68,144843,56831],{"class":587},[68,144845,869],{"class":85},[68,144847,135396],{"class":872},[68,144849,135399],{"class":587},[68,144851,869],{"class":85},[68,144853,135404],{"class":872},[68,144855,876],{"class":85},[19,144857,141331],{},[58,144859,144860],{"className":847,"code":135374,"language":849,"meta":63,"style":63},[65,144861,144862],{"__ignoreMap":63},[68,144863,144864,144866,144868,144870,144872,144874,144876,144878,144880,144882,144884,144886],{"class":70,"line":71},[68,144865,861],{"class":85},[68,144867,38],{"class":81},[68,144869,56823],{"class":587},[68,144871,869],{"class":85},[68,144873,135389],{"class":872},[68,144875,56831],{"class":587},[68,144877,869],{"class":85},[68,144879,135396],{"class":872},[68,144881,135399],{"class":587},[68,144883,869],{"class":85},[68,144885,135404],{"class":872},[68,144887,876],{"class":85},[14,144889,144891],{"id":144890},"_205-flex布局","20.5 flex布局",[38,144893],{"style":40,"src":144894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[43,144896,144898],{"id":144897},"_2051-布局原理","20.5.1 布局原理",[19,144900,144901],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[168,144903,144904,144907,144910,144913,144916],{},[51,144905,144906],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[51,144908,144909],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[51,144911,144912],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[51,144914,144915],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[51,144917,144918],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144920,144921],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144923,144924],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[58,144926,144928],{"className":60,"code":144927,"language":62,"meta":63,"style":63},"\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",[65,144929,144930,144935,144942,144952,144964,144975,144986,144997],{"__ignoreMap":63},[68,144931,144932],{"class":70,"line":71},[68,144933,144934],{"class":74},"\u002F* Flex 弹性布局 *\u002F\n",[68,144936,144937,144940],{"class":70,"line":78},[68,144938,144939],{"class":587},".container",[68,144941,86],{"class":85},[68,144943,144944,144946,144948,144950],{"class":70,"line":89},[68,144945,129735],{"class":92},[68,144947,96],{"class":85},[68,144949,53067],{"class":92},[68,144951,112],{"class":85},[68,144953,144954,144957,144959,144962],{"class":70,"line":115},[68,144955,144956],{"class":92},"  flex-direction",[68,144958,96],{"class":85},[68,144960,144961],{"class":92},"row",[68,144963,112],{"class":85},[68,144965,144966,144969,144971,144973],{"class":70,"line":280},[68,144967,144968],{"class":92},"  justify-content",[68,144970,96],{"class":85},[68,144972,53254],{"class":92},[68,144974,112],{"class":85},[68,144976,144977,144980,144982,144984],{"class":70,"line":301},[68,144978,144979],{"class":92},"  align-items",[68,144981,96],{"class":85},[68,144983,53179],{"class":92},[68,144985,112],{"class":85},[68,144987,144988,144991,144993,144995],{"class":70,"line":320},[68,144989,144990],{"class":92},"  flex-wrap",[68,144992,96],{"class":85},[68,144994,80188],{"class":92},[68,144996,112],{"class":85},[68,144998,144999],{"class":70,"line":2915},[68,145000,118],{"class":85},[19,145002,72035],{},[19,145004,145005],{},".form-item .male-label {",[19,145007,145008],{},"   margin-right: 20px;",[19,145010,145011],{},"   display: inline-flex;",[19,145013,145014],{},"   align-items: center;",[19,145016,2681],{},[38,145018],{"style":40,"src":145019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[38,145021],{"style":40,"src":145022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[43,145024,145026],{"id":145025},"_2052-常见父项属性","20.5.2 常见父项属性",[48,145028,145029,145032,145035,145038,145041,145044,145047],{},[51,145030,145031],{},"flex-direction：设置主轴的方向",[51,145033,145034],{},"justify-content：设置主轴上的子元素排列方式",[51,145036,145037],{},"flex-wrap：设置子元素是否换行",[51,145039,145040],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[51,145042,145043],{},"align-items：设置侧轴上的子元素排列方式（单行）",[51,145045,145046],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[51,145048,145031],{},[38,145050],{"style":40,"src":145051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[38,145053],{"style":40,"src":145054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[48,145056,145057],{"start":78},[51,145058,145034],{},[38,145060],{"style":40,"src":145061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145063,145064,145067],{},[65,145065,145066],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145069,145070],{},"跟着主轴走",[48,145072,145073],{"start":89},[51,145074,145037],{},[38,145076],{"style":40,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145079,145080],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[48,145082,145083],{"start":115},[51,145084,145040],{},[38,145086],{"style":40,"src":145087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145089,145090],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145092,145093],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[48,145095,145096],{"start":280},[51,145097,145043],{},[38,145099],{"style":40,"src":145100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145102,145103],{},"align-items与align-content之间的区别：",[19,145105,145106],{},"单找items，多找content",[38,145108],{"style":40,"src":145109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[48,145111,145112],{"start":301},[51,145113,145046],{},[38,145115],{"style":40,"src":145116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[43,145118,145120],{"id":145119},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[48,145122,145123],{},[51,145124,145125],{},[1890,145126,145127],{},"flex 属性",[19,145129,145130],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[38,145132],{"style":40,"src":145133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145135,145136],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145138,145139],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[48,145141,145142],{"start":78},[51,145143,145144,15392,145147],{},[1890,145145,145146],{},"align-self",[1890,145148,145149],{},"控制子项自己在侧轴上的排列方式",[38,145151],{"style":40,"src":145152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145154,145155],{},"单个子盒子在父盒子侧轴上的排列方式",[48,145157,145158],{"start":89},[51,145159,145160,145162],{},[1890,145161,96872],{}," 属性定义项目的排列顺序",[38,145164],{"style":40,"src":145165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[43,145167,145169],{"id":145168},"_2054-背景线性渐变","20.5.4 背景线性渐变",[38,145171],{"style":40,"src":145172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145174,145175],{},"必须要添加浏览器的私有前缀",[43,145177,145179],{"id":145178},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145181,145182],{},"学到最重要的知识：",[19,145184,145185],{},"flex处理这样的布局思路",[38,145187],{"style":40,"src":145188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[58,145190,145192],{"className":60,"code":145191,"language":62,"meta":63,"style":63},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[65,145193,145194,145200,145210,145220,145230],{"__ignoreMap":63},[68,145195,145196,145198],{"class":70,"line":71},[68,145197,144939],{"class":587},[68,145199,86],{"class":85},[68,145201,145202,145204,145206,145208],{"class":70,"line":78},[68,145203,129735],{"class":92},[68,145205,96],{"class":85},[68,145207,53067],{"class":92},[68,145209,112],{"class":85},[68,145211,145212,145214,145216,145218],{"class":70,"line":89},[68,145213,144968],{"class":92},[68,145215,96],{"class":85},[68,145217,53179],{"class":92},[68,145219,112],{"class":85},[68,145221,145222,145224,145226,145228],{"class":70,"line":115},[68,145223,144979],{"class":92},[68,145225,96],{"class":85},[68,145227,53179],{"class":92},[68,145229,112],{"class":85},[68,145231,145232],{"class":70,"line":280},[68,145233,118],{"class":85},[19,145235,145236],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145238,145239],{},"使用属性选择器",[38,145241],{"style":40,"src":145242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145244,70471],{},[58,145246,145248],{"className":847,"code":145247,"language":849,"meta":63,"style":63},"\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",[65,145249,145250,145255,145269,145274,145294,145299,145318,145323,145342,145347,145366],{"__ignoreMap":63},[68,145251,145252],{"class":70,"line":71},[68,145253,145254],{"class":74},"\u003C!-- 携程网移动端案例结构 -->\n",[68,145256,145257,145259,145261,145263,145265,145267],{"class":70,"line":78},[68,145258,861],{"class":85},[68,145260,82],{"class":81},[68,145262,866],{"class":587},[68,145264,869],{"class":85},[68,145266,93899],{"class":872},[68,145268,876],{"class":85},[68,145270,145271],{"class":70,"line":89},[68,145272,145273],{"class":74},"  \u003C!-- 搜索栏 -->\n",[68,145275,145276,145278,145280,145282,145284,145287,145290,145292],{"class":70,"line":115},[68,145277,53729],{"class":85},[68,145279,82],{"class":81},[68,145281,866],{"class":587},[68,145283,869],{"class":85},[68,145285,145286],{"class":872},"\"search-index\"",[68,145288,145289],{"class":85},">...\u003C\u002F",[68,145291,82],{"class":81},[68,145293,876],{"class":85},[68,145295,145296],{"class":70,"line":280},[68,145297,145298],{"class":74},"  \u003C!-- 焦点图 -->\n",[68,145300,145301,145303,145305,145307,145309,145312,145314,145316],{"class":70,"line":301},[68,145302,53729],{"class":85},[68,145304,82],{"class":81},[68,145306,866],{"class":587},[68,145308,869],{"class":85},[68,145310,145311],{"class":872},"\"focus\"",[68,145313,145289],{"class":85},[68,145315,82],{"class":81},[68,145317,876],{"class":85},[68,145319,145320],{"class":70,"line":320},[68,145321,145322],{"class":74},"  \u003C!-- 主导航 -->\n",[68,145324,145325,145327,145329,145331,145333,145336,145338,145340],{"class":70,"line":2915},[68,145326,53729],{"class":85},[68,145328,82],{"class":81},[68,145330,866],{"class":587},[68,145332,869],{"class":85},[68,145334,145335],{"class":872},"\"local-nav\"",[68,145337,145289],{"class":85},[68,145339,82],{"class":81},[68,145341,876],{"class":85},[68,145343,145344],{"class":70,"line":2921},[68,145345,145346],{"class":74},"  \u003C!-- 子导航 -->\n",[68,145348,145349,145351,145353,145355,145357,145360,145362,145364],{"class":70,"line":2933},[68,145350,53729],{"class":85},[68,145352,82],{"class":81},[68,145354,866],{"class":587},[68,145356,869],{"class":85},[68,145358,145359],{"class":872},"\"nav-common\"",[68,145361,145289],{"class":85},[68,145363,82],{"class":81},[68,145365,876],{"class":85},[68,145367,145368,145370,145372],{"class":70,"line":3214},[68,145369,886],{"class":85},[68,145371,82],{"class":81},[68,145373,876],{"class":85},[19,145375,72035],{},[58,145377,145378],{"className":60,"code":138324,"language":62,"meta":63,"style":63},[65,145379,145380,145394,145410],{"__ignoreMap":63},[68,145381,145382,145384,145386,145388,145390,145392],{"class":70,"line":71},[68,145383,55405],{"class":81},[68,145385,2626],{"class":85},[68,145387,104680],{"class":587},[68,145389,869],{"class":102},[68,145391,64282],{"class":872},[68,145393,138341],{"class":85},[68,145395,145396,145398,145400,145402,145404,145406,145408],{"class":70,"line":78},[68,145397,93],{"class":92},[68,145399,96],{"class":85},[68,145401,99],{"class":92},[68,145403,103],{"class":102},[68,145405,106],{"class":92},[68,145407,315],{"class":92},[68,145409,112],{"class":85},[68,145411,145412],{"class":70,"line":89},[68,145413,118],{"class":85},[19,145415,145416],{},"总代码和效果展示：",[38,145418],{"style":40,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145421,70471],{},[58,145423,145424],{"className":847,"code":145247,"language":849,"meta":63,"style":63},[65,145425,145426,145430,145444,145448,145466,145470,145488,145492,145510,145514,145532],{"__ignoreMap":63},[68,145427,145428],{"class":70,"line":71},[68,145429,145254],{"class":74},[68,145431,145432,145434,145436,145438,145440,145442],{"class":70,"line":78},[68,145433,861],{"class":85},[68,145435,82],{"class":81},[68,145437,866],{"class":587},[68,145439,869],{"class":85},[68,145441,93899],{"class":872},[68,145443,876],{"class":85},[68,145445,145446],{"class":70,"line":89},[68,145447,145273],{"class":74},[68,145449,145450,145452,145454,145456,145458,145460,145462,145464],{"class":70,"line":115},[68,145451,53729],{"class":85},[68,145453,82],{"class":81},[68,145455,866],{"class":587},[68,145457,869],{"class":85},[68,145459,145286],{"class":872},[68,145461,145289],{"class":85},[68,145463,82],{"class":81},[68,145465,876],{"class":85},[68,145467,145468],{"class":70,"line":280},[68,145469,145298],{"class":74},[68,145471,145472,145474,145476,145478,145480,145482,145484,145486],{"class":70,"line":301},[68,145473,53729],{"class":85},[68,145475,82],{"class":81},[68,145477,866],{"class":587},[68,145479,869],{"class":85},[68,145481,145311],{"class":872},[68,145483,145289],{"class":85},[68,145485,82],{"class":81},[68,145487,876],{"class":85},[68,145489,145490],{"class":70,"line":320},[68,145491,145322],{"class":74},[68,145493,145494,145496,145498,145500,145502,145504,145506,145508],{"class":70,"line":2915},[68,145495,53729],{"class":85},[68,145497,82],{"class":81},[68,145499,866],{"class":587},[68,145501,869],{"class":85},[68,145503,145335],{"class":872},[68,145505,145289],{"class":85},[68,145507,82],{"class":81},[68,145509,876],{"class":85},[68,145511,145512],{"class":70,"line":2921},[68,145513,145346],{"class":74},[68,145515,145516,145518,145520,145522,145524,145526,145528,145530],{"class":70,"line":2933},[68,145517,53729],{"class":85},[68,145519,82],{"class":81},[68,145521,866],{"class":587},[68,145523,869],{"class":85},[68,145525,145359],{"class":872},[68,145527,145289],{"class":85},[68,145529,82],{"class":81},[68,145531,876],{"class":85},[68,145533,145534,145536,145538],{"class":70,"line":3214},[68,145535,886],{"class":85},[68,145537,82],{"class":81},[68,145539,876],{"class":85},[19,145541,72035],{},[58,145543,145544],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,145545,145546,145550,145564,145568],{"__ignoreMap":63},[68,145547,145548],{"class":70,"line":71},[68,145549,856],{"class":74},[68,145551,145552,145554,145556,145558,145560,145562],{"class":70,"line":78},[68,145553,861],{"class":85},[68,145555,82],{"class":81},[68,145557,866],{"class":587},[68,145559,869],{"class":85},[68,145561,873],{"class":872},[68,145563,876],{"class":85},[68,145565,145566],{"class":70,"line":89},[68,145567,881],{"class":85},[68,145569,145570,145572,145574],{"class":70,"line":115},[68,145571,886],{"class":85},[68,145573,82],{"class":81},[68,145575,876],{"class":85},[1652,145577,139273],{},{"title":63,"searchDepth":78,"depth":78,"links":145579},[145580,145581,145585,145586,145587],{"id":144724,"depth":78,"text":144725},{"id":144756,"depth":78,"text":144757,"children":145582},[145583,145584],{"id":144760,"depth":89,"text":144761},{"id":144777,"depth":89,"text":144778},{"id":144796,"depth":78,"text":144797},{"id":144803,"depth":78,"text":144804},{"id":144890,"depth":78,"text":144891,"children":145588},[145589,145590,145591,145592,145593],{"id":144897,"depth":89,"text":144898},{"id":145025,"depth":89,"text":145026},{"id":145119,"depth":89,"text":145120},{"id":145168,"depth":89,"text":145169},{"id":145178,"depth":89,"text":145179},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144716,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145600,"title":145601,"body":145602,"description":1676,"extension":1677,"meta":146829,"navigation":1679,"path":146830,"seo":146831,"stem":146832,"__hash__":146833},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145603,"toc":146807},[145604,145607,145611,145615,145618,145621,145625,145630,145633,145636,145639,145642,145645,145702,145705,145710,145713,145716,145720,145731,145735,145738,145741,145748,145753,145757,145760,145766,145769,145773,145776,145783,145786,145789,145796,145799,145806,145809,145812,145819,145822,145825,145827,145844,145848,145851,145854,145857,145861,145864,145867,145870,145873,145876,145879,145881,145884,145887,145949,145952,146062,146069,146075,146078,146081,146085,146088,146092,146097,146100,146107,146110,146116,146121,146124,146127,146130,146133,146136,146139,146142,146145,146201,146203,146229,146233,146236,146239,146242,146250,146253,146256,146260,146316,146319,146323,146329,146340,146343,146348,146351,146354,146360,146363,146366,146369,146372,146375,146378,146381,146384,146409,146415,146418,146421,146424,146427,146430,146433,146438,146441,146444,146447,146455,146458,146465,146468,146471,146473,146497,146499,146502,146505,146508,146511,146514,146517,146520,146554,146557,146560,146594,146601,146604,146607,146610,146613,146616,146619,146626,146629,146632,146635,146638,146645,146648,146651,146658,146661,146664,146668,146671,146674,146677,146680,146683,146686,146689,146692,146694,146718,146720,146744,146748,146759,146762,146765,146768,146771,146774,146777,146780,146783,146786,146789,146792,146795,146798,146801,146804],[10,145605,145601],{"id":145606},"_21-移动端布局实战下篇",[14,145608,145610],{"id":145609},"_211-rem适配布局","21.1 rem适配布局",[43,145612,145614],{"id":145613},"_2111-rem单位","21.1.1 rem单位",[38,145616],{"style":40,"src":145617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145619,145620],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[43,145622,145624],{"id":145623},"_2112-媒体查询","21.1.2 媒体查询",[48,145626,145627],{},[51,145628,145629],{},"参数介绍",[38,145631],{"style":40,"src":145632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[38,145634],{"style":40,"src":145635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[38,145637],{"style":40,"src":145638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[38,145640],{"style":40,"src":145641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[38,145643],{"style":40,"src":145644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[58,145646,145648],{"className":60,"code":145647,"language":62,"meta":63,"style":63},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[65,145649,145650,145655,145674,145681,145694,145698],{"__ignoreMap":63},[68,145651,145652],{"class":70,"line":71},[68,145653,145654],{"class":74},"\u002F* 媒体查询 *\u002F\n",[68,145656,145657,145660,145662,145665,145667,145670,145672],{"class":70,"line":78},[68,145658,145659],{"class":102},"@media",[68,145661,3260],{"class":85},[68,145663,145664],{"class":92},"max-width",[68,145666,96],{"class":85},[68,145668,145669],{"class":92},"768",[68,145671,103],{"class":102},[68,145673,14039],{"class":85},[68,145675,145676,145679],{"class":70,"line":89},[68,145677,145678],{"class":587},"  .container",[68,145680,86],{"class":85},[68,145682,145683,145686,145688,145690,145692],{"class":70,"line":115},[68,145684,145685],{"class":92},"    width",[68,145687,96],{"class":85},[68,145689,2047],{"class":92},[68,145691,2064],{"class":102},[68,145693,112],{"class":85},[68,145695,145696],{"class":70,"line":280},[68,145697,128915],{"class":85},[68,145699,145700],{"class":70,"line":301},[68,145701,118],{"class":85},[19,145703,145704],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[48,145706,145707],{"start":78},[51,145708,145709],{},"引入资源",[38,145711],{"style":40,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145714,145715],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[43,145717,145719],{"id":145718},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[168,145721,145722,145725,145728],{},[51,145723,145724],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[51,145726,145727],{},"媒体查询可以根据不同设备宽度来修改样式",[51,145729,145730],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145732,145734],{"id":145733},"_212-less基础","21.2 Less基础",[19,145736,145737],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145739,145740],{},"Less可以解决该问题，它是css的扩展语言",[19,145742,145743,145744],{},"Less中文网址： ",[1974,145745,145746],{"href":145746,"rel":145747},"http:\u002F\u002Flesscss.cn\u002F",[25459],[19,145749,145750],{},[1890,145751,145752],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[43,145754,145756],{"id":145755},"_2121-less安装","21.2.1 less安装",[19,145758,145759],{},"如果使用vscode，则无需进行下方安装步骤",[19,145761,145762],{},[1974,145763,145764],{"href":145764,"rel":145765},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25459],[38,145767],{"style":40,"src":145768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[43,145770,145772],{"id":145771},"_2122-less使用","21.2.2 less使用",[19,145774,145775],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[48,145777,145778],{},[51,145779,145780],{},[1890,145781,145782],{},"Less 变量",[38,145784],{"style":40,"src":145785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[38,145787],{"style":40,"src":145788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[48,145790,145791],{"start":78},[51,145792,145793],{},[1890,145794,145795],{},"Less 编译",[38,145797],{"style":40,"src":145798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[48,145800,145801],{"start":89},[51,145802,145803],{},[1890,145804,145805],{},"Less 嵌套",[38,145807],{"style":40,"src":145808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[38,145810],{"style":40,"src":145811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[48,145813,145814],{"start":115},[51,145815,145816],{},[1890,145817,145818],{},"Less 运算",[38,145820],{"style":40,"src":145821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145823,145824],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145826,1780],{},[168,145828,145829,145832,145835,145838,145841],{},[51,145830,145831],{},"乘号（*）和除号（\u002F）的写法",[51,145833,145834],{},"运算符中间左右有个空格隔开 1px + 5",[51,145836,145837],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[51,145839,145840],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[51,145842,145843],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145845,145847],{"id":145846},"_213-rem-适配方案","21.3 rem 适配方案",[19,145849,145850],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145852,145853],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[38,145855],{"style":40,"src":145856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[43,145858,145860],{"id":145859},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145862,145863],{},"rem + 媒体查询 + less 技术",[38,145865],{"style":40,"src":145866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145868,145869],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145871,145872],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[38,145874],{"style":40,"src":145875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145877,145878],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145880,16230],{},[38,145882],{"style":40,"src":145883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145885,145886],{},"index.html:",[58,145888,145890],{"className":60,"code":145889,"language":62,"meta":63,"style":63},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[65,145891,145892,145897,145903,145919,145923,145929,145945],{"__ignoreMap":63},[68,145893,145894],{"class":70,"line":71},[68,145895,145896],{"class":74},"\u002F* rem 适配方案 *\u002F\n",[68,145898,145899,145901],{"class":70,"line":78},[68,145900,52228],{"class":81},[68,145902,86],{"class":85},[68,145904,145905,145907,145909,145912,145914,145916],{"class":70,"line":89},[68,145906,72206],{"class":92},[68,145908,96],{"class":85},[68,145910,145911],{"class":92},"62.5",[68,145913,2064],{"class":102},[68,145915,606],{"class":85},[68,145917,145918],{"class":74},"\u002F* 1rem = 10px *\u002F\n",[68,145920,145921],{"class":70,"line":115},[68,145922,118],{"class":85},[68,145924,145925,145927],{"class":70,"line":280},[68,145926,588],{"class":587},[68,145928,86],{"class":85},[68,145930,145931,145933,145935,145937,145940,145942],{"class":70,"line":301},[68,145932,72149],{"class":92},[68,145934,96],{"class":85},[68,145936,2182],{"class":92},[68,145938,145939],{"class":102},"rem",[68,145941,606],{"class":85},[68,145943,145944],{"class":74},"\u002F* 100px *\u002F\n",[68,145946,145947],{"class":70,"line":320},[68,145948,118],{"class":85},[19,145950,145951],{},"common.less",[58,145953,145955],{"className":60,"code":145954,"language":62,"meta":63,"style":63},"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",[65,145956,145957,145963,145978,145982,145988,146002,146006,146010,146014,146020,146034,146038,146044,146058],{"__ignoreMap":63},[68,145958,145959,145961],{"class":70,"line":71},[68,145960,52228],{"class":81},[68,145962,86],{"class":85},[68,145964,145965,145967,145969,145971,145973,145975],{"class":70,"line":78},[68,145966,72206],{"class":92},[68,145968,96],{"class":85},[68,145970,145911],{"class":92},[68,145972,2064],{"class":102},[68,145974,27661],{"class":85},[68,145976,145977],{"class":74},"\u002F* 10px *\u002F\n",[68,145979,145980],{"class":70,"line":89},[68,145981,118],{"class":85},[68,145983,145984,145986],{"class":70,"line":115},[68,145985,82],{"class":81},[68,145987,86],{"class":85},[68,145989,145990,145992,145994,145996,145998,146000],{"class":70,"line":280},[68,145991,72149],{"class":92},[68,145993,96],{"class":85},[68,145995,2182],{"class":92},[68,145997,145939],{"class":102},[68,145999,27661],{"class":85},[68,146001,145944],{"class":74},[68,146003,146004],{"class":70,"line":301},[68,146005,118],{"class":85},[68,146007,146008],{"class":70,"line":320},[68,146009,137333],{"class":85},[68,146011,146012],{"class":70,"line":2915},[68,146013,145896],{"class":74},[68,146015,146016,146018],{"class":70,"line":2921},[68,146017,52228],{"class":81},[68,146019,86],{"class":85},[68,146021,146022,146024,146026,146028,146030,146032],{"class":70,"line":2933},[68,146023,72206],{"class":92},[68,146025,96],{"class":85},[68,146027,145911],{"class":92},[68,146029,2064],{"class":102},[68,146031,606],{"class":85},[68,146033,145918],{"class":74},[68,146035,146036],{"class":70,"line":3214},[68,146037,118],{"class":85},[68,146039,146040,146042],{"class":70,"line":3219},[68,146041,588],{"class":587},[68,146043,86],{"class":85},[68,146045,146046,146048,146050,146052,146054,146056],{"class":70,"line":3225},[68,146047,72149],{"class":92},[68,146049,96],{"class":85},[68,146051,2182],{"class":92},[68,146053,145939],{"class":102},[68,146055,606],{"class":85},[68,146057,145944],{"class":74},[68,146059,146060],{"class":70,"line":3230},[68,146061,118],{"class":85},[19,146063,146064,146065,146068],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25148,146066,146067],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[58,146070,146073],{"className":146071,"code":146072,"language":6786},[6784],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[65,146074,146072],{"__ignoreMap":63},[19,146076,146077],{},"less保存时会自动变成.css文件",[19,146079,146080],{},"好好搞懂上述代码写法",[43,146082,146084],{"id":146083},"_2132-样式导入样式","21.3.2 样式导入样式",[38,146086],{"style":40,"src":146087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[43,146089,146091],{"id":146090},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[48,146093,146094],{},[51,146095,146096],{},"准备工作",[38,146098],{"style":40,"src":146099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146101,146102,146103],{},"github地址：",[1974,146104,146105],{"href":146105,"rel":146106},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25459],[19,146108,146109],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146111,146112,146113],{},"js文件引入到index.html中使用的是",[65,146114,146115],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[48,146117,146118],{"start":78},[51,146119,146120],{},"vscode插件",[38,146122],{"style":40,"src":146123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146125,146126],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146128,146129],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[38,146131],{"style":40,"src":146132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146134,146135],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[38,146137],{"style":40,"src":146138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146140,146141],{},"修改成75就可以，alt+z为快捷键",[19,146143,146144],{},"index.css：",[58,146146,146147],{"className":60,"code":145889,"language":62,"meta":63,"style":63},[65,146148,146149,146153,146159,146173,146177,146183,146197],{"__ignoreMap":63},[68,146150,146151],{"class":70,"line":71},[68,146152,145896],{"class":74},[68,146154,146155,146157],{"class":70,"line":78},[68,146156,52228],{"class":81},[68,146158,86],{"class":85},[68,146160,146161,146163,146165,146167,146169,146171],{"class":70,"line":89},[68,146162,72206],{"class":92},[68,146164,96],{"class":85},[68,146166,145911],{"class":92},[68,146168,2064],{"class":102},[68,146170,606],{"class":85},[68,146172,145918],{"class":74},[68,146174,146175],{"class":70,"line":115},[68,146176,118],{"class":85},[68,146178,146179,146181],{"class":70,"line":280},[68,146180,588],{"class":587},[68,146182,86],{"class":85},[68,146184,146185,146187,146189,146191,146193,146195],{"class":70,"line":301},[68,146186,72149],{"class":92},[68,146188,96],{"class":85},[68,146190,2182],{"class":92},[68,146192,145939],{"class":102},[68,146194,606],{"class":85},[68,146196,145944],{"class":74},[68,146198,146199],{"class":70,"line":320},[68,146200,118],{"class":85},[19,146202,145886],{},[58,146204,146205],{"className":60,"code":128526,"language":62,"meta":63,"style":63},[65,146206,146207,146213,146225],{"__ignoreMap":63},[68,146208,146209,146211],{"class":70,"line":71},[68,146210,53385],{"class":81},[68,146212,86],{"class":85},[68,146214,146215,146217,146219,146221,146223],{"class":70,"line":78},[68,146216,72206],{"class":92},[68,146218,96],{"class":85},[68,146220,2337],{"class":92},[68,146222,103],{"class":102},[68,146224,112],{"class":85},[68,146226,146227],{"class":70,"line":89},[68,146228,118],{"class":85},[14,146230,146232],{"id":146231},"_214-响应式开发","21.4 响应式开发",[19,146234,146235],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[38,146237],{"style":40,"src":146238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146240,146241],{},"做法：",[168,146243,146244,146247],{},[51,146245,146246],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[51,146248,146249],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[38,146251],{"style":40,"src":146252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146254,146255],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[43,146257,146259],{"id":146258},"_2141-简单代码示范","21.4.1 简单代码示范",[58,146261,146262],{"className":60,"code":145889,"language":62,"meta":63,"style":63},[65,146263,146264,146268,146274,146288,146292,146298,146312],{"__ignoreMap":63},[68,146265,146266],{"class":70,"line":71},[68,146267,145896],{"class":74},[68,146269,146270,146272],{"class":70,"line":78},[68,146271,52228],{"class":81},[68,146273,86],{"class":85},[68,146275,146276,146278,146280,146282,146284,146286],{"class":70,"line":89},[68,146277,72206],{"class":92},[68,146279,96],{"class":85},[68,146281,145911],{"class":92},[68,146283,2064],{"class":102},[68,146285,606],{"class":85},[68,146287,145918],{"class":74},[68,146289,146290],{"class":70,"line":115},[68,146291,118],{"class":85},[68,146293,146294,146296],{"class":70,"line":280},[68,146295,588],{"class":587},[68,146297,86],{"class":85},[68,146299,146300,146302,146304,146306,146308,146310],{"class":70,"line":301},[68,146301,72149],{"class":92},[68,146303,96],{"class":85},[68,146305,2182],{"class":92},[68,146307,145939],{"class":102},[68,146309,606],{"class":85},[68,146311,145944],{"class":74},[68,146313,146314],{"class":70,"line":320},[68,146315,118],{"class":85},[19,146317,146318],{},"父盒子一般命名为container",[43,146320,146322],{"id":146321},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146324,146325,146326],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1890,146327,146328],{},"使得 Web 开发更加快捷",[168,146330,146331],{},[51,146332,146333,146334],{},"官网：",[1890,146335,146336],{},[1974,146337,146338],{"href":146338,"rel":146339},"http:\u002F\u002Fgetbootstrap.com\u002F",[25459],[19,146341,146342],{},"可以直接去官网拿现成的东西",[48,146344,146345],{},[51,146346,146347],{},"Bootstrap的使用",[19,146349,146350],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146352,146353],{},"Bootstrap 使用四步曲：",[19,146355,146356,146359],{},[1890,146357,146358],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[38,146361],{"style":40,"src":146362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146364,146365],{},"打开Bootstrap官网，然后下载",[38,146367],{"style":40,"src":146368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[38,146370],{"style":40,"src":146371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146373,146374],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146376,146377],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146379,146380],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[38,146382],{"style":40,"src":146383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[58,146385,146387],{"className":60,"code":146386,"language":62,"meta":63,"style":63},".center {\n  color: red;\n}\n",[65,146388,146389,146395,146405],{"__ignoreMap":63},[68,146390,146391,146393],{"class":70,"line":71},[68,146392,128413],{"class":587},[68,146394,86],{"class":85},[68,146396,146397,146399,146401,146403],{"class":70,"line":78},[68,146398,72484],{"class":92},[68,146400,96],{"class":85},[68,146402,59005],{"class":92},[68,146404,112],{"class":85},[68,146406,146407],{"class":70,"line":89},[68,146408,118],{"class":85},[19,146410,146411,146414],{},[65,146412,146413],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[38,146416],{"style":40,"src":146417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[38,146419],{"style":40,"src":146420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[38,146422],{"style":40,"src":146423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146425,146426],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[38,146428],{"style":40,"src":146429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146431,146432],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[48,146434,146435],{"start":78},[51,146436,146437],{},"布局容器",[38,146439],{"style":40,"src":146440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146442,146443],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146445,146446],{},"container-fluid用于移动式布局比较方便",[48,146448,146449],{"start":89},[51,146450,146451,146452],{},"bootstrap ",[1890,146453,146454],{},"栅格系统原理",[38,146456],{"style":40,"src":146457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[48,146459,146460],{"start":115},[51,146461,146462],{},[1890,146463,146464],{},"栅格选项参数",[38,146466],{"style":40,"src":146467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146469,146470],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146472,16230],{},[58,146474,146475],{"className":60,"code":146386,"language":62,"meta":63,"style":63},[65,146476,146477,146483,146493],{"__ignoreMap":63},[68,146478,146479,146481],{"class":70,"line":71},[68,146480,128413],{"class":587},[68,146482,86],{"class":85},[68,146484,146485,146487,146489,146491],{"class":70,"line":78},[68,146486,72484],{"class":92},[68,146488,96],{"class":85},[68,146490,59005],{"class":92},[68,146492,112],{"class":85},[68,146494,146495],{"class":70,"line":89},[68,146496,118],{"class":85},[19,146498,136915],{},[38,146500],{"style":40,"src":146501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146503,146504],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146506,146507],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146509,146510],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146512,146513],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146515,146516],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146518,146519],{},"汇总展示说明：",[58,146521,146522],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,146523,146524,146528,146542,146546],{"__ignoreMap":63},[68,146525,146526],{"class":70,"line":71},[68,146527,856],{"class":74},[68,146529,146530,146532,146534,146536,146538,146540],{"class":70,"line":78},[68,146531,861],{"class":85},[68,146533,82],{"class":81},[68,146535,866],{"class":587},[68,146537,869],{"class":85},[68,146539,873],{"class":872},[68,146541,876],{"class":85},[68,146543,146544],{"class":70,"line":89},[68,146545,881],{"class":85},[68,146547,146548,146550,146552],{"class":70,"line":115},[68,146549,886],{"class":85},[68,146551,82],{"class":81},[68,146553,876],{"class":85},[38,146555],{"style":40,"src":146556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146558,146559],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[58,146561,146562],{"className":847,"code":848,"language":849,"meta":63,"style":63},[65,146563,146564,146568,146582,146586],{"__ignoreMap":63},[68,146565,146566],{"class":70,"line":71},[68,146567,856],{"class":74},[68,146569,146570,146572,146574,146576,146578,146580],{"class":70,"line":78},[68,146571,861],{"class":85},[68,146573,82],{"class":81},[68,146575,866],{"class":587},[68,146577,869],{"class":85},[68,146579,873],{"class":872},[68,146581,876],{"class":85},[68,146583,146584],{"class":70,"line":89},[68,146585,881],{"class":85},[68,146587,146588,146590,146592],{"class":70,"line":115},[68,146589,886],{"class":85},[68,146591,82],{"class":81},[68,146593,876],{"class":85},[48,146595,146596],{"start":280},[51,146597,146598],{},[1890,146599,146600],{},"列嵌套",[38,146602],{"style":40,"src":146603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146605,146606],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146608,146609],{},"没加row内部这样：",[38,146611],{"style":40,"src":146612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146614,146615],{},"加上row之后内部为：",[38,146617],{"style":40,"src":146618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[48,146620,146621],{"start":301},[51,146622,146623],{},[1890,146624,146625],{},"列偏移",[38,146627],{"style":40,"src":146628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146630,146631],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146633,146634],{},"要加偏移量，即偏移份数",[19,146636,146637],{},"偏移的份数=12-两个盒子的份数",[48,146639,146640],{"start":320},[51,146641,146642],{},[1890,146643,146644],{},"列排序",[38,146646],{"style":40,"src":146647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146649,146650],{},"pull拉左；push推右",[48,146652,146653],{"start":2915},[51,146654,146655],{},[1890,146656,146657],{},"响应式工具",[38,146659],{"style":40,"src":146660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146662,146663],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[43,146665,146667],{"id":146666},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146669,146670],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146672,146673],{},"ul {",[19,146675,146676],{},"list-style: none;",[19,146678,146679],{},"margin:0;",[19,146681,146682],{},"padding:0; }",[38,146684],{"style":40,"src":146685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[38,146687],{"style":40,"src":146688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146690,146691],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146693,70471],{},[58,146695,146696],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,146697,146698,146704,146714],{"__ignoreMap":63},[68,146699,146700,146702],{"class":70,"line":71},[68,146701,588],{"class":587},[68,146703,86],{"class":85},[68,146705,146706,146708,146710,146712],{"class":70,"line":78},[68,146707,1243],{"class":92},[68,146709,96],{"class":85},[68,146711,131],{"class":92},[68,146713,112],{"class":85},[68,146715,146716],{"class":70,"line":89},[68,146717,118],{"class":85},[19,146719,72035],{},[58,146721,146722],{"className":60,"code":140542,"language":62,"meta":63,"style":63},[65,146723,146724,146730,146740],{"__ignoreMap":63},[68,146725,146726,146728],{"class":70,"line":71},[68,146727,588],{"class":587},[68,146729,86],{"class":85},[68,146731,146732,146734,146736,146738],{"class":70,"line":78},[68,146733,1243],{"class":92},[68,146735,96],{"class":85},[68,146737,131],{"class":92},[68,146739,112],{"class":85},[68,146741,146742],{"class":70,"line":89},[68,146743,118],{"class":85},[14,146745,146747],{"id":146746},"_215-swiper-插件使用","21.5 swiper 插件使用",[168,146749,146750,146753,146756],{},[51,146751,146752],{},"下载需要的css和js文件html页面中 引入相关文件",[51,146754,146755],{},"官网找到类似案例，复制html结构，css样式 js 语法",[51,146757,146758],{},"根据需求定制修改模块",[38,146760],{"style":40,"src":146761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146763,146764],{},"解压后将这两部分放到项目中",[38,146766],{"style":40,"src":146767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146769,146770],{},"这个插件可以帮助我们实现轮播图效果",[19,146772,146773],{},"用法：",[38,146775],{"style":40,"src":146776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146778,146779],{},"找到自己喜欢的",[38,146781],{"style":40,"src":146782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146784,146785],{},"右键，查看网页源代码",[38,146787],{"style":40,"src":146788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146790,146791],{},"复制人家的结构内容",[19,146793,146794],{},"然后去看API文档：",[38,146796],{"style":40,"src":146797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146799,146800],{},"可以看看如何修改样式",[19,146802,146803],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1652,146805,146806],{},"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":63,"searchDepth":78,"depth":78,"links":146808},[146809,146814,146818,146823,146828],{"id":145609,"depth":78,"text":145610,"children":146810},[146811,146812,146813],{"id":145613,"depth":89,"text":145614},{"id":145623,"depth":89,"text":145624},{"id":145718,"depth":89,"text":145719},{"id":145733,"depth":78,"text":145734,"children":146815},[146816,146817],{"id":145755,"depth":89,"text":145756},{"id":145771,"depth":89,"text":145772},{"id":145846,"depth":78,"text":145847,"children":146819},[146820,146821,146822],{"id":145859,"depth":89,"text":145860},{"id":146083,"depth":89,"text":146084},{"id":146090,"depth":89,"text":146091},{"id":146231,"depth":78,"text":146232,"children":146824},[146825,146826,146827],{"id":146258,"depth":89,"text":146259},{"id":146321,"depth":89,"text":146322},{"id":146666,"depth":89,"text":146667},{"id":146746,"depth":78,"text":146747},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145601,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146835,"title":146836,"body":146837,"description":1676,"extension":1677,"meta":147057,"navigation":1679,"path":147058,"seo":147059,"stem":147060,"__hash__":147061},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146838,"toc":147053},[146839,146842,146846,146849,146864,146869,146872,146877,146912,146917,146929,146934,146947,146952,146969,146974,146994,146999,147017,147020,147023,147026,147029,147033,147036,147039,147042,147045,147048,147051],[10,146840,146836],{"id":146841},"_22-代码提交与新型相对单位",[14,146843,146845],{"id":146844},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146847,146848],{},"法1：",[48,146850,146851,146858,146861],{},[51,146852,146853,146854],{},"登录网站注册：",[1974,146855,146856],{"href":146856,"rel":146857},"https:\u002F\u002Fgitee.com\u002F",[25459],[51,146859,146860],{},"码云创建新的仓库",[51,146862,146863],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[168,146865,146866],{},[51,146867,146868],{},"在网站根目录右键-- Git Bash Here",[38,146870],{"style":40,"src":146871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[168,146873,146874],{},[51,146875,146876],{},"如果是第一次利用git提交，请配置好全局选项",[58,146878,146880],{"className":118869,"code":146879,"language":118871,"meta":63,"style":63},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[65,146881,146882,146898],{"__ignoreMap":63},[68,146883,146884,146887,146889,146892,146895],{"class":70,"line":71},[68,146885,146886],{"class":587},"git",[68,146888,121292],{"class":872},[68,146890,146891],{"class":92}," --global",[68,146893,146894],{"class":872}," user.name",[68,146896,146897],{"class":872}," \"你的名字\"\n",[68,146899,146900,146902,146904,146906,146909],{"class":70,"line":78},[68,146901,146886],{"class":587},[68,146903,121292],{"class":872},[68,146905,146891],{"class":92},[68,146907,146908],{"class":872}," user.email",[68,146910,146911],{"class":872}," \"你的邮箱\"\n",[168,146913,146914],{},[51,146915,146916],{},"初始化仓库",[58,146918,146920],{"className":118869,"code":146919,"language":118871,"meta":63,"style":63},"git init\n",[65,146921,146922],{"__ignoreMap":63},[68,146923,146924,146926],{"class":70,"line":71},[68,146925,146886],{"class":587},[68,146927,146928],{"class":872}," init\n",[168,146930,146931],{},[51,146932,146933],{},"把本地文件放到暂存区",[58,146935,146937],{"className":118869,"code":146936,"language":118871,"meta":63,"style":63},"git add .\n",[65,146938,146939],{"__ignoreMap":63},[68,146940,146941,146943,146945],{"class":70,"line":71},[68,146942,146886],{"class":587},[68,146944,6808],{"class":872},[68,146946,30334],{"class":872},[168,146948,146949],{},[51,146950,146951],{},"把本地文件放到本地仓库里面",[58,146953,146955],{"className":118869,"code":146954,"language":118871,"meta":63,"style":63},"git commit -m \"first commit\"\n",[65,146956,146957],{"__ignoreMap":63},[68,146958,146959,146961,146964,146966],{"class":70,"line":71},[68,146960,146886],{"class":587},[68,146962,146963],{"class":872}," commit",[68,146965,102456],{"class":92},[68,146967,146968],{"class":872}," \"first commit\"\n",[168,146970,146971],{},[51,146972,146973],{},"链接远程仓库",[58,146975,146977],{"className":118869,"code":146976,"language":118871,"meta":63,"style":63},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[65,146978,146979],{"__ignoreMap":63},[68,146980,146981,146983,146986,146988,146991],{"class":70,"line":71},[68,146982,146886],{"class":587},[68,146984,146985],{"class":872}," remote",[68,146987,6808],{"class":872},[68,146989,146990],{"class":872}," origin",[68,146992,146993],{"class":872}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[168,146995,146996],{},[51,146997,146998],{},"把本地仓库的文件推送到远程仓库 push",[58,147000,147002],{"className":118869,"code":147001,"language":118871,"meta":63,"style":63},"git push -u origin master\n",[65,147003,147004],{"__ignoreMap":63},[68,147005,147006,147008,147010,147012,147014],{"class":70,"line":71},[68,147007,146886],{"class":587},[68,147009,30609],{"class":872},[68,147011,29883],{"class":92},[68,147013,146990],{"class":872},[68,147015,147016],{"class":872}," master\n",[38,147018],{"style":40,"src":147019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147021,147022],{},"上方方法暂未实现，后边学完git后在整",[19,147024,147025],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[38,147027],{"style":40,"src":147028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147030,147032],{"id":147031},"_222-新型相对单位","22.2 新型相对单位",[38,147034],{"style":40,"src":147035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[38,147037],{"style":40,"src":147038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147040,147041],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147043,147044],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[38,147046],{"style":40,"src":147047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147049,147050],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1652,147052,25552],{},{"title":63,"searchDepth":78,"depth":78,"links":147054},[147055,147056],{"id":146844,"depth":78,"text":146845},{"id":147031,"depth":78,"text":147032},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146836,"description":1676},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147063,"title":147064,"body":147065,"description":147069,"extension":1677,"meta":147070,"navigation":1679,"path":147071,"seo":147072,"stem":147073,"__hash__":147074},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147066,"toc":147067},[],{"title":63,"searchDepth":78,"depth":78,"links":147068},[],"自己正经开始学编程的第一门语言！",{"category":94415},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147064,"description":147069},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147076,"title":147077,"body":147078,"description":1676,"extension":1677,"meta":148225,"navigation":1679,"path":148226,"seo":148227,"stem":148228,"__hash__":148229},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147079,"toc":148201},[147080,147083,147087,147090,147093,147118,147121,147127,147131,147134,147161,147164,147204,147207,147219,147222,147228,147232,147236,147263,147280,147287,147291,147294,147320,147323,147327,147330,147370,147373,147390,147396,147400,147405,147449,147452,147470,147473,147541,147545,147552,147555,147570,147573,147582,147585,147596,147599,147608,147611,147628,147631,147646,147650,147654,147657,147659,147679,147683,147686,147689,147700,147703,147709,147713,147719,147746,147749,147761,147764,147775,147778,147784,147788,147794,147844,147847,147889,147892,147925,147928,147962,147966,147969,147989,147992,148028,148031,148044,148048,148052,148058,148061,148074,148078,148081,148087,148090,148094,148097,148100,148149,148153,148169,148175,148182,148188,148198],[10,147081,147077],{"id":147082},"_1-python环境与第一个程序",[14,147084,147086],{"id":147085},"_11-什么是python","1.1 什么是Python",[19,147088,147089],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147091,147092],{},"理解 Python 时抓住三个关键词：",[48,147094,147095,147098,147101],{},[51,147096,147097],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[51,147099,147100],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[51,147102,147103,147104,1949,147107,1949,147110,1949,147113,1949,147115,29978],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[65,147105,147106],{},"os",[65,147108,147109],{},"sys",[65,147111,147112],{},"json",[65,147114,59444],{},[65,147116,147117],{},"datetime",[19,147119,147120],{},"Python 程序的运行链路：",[58,147122,147125],{"className":147123,"code":147124,"language":6786,"meta":63},[6784],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[65,147126,147124],{"__ignoreMap":63},[14,147128,147130],{"id":147129},"_12-python解释器","1.2 Python解释器",[19,147132,147133],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[58,147135,147137],{"className":25416,"code":147136,"language":25418,"meta":63,"style":63},"python --version\npython3 --version\npython\npython3\n",[65,147138,147139,147145,147151,147156],{"__ignoreMap":63},[68,147140,147141,147143],{"class":70,"line":71},[68,147142,31973],{"class":587},[68,147144,27887],{"class":92},[68,147146,147147,147149],{"class":70,"line":78},[68,147148,102453],{"class":587},[68,147150,27887],{"class":92},[68,147152,147153],{"class":70,"line":89},[68,147154,147155],{"class":587},"python\n",[68,147157,147158],{"class":70,"line":115},[68,147159,147160],{"class":587},"python3\n",[19,147162,147163],{},"进入交互模式后，可以直接输入表达式：",[58,147165,147167],{"className":31971,"code":147166,"language":31973,"meta":63,"style":63},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[65,147168,147169,147180,147185,147199],{"__ignoreMap":63},[68,147170,147171,147174,147176,147178],{"class":70,"line":71},[68,147172,147173],{"class":102},">>>",[68,147175,1112],{"class":92},[68,147177,47159],{"class":102},[68,147179,49316],{"class":92},[68,147181,147182],{"class":70,"line":78},[68,147183,147184],{"class":92},"3\n",[68,147186,147187,147189,147192,147194,147197],{"class":70,"line":89},[68,147188,147173],{"class":102},[68,147190,147191],{"class":92}," print",[68,147193,997],{"class":85},[68,147195,147196],{"class":872},"\"hello python\"",[68,147198,1757],{"class":85},[68,147200,147201],{"class":70,"line":115},[68,147202,147203],{"class":85},"hello python\n",[19,147205,147206],{},"退出交互模式：",[58,147208,147210],{"className":31971,"code":147209,"language":31973,"meta":63,"style":63},"exit()\n",[65,147211,147212],{"__ignoreMap":63},[68,147213,147214,147217],{"class":70,"line":71},[68,147215,147216],{"class":92},"exit",[68,147218,3577],{"class":85},[19,147220,147221],{},"或使用快捷键：",[58,147223,147226],{"className":147224,"code":147225,"language":6786,"meta":63},[6784],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[65,147227,147225],{"__ignoreMap":63},[14,147229,147231],{"id":147230},"_13-安装python","1.3 安装Python",[43,147233,147235],{"id":147234},"_131-windows安装","1.3.1 Windows安装",[48,147237,147238,147245,147248,147254,147260],{},[51,147239,147240,147241],{},"打开 Python 官网：",[1974,147242,147243],{"href":147243,"rel":147244},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25459],[51,147246,147247],{},"下载 Windows Installer。",[51,147249,147250,147251,29978],{},"安装时勾选 ",[65,147252,147253],{},"Add Python to PATH",[51,147255,147256,147257,29978],{},"点击 ",[65,147258,147259],{},"Install Now",[51,147261,147262],{},"安装完成后打开命令提示符验证：",[58,147264,147266],{"className":25416,"code":147265,"language":25418,"meta":63,"style":63},"python --version\npip --version\n",[65,147267,147268,147274],{"__ignoreMap":63},[68,147269,147270,147272],{"class":70,"line":71},[68,147271,31973],{"class":587},[68,147273,27887],{"class":92},[68,147275,147276,147278],{"class":70,"line":78},[68,147277,25425],{"class":587},[68,147279,27887],{"class":92},[19,147281,147282,147283,147286],{},"如果提示 ",[65,147284,147285],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[43,147288,147290],{"id":147289},"_132-macos安装","1.3.2 macOS安装",[19,147292,147293],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[58,147295,147297],{"className":25416,"code":147296,"language":25418,"meta":63,"style":63},"brew install python\npython3 --version\npip3 --version\n",[65,147298,147299,147308,147314],{"__ignoreMap":63},[68,147300,147301,147304,147306],{"class":70,"line":71},[68,147302,147303],{"class":587},"brew",[68,147305,25428],{"class":872},[68,147307,125891],{"class":872},[68,147309,147310,147312],{"class":70,"line":78},[68,147311,102453],{"class":587},[68,147313,27887],{"class":92},[68,147315,147316,147318],{"class":70,"line":89},[68,147317,121273],{"class":587},[68,147319,27887],{"class":92},[19,147321,147322],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[43,147324,147326],{"id":147325},"_133-linux安装","1.3.3 Linux安装",[19,147328,147329],{},"Ubuntu\u002FDebian：",[58,147331,147333],{"className":25416,"code":147332,"language":25418,"meta":63,"style":63},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[65,147334,147335,147343,147358,147364],{"__ignoreMap":63},[68,147336,147337,147339,147341],{"class":70,"line":71},[68,147338,26171],{"class":587},[68,147340,118890],{"class":872},[68,147342,27836],{"class":872},[68,147344,147345,147347,147349,147351,147353,147355],{"class":70,"line":78},[68,147346,26171],{"class":587},[68,147348,118890],{"class":872},[68,147350,25428],{"class":872},[68,147352,105976],{"class":872},[68,147354,102372],{"class":872},[68,147356,147357],{"class":872}," python3-venv\n",[68,147359,147360,147362],{"class":70,"line":89},[68,147361,102453],{"class":587},[68,147363,27887],{"class":92},[68,147365,147366,147368],{"class":70,"line":115},[68,147367,121273],{"class":587},[68,147369,27887],{"class":92},[19,147371,147372],{},"Fedora：",[58,147374,147376],{"className":25416,"code":147375,"language":25418,"meta":63,"style":63},"sudo dnf install python3 python3-pip\n",[65,147377,147378],{"__ignoreMap":63},[68,147379,147380,147382,147384,147386,147388],{"class":70,"line":71},[68,147381,26171],{"class":587},[68,147383,27909],{"class":872},[68,147385,25428],{"class":872},[68,147387,105976],{"class":872},[68,147389,121338],{"class":872},[19,147391,147392,147393,147395],{},"Linux 上通常使用 ",[65,147394,102453],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147397,147399],{"id":147398},"_14-pip包管理器","1.4 pip包管理器",[19,147401,147402,147404],{},[65,147403,25425],{}," 用来安装第三方库。",[58,147406,147408],{"className":25416,"code":147407,"language":25418,"meta":63,"style":63},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[65,147409,147410,147419,147428,147436,147442],{"__ignoreMap":63},[68,147411,147412,147414,147416],{"class":70,"line":71},[68,147413,25425],{"class":587},[68,147415,25428],{"class":872},[68,147417,147418],{"class":872}," requests\n",[68,147420,147421,147423,147426],{"class":70,"line":78},[68,147422,25425],{"class":587},[68,147424,147425],{"class":872}," uninstall",[68,147427,147418],{"class":872},[68,147429,147430,147432,147434],{"class":70,"line":89},[68,147431,25425],{"class":587},[68,147433,119147],{"class":872},[68,147435,147418],{"class":872},[68,147437,147438,147440],{"class":70,"line":115},[68,147439,25425],{"class":587},[68,147441,120528],{"class":872},[68,147443,147444,147446],{"class":70,"line":280},[68,147445,25425],{"class":587},[68,147447,147448],{"class":872}," freeze\n",[19,147450,147451],{},"国内网络较慢时可以临时使用镜像：",[58,147453,147455],{"className":25416,"code":147454,"language":25418,"meta":63,"style":63},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[65,147456,147457],{"__ignoreMap":63},[68,147458,147459,147461,147463,147466,147468],{"class":70,"line":71},[68,147460,25425],{"class":587},[68,147462,25428],{"class":872},[68,147464,147465],{"class":872}," requests",[68,147467,28024],{"class":92},[68,147469,121301],{"class":872},[19,147471,147472],{},"常见第三方库：",[120,147474,147475,147484],{},[123,147476,147477],{},[126,147478,147479,147482],{},[129,147480,147481],{},"库",[129,147483,135],{},[137,147485,147486,147494,147501,147509,147517,147525,147533],{},[126,147487,147488,147491],{},[142,147489,147490],{},"requests",[142,147492,147493],{},"网络请求",[126,147495,147496,147498],{},[142,147497,102200],{},[142,147499,147500],{},"数值计算",[126,147502,147503,147506],{},[142,147504,147505],{},"pandas",[142,147507,147508],{},"表格数据处理",[126,147510,147511,147514],{},[142,147512,147513],{},"matplotlib",[142,147515,147516],{},"绘图",[126,147518,147519,147522],{},[142,147520,147521],{},"pyecharts",[142,147523,147524],{},"ECharts 图表",[126,147526,147527,147530],{},[142,147528,147529],{},"flask",[142,147531,147532],{},"Web 后端",[126,147534,147535,147538],{},[142,147536,147537],{},"pytest",[142,147539,147540],{},"自动化测试",[14,147542,147544],{"id":147543},"_15-虚拟环境","1.5 虚拟环境",[19,147546,147547,147548,147551],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[65,147549,147550],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147553,147554],{},"创建虚拟环境：",[58,147556,147558],{"className":25416,"code":147557,"language":25418,"meta":63,"style":63},"python -m venv .venv\n",[65,147559,147560],{"__ignoreMap":63},[68,147561,147562,147564,147566,147568],{"class":70,"line":71},[68,147563,31973],{"class":587},[68,147565,102456],{"class":92},[68,147567,102459],{"class":872},[68,147569,102462],{"class":872},[19,147571,147572],{},"Windows 激活：",[58,147574,147576],{"className":25416,"code":147575,"language":25418,"meta":63,"style":63},".venv\\Scripts\\activate\n",[65,147577,147578],{"__ignoreMap":63},[68,147579,147580],{"class":70,"line":71},[68,147581,147575],{"class":587},[19,147583,147584],{},"macOS\u002FLinux 激活：",[58,147586,147588],{"className":25416,"code":147587,"language":25418,"meta":63,"style":63},"source .venv\u002Fbin\u002Factivate\n",[65,147589,147590],{"__ignoreMap":63},[68,147591,147592,147594],{"class":70,"line":71},[68,147593,102467],{"class":92},[68,147595,102470],{"class":872},[19,147597,147598],{},"退出虚拟环境：",[58,147600,147602],{"className":25416,"code":147601,"language":25418,"meta":63,"style":63},"deactivate\n",[65,147603,147604],{"__ignoreMap":63},[68,147605,147606],{"class":70,"line":71},[68,147607,147601],{"class":587},[19,147609,147610],{},"保存依赖：",[58,147612,147614],{"className":25416,"code":147613,"language":25418,"meta":63,"style":63},"pip freeze > requirements.txt\n",[65,147615,147616],{"__ignoreMap":63},[68,147617,147618,147620,147623,147625],{"class":70,"line":71},[68,147619,25425],{"class":587},[68,147621,147622],{"class":872}," freeze",[68,147624,27816],{"class":102},[68,147626,147627],{"class":872}," requirements.txt\n",[19,147629,147630],{},"安装依赖：",[58,147632,147634],{"className":25416,"code":147633,"language":25418,"meta":63,"style":63},"pip install -r requirements.txt\n",[65,147635,147636],{"__ignoreMap":63},[68,147637,147638,147640,147642,147644],{"class":70,"line":71},[68,147639,25425],{"class":587},[68,147641,25428],{"class":872},[68,147643,121212],{"class":92},[68,147645,147627],{"class":872},[14,147647,147649],{"id":147648},"_16-开发工具","1.6 开发工具",[43,147651,147653],{"id":147652},"_161-pycharm","1.6.1 PyCharm",[19,147655,147656],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147658,123635],{},[48,147660,147661,147664,147667,147673,147676],{},[51,147662,147663],{},"New Project：创建项目。",[51,147665,147666],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[51,147668,147669,147670,127556],{},"New Python File：创建 ",[65,147671,147672],{},".py",[51,147674,147675],{},"Run：运行当前文件。",[51,147677,147678],{},"Debug：断点调试。",[43,147680,147682],{"id":147681},"_162-vs-code","1.6.2 VS Code",[19,147684,147685],{},"VS Code 轻量，适合后续多语言开发。",[19,147687,147688],{},"建议安装插件：",[48,147690,147691,147694,147697],{},[51,147692,147693],{},"Python。",[51,147695,147696],{},"Pylance。",[51,147698,147699],{},"Jupyter。",[19,147701,147702],{},"选择解释器：",[58,147704,147707],{"className":147705,"code":147706,"language":6786,"meta":63},[6784],"Ctrl + Shift + P -> Python: Select Interpreter\n",[65,147708,147706],{"__ignoreMap":63},[14,147710,147712],{"id":147711},"_17-第一个python程序","1.7 第一个Python程序",[19,147714,147715,147716,26213],{},"创建文件 ",[65,147717,147718],{},"hello.py",[58,147720,147722],{"className":31971,"code":147721,"language":31973,"meta":63,"style":63},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[65,147723,147724,147735],{"__ignoreMap":63},[68,147725,147726,147728,147730,147733],{"class":70,"line":71},[68,147727,32008],{"class":92},[68,147729,997],{"class":85},[68,147731,147732],{"class":872},"\"Hello World\"",[68,147734,1757],{"class":85},[68,147736,147737,147739,147741,147744],{"class":70,"line":78},[68,147738,32008],{"class":92},[68,147740,997],{"class":85},[68,147742,147743],{"class":872},"\"你好，Python\"",[68,147745,1757],{"class":85},[19,147747,147748],{},"在终端运行：",[58,147750,147752],{"className":25416,"code":147751,"language":25418,"meta":63,"style":63},"python hello.py\n",[65,147753,147754],{"__ignoreMap":63},[68,147755,147756,147758],{"class":70,"line":71},[68,147757,31973],{"class":587},[68,147759,147760],{"class":872}," hello.py\n",[19,147762,147763],{},"或：",[58,147765,147767],{"className":25416,"code":147766,"language":25418,"meta":63,"style":63},"python3 hello.py\n",[65,147768,147769],{"__ignoreMap":63},[68,147770,147771,147773],{"class":70,"line":71},[68,147772,102453],{"class":587},[68,147774,147760],{"class":872},[19,147776,147777],{},"输出：",[58,147779,147782],{"className":147780,"code":147781,"language":6786,"meta":63},[6784],"Hello World\n你好，Python\n",[65,147783,147781],{"__ignoreMap":63},[14,147785,147787],{"id":147786},"_18-print函数","1.8 print函数",[19,147789,147790,147793],{},[65,147791,147792],{},"print()"," 用来输出内容。",[58,147795,147797],{"className":31971,"code":147796,"language":31973,"meta":63,"style":63},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[65,147798,147799,147809,147819,147829],{"__ignoreMap":63},[68,147800,147801,147803,147805,147807],{"class":70,"line":71},[68,147802,32008],{"class":92},[68,147804,997],{"class":85},[68,147806,7443],{"class":872},[68,147808,1757],{"class":85},[68,147810,147811,147813,147815,147817],{"class":70,"line":78},[68,147812,32008],{"class":92},[68,147814,997],{"class":85},[68,147816,2047],{"class":92},[68,147818,1757],{"class":85},[68,147820,147821,147823,147825,147827],{"class":70,"line":89},[68,147822,32008],{"class":92},[68,147824,997],{"class":85},[68,147826,1798],{"class":92},[68,147828,1757],{"class":85},[68,147830,147831,147833,147835,147838,147840,147842],{"class":70,"line":115},[68,147832,32008],{"class":92},[68,147834,997],{"class":85},[68,147836,147837],{"class":872},"\"年龄:\"",[68,147839,1002],{"class":85},[68,147841,2386],{"class":92},[68,147843,1757],{"class":85},[19,147845,147846],{},"多个内容用逗号隔开，默认中间加空格：",[58,147848,147850],{"className":31971,"code":147849,"language":31973,"meta":63,"style":63},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[65,147851,147852,147862,147872],{"__ignoreMap":63},[68,147853,147854,147857,147859],{"class":70,"line":71},[68,147855,147856],{"class":85},"name ",[68,147858,869],{"class":102},[68,147860,147861],{"class":872}," \"张三\"\n",[68,147863,147864,147867,147869],{"class":70,"line":78},[68,147865,147866],{"class":85},"age ",[68,147868,869],{"class":102},[68,147870,147871],{"class":92}," 18\n",[68,147873,147874,147876,147878,147881,147884,147886],{"class":70,"line":89},[68,147875,32008],{"class":92},[68,147877,997],{"class":85},[68,147879,147880],{"class":872},"\"姓名:\"",[68,147882,147883],{"class":85},", name, ",[68,147885,147837],{"class":872},[68,147887,147888],{"class":85},", age)\n",[19,147890,147891],{},"修改分隔符：",[58,147893,147895],{"className":31971,"code":147894,"language":31973,"meta":63,"style":63},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[65,147896,147897],{"__ignoreMap":63},[68,147898,147899,147901,147903,147906,147908,147910,147912,147914,147916,147919,147921,147923],{"class":70,"line":71},[68,147900,32008],{"class":92},[68,147902,997],{"class":85},[68,147904,147905],{"class":872},"\"2024\"",[68,147907,1002],{"class":85},[68,147909,55900],{"class":872},[68,147911,1002],{"class":85},[68,147913,55900],{"class":872},[68,147915,1002],{"class":85},[68,147917,147918],{"class":6815},"sep",[68,147920,869],{"class":102},[68,147922,34076],{"class":872},[68,147924,1757],{"class":85},[19,147926,147927],{},"修改结尾符：",[58,147929,147931],{"className":31971,"code":147930,"language":31973,"meta":63,"style":63},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[65,147932,147933,147951],{"__ignoreMap":63},[68,147934,147935,147937,147939,147941,147943,147945,147947,147949],{"class":70,"line":71},[68,147936,32008],{"class":92},[68,147938,997],{"class":85},[68,147940,7443],{"class":872},[68,147942,1002],{"class":85},[68,147944,47394],{"class":6815},[68,147946,869],{"class":102},[68,147948,5958],{"class":872},[68,147950,1757],{"class":85},[68,147952,147953,147955,147957,147960],{"class":70,"line":78},[68,147954,32008],{"class":92},[68,147956,997],{"class":85},[68,147958,147959],{"class":872},"\"python\"",[68,147961,1757],{"class":85},[14,147963,147965],{"id":147964},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147967,147968],{},"交互运行适合临时验证：",[58,147970,147972],{"className":31971,"code":147971,"language":31973,"meta":63,"style":63},">>> 10 * 3\n30\n",[65,147973,147974,147984],{"__ignoreMap":63},[68,147975,147976,147978,147980,147982],{"class":70,"line":71},[68,147977,147173],{"class":102},[68,147979,989],{"class":92},[68,147981,8117],{"class":102},[68,147983,121609],{"class":92},[68,147985,147986],{"class":70,"line":78},[68,147987,147988],{"class":92},"30\n",[19,147990,147991],{},"脚本运行适合保存程序：",[58,147993,147995],{"className":31971,"code":147994,"language":31973,"meta":63,"style":63},"price = 8\ncount = 5\nprint(price * count)\n",[65,147996,147997,148007,148016],{"__ignoreMap":63},[68,147998,147999,148002,148004],{"class":70,"line":71},[68,148000,148001],{"class":85},"price ",[68,148003,869],{"class":102},[68,148005,148006],{"class":92}," 8\n",[68,148008,148009,148012,148014],{"class":70,"line":78},[68,148010,148011],{"class":85},"count ",[68,148013,869],{"class":102},[68,148015,56011],{"class":92},[68,148017,148018,148020,148023,148025],{"class":70,"line":89},[68,148019,32008],{"class":92},[68,148021,148022],{"class":85},"(price ",[68,148024,2191],{"class":102},[68,148026,148027],{"class":85}," count)\n",[19,148029,148030],{},"实际学习中推荐：",[48,148032,148033,148036,148041],{},[51,148034,148035],{},"临时试一个语法，用交互模式。",[51,148037,148038,148039,127556],{},"写完整练习，用 ",[65,148040,147672],{},[51,148042,148043],{},"写项目，用独立目录和虚拟环境。",[14,148045,148047],{"id":148046},"_110-常见错误","1.10 常见错误",[43,148049,148051],{"id":148050},"_1101-命令找不到","1.10.1 命令找不到",[58,148053,148056],{"className":148054,"code":148055,"language":6786,"meta":63},[6784],"python: command not found\n",[65,148057,148055],{"__ignoreMap":63},[19,148059,148060],{},"原因：",[48,148062,148063,148066,148069],{},[51,148064,148065],{},"没安装 Python。",[51,148067,148068],{},"PATH 没配置。",[51,148070,148071,148072,29978],{},"Linux\u002FmacOS 应该使用 ",[65,148073,102453],{},[43,148075,148077],{"id":148076},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148079,148080],{},"不要把文件命名为：",[58,148082,148085],{"className":148083,"code":148084,"language":6786,"meta":63},[6784],"random.py\njson.py\ntime.py\nrequests.py\n",[65,148086,148084],{"__ignoreMap":63},[19,148088,148089],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[43,148091,148093],{"id":148092},"_1103-中文乱码","1.10.3 中文乱码",[19,148095,148096],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148098,148099],{},"如果读写文件出现乱码，要明确指定编码：",[58,148101,148103],{"className":31971,"code":148102,"language":31973,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[65,148104,148105,148139],{"__ignoreMap":63},[68,148106,148107,148109,148112,148114,148117,148119,148122,148124,148127,148129,148132,148134,148136],{"class":70,"line":71},[68,148108,109406],{"class":102},[68,148110,148111],{"class":92}," open",[68,148113,997],{"class":85},[68,148115,148116],{"class":872},"\"data.txt\"",[68,148118,1002],{"class":85},[68,148120,148121],{"class":872},"\"r\"",[68,148123,1002],{"class":85},[68,148125,148126],{"class":6815},"encoding",[68,148128,869],{"class":102},[68,148130,148131],{"class":872},"\"utf-8\"",[68,148133,15311],{"class":85},[68,148135,32976],{"class":102},[68,148137,148138],{"class":85}," f:\n",[68,148140,148141,148144,148146],{"class":70,"line":78},[68,148142,148143],{"class":85},"    content ",[68,148145,869],{"class":102},[68,148147,148148],{"class":85}," f.read()\n",[14,148150,148152],{"id":148151},"_111-本章练习","1.11 本章练习",[48,148154,148155,148158,148164],{},[51,148156,148157],{},"安装 Python，并在终端输出版本号。",[51,148159,148160,148161,148163],{},"新建 ",[65,148162,147718],{},"，输出自己的姓名、年龄、学习目标。",[51,148165,105939,148166,148168],{},[65,148167,147792],{}," 输出下面格式：",[58,148170,148173],{"className":148171,"code":148172,"language":6786,"meta":63},[6784],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[65,148174,148172],{"__ignoreMap":63},[48,148176,148177],{"start":115},[51,148178,105939,148179,148181],{},[65,148180,147918],{}," 输出日期：",[58,148183,148186],{"className":148184,"code":148185,"language":6786,"meta":63},[6784],"2024-10-10\n",[65,148187,148185],{"__ignoreMap":63},[48,148189,148190],{"start":280},[51,148191,105939,148192,148194,148195,148197],{},[65,148193,47394],{}," 让两次 ",[65,148196,147792],{}," 输出在同一行。",[1652,148199,148200],{},"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":63,"searchDepth":78,"depth":78,"links":148202},[148203,148204,148205,148210,148211,148212,148216,148217,148218,148219,148224],{"id":147085,"depth":78,"text":147086},{"id":147129,"depth":78,"text":147130},{"id":147230,"depth":78,"text":147231,"children":148206},[148207,148208,148209],{"id":147234,"depth":89,"text":147235},{"id":147289,"depth":89,"text":147290},{"id":147325,"depth":89,"text":147326},{"id":147398,"depth":78,"text":147399},{"id":147543,"depth":78,"text":147544},{"id":147648,"depth":78,"text":147649,"children":148213},[148214,148215],{"id":147652,"depth":89,"text":147653},{"id":147681,"depth":89,"text":147682},{"id":147711,"depth":78,"text":147712},{"id":147786,"depth":78,"text":147787},{"id":147964,"depth":78,"text":147965},{"id":148046,"depth":78,"text":148047,"children":148220},[148221,148222,148223],{"id":148050,"depth":89,"text":148051},{"id":148076,"depth":89,"text":148077},{"id":148092,"depth":89,"text":148093},{"id":148151,"depth":78,"text":148152},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147077,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148231,"title":148232,"body":148233,"description":1676,"extension":1677,"meta":150637,"navigation":1679,"path":150638,"seo":150639,"stem":150640,"__hash__":150641},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148234,"toc":150622},[148235,148238,148242,148245,148248,148265,148268,148310,148313,148317,148320,148323,148360,148363,148397,148400,148492,148496,148510,148513,148540,148543,148547,148650,148657,148660,148677,148681,148688,148877,148880,148953,148957,148960,149044,149047,149079,149083,149287,149290,149294,149300,149402,149405,149661,149665,149668,149671,149685,149687,149873,149877,150239,150245,150249,150252,150376,150379,150558,150561,150565,150598,150602,150619],[10,148236,148232],{"id":148237},"_10-json与pyecharts折线图",[14,148239,148241],{"id":148240},"_101-数据可视化","10.1 数据可视化",[19,148243,148244],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148246,148247],{},"常见图表：",[48,148249,148250,148253,148256,148259,148262],{},[51,148251,148252],{},"折线图：看趋势。",[51,148254,148255],{},"柱状图：看分类对比。",[51,148257,148258],{},"饼图：看占比。",[51,148260,148261],{},"地图：看地域分布。",[51,148263,148264],{},"散点图：看两个变量之间的关系。",[19,148266,148267],{},"Python 可视化常用库：",[120,148269,148270,148278],{},[123,148271,148272],{},[126,148273,148274,148276],{},[129,148275,147481],{},[129,148277,25334],{},[137,148279,148280,148287,148295,148302],{},[126,148281,148282,148284],{},[142,148283,147513],{},[142,148285,148286],{},"基础、经典、可定制",[126,148288,148289,148292],{},[142,148290,148291],{},"seaborn",[142,148293,148294],{},"统计图表更美观",[126,148296,148297,148299],{},[142,148298,147521],{},[142,148300,148301],{},"生成交互式网页图表",[126,148303,148304,148307],{},[142,148305,148306],{},"plotly",[142,148308,148309],{},"交互图表能力强",[19,148311,148312],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148314,148316],{"id":148315},"_102-json回顾","10.2 JSON回顾",[19,148318,148319],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148321,148322],{},"Python 字典：",[58,148324,148326],{"className":31971,"code":148325,"language":31973,"meta":63,"style":63},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[65,148327,148328,148336,148347,148356],{"__ignoreMap":63},[68,148329,148330,148332,148334],{"class":70,"line":71},[68,148331,103232],{"class":85},[68,148333,869],{"class":102},[68,148335,86],{"class":85},[68,148337,148338,148341,148343,148345],{"class":70,"line":78},[68,148339,148340],{"class":872},"    \"name\"",[68,148342,96],{"class":85},[68,148344,70851],{"class":872},[68,148346,33059],{"class":85},[68,148348,148349,148352,148354],{"class":70,"line":89},[68,148350,148351],{"class":872},"    \"value\"",[68,148353,96],{"class":85},[68,148355,99033],{"class":92},[68,148357,148358],{"class":70,"line":115},[68,148359,118],{"class":85},[19,148361,148362],{},"JSON 字符串：",[58,148364,148367],{"className":148365,"code":148366,"language":147112,"meta":63,"style":63},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[65,148368,148369,148373,148384,148393],{"__ignoreMap":63},[68,148370,148371],{"class":70,"line":71},[68,148372,3149],{"class":85},[68,148374,148375,148378,148380,148382],{"class":70,"line":78},[68,148376,148377],{"class":92},"  \"name\"",[68,148379,96],{"class":85},[68,148381,70851],{"class":872},[68,148383,33059],{"class":85},[68,148385,148386,148389,148391],{"class":70,"line":89},[68,148387,148388],{"class":92},"  \"value\"",[68,148390,96],{"class":85},[68,148392,99033],{"class":92},[68,148394,148395],{"class":70,"line":115},[68,148396,118],{"class":85},[19,148398,148399],{},"Python 与 JSON 的转换：",[58,148401,148403],{"className":31971,"code":148402,"language":31973,"meta":63,"style":63},"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",[65,148404,148405,148412,148416,148441,148445,148464,148471,148475,148485],{"__ignoreMap":63},[68,148406,148407,148409],{"class":70,"line":71},[68,148408,31985],{"class":102},[68,148410,148411],{"class":85}," json\n",[68,148413,148414],{"class":70,"line":78},[68,148415,4000],{"emptyLinePlaceholder":1679},[68,148417,148418,148420,148422,148424,148426,148428,148430,148432,148435,148437,148439],{"class":70,"line":89},[68,148419,103232],{"class":85},[68,148421,869],{"class":102},[68,148423,6047],{"class":85},[68,148425,64262],{"class":872},[68,148427,96],{"class":85},[68,148429,70851],{"class":872},[68,148431,1002],{"class":85},[68,148433,148434],{"class":872},"\"value\"",[68,148436,96],{"class":85},[68,148438,2047],{"class":92},[68,148440,118],{"class":85},[68,148442,148443],{"class":70,"line":115},[68,148444,4000],{"emptyLinePlaceholder":1679},[68,148446,148447,148450,148452,148455,148458,148460,148462],{"class":70,"line":280},[68,148448,148449],{"class":85},"json_text ",[68,148451,869],{"class":102},[68,148453,148454],{"class":85}," json.dumps(data, ",[68,148456,148457],{"class":6815},"ensure_ascii",[68,148459,869],{"class":102},[68,148461,35580],{"class":92},[68,148463,1757],{"class":85},[68,148465,148466,148468],{"class":70,"line":301},[68,148467,32008],{"class":92},[68,148469,148470],{"class":85},"(json_text)\n",[68,148472,148473],{"class":70,"line":320},[68,148474,4000],{"emptyLinePlaceholder":1679},[68,148476,148477,148480,148482],{"class":70,"line":2915},[68,148478,148479],{"class":85},"new_data ",[68,148481,869],{"class":102},[68,148483,148484],{"class":85}," json.loads(json_text)\n",[68,148486,148487,148489],{"class":70,"line":2921},[68,148488,32008],{"class":92},[68,148490,148491],{"class":85},"(new_data)\n",[14,148493,148495],{"id":148494},"_103-安装pyecharts","10.3 安装pyecharts",[58,148497,148499],{"className":25416,"code":148498,"language":25418,"meta":63,"style":63},"pip install pyecharts\n",[65,148500,148501],{"__ignoreMap":63},[68,148502,148503,148505,148507],{"class":70,"line":71},[68,148504,25425],{"class":587},[68,148506,25428],{"class":872},[68,148508,148509],{"class":872}," pyecharts\n",[19,148511,148512],{},"验证：",[58,148514,148516],{"className":31971,"code":148515,"language":31973,"meta":63,"style":63},"import pyecharts\n\nprint(pyecharts.__version__)\n",[65,148517,148518,148524,148528],{"__ignoreMap":63},[68,148519,148520,148522],{"class":70,"line":71},[68,148521,31985],{"class":102},[68,148523,148509],{"class":85},[68,148525,148526],{"class":70,"line":78},[68,148527,4000],{"emptyLinePlaceholder":1679},[68,148529,148530,148532,148535,148538],{"class":70,"line":89},[68,148531,32008],{"class":92},[68,148533,148534],{"class":85},"(pyecharts.",[68,148536,148537],{"class":92},"__version__",[68,148539,1757],{"class":85},[19,148541,148542],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148544,148546],{"id":148545},"_104-第一个折线图","10.4 第一个折线图",[58,148548,148550],{"className":31971,"code":148549,"language":31973,"meta":63,"style":63},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[65,148551,148552,148564,148568,148578,148608,148640],{"__ignoreMap":63},[68,148553,148554,148556,148559,148561],{"class":70,"line":71},[68,148555,32330],{"class":102},[68,148557,148558],{"class":85}," pyecharts.charts ",[68,148560,31985],{"class":102},[68,148562,148563],{"class":85}," Line\n",[68,148565,148566],{"class":70,"line":78},[68,148567,4000],{"emptyLinePlaceholder":1679},[68,148569,148570,148573,148575],{"class":70,"line":89},[68,148571,148572],{"class":85},"line ",[68,148574,869],{"class":102},[68,148576,148577],{"class":85}," Line()\n",[68,148579,148580,148583,148586,148588,148591,148593,148596,148598,148601,148603,148606],{"class":70,"line":115},[68,148581,148582],{"class":85},"line.add_xaxis([",[68,148584,148585],{"class":872},"\"周一\"",[68,148587,1002],{"class":85},[68,148589,148590],{"class":872},"\"周二\"",[68,148592,1002],{"class":85},[68,148594,148595],{"class":872},"\"周三\"",[68,148597,1002],{"class":85},[68,148599,148600],{"class":872},"\"周四\"",[68,148602,1002],{"class":85},[68,148604,148605],{"class":872},"\"周五\"",[68,148607,6256],{"class":85},[68,148609,148610,148613,148616,148618,148620,148622,148624,148626,148628,148630,148633,148635,148638],{"class":70,"line":280},[68,148611,148612],{"class":85},"line.add_yaxis(",[68,148614,148615],{"class":872},"\"销售额\"",[68,148617,79096],{"class":85},[68,148619,2047],{"class":92},[68,148621,1002],{"class":85},[68,148623,2553],{"class":92},[68,148625,1002],{"class":85},[68,148627,2598],{"class":92},[68,148629,1002],{"class":85},[68,148631,148632],{"class":92},"150",[68,148634,1002],{"class":85},[68,148636,148637],{"class":92},"180",[68,148639,6256],{"class":85},[68,148641,148642,148645,148648],{"class":70,"line":301},[68,148643,148644],{"class":85},"line.render(",[68,148646,148647],{"class":872},"\"line.html\"",[68,148649,1757],{"class":85},[19,148651,148652,148653,148656],{},"运行后会生成 ",[65,148654,148655],{},"line.html","，用浏览器打开即可看到图表。",[19,148658,148659],{},"核心步骤：",[48,148661,148662,148665,148668,148671,148674],{},[51,148663,148664],{},"导入图表类。",[51,148666,148667],{},"创建图表对象。",[51,148669,148670],{},"添加 x 轴数据。",[51,148672,148673],{},"添加 y 轴数据。",[51,148675,148676],{},"渲染为 HTML。",[14,148678,148680],{"id":148679},"_105-全局配置","10.5 全局配置",[19,148682,148683,148684,148687],{},"常用配置在 ",[65,148685,148686],{},"pyecharts.options"," 中。",[58,148689,148691],{"className":31971,"code":148690,"language":31973,"meta":63,"style":63},"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",[65,148692,148693,148710,148720,148724,148732,148756,148784,148789,148808,148827,148845,148865,148869],{"__ignoreMap":63},[68,148694,148695,148697,148700,148702,148705,148707],{"class":70,"line":71},[68,148696,32330],{"class":102},[68,148698,148699],{"class":85}," pyecharts ",[68,148701,31985],{"class":102},[68,148703,148704],{"class":85}," options ",[68,148706,32976],{"class":102},[68,148708,148709],{"class":85}," opts\n",[68,148711,148712,148714,148716,148718],{"class":70,"line":78},[68,148713,32330],{"class":102},[68,148715,148558],{"class":85},[68,148717,31985],{"class":102},[68,148719,148563],{"class":85},[68,148721,148722],{"class":70,"line":89},[68,148723,4000],{"emptyLinePlaceholder":1679},[68,148725,148726,148728,148730],{"class":70,"line":115},[68,148727,148572],{"class":85},[68,148729,869],{"class":102},[68,148731,148577],{"class":85},[68,148733,148734,148736,148738,148740,148742,148744,148746,148748,148750,148752,148754],{"class":70,"line":280},[68,148735,148582],{"class":85},[68,148737,148585],{"class":872},[68,148739,1002],{"class":85},[68,148741,148590],{"class":872},[68,148743,1002],{"class":85},[68,148745,148595],{"class":872},[68,148747,1002],{"class":85},[68,148749,148600],{"class":872},[68,148751,1002],{"class":85},[68,148753,148605],{"class":872},[68,148755,6256],{"class":85},[68,148757,148758,148760,148762,148764,148766,148768,148770,148772,148774,148776,148778,148780,148782],{"class":70,"line":301},[68,148759,148612],{"class":85},[68,148761,148615],{"class":872},[68,148763,79096],{"class":85},[68,148765,2047],{"class":92},[68,148767,1002],{"class":85},[68,148769,2553],{"class":92},[68,148771,1002],{"class":85},[68,148773,2598],{"class":92},[68,148775,1002],{"class":85},[68,148777,148632],{"class":92},[68,148779,1002],{"class":85},[68,148781,148637],{"class":92},[68,148783,6256],{"class":85},[68,148785,148786],{"class":70,"line":320},[68,148787,148788],{"class":85},"line.set_global_opts(\n",[68,148790,148791,148794,148796,148799,148801,148803,148806],{"class":70,"line":2915},[68,148792,148793],{"class":6815},"    title_opts",[68,148795,869],{"class":102},[68,148797,148798],{"class":85},"opts.TitleOpts(",[68,148800,52998],{"class":6815},[68,148802,869],{"class":102},[68,148804,148805],{"class":872},"\"一周销售额\"",[68,148807,39640],{"class":85},[68,148809,148810,148813,148815,148818,148820,148822,148825],{"class":70,"line":2921},[68,148811,148812],{"class":6815},"    xaxis_opts",[68,148814,869],{"class":102},[68,148816,148817],{"class":85},"opts.AxisOpts(",[68,148819,81387],{"class":6815},[68,148821,869],{"class":102},[68,148823,148824],{"class":872},"\"日期\"",[68,148826,39640],{"class":85},[68,148828,148829,148832,148834,148836,148838,148840,148843],{"class":70,"line":2933},[68,148830,148831],{"class":6815},"    yaxis_opts",[68,148833,869],{"class":102},[68,148835,148817],{"class":85},[68,148837,81387],{"class":6815},[68,148839,869],{"class":102},[68,148841,148842],{"class":872},"\"金额\"",[68,148844,39640],{"class":85},[68,148846,148847,148850,148852,148855,148858,148860,148863],{"class":70,"line":3214},[68,148848,148849],{"class":6815},"    tooltip_opts",[68,148851,869],{"class":102},[68,148853,148854],{"class":85},"opts.TooltipOpts(",[68,148856,148857],{"class":6815},"trigger",[68,148859,869],{"class":102},[68,148861,148862],{"class":872},"\"axis\"",[68,148864,39640],{"class":85},[68,148866,148867],{"class":70,"line":3219},[68,148868,1757],{"class":85},[68,148870,148871,148873,148875],{"class":70,"line":3225},[68,148872,148644],{"class":85},[68,148874,148647],{"class":872},[68,148876,1757],{"class":85},[19,148878,148879],{},"常见全局配置：",[120,148881,148882,148891],{},[123,148883,148884],{},[126,148885,148886,148889],{},[129,148887,148888],{},"配置",[129,148890,135],{},[137,148892,148893,148903,148913,148923,148933,148943],{},[126,148894,148895,148900],{},[142,148896,148897],{},[65,148898,148899],{},"TitleOpts",[142,148901,148902],{},"标题",[126,148904,148905,148910],{},[142,148906,148907],{},[65,148908,148909],{},"LegendOpts",[142,148911,148912],{},"图例",[126,148914,148915,148920],{},[142,148916,148917],{},[65,148918,148919],{},"TooltipOpts",[142,148921,148922],{},"提示框",[126,148924,148925,148930],{},[142,148926,148927],{},[65,148928,148929],{},"AxisOpts",[142,148931,148932],{},"坐标轴",[126,148934,148935,148940],{},[142,148936,148937],{},[65,148938,148939],{},"VisualMapOpts",[142,148941,148942],{},"视觉映射",[126,148944,148945,148950],{},[142,148946,148947],{},[65,148948,148949],{},"DataZoomOpts",[142,148951,148952],{},"区域缩放",[14,148954,148956],{"id":148955},"_106-系列配置","10.6 系列配置",[19,148958,148959],{},"系列配置作用于某一组数据。",[58,148961,148963],{"className":31971,"code":148962,"language":31973,"meta":63,"style":63},"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",[65,148964,148965,148970,148981,149010,149021,149040],{"__ignoreMap":63},[68,148966,148967],{"class":70,"line":71},[68,148968,148969],{"class":85},"line.add_yaxis(\n",[68,148971,148972,148975,148977,148979],{"class":70,"line":78},[68,148973,148974],{"class":6815},"    series_name",[68,148976,869],{"class":102},[68,148978,148615],{"class":872},[68,148980,33059],{"class":85},[68,148982,148983,148986,148988,148990,148992,148994,148996,148998,149000,149002,149004,149006,149008],{"class":70,"line":89},[68,148984,148985],{"class":6815},"    y_axis",[68,148987,869],{"class":102},[68,148989,2626],{"class":85},[68,148991,2047],{"class":92},[68,148993,1002],{"class":85},[68,148995,2553],{"class":92},[68,148997,1002],{"class":85},[68,148999,2598],{"class":92},[68,149001,1002],{"class":85},[68,149003,148632],{"class":92},[68,149005,1002],{"class":85},[68,149007,148637],{"class":92},[68,149009,89412],{"class":85},[68,149011,149012,149015,149017,149019],{"class":70,"line":115},[68,149013,149014],{"class":6815},"    is_smooth",[68,149016,869],{"class":102},[68,149018,33069],{"class":92},[68,149020,33059],{"class":85},[68,149022,149023,149026,149028,149031,149034,149036,149038],{"class":70,"line":280},[68,149024,149025],{"class":6815},"    label_opts",[68,149027,869],{"class":102},[68,149029,149030],{"class":85},"opts.LabelOpts(",[68,149032,149033],{"class":6815},"is_show",[68,149035,869],{"class":102},[68,149037,33069],{"class":92},[68,149039,39640],{"class":85},[68,149041,149042],{"class":70,"line":301},[68,149043,1757],{"class":85},[19,149045,149046],{},"常用参数：",[48,149048,149049,149055,149061,149067,149073],{},[51,149050,149051,149054],{},[65,149052,149053],{},"series_name","：系列名称。",[51,149056,149057,149060],{},[65,149058,149059],{},"y_axis","：y 轴数据。",[51,149062,149063,149066],{},[65,149064,149065],{},"is_smooth","：是否平滑曲线。",[51,149068,149069,149072],{},[65,149070,149071],{},"label_opts","：标签配置。",[51,149074,149075,149078],{},[65,149076,149077],{},"symbol_size","：标记点大小。",[14,149080,149082],{"id":149081},"_107-多条折线","10.7 多条折线",[58,149084,149086],{"className":31971,"code":149085,"language":31973,"meta":63,"style":63},"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",[65,149087,149088,149102,149112,149116,149145,149149,149157,149162,149200,149237,149241,149258,149274,149278],{"__ignoreMap":63},[68,149089,149090,149092,149094,149096,149098,149100],{"class":70,"line":71},[68,149091,32330],{"class":102},[68,149093,148699],{"class":85},[68,149095,31985],{"class":102},[68,149097,148704],{"class":85},[68,149099,32976],{"class":102},[68,149101,148709],{"class":85},[68,149103,149104,149106,149108,149110],{"class":70,"line":78},[68,149105,32330],{"class":102},[68,149107,148558],{"class":85},[68,149109,31985],{"class":102},[68,149111,148563],{"class":85},[68,149113,149114],{"class":70,"line":89},[68,149115,4000],{"emptyLinePlaceholder":1679},[68,149117,149118,149121,149123,149125,149127,149129,149131,149133,149135,149137,149139,149141,149143],{"class":70,"line":115},[68,149119,149120],{"class":85},"dates ",[68,149122,869],{"class":102},[68,149124,53811],{"class":85},[68,149126,148585],{"class":872},[68,149128,1002],{"class":85},[68,149130,148590],{"class":872},[68,149132,1002],{"class":85},[68,149134,148595],{"class":872},[68,149136,1002],{"class":85},[68,149138,148600],{"class":872},[68,149140,1002],{"class":85},[68,149142,148605],{"class":872},[68,149144,34839],{"class":85},[68,149146,149147],{"class":70,"line":280},[68,149148,4000],{"emptyLinePlaceholder":1679},[68,149150,149151,149153,149155],{"class":70,"line":301},[68,149152,148572],{"class":85},[68,149154,869],{"class":102},[68,149156,148577],{"class":85},[68,149158,149159],{"class":70,"line":320},[68,149160,149161],{"class":85},"line.add_xaxis(dates)\n",[68,149163,149164,149166,149169,149171,149173,149175,149178,149180,149182,149184,149186,149188,149190,149192,149194,149196,149198],{"class":70,"line":2915},[68,149165,148612],{"class":85},[68,149167,149168],{"class":872},"\"线上销售\"",[68,149170,79096],{"class":85},[68,149172,2047],{"class":92},[68,149174,1002],{"class":85},[68,149176,149177],{"class":92},"130",[68,149179,1002],{"class":85},[68,149181,2553],{"class":92},[68,149183,1002],{"class":85},[68,149185,22643],{"class":92},[68,149187,1002],{"class":85},[68,149189,3324],{"class":92},[68,149191,113775],{"class":85},[68,149193,149065],{"class":6815},[68,149195,869],{"class":102},[68,149197,33069],{"class":92},[68,149199,1757],{"class":85},[68,149201,149202,149204,149207,149209,149211,149213,149215,149217,149219,149221,149223,149225,149227,149229,149231,149233,149235],{"class":70,"line":2921},[68,149203,148612],{"class":85},[68,149205,149206],{"class":872},"\"线下销售\"",[68,149208,79096],{"class":85},[68,149210,2348],{"class":92},[68,149212,1002],{"class":85},[68,149214,2598],{"class":92},[68,149216,1002],{"class":85},[68,149218,2047],{"class":92},[68,149220,1002],{"class":85},[68,149222,2553],{"class":92},[68,149224,1002],{"class":85},[68,149226,148632],{"class":92},[68,149228,113775],{"class":85},[68,149230,149065],{"class":6815},[68,149232,869],{"class":102},[68,149234,33069],{"class":92},[68,149236,1757],{"class":85},[68,149238,149239],{"class":70,"line":2933},[68,149240,148788],{"class":85},[68,149242,149243,149245,149247,149249,149251,149253,149256],{"class":70,"line":3214},[68,149244,148793],{"class":6815},[68,149246,869],{"class":102},[68,149248,148798],{"class":85},[68,149250,52998],{"class":6815},[68,149252,869],{"class":102},[68,149254,149255],{"class":872},"\"线上线下销售趋势\"",[68,149257,39640],{"class":85},[68,149259,149260,149262,149264,149266,149268,149270,149272],{"class":70,"line":3219},[68,149261,148849],{"class":6815},[68,149263,869],{"class":102},[68,149265,148854],{"class":85},[68,149267,148857],{"class":6815},[68,149269,869],{"class":102},[68,149271,148862],{"class":872},[68,149273,39640],{"class":85},[68,149275,149276],{"class":70,"line":3225},[68,149277,1757],{"class":85},[68,149279,149280,149282,149285],{"class":70,"line":3230},[68,149281,148644],{"class":85},[68,149283,149284],{"class":872},"\"sales.html\"",[68,149286,1757],{"class":85},[19,149288,149289],{},"多条折线适合比较不同指标或不同地区。",[14,149291,149293],{"id":149292},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149295,149296,149297,26213],{},"假设 ",[65,149298,149299],{},"sales.json",[58,149301,149303],{"className":148365,"code":149302,"language":147112,"meta":63,"style":63},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[65,149304,149305,149310,149342,149370,149398],{"__ignoreMap":63},[68,149306,149307],{"class":70,"line":71},[68,149308,149309],{"class":85},"[\n",[68,149311,149312,149315,149318,149320,149322,149324,149327,149329,149331,149333,149336,149338,149340],{"class":70,"line":78},[68,149313,149314],{"class":85},"  {",[68,149316,149317],{"class":92},"\"date\"",[68,149319,96],{"class":85},[68,149321,148585],{"class":872},[68,149323,1002],{"class":85},[68,149325,149326],{"class":92},"\"online\"",[68,149328,96],{"class":85},[68,149330,2047],{"class":92},[68,149332,1002],{"class":85},[68,149334,149335],{"class":92},"\"offline\"",[68,149337,96],{"class":85},[68,149339,2348],{"class":92},[68,149341,6529],{"class":85},[68,149343,149344,149346,149348,149350,149352,149354,149356,149358,149360,149362,149364,149366,149368],{"class":70,"line":89},[68,149345,149314],{"class":85},[68,149347,149317],{"class":92},[68,149349,96],{"class":85},[68,149351,148590],{"class":872},[68,149353,1002],{"class":85},[68,149355,149326],{"class":92},[68,149357,96],{"class":85},[68,149359,149177],{"class":92},[68,149361,1002],{"class":85},[68,149363,149335],{"class":92},[68,149365,96],{"class":85},[68,149367,2598],{"class":92},[68,149369,6529],{"class":85},[68,149371,149372,149374,149376,149378,149380,149382,149384,149386,149388,149390,149392,149394,149396],{"class":70,"line":115},[68,149373,149314],{"class":85},[68,149375,149317],{"class":92},[68,149377,96],{"class":85},[68,149379,148595],{"class":872},[68,149381,1002],{"class":85},[68,149383,149326],{"class":92},[68,149385,96],{"class":85},[68,149387,2553],{"class":92},[68,149389,1002],{"class":85},[68,149391,149335],{"class":92},[68,149393,96],{"class":85},[68,149395,2047],{"class":92},[68,149397,118],{"class":85},[68,149399,149400],{"class":70,"line":280},[68,149401,34839],{"class":85},[19,149403,149404],{},"读取并绘图：",[58,149406,149408],{"className":31971,"code":149407,"language":31973,"meta":63,"style":63},"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",[65,149409,149410,149416,149430,149440,149444,149476,149489,149493,149501,149510,149519,149523,149535,149544,149553,149562,149566,149574,149578,149595,149612,149616,149633,149649,149653],{"__ignoreMap":63},[68,149411,149412,149414],{"class":70,"line":71},[68,149413,31985],{"class":102},[68,149415,148411],{"class":85},[68,149417,149418,149420,149422,149424,149426,149428],{"class":70,"line":78},[68,149419,32330],{"class":102},[68,149421,148699],{"class":85},[68,149423,31985],{"class":102},[68,149425,148704],{"class":85},[68,149427,32976],{"class":102},[68,149429,148709],{"class":85},[68,149431,149432,149434,149436,149438],{"class":70,"line":89},[68,149433,32330],{"class":102},[68,149435,148558],{"class":85},[68,149437,31985],{"class":102},[68,149439,148563],{"class":85},[68,149441,149442],{"class":70,"line":115},[68,149443,4000],{"emptyLinePlaceholder":1679},[68,149445,149446,149448,149450,149452,149455,149457,149459,149461,149463,149465,149467,149469,149471,149474],{"class":70,"line":280},[68,149447,109406],{"class":102},[68,149449,148111],{"class":92},[68,149451,997],{"class":85},[68,149453,149454],{"class":872},"\"sales.json\"",[68,149456,1002],{"class":85},[68,149458,148121],{"class":872},[68,149460,1002],{"class":85},[68,149462,148126],{"class":6815},[68,149464,869],{"class":102},[68,149466,148131],{"class":872},[68,149468,15311],{"class":85},[68,149470,32976],{"class":102},[68,149472,149473],{"class":6815}," file",[68,149475,5338],{"class":85},[68,149477,149478,149480,149482,149485,149487],{"class":70,"line":301},[68,149479,102995],{"class":85},[68,149481,869],{"class":102},[68,149483,149484],{"class":85}," json.load(",[68,149486,46947],{"class":6815},[68,149488,1757],{"class":85},[68,149490,149491],{"class":70,"line":320},[68,149492,4000],{"emptyLinePlaceholder":1679},[68,149494,149495,149497,149499],{"class":70,"line":2915},[68,149496,149120],{"class":85},[68,149498,869],{"class":102},[68,149500,53423],{"class":85},[68,149502,149503,149506,149508],{"class":70,"line":2921},[68,149504,149505],{"class":85},"online_sales ",[68,149507,869],{"class":102},[68,149509,53423],{"class":85},[68,149511,149512,149515,149517],{"class":70,"line":2933},[68,149513,149514],{"class":85},"offline_sales ",[68,149516,869],{"class":102},[68,149518,53423],{"class":85},[68,149520,149521],{"class":70,"line":3214},[68,149522,4000],{"emptyLinePlaceholder":1679},[68,149524,149525,149527,149530,149532],{"class":70,"line":3219},[68,149526,4624],{"class":102},[68,149528,149529],{"class":85}," item ",[68,149531,27637],{"class":102},[68,149533,149534],{"class":85}," data:\n",[68,149536,149537,149540,149542],{"class":70,"line":3225},[68,149538,149539],{"class":85},"    dates.append(item[",[68,149541,149317],{"class":872},[68,149543,6256],{"class":85},[68,149545,149546,149549,149551],{"class":70,"line":3230},[68,149547,149548],{"class":85},"    online_sales.append(item[",[68,149550,149326],{"class":872},[68,149552,6256],{"class":85},[68,149554,149555,149558,149560],{"class":70,"line":3244},[68,149556,149557],{"class":85},"    offline_sales.append(item[",[68,149559,149335],{"class":872},[68,149561,6256],{"class":85},[68,149563,149564],{"class":70,"line":3249},[68,149565,4000],{"emptyLinePlaceholder":1679},[68,149567,149568,149570,149572],{"class":70,"line":3255},[68,149569,148572],{"class":85},[68,149571,869],{"class":102},[68,149573,148577],{"class":85},[68,149575,149576],{"class":70,"line":3276},[68,149577,149161],{"class":85},[68,149579,149580,149582,149584,149587,149589,149591,149593],{"class":70,"line":3281},[68,149581,148612],{"class":85},[68,149583,149168],{"class":872},[68,149585,149586],{"class":85},", online_sales, ",[68,149588,149065],{"class":6815},[68,149590,869],{"class":102},[68,149592,33069],{"class":92},[68,149594,1757],{"class":85},[68,149596,149597,149599,149601,149604,149606,149608,149610],{"class":70,"line":3295},[68,149598,148612],{"class":85},[68,149600,149206],{"class":872},[68,149602,149603],{"class":85},", offline_sales, ",[68,149605,149065],{"class":6815},[68,149607,869],{"class":102},[68,149609,33069],{"class":92},[68,149611,1757],{"class":85},[68,149613,149614],{"class":70,"line":3300},[68,149615,148788],{"class":85},[68,149617,149618,149620,149622,149624,149626,149628,149631],{"class":70,"line":3329},[68,149619,148793],{"class":6815},[68,149621,869],{"class":102},[68,149623,148798],{"class":85},[68,149625,52998],{"class":6815},[68,149627,869],{"class":102},[68,149629,149630],{"class":872},"\"销售趋势\"",[68,149632,39640],{"class":85},[68,149634,149635,149637,149639,149641,149643,149645,149647],{"class":70,"line":3334},[68,149636,148849],{"class":6815},[68,149638,869],{"class":102},[68,149640,148854],{"class":85},[68,149642,148857],{"class":6815},[68,149644,869],{"class":102},[68,149646,148862],{"class":872},[68,149648,39640],{"class":85},[68,149650,149651],{"class":70,"line":3351},[68,149652,1757],{"class":85},[68,149654,149655,149657,149659],{"class":70,"line":3356},[68,149656,148644],{"class":85},[68,149658,149284],{"class":872},[68,149660,1757],{"class":85},[14,149662,149664],{"id":149663},"_109-数据清洗","10.9 数据清洗",[19,149666,149667],{},"真实数据经常不整齐，需要清洗。",[19,149669,149670],{},"常见问题：",[48,149672,149673,149676,149679,149682],{},[51,149674,149675],{},"数字是字符串。",[51,149677,149678],{},"字段缺失。",[51,149680,149681],{},"空值。",[51,149683,149684],{},"日期格式不统一。",[19,149686,16731],{},[58,149688,149690],{"className":31971,"code":149689,"language":31973,"meta":63,"style":63},"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",[65,149691,149692,149701,149724,149744,149765,149769,149773,149781,149790,149794,149805,149819,149828,149833,149837,149845,149855,149859,149866],{"__ignoreMap":63},[68,149693,149694,149697,149699],{"class":70,"line":71},[68,149695,149696],{"class":85},"raw_data ",[68,149698,869],{"class":102},[68,149700,57031],{"class":85},[68,149702,149703,149706,149708,149710,149712,149714,149717,149719,149722],{"class":70,"line":78},[68,149704,149705],{"class":85},"    {",[68,149707,149317],{"class":872},[68,149709,96],{"class":85},[68,149711,148585],{"class":872},[68,149713,1002],{"class":85},[68,149715,149716],{"class":872},"\"sales\"",[68,149718,96],{"class":85},[68,149720,149721],{"class":872},"\"100\"",[68,149723,6529],{"class":85},[68,149725,149726,149728,149730,149732,149734,149736,149738,149740,149742],{"class":70,"line":89},[68,149727,149705],{"class":85},[68,149729,149317],{"class":872},[68,149731,96],{"class":85},[68,149733,148590],{"class":872},[68,149735,1002],{"class":85},[68,149737,149716],{"class":872},[68,149739,96],{"class":85},[68,149741,9251],{"class":872},[68,149743,6529],{"class":85},[68,149745,149746,149748,149750,149752,149754,149756,149758,149760,149763],{"class":70,"line":115},[68,149747,149705],{"class":85},[68,149749,149317],{"class":872},[68,149751,96],{"class":85},[68,149753,148595],{"class":872},[68,149755,1002],{"class":85},[68,149757,149716],{"class":872},[68,149759,96],{"class":85},[68,149761,149762],{"class":872},"\"120\"",[68,149764,6529],{"class":85},[68,149766,149767],{"class":70,"line":280},[68,149768,34839],{"class":85},[68,149770,149771],{"class":70,"line":301},[68,149772,4000],{"emptyLinePlaceholder":1679},[68,149774,149775,149777,149779],{"class":70,"line":320},[68,149776,149120],{"class":85},[68,149778,869],{"class":102},[68,149780,53423],{"class":85},[68,149782,149783,149786,149788],{"class":70,"line":2915},[68,149784,149785],{"class":85},"sales ",[68,149787,869],{"class":102},[68,149789,53423],{"class":85},[68,149791,149792],{"class":70,"line":2921},[68,149793,4000],{"emptyLinePlaceholder":1679},[68,149795,149796,149798,149800,149802],{"class":70,"line":2933},[68,149797,4624],{"class":102},[68,149799,149529],{"class":85},[68,149801,27637],{"class":102},[68,149803,149804],{"class":85}," raw_data:\n",[68,149806,149807,149810,149812,149815,149817],{"class":70,"line":3214},[68,149808,149809],{"class":85},"    value ",[68,149811,869],{"class":102},[68,149813,149814],{"class":85}," item.get(",[68,149816,149716],{"class":872},[68,149818,1757],{"class":85},[68,149820,149821,149823,149825],{"class":70,"line":3219},[68,149822,4700],{"class":102},[68,149824,40523],{"class":102},[68,149826,149827],{"class":85}," value:\n",[68,149829,149830],{"class":70,"line":3225},[68,149831,149832],{"class":102},"        continue\n",[68,149834,149835],{"class":70,"line":3230},[68,149836,4000],{"emptyLinePlaceholder":1679},[68,149838,149839,149841,149843],{"class":70,"line":3244},[68,149840,149539],{"class":85},[68,149842,149317],{"class":872},[68,149844,6256],{"class":85},[68,149846,149847,149850,149852],{"class":70,"line":3249},[68,149848,149849],{"class":85},"    sales.append(",[68,149851,1754],{"class":92},[68,149853,149854],{"class":85},"(value))\n",[68,149856,149857],{"class":70,"line":3255},[68,149858,4000],{"emptyLinePlaceholder":1679},[68,149860,149861,149863],{"class":70,"line":3276},[68,149862,32008],{"class":92},[68,149864,149865],{"class":85},"(dates)\n",[68,149867,149868,149870],{"class":70,"line":3281},[68,149869,32008],{"class":92},[68,149871,149872],{"class":85},"(sales)\n",[14,149874,149876],{"id":149875},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[58,149878,149880],{"className":31971,"code":149879,"language":31973,"meta":63,"style":63},"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",[65,149881,149882,149896,149906,149910,149918,149939,149961,149983,150005,150027,150031,150035,150057,150078,150082,150090,150094,150098,150108,150117,150127,150143,150147,150151,150168,150184,150200,150216,150226,150230],{"__ignoreMap":63},[68,149883,149884,149886,149888,149890,149892,149894],{"class":70,"line":71},[68,149885,32330],{"class":102},[68,149887,148699],{"class":85},[68,149889,31985],{"class":102},[68,149891,148704],{"class":85},[68,149893,32976],{"class":102},[68,149895,148709],{"class":85},[68,149897,149898,149900,149902,149904],{"class":70,"line":78},[68,149899,32330],{"class":102},[68,149901,148558],{"class":85},[68,149903,31985],{"class":102},[68,149905,148563],{"class":85},[68,149907,149908],{"class":70,"line":89},[68,149909,4000],{"emptyLinePlaceholder":1679},[68,149911,149912,149914,149916],{"class":70,"line":115},[68,149913,149785],{"class":85},[68,149915,869],{"class":102},[68,149917,57031],{"class":85},[68,149919,149920,149922,149924,149926,149929,149931,149933,149935,149937],{"class":70,"line":280},[68,149921,149705],{"class":85},[68,149923,149317],{"class":872},[68,149925,96],{"class":85},[68,149927,149928],{"class":872},"\"2024-10-01\"",[68,149930,1002],{"class":85},[68,149932,85661],{"class":872},[68,149934,96],{"class":85},[68,149936,93599],{"class":92},[68,149938,6529],{"class":85},[68,149940,149941,149943,149945,149947,149950,149952,149954,149956,149959],{"class":70,"line":301},[68,149942,149705],{"class":85},[68,149944,149317],{"class":872},[68,149946,96],{"class":85},[68,149948,149949],{"class":872},"\"2024-10-02\"",[68,149951,1002],{"class":85},[68,149953,85661],{"class":872},[68,149955,96],{"class":85},[68,149957,149958],{"class":92},"1800",[68,149960,6529],{"class":85},[68,149962,149963,149965,149967,149969,149972,149974,149976,149978,149981],{"class":70,"line":320},[68,149964,149705],{"class":85},[68,149966,149317],{"class":872},[68,149968,96],{"class":85},[68,149970,149971],{"class":872},"\"2024-10-03\"",[68,149973,1002],{"class":85},[68,149975,85661],{"class":872},[68,149977,96],{"class":85},[68,149979,149980],{"class":92},"1500",[68,149982,6529],{"class":85},[68,149984,149985,149987,149989,149991,149994,149996,149998,150000,150003],{"class":70,"line":2915},[68,149986,149705],{"class":85},[68,149988,149317],{"class":872},[68,149990,96],{"class":85},[68,149992,149993],{"class":872},"\"2024-10-04\"",[68,149995,1002],{"class":85},[68,149997,85661],{"class":872},[68,149999,96],{"class":85},[68,150001,150002],{"class":92},"2100",[68,150004,6529],{"class":85},[68,150006,150007,150009,150011,150013,150016,150018,150020,150022,150025],{"class":70,"line":2921},[68,150008,149705],{"class":85},[68,150010,149317],{"class":872},[68,150012,96],{"class":85},[68,150014,150015],{"class":872},"\"2024-10-05\"",[68,150017,1002],{"class":85},[68,150019,85661],{"class":872},[68,150021,96],{"class":85},[68,150023,150024],{"class":92},"2600",[68,150026,6529],{"class":85},[68,150028,150029],{"class":70,"line":2933},[68,150030,34839],{"class":85},[68,150032,150033],{"class":70,"line":3214},[68,150034,4000],{"emptyLinePlaceholder":1679},[68,150036,150037,150039,150041,150044,150046,150048,150050,150052,150054],{"class":70,"line":3219},[68,150038,149120],{"class":85},[68,150040,869],{"class":102},[68,150042,150043],{"class":85}," [item[",[68,150045,149317],{"class":872},[68,150047,6042],{"class":85},[68,150049,4624],{"class":102},[68,150051,149529],{"class":85},[68,150053,27637],{"class":102},[68,150055,150056],{"class":85}," sales]\n",[68,150058,150059,150062,150064,150066,150068,150070,150072,150074,150076],{"class":70,"line":3225},[68,150060,150061],{"class":85},"amounts ",[68,150063,869],{"class":102},[68,150065,150043],{"class":85},[68,150067,85661],{"class":872},[68,150069,6042],{"class":85},[68,150071,4624],{"class":102},[68,150073,149529],{"class":85},[68,150075,27637],{"class":102},[68,150077,150056],{"class":85},[68,150079,150080],{"class":70,"line":3230},[68,150081,4000],{"emptyLinePlaceholder":1679},[68,150083,150084,150086,150088],{"class":70,"line":3244},[68,150085,148572],{"class":85},[68,150087,869],{"class":102},[68,150089,148577],{"class":85},[68,150091,150092],{"class":70,"line":3249},[68,150093,149161],{"class":85},[68,150095,150096],{"class":70,"line":3255},[68,150097,148969],{"class":85},[68,150099,150100,150102,150104,150106],{"class":70,"line":3276},[68,150101,148974],{"class":6815},[68,150103,869],{"class":102},[68,150105,148615],{"class":872},[68,150107,33059],{"class":85},[68,150109,150110,150112,150114],{"class":70,"line":3281},[68,150111,148985],{"class":6815},[68,150113,869],{"class":102},[68,150115,150116],{"class":85},"amounts,\n",[68,150118,150119,150121,150123,150125],{"class":70,"line":3295},[68,150120,149014],{"class":6815},[68,150122,869],{"class":102},[68,150124,33069],{"class":92},[68,150126,33059],{"class":85},[68,150128,150129,150131,150133,150135,150137,150139,150141],{"class":70,"line":3300},[68,150130,149025],{"class":6815},[68,150132,869],{"class":102},[68,150134,149030],{"class":85},[68,150136,149033],{"class":6815},[68,150138,869],{"class":102},[68,150140,33069],{"class":92},[68,150142,39640],{"class":85},[68,150144,150145],{"class":70,"line":3329},[68,150146,1757],{"class":85},[68,150148,150149],{"class":70,"line":3334},[68,150150,148788],{"class":85},[68,150152,150153,150155,150157,150159,150161,150163,150166],{"class":70,"line":3351},[68,150154,148793],{"class":6815},[68,150156,869],{"class":102},[68,150158,148798],{"class":85},[68,150160,52998],{"class":6815},[68,150162,869],{"class":102},[68,150164,150165],{"class":872},"\"每日销售额\"",[68,150167,39640],{"class":85},[68,150169,150170,150172,150174,150176,150178,150180,150182],{"class":70,"line":3356},[68,150171,148812],{"class":6815},[68,150173,869],{"class":102},[68,150175,148817],{"class":85},[68,150177,81387],{"class":6815},[68,150179,869],{"class":102},[68,150181,148824],{"class":872},[68,150183,39640],{"class":85},[68,150185,150186,150188,150190,150192,150194,150196,150198],{"class":70,"line":3361},[68,150187,148831],{"class":6815},[68,150189,869],{"class":102},[68,150191,148817],{"class":85},[68,150193,81387],{"class":6815},[68,150195,869],{"class":102},[68,150197,148842],{"class":872},[68,150199,39640],{"class":85},[68,150201,150202,150204,150206,150208,150210,150212,150214],{"class":70,"line":3366},[68,150203,148849],{"class":6815},[68,150205,869],{"class":102},[68,150207,148854],{"class":85},[68,150209,148857],{"class":6815},[68,150211,869],{"class":102},[68,150213,148862],{"class":872},[68,150215,39640],{"class":85},[68,150217,150218,150221,150223],{"class":70,"line":3380},[68,150219,150220],{"class":6815},"    datazoom_opts",[68,150222,869],{"class":102},[68,150224,150225],{"class":85},"[opts.DataZoomOpts()],\n",[68,150227,150228],{"class":70,"line":3385},[68,150229,1757],{"class":85},[68,150231,150232,150234,150237],{"class":70,"line":4177},[68,150233,148644],{"class":85},[68,150235,150236],{"class":872},"\"daily_sales.html\"",[68,150238,1757],{"class":85},[19,150240,150241,150244],{},[65,150242,150243],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150246,150248],{"id":150247},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150250,150251],{},"如果数据结构如下：",[58,150253,150255],{"className":31971,"code":150254,"language":31973,"meta":63,"style":63},"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",[65,150256,150257,150265,150273,150295,150316,150321,150328,150348,150368,150372],{"__ignoreMap":63},[68,150258,150259,150261,150263],{"class":70,"line":71},[68,150260,103232],{"class":85},[68,150262,869],{"class":102},[68,150264,86],{"class":85},[68,150266,150267,150270],{"class":70,"line":78},[68,150268,150269],{"class":872},"    \"北京\"",[68,150271,150272],{"class":85},": [\n",[68,150274,150275,150277,150279,150281,150284,150286,150289,150291,150293],{"class":70,"line":89},[68,150276,6516],{"class":85},[68,150278,149317],{"class":872},[68,150280,96],{"class":85},[68,150282,150283],{"class":872},"\"2024-01-01\"",[68,150285,1002],{"class":85},[68,150287,150288],{"class":872},"\"confirm\"",[68,150290,96],{"class":85},[68,150292,2182],{"class":92},[68,150294,6529],{"class":85},[68,150296,150297,150299,150301,150303,150306,150308,150310,150312,150314],{"class":70,"line":115},[68,150298,6516],{"class":85},[68,150300,149317],{"class":872},[68,150302,96],{"class":85},[68,150304,150305],{"class":872},"\"2024-01-02\"",[68,150307,1002],{"class":85},[68,150309,150288],{"class":872},[68,150311,96],{"class":85},[68,150313,2234],{"class":92},[68,150315,6529],{"class":85},[68,150317,150318],{"class":70,"line":280},[68,150319,150320],{"class":85},"    ],\n",[68,150322,150323,150326],{"class":70,"line":301},[68,150324,150325],{"class":872},"    \"上海\"",[68,150327,150272],{"class":85},[68,150329,150330,150332,150334,150336,150338,150340,150342,150344,150346],{"class":70,"line":320},[68,150331,6516],{"class":85},[68,150333,149317],{"class":872},[68,150335,96],{"class":85},[68,150337,150283],{"class":872},[68,150339,1002],{"class":85},[68,150341,150288],{"class":872},[68,150343,96],{"class":85},[68,150345,2131],{"class":92},[68,150347,6529],{"class":85},[68,150349,150350,150352,150354,150356,150358,150360,150362,150364,150366],{"class":70,"line":2915},[68,150351,6516],{"class":85},[68,150353,149317],{"class":872},[68,150355,96],{"class":85},[68,150357,150305],{"class":872},[68,150359,1002],{"class":85},[68,150361,150288],{"class":872},[68,150363,96],{"class":85},[68,150365,2259],{"class":92},[68,150367,6529],{"class":85},[68,150369,150370],{"class":70,"line":2921},[68,150371,150320],{"class":85},[68,150373,150374],{"class":70,"line":2933},[68,150375,118],{"class":85},[19,150377,150378],{},"绘制多地区趋势：",[58,150380,150382],{"className":31971,"code":150381,"language":31973,"meta":63,"style":63},"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",[65,150383,150384,150398,150408,150412,150437,150441,150449,150453,150457,150469,150491,150504,150508,150512,150529,150545,150549],{"__ignoreMap":63},[68,150385,150386,150388,150390,150392,150394,150396],{"class":70,"line":71},[68,150387,32330],{"class":102},[68,150389,148699],{"class":85},[68,150391,31985],{"class":102},[68,150393,148704],{"class":85},[68,150395,32976],{"class":102},[68,150397,148709],{"class":85},[68,150399,150400,150402,150404,150406],{"class":70,"line":78},[68,150401,32330],{"class":102},[68,150403,148558],{"class":85},[68,150405,31985],{"class":102},[68,150407,148563],{"class":85},[68,150409,150410],{"class":70,"line":89},[68,150411,4000],{"emptyLinePlaceholder":1679},[68,150413,150414,150416,150418,150420,150422,150424,150426,150428,150430,150433,150435],{"class":70,"line":115},[68,150415,149120],{"class":85},[68,150417,869],{"class":102},[68,150419,150043],{"class":85},[68,150421,149317],{"class":872},[68,150423,6042],{"class":85},[68,150425,4624],{"class":102},[68,150427,149529],{"class":85},[68,150429,27637],{"class":102},[68,150431,150432],{"class":85}," data[",[68,150434,70851],{"class":872},[68,150436,79105],{"class":85},[68,150438,150439],{"class":70,"line":280},[68,150440,4000],{"emptyLinePlaceholder":1679},[68,150442,150443,150445,150447],{"class":70,"line":301},[68,150444,148572],{"class":85},[68,150446,869],{"class":102},[68,150448,148577],{"class":85},[68,150450,150451],{"class":70,"line":320},[68,150452,149161],{"class":85},[68,150454,150455],{"class":70,"line":2915},[68,150456,4000],{"emptyLinePlaceholder":1679},[68,150458,150459,150461,150464,150466],{"class":70,"line":2921},[68,150460,4624],{"class":102},[68,150462,150463],{"class":85}," city, records ",[68,150465,27637],{"class":102},[68,150467,150468],{"class":85}," data.items():\n",[68,150470,150471,150474,150476,150478,150480,150482,150484,150486,150488],{"class":70,"line":2933},[68,150472,150473],{"class":85},"    values ",[68,150475,869],{"class":102},[68,150477,150043],{"class":85},[68,150479,150288],{"class":872},[68,150481,6042],{"class":85},[68,150483,4624],{"class":102},[68,150485,149529],{"class":85},[68,150487,27637],{"class":102},[68,150489,150490],{"class":85}," records]\n",[68,150492,150493,150496,150498,150500,150502],{"class":70,"line":3214},[68,150494,150495],{"class":85},"    line.add_yaxis(city, values, ",[68,150497,149065],{"class":6815},[68,150499,869],{"class":102},[68,150501,33069],{"class":92},[68,150503,1757],{"class":85},[68,150505,150506],{"class":70,"line":3219},[68,150507,4000],{"emptyLinePlaceholder":1679},[68,150509,150510],{"class":70,"line":3225},[68,150511,148788],{"class":85},[68,150513,150514,150516,150518,150520,150522,150524,150527],{"class":70,"line":3230},[68,150515,148793],{"class":6815},[68,150517,869],{"class":102},[68,150519,148798],{"class":85},[68,150521,52998],{"class":6815},[68,150523,869],{"class":102},[68,150525,150526],{"class":872},"\"多地区趋势图\"",[68,150528,39640],{"class":85},[68,150530,150531,150533,150535,150537,150539,150541,150543],{"class":70,"line":3244},[68,150532,148849],{"class":6815},[68,150534,869],{"class":102},[68,150536,148854],{"class":85},[68,150538,148857],{"class":6815},[68,150540,869],{"class":102},[68,150542,148862],{"class":872},[68,150544,39640],{"class":85},[68,150546,150547],{"class":70,"line":3249},[68,150548,1757],{"class":85},[68,150550,150551,150553,150556],{"class":70,"line":3255},[68,150552,148644],{"class":85},[68,150554,150555],{"class":872},"\"trend.html\"",[68,150557,1757],{"class":85},[19,150559,150560],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150562,150564],{"id":150563},"_1012-易错点","10.12 易错点",[48,150566,150567,150573,150579,150589,150595],{},[51,150568,150569,150572],{},[65,150570,150571],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[51,150574,150575,150578],{},[65,150576,150577],{},"render()"," 生成的是 HTML，不是图片。",[51,150580,150581,150582,150585,150586,29978],{},"JSON 字符串用 ",[65,150583,150584],{},"json.loads()","，JSON 文件用 ",[65,150587,150588],{},"json.load()",[51,150590,150591,150592,29978],{},"中文 JSON 保存时加 ",[65,150593,150594],{},"ensure_ascii=False",[51,150596,150597],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150599,150601],{"id":150600},"_1013-本章练习","10.13 本章练习",[48,150603,150604,150607,150610,150613,150616],{},[51,150605,150606],{},"安装 pyecharts 并生成第一个折线图。",[51,150608,150609],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[51,150611,150612],{},"绘制两条折线，对比线上和线下销售额。",[51,150614,150615],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[51,150617,150618],{},"对含有空值的销售数据进行清洗后再绘图。",[1652,150620,150621],{},"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":63,"searchDepth":78,"depth":78,"links":150623},[150624,150625,150626,150627,150628,150629,150630,150631,150632,150633,150634,150635,150636],{"id":148240,"depth":78,"text":148241},{"id":148315,"depth":78,"text":148316},{"id":148494,"depth":78,"text":148495},{"id":148545,"depth":78,"text":148546},{"id":148679,"depth":78,"text":148680},{"id":148955,"depth":78,"text":148956},{"id":149081,"depth":78,"text":149082},{"id":149292,"depth":78,"text":149293},{"id":149663,"depth":78,"text":149664},{"id":149875,"depth":78,"text":149876},{"id":150247,"depth":78,"text":150248},{"id":150563,"depth":78,"text":150564},{"id":150600,"depth":78,"text":150601},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148232,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150643,"title":150644,"body":150645,"description":1676,"extension":1677,"meta":153005,"navigation":1679,"path":153006,"seo":153007,"stem":153008,"__hash__":153009},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150646,"toc":152982},[150647,150650,150654,150657,150660,150736,150739,150830,150833,150837,150840,150884,150897,150901,150904,150971,150974,150978,150981,151065,151073,151077,151082,151223,151226,151237,151243,151249,151363,151367,151370,151373,151626,151629,151633,151636,151740,151743,151747,151898,151902,151909,152022,152026,152029,152135,152138,152142,152145,152176,152179,152284,152287,152291,152295,152305,152373,152377,152384,152448,152451,152455,152461,152557,152566,152570,152894,152903,152907,152935,152939,152979],[10,150648,150644],{"id":150649},"_11-面向对象基础",[14,150651,150653],{"id":150652},"_111-什么是面向对象","11.1 什么是面向对象",[19,150655,150656],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150658,150659],{},"面向过程：",[58,150661,150663],{"className":31971,"code":150662,"language":31973,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[65,150664,150665,150674,150682,150686,150696,150727,150731],{"__ignoreMap":63},[68,150666,150667,150669,150671],{"class":70,"line":71},[68,150668,147856],{"class":85},[68,150670,869],{"class":102},[68,150672,150673],{"class":872}," \"小明\"\n",[68,150675,150676,150678,150680],{"class":70,"line":78},[68,150677,147866],{"class":85},[68,150679,869],{"class":102},[68,150681,147871],{"class":92},[68,150683,150684],{"class":70,"line":89},[68,150685,4000],{"emptyLinePlaceholder":1679},[68,150687,150688,150690,150693],{"class":70,"line":115},[68,150689,33540],{"class":102},[68,150691,150692],{"class":587}," introduce",[68,150694,150695],{"class":85},"(name, age):\n",[68,150697,150698,150700,150702,150704,150707,150709,150711,150713,150716,150718,150720,150722,150725],{"class":70,"line":280},[68,150699,32892],{"class":92},[68,150701,997],{"class":85},[68,150703,1801],{"class":102},[68,150705,150706],{"class":872},"\"我叫",[68,150708,2632],{"class":92},[68,150710,81387],{"class":85},[68,150712,2681],{"class":92},[68,150714,150715],{"class":872},"，今年",[68,150717,2632],{"class":92},[68,150719,71803],{"class":85},[68,150721,2681],{"class":92},[68,150723,150724],{"class":872},"岁\"",[68,150726,1757],{"class":85},[68,150728,150729],{"class":70,"line":301},[68,150730,4000],{"emptyLinePlaceholder":1679},[68,150732,150733],{"class":70,"line":320},[68,150734,150735],{"class":85},"introduce(name, age)\n",[19,150737,150738],{},"面向对象：",[58,150740,150742],{"className":31971,"code":150741,"language":31973,"meta":63,"style":63},"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",[65,150743,150744,150752,150760,150789,150793,150797,150807,150816,150825],{"__ignoreMap":63},[68,150745,150746,150748,150750],{"class":70,"line":71},[68,150747,16291],{"class":102},[68,150749,9497],{"class":587},[68,150751,5338],{"class":85},[68,150753,150754,150756,150758],{"class":70,"line":78},[68,150755,32394],{"class":102},[68,150757,150692],{"class":587},[68,150759,32400],{"class":85},[68,150761,150762,150764,150766,150768,150770,150773,150775,150777,150779,150781,150783,150785,150787],{"class":70,"line":89},[68,150763,34044],{"class":92},[68,150765,997],{"class":85},[68,150767,1801],{"class":102},[68,150769,150706],{"class":872},[68,150771,150772],{"class":92},"{self",[68,150774,81878],{"class":85},[68,150776,2681],{"class":92},[68,150778,150715],{"class":872},[68,150780,150772],{"class":92},[68,150782,81890],{"class":85},[68,150784,2681],{"class":92},[68,150786,150724],{"class":872},[68,150788,1757],{"class":85},[68,150790,150791],{"class":70,"line":115},[68,150792,4000],{"emptyLinePlaceholder":1679},[68,150794,150795],{"class":70,"line":280},[68,150796,4000],{"emptyLinePlaceholder":1679},[68,150798,150799,150802,150804],{"class":70,"line":301},[68,150800,150801],{"class":85},"student ",[68,150803,869],{"class":102},[68,150805,150806],{"class":85}," Student()\n",[68,150808,150809,150812,150814],{"class":70,"line":320},[68,150810,150811],{"class":85},"student.name ",[68,150813,869],{"class":102},[68,150815,150673],{"class":872},[68,150817,150818,150821,150823],{"class":70,"line":2915},[68,150819,150820],{"class":85},"student.age ",[68,150822,869],{"class":102},[68,150824,147871],{"class":92},[68,150826,150827],{"class":70,"line":2921},[68,150828,150829],{"class":85},"student.introduce()\n",[19,150831,150832],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150834,150836],{"id":150835},"_112-类和对象","11.2 类和对象",[19,150838,150839],{},"类是模板，对象是根据模板创建出来的具体实例。",[58,150841,150843],{"className":31971,"code":150842,"language":31973,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[65,150844,150845,150853,150858,150862,150866,150875],{"__ignoreMap":63},[68,150846,150847,150849,150851],{"class":70,"line":71},[68,150848,16291],{"class":102},[68,150850,9497],{"class":587},[68,150852,5338],{"class":85},[68,150854,150855],{"class":70,"line":78},[68,150856,150857],{"class":102},"    pass\n",[68,150859,150860],{"class":70,"line":89},[68,150861,4000],{"emptyLinePlaceholder":1679},[68,150863,150864],{"class":70,"line":115},[68,150865,4000],{"emptyLinePlaceholder":1679},[68,150867,150868,150871,150873],{"class":70,"line":280},[68,150869,150870],{"class":85},"student1 ",[68,150872,869],{"class":102},[68,150874,150806],{"class":85},[68,150876,150877,150880,150882],{"class":70,"line":301},[68,150878,150879],{"class":85},"student2 ",[68,150881,869],{"class":102},[68,150883,150806],{"class":85},[19,150885,150886,150889,150890,102592,150893,150896],{},[65,150887,150888],{},"Student"," 是类，",[65,150891,150892],{},"student1",[65,150894,150895],{},"student2"," 是对象。",[14,150898,150900],{"id":150899},"_113-属性","11.3 属性",[19,150902,150903],{},"属性是对象保存的数据。",[58,150905,150907],{"className":31971,"code":150906,"language":31973,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[65,150908,150909,150917,150921,150925,150929,150937,150945,150953,150957,150964],{"__ignoreMap":63},[68,150910,150911,150913,150915],{"class":70,"line":71},[68,150912,16291],{"class":102},[68,150914,9497],{"class":587},[68,150916,5338],{"class":85},[68,150918,150919],{"class":70,"line":78},[68,150920,150857],{"class":102},[68,150922,150923],{"class":70,"line":89},[68,150924,4000],{"emptyLinePlaceholder":1679},[68,150926,150927],{"class":70,"line":115},[68,150928,4000],{"emptyLinePlaceholder":1679},[68,150930,150931,150933,150935],{"class":70,"line":280},[68,150932,150801],{"class":85},[68,150934,869],{"class":102},[68,150936,150806],{"class":85},[68,150938,150939,150941,150943],{"class":70,"line":301},[68,150940,150811],{"class":85},[68,150942,869],{"class":102},[68,150944,150673],{"class":872},[68,150946,150947,150949,150951],{"class":70,"line":320},[68,150948,150820],{"class":85},[68,150950,869],{"class":102},[68,150952,147871],{"class":92},[68,150954,150955],{"class":70,"line":2915},[68,150956,4000],{"emptyLinePlaceholder":1679},[68,150958,150959,150961],{"class":70,"line":2921},[68,150960,32008],{"class":92},[68,150962,150963],{"class":85},"(student.name)\n",[68,150965,150966,150968],{"class":70,"line":2933},[68,150967,32008],{"class":92},[68,150969,150970],{"class":85},"(student.age)\n",[19,150972,150973],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150975,150977],{"id":150976},"_114-方法","11.4 方法",[19,150979,150980],{},"类中的函数叫方法。",[58,150982,150983],{"className":31971,"code":150741,"language":31973,"meta":63,"style":63},[65,150984,150985,150993,151001,151029,151033,151037,151045,151053,151061],{"__ignoreMap":63},[68,150986,150987,150989,150991],{"class":70,"line":71},[68,150988,16291],{"class":102},[68,150990,9497],{"class":587},[68,150992,5338],{"class":85},[68,150994,150995,150997,150999],{"class":70,"line":78},[68,150996,32394],{"class":102},[68,150998,150692],{"class":587},[68,151000,32400],{"class":85},[68,151002,151003,151005,151007,151009,151011,151013,151015,151017,151019,151021,151023,151025,151027],{"class":70,"line":89},[68,151004,34044],{"class":92},[68,151006,997],{"class":85},[68,151008,1801],{"class":102},[68,151010,150706],{"class":872},[68,151012,150772],{"class":92},[68,151014,81878],{"class":85},[68,151016,2681],{"class":92},[68,151018,150715],{"class":872},[68,151020,150772],{"class":92},[68,151022,81890],{"class":85},[68,151024,2681],{"class":92},[68,151026,150724],{"class":872},[68,151028,1757],{"class":85},[68,151030,151031],{"class":70,"line":115},[68,151032,4000],{"emptyLinePlaceholder":1679},[68,151034,151035],{"class":70,"line":280},[68,151036,4000],{"emptyLinePlaceholder":1679},[68,151038,151039,151041,151043],{"class":70,"line":301},[68,151040,150801],{"class":85},[68,151042,869],{"class":102},[68,151044,150806],{"class":85},[68,151046,151047,151049,151051],{"class":70,"line":320},[68,151048,150811],{"class":85},[68,151050,869],{"class":102},[68,151052,150673],{"class":872},[68,151054,151055,151057,151059],{"class":70,"line":2915},[68,151056,150820],{"class":85},[68,151058,869],{"class":102},[68,151060,147871],{"class":92},[68,151062,151063],{"class":70,"line":2921},[68,151064,150829],{"class":85},[19,151066,151067,151069,151070,151072],{},[65,151068,32416],{}," 表示当前对象。调用方法时不需要手动传入 ",[65,151071,32416],{},"，Python 会自动传。",[14,151074,151076],{"id":151075},"_115-构造方法__init__","11.5 构造方法__init__",[19,151078,151079,151081],{},[65,151080,32422],{}," 在对象创建时自动执行，用于初始化属性。",[58,151083,151085],{"className":31971,"code":151084,"language":31973,"meta":63,"style":63},"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",[65,151086,151087,151095,151104,151116,151128,151139,151143,151151,151189,151193,151197,151219],{"__ignoreMap":63},[68,151088,151089,151091,151093],{"class":70,"line":71},[68,151090,16291],{"class":102},[68,151092,9497],{"class":587},[68,151094,5338],{"class":85},[68,151096,151097,151099,151101],{"class":70,"line":78},[68,151098,32394],{"class":102},[68,151100,32397],{"class":92},[68,151102,151103],{"class":85},"(self, name, age, score):\n",[68,151105,151106,151108,151111,151113],{"class":70,"line":89},[68,151107,32438],{"class":92},[68,151109,151110],{"class":85},".name ",[68,151112,869],{"class":102},[68,151114,151115],{"class":85}," name\n",[68,151117,151118,151120,151123,151125],{"class":70,"line":115},[68,151119,32438],{"class":92},[68,151121,151122],{"class":85},".age ",[68,151124,869],{"class":102},[68,151126,151127],{"class":85}," age\n",[68,151129,151130,151132,151135,151137],{"class":70,"line":280},[68,151131,32438],{"class":92},[68,151133,151134],{"class":85},".score ",[68,151136,869],{"class":102},[68,151138,3181],{"class":85},[68,151140,151141],{"class":70,"line":301},[68,151142,4000],{"emptyLinePlaceholder":1679},[68,151144,151145,151147,151149],{"class":70,"line":320},[68,151146,32394],{"class":102},[68,151148,150692],{"class":587},[68,151150,32400],{"class":85},[68,151152,151153,151155,151157,151159,151161,151163,151165,151167,151169,151171,151173,151175,151178,151180,151183,151185,151187],{"class":70,"line":2915},[68,151154,34044],{"class":92},[68,151156,997],{"class":85},[68,151158,1801],{"class":102},[68,151160,150706],{"class":872},[68,151162,150772],{"class":92},[68,151164,81878],{"class":85},[68,151166,2681],{"class":92},[68,151168,150715],{"class":872},[68,151170,150772],{"class":92},[68,151172,81890],{"class":85},[68,151174,2681],{"class":92},[68,151176,151177],{"class":872},"岁，成绩",[68,151179,150772],{"class":92},[68,151181,151182],{"class":85},".score",[68,151184,2681],{"class":92},[68,151186,1987],{"class":872},[68,151188,1757],{"class":85},[68,151190,151191],{"class":70,"line":2921},[68,151192,4000],{"emptyLinePlaceholder":1679},[68,151194,151195],{"class":70,"line":2933},[68,151196,4000],{"emptyLinePlaceholder":1679},[68,151198,151199,151201,151203,151206,151209,151211,151213,151215,151217],{"class":70,"line":3214},[68,151200,150801],{"class":85},[68,151202,869],{"class":102},[68,151204,151205],{"class":85}," Student(",[68,151207,151208],{"class":872},"\"小明\"",[68,151210,1002],{"class":85},[68,151212,2386],{"class":92},[68,151214,1002],{"class":85},[68,151216,2724],{"class":92},[68,151218,1757],{"class":85},[68,151220,151221],{"class":70,"line":3219},[68,151222,150829],{"class":85},[19,151224,151225],{},"构造方法的好处：",[48,151227,151228,151231,151234],{},[51,151229,151230],{},"创建对象时必须提供必要数据。",[51,151232,151233],{},"属性初始化集中，不容易漏。",[51,151235,151236],{},"对象状态更完整。",[14,151238,151240,151241],{"id":151239},"_116-str","11.6 ",[1890,151242,2903],{},[19,151244,151245,151246,29978],{},"直接打印对象时，默认输出不直观。可以定义 ",[65,151247,151248],{},"__str__",[58,151250,151252],{"className":31971,"code":151251,"language":31973,"meta":63,"style":63},"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",[65,151253,151254,151262,151271,151281,151291,151295,151304,151332,151336,151340,151356],{"__ignoreMap":63},[68,151255,151256,151258,151260],{"class":70,"line":71},[68,151257,16291],{"class":102},[68,151259,9497],{"class":587},[68,151261,5338],{"class":85},[68,151263,151264,151266,151268],{"class":70,"line":78},[68,151265,32394],{"class":102},[68,151267,32397],{"class":92},[68,151269,151270],{"class":85},"(self, name, age):\n",[68,151272,151273,151275,151277,151279],{"class":70,"line":89},[68,151274,32438],{"class":92},[68,151276,151110],{"class":85},[68,151278,869],{"class":102},[68,151280,151115],{"class":85},[68,151282,151283,151285,151287,151289],{"class":70,"line":115},[68,151284,32438],{"class":92},[68,151286,151122],{"class":85},[68,151288,869],{"class":102},[68,151290,151127],{"class":85},[68,151292,151293],{"class":70,"line":280},[68,151294,4000],{"emptyLinePlaceholder":1679},[68,151296,151297,151299,151302],{"class":70,"line":301},[68,151298,32394],{"class":102},[68,151300,151301],{"class":92}," __str__",[68,151303,32400],{"class":85},[68,151305,151306,151308,151311,151314,151316,151318,151320,151323,151325,151327,151329],{"class":70,"line":320},[68,151307,16349],{"class":102},[68,151309,151310],{"class":102}," f",[68,151312,151313],{"class":872},"\"Student(name=",[68,151315,150772],{"class":92},[68,151317,81878],{"class":85},[68,151319,2681],{"class":92},[68,151321,151322],{"class":872},", age=",[68,151324,150772],{"class":92},[68,151326,81890],{"class":85},[68,151328,2681],{"class":92},[68,151330,151331],{"class":872},")\"\n",[68,151333,151334],{"class":70,"line":2915},[68,151335,4000],{"emptyLinePlaceholder":1679},[68,151337,151338],{"class":70,"line":2921},[68,151339,4000],{"emptyLinePlaceholder":1679},[68,151341,151342,151344,151346,151348,151350,151352,151354],{"class":70,"line":2933},[68,151343,150801],{"class":85},[68,151345,869],{"class":102},[68,151347,151205],{"class":85},[68,151349,151208],{"class":872},[68,151351,1002],{"class":85},[68,151353,2386],{"class":92},[68,151355,1757],{"class":85},[68,151357,151358,151360],{"class":70,"line":3214},[68,151359,32008],{"class":92},[68,151361,151362],{"class":85},"(student)\n",[14,151364,151366],{"id":151365},"_117-封装","11.7 封装",[19,151368,151369],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151371,151372],{},"Python 中以双下划线开头的属性通常视为私有属性。",[58,151374,151376],{"className":31971,"code":151375,"language":31973,"meta":63,"style":63},"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",[65,151377,151378,151387,151396,151408,151420,151424,151433,151442,151446,151456,151469,151480,151485,151496,151500,151509,151521,151532,151536,151549,151560,151564,151575,151579,151583,151601,151610,151619],{"__ignoreMap":63},[68,151379,151380,151382,151385],{"class":70,"line":71},[68,151381,16291],{"class":102},[68,151383,151384],{"class":587}," Account",[68,151386,5338],{"class":85},[68,151388,151389,151391,151393],{"class":70,"line":78},[68,151390,32394],{"class":102},[68,151392,32397],{"class":92},[68,151394,151395],{"class":85},"(self, owner, balance):\n",[68,151397,151398,151400,151403,151405],{"class":70,"line":89},[68,151399,32438],{"class":92},[68,151401,151402],{"class":85},".owner ",[68,151404,869],{"class":102},[68,151406,151407],{"class":85}," owner\n",[68,151409,151410,151412,151415,151417],{"class":70,"line":115},[68,151411,32438],{"class":92},[68,151413,151414],{"class":85},".__balance ",[68,151416,869],{"class":102},[68,151418,151419],{"class":85}," balance\n",[68,151421,151422],{"class":70,"line":280},[68,151423,4000],{"emptyLinePlaceholder":1679},[68,151425,151426,151428,151431],{"class":70,"line":301},[68,151427,32394],{"class":102},[68,151429,151430],{"class":587}," get_balance",[68,151432,32400],{"class":85},[68,151434,151435,151437,151439],{"class":70,"line":320},[68,151436,16349],{"class":102},[68,151438,40466],{"class":92},[68,151440,151441],{"class":85},".__balance\n",[68,151443,151444],{"class":70,"line":2915},[68,151445,4000],{"emptyLinePlaceholder":1679},[68,151447,151448,151450,151453],{"class":70,"line":2921},[68,151449,32394],{"class":102},[68,151451,151452],{"class":587}," deposit",[68,151454,151455],{"class":85},"(self, money):\n",[68,151457,151458,151460,151463,151465,151467],{"class":70,"line":2933},[68,151459,4097],{"class":102},[68,151461,151462],{"class":85}," money ",[68,151464,3190],{"class":102},[68,151466,5692],{"class":92},[68,151468,5338],{"class":85},[68,151470,151471,151473,151475,151478],{"class":70,"line":3214},[68,151472,36243],{"class":92},[68,151474,997],{"class":85},[68,151476,151477],{"class":872},"\"存款金额必须大于0\"",[68,151479,1757],{"class":85},[68,151481,151482],{"class":70,"line":3219},[68,151483,151484],{"class":102},"            return\n",[68,151486,151487,151489,151491,151493],{"class":70,"line":3225},[68,151488,32438],{"class":92},[68,151490,151414],{"class":85},[68,151492,11075],{"class":102},[68,151494,151495],{"class":85}," money\n",[68,151497,151498],{"class":70,"line":3230},[68,151499,4000],{"emptyLinePlaceholder":1679},[68,151501,151502,151504,151507],{"class":70,"line":3244},[68,151503,32394],{"class":102},[68,151505,151506],{"class":587}," withdraw",[68,151508,151455],{"class":85},[68,151510,151511,151513,151515,151517,151519],{"class":70,"line":3249},[68,151512,4097],{"class":102},[68,151514,151462],{"class":85},[68,151516,3190],{"class":102},[68,151518,5692],{"class":92},[68,151520,5338],{"class":85},[68,151522,151523,151525,151527,151530],{"class":70,"line":3255},[68,151524,36243],{"class":92},[68,151526,997],{"class":85},[68,151528,151529],{"class":872},"\"取款金额必须大于0\"",[68,151531,1757],{"class":85},[68,151533,151534],{"class":70,"line":3276},[68,151535,151484],{"class":102},[68,151537,151538,151540,151542,151544,151546],{"class":70,"line":3281},[68,151539,4097],{"class":102},[68,151541,151462],{"class":85},[68,151543,2695],{"class":102},[68,151545,40466],{"class":92},[68,151547,151548],{"class":85},".__balance:\n",[68,151550,151551,151553,151555,151558],{"class":70,"line":3295},[68,151552,36243],{"class":92},[68,151554,997],{"class":85},[68,151556,151557],{"class":872},"\"余额不足\"",[68,151559,1757],{"class":85},[68,151561,151562],{"class":70,"line":3300},[68,151563,151484],{"class":102},[68,151565,151566,151568,151570,151573],{"class":70,"line":3329},[68,151567,32438],{"class":92},[68,151569,151414],{"class":85},[68,151571,151572],{"class":102},"-=",[68,151574,151495],{"class":85},[68,151576,151577],{"class":70,"line":3334},[68,151578,4000],{"emptyLinePlaceholder":1679},[68,151580,151581],{"class":70,"line":3351},[68,151582,4000],{"emptyLinePlaceholder":1679},[68,151584,151585,151588,151590,151593,151595,151597,151599],{"class":70,"line":3356},[68,151586,151587],{"class":85},"account ",[68,151589,869],{"class":102},[68,151591,151592],{"class":85}," Account(",[68,151594,151208],{"class":872},[68,151596,1002],{"class":85},[68,151598,8009],{"class":92},[68,151600,1757],{"class":85},[68,151602,151603,151606,151608],{"class":70,"line":3361},[68,151604,151605],{"class":85},"account.deposit(",[68,151607,3324],{"class":92},[68,151609,1757],{"class":85},[68,151611,151612,151615,151617],{"class":70,"line":3366},[68,151613,151614],{"class":85},"account.withdraw(",[68,151616,2047],{"class":92},[68,151618,1757],{"class":85},[68,151620,151621,151623],{"class":70,"line":3380},[68,151622,32008],{"class":92},[68,151624,151625],{"class":85},"(account.get_balance())\n",[19,151627,151628],{},"封装的意义是避免外部随意修改内部状态。",[14,151630,151632],{"id":151631},"_118-继承","11.8 继承",[19,151634,151635],{},"继承可以让子类复用父类的属性和方法。",[58,151637,151639],{"className":31971,"code":151638,"language":31973,"meta":63,"style":63},"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",[65,151640,151641,151650,151659,151670,151674,151678,151692,151701,151712,151716,151720,151730,151735],{"__ignoreMap":63},[68,151642,151643,151645,151648],{"class":70,"line":71},[68,151644,16291],{"class":102},[68,151646,151647],{"class":587}," Animal",[68,151649,5338],{"class":85},[68,151651,151652,151654,151657],{"class":70,"line":78},[68,151653,32394],{"class":102},[68,151655,151656],{"class":587}," eat",[68,151658,32400],{"class":85},[68,151660,151661,151663,151665,151668],{"class":70,"line":89},[68,151662,34044],{"class":92},[68,151664,997],{"class":85},[68,151666,151667],{"class":872},"\"吃东西\"",[68,151669,1757],{"class":85},[68,151671,151672],{"class":70,"line":115},[68,151673,4000],{"emptyLinePlaceholder":1679},[68,151675,151676],{"class":70,"line":280},[68,151677,4000],{"emptyLinePlaceholder":1679},[68,151679,151680,151682,151685,151687,151690],{"class":70,"line":301},[68,151681,16291],{"class":102},[68,151683,151684],{"class":587}," Dog",[68,151686,997],{"class":85},[68,151688,151689],{"class":587},"Animal",[68,151691,32379],{"class":85},[68,151693,151694,151696,151699],{"class":70,"line":320},[68,151695,32394],{"class":102},[68,151697,151698],{"class":587}," bark",[68,151700,32400],{"class":85},[68,151702,151703,151705,151707,151710],{"class":70,"line":2915},[68,151704,34044],{"class":92},[68,151706,997],{"class":85},[68,151708,151709],{"class":872},"\"汪汪\"",[68,151711,1757],{"class":85},[68,151713,151714],{"class":70,"line":2921},[68,151715,4000],{"emptyLinePlaceholder":1679},[68,151717,151718],{"class":70,"line":2933},[68,151719,4000],{"emptyLinePlaceholder":1679},[68,151721,151722,151725,151727],{"class":70,"line":3214},[68,151723,151724],{"class":85},"dog ",[68,151726,869],{"class":102},[68,151728,151729],{"class":85}," Dog()\n",[68,151731,151732],{"class":70,"line":3219},[68,151733,151734],{"class":85},"dog.eat()\n",[68,151736,151737],{"class":70,"line":3225},[68,151738,151739],{"class":85},"dog.bark()\n",[19,151741,151742],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151744,151746],{"id":151745},"_119-方法重写","11.9 方法重写",[58,151748,151750],{"className":31971,"code":151749,"language":31973,"meta":63,"style":63},"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",[65,151751,151752,151760,151769,151780,151784,151788,151800,151808,151818,151822,151826,151839,151847,151858,151862,151866,151874,151884,151888,151893],{"__ignoreMap":63},[68,151753,151754,151756,151758],{"class":70,"line":71},[68,151755,16291],{"class":102},[68,151757,151647],{"class":587},[68,151759,5338],{"class":85},[68,151761,151762,151764,151767],{"class":70,"line":78},[68,151763,32394],{"class":102},[68,151765,151766],{"class":587}," speak",[68,151768,32400],{"class":85},[68,151770,151771,151773,151775,151778],{"class":70,"line":89},[68,151772,34044],{"class":92},[68,151774,997],{"class":85},[68,151776,151777],{"class":872},"\"动物叫\"",[68,151779,1757],{"class":85},[68,151781,151782],{"class":70,"line":115},[68,151783,4000],{"emptyLinePlaceholder":1679},[68,151785,151786],{"class":70,"line":280},[68,151787,4000],{"emptyLinePlaceholder":1679},[68,151789,151790,151792,151794,151796,151798],{"class":70,"line":301},[68,151791,16291],{"class":102},[68,151793,151684],{"class":587},[68,151795,997],{"class":85},[68,151797,151689],{"class":587},[68,151799,32379],{"class":85},[68,151801,151802,151804,151806],{"class":70,"line":320},[68,151803,32394],{"class":102},[68,151805,151766],{"class":587},[68,151807,32400],{"class":85},[68,151809,151810,151812,151814,151816],{"class":70,"line":2915},[68,151811,34044],{"class":92},[68,151813,997],{"class":85},[68,151815,151709],{"class":872},[68,151817,1757],{"class":85},[68,151819,151820],{"class":70,"line":2921},[68,151821,4000],{"emptyLinePlaceholder":1679},[68,151823,151824],{"class":70,"line":2933},[68,151825,4000],{"emptyLinePlaceholder":1679},[68,151827,151828,151830,151833,151835,151837],{"class":70,"line":3214},[68,151829,16291],{"class":102},[68,151831,151832],{"class":587}," Cat",[68,151834,997],{"class":85},[68,151836,151689],{"class":587},[68,151838,32379],{"class":85},[68,151840,151841,151843,151845],{"class":70,"line":3219},[68,151842,32394],{"class":102},[68,151844,151766],{"class":587},[68,151846,32400],{"class":85},[68,151848,151849,151851,151853,151856],{"class":70,"line":3225},[68,151850,34044],{"class":92},[68,151852,997],{"class":85},[68,151854,151855],{"class":872},"\"喵喵\"",[68,151857,1757],{"class":85},[68,151859,151860],{"class":70,"line":3230},[68,151861,4000],{"emptyLinePlaceholder":1679},[68,151863,151864],{"class":70,"line":3244},[68,151865,4000],{"emptyLinePlaceholder":1679},[68,151867,151868,151870,151872],{"class":70,"line":3249},[68,151869,151724],{"class":85},[68,151871,869],{"class":102},[68,151873,151729],{"class":85},[68,151875,151876,151879,151881],{"class":70,"line":3255},[68,151877,151878],{"class":85},"cat ",[68,151880,869],{"class":102},[68,151882,151883],{"class":85}," Cat()\n",[68,151885,151886],{"class":70,"line":3276},[68,151887,4000],{"emptyLinePlaceholder":1679},[68,151889,151890],{"class":70,"line":3281},[68,151891,151892],{"class":85},"dog.speak()\n",[68,151894,151895],{"class":70,"line":3295},[68,151896,151897],{"class":85},"cat.speak()\n",[14,151899,151901],{"id":151900},"_1110-super","11.10 super",[19,151903,151904,151905,151908],{},"子类可以通过 ",[65,151906,151907],{},"super()"," 调用父类方法。",[58,151910,151912],{"className":31971,"code":151911,"language":31973,"meta":63,"style":63},"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",[65,151913,151914,151922,151931,151941,151945,151949,151961,151970,151981,151991,151995,151999,152015],{"__ignoreMap":63},[68,151915,151916,151918,151920],{"class":70,"line":71},[68,151917,16291],{"class":102},[68,151919,17165],{"class":587},[68,151921,5338],{"class":85},[68,151923,151924,151926,151928],{"class":70,"line":78},[68,151925,32394],{"class":102},[68,151927,32397],{"class":92},[68,151929,151930],{"class":85},"(self, name):\n",[68,151932,151933,151935,151937,151939],{"class":70,"line":89},[68,151934,32438],{"class":92},[68,151936,151110],{"class":85},[68,151938,869],{"class":102},[68,151940,151115],{"class":85},[68,151942,151943],{"class":70,"line":115},[68,151944,4000],{"emptyLinePlaceholder":1679},[68,151946,151947],{"class":70,"line":280},[68,151948,4000],{"emptyLinePlaceholder":1679},[68,151950,151951,151953,151955,151957,151959],{"class":70,"line":301},[68,151952,16291],{"class":102},[68,151954,9497],{"class":587},[68,151956,997],{"class":85},[68,151958,20641],{"class":587},[68,151960,32379],{"class":85},[68,151962,151963,151965,151967],{"class":70,"line":320},[68,151964,32394],{"class":102},[68,151966,32397],{"class":92},[68,151968,151969],{"class":85},"(self, name, score):\n",[68,151971,151972,151974,151976,151978],{"class":70,"line":2915},[68,151973,32410],{"class":92},[68,151975,18856],{"class":85},[68,151977,32422],{"class":92},[68,151979,151980],{"class":85},"(name)\n",[68,151982,151983,151985,151987,151989],{"class":70,"line":2921},[68,151984,32438],{"class":92},[68,151986,151134],{"class":85},[68,151988,869],{"class":102},[68,151990,3181],{"class":85},[68,151992,151993],{"class":70,"line":2933},[68,151994,4000],{"emptyLinePlaceholder":1679},[68,151996,151997],{"class":70,"line":3214},[68,151998,4000],{"emptyLinePlaceholder":1679},[68,152000,152001,152003,152005,152007,152009,152011,152013],{"class":70,"line":3219},[68,152002,150801],{"class":85},[68,152004,869],{"class":102},[68,152006,151205],{"class":85},[68,152008,151208],{"class":872},[68,152010,1002],{"class":85},[68,152012,2724],{"class":92},[68,152014,1757],{"class":85},[68,152016,152017,152019],{"class":70,"line":3225},[68,152018,32008],{"class":92},[68,152020,152021],{"class":85},"(student.name, student.score)\n",[14,152023,152025],{"id":152024},"_1111-多态","11.11 多态",[19,152027,152028],{},"多态指不同对象响应同一个方法，表现出不同结果。",[58,152030,152032],{"className":31971,"code":152031,"language":31973,"meta":63,"style":63},"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",[65,152033,152034,152042,152050,152060,152064,152068,152076,152084,152094,152098,152102,152112,152117,152121,152125,152130],{"__ignoreMap":63},[68,152035,152036,152038,152040],{"class":70,"line":71},[68,152037,16291],{"class":102},[68,152039,151684],{"class":587},[68,152041,5338],{"class":85},[68,152043,152044,152046,152048],{"class":70,"line":78},[68,152045,32394],{"class":102},[68,152047,151766],{"class":587},[68,152049,32400],{"class":85},[68,152051,152052,152054,152056,152058],{"class":70,"line":89},[68,152053,34044],{"class":92},[68,152055,997],{"class":85},[68,152057,151709],{"class":872},[68,152059,1757],{"class":85},[68,152061,152062],{"class":70,"line":115},[68,152063,4000],{"emptyLinePlaceholder":1679},[68,152065,152066],{"class":70,"line":280},[68,152067,4000],{"emptyLinePlaceholder":1679},[68,152069,152070,152072,152074],{"class":70,"line":301},[68,152071,16291],{"class":102},[68,152073,151832],{"class":587},[68,152075,5338],{"class":85},[68,152077,152078,152080,152082],{"class":70,"line":320},[68,152079,32394],{"class":102},[68,152081,151766],{"class":587},[68,152083,32400],{"class":85},[68,152085,152086,152088,152090,152092],{"class":70,"line":2915},[68,152087,34044],{"class":92},[68,152089,997],{"class":85},[68,152091,151855],{"class":872},[68,152093,1757],{"class":85},[68,152095,152096],{"class":70,"line":2921},[68,152097,4000],{"emptyLinePlaceholder":1679},[68,152099,152100],{"class":70,"line":2933},[68,152101,4000],{"emptyLinePlaceholder":1679},[68,152103,152104,152106,152109],{"class":70,"line":3214},[68,152105,33540],{"class":102},[68,152107,152108],{"class":587}," make_sound",[68,152110,152111],{"class":85},"(animal):\n",[68,152113,152114],{"class":70,"line":3219},[68,152115,152116],{"class":85},"    animal.speak()\n",[68,152118,152119],{"class":70,"line":3225},[68,152120,4000],{"emptyLinePlaceholder":1679},[68,152122,152123],{"class":70,"line":3230},[68,152124,4000],{"emptyLinePlaceholder":1679},[68,152126,152127],{"class":70,"line":3244},[68,152128,152129],{"class":85},"make_sound(Dog())\n",[68,152131,152132],{"class":70,"line":3249},[68,152133,152134],{"class":85},"make_sound(Cat())\n",[19,152136,152137],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152139,152141],{"id":152140},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152143,152144],{},"实例属性属于对象：",[58,152146,152148],{"className":31971,"code":152147,"language":31973,"meta":63,"style":63},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[65,152149,152150,152158,152166],{"__ignoreMap":63},[68,152151,152152,152154,152156],{"class":70,"line":71},[68,152153,16291],{"class":102},[68,152155,9497],{"class":587},[68,152157,5338],{"class":85},[68,152159,152160,152162,152164],{"class":70,"line":78},[68,152161,32394],{"class":102},[68,152163,32397],{"class":92},[68,152165,151930],{"class":85},[68,152167,152168,152170,152172,152174],{"class":70,"line":89},[68,152169,32438],{"class":92},[68,152171,151110],{"class":85},[68,152173,869],{"class":102},[68,152175,151115],{"class":85},[19,152177,152178],{},"类属性属于类，所有对象共享：",[58,152180,152182],{"className":31971,"code":152181,"language":31973,"meta":63,"style":63},"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",[65,152183,152184,152192,152202,152206,152214,152224,152228,152232,152245,152259,152263,152270,152277],{"__ignoreMap":63},[68,152185,152186,152188,152190],{"class":70,"line":71},[68,152187,16291],{"class":102},[68,152189,9497],{"class":587},[68,152191,5338],{"class":85},[68,152193,152194,152197,152199],{"class":70,"line":78},[68,152195,152196],{"class":85},"    school ",[68,152198,869],{"class":102},[68,152200,152201],{"class":872}," \"黑马学校\"\n",[68,152203,152204],{"class":70,"line":89},[68,152205,4000],{"emptyLinePlaceholder":1679},[68,152207,152208,152210,152212],{"class":70,"line":115},[68,152209,32394],{"class":102},[68,152211,32397],{"class":92},[68,152213,151930],{"class":85},[68,152215,152216,152218,152220,152222],{"class":70,"line":280},[68,152217,32438],{"class":92},[68,152219,151110],{"class":85},[68,152221,869],{"class":102},[68,152223,151115],{"class":85},[68,152225,152226],{"class":70,"line":301},[68,152227,4000],{"emptyLinePlaceholder":1679},[68,152229,152230],{"class":70,"line":320},[68,152231,4000],{"emptyLinePlaceholder":1679},[68,152233,152234,152237,152239,152241,152243],{"class":70,"line":2915},[68,152235,152236],{"class":85},"s1 ",[68,152238,869],{"class":102},[68,152240,151205],{"class":85},[68,152242,151208],{"class":872},[68,152244,1757],{"class":85},[68,152246,152247,152250,152252,152254,152257],{"class":70,"line":2921},[68,152248,152249],{"class":85},"s2 ",[68,152251,869],{"class":102},[68,152253,151205],{"class":85},[68,152255,152256],{"class":872},"\"小红\"",[68,152258,1757],{"class":85},[68,152260,152261],{"class":70,"line":2933},[68,152262,4000],{"emptyLinePlaceholder":1679},[68,152264,152265,152267],{"class":70,"line":3214},[68,152266,32008],{"class":92},[68,152268,152269],{"class":85},"(s1.school)\n",[68,152271,152272,152274],{"class":70,"line":3219},[68,152273,32008],{"class":92},[68,152275,152276],{"class":85},"(s2.school)\n",[68,152278,152279,152281],{"class":70,"line":3225},[68,152280,32008],{"class":92},[68,152282,152283],{"class":85},"(Student.school)\n",[19,152285,152286],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152288,152290],{"id":152289},"_1113-类方法和静态方法","11.13 类方法和静态方法",[43,152292,152294],{"id":152293},"_11131-类方法","11.13.1 类方法",[19,152296,152297,152298,152301,152302,29978],{},"类方法使用 ",[65,152299,152300],{},"@classmethod","，第一个参数通常是 ",[65,152303,152304],{},"cls",[58,152306,152308],{"className":31971,"code":152307,"language":31973,"meta":63,"style":63},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[65,152309,152310,152318,152326,152330,152338,152348,152358,152362,152366],{"__ignoreMap":63},[68,152311,152312,152314,152316],{"class":70,"line":71},[68,152313,16291],{"class":102},[68,152315,9497],{"class":587},[68,152317,5338],{"class":85},[68,152319,152320,152322,152324],{"class":70,"line":78},[68,152321,152196],{"class":85},[68,152323,869],{"class":102},[68,152325,152201],{"class":872},[68,152327,152328],{"class":70,"line":89},[68,152329,4000],{"emptyLinePlaceholder":1679},[68,152331,152332,152335],{"class":70,"line":115},[68,152333,152334],{"class":587},"    @",[68,152336,152337],{"class":92},"classmethod\n",[68,152339,152340,152342,152345],{"class":70,"line":280},[68,152341,32394],{"class":102},[68,152343,152344],{"class":587}," get_school",[68,152346,152347],{"class":85},"(cls):\n",[68,152349,152350,152352,152355],{"class":70,"line":301},[68,152351,16349],{"class":102},[68,152353,152354],{"class":92}," cls",[68,152356,152357],{"class":85},".school\n",[68,152359,152360],{"class":70,"line":320},[68,152361,4000],{"emptyLinePlaceholder":1679},[68,152363,152364],{"class":70,"line":2915},[68,152365,4000],{"emptyLinePlaceholder":1679},[68,152367,152368,152370],{"class":70,"line":2921},[68,152369,32008],{"class":92},[68,152371,152372],{"class":85},"(Student.get_school())\n",[43,152374,152376],{"id":152375},"_11132-静态方法","11.13.2 静态方法",[19,152378,152379,152380,152383],{},"静态方法使用 ",[65,152381,152382],{},"@staticmethod","，不需要访问实例和类。",[58,152385,152387],{"className":31971,"code":152386,"language":31973,"meta":63,"style":63},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[65,152388,152389,152398,152405,152414,152425,152429,152433],{"__ignoreMap":63},[68,152390,152391,152393,152396],{"class":70,"line":71},[68,152392,16291],{"class":102},[68,152394,152395],{"class":587}," MathUtils",[68,152397,5338],{"class":85},[68,152399,152400,152402],{"class":70,"line":78},[68,152401,152334],{"class":587},[68,152403,152404],{"class":92},"staticmethod\n",[68,152406,152407,152409,152411],{"class":70,"line":89},[68,152408,32394],{"class":102},[68,152410,6808],{"class":587},[68,152412,152413],{"class":85},"(a, b):\n",[68,152415,152416,152418,152420,152422],{"class":70,"line":115},[68,152417,16349],{"class":102},[68,152419,12467],{"class":85},[68,152421,2217],{"class":102},[68,152423,152424],{"class":85}," b\n",[68,152426,152427],{"class":70,"line":280},[68,152428,4000],{"emptyLinePlaceholder":1679},[68,152430,152431],{"class":70,"line":301},[68,152432,4000],{"emptyLinePlaceholder":1679},[68,152434,152435,152437,152440,152442,152444,152446],{"class":70,"line":320},[68,152436,32008],{"class":92},[68,152438,152439],{"class":85},"(MathUtils.add(",[68,152441,99],{"class":92},[68,152443,1002],{"class":85},[68,152445,267],{"class":92},[68,152447,32090],{"class":85},[19,152449,152450],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152452,152454],{"id":152453},"_1114-dataclass","11.14 dataclass",[19,152456,152457,152460],{},[65,152458,152459],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[58,152462,152464],{"className":31971,"code":152463,"language":31973,"meta":63,"style":63},"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",[65,152465,152466,152478,152482,152486,152491,152499,152507,152515,152523,152527,152531,152551],{"__ignoreMap":63},[68,152467,152468,152470,152473,152475],{"class":70,"line":71},[68,152469,32330],{"class":102},[68,152471,152472],{"class":85}," dataclasses ",[68,152474,31985],{"class":102},[68,152476,152477],{"class":85}," dataclass\n",[68,152479,152480],{"class":70,"line":78},[68,152481,4000],{"emptyLinePlaceholder":1679},[68,152483,152484],{"class":70,"line":89},[68,152485,4000],{"emptyLinePlaceholder":1679},[68,152487,152488],{"class":70,"line":115},[68,152489,152490],{"class":587},"@dataclass\n",[68,152492,152493,152495,152497],{"class":70,"line":280},[68,152494,16291],{"class":102},[68,152496,9497],{"class":587},[68,152498,5338],{"class":85},[68,152500,152501,152504],{"class":70,"line":301},[68,152502,152503],{"class":85},"    name: ",[68,152505,152506],{"class":92},"str\n",[68,152508,152509,152512],{"class":70,"line":320},[68,152510,152511],{"class":85},"    age: ",[68,152513,152514],{"class":92},"int\n",[68,152516,152517,152520],{"class":70,"line":2915},[68,152518,152519],{"class":85},"    score: ",[68,152521,152522],{"class":92},"float\n",[68,152524,152525],{"class":70,"line":2921},[68,152526,4000],{"emptyLinePlaceholder":1679},[68,152528,152529],{"class":70,"line":2933},[68,152530,4000],{"emptyLinePlaceholder":1679},[68,152532,152533,152535,152537,152539,152541,152543,152545,152547,152549],{"class":70,"line":3214},[68,152534,150801],{"class":85},[68,152536,869],{"class":102},[68,152538,151205],{"class":85},[68,152540,151208],{"class":872},[68,152542,1002],{"class":85},[68,152544,2386],{"class":92},[68,152546,1002],{"class":85},[68,152548,2724],{"class":92},[68,152550,1757],{"class":85},[68,152552,152553,152555],{"class":70,"line":3219},[68,152554,32008],{"class":92},[68,152556,151362],{"class":85},[19,152558,152559,152560,1949,152562,152565],{},"它会自动生成 ",[65,152561,32422],{},[65,152563,152564],{},"__repr__"," 等方法。适合数据模型类。",[14,152567,152569],{"id":152568},"_1115-小案例学生类","11.15 小案例：学生类",[58,152571,152573],{"className":31971,"code":152572,"language":31973,"meta":63,"style":63},"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",[65,152574,152575,152583,152592,152604,152614,152624,152634,152638,152647,152660,152664,152673,152679,152691,152703,152715,152727,152731,152735,152741,152751,152760,152770,152778,152786,152795,152799,152803,152811,152847,152851,152855,152880,152887],{"__ignoreMap":63},[68,152576,152577,152579,152581],{"class":70,"line":71},[68,152578,16291],{"class":102},[68,152580,9497],{"class":587},[68,152582,5338],{"class":85},[68,152584,152585,152587,152589],{"class":70,"line":78},[68,152586,32394],{"class":102},[68,152588,32397],{"class":92},[68,152590,152591],{"class":85},"(self, student_id, name, age, score):\n",[68,152593,152594,152596,152599,152601],{"class":70,"line":89},[68,152595,32438],{"class":92},[68,152597,152598],{"class":85},".student_id ",[68,152600,869],{"class":102},[68,152602,152603],{"class":85}," student_id\n",[68,152605,152606,152608,152610,152612],{"class":70,"line":115},[68,152607,32438],{"class":92},[68,152609,151110],{"class":85},[68,152611,869],{"class":102},[68,152613,151115],{"class":85},[68,152615,152616,152618,152620,152622],{"class":70,"line":280},[68,152617,32438],{"class":92},[68,152619,151122],{"class":85},[68,152621,869],{"class":102},[68,152623,151127],{"class":85},[68,152625,152626,152628,152630,152632],{"class":70,"line":301},[68,152627,32438],{"class":92},[68,152629,151134],{"class":85},[68,152631,869],{"class":102},[68,152633,3181],{"class":85},[68,152635,152636],{"class":70,"line":320},[68,152637,4000],{"emptyLinePlaceholder":1679},[68,152639,152640,152642,152645],{"class":70,"line":2915},[68,152641,32394],{"class":102},[68,152643,152644],{"class":587}," is_passed",[68,152646,32400],{"class":85},[68,152648,152649,152651,152653,152655,152657],{"class":70,"line":2921},[68,152650,16349],{"class":102},[68,152652,40466],{"class":92},[68,152654,151134],{"class":85},[68,152656,3312],{"class":102},[68,152658,152659],{"class":92}," 60\n",[68,152661,152662],{"class":70,"line":2933},[68,152663,4000],{"emptyLinePlaceholder":1679},[68,152665,152666,152668,152671],{"class":70,"line":3214},[68,152667,32394],{"class":102},[68,152669,152670],{"class":587}," to_dict",[68,152672,32400],{"class":85},[68,152674,152675,152677],{"class":70,"line":3219},[68,152676,16349],{"class":102},[68,152678,86],{"class":85},[68,152680,152681,152684,152686,152688],{"class":70,"line":3225},[68,152682,152683],{"class":872},"            \"student_id\"",[68,152685,96],{"class":85},[68,152687,32416],{"class":92},[68,152689,152690],{"class":85},".student_id,\n",[68,152692,152693,152696,152698,152700],{"class":70,"line":3230},[68,152694,152695],{"class":872},"            \"name\"",[68,152697,96],{"class":85},[68,152699,32416],{"class":92},[68,152701,152702],{"class":85},".name,\n",[68,152704,152705,152708,152710,152712],{"class":70,"line":3244},[68,152706,152707],{"class":872},"            \"age\"",[68,152709,96],{"class":85},[68,152711,32416],{"class":92},[68,152713,152714],{"class":85},".age,\n",[68,152716,152717,152720,152722,152724],{"class":70,"line":3249},[68,152718,152719],{"class":872},"            \"score\"",[68,152721,96],{"class":85},[68,152723,32416],{"class":92},[68,152725,152726],{"class":85},".score,\n",[68,152728,152729],{"class":70,"line":3255},[68,152730,4129],{"class":85},[68,152732,152733],{"class":70,"line":3276},[68,152734,4000],{"emptyLinePlaceholder":1679},[68,152736,152737,152739],{"class":70,"line":3281},[68,152738,152334],{"class":587},[68,152740,152337],{"class":92},[68,152742,152743,152745,152748],{"class":70,"line":3295},[68,152744,32394],{"class":102},[68,152746,152747],{"class":587}," from_dict",[68,152749,152750],{"class":85},"(cls, data):\n",[68,152752,152753,152755,152757],{"class":70,"line":3300},[68,152754,16349],{"class":102},[68,152756,152354],{"class":92},[68,152758,152759],{"class":85},"(\n",[68,152761,152762,152765,152768],{"class":70,"line":3329},[68,152763,152764],{"class":85},"            data[",[68,152766,152767],{"class":872},"\"student_id\"",[68,152769,89412],{"class":85},[68,152771,152772,152774,152776],{"class":70,"line":3334},[68,152773,152764],{"class":85},[68,152775,64262],{"class":872},[68,152777,89412],{"class":85},[68,152779,152780,152782,152784],{"class":70,"line":3351},[68,152781,152764],{"class":85},[68,152783,70706],{"class":872},[68,152785,89412],{"class":85},[68,152787,152788,152790,152793],{"class":70,"line":3356},[68,152789,152764],{"class":85},[68,152791,152792],{"class":872},"\"score\"",[68,152794,89412],{"class":85},[68,152796,152797],{"class":70,"line":3361},[68,152798,39719],{"class":85},[68,152800,152801],{"class":70,"line":3366},[68,152802,4000],{"emptyLinePlaceholder":1679},[68,152804,152805,152807,152809],{"class":70,"line":3380},[68,152806,32394],{"class":102},[68,152808,151301],{"class":92},[68,152810,32400],{"class":85},[68,152812,152813,152815,152817,152819,152821,152824,152826,152829,152831,152833,152835,152837,152839,152841,152843,152845],{"class":70,"line":3385},[68,152814,16349],{"class":102},[68,152816,151310],{"class":102},[68,152818,1987],{"class":872},[68,152820,150772],{"class":92},[68,152822,152823],{"class":85},".student_id",[68,152825,2681],{"class":92},[68,152827,152828],{"class":92}," {self",[68,152830,81878],{"class":85},[68,152832,2681],{"class":92},[68,152834,152828],{"class":92},[68,152836,81890],{"class":85},[68,152838,2681],{"class":92},[68,152840,152828],{"class":92},[68,152842,151182],{"class":85},[68,152844,2681],{"class":92},[68,152846,26727],{"class":872},[68,152848,152849],{"class":70,"line":4177},[68,152850,4000],{"emptyLinePlaceholder":1679},[68,152852,152853],{"class":70,"line":4191},[68,152854,4000],{"emptyLinePlaceholder":1679},[68,152856,152857,152859,152861,152863,152866,152868,152870,152872,152874,152876,152878],{"class":70,"line":4199},[68,152858,150801],{"class":85},[68,152860,869],{"class":102},[68,152862,151205],{"class":85},[68,152864,152865],{"class":872},"\"001\"",[68,152867,1002],{"class":85},[68,152869,151208],{"class":872},[68,152871,1002],{"class":85},[68,152873,2386],{"class":92},[68,152875,1002],{"class":85},[68,152877,2724],{"class":92},[68,152879,1757],{"class":85},[68,152881,152882,152884],{"class":70,"line":4204},[68,152883,32008],{"class":92},[68,152885,152886],{"class":85},"(student.is_passed())\n",[68,152888,152889,152891],{"class":70,"line":4210},[68,152890,32008],{"class":92},[68,152892,152893],{"class":85},"(student.to_dict())\n",[19,152895,152896,102592,152899,152902],{},[65,152897,152898],{},"to_dict()",[65,152900,152901],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152904,152906],{"id":152905},"_1116-易错点","11.16 易错点",[48,152908,152909,152915,152921,152926,152929,152932],{},[51,152910,152911,152912,29978],{},"类名推荐使用大驼峰，如 ",[65,152913,152914],{},"StudentManager",[51,152916,152917,152918,152920],{},"方法第一个参数必须写 ",[65,152919,32416],{},"，调用时不用传。",[51,152922,152923,152925],{},[65,152924,32422],{}," 不是普通方法，它在创建对象时自动执行。",[51,152927,152928],{},"私有属性不是绝对安全，只是约定和名称改写。",[51,152930,152931],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[51,152933,152934],{},"类中方法太多时，说明职责可能过重。",[14,152936,152938],{"id":152937},"_1117-本章练习","11.17 本章练习",[48,152940,152941,152947,152953,152958,152971],{},[51,152942,152943,152944,152946],{},"定义 ",[65,152945,150888],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[51,152948,152943,152949,152952],{},[65,152950,152951],{},"Account"," 类，实现存款、取款、查询余额。",[51,152954,152943,152955,152957],{},[65,152956,18821],{}," 类，计算圆的周长和面积。",[51,152959,152943,152960,1949,152963,152966,152967,152970],{},[65,152961,152962],{},"Dog",[65,152964,152965],{},"Cat"," 类，并用同一个函数调用它们的 ",[65,152968,152969],{},"speak()"," 方法。",[51,152972,105939,152973,152975,152976,29978],{},[65,152974,152459],{}," 定义一个商品类 ",[65,152977,152978],{},"Product",[1652,152980,152981],{},"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":63,"searchDepth":78,"depth":78,"links":152983},[152984,152985,152986,152987,152988,152989,152991,152992,152993,152994,152995,152996,152997,153001,153002,153003,153004],{"id":150652,"depth":78,"text":150653},{"id":150835,"depth":78,"text":150836},{"id":150899,"depth":78,"text":150900},{"id":150976,"depth":78,"text":150977},{"id":151075,"depth":78,"text":151076},{"id":151239,"depth":78,"text":152990},"11.6 str",{"id":151365,"depth":78,"text":151366},{"id":151631,"depth":78,"text":151632},{"id":151745,"depth":78,"text":151746},{"id":151900,"depth":78,"text":151901},{"id":152024,"depth":78,"text":152025},{"id":152140,"depth":78,"text":152141},{"id":152289,"depth":78,"text":152290,"children":152998},[152999,153000],{"id":152293,"depth":89,"text":152294},{"id":152375,"depth":89,"text":152376},{"id":152453,"depth":78,"text":152454},{"id":152568,"depth":78,"text":152569},{"id":152905,"depth":78,"text":152906},{"id":152937,"depth":78,"text":152938},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150644,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153011,"title":153012,"body":153013,"description":1676,"extension":1677,"meta":156326,"navigation":1679,"path":156327,"seo":156328,"stem":156329,"__hash__":156330},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153014,"toc":156302},[153015,153018,153022,153025,153028,153057,153060,153068,153072,153076,153079,153102,153105,153111,153115,154561,154564,154585,154589,154592,154604,154607,154791,154794,154920,154923,154927,154931,155067,155071,155157,155161,155243,155247,155284,155288,155477,155481,155484,155714,155718,155721,155902,155905,155909,155912,155918,155921,155947,155951,155954,155968,155971,155996,155999,156013,156016,156033,156036,156053,156056,156073,156077,156103,156107,156130,156134,156137,156139,156145,156147,156168,156171,156177,156183,156187,156190,156266,156269,156273,156299],[10,153016,153012],{"id":153017},"_12-综合案例与复习路线",[14,153019,153021],{"id":153020},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153023,153024],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153026,153027],{},"一个合格的入门综合项目最好覆盖：",[48,153029,153030,153033,153036,153039,153042,153045,153048,153051,153054],{},[51,153031,153032],{},"输入输出。",[51,153034,153035],{},"判断和循环。",[51,153037,153038],{},"函数拆分。",[51,153040,153041],{},"列表、字典等容器。",[51,153043,153044],{},"文件持久化。",[51,153046,153047],{},"异常处理。",[51,153049,153050],{},"模块拆分。",[51,153052,153053],{},"可选：面向对象。",[51,153055,153056],{},"可选：数据可视化。",[19,153058,153059],{},"本章整理两个方向：",[48,153061,153062,153065],{},[51,153063,153064],{},"学生管理系统。",[51,153066,153067],{},"销售数据统计和可视化。",[14,153069,153071],{"id":153070},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[43,153073,153075],{"id":153074},"_1221-需求","12.2.1 需求",[19,153077,153078],{},"实现一个命令行学生管理系统：",[48,153080,153081,153084,153087,153090,153093,153096,153099],{},[51,153082,153083],{},"添加学生。",[51,153085,153086],{},"删除学生。",[51,153088,153089],{},"修改学生。",[51,153091,153092],{},"查询学生。",[51,153094,153095],{},"显示所有学生。",[51,153097,153098],{},"保存到 JSON 文件。",[51,153100,153101],{},"程序启动时自动读取 JSON 文件。",[19,153103,153104],{},"学生字段：",[58,153106,153109],{"className":153107,"code":153108,"language":6786,"meta":63},[6784],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[65,153110,153108],{"__ignoreMap":63},[14,153112,153114],{"id":153113},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[58,153116,153118],{"className":31971,"code":153117,"language":31973,"meta":63,"style":63},"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",[65,153119,153120,153126,153136,153140,153154,153158,153162,153171,153183,153189,153193,153199,153230,153240,153247,153258,153264,153268,153272,153282,153313,153339,153343,153347,153356,153367,153378,153389,153400,153411,153422,153433,153437,153441,153451,153463,153479,153486,153493,153497,153501,153511,153519,153526,153539,153549,153560,153564,153568,153577,153585,153591,153603,153611,153622,153626,153630,153639,153655,153659,153666,153677,153682,153686,153702,153717,153732,153736,153741,153749,153757,153765,153773,153777,153782,153793,153797,153801,153810,153825,153835,153839,153851,153862,153866,153870,153875,153879,153890,153894,153898,153907,153922,153930,153934,153946,153956,153960,153964,153979,153992,154005,154009,154022,154034,154046,154050,154054,154065,154069,154073,154082,154097,154105,154109,154121,154131,154135,154139,154144,154148,154152,154162,154168,154190,154209,154228,154247,154252,154256,154260,154269,154277,154288,154292,154296,154322,154332,154337,154341,154345,154353,154363,154367,154375,154380,154396,154400,154414,154419,154433,154438,154451,154456,154469,154474,154487,154492,154505,154516,154520,154526,154537,154541,154545,154557],{"__ignoreMap":63},[68,153121,153122,153124],{"class":70,"line":71},[68,153123,31985],{"class":102},[68,153125,148411],{"class":85},[68,153127,153128,153130,153132,153134],{"class":70,"line":78},[68,153129,32330],{"class":102},[68,153131,109884],{"class":85},[68,153133,31985],{"class":102},[68,153135,109889],{"class":85},[68,153137,153138],{"class":70,"line":89},[68,153139,4000],{"emptyLinePlaceholder":1679},[68,153141,153142,153145,153147,153149,153152],{"class":70,"line":115},[68,153143,153144],{"class":92},"DATA_FILE",[68,153146,15161],{"class":102},[68,153148,110118],{"class":85},[68,153150,153151],{"class":872},"\"students.json\"",[68,153153,1757],{"class":85},[68,153155,153156],{"class":70,"line":280},[68,153157,4000],{"emptyLinePlaceholder":1679},[68,153159,153160],{"class":70,"line":301},[68,153161,4000],{"emptyLinePlaceholder":1679},[68,153163,153164,153166,153169],{"class":70,"line":320},[68,153165,33540],{"class":102},[68,153167,153168],{"class":587}," load_students",[68,153170,33546],{"class":85},[68,153172,153173,153175,153177,153180],{"class":70,"line":2915},[68,153174,4700],{"class":102},[68,153176,40523],{"class":102},[68,153178,153179],{"class":92}," DATA_FILE",[68,153181,153182],{"class":85},".exists():\n",[68,153184,153185,153187],{"class":70,"line":2921},[68,153186,16349],{"class":102},[68,153188,53423],{"class":85},[68,153190,153191],{"class":70,"line":2933},[68,153192,4000],{"emptyLinePlaceholder":1679},[68,153194,153195,153197],{"class":70,"line":3214},[68,153196,127357],{"class":102},[68,153198,5338],{"class":85},[68,153200,153201,153204,153206,153208,153210,153212,153214,153216,153218,153220,153222,153224,153226,153228],{"class":70,"line":3219},[68,153202,153203],{"class":102},"        with",[68,153205,148111],{"class":92},[68,153207,997],{"class":85},[68,153209,153144],{"class":92},[68,153211,1002],{"class":85},[68,153213,148121],{"class":872},[68,153215,1002],{"class":85},[68,153217,148126],{"class":6815},[68,153219,869],{"class":102},[68,153221,148131],{"class":872},[68,153223,15311],{"class":85},[68,153225,32976],{"class":102},[68,153227,149473],{"class":6815},[68,153229,5338],{"class":85},[68,153231,153232,153234,153236,153238],{"class":70,"line":3225},[68,153233,17327],{"class":102},[68,153235,149484],{"class":85},[68,153237,46947],{"class":6815},[68,153239,1757],{"class":85},[68,153241,153242,153244],{"class":70,"line":3230},[68,153243,127385],{"class":102},[68,153245,153246],{"class":85}," json.JSONDecodeError:\n",[68,153248,153249,153251,153253,153256],{"class":70,"line":3244},[68,153250,34044],{"class":92},[68,153252,997],{"class":85},[68,153254,153255],{"class":872},"\"数据文件格式错误，已使用空数据启动\"",[68,153257,1757],{"class":85},[68,153259,153260,153262],{"class":70,"line":3249},[68,153261,16349],{"class":102},[68,153263,53423],{"class":85},[68,153265,153266],{"class":70,"line":3255},[68,153267,4000],{"emptyLinePlaceholder":1679},[68,153269,153270],{"class":70,"line":3276},[68,153271,4000],{"emptyLinePlaceholder":1679},[68,153273,153274,153276,153279],{"class":70,"line":3281},[68,153275,33540],{"class":102},[68,153277,153278],{"class":587}," save_students",[68,153280,153281],{"class":85},"(students):\n",[68,153283,153284,153286,153288,153290,153292,153294,153297,153299,153301,153303,153305,153307,153309,153311],{"class":70,"line":3295},[68,153285,35771],{"class":102},[68,153287,148111],{"class":92},[68,153289,997],{"class":85},[68,153291,153144],{"class":92},[68,153293,1002],{"class":85},[68,153295,153296],{"class":872},"\"w\"",[68,153298,1002],{"class":85},[68,153300,148126],{"class":6815},[68,153302,869],{"class":102},[68,153304,148131],{"class":872},[68,153306,15311],{"class":85},[68,153308,32976],{"class":102},[68,153310,149473],{"class":6815},[68,153312,5338],{"class":85},[68,153314,153315,153318,153320,153322,153324,153326,153328,153330,153333,153335,153337],{"class":70,"line":3300},[68,153316,153317],{"class":85},"        json.dump(students, ",[68,153319,46947],{"class":6815},[68,153321,1002],{"class":85},[68,153323,148457],{"class":6815},[68,153325,869],{"class":102},[68,153327,35580],{"class":92},[68,153329,1002],{"class":85},[68,153331,153332],{"class":6815},"indent",[68,153334,869],{"class":102},[68,153336,267],{"class":92},[68,153338,1757],{"class":85},[68,153340,153341],{"class":70,"line":3329},[68,153342,4000],{"emptyLinePlaceholder":1679},[68,153344,153345],{"class":70,"line":3334},[68,153346,4000],{"emptyLinePlaceholder":1679},[68,153348,153349,153351,153354],{"class":70,"line":3351},[68,153350,33540],{"class":102},[68,153352,153353],{"class":587}," show_menu",[68,153355,33546],{"class":85},[68,153357,153358,153360,153362,153365],{"class":70,"line":3356},[68,153359,32892],{"class":92},[68,153361,997],{"class":85},[68,153363,153364],{"class":872},"\"====== 学生管理系统 ======\"",[68,153366,1757],{"class":85},[68,153368,153369,153371,153373,153376],{"class":70,"line":3361},[68,153370,32892],{"class":92},[68,153372,997],{"class":85},[68,153374,153375],{"class":872},"\"1. 添加学生\"",[68,153377,1757],{"class":85},[68,153379,153380,153382,153384,153387],{"class":70,"line":3366},[68,153381,32892],{"class":92},[68,153383,997],{"class":85},[68,153385,153386],{"class":872},"\"2. 删除学生\"",[68,153388,1757],{"class":85},[68,153390,153391,153393,153395,153398],{"class":70,"line":3380},[68,153392,32892],{"class":92},[68,153394,997],{"class":85},[68,153396,153397],{"class":872},"\"3. 修改学生\"",[68,153399,1757],{"class":85},[68,153401,153402,153404,153406,153409],{"class":70,"line":3385},[68,153403,32892],{"class":92},[68,153405,997],{"class":85},[68,153407,153408],{"class":872},"\"4. 查询学生\"",[68,153410,1757],{"class":85},[68,153412,153413,153415,153417,153420],{"class":70,"line":4177},[68,153414,32892],{"class":92},[68,153416,997],{"class":85},[68,153418,153419],{"class":872},"\"5. 显示所有学生\"",[68,153421,1757],{"class":85},[68,153423,153424,153426,153428,153431],{"class":70,"line":4191},[68,153425,32892],{"class":92},[68,153427,997],{"class":85},[68,153429,153430],{"class":872},"\"0. 退出系统\"",[68,153432,1757],{"class":85},[68,153434,153435],{"class":70,"line":4199},[68,153436,4000],{"emptyLinePlaceholder":1679},[68,153438,153439],{"class":70,"line":4204},[68,153440,4000],{"emptyLinePlaceholder":1679},[68,153442,153443,153445,153448],{"class":70,"line":4210},[68,153444,33540],{"class":102},[68,153446,153447],{"class":587}," find_student",[68,153449,153450],{"class":85},"(students, student_id):\n",[68,153452,153453,153455,153458,153460],{"class":70,"line":4216},[68,153454,4800],{"class":102},[68,153456,153457],{"class":85}," student ",[68,153459,27637],{"class":102},[68,153461,153462],{"class":85}," students:\n",[68,153464,153465,153467,153470,153472,153474,153476],{"class":70,"line":4221},[68,153466,4097],{"class":102},[68,153468,153469],{"class":85}," student[",[68,153471,152767],{"class":872},[68,153473,6042],{"class":85},[68,153475,4548],{"class":102},[68,153477,153478],{"class":85}," student_id:\n",[68,153480,153481,153483],{"class":70,"line":9547},[68,153482,17327],{"class":102},[68,153484,153485],{"class":85}," student\n",[68,153487,153488,153490],{"class":70,"line":9571},[68,153489,5689],{"class":102},[68,153491,153492],{"class":92}," None\n",[68,153494,153495],{"class":70,"line":9576},[68,153496,4000],{"emptyLinePlaceholder":1679},[68,153498,153499],{"class":70,"line":9582},[68,153500,4000],{"emptyLinePlaceholder":1679},[68,153502,153503,153505,153508],{"class":70,"line":9609},[68,153504,33540],{"class":102},[68,153506,153507],{"class":587}," input_int",[68,153509,153510],{"class":85},"(prompt):\n",[68,153512,153513,153515,153517],{"class":70,"line":9614},[68,153514,3851],{"class":102},[68,153516,96867],{"class":92},[68,153518,5338],{"class":85},[68,153520,153521,153524],{"class":70,"line":9620},[68,153522,153523],{"class":102},"        try",[68,153525,5338],{"class":85},[68,153527,153528,153530,153532,153534,153536],{"class":70,"line":9632},[68,153529,17327],{"class":102},[68,153531,3982],{"class":92},[68,153533,997],{"class":85},[68,153535,55405],{"class":92},[68,153537,153538],{"class":85},"(prompt))\n",[68,153540,153541,153544,153547],{"class":70,"line":9644},[68,153542,153543],{"class":102},"        except",[68,153545,153546],{"class":92}," ValueError",[68,153548,5338],{"class":85},[68,153550,153551,153553,153555,153558],{"class":70,"line":9656},[68,153552,36243],{"class":92},[68,153554,997],{"class":85},[68,153556,153557],{"class":872},"\"请输入整数\"",[68,153559,1757],{"class":85},[68,153561,153562],{"class":70,"line":11314},[68,153563,4000],{"emptyLinePlaceholder":1679},[68,153565,153566],{"class":70,"line":11339},[68,153567,4000],{"emptyLinePlaceholder":1679},[68,153569,153570,153572,153575],{"class":70,"line":11362},[68,153571,33540],{"class":102},[68,153573,153574],{"class":587}," input_float",[68,153576,153510],{"class":85},[68,153578,153579,153581,153583],{"class":70,"line":11386},[68,153580,3851],{"class":102},[68,153582,96867],{"class":92},[68,153584,5338],{"class":85},[68,153586,153587,153589],{"class":70,"line":11391},[68,153588,153523],{"class":102},[68,153590,5338],{"class":85},[68,153592,153593,153595,153597,153599,153601],{"class":70,"line":11396},[68,153594,17327],{"class":102},[68,153596,111370],{"class":92},[68,153598,997],{"class":85},[68,153600,55405],{"class":92},[68,153602,153538],{"class":85},[68,153604,153605,153607,153609],{"class":70,"line":11401},[68,153606,153543],{"class":102},[68,153608,153546],{"class":92},[68,153610,5338],{"class":85},[68,153612,153613,153615,153617,153620],{"class":70,"line":11410},[68,153614,36243],{"class":92},[68,153616,997],{"class":85},[68,153618,153619],{"class":872},"\"请输入数字\"",[68,153621,1757],{"class":85},[68,153623,153624],{"class":70,"line":11415},[68,153625,4000],{"emptyLinePlaceholder":1679},[68,153627,153628],{"class":70,"line":11421},[68,153629,4000],{"emptyLinePlaceholder":1679},[68,153631,153632,153634,153637],{"class":70,"line":11442},[68,153633,33540],{"class":102},[68,153635,153636],{"class":587}," add_student",[68,153638,153281],{"class":85},[68,153640,153641,153644,153646,153648,153650,153653],{"class":70,"line":11448},[68,153642,153643],{"class":85},"    student_id ",[68,153645,869],{"class":102},[68,153647,62189],{"class":92},[68,153649,997],{"class":85},[68,153651,153652],{"class":872},"\"请输入学号:\"",[68,153654,1757],{"class":85},[68,153656,153657],{"class":70,"line":11462},[68,153658,4000],{"emptyLinePlaceholder":1679},[68,153660,153661,153663],{"class":70,"line":11468},[68,153662,4700],{"class":102},[68,153664,153665],{"class":85}," find_student(students, student_id):\n",[68,153667,153668,153670,153672,153675],{"class":70,"line":11495},[68,153669,34044],{"class":92},[68,153671,997],{"class":85},[68,153673,153674],{"class":872},"\"学号已存在\"",[68,153676,1757],{"class":85},[68,153678,153679],{"class":70,"line":11504},[68,153680,153681],{"class":102},"        return\n",[68,153683,153684],{"class":70,"line":11510},[68,153685,4000],{"emptyLinePlaceholder":1679},[68,153687,153688,153691,153693,153695,153697,153700],{"class":70,"line":11518},[68,153689,153690],{"class":85},"    name ",[68,153692,869],{"class":102},[68,153694,62189],{"class":92},[68,153696,997],{"class":85},[68,153698,153699],{"class":872},"\"请输入姓名:\"",[68,153701,1757],{"class":85},[68,153703,153704,153707,153709,153712,153715],{"class":70,"line":11523},[68,153705,153706],{"class":85},"    age ",[68,153708,869],{"class":102},[68,153710,153711],{"class":85}," input_int(",[68,153713,153714],{"class":872},"\"请输入年龄:\"",[68,153716,1757],{"class":85},[68,153718,153719,153722,153724,153727,153730],{"class":70,"line":18199},[68,153720,153721],{"class":85},"    score ",[68,153723,869],{"class":102},[68,153725,153726],{"class":85}," input_float(",[68,153728,153729],{"class":872},"\"请输入成绩:\"",[68,153731,1757],{"class":85},[68,153733,153734],{"class":70,"line":18205},[68,153735,4000],{"emptyLinePlaceholder":1679},[68,153737,153738],{"class":70,"line":18228},[68,153739,153740],{"class":85},"    students.append({\n",[68,153742,153743,153746],{"class":70,"line":18234},[68,153744,153745],{"class":872},"        \"student_id\"",[68,153747,153748],{"class":85},": student_id,\n",[68,153750,153751,153754],{"class":70,"line":18257},[68,153752,153753],{"class":872},"        \"name\"",[68,153755,153756],{"class":85},": name,\n",[68,153758,153759,153762],{"class":70,"line":18271},[68,153760,153761],{"class":872},"        \"age\"",[68,153763,153764],{"class":85},": age,\n",[68,153766,153767,153770],{"class":70,"line":18291},[68,153768,153769],{"class":872},"        \"score\"",[68,153771,153772],{"class":85},": score,\n",[68,153774,153775],{"class":70,"line":18297},[68,153776,35054],{"class":85},[68,153778,153779],{"class":70,"line":18308},[68,153780,153781],{"class":85},"    save_students(students)\n",[68,153783,153784,153786,153788,153791],{"class":70,"line":18331},[68,153785,32892],{"class":92},[68,153787,997],{"class":85},[68,153789,153790],{"class":872},"\"添加成功\"",[68,153792,1757],{"class":85},[68,153794,153795],{"class":70,"line":18353},[68,153796,4000],{"emptyLinePlaceholder":1679},[68,153798,153799],{"class":70,"line":18358},[68,153800,4000],{"emptyLinePlaceholder":1679},[68,153802,153803,153805,153808],{"class":70,"line":18364},[68,153804,33540],{"class":102},[68,153806,153807],{"class":587}," delete_student",[68,153809,153281],{"class":85},[68,153811,153812,153814,153816,153818,153820,153823],{"class":70,"line":18378},[68,153813,153643],{"class":85},[68,153815,869],{"class":102},[68,153817,62189],{"class":92},[68,153819,997],{"class":85},[68,153821,153822],{"class":872},"\"请输入要删除的学号:\"",[68,153824,1757],{"class":85},[68,153826,153827,153830,153832],{"class":70,"line":18391},[68,153828,153829],{"class":85},"    student ",[68,153831,869],{"class":102},[68,153833,153834],{"class":85}," find_student(students, student_id)\n",[68,153836,153837],{"class":70,"line":18396},[68,153838,4000],{"emptyLinePlaceholder":1679},[68,153840,153841,153843,153845,153847,153849],{"class":70,"line":18410},[68,153842,4700],{"class":102},[68,153844,153457],{"class":85},[68,153846,40520],{"class":102},[68,153848,40526],{"class":92},[68,153850,5338],{"class":85},[68,153852,153853,153855,153857,153860],{"class":70,"line":18415},[68,153854,34044],{"class":92},[68,153856,997],{"class":85},[68,153858,153859],{"class":872},"\"学生不存在\"",[68,153861,1757],{"class":85},[68,153863,153864],{"class":70,"line":18421},[68,153865,153681],{"class":102},[68,153867,153868],{"class":70,"line":18426},[68,153869,4000],{"emptyLinePlaceholder":1679},[68,153871,153872],{"class":70,"line":18440},[68,153873,153874],{"class":85},"    students.remove(student)\n",[68,153876,153877],{"class":70,"line":18445},[68,153878,153781],{"class":85},[68,153880,153881,153883,153885,153888],{"class":70,"line":18450},[68,153882,32892],{"class":92},[68,153884,997],{"class":85},[68,153886,153887],{"class":872},"\"删除成功\"",[68,153889,1757],{"class":85},[68,153891,153892],{"class":70,"line":18464},[68,153893,4000],{"emptyLinePlaceholder":1679},[68,153895,153896],{"class":70,"line":18476},[68,153897,4000],{"emptyLinePlaceholder":1679},[68,153899,153900,153902,153905],{"class":70,"line":18481},[68,153901,33540],{"class":102},[68,153903,153904],{"class":587}," update_student",[68,153906,153281],{"class":85},[68,153908,153909,153911,153913,153915,153917,153920],{"class":70,"line":18494},[68,153910,153643],{"class":85},[68,153912,869],{"class":102},[68,153914,62189],{"class":92},[68,153916,997],{"class":85},[68,153918,153919],{"class":872},"\"请输入要修改的学号:\"",[68,153921,1757],{"class":85},[68,153923,153924,153926,153928],{"class":70,"line":18499},[68,153925,153829],{"class":85},[68,153927,869],{"class":102},[68,153929,153834],{"class":85},[68,153931,153932],{"class":70,"line":18504},[68,153933,4000],{"emptyLinePlaceholder":1679},[68,153935,153936,153938,153940,153942,153944],{"class":70,"line":18509},[68,153937,4700],{"class":102},[68,153939,153457],{"class":85},[68,153941,40520],{"class":102},[68,153943,40526],{"class":92},[68,153945,5338],{"class":85},[68,153947,153948,153950,153952,153954],{"class":70,"line":18522},[68,153949,34044],{"class":92},[68,153951,997],{"class":85},[68,153953,153859],{"class":872},[68,153955,1757],{"class":85},[68,153957,153958],{"class":70,"line":18527},[68,153959,153681],{"class":102},[68,153961,153962],{"class":70,"line":34226},[68,153963,4000],{"emptyLinePlaceholder":1679},[68,153965,153966,153968,153970,153972,153974,153977],{"class":70,"line":34232},[68,153967,153690],{"class":85},[68,153969,869],{"class":102},[68,153971,62189],{"class":92},[68,153973,997],{"class":85},[68,153975,153976],{"class":872},"\"请输入新姓名:\"",[68,153978,1757],{"class":85},[68,153980,153981,153983,153985,153987,153990],{"class":70,"line":34238},[68,153982,153706],{"class":85},[68,153984,869],{"class":102},[68,153986,153711],{"class":85},[68,153988,153989],{"class":872},"\"请输入新年龄:\"",[68,153991,1757],{"class":85},[68,153993,153994,153996,153998,154000,154003],{"class":70,"line":34244},[68,153995,153721],{"class":85},[68,153997,869],{"class":102},[68,153999,153726],{"class":85},[68,154001,154002],{"class":872},"\"请输入新成绩:\"",[68,154004,1757],{"class":85},[68,154006,154007],{"class":70,"line":34250},[68,154008,4000],{"emptyLinePlaceholder":1679},[68,154010,154011,154014,154016,154018,154020],{"class":70,"line":34261},[68,154012,154013],{"class":85},"    student[",[68,154015,64262],{"class":872},[68,154017,6042],{"class":85},[68,154019,869],{"class":102},[68,154021,151115],{"class":85},[68,154023,154024,154026,154028,154030,154032],{"class":70,"line":34267},[68,154025,154013],{"class":85},[68,154027,70706],{"class":872},[68,154029,6042],{"class":85},[68,154031,869],{"class":102},[68,154033,151127],{"class":85},[68,154035,154036,154038,154040,154042,154044],{"class":70,"line":34287},[68,154037,154013],{"class":85},[68,154039,152792],{"class":872},[68,154041,6042],{"class":85},[68,154043,869],{"class":102},[68,154045,3181],{"class":85},[68,154047,154048],{"class":70,"line":34293},[68,154049,4000],{"emptyLinePlaceholder":1679},[68,154051,154052],{"class":70,"line":34304},[68,154053,153781],{"class":85},[68,154055,154056,154058,154060,154063],{"class":70,"line":34310},[68,154057,32892],{"class":92},[68,154059,997],{"class":85},[68,154061,154062],{"class":872},"\"修改成功\"",[68,154064,1757],{"class":85},[68,154066,154067],{"class":70,"line":34316},[68,154068,4000],{"emptyLinePlaceholder":1679},[68,154070,154071],{"class":70,"line":34322},[68,154072,4000],{"emptyLinePlaceholder":1679},[68,154074,154075,154077,154080],{"class":70,"line":34328},[68,154076,33540],{"class":102},[68,154078,154079],{"class":587}," query_student",[68,154081,153281],{"class":85},[68,154083,154084,154086,154088,154090,154092,154095],{"class":70,"line":34334},[68,154085,153643],{"class":85},[68,154087,869],{"class":102},[68,154089,62189],{"class":92},[68,154091,997],{"class":85},[68,154093,154094],{"class":872},"\"请输入要查询的学号:\"",[68,154096,1757],{"class":85},[68,154098,154099,154101,154103],{"class":70,"line":34340},[68,154100,153829],{"class":85},[68,154102,869],{"class":102},[68,154104,153834],{"class":85},[68,154106,154107],{"class":70,"line":34346},[68,154108,4000],{"emptyLinePlaceholder":1679},[68,154110,154111,154113,154115,154117,154119],{"class":70,"line":34366},[68,154112,4700],{"class":102},[68,154114,153457],{"class":85},[68,154116,40520],{"class":102},[68,154118,40526],{"class":92},[68,154120,5338],{"class":85},[68,154122,154123,154125,154127,154129],{"class":70,"line":34372},[68,154124,34044],{"class":92},[68,154126,997],{"class":85},[68,154128,153859],{"class":872},[68,154130,1757],{"class":85},[68,154132,154133],{"class":70,"line":34388},[68,154134,153681],{"class":102},[68,154136,154137],{"class":70,"line":34394},[68,154138,4000],{"emptyLinePlaceholder":1679},[68,154140,154141],{"class":70,"line":34408},[68,154142,154143],{"class":85},"    print_student(student)\n",[68,154145,154146],{"class":70,"line":34414},[68,154147,4000],{"emptyLinePlaceholder":1679},[68,154149,154150],{"class":70,"line":34429},[68,154151,4000],{"emptyLinePlaceholder":1679},[68,154153,154154,154156,154159],{"class":70,"line":34435},[68,154155,33540],{"class":102},[68,154157,154158],{"class":587}," print_student",[68,154160,154161],{"class":85},"(student):\n",[68,154163,154164,154166],{"class":70,"line":34444},[68,154165,32892],{"class":92},[68,154167,152759],{"class":85},[68,154169,154170,154173,154175,154177,154180,154183,154185,154188],{"class":70,"line":34450},[68,154171,154172],{"class":102},"        f",[68,154174,1987],{"class":872},[68,154176,2632],{"class":92},[68,154178,154179],{"class":85},"student[",[68,154181,154182],{"class":872},"'student_id'",[68,154184,2675],{"class":85},[68,154186,154187],{"class":92},"}\\t",[68,154189,26727],{"class":872},[68,154191,154192,154194,154196,154198,154200,154203,154205,154207],{"class":70,"line":34459},[68,154193,154172],{"class":102},[68,154195,1987],{"class":872},[68,154197,2632],{"class":92},[68,154199,154179],{"class":85},[68,154201,154202],{"class":872},"'name'",[68,154204,2675],{"class":85},[68,154206,154187],{"class":92},[68,154208,26727],{"class":872},[68,154210,154211,154213,154215,154217,154219,154222,154224,154226],{"class":70,"line":34465},[68,154212,154172],{"class":102},[68,154214,1987],{"class":872},[68,154216,2632],{"class":92},[68,154218,154179],{"class":85},[68,154220,154221],{"class":872},"'age'",[68,154223,2675],{"class":85},[68,154225,154187],{"class":92},[68,154227,26727],{"class":872},[68,154229,154230,154232,154234,154236,154238,154241,154243,154245],{"class":70,"line":34471},[68,154231,154172],{"class":102},[68,154233,1987],{"class":872},[68,154235,2632],{"class":92},[68,154237,154179],{"class":85},[68,154239,154240],{"class":872},"'score'",[68,154242,2675],{"class":85},[68,154244,2681],{"class":92},[68,154246,26727],{"class":872},[68,154248,154249],{"class":70,"line":34480},[68,154250,154251],{"class":85},"    )\n",[68,154253,154254],{"class":70,"line":34486},[68,154255,4000],{"emptyLinePlaceholder":1679},[68,154257,154258],{"class":70,"line":34497},[68,154259,4000],{"emptyLinePlaceholder":1679},[68,154261,154262,154264,154267],{"class":70,"line":34503},[68,154263,33540],{"class":102},[68,154265,154266],{"class":587}," show_all_students",[68,154268,153281],{"class":85},[68,154270,154271,154273,154275],{"class":70,"line":34522},[68,154272,4700],{"class":102},[68,154274,40523],{"class":102},[68,154276,153462],{"class":85},[68,154278,154279,154281,154283,154286],{"class":70,"line":34528},[68,154280,34044],{"class":92},[68,154282,997],{"class":85},[68,154284,154285],{"class":872},"\"暂无学生\"",[68,154287,1757],{"class":85},[68,154289,154290],{"class":70,"line":34539},[68,154291,153681],{"class":102},[68,154293,154294],{"class":70,"line":34545},[68,154295,4000],{"emptyLinePlaceholder":1679},[68,154297,154298,154300,154302,154305,154307,154310,154312,154315,154317,154320],{"class":70,"line":34565},[68,154299,32892],{"class":92},[68,154301,997],{"class":85},[68,154303,154304],{"class":872},"\"学号",[68,154306,2835],{"class":92},[68,154308,154309],{"class":872},"姓名",[68,154311,2835],{"class":92},[68,154313,154314],{"class":872},"年龄",[68,154316,2835],{"class":92},[68,154318,154319],{"class":872},"成绩\"",[68,154321,1757],{"class":85},[68,154323,154324,154326,154328,154330],{"class":70,"line":34581},[68,154325,4800],{"class":102},[68,154327,153457],{"class":85},[68,154329,27637],{"class":102},[68,154331,153462],{"class":85},[68,154333,154334],{"class":70,"line":34587},[68,154335,154336],{"class":85},"        print_student(student)\n",[68,154338,154339],{"class":70,"line":34601},[68,154340,4000],{"emptyLinePlaceholder":1679},[68,154342,154343],{"class":70,"line":34607},[68,154344,4000],{"emptyLinePlaceholder":1679},[68,154346,154347,154349,154351],{"class":70,"line":34613},[68,154348,33540],{"class":102},[68,154350,3574],{"class":587},[68,154352,33546],{"class":85},[68,154354,154355,154358,154360],{"class":70,"line":34624},[68,154356,154357],{"class":85},"    students ",[68,154359,869],{"class":102},[68,154361,154362],{"class":85}," load_students()\n",[68,154364,154365],{"class":70,"line":34630},[68,154366,4000],{"emptyLinePlaceholder":1679},[68,154368,154369,154371,154373],{"class":70,"line":34636},[68,154370,3851],{"class":102},[68,154372,96867],{"class":92},[68,154374,5338],{"class":85},[68,154376,154377],{"class":70,"line":34646},[68,154378,154379],{"class":85},"        show_menu()\n",[68,154381,154382,154385,154387,154389,154391,154394],{"class":70,"line":34652},[68,154383,154384],{"class":85},"        choice ",[68,154386,869],{"class":102},[68,154388,62189],{"class":92},[68,154390,997],{"class":85},[68,154392,154393],{"class":872},"\"请输入操作:\"",[68,154395,1757],{"class":85},[68,154397,154398],{"class":70,"line":34663},[68,154399,4000],{"emptyLinePlaceholder":1679},[68,154401,154402,154404,154407,154409,154412],{"class":70,"line":34669},[68,154403,4097],{"class":102},[68,154405,154406],{"class":85}," choice ",[68,154408,4548],{"class":102},[68,154410,154411],{"class":872}," \"1\"",[68,154413,5338],{"class":85},[68,154415,154416],{"class":70,"line":34679},[68,154417,154418],{"class":85},"            add_student(students)\n",[68,154420,154421,154424,154426,154428,154431],{"class":70,"line":34684},[68,154422,154423],{"class":102},"        elif",[68,154425,154406],{"class":85},[68,154427,4548],{"class":102},[68,154429,154430],{"class":872}," \"2\"",[68,154432,5338],{"class":85},[68,154434,154435],{"class":70,"line":34690},[68,154436,154437],{"class":85},"            delete_student(students)\n",[68,154439,154440,154442,154444,154446,154449],{"class":70,"line":34739},[68,154441,154423],{"class":102},[68,154443,154406],{"class":85},[68,154445,4548],{"class":102},[68,154447,154448],{"class":872}," \"3\"",[68,154450,5338],{"class":85},[68,154452,154453],{"class":70,"line":34786},[68,154454,154455],{"class":85},"            update_student(students)\n",[68,154457,154458,154460,154462,154464,154467],{"class":70,"line":34791},[68,154459,154423],{"class":102},[68,154461,154406],{"class":85},[68,154463,4548],{"class":102},[68,154465,154466],{"class":872}," \"4\"",[68,154468,5338],{"class":85},[68,154470,154471],{"class":70,"line":34797},[68,154472,154473],{"class":85},"            query_student(students)\n",[68,154475,154476,154478,154480,154482,154485],{"class":70,"line":34816},[68,154477,154423],{"class":102},[68,154479,154406],{"class":85},[68,154481,4548],{"class":102},[68,154483,154484],{"class":872}," \"5\"",[68,154486,5338],{"class":85},[68,154488,154489],{"class":70,"line":34822},[68,154490,154491],{"class":85},"            show_all_students(students)\n",[68,154493,154494,154496,154498,154500,154503],{"class":70,"line":34842},[68,154495,154423],{"class":102},[68,154497,154406],{"class":85},[68,154499,4548],{"class":102},[68,154501,154502],{"class":872}," \"0\"",[68,154504,5338],{"class":85},[68,154506,154507,154509,154511,154514],{"class":70,"line":34848},[68,154508,36243],{"class":92},[68,154510,997],{"class":85},[68,154512,154513],{"class":872},"\"退出系统\"",[68,154515,1757],{"class":85},[68,154517,154518],{"class":70,"line":34854},[68,154519,116671],{"class":102},[68,154521,154522,154524],{"class":70,"line":34864},[68,154523,4134],{"class":102},[68,154525,5338],{"class":85},[68,154527,154528,154530,154532,154535],{"class":70,"line":34869},[68,154529,36243],{"class":92},[68,154531,997],{"class":85},[68,154533,154534],{"class":872},"\"输入错误\"",[68,154536,1757],{"class":85},[68,154538,154539],{"class":70,"line":34875},[68,154540,4000],{"emptyLinePlaceholder":1679},[68,154542,154543],{"class":70,"line":34891},[68,154544,4000],{"emptyLinePlaceholder":1679},[68,154546,154547,154549,154551,154553,154555],{"class":70,"line":34936},[68,154548,3134],{"class":102},[68,154550,32813],{"class":92},[68,154552,103133],{"class":102},[68,154554,103136],{"class":872},[68,154556,5338],{"class":85},[68,154558,154559],{"class":70,"line":34942},[68,154560,103143],{"class":85},[19,154562,154563],{},"这个项目串联了：",[48,154565,154566,154569,154572,154575,154578,154580],{},[51,154567,154568],{},"菜单循环。",[51,154570,154571],{},"函数封装。",[51,154573,154574],{},"列表字典。",[51,154576,154577],{},"JSON 读写。",[51,154579,153047],{},[51,154581,154582,29978],{},[65,154583,154584],{},"if __name__ == \"__main__\"",[14,154586,154588],{"id":154587},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154590,154591],{},"可以进一步拆成两个类：",[48,154593,154594,154599],{},[51,154595,154596,154598],{},[65,154597,150888],{},"：表示单个学生。",[51,154600,154601,154603],{},[65,154602,152914],{},"：负责学生增删改查和文件保存。",[19,154605,154606],{},"示意代码：",[58,154608,154610],{"className":31971,"code":154609,"language":31973,"meta":63,"style":63},"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",[65,154611,154612,154622,154626,154630,154634,154642,154649,154655,154661,154667,154671,154679,154685,154695,154705,154715,154725,154729,154733,154739,154747,154755,154763,154771,154779,154787],{"__ignoreMap":63},[68,154613,154614,154616,154618,154620],{"class":70,"line":71},[68,154615,32330],{"class":102},[68,154617,152472],{"class":85},[68,154619,31985],{"class":102},[68,154621,152477],{"class":85},[68,154623,154624],{"class":70,"line":78},[68,154625,4000],{"emptyLinePlaceholder":1679},[68,154627,154628],{"class":70,"line":89},[68,154629,4000],{"emptyLinePlaceholder":1679},[68,154631,154632],{"class":70,"line":115},[68,154633,152490],{"class":587},[68,154635,154636,154638,154640],{"class":70,"line":280},[68,154637,16291],{"class":102},[68,154639,9497],{"class":587},[68,154641,5338],{"class":85},[68,154643,154644,154647],{"class":70,"line":301},[68,154645,154646],{"class":85},"    student_id: ",[68,154648,152506],{"class":92},[68,154650,154651,154653],{"class":70,"line":320},[68,154652,152503],{"class":85},[68,154654,152506],{"class":92},[68,154656,154657,154659],{"class":70,"line":2915},[68,154658,152511],{"class":85},[68,154660,152514],{"class":92},[68,154662,154663,154665],{"class":70,"line":2921},[68,154664,152519],{"class":85},[68,154666,152522],{"class":92},[68,154668,154669],{"class":70,"line":2933},[68,154670,4000],{"emptyLinePlaceholder":1679},[68,154672,154673,154675,154677],{"class":70,"line":3214},[68,154674,32394],{"class":102},[68,154676,152670],{"class":587},[68,154678,32400],{"class":85},[68,154680,154681,154683],{"class":70,"line":3219},[68,154682,16349],{"class":102},[68,154684,86],{"class":85},[68,154686,154687,154689,154691,154693],{"class":70,"line":3225},[68,154688,152683],{"class":872},[68,154690,96],{"class":85},[68,154692,32416],{"class":92},[68,154694,152690],{"class":85},[68,154696,154697,154699,154701,154703],{"class":70,"line":3230},[68,154698,152695],{"class":872},[68,154700,96],{"class":85},[68,154702,32416],{"class":92},[68,154704,152702],{"class":85},[68,154706,154707,154709,154711,154713],{"class":70,"line":3244},[68,154708,152707],{"class":872},[68,154710,96],{"class":85},[68,154712,32416],{"class":92},[68,154714,152714],{"class":85},[68,154716,154717,154719,154721,154723],{"class":70,"line":3249},[68,154718,152719],{"class":872},[68,154720,96],{"class":85},[68,154722,32416],{"class":92},[68,154724,152726],{"class":85},[68,154726,154727],{"class":70,"line":3255},[68,154728,4129],{"class":85},[68,154730,154731],{"class":70,"line":3276},[68,154732,4000],{"emptyLinePlaceholder":1679},[68,154734,154735,154737],{"class":70,"line":3281},[68,154736,152334],{"class":587},[68,154738,152337],{"class":92},[68,154740,154741,154743,154745],{"class":70,"line":3295},[68,154742,32394],{"class":102},[68,154744,152747],{"class":587},[68,154746,152750],{"class":85},[68,154748,154749,154751,154753],{"class":70,"line":3300},[68,154750,16349],{"class":102},[68,154752,152354],{"class":92},[68,154754,152759],{"class":85},[68,154756,154757,154759,154761],{"class":70,"line":3329},[68,154758,152764],{"class":85},[68,154760,152767],{"class":872},[68,154762,89412],{"class":85},[68,154764,154765,154767,154769],{"class":70,"line":3334},[68,154766,152764],{"class":85},[68,154768,64262],{"class":872},[68,154770,89412],{"class":85},[68,154772,154773,154775,154777],{"class":70,"line":3351},[68,154774,152764],{"class":85},[68,154776,70706],{"class":872},[68,154778,89412],{"class":85},[68,154780,154781,154783,154785],{"class":70,"line":3356},[68,154782,152764],{"class":85},[68,154784,152792],{"class":872},[68,154786,89412],{"class":85},[68,154788,154789],{"class":70,"line":3361},[68,154790,39719],{"class":85},[19,154792,154793],{},"管理器示意：",[58,154795,154797],{"className":31971,"code":154796,"language":31973,"meta":63,"style":63},"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",[65,154798,154799,154808,154816,154827,154831,154841,154854,154865,154872,154878,154882,154891,154900,154906,154913],{"__ignoreMap":63},[68,154800,154801,154803,154806],{"class":70,"line":71},[68,154802,16291],{"class":102},[68,154804,154805],{"class":587}," StudentManager",[68,154807,5338],{"class":85},[68,154809,154810,154812,154814],{"class":70,"line":78},[68,154811,32394],{"class":102},[68,154813,32397],{"class":92},[68,154815,32400],{"class":85},[68,154817,154818,154820,154823,154825],{"class":70,"line":89},[68,154819,32438],{"class":92},[68,154821,154822],{"class":85},".students ",[68,154824,869],{"class":102},[68,154826,53423],{"class":85},[68,154828,154829],{"class":70,"line":115},[68,154830,4000],{"emptyLinePlaceholder":1679},[68,154832,154833,154835,154838],{"class":70,"line":280},[68,154834,32394],{"class":102},[68,154836,154837],{"class":587}," find_by_id",[68,154839,154840],{"class":85},"(self, student_id):\n",[68,154842,154843,154845,154847,154849,154851],{"class":70,"line":301},[68,154844,5002],{"class":102},[68,154846,153457],{"class":85},[68,154848,27637],{"class":102},[68,154850,40466],{"class":92},[68,154852,154853],{"class":85},".students:\n",[68,154855,154856,154858,154861,154863],{"class":70,"line":320},[68,154857,6241],{"class":102},[68,154859,154860],{"class":85}," student.student_id ",[68,154862,4548],{"class":102},[68,154864,153478],{"class":85},[68,154866,154867,154870],{"class":70,"line":2915},[68,154868,154869],{"class":102},"                return",[68,154871,153485],{"class":85},[68,154873,154874,154876],{"class":70,"line":2921},[68,154875,16349],{"class":102},[68,154877,153492],{"class":92},[68,154879,154880],{"class":70,"line":2933},[68,154881,4000],{"emptyLinePlaceholder":1679},[68,154883,154884,154886,154888],{"class":70,"line":3214},[68,154885,32394],{"class":102},[68,154887,6808],{"class":587},[68,154889,154890],{"class":85},"(self, student):\n",[68,154892,154893,154895,154897],{"class":70,"line":3219},[68,154894,4097],{"class":102},[68,154896,40466],{"class":92},[68,154898,154899],{"class":85},".find_by_id(student.student_id):\n",[68,154901,154902,154904],{"class":70,"line":3225},[68,154903,17327],{"class":102},[68,154905,127380],{"class":92},[68,154907,154908,154910],{"class":70,"line":3230},[68,154909,32438],{"class":92},[68,154911,154912],{"class":85},".students.append(student)\n",[68,154914,154915,154917],{"class":70,"line":3244},[68,154916,16349],{"class":102},[68,154918,154919],{"class":92}," True\n",[19,154921,154922],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154924,154926],{"id":154925},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[43,154928,154930],{"id":154929},"_1251-数据结构","12.5.1 数据结构",[58,154932,154934],{"className":31971,"code":154933,"language":31973,"meta":63,"style":63},"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",[65,154935,154936,154944,154975,155005,155034,155063],{"__ignoreMap":63},[68,154937,154938,154940,154942],{"class":70,"line":71},[68,154939,149785],{"class":85},[68,154941,869],{"class":102},[68,154943,57031],{"class":85},[68,154945,154946,154948,154950,154952,154954,154956,154959,154961,154964,154966,154968,154970,154973],{"class":70,"line":78},[68,154947,149705],{"class":85},[68,154949,149317],{"class":872},[68,154951,96],{"class":85},[68,154953,149928],{"class":872},[68,154955,1002],{"class":85},[68,154957,154958],{"class":872},"\"category\"",[68,154960,96],{"class":85},[68,154962,154963],{"class":872},"\"手机\"",[68,154965,1002],{"class":85},[68,154967,85661],{"class":872},[68,154969,96],{"class":85},[68,154971,154972],{"class":92},"12000",[68,154974,6529],{"class":85},[68,154976,154977,154979,154981,154983,154985,154987,154989,154991,154994,154996,154998,155000,155003],{"class":70,"line":89},[68,154978,149705],{"class":85},[68,154980,149317],{"class":872},[68,154982,96],{"class":85},[68,154984,149928],{"class":872},[68,154986,1002],{"class":85},[68,154988,154958],{"class":872},[68,154990,96],{"class":85},[68,154992,154993],{"class":872},"\"电脑\"",[68,154995,1002],{"class":85},[68,154997,85661],{"class":872},[68,154999,96],{"class":85},[68,155001,155002],{"class":92},"18000",[68,155004,6529],{"class":85},[68,155006,155007,155009,155011,155013,155015,155017,155019,155021,155023,155025,155027,155029,155032],{"class":70,"line":115},[68,155008,149705],{"class":85},[68,155010,149317],{"class":872},[68,155012,96],{"class":85},[68,155014,149949],{"class":872},[68,155016,1002],{"class":85},[68,155018,154958],{"class":872},[68,155020,96],{"class":85},[68,155022,154963],{"class":872},[68,155024,1002],{"class":85},[68,155026,85661],{"class":872},[68,155028,96],{"class":85},[68,155030,155031],{"class":92},"15000",[68,155033,6529],{"class":85},[68,155035,155036,155038,155040,155042,155044,155046,155048,155050,155052,155054,155056,155058,155061],{"class":70,"line":280},[68,155037,149705],{"class":85},[68,155039,149317],{"class":872},[68,155041,96],{"class":85},[68,155043,149949],{"class":872},[68,155045,1002],{"class":85},[68,155047,154958],{"class":872},[68,155049,96],{"class":85},[68,155051,154993],{"class":872},[68,155053,1002],{"class":85},[68,155055,85661],{"class":872},[68,155057,96],{"class":85},[68,155059,155060],{"class":92},"16000",[68,155062,6529],{"class":85},[68,155064,155065],{"class":70,"line":301},[68,155066,34839],{"class":85},[43,155068,155070],{"id":155069},"_1252-按日期统计","12.5.2 按日期统计",[58,155072,155074],{"className":31971,"code":155073,"language":31973,"meta":63,"style":63},"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",[65,155075,155076,155085,155089,155100,155114,155127,155146,155150],{"__ignoreMap":63},[68,155077,155078,155081,155083],{"class":70,"line":71},[68,155079,155080],{"class":85},"daily_total ",[68,155082,869],{"class":102},[68,155084,89444],{"class":85},[68,155086,155087],{"class":70,"line":78},[68,155088,4000],{"emptyLinePlaceholder":1679},[68,155090,155091,155093,155095,155097],{"class":70,"line":89},[68,155092,4624],{"class":102},[68,155094,149529],{"class":85},[68,155096,27637],{"class":102},[68,155098,155099],{"class":85}," sales:\n",[68,155101,155102,155105,155107,155110,155112],{"class":70,"line":115},[68,155103,155104],{"class":85},"    date ",[68,155106,869],{"class":102},[68,155108,155109],{"class":85}," item[",[68,155111,149317],{"class":872},[68,155113,34839],{"class":85},[68,155115,155116,155119,155121,155123,155125],{"class":70,"line":280},[68,155117,155118],{"class":85},"    amount ",[68,155120,869],{"class":102},[68,155122,155109],{"class":85},[68,155124,85661],{"class":872},[68,155126,34839],{"class":85},[68,155128,155129,155132,155134,155137,155139,155141,155143],{"class":70,"line":301},[68,155130,155131],{"class":85},"    daily_total[date] ",[68,155133,869],{"class":102},[68,155135,155136],{"class":85}," daily_total.get(date, ",[68,155138,600],{"class":92},[68,155140,15311],{"class":85},[68,155142,2217],{"class":102},[68,155144,155145],{"class":85}," amount\n",[68,155147,155148],{"class":70,"line":320},[68,155149,4000],{"emptyLinePlaceholder":1679},[68,155151,155152,155154],{"class":70,"line":2915},[68,155153,32008],{"class":92},[68,155155,155156],{"class":85},"(daily_total)\n",[43,155158,155160],{"id":155159},"_1253-按类别统计","12.5.3 按类别统计",[58,155162,155164],{"className":31971,"code":155163,"language":31973,"meta":63,"style":63},"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",[65,155165,155166,155175,155179,155189,155202,155214,155232,155236],{"__ignoreMap":63},[68,155167,155168,155171,155173],{"class":70,"line":71},[68,155169,155170],{"class":85},"category_total ",[68,155172,869],{"class":102},[68,155174,89444],{"class":85},[68,155176,155177],{"class":70,"line":78},[68,155178,4000],{"emptyLinePlaceholder":1679},[68,155180,155181,155183,155185,155187],{"class":70,"line":89},[68,155182,4624],{"class":102},[68,155184,149529],{"class":85},[68,155186,27637],{"class":102},[68,155188,155099],{"class":85},[68,155190,155191,155194,155196,155198,155200],{"class":70,"line":115},[68,155192,155193],{"class":85},"    category ",[68,155195,869],{"class":102},[68,155197,155109],{"class":85},[68,155199,154958],{"class":872},[68,155201,34839],{"class":85},[68,155203,155204,155206,155208,155210,155212],{"class":70,"line":280},[68,155205,155118],{"class":85},[68,155207,869],{"class":102},[68,155209,155109],{"class":85},[68,155211,85661],{"class":872},[68,155213,34839],{"class":85},[68,155215,155216,155219,155221,155224,155226,155228,155230],{"class":70,"line":301},[68,155217,155218],{"class":85},"    category_total[category] ",[68,155220,869],{"class":102},[68,155222,155223],{"class":85}," category_total.get(category, ",[68,155225,600],{"class":92},[68,155227,15311],{"class":85},[68,155229,2217],{"class":102},[68,155231,155145],{"class":85},[68,155233,155234],{"class":70,"line":320},[68,155235,4000],{"emptyLinePlaceholder":1679},[68,155237,155238,155240],{"class":70,"line":2915},[68,155239,32008],{"class":92},[68,155241,155242],{"class":85},"(category_total)\n",[43,155244,155246],{"id":155245},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[58,155248,155250],{"className":31971,"code":155249,"language":31973,"meta":63,"style":63},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[65,155251,155252,155277],{"__ignoreMap":63},[68,155253,155254,155257,155259,155261,155264,155267,155270,155273,155275],{"class":70,"line":71},[68,155255,155256],{"class":85},"top_date, top_amount ",[68,155258,869],{"class":102},[68,155260,7550],{"class":92},[68,155262,155263],{"class":85},"(daily_total.items(), ",[68,155265,155266],{"class":6815},"key",[68,155268,155269],{"class":102},"=lambda",[68,155271,155272],{"class":85}," item: item[",[68,155274,99],{"class":92},[68,155276,6256],{"class":85},[68,155278,155279,155281],{"class":70,"line":78},[68,155280,32008],{"class":92},[68,155282,155283],{"class":85},"(top_date, top_amount)\n",[14,155285,155287],{"id":155286},"_126-绘制柱状图","12.6 绘制柱状图",[58,155289,155291],{"className":31971,"code":155290,"language":31973,"meta":63,"style":63},"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",[65,155292,155293,155307,155318,155322,155330,155342,155354,155365,155369,155373,155383,155394,155408,155413,155430,155447,155463,155467],{"__ignoreMap":63},[68,155294,155295,155297,155299,155301,155303,155305],{"class":70,"line":71},[68,155296,32330],{"class":102},[68,155298,148699],{"class":85},[68,155300,31985],{"class":102},[68,155302,148704],{"class":85},[68,155304,32976],{"class":102},[68,155306,148709],{"class":85},[68,155308,155309,155311,155313,155315],{"class":70,"line":78},[68,155310,32330],{"class":102},[68,155312,148558],{"class":85},[68,155314,31985],{"class":102},[68,155316,155317],{"class":85}," Bar\n",[68,155319,155320],{"class":70,"line":89},[68,155321,4000],{"emptyLinePlaceholder":1679},[68,155323,155324,155326,155328],{"class":70,"line":115},[68,155325,155170],{"class":85},[68,155327,869],{"class":102},[68,155329,86],{"class":85},[68,155331,155332,155335,155337,155340],{"class":70,"line":280},[68,155333,155334],{"class":872},"    \"手机\"",[68,155336,96],{"class":85},[68,155338,155339],{"class":92},"27000",[68,155341,33059],{"class":85},[68,155343,155344,155347,155349,155352],{"class":70,"line":301},[68,155345,155346],{"class":872},"    \"电脑\"",[68,155348,96],{"class":85},[68,155350,155351],{"class":92},"34000",[68,155353,33059],{"class":85},[68,155355,155356,155359,155361,155363],{"class":70,"line":320},[68,155357,155358],{"class":872},"    \"耳机\"",[68,155360,96],{"class":85},[68,155362,125972],{"class":92},[68,155364,33059],{"class":85},[68,155366,155367],{"class":70,"line":2915},[68,155368,118],{"class":85},[68,155370,155371],{"class":70,"line":2921},[68,155372,4000],{"emptyLinePlaceholder":1679},[68,155374,155375,155378,155380],{"class":70,"line":2933},[68,155376,155377],{"class":85},"bar ",[68,155379,869],{"class":102},[68,155381,155382],{"class":85}," Bar()\n",[68,155384,155385,155388,155391],{"class":70,"line":3214},[68,155386,155387],{"class":85},"bar.add_xaxis(",[68,155389,155390],{"class":92},"list",[68,155392,155393],{"class":85},"(category_total.keys()))\n",[68,155395,155396,155399,155401,155403,155405],{"class":70,"line":3219},[68,155397,155398],{"class":85},"bar.add_yaxis(",[68,155400,148615],{"class":872},[68,155402,1002],{"class":85},[68,155404,155390],{"class":92},[68,155406,155407],{"class":85},"(category_total.values()))\n",[68,155409,155410],{"class":70,"line":3225},[68,155411,155412],{"class":85},"bar.set_global_opts(\n",[68,155414,155415,155417,155419,155421,155423,155425,155428],{"class":70,"line":3230},[68,155416,148793],{"class":6815},[68,155418,869],{"class":102},[68,155420,148798],{"class":85},[68,155422,52998],{"class":6815},[68,155424,869],{"class":102},[68,155426,155427],{"class":872},"\"品类销售额\"",[68,155429,39640],{"class":85},[68,155431,155432,155434,155436,155438,155440,155442,155445],{"class":70,"line":3244},[68,155433,148812],{"class":6815},[68,155435,869],{"class":102},[68,155437,148817],{"class":85},[68,155439,81387],{"class":6815},[68,155441,869],{"class":102},[68,155443,155444],{"class":872},"\"品类\"",[68,155446,39640],{"class":85},[68,155448,155449,155451,155453,155455,155457,155459,155461],{"class":70,"line":3249},[68,155450,148831],{"class":6815},[68,155452,869],{"class":102},[68,155454,148817],{"class":85},[68,155456,81387],{"class":6815},[68,155458,869],{"class":102},[68,155460,148615],{"class":872},[68,155462,39640],{"class":85},[68,155464,155465],{"class":70,"line":3255},[68,155466,1757],{"class":85},[68,155468,155469,155472,155475],{"class":70,"line":3276},[68,155470,155471],{"class":85},"bar.render(",[68,155473,155474],{"class":872},"\"category_sales.html\"",[68,155476,1757],{"class":85},[14,155478,155480],{"id":155479},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155482,155483],{},"时间线适合展示不同日期、月份、年份的数据变化。",[58,155485,155487],{"className":31971,"code":155486,"language":31973,"meta":63,"style":63},"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",[65,155488,155489,155503,155514,155518,155526,155550,155573,155598,155602,155606,155616,155620,155631,155640,155650,155664,155695,155700,155704],{"__ignoreMap":63},[68,155490,155491,155493,155495,155497,155499,155501],{"class":70,"line":71},[68,155492,32330],{"class":102},[68,155494,148699],{"class":85},[68,155496,31985],{"class":102},[68,155498,148704],{"class":85},[68,155500,32976],{"class":102},[68,155502,148709],{"class":85},[68,155504,155505,155507,155509,155511],{"class":70,"line":78},[68,155506,32330],{"class":102},[68,155508,148558],{"class":85},[68,155510,31985],{"class":102},[68,155512,155513],{"class":85}," Bar, Timeline\n",[68,155515,155516],{"class":70,"line":89},[68,155517,4000],{"emptyLinePlaceholder":1679},[68,155519,155520,155522,155524],{"class":70,"line":115},[68,155521,103232],{"class":85},[68,155523,869],{"class":102},[68,155525,86],{"class":85},[68,155527,155528,155531,155534,155536,155538,155540,155542,155544,155546,155548],{"class":70,"line":280},[68,155529,155530],{"class":872},"    \"2024-10-01\"",[68,155532,155533],{"class":85},": {",[68,155535,154963],{"class":872},[68,155537,96],{"class":85},[68,155539,154972],{"class":92},[68,155541,1002],{"class":85},[68,155543,154993],{"class":872},[68,155545,96],{"class":85},[68,155547,155002],{"class":92},[68,155549,6529],{"class":85},[68,155551,155552,155555,155557,155559,155561,155563,155565,155567,155569,155571],{"class":70,"line":301},[68,155553,155554],{"class":872},"    \"2024-10-02\"",[68,155556,155533],{"class":85},[68,155558,154963],{"class":872},[68,155560,96],{"class":85},[68,155562,155031],{"class":92},[68,155564,1002],{"class":85},[68,155566,154993],{"class":872},[68,155568,96],{"class":85},[68,155570,155060],{"class":92},[68,155572,6529],{"class":85},[68,155574,155575,155578,155580,155582,155584,155587,155589,155591,155593,155596],{"class":70,"line":320},[68,155576,155577],{"class":872},"    \"2024-10-03\"",[68,155579,155533],{"class":85},[68,155581,154963],{"class":872},[68,155583,96],{"class":85},[68,155585,155586],{"class":92},"17000",[68,155588,1002],{"class":85},[68,155590,154993],{"class":872},[68,155592,96],{"class":85},[68,155594,155595],{"class":92},"19000",[68,155597,6529],{"class":85},[68,155599,155600],{"class":70,"line":2915},[68,155601,118],{"class":85},[68,155603,155604],{"class":70,"line":2921},[68,155605,4000],{"emptyLinePlaceholder":1679},[68,155607,155608,155611,155613],{"class":70,"line":2933},[68,155609,155610],{"class":85},"timeline ",[68,155612,869],{"class":102},[68,155614,155615],{"class":85}," Timeline()\n",[68,155617,155618],{"class":70,"line":3214},[68,155619,4000],{"emptyLinePlaceholder":1679},[68,155621,155622,155624,155627,155629],{"class":70,"line":3219},[68,155623,4624],{"class":102},[68,155625,155626],{"class":85}," date, category_data ",[68,155628,27637],{"class":102},[68,155630,150468],{"class":85},[68,155632,155633,155636,155638],{"class":70,"line":3225},[68,155634,155635],{"class":85},"    bar ",[68,155637,869],{"class":102},[68,155639,155382],{"class":85},[68,155641,155642,155645,155647],{"class":70,"line":3230},[68,155643,155644],{"class":85},"    bar.add_xaxis(",[68,155646,155390],{"class":92},[68,155648,155649],{"class":85},"(category_data.keys()))\n",[68,155651,155652,155655,155657,155659,155661],{"class":70,"line":3244},[68,155653,155654],{"class":85},"    bar.add_yaxis(",[68,155656,148615],{"class":872},[68,155658,1002],{"class":85},[68,155660,155390],{"class":92},[68,155662,155663],{"class":85},"(category_data.values()))\n",[68,155665,155666,155669,155672,155674,155676,155678,155680,155682,155684,155686,155688,155690,155693],{"class":70,"line":3249},[68,155667,155668],{"class":85},"    bar.set_global_opts(",[68,155670,155671],{"class":6815},"title_opts",[68,155673,869],{"class":102},[68,155675,148798],{"class":85},[68,155677,52998],{"class":6815},[68,155679,869],{"class":102},[68,155681,1801],{"class":102},[68,155683,1987],{"class":872},[68,155685,2632],{"class":92},[68,155687,75504],{"class":85},[68,155689,2681],{"class":92},[68,155691,155692],{"class":872},"销售额\"",[68,155694,32090],{"class":85},[68,155696,155697],{"class":70,"line":3255},[68,155698,155699],{"class":85},"    timeline.add(bar, date)\n",[68,155701,155702],{"class":70,"line":3276},[68,155703,4000],{"emptyLinePlaceholder":1679},[68,155705,155706,155709,155712],{"class":70,"line":3281},[68,155707,155708],{"class":85},"timeline.render(",[68,155710,155711],{"class":872},"\"timeline_sales.html\"",[68,155713,1757],{"class":85},[14,155715,155717],{"id":155716},"_128-绘制地图","12.8 绘制地图",[19,155719,155720],{},"地图适合展示地区数据。",[58,155722,155724],{"className":31971,"code":155723,"language":31973,"meta":63,"style":63},"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",[65,155725,155726,155740,155751,155755,155763,155776,155788,155801,155814,155818,155822,155832,155847,155852,155869,155888,155892],{"__ignoreMap":63},[68,155727,155728,155730,155732,155734,155736,155738],{"class":70,"line":71},[68,155729,32330],{"class":102},[68,155731,148699],{"class":85},[68,155733,31985],{"class":102},[68,155735,148704],{"class":85},[68,155737,32976],{"class":102},[68,155739,148709],{"class":85},[68,155741,155742,155744,155746,155748],{"class":70,"line":78},[68,155743,32330],{"class":102},[68,155745,148558],{"class":85},[68,155747,31985],{"class":102},[68,155749,155750],{"class":85}," Map\n",[68,155752,155753],{"class":70,"line":89},[68,155754,4000],{"emptyLinePlaceholder":1679},[68,155756,155757,155759,155761],{"class":70,"line":115},[68,155758,103232],{"class":85},[68,155760,869],{"class":102},[68,155762,57031],{"class":85},[68,155764,155765,155768,155770,155772,155774],{"class":70,"line":280},[68,155766,155767],{"class":85},"    (",[68,155769,70851],{"class":872},[68,155771,1002],{"class":85},[68,155773,2553],{"class":92},[68,155775,39640],{"class":85},[68,155777,155778,155780,155782,155784,155786],{"class":70,"line":301},[68,155779,155767],{"class":85},[68,155781,70871],{"class":872},[68,155783,1002],{"class":85},[68,155785,148632],{"class":92},[68,155787,39640],{"class":85},[68,155789,155790,155792,155795,155797,155799],{"class":70,"line":320},[68,155791,155767],{"class":85},[68,155793,155794],{"class":872},"\"广东\"",[68,155796,1002],{"class":85},[68,155798,3324],{"class":92},[68,155800,39640],{"class":85},[68,155802,155803,155805,155808,155810,155812],{"class":70,"line":2915},[68,155804,155767],{"class":85},[68,155806,155807],{"class":872},"\"浙江\"",[68,155809,1002],{"class":85},[68,155811,148637],{"class":92},[68,155813,39640],{"class":85},[68,155815,155816],{"class":70,"line":2921},[68,155817,34839],{"class":85},[68,155819,155820],{"class":70,"line":2933},[68,155821,4000],{"emptyLinePlaceholder":1679},[68,155823,155824,155827,155829],{"class":70,"line":3214},[68,155825,155826],{"class":85},"map_chart ",[68,155828,869],{"class":102},[68,155830,155831],{"class":85}," Map()\n",[68,155833,155834,155837,155839,155842,155845],{"class":70,"line":3219},[68,155835,155836],{"class":85},"map_chart.add(",[68,155838,148615],{"class":872},[68,155840,155841],{"class":85},", data, ",[68,155843,155844],{"class":872},"\"china\"",[68,155846,1757],{"class":85},[68,155848,155849],{"class":70,"line":3225},[68,155850,155851],{"class":85},"map_chart.set_global_opts(\n",[68,155853,155854,155856,155858,155860,155862,155864,155867],{"class":70,"line":3230},[68,155855,148793],{"class":6815},[68,155857,869],{"class":102},[68,155859,148798],{"class":85},[68,155861,52998],{"class":6815},[68,155863,869],{"class":102},[68,155865,155866],{"class":872},"\"地区销售额\"",[68,155868,39640],{"class":85},[68,155870,155871,155874,155876,155879,155882,155884,155886],{"class":70,"line":3244},[68,155872,155873],{"class":6815},"    visualmap_opts",[68,155875,869],{"class":102},[68,155877,155878],{"class":85},"opts.VisualMapOpts(",[68,155880,155881],{"class":6815},"max_",[68,155883,869],{"class":102},[68,155885,3324],{"class":92},[68,155887,39640],{"class":85},[68,155889,155890],{"class":70,"line":3249},[68,155891,1757],{"class":85},[68,155893,155894,155897,155900],{"class":70,"line":3255},[68,155895,155896],{"class":85},"map_chart.render(",[68,155898,155899],{"class":872},"\"map_sales.html\"",[68,155901,1757],{"class":85},[19,155903,155904],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155906,155908],{"id":155907},"_129-项目拆分建议","12.9 项目拆分建议",[19,155910,155911],{},"当代码超过一个文件时，可以这样组织：",[58,155913,155916],{"className":155914,"code":155915,"language":6786,"meta":63},[6784],"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",[65,155917,155915],{"__ignoreMap":63},[19,155919,155920],{},"职责：",[48,155922,155923,155929,155935,155941],{},[51,155924,155925,155928],{},[65,155926,155927],{},"main.py","：程序入口。",[51,155930,155931,155934],{},[65,155932,155933],{},"file_utils.py","：读写 JSON。",[51,155936,155937,155940],{},[65,155938,155939],{},"sales_service.py","：统计销售数据。",[51,155942,155943,155946],{},[65,155944,155945],{},"chart_builder.py","：生成图表。",[14,155948,155950],{"id":155949},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155952,155953],{},"语法基础：",[48,155955,155956,155959,155962,155965],{},[51,155957,155958],{},"会写变量、注释、输入输出。",[51,155960,155961],{},"会使用 int、float、str、bool。",[51,155963,155964],{},"会做类型转换。",[51,155966,155967],{},"会使用 f-string 格式化输出。",[19,155969,155970],{},"流程控制：",[48,155972,155973,155979,155985,155993],{},[51,155974,155975,155976,29978],{},"会写 ",[65,155977,155978],{},"if elif else",[51,155980,155975,155981,102592,155983,29978],{},[65,155982,110236],{},[65,155984,4624],{},[51,155986,155987,155988,102592,155990,29978],{},"理解 ",[65,155989,3653],{},[65,155991,155992],{},"continue",[51,155994,155995],{},"能写嵌套循环。",[19,155997,155998],{},"函数：",[48,156000,156001,156004,156007,156010],{},[51,156002,156003],{},"会定义和调用函数。",[51,156005,156006],{},"理解参数和返回值。",[51,156008,156009],{},"知道局部变量和全局变量。",[51,156011,156012],{},"会使用默认参数、关键字参数、不定长参数。",[19,156014,156015],{},"容器：",[48,156017,156018,156021,156024,156027,156030],{},[51,156019,156020],{},"会使用列表增删改查。",[51,156022,156023],{},"会遍历列表、字典。",[51,156025,156026],{},"会使用切片。",[51,156028,156029],{},"会用集合去重。",[51,156031,156032],{},"会处理列表嵌套字典。",[19,156034,156035],{},"文件和模块：",[48,156037,156038,156041,156044,156047,156050],{},[51,156039,156040],{},"会读写文本文件。",[51,156042,156043],{},"会读写 JSON。",[51,156045,156046],{},"会捕获常见异常。",[51,156048,156049],{},"会导入模块和第三方包。",[51,156051,156052],{},"会创建简单包结构。",[19,156054,156055],{},"项目能力：",[48,156057,156058,156061,156064,156067,156070],{},[51,156059,156060],{},"能把代码拆成函数。",[51,156062,156063],{},"能把数据保存到文件。",[51,156065,156066],{},"能处理用户输入错误。",[51,156068,156069],{},"能写一个完整菜单程序。",[51,156071,156072],{},"能用 pyecharts 生成图表。",[14,156074,156076],{"id":156075},"_1211-推荐练习顺序","12.11 推荐练习顺序",[48,156078,156079,156082,156085,156088,156091,156094,156097,156100],{},[51,156080,156081],{},"猜数字游戏。",[51,156083,156084],{},"ATM 菜单程序。",[51,156086,156087],{},"学生成绩统计。",[51,156089,156090],{},"学生管理系统函数版。",[51,156092,156093],{},"学生管理系统文件持久化版。",[51,156095,156096],{},"学生管理系统面向对象版。",[51,156098,156099],{},"销售数据统计。",[51,156101,156102],{},"销售数据可视化。",[14,156104,156106],{"id":156105},"_1212-常见学习误区","12.12 常见学习误区",[48,156108,156109,156112,156115,156118,156121,156124,156127],{},[51,156110,156111],{},"只看视频不敲代码。",[51,156113,156114],{},"一报错就复制错误去搜，不先读报错位置。",[51,156116,156117],{},"变量名随便写，后续自己看不懂。",[51,156119,156120],{},"所有代码都写在一个文件一个函数里。",[51,156122,156123],{},"不保存练习代码，复习时没有材料。",[51,156125,156126],{},"还没掌握列表字典就急着学框架。",[51,156128,156129],{},"不会读官方文档，只依赖教程。",[14,156131,156133],{"id":156132},"_1213-如何读报错","12.13 如何读报错",[19,156135,156136],{},"报错通常从下往上看最后几行。",[19,156138,16731],{},[58,156140,156143],{"className":156141,"code":156142,"language":6786,"meta":63},[6784],"ValueError: invalid literal for int() with base 10: 'abc'\n",[65,156144,156142],{"__ignoreMap":63},[19,156146,26194],{},[48,156148,156149,156155,156165],{},[51,156150,156151,156152,29978],{},"异常类型是 ",[65,156153,156154],{},"ValueError",[51,156156,108918,156157,156160,156161,156164],{},[65,156158,156159],{},"int()"," 无法把 ",[65,156162,156163],{},"'abc'"," 转成整数。",[51,156166,156167],{},"应该检查输入内容或增加异常处理。",[19,156169,156170],{},"再看文件名和行号：",[58,156172,156175],{"className":156173,"code":156174,"language":6786,"meta":63},[6784],"File \"main.py\", line 10, in \u003Cmodule>\n",[65,156176,156174],{"__ignoreMap":63},[19,156178,156179,156180,156182],{},"表示错误发生在 ",[65,156181,155927],{}," 第 10 行。",[14,156184,156186],{"id":156185},"_1214-后续学习方向","12.14 后续学习方向",[19,156188,156189],{},"Python 基础完成后，可以按兴趣选择方向：",[48,156191,156192,156204,156213,156225,156236,156245,156255],{},[51,156193,156194,156195,1949,156198,1949,156201,29978],{},"自动化办公：",[65,156196,156197],{},"openpyxl",[65,156199,156200],{},"python-docx",[65,156202,156203],{},"pdfplumber",[51,156205,156206,156207,1949,156209,1949,156211,29978],{},"数据分析：",[65,156208,102200],{},[65,156210,147505],{},[65,156212,147513],{},[51,156214,156215,156216,1949,156219,1949,156222,29978],{},"Web 后端：",[65,156217,156218],{},"Flask",[65,156220,156221],{},"FastAPI",[65,156223,156224],{},"Django",[51,156226,156227,156228,1949,156230,1949,156233,29978],{},"爬虫：",[65,156229,147490],{},[65,156231,156232],{},"BeautifulSoup",[65,156234,156235],{},"Scrapy",[51,156237,156238,156239,1949,156241,156244],{},"测试开发：",[65,156240,147537],{},[65,156242,156243],{},"selenium","、接口测试。",[51,156246,156247,156248,1949,156250,1949,156252,29978],{},"人工智能：",[65,156249,102200],{},[65,156251,147505],{},[65,156253,156254],{},"pytorch",[51,156256,156257,156258,1949,156260,1949,156263,29978],{},"运维脚本：",[65,156259,147106],{},[65,156261,156262],{},"subprocess",[65,156264,156265],{},"paramiko",[19,156267,156268],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156270,156272],{"id":156271},"_1215-结课练习","12.15 结课练习",[48,156274,156275,156278,156281,156284,156287,156290,156293,156296],{},[51,156276,156277],{},"完成函数版学生管理系统。",[51,156279,156280],{},"给学生管理系统增加 JSON 持久化。",[51,156282,156283],{},"给学生管理系统增加异常处理。",[51,156285,156286],{},"把学生管理系统改成面向对象版。",[51,156288,156289],{},"使用 pyecharts 绘制学生成绩柱状图。",[51,156291,156292],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[51,156294,156295],{},"按品类统计销售额并绘制柱状图。",[51,156297,156298],{},"写一份自己的 Python 学习路线图。",[1652,156300,156301],{},"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":63,"searchDepth":78,"depth":78,"links":156303},[156304,156305,156308,156309,156310,156316,156317,156318,156319,156320,156321,156322,156323,156324,156325],{"id":153020,"depth":78,"text":153021},{"id":153070,"depth":78,"text":153071,"children":156306},[156307],{"id":153074,"depth":89,"text":153075},{"id":153113,"depth":78,"text":153114},{"id":154587,"depth":78,"text":154588},{"id":154925,"depth":78,"text":154926,"children":156311},[156312,156313,156314,156315],{"id":154929,"depth":89,"text":154930},{"id":155069,"depth":89,"text":155070},{"id":155159,"depth":89,"text":155160},{"id":155245,"depth":89,"text":155246},{"id":155286,"depth":78,"text":155287},{"id":155479,"depth":78,"text":155480},{"id":155716,"depth":78,"text":155717},{"id":155907,"depth":78,"text":155908},{"id":155949,"depth":78,"text":155950},{"id":156075,"depth":78,"text":156076},{"id":156105,"depth":78,"text":156106},{"id":156132,"depth":78,"text":156133},{"id":156185,"depth":78,"text":156186},{"id":156271,"depth":78,"text":156272},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153012,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156332,"title":156333,"body":156334,"description":1676,"extension":1677,"meta":158803,"navigation":1679,"path":158804,"seo":158805,"stem":158806,"__hash__":158807},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156335,"toc":158778},[156336,156339,156343,156346,156349,156369,156372,156395,156398,156401,156423,156426,156448,156452,156455,156495,156498,156619,156623,156626,156666,156669,156693,156696,156700,156703,156717,156750,156753,156788,156791,156814,156817,156850,156853,156855,156861,156936,156939,156945,156962,157002,157006,157009,157055,157057,157095,157098,157133,157136,157171,157174,157206,157209,157228,157232,157236,157349,157351,157426,157430,157476,157479,157505,157514,157518,157521,157584,157592,157620,157624,157664,157729,157733,157736,157775,157778,157823,157826,157887,157891,157918,157921,157949,157952,157956,157960,158025,158028,158066,158069,158101,158105,158204,158208,158211,158284,158287,158335,158339,158345,158385,158388,158435,158438,158487,158491,158493,158507,158509,158690,158694,158721,158741,158748,158752,158769,158775],[10,156337,156333],{"id":156338},"_2-基础语法变量与字符串",[14,156340,156342],{"id":156341},"_21-注释","2.1 注释",[19,156344,156345],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156347,156348],{},"单行注释：",[58,156350,156352],{"className":31971,"code":156351,"language":31973,"meta":63,"style":63},"# 这是单行注释\nprint(\"hello\")\n",[65,156353,156354,156359],{"__ignoreMap":63},[68,156355,156356],{"class":70,"line":71},[68,156357,156358],{"class":74},"# 这是单行注释\n",[68,156360,156361,156363,156365,156367],{"class":70,"line":78},[68,156362,32008],{"class":92},[68,156364,997],{"class":85},[68,156366,7443],{"class":872},[68,156368,1757],{"class":85},[19,156370,156371],{},"多行说明常用三引号：",[58,156373,156375],{"className":31971,"code":156374,"language":31973,"meta":63,"style":63},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[65,156376,156377,156381,156386,156391],{"__ignoreMap":63},[68,156378,156379],{"class":70,"line":71},[68,156380,97273],{"class":872},[68,156382,156383],{"class":70,"line":78},[68,156384,156385],{"class":872},"这是多行说明。\n",[68,156387,156388],{"class":70,"line":89},[68,156389,156390],{"class":872},"常用于文件顶部说明、函数说明等。\n",[68,156392,156393],{"class":70,"line":115},[68,156394,97273],{"class":872},[19,156396,156397],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156399,156400],{},"不好：",[58,156402,156404],{"className":31971,"code":156403,"language":31973,"meta":63,"style":63},"# age 加 1\nage = age + 1\n",[65,156405,156406,156411],{"__ignoreMap":63},[68,156407,156408],{"class":70,"line":71},[68,156409,156410],{"class":74},"# age 加 1\n",[68,156412,156413,156415,156417,156419,156421],{"class":70,"line":78},[68,156414,147866],{"class":85},[68,156416,869],{"class":102},[68,156418,17302],{"class":85},[68,156420,2217],{"class":102},[68,156422,57283],{"class":92},[19,156424,156425],{},"较好：",[58,156427,156429],{"className":31971,"code":156428,"language":31973,"meta":63,"style":63},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[65,156430,156431,156436],{"__ignoreMap":63},[68,156432,156433],{"class":70,"line":71},[68,156434,156435],{"class":74},"# 用户过完生日后，年龄增加一岁\n",[68,156437,156438,156440,156442,156444,156446],{"class":70,"line":78},[68,156439,147866],{"class":85},[68,156441,869],{"class":102},[68,156443,17302],{"class":85},[68,156445,2217],{"class":102},[68,156447,57283],{"class":92},[14,156449,156451],{"id":156450},"_22-字面量","2.2 字面量",[19,156453,156454],{},"字面量就是代码中直接写出来的数据。",[58,156456,156458],{"className":31971,"code":156457,"language":31973,"meta":63,"style":63},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[65,156459,156460,156467,156474,156481,156488],{"__ignoreMap":63},[68,156461,156462,156464],{"class":70,"line":71},[68,156463,2047],{"class":92},[68,156465,156466],{"class":74},"          # 整数\n",[68,156468,156469,156471],{"class":70,"line":78},[68,156470,1798],{"class":92},[68,156472,156473],{"class":74},"         # 小数\n",[68,156475,156476,156478],{"class":70,"line":89},[68,156477,7443],{"class":872},[68,156479,156480],{"class":74},"      # 字符串\n",[68,156482,156483,156485],{"class":70,"line":115},[68,156484,33069],{"class":92},[68,156486,156487],{"class":74},"         # 布尔值\n",[68,156489,156490,156492],{"class":70,"line":280},[68,156491,97261],{"class":92},[68,156493,156494],{"class":74},"         # 空值\n",[19,156496,156497],{},"常见字面量类型：",[120,156499,156500,156510],{},[123,156501,156502],{},[126,156503,156504,156506,156508],{},[129,156505,25331],{},[129,156507,29085],{},[129,156509,27463],{},[137,156511,156512,156523,156534,156545,156557,156569,156581,156594,156606],{},[126,156513,156514,156516,156520],{},[142,156515,1754],{},[142,156517,156518],{},[65,156519,2047],{},[142,156521,156522],{},"整数",[126,156524,156525,156527,156531],{},[142,156526,1790],{},[142,156528,156529],{},[65,156530,1798],{},[142,156532,156533],{},"浮点数",[126,156535,156536,156538,156542],{},[142,156537,2903],{},[142,156539,156540],{},[65,156541,7443],{},[142,156543,156544],{},"字符串",[126,156546,156547,156549,156555],{},[142,156548,2958],{},[142,156550,156551,1949,156553],{},[65,156552,33069],{},[65,156554,35580],{},[142,156556,67597],{},[126,156558,156559,156562,156566],{},[142,156560,156561],{},"NoneType",[142,156563,156564],{},[65,156565,97261],{},[142,156567,156568],{},"空值",[126,156570,156571,156573,156578],{},[142,156572,155390],{},[142,156574,156575],{},[65,156576,156577],{},"[1, 2, 3]",[142,156579,156580],{},"列表",[126,156582,156583,156586,156591],{},[142,156584,156585],{},"tuple",[142,156587,156588],{},[65,156589,156590],{},"(1, 2, 3)",[142,156592,156593],{},"元组",[126,156595,156596,156598,156603],{},[142,156597,116119],{},[142,156599,156600],{},[65,156601,156602],{},"{\"name\": \"张三\"}",[142,156604,156605],{},"字典",[126,156607,156608,156611,156616],{},[142,156609,156610],{},"set",[142,156612,156613],{},[65,156614,156615],{},"{1, 2, 3}",[142,156617,156618],{},"集合",[14,156620,156622],{"id":156621},"_23-变量","2.3 变量",[19,156624,156625],{},"变量是保存数据的名字。",[58,156627,156629],{"className":31971,"code":156628,"language":31973,"meta":63,"style":63},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[65,156630,156631,156639,156647,156657],{"__ignoreMap":63},[68,156632,156633,156635,156637],{"class":70,"line":71},[68,156634,147856],{"class":85},[68,156636,869],{"class":102},[68,156638,150673],{"class":872},[68,156640,156641,156643,156645],{"class":70,"line":78},[68,156642,147866],{"class":85},[68,156644,869],{"class":102},[68,156646,147871],{"class":92},[68,156648,156649,156652,156654],{"class":70,"line":89},[68,156650,156651],{"class":85},"height ",[68,156653,869],{"class":102},[68,156655,156656],{"class":92}," 1.75\n",[68,156658,156659,156662,156664],{"class":70,"line":115},[68,156660,156661],{"class":85},"is_student ",[68,156663,869],{"class":102},[68,156665,154919],{"class":92},[19,156667,156668],{},"Python 的变量不需要提前声明类型：",[58,156670,156672],{"className":31971,"code":156671,"language":31973,"meta":63,"style":63},"score = 100\nscore = \"满分\"\n",[65,156673,156674,156684],{"__ignoreMap":63},[68,156675,156676,156679,156681],{"class":70,"line":71},[68,156677,156678],{"class":85},"score ",[68,156680,869],{"class":102},[68,156682,156683],{"class":92}," 100\n",[68,156685,156686,156688,156690],{"class":70,"line":78},[68,156687,156678],{"class":85},[68,156689,869],{"class":102},[68,156691,156692],{"class":872}," \"满分\"\n",[19,156694,156695],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156697,156699],{"id":156698},"_24-变量命名规则","2.4 变量命名规则",[19,156701,156702],{},"硬性规则：",[48,156704,156705,156708,156711,156714],{},[51,156706,156707],{},"只能由字母、数字、下划线组成。",[51,156709,156710],{},"不能以数字开头。",[51,156712,156713],{},"不能使用 Python 关键字。",[51,156715,156716],{},"区分大小写。",[58,156718,156720],{"className":31971,"code":156719,"language":31973,"meta":63,"style":63},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[65,156721,156722,156731,156740],{"__ignoreMap":63},[68,156723,156724,156727,156729],{"class":70,"line":71},[68,156725,156726],{"class":85},"user_name ",[68,156728,869],{"class":102},[68,156730,147861],{"class":872},[68,156732,156733,156736,156738],{"class":70,"line":78},[68,156734,156735],{"class":85},"age2 ",[68,156737,869],{"class":102},[68,156739,147871],{"class":92},[68,156741,156742,156745,156747],{"class":70,"line":89},[68,156743,156744],{"class":85},"_token ",[68,156746,869],{"class":102},[68,156748,156749],{"class":872}," \"abc\"\n",[19,156751,156752],{},"错误写法：",[58,156754,156756],{"className":31971,"code":156755,"language":31973,"meta":63,"style":63},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[65,156757,156758,156767,156779],{"__ignoreMap":63},[68,156759,156760,156763,156765],{"class":70,"line":71},[68,156761,156762],{"class":78981},"2age",[68,156764,15161],{"class":102},[68,156766,147871],{"class":92},[68,156768,156769,156771,156773,156775,156777],{"class":70,"line":78},[68,156770,132904],{"class":85},[68,156772,2268],{"class":102},[68,156774,147856],{"class":85},[68,156776,869],{"class":102},[68,156778,147861],{"class":872},[68,156780,156781,156783,156785],{"class":70,"line":89},[68,156782,16291],{"class":102},[68,156784,15161],{"class":102},[68,156786,156787],{"class":872}," \"一班\"\n",[19,156789,156790],{},"查看关键字：",[58,156792,156794],{"className":31971,"code":156793,"language":31973,"meta":63,"style":63},"import keyword\n\nprint(keyword.kwlist)\n",[65,156795,156796,156803,156807],{"__ignoreMap":63},[68,156797,156798,156800],{"class":70,"line":71},[68,156799,31985],{"class":102},[68,156801,156802],{"class":85}," keyword\n",[68,156804,156805],{"class":70,"line":78},[68,156806,4000],{"emptyLinePlaceholder":1679},[68,156808,156809,156811],{"class":70,"line":89},[68,156810,32008],{"class":92},[68,156812,156813],{"class":85},"(keyword.kwlist)\n",[19,156815,156816],{},"推荐命名风格：",[58,156818,156820],{"className":31971,"code":156819,"language":31973,"meta":63,"style":63},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[65,156821,156822,156831,156841],{"__ignoreMap":63},[68,156823,156824,156827,156829],{"class":70,"line":71},[68,156825,156826],{"class":85},"student_name ",[68,156828,869],{"class":102},[68,156830,150673],{"class":872},[68,156832,156833,156836,156838],{"class":70,"line":78},[68,156834,156835],{"class":85},"total_price ",[68,156837,869],{"class":102},[68,156839,156840],{"class":92}," 99.8\n",[68,156842,156843,156846,156848],{"class":70,"line":89},[68,156844,156845],{"class":85},"is_finished ",[68,156847,869],{"class":102},[68,156849,127380],{"class":92},[19,156851,156852],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156854,52325],{"id":52324},[19,156856,105939,156857,156860],{},[65,156858,156859],{},"type()"," 查看数据类型：",[58,156862,156864],{"className":31971,"code":156863,"language":31973,"meta":63,"style":63},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[65,156865,156866,156880,156894,156908,156922],{"__ignoreMap":63},[68,156867,156868,156870,156872,156874,156876,156878],{"class":70,"line":71},[68,156869,32008],{"class":92},[68,156871,997],{"class":85},[68,156873,104680],{"class":92},[68,156875,997],{"class":85},[68,156877,2047],{"class":92},[68,156879,32090],{"class":85},[68,156881,156882,156884,156886,156888,156890,156892],{"class":70,"line":78},[68,156883,32008],{"class":92},[68,156885,997],{"class":85},[68,156887,104680],{"class":92},[68,156889,997],{"class":85},[68,156891,1798],{"class":92},[68,156893,32090],{"class":85},[68,156895,156896,156898,156900,156902,156904,156906],{"class":70,"line":89},[68,156897,32008],{"class":92},[68,156899,997],{"class":85},[68,156901,104680],{"class":92},[68,156903,997],{"class":85},[68,156905,7443],{"class":872},[68,156907,32090],{"class":85},[68,156909,156910,156912,156914,156916,156918,156920],{"class":70,"line":115},[68,156911,32008],{"class":92},[68,156913,997],{"class":85},[68,156915,104680],{"class":92},[68,156917,997],{"class":85},[68,156919,33069],{"class":92},[68,156921,32090],{"class":85},[68,156923,156924,156926,156928,156930,156932,156934],{"class":70,"line":280},[68,156925,32008],{"class":92},[68,156927,997],{"class":85},[68,156929,104680],{"class":92},[68,156931,997],{"class":85},[68,156933,97261],{"class":92},[68,156935,32090],{"class":85},[19,156937,156938],{},"输出类似：",[58,156940,156943],{"className":156941,"code":156942,"language":6786,"meta":63},[6784],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[65,156944,156942],{"__ignoreMap":63},[19,156946,1210,156947,108856,156949,156951,156952,156954,156955,23095,156957,156954,156959,156961],{},[65,156948,2958],{},[65,156950,1754],{}," 的子类，",[65,156953,33069],{}," 可以当作 ",[65,156956,99],{},[65,156958,35580],{},[65,156960,600],{},"，但业务代码中不要滥用。",[58,156963,156965],{"className":31971,"code":156964,"language":31973,"meta":63,"style":63},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[65,156966,156967,156985],{"__ignoreMap":63},[68,156968,156969,156971,156973,156975,156977,156979,156982],{"class":70,"line":71},[68,156970,32008],{"class":92},[68,156972,997],{"class":85},[68,156974,33069],{"class":92},[68,156976,47159],{"class":102},[68,156978,1112],{"class":92},[68,156980,156981],{"class":85},")   ",[68,156983,156984],{"class":74},"# 2\n",[68,156986,156987,156989,156991,156993,156995,156997,156999],{"class":70,"line":78},[68,156988,32008],{"class":92},[68,156990,997],{"class":85},[68,156992,35580],{"class":92},[68,156994,47159],{"class":102},[68,156996,1112],{"class":92},[68,156998,47401],{"class":85},[68,157000,157001],{"class":74},"# 1\n",[14,157003,157005],{"id":157004},"_26-类型转换","2.6 类型转换",[19,157007,157008],{},"常用转换函数：",[58,157010,157012],{"className":31971,"code":157011,"language":31973,"meta":63,"style":63},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[65,157013,157014,157024,157035,157045],{"__ignoreMap":63},[68,157015,157016,157018,157020,157022],{"class":70,"line":71},[68,157017,1754],{"class":92},[68,157019,997],{"class":85},[68,157021,55900],{"class":872},[68,157023,1757],{"class":85},[68,157025,157026,157028,157030,157033],{"class":70,"line":78},[68,157027,1790],{"class":92},[68,157029,997],{"class":85},[68,157031,157032],{"class":872},"\"3.14\"",[68,157034,1757],{"class":85},[68,157036,157037,157039,157041,157043],{"class":70,"line":89},[68,157038,2903],{"class":92},[68,157040,997],{"class":85},[68,157042,2047],{"class":92},[68,157044,1757],{"class":85},[68,157046,157047,157049,157051,157053],{"class":70,"line":115},[68,157048,2958],{"class":92},[68,157050,997],{"class":85},[68,157052,99],{"class":92},[68,157054,1757],{"class":85},[19,157056,16731],{},[58,157058,157060],{"className":31971,"code":157059,"language":31973,"meta":63,"style":63},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[65,157061,157062,157071,157082],{"__ignoreMap":63},[68,157063,157064,157066,157068],{"class":70,"line":71},[68,157065,147866],{"class":85},[68,157067,869],{"class":102},[68,157069,157070],{"class":872}," \"18\"\n",[68,157072,157073,157075,157077,157079],{"class":70,"line":78},[68,157074,147866],{"class":85},[68,157076,869],{"class":102},[68,157078,3982],{"class":92},[68,157080,157081],{"class":85},"(age)\n",[68,157083,157084,157086,157089,157091,157093],{"class":70,"line":89},[68,157085,32008],{"class":92},[68,157087,157088],{"class":85},"(age ",[68,157090,2217],{"class":102},[68,157092,1112],{"class":92},[68,157094,1757],{"class":85},[19,157096,157097],{},"输入得到的内容永远是字符串：",[58,157099,157101],{"className":31971,"code":157100,"language":31973,"meta":63,"style":63},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[65,157102,157103,157119],{"__ignoreMap":63},[68,157104,157105,157108,157110,157112,157114,157117],{"class":70,"line":71},[68,157106,157107],{"class":85},"num ",[68,157109,869],{"class":102},[68,157111,62189],{"class":92},[68,157113,997],{"class":85},[68,157115,157116],{"class":872},"\"请输入数字:\"",[68,157118,1757],{"class":85},[68,157120,157121,157123,157125,157127,157130],{"class":70,"line":78},[68,157122,32008],{"class":92},[68,157124,997],{"class":85},[68,157126,104680],{"class":92},[68,157128,157129],{"class":85},"(num))  ",[68,157131,157132],{"class":74},"# str\n",[19,157134,157135],{},"如果要做数学运算，必须转换：",[58,157137,157139],{"className":31971,"code":157138,"language":31973,"meta":63,"style":63},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[65,157140,157141,157159],{"__ignoreMap":63},[68,157142,157143,157145,157147,157149,157151,157153,157155,157157],{"class":70,"line":71},[68,157144,157107],{"class":85},[68,157146,869],{"class":102},[68,157148,3982],{"class":92},[68,157150,997],{"class":85},[68,157152,55405],{"class":92},[68,157154,997],{"class":85},[68,157156,157116],{"class":872},[68,157158,32090],{"class":85},[68,157160,157161,157163,157165,157167,157169],{"class":70,"line":78},[68,157162,32008],{"class":92},[68,157164,47212],{"class":85},[68,157166,2217],{"class":102},[68,157168,989],{"class":92},[68,157170,1757],{"class":85},[19,157172,157173],{},"常见错误：",[58,157175,157177],{"className":31971,"code":157176,"language":31973,"meta":63,"style":63},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[65,157178,157179,157192],{"__ignoreMap":63},[68,157180,157181,157183,157185,157187,157189],{"class":70,"line":71},[68,157182,1754],{"class":92},[68,157184,997],{"class":85},[68,157186,157032],{"class":872},[68,157188,156981],{"class":85},[68,157190,157191],{"class":74},"# 错误\n",[68,157193,157194,157196,157198,157201,157204],{"class":70,"line":78},[68,157195,1754],{"class":92},[68,157197,997],{"class":85},[68,157199,157200],{"class":872},"\"abc\"",[68,157202,157203],{"class":85},")    ",[68,157205,157191],{"class":74},[19,157207,157208],{},"正确写法：",[58,157210,157212],{"className":31971,"code":157211,"language":31973,"meta":63,"style":63},"num = float(\"3.14\")\n",[65,157213,157214],{"__ignoreMap":63},[68,157215,157216,157218,157220,157222,157224,157226],{"class":70,"line":71},[68,157217,157107],{"class":85},[68,157219,869],{"class":102},[68,157221,111370],{"class":92},[68,157223,997],{"class":85},[68,157225,157032],{"class":872},[68,157227,1757],{"class":85},[14,157229,157231],{"id":157230},"_27-运算符","2.7 运算符",[43,157233,157235],{"id":157234},"_271-算术运算符","2.7.1 算术运算符",[120,157237,157238,157249],{},[123,157239,157240],{},[126,157241,157242,157245,157247],{},[129,157243,157244],{},"运算符",[129,157246,27463],{},[129,157248,29085],{},[137,157250,157251,157265,157279,157293,157307,157321,157335],{},[126,157252,157253,157257,157260],{},[142,157254,157255],{},[65,157256,2217],{},[142,157258,157259],{},"加法",[142,157261,157262],{},[65,157263,157264],{},"1 + 2",[126,157266,157267,157271,157274],{},[142,157268,157269],{},[65,157270,2268],{},[142,157272,157273],{},"减法",[142,157275,157276],{},[65,157277,157278],{},"5 - 3",[126,157280,157281,157285,157288],{},[142,157282,157283],{},[65,157284,2191],{},[142,157286,157287],{},"乘法",[142,157289,157290],{},[65,157291,157292],{},"2 * 3",[126,157294,157295,157299,157302],{},[142,157296,157297],{},[65,157298,2320],{},[142,157300,157301],{},"除法，结果是浮点数",[142,157303,157304],{},[65,157305,157306],{},"5 \u002F 2",[126,157308,157309,157313,157316],{},[142,157310,157311],{},[65,157312,34922],{},[142,157314,157315],{},"整除",[142,157317,157318],{},[65,157319,157320],{},"5 \u002F\u002F 2",[126,157322,157323,157327,157330],{},[142,157324,157325],{},[65,157326,2064],{},[142,157328,157329],{},"取余",[142,157331,157332],{},[65,157333,157334],{},"5 % 2",[126,157336,157337,157341,157344],{},[142,157338,157339],{},[65,157340,12259],{},[142,157342,157343],{},"幂运算",[142,157345,157346],{},[65,157347,157348],{},"2 ** 3",[19,157350,16731],{},[58,157352,157354],{"className":31971,"code":157353,"language":31973,"meta":63,"style":63},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[65,157355,157356,157374,157391,157408],{"__ignoreMap":63},[68,157357,157358,157360,157362,157364,157367,157369,157371],{"class":70,"line":71},[68,157359,32008],{"class":92},[68,157361,997],{"class":85},[68,157363,2055],{"class":92},[68,157365,157366],{"class":102}," \u002F",[68,157368,984],{"class":92},[68,157370,156981],{"class":85},[68,157372,157373],{"class":74},"# 2.5\n",[68,157375,157376,157378,157380,157382,157385,157387,157389],{"class":70,"line":78},[68,157377,32008],{"class":92},[68,157379,997],{"class":85},[68,157381,2055],{"class":92},[68,157383,157384],{"class":102}," \u002F\u002F",[68,157386,984],{"class":92},[68,157388,47401],{"class":85},[68,157390,156984],{"class":74},[68,157392,157393,157395,157397,157399,157402,157404,157406],{"class":70,"line":89},[68,157394,32008],{"class":92},[68,157396,997],{"class":85},[68,157398,2055],{"class":92},[68,157400,157401],{"class":102}," %",[68,157403,984],{"class":92},[68,157405,156981],{"class":85},[68,157407,157001],{"class":74},[68,157409,157410,157412,157414,157416,157419,157421,157423],{"class":70,"line":115},[68,157411,32008],{"class":92},[68,157413,997],{"class":85},[68,157415,267],{"class":92},[68,157417,157418],{"class":102}," **",[68,157420,79648],{"class":92},[68,157422,47401],{"class":85},[68,157424,157425],{"class":74},"# 8\n",[43,157427,157429],{"id":157428},"_272-赋值运算符","2.7.2 赋值运算符",[58,157431,157433],{"className":31971,"code":157432,"language":31973,"meta":63,"style":63},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[65,157434,157435,157443,157451,157459,157467],{"__ignoreMap":63},[68,157436,157437,157439,157441],{"class":70,"line":71},[68,157438,157107],{"class":85},[68,157440,869],{"class":102},[68,157442,60012],{"class":92},[68,157444,157445,157447,157449],{"class":70,"line":78},[68,157446,157107],{"class":85},[68,157448,11075],{"class":102},[68,157450,56011],{"class":92},[68,157452,157453,157455,157457],{"class":70,"line":89},[68,157454,157107],{"class":85},[68,157456,151572],{"class":102},[68,157458,49316],{"class":92},[68,157460,157461,157463,157465],{"class":70,"line":115},[68,157462,157107],{"class":85},[68,157464,138468],{"class":102},[68,157466,121609],{"class":92},[68,157468,157469,157471,157474],{"class":70,"line":280},[68,157470,157107],{"class":85},[68,157472,157473],{"class":102},"\u002F=",[68,157475,49316],{"class":92},[19,157477,157478],{},"等价关系：",[58,157480,157482],{"className":31971,"code":157481,"language":31973,"meta":63,"style":63},"num += 1\nnum = num + 1\n",[65,157483,157484,157492],{"__ignoreMap":63},[68,157485,157486,157488,157490],{"class":70,"line":71},[68,157487,157107],{"class":85},[68,157489,11075],{"class":102},[68,157491,57283],{"class":92},[68,157493,157494,157496,157498,157501,157503],{"class":70,"line":78},[68,157495,157107],{"class":85},[68,157497,869],{"class":102},[68,157499,157500],{"class":85}," num ",[68,157502,2217],{"class":102},[68,157504,57283],{"class":92},[19,157506,157507,157508,102592,157511,29978],{},"Python 没有 ",[65,157509,157510],{},"num++",[65,157512,157513],{},"num--",[43,157515,157517],{"id":157516},"_273-比较运算符","2.7.3 比较运算符",[19,157519,157520],{},"比较运算结果是布尔值。",[58,157522,157524],{"className":31971,"code":157523,"language":31973,"meta":63,"style":63},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[65,157525,157526,157540,157555,157569],{"__ignoreMap":63},[68,157527,157528,157530,157532,157534,157536,157538],{"class":70,"line":71},[68,157529,32008],{"class":92},[68,157531,997],{"class":85},[68,157533,2182],{"class":92},[68,157535,27816],{"class":102},[68,157537,3748],{"class":92},[68,157539,1757],{"class":85},[68,157541,157542,157544,157546,157548,157551,157553],{"class":70,"line":78},[68,157543,32008],{"class":92},[68,157545,997],{"class":85},[68,157547,2182],{"class":92},[68,157549,157550],{"class":102}," >=",[68,157552,989],{"class":92},[68,157554,1757],{"class":85},[68,157556,157557,157559,157561,157563,157565,157567],{"class":70,"line":89},[68,157558,32008],{"class":92},[68,157560,997],{"class":85},[68,157562,2182],{"class":92},[68,157564,103133],{"class":102},[68,157566,3683],{"class":92},[68,157568,1757],{"class":85},[68,157570,157571,157573,157575,157577,157580,157582],{"class":70,"line":115},[68,157572,32008],{"class":92},[68,157574,997],{"class":85},[68,157576,2182],{"class":92},[68,157578,157579],{"class":102}," !=",[68,157581,3683],{"class":92},[68,157583,1757],{"class":85},[19,157585,157586,157587,157589,157590,29978],{},"注意：判断相等用 ",[65,157588,4548],{},"，赋值用 ",[65,157591,869],{},[58,157593,157595],{"className":31971,"code":157594,"language":31973,"meta":63,"style":63},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[65,157596,157597,157609],{"__ignoreMap":63},[68,157598,157599,157601,157603,157606],{"class":70,"line":71},[68,157600,147866],{"class":85},[68,157602,869],{"class":102},[68,157604,157605],{"class":92}," 18",[68,157607,157608],{"class":74},"       # 赋值\n",[68,157610,157611,157613,157615,157617],{"class":70,"line":78},[68,157612,147866],{"class":85},[68,157614,4548],{"class":102},[68,157616,157605],{"class":92},[68,157618,157619],{"class":74},"      # 判断是否相等\n",[43,157621,157623],{"id":157622},"_274-逻辑运算符","2.7.4 逻辑运算符",[120,157625,157626,157634],{},[123,157627,157628],{},[126,157629,157630,157632],{},[129,157631,157244],{},[129,157633,27463],{},[137,157635,157636,157645,157654],{},[126,157637,157638,157642],{},[142,157639,157640],{},[65,157641,32055],{},[142,157643,157644],{},"并且",[126,157646,157647,157651],{},[142,157648,157649],{},[65,157650,116663],{},[142,157652,157653],{},"或者",[126,157655,157656,157661],{},[142,157657,157658],{},[65,157659,157660],{},"not",[142,157662,157663],{},"取反",[58,157665,157667],{"className":31971,"code":157666,"language":31973,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[65,157668,157669,157677,157686,157690,157705,157719],{"__ignoreMap":63},[68,157670,157671,157673,157675],{"class":70,"line":71},[68,157672,147866],{"class":85},[68,157674,869],{"class":102},[68,157676,89641],{"class":92},[68,157678,157679,157682,157684],{"class":70,"line":78},[68,157680,157681],{"class":85},"has_ticket ",[68,157683,869],{"class":102},[68,157685,154919],{"class":92},[68,157687,157688],{"class":70,"line":89},[68,157689,4000],{"emptyLinePlaceholder":1679},[68,157691,157692,157694,157696,157698,157700,157702],{"class":70,"line":115},[68,157693,32008],{"class":92},[68,157695,157088],{"class":85},[68,157697,3312],{"class":102},[68,157699,157605],{"class":92},[68,157701,122002],{"class":102},[68,157703,157704],{"class":85}," has_ticket)\n",[68,157706,157707,157709,157711,157713,157715,157717],{"class":70,"line":280},[68,157708,32008],{"class":92},[68,157710,157088],{"class":85},[68,157712,861],{"class":102},[68,157714,157605],{"class":92},[68,157716,115774],{"class":102},[68,157718,157704],{"class":85},[68,157720,157721,157723,157725,157727],{"class":70,"line":301},[68,157722,32008],{"class":92},[68,157724,997],{"class":85},[68,157726,157660],{"class":102},[68,157728,157704],{"class":85},[14,157730,157732],{"id":157731},"_28-字符串定义","2.8 字符串定义",[19,157734,157735],{},"三种常见写法：",[58,157737,157739],{"className":31971,"code":157738,"language":31973,"meta":63,"style":63},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[65,157740,157741,157751,157760,157770],{"__ignoreMap":63},[68,157742,157743,157746,157748],{"class":70,"line":71},[68,157744,157745],{"class":85},"name1 ",[68,157747,869],{"class":102},[68,157749,157750],{"class":872}," '小明'\n",[68,157752,157753,157756,157758],{"class":70,"line":78},[68,157754,157755],{"class":85},"name2 ",[68,157757,869],{"class":102},[68,157759,150673],{"class":872},[68,157761,157762,157765,157767],{"class":70,"line":89},[68,157763,157764],{"class":85},"text ",[68,157766,869],{"class":102},[68,157768,157769],{"class":872}," \"\"\"这是多行字符串\n",[68,157771,157772],{"class":70,"line":115},[68,157773,157774],{"class":872},"可以换行\"\"\"\n",[19,157776,157777],{},"字符串中包含引号：",[58,157779,157781],{"className":31971,"code":157780,"language":31973,"meta":63,"style":63},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[65,157782,157783,157793,157803],{"__ignoreMap":63},[68,157784,157785,157788,157790],{"class":70,"line":71},[68,157786,157787],{"class":85},"msg ",[68,157789,869],{"class":102},[68,157791,157792],{"class":872}," \"他说:'你好'\"\n",[68,157794,157795,157798,157800],{"class":70,"line":78},[68,157796,157797],{"class":85},"msg2 ",[68,157799,869],{"class":102},[68,157801,157802],{"class":872}," '他说:\"你好\"'\n",[68,157804,157805,157808,157810,157813,157816,157819,157821],{"class":70,"line":89},[68,157806,157807],{"class":85},"msg3 ",[68,157809,869],{"class":102},[68,157811,157812],{"class":872}," \"他说:",[68,157814,157815],{"class":92},"\\\"",[68,157817,157818],{"class":872},"你好",[68,157820,157815],{"class":92},[68,157822,26727],{"class":872},[19,157824,157825],{},"常见转义字符：",[120,157827,157828,157837],{},[123,157829,157830],{},[126,157831,157832,157835],{},[129,157833,157834],{},"写法",[129,157836,102274],{},[137,157838,157839,157849,157858,157868,157877],{},[126,157840,157841,157846],{},[142,157842,157843],{},[65,157844,157845],{},"\\n",[142,157847,157848],{},"换行",[126,157850,157851,157855],{},[142,157852,157853],{},[65,157854,2835],{},[142,157856,157857],{},"制表符",[126,157859,157860,157865],{},[142,157861,157862],{},[65,157863,157864],{},"\\\\",[142,157866,157867],{},"反斜杠",[126,157869,157870,157874],{},[142,157871,157872],{},[65,157873,157815],{},[142,157875,157876],{},"双引号",[126,157878,157879,157884],{},[142,157880,157881],{},[65,157882,157883],{},"\\'",[142,157885,157886],{},"单引号",[14,157888,157890],{"id":157889},"_29-字符串拼接","2.9 字符串拼接",[58,157892,157894],{"className":31971,"code":157893,"language":31973,"meta":63,"style":63},"name = \"小明\"\nprint(\"你好，\" + name)\n",[65,157895,157896,157904],{"__ignoreMap":63},[68,157897,157898,157900,157902],{"class":70,"line":71},[68,157899,147856],{"class":85},[68,157901,869],{"class":102},[68,157903,150673],{"class":872},[68,157905,157906,157908,157910,157913,157915],{"class":70,"line":78},[68,157907,32008],{"class":92},[68,157909,997],{"class":85},[68,157911,157912],{"class":872},"\"你好，\"",[68,157914,47159],{"class":102},[68,157916,157917],{"class":85}," name)\n",[19,157919,157920],{},"字符串只能和字符串拼接：",[58,157922,157924],{"className":31971,"code":157923,"language":31973,"meta":63,"style":63},"age = 18\nprint(\"年龄:\" + str(age))\n",[65,157925,157926,157934],{"__ignoreMap":63},[68,157927,157928,157930,157932],{"class":70,"line":71},[68,157929,147866],{"class":85},[68,157931,869],{"class":102},[68,157933,147871],{"class":92},[68,157935,157936,157938,157940,157942,157944,157946],{"class":70,"line":78},[68,157937,32008],{"class":92},[68,157939,997],{"class":85},[68,157941,147837],{"class":872},[68,157943,47159],{"class":102},[68,157945,75497],{"class":92},[68,157947,157948],{"class":85},"(age))\n",[19,157950,157951],{},"更推荐使用格式化字符串。",[14,157953,157955],{"id":157954},"_210-字符串格式化","2.10 字符串格式化",[43,157957,157959],{"id":157958},"_2101-百分号格式化","2.10.1 百分号格式化",[58,157961,157963],{"className":31971,"code":157962,"language":31973,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[65,157964,157965,157973,157981,157990,157994],{"__ignoreMap":63},[68,157966,157967,157969,157971],{"class":70,"line":71},[68,157968,147856],{"class":85},[68,157970,869],{"class":102},[68,157972,150673],{"class":872},[68,157974,157975,157977,157979],{"class":70,"line":78},[68,157976,147866],{"class":85},[68,157978,869],{"class":102},[68,157980,147871],{"class":92},[68,157982,157983,157985,157987],{"class":70,"line":89},[68,157984,156678],{"class":85},[68,157986,869],{"class":102},[68,157988,157989],{"class":92}," 95.5\n",[68,157991,157992],{"class":70,"line":115},[68,157993,4000],{"emptyLinePlaceholder":1679},[68,157995,157996,157998,158000,158003,158006,158009,158012,158015,158018,158020,158022],{"class":70,"line":280},[68,157997,32008],{"class":92},[68,157999,997],{"class":85},[68,158001,158002],{"class":872},"\"姓名:",[68,158004,158005],{"class":92},"%s",[68,158007,158008],{"class":872}," 年龄:",[68,158010,158011],{"class":92},"%d",[68,158013,158014],{"class":872}," 分数:",[68,158016,158017],{"class":92},"%.1f",[68,158019,1987],{"class":872},[68,158021,157401],{"class":102},[68,158023,158024],{"class":85}," (name, age, score))\n",[19,158026,158027],{},"常用占位符：",[120,158029,158030,158039],{},[123,158031,158032],{},[126,158033,158034,158037],{},[129,158035,158036],{},"占位符",[129,158038,27463],{},[137,158040,158041,158049,158057],{},[126,158042,158043,158047],{},[142,158044,158045],{},[65,158046,158005],{},[142,158048,156544],{},[126,158050,158051,158055],{},[142,158052,158053],{},[65,158054,158011],{},[142,158056,156522],{},[126,158058,158059,158064],{},[142,158060,158061],{},[65,158062,158063],{},"%f",[142,158065,156533],{},[19,158067,158068],{},"精度控制：",[58,158070,158072],{"className":31971,"code":158071,"language":31973,"meta":63,"style":63},"price = 12.3456\nprint(\"%.2f\" % price)\n",[65,158073,158074,158083],{"__ignoreMap":63},[68,158075,158076,158078,158080],{"class":70,"line":71},[68,158077,148001],{"class":85},[68,158079,869],{"class":102},[68,158081,158082],{"class":92}," 12.3456\n",[68,158084,158085,158087,158089,158091,158094,158096,158098],{"class":70,"line":78},[68,158086,32008],{"class":92},[68,158088,997],{"class":85},[68,158090,1987],{"class":872},[68,158092,158093],{"class":92},"%.2f",[68,158095,1987],{"class":872},[68,158097,157401],{"class":102},[68,158099,158100],{"class":85}," price)\n",[43,158102,158104],{"id":158103},"_2102-format方法","2.10.2 format方法",[58,158106,158108],{"className":31971,"code":158107,"language":31973,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[65,158109,158110,158118,158126,158130,158149,158169],{"__ignoreMap":63},[68,158111,158112,158114,158116],{"class":70,"line":71},[68,158113,147856],{"class":85},[68,158115,869],{"class":102},[68,158117,150673],{"class":872},[68,158119,158120,158122,158124],{"class":70,"line":78},[68,158121,147866],{"class":85},[68,158123,869],{"class":102},[68,158125,147871],{"class":92},[68,158127,158128],{"class":70,"line":89},[68,158129,4000],{"emptyLinePlaceholder":1679},[68,158131,158132,158134,158136,158138,158140,158142,158144,158146],{"class":70,"line":115},[68,158133,32008],{"class":92},[68,158135,997],{"class":85},[68,158137,158002],{"class":872},[68,158139,34052],{"class":92},[68,158141,158008],{"class":872},[68,158143,34052],{"class":92},[68,158145,1987],{"class":872},[68,158147,158148],{"class":85},".format(name, age))\n",[68,158150,158151,158153,158155,158157,158160,158162,158165,158167],{"class":70,"line":280},[68,158152,32008],{"class":92},[68,158154,997],{"class":85},[68,158156,158002],{"class":872},[68,158158,158159],{"class":92},"{0}",[68,158161,158008],{"class":872},[68,158163,158164],{"class":92},"{1}",[68,158166,1987],{"class":872},[68,158168,158148],{"class":85},[68,158170,158171,158173,158175,158177,158180,158182,158185,158187,158190,158192,158194,158197,158199,158201],{"class":70,"line":301},[68,158172,32008],{"class":92},[68,158174,997],{"class":85},[68,158176,158002],{"class":872},[68,158178,158179],{"class":92},"{name}",[68,158181,158008],{"class":872},[68,158183,158184],{"class":92},"{age}",[68,158186,1987],{"class":872},[68,158188,158189],{"class":85},".format(",[68,158191,81387],{"class":6815},[68,158193,869],{"class":102},[68,158195,158196],{"class":85},"name, ",[68,158198,71803],{"class":6815},[68,158200,869],{"class":102},[68,158202,158203],{"class":85},"age))\n",[43,158205,158207],{"id":158206},"_2103-f-string","2.10.3 f-string",[19,158209,158210],{},"推荐写法：",[58,158212,158214],{"className":31971,"code":158213,"language":31973,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[65,158215,158216,158224,158232,158240,158244],{"__ignoreMap":63},[68,158217,158218,158220,158222],{"class":70,"line":71},[68,158219,147856],{"class":85},[68,158221,869],{"class":102},[68,158223,150673],{"class":872},[68,158225,158226,158228,158230],{"class":70,"line":78},[68,158227,147866],{"class":85},[68,158229,869],{"class":102},[68,158231,147871],{"class":92},[68,158233,158234,158236,158238],{"class":70,"line":89},[68,158235,156678],{"class":85},[68,158237,869],{"class":102},[68,158239,157989],{"class":92},[68,158241,158242],{"class":70,"line":115},[68,158243,4000],{"emptyLinePlaceholder":1679},[68,158245,158246,158248,158250,158252,158254,158256,158258,158260,158262,158264,158266,158268,158270,158272,158275,158278,158280,158282],{"class":70,"line":280},[68,158247,32008],{"class":92},[68,158249,997],{"class":85},[68,158251,1801],{"class":102},[68,158253,158002],{"class":872},[68,158255,2632],{"class":92},[68,158257,81387],{"class":85},[68,158259,2681],{"class":92},[68,158261,158008],{"class":872},[68,158263,2632],{"class":92},[68,158265,71803],{"class":85},[68,158267,2681],{"class":92},[68,158269,158014],{"class":872},[68,158271,2632],{"class":92},[68,158273,158274],{"class":85},"score",[68,158276,158277],{"class":102},":.1f",[68,158279,2681],{"class":92},[68,158281,1987],{"class":872},[68,158283,1757],{"class":85},[19,158285,158286],{},"表达式也可以放进去：",[58,158288,158290],{"className":31971,"code":158289,"language":31973,"meta":63,"style":63},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[65,158291,158292,158300,158308],{"__ignoreMap":63},[68,158293,158294,158296,158298],{"class":70,"line":71},[68,158295,148001],{"class":85},[68,158297,869],{"class":102},[68,158299,148006],{"class":92},[68,158301,158302,158304,158306],{"class":70,"line":78},[68,158303,148011],{"class":85},[68,158305,869],{"class":102},[68,158307,56011],{"class":92},[68,158309,158310,158312,158314,158316,158319,158321,158323,158325,158328,158330,158333],{"class":70,"line":89},[68,158311,32008],{"class":92},[68,158313,997],{"class":85},[68,158315,1801],{"class":102},[68,158317,158318],{"class":872},"\"总价:",[68,158320,2632],{"class":92},[68,158322,148001],{"class":85},[68,158324,2191],{"class":102},[68,158326,158327],{"class":85}," count",[68,158329,2681],{"class":92},[68,158331,158332],{"class":872},"元\"",[68,158334,1757],{"class":85},[14,158336,158338],{"id":158337},"_211-input输入","2.11 input输入",[19,158340,158341,158344],{},[65,158342,158343],{},"input()"," 会暂停程序，等待用户输入。",[58,158346,158348],{"className":31971,"code":158347,"language":31973,"meta":63,"style":63},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[65,158349,158350,158364],{"__ignoreMap":63},[68,158351,158352,158354,158356,158358,158360,158362],{"class":70,"line":71},[68,158353,147856],{"class":85},[68,158355,869],{"class":102},[68,158357,62189],{"class":92},[68,158359,997],{"class":85},[68,158361,153699],{"class":872},[68,158363,1757],{"class":85},[68,158365,158366,158368,158370,158372,158375,158377,158379,158381,158383],{"class":70,"line":78},[68,158367,32008],{"class":92},[68,158369,997],{"class":85},[68,158371,1801],{"class":102},[68,158373,158374],{"class":872},"\"你好，",[68,158376,2632],{"class":92},[68,158378,81387],{"class":85},[68,158380,2681],{"class":92},[68,158382,1987],{"class":872},[68,158384,1757],{"class":85},[19,158386,158387],{},"输入整数：",[58,158389,158391],{"className":31971,"code":158390,"language":31973,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[65,158392,158393,158411],{"__ignoreMap":63},[68,158394,158395,158397,158399,158401,158403,158405,158407,158409],{"class":70,"line":71},[68,158396,147866],{"class":85},[68,158398,869],{"class":102},[68,158400,3982],{"class":92},[68,158402,997],{"class":85},[68,158404,55405],{"class":92},[68,158406,997],{"class":85},[68,158408,153714],{"class":872},[68,158410,32090],{"class":85},[68,158412,158413,158415,158417,158419,158422,158424,158426,158428,158431,158433],{"class":70,"line":78},[68,158414,32008],{"class":92},[68,158416,997],{"class":85},[68,158418,1801],{"class":102},[68,158420,158421],{"class":872},"\"明年你",[68,158423,2632],{"class":92},[68,158425,147866],{"class":85},[68,158427,2217],{"class":102},[68,158429,158430],{"class":92}," 1}",[68,158432,150724],{"class":872},[68,158434,1757],{"class":85},[19,158436,158437],{},"输入小数：",[58,158439,158441],{"className":31971,"code":158440,"language":31973,"meta":63,"style":63},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[65,158442,158443,158462],{"__ignoreMap":63},[68,158444,158445,158447,158449,158451,158453,158455,158457,158460],{"class":70,"line":71},[68,158446,156651],{"class":85},[68,158448,869],{"class":102},[68,158450,111370],{"class":92},[68,158452,997],{"class":85},[68,158454,55405],{"class":92},[68,158456,997],{"class":85},[68,158458,158459],{"class":872},"\"请输入身高:\"",[68,158461,32090],{"class":85},[68,158463,158464,158466,158468,158470,158473,158475,158477,158480,158482,158485],{"class":70,"line":78},[68,158465,32008],{"class":92},[68,158467,997],{"class":85},[68,158469,1801],{"class":102},[68,158471,158472],{"class":872},"\"身高:",[68,158474,2632],{"class":92},[68,158476,26576],{"class":85},[68,158478,158479],{"class":102},":.2f",[68,158481,2681],{"class":92},[68,158483,158484],{"class":872},"米\"",[68,158486,1757],{"class":85},[14,158488,158490],{"id":158489},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158492,124865],{},[48,158494,158495,158498,158501,158504],{},[51,158496,158497],{},"输入商品单价。",[51,158499,158500],{},"输入购买数量。",[51,158502,158503],{},"输入折扣，例如 0.8 表示八折。",[51,158505,158506],{},"输出最终金额，保留两位小数。",[19,158508,11633],{},[58,158510,158512],{"className":31971,"code":158511,"language":31973,"meta":63,"style":63},"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",[65,158513,158514,158533,158552,158572,158576,158596,158600,158623,158644,158666],{"__ignoreMap":63},[68,158515,158516,158518,158520,158522,158524,158526,158528,158531],{"class":70,"line":71},[68,158517,148001],{"class":85},[68,158519,869],{"class":102},[68,158521,111370],{"class":92},[68,158523,997],{"class":85},[68,158525,55405],{"class":92},[68,158527,997],{"class":85},[68,158529,158530],{"class":872},"\"请输入商品单价:\"",[68,158532,32090],{"class":85},[68,158534,158535,158537,158539,158541,158543,158545,158547,158550],{"class":70,"line":78},[68,158536,148011],{"class":85},[68,158538,869],{"class":102},[68,158540,3982],{"class":92},[68,158542,997],{"class":85},[68,158544,55405],{"class":92},[68,158546,997],{"class":85},[68,158548,158549],{"class":872},"\"请输入购买数量:\"",[68,158551,32090],{"class":85},[68,158553,158554,158557,158559,158561,158563,158565,158567,158570],{"class":70,"line":89},[68,158555,158556],{"class":85},"discount ",[68,158558,869],{"class":102},[68,158560,111370],{"class":92},[68,158562,997],{"class":85},[68,158564,55405],{"class":92},[68,158566,997],{"class":85},[68,158568,158569],{"class":872},"\"请输入折扣:\"",[68,158571,32090],{"class":85},[68,158573,158574],{"class":70,"line":115},[68,158575,4000],{"emptyLinePlaceholder":1679},[68,158577,158578,158581,158583,158586,158588,158591,158593],{"class":70,"line":280},[68,158579,158580],{"class":85},"total ",[68,158582,869],{"class":102},[68,158584,158585],{"class":85}," price ",[68,158587,2191],{"class":102},[68,158589,158590],{"class":85}," count ",[68,158592,2191],{"class":102},[68,158594,158595],{"class":85}," discount\n",[68,158597,158598],{"class":70,"line":301},[68,158599,4000],{"emptyLinePlaceholder":1679},[68,158601,158602,158604,158606,158608,158611,158613,158615,158617,158619,158621],{"class":70,"line":320},[68,158603,32008],{"class":92},[68,158605,997],{"class":85},[68,158607,1801],{"class":102},[68,158609,158610],{"class":872},"\"商品单价:",[68,158612,2632],{"class":92},[68,158614,81392],{"class":85},[68,158616,158479],{"class":102},[68,158618,2681],{"class":92},[68,158620,1987],{"class":872},[68,158622,1757],{"class":85},[68,158624,158625,158627,158629,158631,158634,158636,158638,158640,158642],{"class":70,"line":2915},[68,158626,32008],{"class":92},[68,158628,997],{"class":85},[68,158630,1801],{"class":102},[68,158632,158633],{"class":872},"\"购买数量:",[68,158635,2632],{"class":92},[68,158637,86011],{"class":85},[68,158639,2681],{"class":92},[68,158641,1987],{"class":872},[68,158643,1757],{"class":85},[68,158645,158646,158648,158650,158652,158655,158657,158660,158662,158664],{"class":70,"line":2921},[68,158647,32008],{"class":92},[68,158649,997],{"class":85},[68,158651,1801],{"class":102},[68,158653,158654],{"class":872},"\"折扣:",[68,158656,2632],{"class":92},[68,158658,158659],{"class":85},"discount",[68,158661,2681],{"class":92},[68,158663,1987],{"class":872},[68,158665,1757],{"class":85},[68,158667,158668,158670,158672,158674,158677,158679,158682,158684,158686,158688],{"class":70,"line":2933},[68,158669,32008],{"class":92},[68,158671,997],{"class":85},[68,158673,1801],{"class":102},[68,158675,158676],{"class":872},"\"应付金额:",[68,158678,2632],{"class":92},[68,158680,158681],{"class":85},"total",[68,158683,158479],{"class":102},[68,158685,2681],{"class":92},[68,158687,158332],{"class":872},[68,158689,1757],{"class":85},[14,158691,158693],{"id":158692},"_213-易错点","2.13 易错点",[48,158695,158696,158701,158707,158715,158718],{},[51,158697,158698,158700],{},[65,158699,158343],{}," 的结果是字符串，做运算前要转换。",[51,158702,158703,158704,29978],{},"字符串拼接时，数字要先 ",[65,158705,158706],{},"str()",[51,158708,158709,158711,158712,158714],{},[65,158710,869],{}," 是赋值，",[65,158713,4548],{}," 是比较。",[51,158716,158717],{},"Python 没有自增自减运算符。",[51,158719,158720],{},"浮点数计算可能有精度误差：",[58,158722,158724],{"className":31971,"code":158723,"language":31973,"meta":63,"style":63},"print(0.1 + 0.2)\n",[65,158725,158726],{"__ignoreMap":63},[68,158727,158728,158730,158732,158734,158736,158739],{"class":70,"line":71},[68,158729,32008],{"class":92},[68,158731,997],{"class":85},[68,158733,1013],{"class":92},[68,158735,47159],{"class":102},[68,158737,158738],{"class":92}," 0.2",[68,158740,1757],{"class":85},[19,158742,158743,158744,158747],{},"金额计算如果要求严格，可以后续学习 ",[65,158745,158746],{},"decimal"," 模块。",[14,158749,158751],{"id":158750},"_214-本章练习","2.14 本章练习",[48,158753,158754,158757,158760,158763,158766],{},[51,158755,158756],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[51,158758,158759],{},"输入圆的半径，计算面积，保留两位小数。",[51,158761,158762],{},"输入工资和奖金，计算总收入。",[51,158764,158765],{},"输入摄氏温度，转换为华氏温度。",[51,158767,158768],{},"写一个 BMI 计算程序：",[58,158770,158773],{"className":158771,"code":158772,"language":6786,"meta":63},[6784],"BMI = 体重kg \u002F 身高m ** 2\n",[65,158774,158772],{"__ignoreMap":63},[1652,158776,158777],{},"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":63,"searchDepth":78,"depth":78,"links":158779},[158780,158781,158782,158783,158784,158785,158786,158792,158793,158794,158799,158800,158801,158802],{"id":156341,"depth":78,"text":156342},{"id":156450,"depth":78,"text":156451},{"id":156621,"depth":78,"text":156622},{"id":156698,"depth":78,"text":156699},{"id":52324,"depth":78,"text":52325},{"id":157004,"depth":78,"text":157005},{"id":157230,"depth":78,"text":157231,"children":158787},[158788,158789,158790,158791],{"id":157234,"depth":89,"text":157235},{"id":157428,"depth":89,"text":157429},{"id":157516,"depth":89,"text":157517},{"id":157622,"depth":89,"text":157623},{"id":157731,"depth":78,"text":157732},{"id":157889,"depth":78,"text":157890},{"id":157954,"depth":78,"text":157955,"children":158795},[158796,158797,158798],{"id":157958,"depth":89,"text":157959},{"id":158103,"depth":89,"text":158104},{"id":158206,"depth":89,"text":158207},{"id":158337,"depth":78,"text":158338},{"id":158489,"depth":78,"text":158490},{"id":158692,"depth":78,"text":158693},{"id":158750,"depth":78,"text":158751},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156333,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158809,"title":158810,"body":158811,"description":1676,"extension":1677,"meta":160447,"navigation":1679,"path":160448,"seo":160449,"stem":160450,"__hash__":160451},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158812,"toc":160428},[158813,158816,158820,158823,158838,158841,158869,158873,158923,158925,158941,158944,158970,158973,158977,159044,159047,159063,159067,159070,159188,159191,159198,159247,159253,159257,159260,159373,159376,159380,159384,159387,159437,159441,159444,159494,159498,159501,159539,159543,159546,159592,159595,159630,159634,159639,159642,159688,159690,159757,159761,159767,159878,159887,159891,159893,159904,159906,160072,160076,160078,160092,160094,160308,160312,160331,160348,160351,160397,160401,160425],[10,158814,158810],{"id":158815},"_3-判断语句",[14,158817,158819],{"id":158818},"_31-布尔值","3.1 布尔值",[19,158821,158822],{},"判断语句依赖布尔值：",[58,158824,158826],{"className":31971,"code":158825,"language":31973,"meta":63,"style":63},"True\nFalse\n",[65,158827,158828,158833],{"__ignoreMap":63},[68,158829,158830],{"class":70,"line":71},[68,158831,158832],{"class":92},"True\n",[68,158834,158835],{"class":70,"line":78},[68,158836,158837],{"class":92},"False\n",[19,158839,158840],{},"比较表达式会产生布尔值：",[58,158842,158844],{"className":31971,"code":158843,"language":31973,"meta":63,"style":63},"age = 18\nprint(age >= 18)  # True\n",[65,158845,158846,158854],{"__ignoreMap":63},[68,158847,158848,158850,158852],{"class":70,"line":71},[68,158849,147866],{"class":85},[68,158851,869],{"class":102},[68,158853,147871],{"class":92},[68,158855,158856,158858,158860,158862,158864,158866],{"class":70,"line":78},[68,158857,32008],{"class":92},[68,158859,157088],{"class":85},[68,158861,3312],{"class":102},[68,158863,157605],{"class":92},[68,158865,47401],{"class":85},[68,158867,158868],{"class":74},"# True\n",[14,158870,158872],{"id":158871},"_32-if基础语法","3.2 if基础语法",[58,158874,158876],{"className":31971,"code":158875,"language":31973,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[65,158877,158878,158896,158900,158912],{"__ignoreMap":63},[68,158879,158880,158882,158884,158886,158888,158890,158892,158894],{"class":70,"line":71},[68,158881,147866],{"class":85},[68,158883,869],{"class":102},[68,158885,3982],{"class":92},[68,158887,997],{"class":85},[68,158889,55405],{"class":92},[68,158891,997],{"class":85},[68,158893,153714],{"class":872},[68,158895,32090],{"class":85},[68,158897,158898],{"class":70,"line":78},[68,158899,4000],{"emptyLinePlaceholder":1679},[68,158901,158902,158904,158906,158908,158910],{"class":70,"line":89},[68,158903,3134],{"class":102},[68,158905,17302],{"class":85},[68,158907,3312],{"class":102},[68,158909,157605],{"class":92},[68,158911,5338],{"class":85},[68,158913,158914,158916,158918,158921],{"class":70,"line":115},[68,158915,32892],{"class":92},[68,158917,997],{"class":85},[68,158919,158920],{"class":872},"\"可以进入网吧\"",[68,158922,1757],{"class":85},[19,158924,1210],{},[48,158926,158927,158932,158935,158938],{},[51,158928,158929,158931],{},[65,158930,3134],{}," 后面是条件表达式。",[51,158933,158934],{},"条件后面必须写冒号。",[51,158936,158937],{},"条件成立时执行缩进代码块。",[51,158939,158940],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158942,158943],{},"错误示例：",[58,158945,158947],{"className":31971,"code":158946,"language":31973,"meta":63,"style":63},"if age >= 18\n    print(\"可以进入\")\n",[65,158948,158949,158959],{"__ignoreMap":63},[68,158950,158951,158953,158955,158957],{"class":70,"line":71},[68,158952,3134],{"class":102},[68,158954,17302],{"class":85},[68,158956,3312],{"class":102},[68,158958,147871],{"class":92},[68,158960,158961,158963,158965,158968],{"class":70,"line":78},[68,158962,32892],{"class":92},[68,158964,997],{"class":85},[68,158966,158967],{"class":872},"\"可以进入\"",[68,158969,1757],{"class":85},[19,158971,158972],{},"缺少冒号。",[14,158974,158976],{"id":158975},"_33-if-else","3.3 if else",[58,158978,158980],{"className":31971,"code":158979,"language":31973,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[65,158981,158982,159000,159004,159016,159027,159033],{"__ignoreMap":63},[68,158983,158984,158986,158988,158990,158992,158994,158996,158998],{"class":70,"line":71},[68,158985,147866],{"class":85},[68,158987,869],{"class":102},[68,158989,3982],{"class":92},[68,158991,997],{"class":85},[68,158993,55405],{"class":92},[68,158995,997],{"class":85},[68,158997,153714],{"class":872},[68,158999,32090],{"class":85},[68,159001,159002],{"class":70,"line":78},[68,159003,4000],{"emptyLinePlaceholder":1679},[68,159005,159006,159008,159010,159012,159014],{"class":70,"line":89},[68,159007,3134],{"class":102},[68,159009,17302],{"class":85},[68,159011,3312],{"class":102},[68,159013,157605],{"class":92},[68,159015,5338],{"class":85},[68,159017,159018,159020,159022,159025],{"class":70,"line":115},[68,159019,32892],{"class":92},[68,159021,997],{"class":85},[68,159023,159024],{"class":872},"\"成年人\"",[68,159026,1757],{"class":85},[68,159028,159029,159031],{"class":70,"line":280},[68,159030,3303],{"class":102},[68,159032,5338],{"class":85},[68,159034,159035,159037,159039,159042],{"class":70,"line":301},[68,159036,32892],{"class":92},[68,159038,997],{"class":85},[68,159040,159041],{"class":872},"\"未成年人\"",[68,159043,1757],{"class":85},[19,159045,159046],{},"执行逻辑：",[48,159048,159049,159055,159060],{},[51,159050,159051,159052,159054],{},"条件成立，执行 ",[65,159053,3134],{}," 代码块。",[51,159056,159057,159058,159054],{},"条件不成立，执行 ",[65,159059,3303],{},[51,159061,159062],{},"两个代码块只会执行其中一个。",[14,159064,159066],{"id":159065},"_34-if-elif-else","3.4 if elif else",[19,159068,159069],{},"多条件判断：",[58,159071,159073],{"className":31971,"code":159072,"language":31973,"meta":63,"style":63},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[65,159074,159075,159093,159097,159111,159122,159136,159147,159160,159171,159177],{"__ignoreMap":63},[68,159076,159077,159079,159081,159083,159085,159087,159089,159091],{"class":70,"line":71},[68,159078,156678],{"class":85},[68,159080,869],{"class":102},[68,159082,3982],{"class":92},[68,159084,997],{"class":85},[68,159086,55405],{"class":92},[68,159088,997],{"class":85},[68,159090,153729],{"class":872},[68,159092,32090],{"class":85},[68,159094,159095],{"class":70,"line":78},[68,159096,4000],{"emptyLinePlaceholder":1679},[68,159098,159099,159101,159104,159106,159109],{"class":70,"line":89},[68,159100,3134],{"class":102},[68,159102,159103],{"class":85}," score ",[68,159105,3312],{"class":102},[68,159107,159108],{"class":92}," 90",[68,159110,5338],{"class":85},[68,159112,159113,159115,159117,159120],{"class":70,"line":115},[68,159114,32892],{"class":92},[68,159116,997],{"class":85},[68,159118,159119],{"class":872},"\"优秀\"",[68,159121,1757],{"class":85},[68,159123,159124,159127,159129,159131,159134],{"class":70,"line":280},[68,159125,159126],{"class":102},"elif",[68,159128,159103],{"class":85},[68,159130,3312],{"class":102},[68,159132,159133],{"class":92}," 80",[68,159135,5338],{"class":85},[68,159137,159138,159140,159142,159145],{"class":70,"line":301},[68,159139,32892],{"class":92},[68,159141,997],{"class":85},[68,159143,159144],{"class":872},"\"良好\"",[68,159146,1757],{"class":85},[68,159148,159149,159151,159153,159155,159158],{"class":70,"line":320},[68,159150,159126],{"class":102},[68,159152,159103],{"class":85},[68,159154,3312],{"class":102},[68,159156,159157],{"class":92}," 60",[68,159159,5338],{"class":85},[68,159161,159162,159164,159166,159169],{"class":70,"line":2915},[68,159163,32892],{"class":92},[68,159165,997],{"class":85},[68,159167,159168],{"class":872},"\"及格\"",[68,159170,1757],{"class":85},[68,159172,159173,159175],{"class":70,"line":2921},[68,159174,3303],{"class":102},[68,159176,5338],{"class":85},[68,159178,159179,159181,159183,159186],{"class":70,"line":2933},[68,159180,32892],{"class":92},[68,159182,997],{"class":85},[68,159184,159185],{"class":872},"\"不及格\"",[68,159187,1757],{"class":85},[19,159189,159190],{},"注意判断顺序很重要。",[19,159192,159193,159194,159197],{},"如果把 ",[65,159195,159196],{},"score >= 60"," 放在最前面：",[58,159199,159201],{"className":31971,"code":159200,"language":31973,"meta":63,"style":63},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[65,159202,159203,159215,159225,159237],{"__ignoreMap":63},[68,159204,159205,159207,159209,159211,159213],{"class":70,"line":71},[68,159206,3134],{"class":102},[68,159208,159103],{"class":85},[68,159210,3312],{"class":102},[68,159212,159157],{"class":92},[68,159214,5338],{"class":85},[68,159216,159217,159219,159221,159223],{"class":70,"line":78},[68,159218,32892],{"class":92},[68,159220,997],{"class":85},[68,159222,159168],{"class":872},[68,159224,1757],{"class":85},[68,159226,159227,159229,159231,159233,159235],{"class":70,"line":89},[68,159228,159126],{"class":102},[68,159230,159103],{"class":85},[68,159232,3312],{"class":102},[68,159234,159108],{"class":92},[68,159236,5338],{"class":85},[68,159238,159239,159241,159243,159245],{"class":70,"line":115},[68,159240,32892],{"class":92},[68,159242,997],{"class":85},[68,159244,159119],{"class":872},[68,159246,1757],{"class":85},[19,159248,159249,159250,159252],{},"成绩 95 会先满足 ",[65,159251,159196],{},"，后面的优秀分支就不会执行。",[14,159254,159256],{"id":159255},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159258,159259],{},"嵌套判断就是在一个判断内部再写判断。",[58,159261,159263],{"className":31971,"code":159262,"language":31973,"meta":63,"style":63},"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",[65,159264,159265,159283,159298,159302,159314,159328,159338,159345,159356,159362],{"__ignoreMap":63},[68,159266,159267,159269,159271,159273,159275,159277,159279,159281],{"class":70,"line":71},[68,159268,147866],{"class":85},[68,159270,869],{"class":102},[68,159272,3982],{"class":92},[68,159274,997],{"class":85},[68,159276,55405],{"class":92},[68,159278,997],{"class":85},[68,159280,153714],{"class":872},[68,159282,32090],{"class":85},[68,159284,159285,159287,159289,159291,159293,159296],{"class":70,"line":78},[68,159286,157681],{"class":85},[68,159288,869],{"class":102},[68,159290,62189],{"class":92},[68,159292,997],{"class":85},[68,159294,159295],{"class":872},"\"是否有票(y\u002Fn):\"",[68,159297,1757],{"class":85},[68,159299,159300],{"class":70,"line":89},[68,159301,4000],{"emptyLinePlaceholder":1679},[68,159303,159304,159306,159308,159310,159312],{"class":70,"line":115},[68,159305,3134],{"class":102},[68,159307,17302],{"class":85},[68,159309,3312],{"class":102},[68,159311,157605],{"class":92},[68,159313,5338],{"class":85},[68,159315,159316,159318,159321,159323,159326],{"class":70,"line":280},[68,159317,4700],{"class":102},[68,159319,159320],{"class":85}," has_ticket ",[68,159322,4548],{"class":102},[68,159324,159325],{"class":872}," \"y\"",[68,159327,5338],{"class":85},[68,159329,159330,159332,159334,159336],{"class":70,"line":301},[68,159331,34044],{"class":92},[68,159333,997],{"class":85},[68,159335,158967],{"class":872},[68,159337,1757],{"class":85},[68,159339,159340,159343],{"class":70,"line":320},[68,159341,159342],{"class":102},"    else",[68,159344,5338],{"class":85},[68,159346,159347,159349,159351,159354],{"class":70,"line":2915},[68,159348,34044],{"class":92},[68,159350,997],{"class":85},[68,159352,159353],{"class":872},"\"请先买票\"",[68,159355,1757],{"class":85},[68,159357,159358,159360],{"class":70,"line":2921},[68,159359,3303],{"class":102},[68,159361,5338],{"class":85},[68,159363,159364,159366,159368,159371],{"class":70,"line":2933},[68,159365,32892],{"class":92},[68,159367,997],{"class":85},[68,159369,159370],{"class":872},"\"未成年人禁止进入\"",[68,159372,1757],{"class":85},[19,159374,159375],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159377,159379],{"id":159378},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[43,159381,159383],{"id":159382},"_361-and","3.6.1 and",[19,159385,159386],{},"两个条件都成立才成立。",[58,159388,159390],{"className":31971,"code":159389,"language":31973,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[65,159391,159392,159400,159408,159412,159427],{"__ignoreMap":63},[68,159393,159394,159396,159398],{"class":70,"line":71},[68,159395,147866],{"class":85},[68,159397,869],{"class":102},[68,159399,89641],{"class":92},[68,159401,159402,159404,159406],{"class":70,"line":78},[68,159403,157681],{"class":85},[68,159405,869],{"class":102},[68,159407,154919],{"class":92},[68,159409,159410],{"class":70,"line":89},[68,159411,4000],{"emptyLinePlaceholder":1679},[68,159413,159414,159416,159418,159420,159422,159424],{"class":70,"line":115},[68,159415,3134],{"class":102},[68,159417,17302],{"class":85},[68,159419,3312],{"class":102},[68,159421,157605],{"class":92},[68,159423,122002],{"class":102},[68,159425,159426],{"class":85}," has_ticket:\n",[68,159428,159429,159431,159433,159435],{"class":70,"line":280},[68,159430,32892],{"class":92},[68,159432,997],{"class":85},[68,159434,158967],{"class":872},[68,159436,1757],{"class":85},[43,159438,159440],{"id":159439},"_362-or","3.6.2 or",[19,159442,159443],{},"只要一个条件成立就成立。",[58,159445,159447],{"className":31971,"code":159446,"language":31973,"meta":63,"style":63},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[65,159448,159449,159458,159467,159471,159483],{"__ignoreMap":63},[68,159450,159451,159454,159456],{"class":70,"line":71},[68,159452,159453],{"class":85},"is_vip ",[68,159455,869],{"class":102},[68,159457,127380],{"class":92},[68,159459,159460,159463,159465],{"class":70,"line":78},[68,159461,159462],{"class":85},"coupon ",[68,159464,869],{"class":102},[68,159466,154919],{"class":92},[68,159468,159469],{"class":70,"line":89},[68,159470,4000],{"emptyLinePlaceholder":1679},[68,159472,159473,159475,159478,159480],{"class":70,"line":115},[68,159474,3134],{"class":102},[68,159476,159477],{"class":85}," is_vip ",[68,159479,116663],{"class":102},[68,159481,159482],{"class":85}," coupon:\n",[68,159484,159485,159487,159489,159492],{"class":70,"line":280},[68,159486,32892],{"class":92},[68,159488,997],{"class":85},[68,159490,159491],{"class":872},"\"可以享受优惠\"",[68,159493,1757],{"class":85},[43,159495,159497],{"id":159496},"_363-not","3.6.3 not",[19,159499,159500],{},"取反。",[58,159502,159504],{"className":31971,"code":159503,"language":31973,"meta":63,"style":63},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[65,159505,159506,159515,159519,159528],{"__ignoreMap":63},[68,159507,159508,159511,159513],{"class":70,"line":71},[68,159509,159510],{"class":85},"is_closed ",[68,159512,869],{"class":102},[68,159514,127380],{"class":92},[68,159516,159517],{"class":70,"line":78},[68,159518,4000],{"emptyLinePlaceholder":1679},[68,159520,159521,159523,159525],{"class":70,"line":89},[68,159522,3134],{"class":102},[68,159524,40523],{"class":102},[68,159526,159527],{"class":85}," is_closed:\n",[68,159529,159530,159532,159534,159537],{"class":70,"line":115},[68,159531,32892],{"class":92},[68,159533,997],{"class":85},[68,159535,159536],{"class":872},"\"店铺营业中\"",[68,159538,1757],{"class":85},[14,159540,159542],{"id":159541},"_37-链式比较","3.7 链式比较",[19,159544,159545],{},"Python 支持链式比较：",[58,159547,159549],{"className":31971,"code":159548,"language":31973,"meta":63,"style":63},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[65,159550,159551,159560,159564,159581],{"__ignoreMap":63},[68,159552,159553,159555,159557],{"class":70,"line":71},[68,159554,156678],{"class":85},[68,159556,869],{"class":102},[68,159558,159559],{"class":92}," 85\n",[68,159561,159562],{"class":70,"line":78},[68,159563,4000],{"emptyLinePlaceholder":1679},[68,159565,159566,159568,159570,159573,159575,159577,159579],{"class":70,"line":89},[68,159567,3134],{"class":102},[68,159569,5692],{"class":92},[68,159571,159572],{"class":102}," \u003C=",[68,159574,159103],{"class":85},[68,159576,3190],{"class":102},[68,159578,7353],{"class":92},[68,159580,5338],{"class":85},[68,159582,159583,159585,159587,159590],{"class":70,"line":115},[68,159584,32892],{"class":92},[68,159586,997],{"class":85},[68,159588,159589],{"class":872},"\"成绩合法\"",[68,159591,1757],{"class":85},[19,159593,159594],{},"等价于：",[58,159596,159598],{"className":31971,"code":159597,"language":31973,"meta":63,"style":63},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[65,159599,159600,159620],{"__ignoreMap":63},[68,159601,159602,159604,159606,159608,159610,159612,159614,159616,159618],{"class":70,"line":71},[68,159603,3134],{"class":102},[68,159605,159103],{"class":85},[68,159607,3312],{"class":102},[68,159609,5692],{"class":92},[68,159611,122002],{"class":102},[68,159613,159103],{"class":85},[68,159615,3190],{"class":102},[68,159617,7353],{"class":92},[68,159619,5338],{"class":85},[68,159621,159622,159624,159626,159628],{"class":70,"line":78},[68,159623,32892],{"class":92},[68,159625,997],{"class":85},[68,159627,159589],{"class":872},[68,159629,1757],{"class":85},[14,159631,159633],{"id":159632},"_38-真值和假值","3.8 真值和假值",[19,159635,118040,159636,159638],{},[65,159637,3134],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159640,159641],{},"假值：",[58,159643,159645],{"className":31971,"code":159644,"language":31973,"meta":63,"style":63},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[65,159646,159647,159651,159656,159660,159664,159669,159673,159677,159682],{"__ignoreMap":63},[68,159648,159649],{"class":70,"line":71},[68,159650,158837],{"class":92},[68,159652,159653],{"class":70,"line":78},[68,159654,159655],{"class":92},"None\n",[68,159657,159658],{"class":70,"line":89},[68,159659,4684],{"class":92},[68,159661,159662],{"class":70,"line":115},[68,159663,33935],{"class":92},[68,159665,159666],{"class":70,"line":280},[68,159667,159668],{"class":872},"\"\"\n",[68,159670,159671],{"class":70,"line":301},[68,159672,33950],{"class":85},[68,159674,159675],{"class":70,"line":320},[68,159676,3577],{"class":85},[68,159678,159679],{"class":70,"line":2915},[68,159680,159681],{"class":85},"{}\n",[68,159683,159684,159686],{"class":70,"line":2921},[68,159685,156610],{"class":92},[68,159687,3577],{"class":85},[19,159689,16731],{},[58,159691,159693],{"className":31971,"code":159692,"language":31973,"meta":63,"style":63},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[65,159694,159695,159709,159713,159720,159740,159746],{"__ignoreMap":63},[68,159696,159697,159699,159701,159703,159705,159707],{"class":70,"line":71},[68,159698,147856],{"class":85},[68,159700,869],{"class":102},[68,159702,62189],{"class":92},[68,159704,997],{"class":85},[68,159706,153699],{"class":872},[68,159708,1757],{"class":85},[68,159710,159711],{"class":70,"line":78},[68,159712,4000],{"emptyLinePlaceholder":1679},[68,159714,159715,159717],{"class":70,"line":89},[68,159716,3134],{"class":102},[68,159718,159719],{"class":85}," name:\n",[68,159721,159722,159724,159726,159728,159730,159732,159734,159736,159738],{"class":70,"line":115},[68,159723,32892],{"class":92},[68,159725,997],{"class":85},[68,159727,1801],{"class":102},[68,159729,158374],{"class":872},[68,159731,2632],{"class":92},[68,159733,81387],{"class":85},[68,159735,2681],{"class":92},[68,159737,1987],{"class":872},[68,159739,1757],{"class":85},[68,159741,159742,159744],{"class":70,"line":280},[68,159743,3303],{"class":102},[68,159745,5338],{"class":85},[68,159747,159748,159750,159752,159755],{"class":70,"line":301},[68,159749,32892],{"class":92},[68,159751,997],{"class":85},[68,159753,159754],{"class":872},"\"姓名不能为空\"",[68,159756,1757],{"class":85},[14,159758,159760],{"id":159759},"_39-match语句","3.9 match语句",[19,159762,159763,159764,159766],{},"Python 3.10 开始支持 ",[65,159765,72844],{},"。它适合处理固定选项。",[58,159768,159770],{"className":31971,"code":159769,"language":31973,"meta":63,"style":63},"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",[65,159771,159772,159788,159792,159799,159809,159820,159829,159840,159849,159860,159867],{"__ignoreMap":63},[68,159773,159774,159777,159779,159781,159783,159786],{"class":70,"line":71},[68,159775,159776],{"class":85},"command ",[68,159778,869],{"class":102},[68,159780,62189],{"class":92},[68,159782,997],{"class":85},[68,159784,159785],{"class":872},"\"请输入命令:\"",[68,159787,1757],{"class":85},[68,159789,159790],{"class":70,"line":78},[68,159791,4000],{"emptyLinePlaceholder":1679},[68,159793,159794,159796],{"class":70,"line":89},[68,159795,72844],{"class":102},[68,159797,159798],{"class":85}," command:\n",[68,159800,159801,159804,159807],{"class":70,"line":115},[68,159802,159803],{"class":102},"    case",[68,159805,159806],{"class":872}," \"start\"",[68,159808,5338],{"class":85},[68,159810,159811,159813,159815,159818],{"class":70,"line":280},[68,159812,34044],{"class":92},[68,159814,997],{"class":85},[68,159816,159817],{"class":872},"\"启动\"",[68,159819,1757],{"class":85},[68,159821,159822,159824,159827],{"class":70,"line":301},[68,159823,159803],{"class":102},[68,159825,159826],{"class":872}," \"stop\"",[68,159828,5338],{"class":85},[68,159830,159831,159833,159835,159838],{"class":70,"line":320},[68,159832,34044],{"class":92},[68,159834,997],{"class":85},[68,159836,159837],{"class":872},"\"停止\"",[68,159839,1757],{"class":85},[68,159841,159842,159844,159847],{"class":70,"line":2915},[68,159843,159803],{"class":102},[68,159845,159846],{"class":872}," \"restart\"",[68,159848,5338],{"class":85},[68,159850,159851,159853,159855,159858],{"class":70,"line":2921},[68,159852,34044],{"class":92},[68,159854,997],{"class":85},[68,159856,159857],{"class":872},"\"重启\"",[68,159859,1757],{"class":85},[68,159861,159862,159864],{"class":70,"line":2933},[68,159863,159803],{"class":102},[68,159865,159866],{"class":85}," _:\n",[68,159868,159869,159871,159873,159876],{"class":70,"line":3214},[68,159870,34044],{"class":92},[68,159872,997],{"class":85},[68,159874,159875],{"class":872},"\"未知命令\"",[68,159877,1757],{"class":85},[19,159879,159880,159881,159883,159884,159886],{},"入门阶段掌握 ",[65,159882,155978],{}," 更重要，",[65,159885,72844],{}," 可以作为补充。",[14,159888,159890],{"id":159889},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159892,124865],{},[48,159894,159895,159898,159901],{},[51,159896,159897],{},"输入成绩。",[51,159899,159900],{},"判断成绩是否合法。",[51,159902,159903],{},"输出等级。",[19,159905,11633],{},[58,159907,159909],{"className":31971,"code":159908,"language":31973,"meta":63,"style":63},"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",[65,159910,159911,159929,159933,159951,159962,159974,159985,159997,160008,160021,160032,160044,160055,160061],{"__ignoreMap":63},[68,159912,159913,159915,159917,159919,159921,159923,159925,159927],{"class":70,"line":71},[68,159914,156678],{"class":85},[68,159916,869],{"class":102},[68,159918,111370],{"class":92},[68,159920,997],{"class":85},[68,159922,55405],{"class":92},[68,159924,997],{"class":85},[68,159926,153729],{"class":872},[68,159928,32090],{"class":85},[68,159930,159931],{"class":70,"line":78},[68,159932,4000],{"emptyLinePlaceholder":1679},[68,159934,159935,159937,159939,159941,159943,159945,159947,159949],{"class":70,"line":89},[68,159936,3134],{"class":102},[68,159938,40523],{"class":102},[68,159940,5692],{"class":92},[68,159942,159572],{"class":102},[68,159944,159103],{"class":85},[68,159946,3190],{"class":102},[68,159948,7353],{"class":92},[68,159950,5338],{"class":85},[68,159952,159953,159955,159957,159960],{"class":70,"line":115},[68,159954,32892],{"class":92},[68,159956,997],{"class":85},[68,159958,159959],{"class":872},"\"成绩不合法\"",[68,159961,1757],{"class":85},[68,159963,159964,159966,159968,159970,159972],{"class":70,"line":280},[68,159965,159126],{"class":102},[68,159967,159103],{"class":85},[68,159969,3312],{"class":102},[68,159971,159108],{"class":92},[68,159973,5338],{"class":85},[68,159975,159976,159978,159980,159983],{"class":70,"line":301},[68,159977,32892],{"class":92},[68,159979,997],{"class":85},[68,159981,159982],{"class":872},"\"等级:A\"",[68,159984,1757],{"class":85},[68,159986,159987,159989,159991,159993,159995],{"class":70,"line":320},[68,159988,159126],{"class":102},[68,159990,159103],{"class":85},[68,159992,3312],{"class":102},[68,159994,159133],{"class":92},[68,159996,5338],{"class":85},[68,159998,159999,160001,160003,160006],{"class":70,"line":2915},[68,160000,32892],{"class":92},[68,160002,997],{"class":85},[68,160004,160005],{"class":872},"\"等级:B\"",[68,160007,1757],{"class":85},[68,160009,160010,160012,160014,160016,160019],{"class":70,"line":2921},[68,160011,159126],{"class":102},[68,160013,159103],{"class":85},[68,160015,3312],{"class":102},[68,160017,160018],{"class":92}," 70",[68,160020,5338],{"class":85},[68,160022,160023,160025,160027,160030],{"class":70,"line":2933},[68,160024,32892],{"class":92},[68,160026,997],{"class":85},[68,160028,160029],{"class":872},"\"等级:C\"",[68,160031,1757],{"class":85},[68,160033,160034,160036,160038,160040,160042],{"class":70,"line":3214},[68,160035,159126],{"class":102},[68,160037,159103],{"class":85},[68,160039,3312],{"class":102},[68,160041,159157],{"class":92},[68,160043,5338],{"class":85},[68,160045,160046,160048,160050,160053],{"class":70,"line":3219},[68,160047,32892],{"class":92},[68,160049,997],{"class":85},[68,160051,160052],{"class":872},"\"等级:D\"",[68,160054,1757],{"class":85},[68,160056,160057,160059],{"class":70,"line":3225},[68,160058,3303],{"class":102},[68,160060,5338],{"class":85},[68,160062,160063,160065,160067,160070],{"class":70,"line":3230},[68,160064,32892],{"class":92},[68,160066,997],{"class":85},[68,160068,160069],{"class":872},"\"等级:E\"",[68,160071,1757],{"class":85},[14,160073,160075],{"id":160074},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160077,124865],{},[48,160079,160080,160083,160086,160089],{},[51,160081,160082],{},"输入消费金额。",[51,160084,160085],{},"输入会员等级，普通、银卡、金卡。",[51,160087,160088],{},"普通不打折，银卡 9 折，金卡 8 折。",[51,160090,160091],{},"满 500 再减 50。",[19,160093,11633],{},[58,160095,160097],{"className":31971,"code":160096,"language":31973,"meta":63,"style":63},"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",[65,160098,160099,160119,160135,160139,160147,160151,160165,160175,160188,160197,160210,160218,160224,160235,160239,160253,160257,160271,160281,160285],{"__ignoreMap":63},[68,160100,160101,160104,160106,160108,160110,160112,160114,160117],{"class":70,"line":71},[68,160102,160103],{"class":85},"amount ",[68,160105,869],{"class":102},[68,160107,111370],{"class":92},[68,160109,997],{"class":85},[68,160111,55405],{"class":92},[68,160113,997],{"class":85},[68,160115,160116],{"class":872},"\"请输入消费金额:\"",[68,160118,32090],{"class":85},[68,160120,160121,160124,160126,160128,160130,160133],{"class":70,"line":78},[68,160122,160123],{"class":85},"level ",[68,160125,869],{"class":102},[68,160127,62189],{"class":92},[68,160129,997],{"class":85},[68,160131,160132],{"class":872},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[68,160134,1757],{"class":85},[68,160136,160137],{"class":70,"line":89},[68,160138,4000],{"emptyLinePlaceholder":1679},[68,160140,160141,160143,160145],{"class":70,"line":115},[68,160142,158556],{"class":85},[68,160144,869],{"class":102},[68,160146,57283],{"class":92},[68,160148,160149],{"class":70,"line":280},[68,160150,4000],{"emptyLinePlaceholder":1679},[68,160152,160153,160155,160158,160160,160163],{"class":70,"line":301},[68,160154,3134],{"class":102},[68,160156,160157],{"class":85}," level ",[68,160159,4548],{"class":102},[68,160161,160162],{"class":872}," \"银卡\"",[68,160164,5338],{"class":85},[68,160166,160167,160170,160172],{"class":70,"line":320},[68,160168,160169],{"class":85},"    discount ",[68,160171,869],{"class":102},[68,160173,160174],{"class":92}," 0.9\n",[68,160176,160177,160179,160181,160183,160186],{"class":70,"line":2915},[68,160178,159126],{"class":102},[68,160180,160157],{"class":85},[68,160182,4548],{"class":102},[68,160184,160185],{"class":872}," \"金卡\"",[68,160187,5338],{"class":85},[68,160189,160190,160192,160194],{"class":70,"line":2921},[68,160191,160169],{"class":85},[68,160193,869],{"class":102},[68,160195,160196],{"class":92}," 0.8\n",[68,160198,160199,160201,160203,160205,160208],{"class":70,"line":2933},[68,160200,159126],{"class":102},[68,160202,160157],{"class":85},[68,160204,4548],{"class":102},[68,160206,160207],{"class":872}," \"普通\"",[68,160209,5338],{"class":85},[68,160211,160212,160214,160216],{"class":70,"line":3214},[68,160213,160169],{"class":85},[68,160215,869],{"class":102},[68,160217,57283],{"class":92},[68,160219,160220,160222],{"class":70,"line":3219},[68,160221,3303],{"class":102},[68,160223,5338],{"class":85},[68,160225,160226,160228,160230,160233],{"class":70,"line":3225},[68,160227,32892],{"class":92},[68,160229,997],{"class":85},[68,160231,160232],{"class":872},"\"会员等级输入错误，按普通会员计算\"",[68,160234,1757],{"class":85},[68,160236,160237],{"class":70,"line":3230},[68,160238,4000],{"emptyLinePlaceholder":1679},[68,160240,160241,160244,160246,160249,160251],{"class":70,"line":3244},[68,160242,160243],{"class":85},"pay ",[68,160245,869],{"class":102},[68,160247,160248],{"class":85}," amount ",[68,160250,2191],{"class":102},[68,160252,158595],{"class":85},[68,160254,160255],{"class":70,"line":3249},[68,160256,4000],{"emptyLinePlaceholder":1679},[68,160258,160259,160261,160264,160266,160269],{"class":70,"line":3255},[68,160260,3134],{"class":102},[68,160262,160263],{"class":85}," pay ",[68,160265,3312],{"class":102},[68,160267,160268],{"class":92}," 500",[68,160270,5338],{"class":85},[68,160272,160273,160276,160278],{"class":70,"line":3276},[68,160274,160275],{"class":85},"    pay ",[68,160277,151572],{"class":102},[68,160279,160280],{"class":92}," 50\n",[68,160282,160283],{"class":70,"line":3281},[68,160284,4000],{"emptyLinePlaceholder":1679},[68,160286,160287,160289,160291,160293,160295,160297,160300,160302,160304,160306],{"class":70,"line":3295},[68,160288,32008],{"class":92},[68,160290,997],{"class":85},[68,160292,1801],{"class":102},[68,160294,158676],{"class":872},[68,160296,2632],{"class":92},[68,160298,160299],{"class":85},"pay",[68,160301,158479],{"class":102},[68,160303,2681],{"class":92},[68,160305,158332],{"class":872},[68,160307,1757],{"class":85},[14,160309,160311],{"id":160310},"_312-易错点","3.12 易错点",[48,160313,160314,160317,160320,160323,160328],{},[51,160315,160316],{},"冒号不能漏。",[51,160318,160319],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[51,160321,160322],{},"多分支判断要注意顺序。",[51,160324,160325,160326,29978],{},"判断相等用 ",[65,160327,4548],{},[51,160329,160330],{},"字符串比较区分大小写：",[58,160332,160334],{"className":31971,"code":160333,"language":31973,"meta":63,"style":63},"\"Y\" == \"y\"  # False\n",[65,160335,160336],{"__ignoreMap":63},[68,160337,160338,160341,160343,160345],{"class":70,"line":71},[68,160339,160340],{"class":872},"\"Y\"",[68,160342,103133],{"class":102},[68,160344,159325],{"class":872},[68,160346,160347],{"class":74},"  # False\n",[19,160349,160350],{},"可转换后再判断：",[58,160352,160354],{"className":31971,"code":160353,"language":31973,"meta":63,"style":63},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[65,160355,160356,160373,160386],{"__ignoreMap":63},[68,160357,160358,160361,160363,160365,160367,160370],{"class":70,"line":71},[68,160359,160360],{"class":85},"answer ",[68,160362,869],{"class":102},[68,160364,62189],{"class":92},[68,160366,997],{"class":85},[68,160368,160369],{"class":872},"\"是否继续(y\u002Fn):\"",[68,160371,160372],{"class":85},").lower()\n",[68,160374,160375,160377,160380,160382,160384],{"class":70,"line":78},[68,160376,3134],{"class":102},[68,160378,160379],{"class":85}," answer ",[68,160381,4548],{"class":102},[68,160383,159325],{"class":872},[68,160385,5338],{"class":85},[68,160387,160388,160390,160392,160395],{"class":70,"line":89},[68,160389,32892],{"class":92},[68,160391,997],{"class":85},[68,160393,160394],{"class":872},"\"继续\"",[68,160396,1757],{"class":85},[14,160398,160400],{"id":160399},"_313-本章练习","3.13 本章练习",[48,160402,160403,160406,160409,160412,160422],{},[51,160404,160405],{},"输入年龄，判断是否成年。",[51,160407,160408],{},"输入年份，判断是否为闰年。",[51,160410,160411],{},"输入三个数字，输出最大值。",[51,160413,160414,160415,160418,160419,160421],{},"写登录判断：用户名是 ",[65,160416,160417],{},"admin"," 且密码是 ",[65,160420,16680],{}," 才登录成功。",[51,160423,160424],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1652,160426,160427],{},"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":63,"searchDepth":78,"depth":78,"links":160429},[160430,160431,160432,160433,160434,160435,160440,160441,160442,160443,160444,160445,160446],{"id":158818,"depth":78,"text":158819},{"id":158871,"depth":78,"text":158872},{"id":158975,"depth":78,"text":158976},{"id":159065,"depth":78,"text":159066},{"id":159255,"depth":78,"text":159256},{"id":159378,"depth":78,"text":159379,"children":160436},[160437,160438,160439],{"id":159382,"depth":89,"text":159383},{"id":159439,"depth":89,"text":159440},{"id":159496,"depth":89,"text":159497},{"id":159541,"depth":78,"text":159542},{"id":159632,"depth":78,"text":159633},{"id":159759,"depth":78,"text":159760},{"id":159889,"depth":78,"text":159890},{"id":160074,"depth":78,"text":160075},{"id":160310,"depth":78,"text":160311},{"id":160399,"depth":78,"text":160400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158810,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160453,"title":160454,"body":160455,"description":1676,"extension":1677,"meta":162224,"navigation":1679,"path":162225,"seo":162226,"stem":162227,"__hash__":162228},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160456,"toc":162204},[160457,160460,160464,160470,160473,160490,160494,160496,160513,160515,160560,160562,160579,160583,160586,160652,160655,160673,160677,160838,160847,160851,160855,160860,160907,160909,160915,160919,160924,160971,160973,160979,160983,160988,161024,161027,161074,161078,161084,161142,161147,161178,161183,161187,161242,161245,161317,161320,161379,161383,161386,161461,161464,161468,161574,161577,161603,161607,161619,161688,161691,161783,161787,161789,161800,161802,161932,161936,162138,162146,162150,162180,162184,162201],[10,160458,160454],{"id":160459},"_4-循环语句",[14,160461,160463],{"id":160462},"_41-为什么需要循环","4.1 为什么需要循环",[19,160465,160466,160467,160469],{},"如果要输出 1 到 100，不应该写 100 行 ",[65,160468,147792],{},"，而应该用循环。",[19,160471,160472],{},"循环适合处理重复任务：",[48,160474,160475,160478,160481,160484,160487],{},[51,160476,160477],{},"重复输出。",[51,160479,160480],{},"重复输入。",[51,160482,160483],{},"遍历数据。",[51,160485,160486],{},"持续执行菜单。",[51,160488,160489],{},"批量处理文件或数据。",[14,160491,160493],{"id":160492},"_42-while循环","4.2 while循环",[19,160495,6780],{},[58,160497,160499],{"className":31971,"code":160498,"language":31973,"meta":63,"style":63},"while 条件:\n    循环体\n",[65,160500,160501,160508],{"__ignoreMap":63},[68,160502,160503,160505],{"class":70,"line":71},[68,160504,110236],{"class":102},[68,160506,160507],{"class":85}," 条件:\n",[68,160509,160510],{"class":70,"line":78},[68,160511,160512],{"class":85},"    循环体\n",[19,160514,16731],{},[58,160516,160518],{"className":31971,"code":160517,"language":31973,"meta":63,"style":63},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[65,160519,160520,160528,160532,160544,160551],{"__ignoreMap":63},[68,160521,160522,160524,160526],{"class":70,"line":71},[68,160523,101723],{"class":85},[68,160525,869],{"class":102},[68,160527,57283],{"class":92},[68,160529,160530],{"class":70,"line":78},[68,160531,4000],{"emptyLinePlaceholder":1679},[68,160533,160534,160536,160538,160540,160542],{"class":70,"line":89},[68,160535,110236],{"class":102},[68,160537,11036],{"class":85},[68,160539,3190],{"class":102},[68,160541,3748],{"class":92},[68,160543,5338],{"class":85},[68,160545,160546,160548],{"class":70,"line":115},[68,160547,32892],{"class":92},[68,160549,160550],{"class":85},"(i)\n",[68,160552,160553,160556,160558],{"class":70,"line":280},[68,160554,160555],{"class":85},"    i ",[68,160557,11075],{"class":102},[68,160559,57283],{"class":92},[19,160561,82506],{},[48,160563,160564,160570,160573,160576],{},[51,160565,160566,160567,29978],{},"判断条件 ",[65,160568,160569],{},"i \u003C= 5",[51,160571,160572],{},"条件成立，执行循环体。",[51,160574,160575],{},"执行完后回到条件判断。",[51,160577,160578],{},"条件不成立，退出循环。",[14,160580,160582],{"id":160581},"_43-while累加","4.3 while累加",[19,160584,160585],{},"计算 1 到 100 的和：",[58,160587,160589],{"className":31971,"code":160588,"language":31973,"meta":63,"style":63},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[65,160590,160591,160599,160607,160611,160623,160633,160641,160645],{"__ignoreMap":63},[68,160592,160593,160595,160597],{"class":70,"line":71},[68,160594,101723],{"class":85},[68,160596,869],{"class":102},[68,160598,57283],{"class":92},[68,160600,160601,160603,160605],{"class":70,"line":78},[68,160602,158580],{"class":85},[68,160604,869],{"class":102},[68,160606,48926],{"class":92},[68,160608,160609],{"class":70,"line":89},[68,160610,4000],{"emptyLinePlaceholder":1679},[68,160612,160613,160615,160617,160619,160621],{"class":70,"line":115},[68,160614,110236],{"class":102},[68,160616,11036],{"class":85},[68,160618,3190],{"class":102},[68,160620,7353],{"class":92},[68,160622,5338],{"class":85},[68,160624,160625,160628,160630],{"class":70,"line":280},[68,160626,160627],{"class":85},"    total ",[68,160629,11075],{"class":102},[68,160631,160632],{"class":85}," i\n",[68,160634,160635,160637,160639],{"class":70,"line":301},[68,160636,160555],{"class":85},[68,160638,11075],{"class":102},[68,160640,57283],{"class":92},[68,160642,160643],{"class":70,"line":320},[68,160644,4000],{"emptyLinePlaceholder":1679},[68,160646,160647,160649],{"class":70,"line":2915},[68,160648,32008],{"class":92},[68,160650,160651],{"class":85},"(total)\n",[19,160653,160654],{},"核心思想：",[48,160656,160657,160662,160667],{},[51,160658,160659,160661],{},[65,160660,2177],{}," 控制循环次数。",[51,160663,160664,160666],{},[65,160665,158681],{}," 保存累加结果。",[51,160668,160669,160670,160672],{},"每轮循环都要更新 ",[65,160671,2177],{},"，否则可能死循环。",[14,160674,160676],{"id":160675},"_44-while猜数字","4.4 while猜数字",[58,160678,160680],{"className":31971,"code":160679,"language":31973,"meta":63,"style":63},"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",[65,160681,160682,160688,160692,160709,160717,160721,160729,160749,160758,160762,160774,160785,160795,160806,160812,160834],{"__ignoreMap":63},[68,160683,160684,160686],{"class":70,"line":71},[68,160685,31985],{"class":102},[68,160687,46921],{"class":85},[68,160689,160690],{"class":70,"line":78},[68,160691,4000],{"emptyLinePlaceholder":1679},[68,160693,160694,160696,160698,160701,160703,160705,160707],{"class":70,"line":89},[68,160695,160360],{"class":85},[68,160697,869],{"class":102},[68,160699,160700],{"class":85}," random.randint(",[68,160702,99],{"class":92},[68,160704,1002],{"class":85},[68,160706,2047],{"class":92},[68,160708,1757],{"class":85},[68,160710,160711,160713,160715],{"class":70,"line":115},[68,160712,148011],{"class":85},[68,160714,869],{"class":102},[68,160716,48926],{"class":92},[68,160718,160719],{"class":70,"line":280},[68,160720,4000],{"emptyLinePlaceholder":1679},[68,160722,160723,160725,160727],{"class":70,"line":301},[68,160724,110236],{"class":102},[68,160726,96867],{"class":92},[68,160728,5338],{"class":85},[68,160730,160731,160734,160736,160738,160740,160742,160744,160747],{"class":70,"line":320},[68,160732,160733],{"class":85},"    guess ",[68,160735,869],{"class":102},[68,160737,3982],{"class":92},[68,160739,997],{"class":85},[68,160741,55405],{"class":92},[68,160743,997],{"class":85},[68,160745,160746],{"class":872},"\"请输入1到100之间的数字:\"",[68,160748,32090],{"class":85},[68,160750,160751,160754,160756],{"class":70,"line":2915},[68,160752,160753],{"class":85},"    count ",[68,160755,11075],{"class":102},[68,160757,57283],{"class":92},[68,160759,160760],{"class":70,"line":2921},[68,160761,4000],{"emptyLinePlaceholder":1679},[68,160763,160764,160766,160769,160771],{"class":70,"line":2933},[68,160765,4700],{"class":102},[68,160767,160768],{"class":85}," guess ",[68,160770,2695],{"class":102},[68,160772,160773],{"class":85}," answer:\n",[68,160775,160776,160778,160780,160783],{"class":70,"line":3214},[68,160777,34044],{"class":92},[68,160779,997],{"class":85},[68,160781,160782],{"class":872},"\"猜大了\"",[68,160784,1757],{"class":85},[68,160786,160787,160789,160791,160793],{"class":70,"line":3219},[68,160788,40886],{"class":102},[68,160790,160768],{"class":85},[68,160792,861],{"class":102},[68,160794,160773],{"class":85},[68,160796,160797,160799,160801,160804],{"class":70,"line":3225},[68,160798,34044],{"class":92},[68,160800,997],{"class":85},[68,160802,160803],{"class":872},"\"猜小了\"",[68,160805,1757],{"class":85},[68,160807,160808,160810],{"class":70,"line":3230},[68,160809,159342],{"class":102},[68,160811,5338],{"class":85},[68,160813,160814,160816,160818,160820,160823,160825,160827,160829,160832],{"class":70,"line":3244},[68,160815,34044],{"class":92},[68,160817,997],{"class":85},[68,160819,1801],{"class":102},[68,160821,160822],{"class":872},"\"猜对了，一共猜了",[68,160824,2632],{"class":92},[68,160826,86011],{"class":85},[68,160828,2681],{"class":92},[68,160830,160831],{"class":872},"次\"",[68,160833,1757],{"class":85},[68,160835,160836],{"class":70,"line":3249},[68,160837,33220],{"class":102},[19,160839,160840,160843,160844,160846],{},[65,160841,160842],{},"while True"," 表示无限循环，通常配合 ",[65,160845,3653],{}," 使用。",[14,160848,160850],{"id":160849},"_45-break和continue","4.5 break和continue",[43,160852,160854],{"id":160853},"_451-break","4.5.1 break",[19,160856,160857,160859],{},[65,160858,3653],{}," 直接结束整个循环。",[58,160861,160863],{"className":31971,"code":160862,"language":31973,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[65,160864,160865,160885,160897,160901],{"__ignoreMap":63},[68,160866,160867,160869,160871,160873,160875,160877,160879,160881,160883],{"class":70,"line":71},[68,160868,4624],{"class":102},[68,160870,11036],{"class":85},[68,160872,27637],{"class":102},[68,160874,34036],{"class":92},[68,160876,997],{"class":85},[68,160878,99],{"class":92},[68,160880,1002],{"class":85},[68,160882,2080],{"class":92},[68,160884,32379],{"class":85},[68,160886,160887,160889,160891,160893,160895],{"class":70,"line":78},[68,160888,4700],{"class":102},[68,160890,11036],{"class":85},[68,160892,4548],{"class":102},[68,160894,79648],{"class":92},[68,160896,5338],{"class":85},[68,160898,160899],{"class":70,"line":89},[68,160900,33220],{"class":102},[68,160902,160903,160905],{"class":70,"line":115},[68,160904,32892],{"class":92},[68,160906,160550],{"class":85},[19,160908,147777],{},[58,160910,160913],{"className":160911,"code":160912,"language":6786,"meta":63},[6784],"1\n2\n",[65,160914,160912],{"__ignoreMap":63},[43,160916,160918],{"id":160917},"_452-continue","4.5.2 continue",[19,160920,160921,160923],{},[65,160922,155992],{}," 跳过本轮剩余代码，进入下一轮循环。",[58,160925,160927],{"className":31971,"code":160926,"language":31973,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[65,160928,160929,160949,160961,160965],{"__ignoreMap":63},[68,160930,160931,160933,160935,160937,160939,160941,160943,160945,160947],{"class":70,"line":71},[68,160932,4624],{"class":102},[68,160934,11036],{"class":85},[68,160936,27637],{"class":102},[68,160938,34036],{"class":92},[68,160940,997],{"class":85},[68,160942,99],{"class":92},[68,160944,1002],{"class":85},[68,160946,2080],{"class":92},[68,160948,32379],{"class":85},[68,160950,160951,160953,160955,160957,160959],{"class":70,"line":78},[68,160952,4700],{"class":102},[68,160954,11036],{"class":85},[68,160956,4548],{"class":102},[68,160958,79648],{"class":92},[68,160960,5338],{"class":85},[68,160962,160963],{"class":70,"line":89},[68,160964,149832],{"class":102},[68,160966,160967,160969],{"class":70,"line":115},[68,160968,32892],{"class":92},[68,160970,160550],{"class":85},[19,160972,147777],{},[58,160974,160977],{"className":160975,"code":160976,"language":6786,"meta":63},[6784],"1\n2\n4\n5\n",[65,160978,160976],{"__ignoreMap":63},[14,160980,160982],{"id":160981},"_46-for循环","4.6 for循环",[19,160984,160985,160987],{},[65,160986,4624],{}," 常用于遍历序列。",[58,160989,160991],{"className":31971,"code":160990,"language":31973,"meta":63,"style":63},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[65,160992,160993,161002,161006,161017],{"__ignoreMap":63},[68,160994,160995,160997,160999],{"class":70,"line":71},[68,160996,147856],{"class":85},[68,160998,869],{"class":102},[68,161000,161001],{"class":872}," \"python\"\n",[68,161003,161004],{"class":70,"line":78},[68,161005,4000],{"emptyLinePlaceholder":1679},[68,161007,161008,161010,161013,161015],{"class":70,"line":89},[68,161009,4624],{"class":102},[68,161011,161012],{"class":85}," ch ",[68,161014,27637],{"class":102},[68,161016,159719],{"class":85},[68,161018,161019,161021],{"class":70,"line":115},[68,161020,32892],{"class":92},[68,161022,161023],{"class":85},"(ch)\n",[19,161025,161026],{},"遍历列表：",[58,161028,161030],{"className":31971,"code":161029,"language":31973,"meta":63,"style":63},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[65,161031,161032,161054,161058,161068],{"__ignoreMap":63},[68,161033,161034,161037,161039,161041,161043,161045,161047,161049,161052],{"class":70,"line":71},[68,161035,161036],{"class":85},"students ",[68,161038,869],{"class":102},[68,161040,53811],{"class":85},[68,161042,151208],{"class":872},[68,161044,1002],{"class":85},[68,161046,152256],{"class":872},[68,161048,1002],{"class":85},[68,161050,161051],{"class":872},"\"小刚\"",[68,161053,34839],{"class":85},[68,161055,161056],{"class":70,"line":78},[68,161057,4000],{"emptyLinePlaceholder":1679},[68,161059,161060,161062,161064,161066],{"class":70,"line":89},[68,161061,4624],{"class":102},[68,161063,153457],{"class":85},[68,161065,27637],{"class":102},[68,161067,153462],{"class":85},[68,161069,161070,161072],{"class":70,"line":115},[68,161071,32892],{"class":92},[68,161073,151362],{"class":85},[14,161075,161077],{"id":161076},"_47-range函数","4.7 range函数",[19,161079,161080,161083],{},[65,161081,161082],{},"range()"," 用于生成整数序列。",[58,161085,161087],{"className":31971,"code":161086,"language":31973,"meta":63,"style":63},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[65,161088,161089,161103,161121],{"__ignoreMap":63},[68,161090,161091,161093,161095,161097,161100],{"class":70,"line":71},[68,161092,35009],{"class":92},[68,161094,997],{"class":85},[68,161096,2055],{"class":92},[68,161098,161099],{"class":85},")          ",[68,161101,161102],{"class":74},"# 0,1,2,3,4\n",[68,161104,161105,161107,161109,161111,161113,161115,161118],{"class":70,"line":78},[68,161106,35009],{"class":92},[68,161108,997],{"class":85},[68,161110,99],{"class":92},[68,161112,1002],{"class":85},[68,161114,2055],{"class":92},[68,161116,161117],{"class":85},")       ",[68,161119,161120],{"class":74},"# 1,2,3,4\n",[68,161122,161123,161125,161127,161129,161131,161133,161135,161137,161139],{"class":70,"line":89},[68,161124,35009],{"class":92},[68,161126,997],{"class":85},[68,161128,99],{"class":92},[68,161130,1002],{"class":85},[68,161132,2182],{"class":92},[68,161134,1002],{"class":85},[68,161136,267],{"class":92},[68,161138,156981],{"class":85},[68,161140,161141],{"class":74},"# 1,3,5,7,9\n",[19,161143,161144,161145,26213],{},"配合 ",[65,161146,4624],{},[58,161148,161150],{"className":31971,"code":161149,"language":31973,"meta":63,"style":63},"for i in range(1, 6):\n    print(i)\n",[65,161151,161152,161172],{"__ignoreMap":63},[68,161153,161154,161156,161158,161160,161162,161164,161166,161168,161170],{"class":70,"line":71},[68,161155,4624],{"class":102},[68,161157,11036],{"class":85},[68,161159,27637],{"class":102},[68,161161,34036],{"class":92},[68,161163,997],{"class":85},[68,161165,99],{"class":92},[68,161167,1002],{"class":85},[68,161169,2080],{"class":92},[68,161171,32379],{"class":85},[68,161173,161174,161176],{"class":70,"line":78},[68,161175,32892],{"class":92},[68,161177,160550],{"class":85},[19,161179,1210,161180,161182],{},[65,161181,35009],{}," 的结束值不包含在内。",[14,161184,161186],{"id":161185},"_48-for循环求和","4.8 for循环求和",[58,161188,161190],{"className":31971,"code":161189,"language":31973,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[65,161191,161192,161200,161204,161224,161232,161236],{"__ignoreMap":63},[68,161193,161194,161196,161198],{"class":70,"line":71},[68,161195,158580],{"class":85},[68,161197,869],{"class":102},[68,161199,48926],{"class":92},[68,161201,161202],{"class":70,"line":78},[68,161203,4000],{"emptyLinePlaceholder":1679},[68,161205,161206,161208,161210,161212,161214,161216,161218,161220,161222],{"class":70,"line":89},[68,161207,4624],{"class":102},[68,161209,11036],{"class":85},[68,161211,27637],{"class":102},[68,161213,34036],{"class":92},[68,161215,997],{"class":85},[68,161217,99],{"class":92},[68,161219,1002],{"class":85},[68,161221,2073],{"class":92},[68,161223,32379],{"class":85},[68,161225,161226,161228,161230],{"class":70,"line":115},[68,161227,160627],{"class":85},[68,161229,11075],{"class":102},[68,161231,160632],{"class":85},[68,161233,161234],{"class":70,"line":280},[68,161235,4000],{"emptyLinePlaceholder":1679},[68,161237,161238,161240],{"class":70,"line":301},[68,161239,32008],{"class":92},[68,161241,160651],{"class":85},[19,161243,161244],{},"求偶数和：",[58,161246,161248],{"className":31971,"code":161247,"language":31973,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[65,161249,161250,161258,161262,161282,161298,161307,161311],{"__ignoreMap":63},[68,161251,161252,161254,161256],{"class":70,"line":71},[68,161253,158580],{"class":85},[68,161255,869],{"class":102},[68,161257,48926],{"class":92},[68,161259,161260],{"class":70,"line":78},[68,161261,4000],{"emptyLinePlaceholder":1679},[68,161263,161264,161266,161268,161270,161272,161274,161276,161278,161280],{"class":70,"line":89},[68,161265,4624],{"class":102},[68,161267,11036],{"class":85},[68,161269,27637],{"class":102},[68,161271,34036],{"class":92},[68,161273,997],{"class":85},[68,161275,99],{"class":92},[68,161277,1002],{"class":85},[68,161279,2073],{"class":92},[68,161281,32379],{"class":85},[68,161283,161284,161286,161288,161290,161292,161294,161296],{"class":70,"line":115},[68,161285,4700],{"class":102},[68,161287,11036],{"class":85},[68,161289,2064],{"class":102},[68,161291,984],{"class":92},[68,161293,103133],{"class":102},[68,161295,5692],{"class":92},[68,161297,5338],{"class":85},[68,161299,161300,161303,161305],{"class":70,"line":280},[68,161301,161302],{"class":85},"        total ",[68,161304,11075],{"class":102},[68,161306,160632],{"class":85},[68,161308,161309],{"class":70,"line":301},[68,161310,4000],{"emptyLinePlaceholder":1679},[68,161312,161313,161315],{"class":70,"line":320},[68,161314,32008],{"class":92},[68,161316,160651],{"class":85},[19,161318,161319],{},"也可以：",[58,161321,161323],{"className":31971,"code":161322,"language":31973,"meta":63,"style":63},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[65,161324,161325,161333,161337,161361,161369,161373],{"__ignoreMap":63},[68,161326,161327,161329,161331],{"class":70,"line":71},[68,161328,158580],{"class":85},[68,161330,869],{"class":102},[68,161332,48926],{"class":92},[68,161334,161335],{"class":70,"line":78},[68,161336,4000],{"emptyLinePlaceholder":1679},[68,161338,161339,161341,161343,161345,161347,161349,161351,161353,161355,161357,161359],{"class":70,"line":89},[68,161340,4624],{"class":102},[68,161342,11036],{"class":85},[68,161344,27637],{"class":102},[68,161346,34036],{"class":92},[68,161348,997],{"class":85},[68,161350,267],{"class":92},[68,161352,1002],{"class":85},[68,161354,2073],{"class":92},[68,161356,1002],{"class":85},[68,161358,267],{"class":92},[68,161360,32379],{"class":85},[68,161362,161363,161365,161367],{"class":70,"line":115},[68,161364,160627],{"class":85},[68,161366,11075],{"class":102},[68,161368,160632],{"class":85},[68,161370,161371],{"class":70,"line":280},[68,161372,4000],{"emptyLinePlaceholder":1679},[68,161374,161375,161377],{"class":70,"line":301},[68,161376,32008],{"class":92},[68,161378,160651],{"class":85},[14,161380,161382],{"id":161381},"_49-循环嵌套","4.9 循环嵌套",[19,161384,161385],{},"嵌套循环就是循环里面再写循环。",[58,161387,161389],{"className":31971,"code":161388,"language":31973,"meta":63,"style":63},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[65,161390,161391,161411,161431],{"__ignoreMap":63},[68,161392,161393,161395,161397,161399,161401,161403,161405,161407,161409],{"class":70,"line":71},[68,161394,4624],{"class":102},[68,161396,11036],{"class":85},[68,161398,27637],{"class":102},[68,161400,34036],{"class":92},[68,161402,997],{"class":85},[68,161404,99],{"class":92},[68,161406,1002],{"class":85},[68,161408,2029],{"class":92},[68,161410,32379],{"class":85},[68,161412,161413,161415,161417,161419,161421,161423,161425,161427,161429],{"class":70,"line":78},[68,161414,4800],{"class":102},[68,161416,11098],{"class":85},[68,161418,27637],{"class":102},[68,161420,34036],{"class":92},[68,161422,997],{"class":85},[68,161424,99],{"class":92},[68,161426,1002],{"class":85},[68,161428,2029],{"class":92},[68,161430,32379],{"class":85},[68,161432,161433,161435,161437,161439,161442,161444,161446,161448,161451,161453,161455,161457,161459],{"class":70,"line":89},[68,161434,34044],{"class":92},[68,161436,997],{"class":85},[68,161438,1801],{"class":102},[68,161440,161441],{"class":872},"\"i=",[68,161443,2632],{"class":92},[68,161445,2177],{"class":85},[68,161447,2681],{"class":92},[68,161449,161450],{"class":872},", j=",[68,161452,2632],{"class":92},[68,161454,2203],{"class":85},[68,161456,2681],{"class":92},[68,161458,1987],{"class":872},[68,161460,1757],{"class":85},[19,161462,161463],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161465,161467],{"id":161466},"_410-九九乘法表","4.10 九九乘法表",[58,161469,161471],{"className":31971,"code":161470,"language":31973,"meta":63,"style":63},"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",[65,161472,161473,161493,161516,161568],{"__ignoreMap":63},[68,161474,161475,161477,161479,161481,161483,161485,161487,161489,161491],{"class":70,"line":71},[68,161476,4624],{"class":102},[68,161478,11036],{"class":85},[68,161480,27637],{"class":102},[68,161482,34036],{"class":92},[68,161484,997],{"class":85},[68,161486,99],{"class":92},[68,161488,1002],{"class":85},[68,161490,2182],{"class":92},[68,161492,32379],{"class":85},[68,161494,161495,161497,161499,161501,161503,161505,161507,161510,161512,161514],{"class":70,"line":78},[68,161496,4800],{"class":102},[68,161498,11098],{"class":85},[68,161500,27637],{"class":102},[68,161502,34036],{"class":92},[68,161504,997],{"class":85},[68,161506,99],{"class":92},[68,161508,161509],{"class":85},", i ",[68,161511,2217],{"class":102},[68,161513,1112],{"class":92},[68,161515,32379],{"class":85},[68,161517,161518,161520,161522,161524,161526,161528,161530,161532,161534,161536,161538,161540,161542,161544,161546,161548,161550,161552,161554,161556,161558,161560,161562,161564,161566],{"class":70,"line":89},[68,161519,34044],{"class":92},[68,161521,997],{"class":85},[68,161523,1801],{"class":102},[68,161525,1987],{"class":872},[68,161527,2632],{"class":92},[68,161529,2203],{"class":85},[68,161531,2681],{"class":92},[68,161533,2191],{"class":872},[68,161535,2632],{"class":92},[68,161537,2177],{"class":85},[68,161539,2681],{"class":92},[68,161541,869],{"class":872},[68,161543,2632],{"class":92},[68,161545,101723],{"class":85},[68,161547,2191],{"class":102},[68,161549,5009],{"class":85},[68,161551,2681],{"class":92},[68,161553,1987],{"class":872},[68,161555,1002],{"class":85},[68,161557,47394],{"class":6815},[68,161559,869],{"class":102},[68,161561,1987],{"class":872},[68,161563,2835],{"class":92},[68,161565,1987],{"class":872},[68,161567,1757],{"class":85},[68,161569,161570,161572],{"class":70,"line":115},[68,161571,32892],{"class":92},[68,161573,3577],{"class":85},[19,161575,161576],{},"关键点：",[48,161578,161579,161585,161591,161597],{},[51,161580,161581,161582,161584],{},"外层 ",[65,161583,2177],{}," 控制行。",[51,161586,161587,161588,161590],{},"内层 ",[65,161589,2203],{}," 控制列。",[51,161592,161593,161594,161596],{},"每行结束后用 ",[65,161595,147792],{}," 换行。",[51,161598,161599,161602],{},[65,161600,161601],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161604,161606],{"id":161605},"_411-循环else","4.11 循环else",[19,161608,161609,161610,161612,161613,161615,161616,161618],{},"Python 的循环可以带 ",[65,161611,3303],{},"。当循环正常结束时执行 ",[65,161614,3303],{},"，如果被 ",[65,161617,3653],{}," 打断，则不执行。",[58,161620,161622],{"className":31971,"code":161621,"language":31973,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[65,161623,161624,161644,161656,161667,161671,161677],{"__ignoreMap":63},[68,161625,161626,161628,161630,161632,161634,161636,161638,161640,161642],{"class":70,"line":71},[68,161627,4624],{"class":102},[68,161629,11036],{"class":85},[68,161631,27637],{"class":102},[68,161633,34036],{"class":92},[68,161635,997],{"class":85},[68,161637,99],{"class":92},[68,161639,1002],{"class":85},[68,161641,2080],{"class":92},[68,161643,32379],{"class":85},[68,161645,161646,161648,161650,161652,161654],{"class":70,"line":78},[68,161647,4700],{"class":102},[68,161649,11036],{"class":85},[68,161651,4548],{"class":102},[68,161653,989],{"class":92},[68,161655,5338],{"class":85},[68,161657,161658,161660,161662,161665],{"class":70,"line":89},[68,161659,34044],{"class":92},[68,161661,997],{"class":85},[68,161663,161664],{"class":872},"\"找到了\"",[68,161666,1757],{"class":85},[68,161668,161669],{"class":70,"line":115},[68,161670,33220],{"class":102},[68,161672,161673,161675],{"class":70,"line":280},[68,161674,3303],{"class":102},[68,161676,5338],{"class":85},[68,161678,161679,161681,161683,161686],{"class":70,"line":301},[68,161680,32892],{"class":92},[68,161682,997],{"class":85},[68,161684,161685],{"class":872},"\"没找到\"",[68,161687,1757],{"class":85},[19,161689,161690],{},"常用于搜索。",[58,161692,161694],{"className":31971,"code":161693,"language":31973,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[65,161695,161696,161717,161726,161730,161742,161753,161763,161767,161773],{"__ignoreMap":63},[68,161697,161698,161701,161703,161705,161707,161709,161711,161713,161715],{"class":70,"line":71},[68,161699,161700],{"class":85},"names ",[68,161702,869],{"class":102},[68,161704,53811],{"class":85},[68,161706,151208],{"class":872},[68,161708,1002],{"class":85},[68,161710,152256],{"class":872},[68,161712,1002],{"class":85},[68,161714,161051],{"class":872},[68,161716,34839],{"class":85},[68,161718,161719,161721,161723],{"class":70,"line":78},[68,161720,113151],{"class":85},[68,161722,869],{"class":102},[68,161724,161725],{"class":872}," \"小李\"\n",[68,161727,161728],{"class":70,"line":89},[68,161729,4000],{"emptyLinePlaceholder":1679},[68,161731,161732,161734,161737,161739],{"class":70,"line":115},[68,161733,4624],{"class":102},[68,161735,161736],{"class":85}," name ",[68,161738,27637],{"class":102},[68,161740,161741],{"class":85}," names:\n",[68,161743,161744,161746,161748,161750],{"class":70,"line":280},[68,161745,4700],{"class":102},[68,161747,161736],{"class":85},[68,161749,4548],{"class":102},[68,161751,161752],{"class":85}," target:\n",[68,161754,161755,161757,161759,161761],{"class":70,"line":301},[68,161756,34044],{"class":92},[68,161758,997],{"class":85},[68,161760,161664],{"class":872},[68,161762,1757],{"class":85},[68,161764,161765],{"class":70,"line":320},[68,161766,33220],{"class":102},[68,161768,161769,161771],{"class":70,"line":2915},[68,161770,3303],{"class":102},[68,161772,5338],{"class":85},[68,161774,161775,161777,161779,161781],{"class":70,"line":2921},[68,161776,32892],{"class":92},[68,161778,997],{"class":85},[68,161780,161685],{"class":872},[68,161782,1757],{"class":85},[14,161784,161786],{"id":161785},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161788,124865],{},[48,161790,161791,161794,161797],{},[51,161792,161793],{},"用户最多输入 3 次密码。",[51,161795,161796],{},"密码正确则登录成功。",[51,161798,161799],{},"3 次都错误则锁定账号。",[19,161801,11633],{},[58,161803,161805],{"className":31971,"code":161804,"language":31973,"meta":63,"style":63},"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",[65,161806,161807,161817,161821,161837,161853,161857,161869,161880,161884,161890,161915,161921],{"__ignoreMap":63},[68,161808,161809,161812,161814],{"class":70,"line":71},[68,161810,161811],{"class":85},"password ",[68,161813,869],{"class":102},[68,161815,161816],{"class":872}," \"123456\"\n",[68,161818,161819],{"class":70,"line":78},[68,161820,4000],{"emptyLinePlaceholder":1679},[68,161822,161823,161825,161827,161829,161831,161833,161835],{"class":70,"line":89},[68,161824,4624],{"class":102},[68,161826,11036],{"class":85},[68,161828,27637],{"class":102},[68,161830,34036],{"class":92},[68,161832,997],{"class":85},[68,161834,288],{"class":92},[68,161836,32379],{"class":85},[68,161838,161839,161842,161844,161846,161848,161851],{"class":70,"line":115},[68,161840,161841],{"class":85},"    user_password ",[68,161843,869],{"class":102},[68,161845,62189],{"class":92},[68,161847,997],{"class":85},[68,161849,161850],{"class":872},"\"请输入密码:\"",[68,161852,1757],{"class":85},[68,161854,161855],{"class":70,"line":280},[68,161856,4000],{"emptyLinePlaceholder":1679},[68,161858,161859,161861,161864,161866],{"class":70,"line":301},[68,161860,4700],{"class":102},[68,161862,161863],{"class":85}," user_password ",[68,161865,4548],{"class":102},[68,161867,161868],{"class":85}," password:\n",[68,161870,161871,161873,161875,161878],{"class":70,"line":320},[68,161872,34044],{"class":92},[68,161874,997],{"class":85},[68,161876,161877],{"class":872},"\"登录成功\"",[68,161879,1757],{"class":85},[68,161881,161882],{"class":70,"line":2915},[68,161883,33220],{"class":102},[68,161885,161886,161888],{"class":70,"line":2921},[68,161887,159342],{"class":102},[68,161889,5338],{"class":85},[68,161891,161892,161894,161896,161898,161901,161904,161906,161908,161910,161913],{"class":70,"line":2933},[68,161893,34044],{"class":92},[68,161895,997],{"class":85},[68,161897,1801],{"class":102},[68,161899,161900],{"class":872},"\"密码错误，还剩",[68,161902,161903],{"class":92},"{2",[68,161905,53856],{"class":102},[68,161907,4631],{"class":85},[68,161909,2681],{"class":92},[68,161911,161912],{"class":872},"次机会\"",[68,161914,1757],{"class":85},[68,161916,161917,161919],{"class":70,"line":3214},[68,161918,3303],{"class":102},[68,161920,5338],{"class":85},[68,161922,161923,161925,161927,161930],{"class":70,"line":3219},[68,161924,32892],{"class":92},[68,161926,997],{"class":85},[68,161928,161929],{"class":872},"\"账号已锁定\"",[68,161931,1757],{"class":85},[14,161933,161935],{"id":161934},"_413-小案例菜单程序","4.13 小案例：菜单程序",[58,161937,161939],{"className":31971,"code":161938,"language":31973,"meta":63,"style":63},"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",[65,161940,161941,161949,161960,161971,161982,161993,162004,162008,162023,162027,162039,162050,162062,162073,162085,162096,162108,162118,162122,162128],{"__ignoreMap":63},[68,161942,161943,161945,161947],{"class":70,"line":71},[68,161944,110236],{"class":102},[68,161946,96867],{"class":92},[68,161948,5338],{"class":85},[68,161950,161951,161953,161955,161958],{"class":70,"line":78},[68,161952,32892],{"class":92},[68,161954,997],{"class":85},[68,161956,161957],{"class":872},"\"====== 菜单 ======\"",[68,161959,1757],{"class":85},[68,161961,161962,161964,161966,161969],{"class":70,"line":89},[68,161963,32892],{"class":92},[68,161965,997],{"class":85},[68,161967,161968],{"class":872},"\"1. 查询余额\"",[68,161970,1757],{"class":85},[68,161972,161973,161975,161977,161980],{"class":70,"line":115},[68,161974,32892],{"class":92},[68,161976,997],{"class":85},[68,161978,161979],{"class":872},"\"2. 存款\"",[68,161981,1757],{"class":85},[68,161983,161984,161986,161988,161991],{"class":70,"line":280},[68,161985,32892],{"class":92},[68,161987,997],{"class":85},[68,161989,161990],{"class":872},"\"3. 取款\"",[68,161992,1757],{"class":85},[68,161994,161995,161997,161999,162002],{"class":70,"line":301},[68,161996,32892],{"class":92},[68,161998,997],{"class":85},[68,162000,162001],{"class":872},"\"0. 退出\"",[68,162003,1757],{"class":85},[68,162005,162006],{"class":70,"line":320},[68,162007,4000],{"emptyLinePlaceholder":1679},[68,162009,162010,162013,162015,162017,162019,162021],{"class":70,"line":2915},[68,162011,162012],{"class":85},"    choice ",[68,162014,869],{"class":102},[68,162016,62189],{"class":92},[68,162018,997],{"class":85},[68,162020,154393],{"class":872},[68,162022,1757],{"class":85},[68,162024,162025],{"class":70,"line":2921},[68,162026,4000],{"emptyLinePlaceholder":1679},[68,162028,162029,162031,162033,162035,162037],{"class":70,"line":2933},[68,162030,4700],{"class":102},[68,162032,154406],{"class":85},[68,162034,4548],{"class":102},[68,162036,154411],{"class":872},[68,162038,5338],{"class":85},[68,162040,162041,162043,162045,162048],{"class":70,"line":3214},[68,162042,34044],{"class":92},[68,162044,997],{"class":85},[68,162046,162047],{"class":872},"\"余额为1000元\"",[68,162049,1757],{"class":85},[68,162051,162052,162054,162056,162058,162060],{"class":70,"line":3219},[68,162053,40886],{"class":102},[68,162055,154406],{"class":85},[68,162057,4548],{"class":102},[68,162059,154430],{"class":872},[68,162061,5338],{"class":85},[68,162063,162064,162066,162068,162071],{"class":70,"line":3225},[68,162065,34044],{"class":92},[68,162067,997],{"class":85},[68,162069,162070],{"class":872},"\"存款功能\"",[68,162072,1757],{"class":85},[68,162074,162075,162077,162079,162081,162083],{"class":70,"line":3230},[68,162076,40886],{"class":102},[68,162078,154406],{"class":85},[68,162080,4548],{"class":102},[68,162082,154448],{"class":872},[68,162084,5338],{"class":85},[68,162086,162087,162089,162091,162094],{"class":70,"line":3244},[68,162088,34044],{"class":92},[68,162090,997],{"class":85},[68,162092,162093],{"class":872},"\"取款功能\"",[68,162095,1757],{"class":85},[68,162097,162098,162100,162102,162104,162106],{"class":70,"line":3249},[68,162099,40886],{"class":102},[68,162101,154406],{"class":85},[68,162103,4548],{"class":102},[68,162105,154502],{"class":872},[68,162107,5338],{"class":85},[68,162109,162110,162112,162114,162116],{"class":70,"line":3255},[68,162111,34044],{"class":92},[68,162113,997],{"class":85},[68,162115,154513],{"class":872},[68,162117,1757],{"class":85},[68,162119,162120],{"class":70,"line":3276},[68,162121,33220],{"class":102},[68,162123,162124,162126],{"class":70,"line":3281},[68,162125,159342],{"class":102},[68,162127,5338],{"class":85},[68,162129,162130,162132,162134,162136],{"class":70,"line":3295},[68,162131,34044],{"class":92},[68,162133,997],{"class":85},[68,162135,154534],{"class":872},[68,162137,1757],{"class":85},[19,162139,162140,162141,162143,162144,29978],{},"菜单类程序通常使用 ",[65,162142,160842],{},"，用户选择退出时 ",[65,162145,3653],{},[14,162147,162149],{"id":162148},"_414-易错点","4.14 易错点",[48,162151,162152,162157,162163,162171,162177],{},[51,162153,162154,162156],{},[65,162155,110236],{}," 循环必须更新控制变量。",[51,162158,162159,162162],{},[65,162160,162161],{},"range(1, 10)"," 不包含 10。",[51,162164,162165,162167,162168,162170],{},[65,162166,3653],{}," 结束整个循环，",[65,162169,155992],{}," 只跳过本轮。",[51,162172,162173,162174,162176],{},"嵌套循环中，",[65,162175,3653],{}," 只跳出当前所在的一层循环。",[51,162178,162179],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162181,162183],{"id":162182},"_415-本章练习","4.15 本章练习",[48,162185,162186,162189,162192,162195,162198],{},[51,162187,162188],{},"输出 1 到 100。",[51,162190,162191],{},"计算 1 到 100 的偶数和。",[51,162193,162194],{},"输出 100 以内能被 3 和 5 同时整除的数。",[51,162196,162197],{},"编写猜数字游戏，限制最多猜 7 次。",[51,162199,162200],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1652,162202,162203],{},"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":63,"searchDepth":78,"depth":78,"links":162205},[162206,162207,162208,162209,162210,162214,162215,162216,162217,162218,162219,162220,162221,162222,162223],{"id":160462,"depth":78,"text":160463},{"id":160492,"depth":78,"text":160493},{"id":160581,"depth":78,"text":160582},{"id":160675,"depth":78,"text":160676},{"id":160849,"depth":78,"text":160850,"children":162211},[162212,162213],{"id":160853,"depth":89,"text":160854},{"id":160917,"depth":89,"text":160918},{"id":160981,"depth":78,"text":160982},{"id":161076,"depth":78,"text":161077},{"id":161185,"depth":78,"text":161186},{"id":161381,"depth":78,"text":161382},{"id":161466,"depth":78,"text":161467},{"id":161605,"depth":78,"text":161606},{"id":161785,"depth":78,"text":161786},{"id":161934,"depth":78,"text":161935},{"id":162148,"depth":78,"text":162149},{"id":162182,"depth":78,"text":162183},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160454,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162230,"title":162231,"body":162232,"description":1676,"extension":1677,"meta":164237,"navigation":1679,"path":164238,"seo":164239,"stem":164240,"__hash__":164241},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162233,"toc":164217},[162234,162237,162241,162244,162247,162261,162264,162278,162282,162284,162303,162305,162352,162354,162368,162372,162446,162449,162453,162456,162515,162523,162526,162579,162582,162586,162591,162646,162654,162704,162708,162713,162721,162820,162826,162830,162835,162838,162849,162890,162903,162907,162910,162946,162949,162962,162965,163025,163029,163033,163036,163087,163091,163094,163141,163147,163213,163216,163220,163223,163339,163342,163346,163349,163455,163459,163462,163500,163503,163545,163548,163608,163611,163615,164079,164082,164086,164113,164119,164180,164184,164214],[10,162235,162231],{"id":162236},"_5-函数基础",[14,162238,162240],{"id":162239},"_51-为什么需要函数","5.1 为什么需要函数",[19,162242,162243],{},"函数用于封装一段可以重复使用的代码。",[19,162245,162246],{},"不使用函数的问题：",[48,162248,162249,162252,162255,162258],{},[51,162250,162251],{},"重复代码多。",[51,162253,162254],{},"修改逻辑时容易漏改。",[51,162256,162257],{},"主流程不清晰。",[51,162259,162260],{},"程序越写越长，难以维护。",[19,162262,162263],{},"使用函数后的好处：",[48,162265,162266,162269,162272,162275],{},[51,162267,162268],{},"提高复用性。",[51,162270,162271],{},"提高可读性。",[51,162273,162274],{},"便于调试。",[51,162276,162277],{},"便于分工。",[14,162279,162281],{"id":162280},"_52-函数定义","5.2 函数定义",[19,162283,6780],{},[58,162285,162287],{"className":31971,"code":162286,"language":31973,"meta":63,"style":63},"def 函数名():\n    函数体\n",[65,162288,162289,162298],{"__ignoreMap":63},[68,162290,162291,162293,162296],{"class":70,"line":71},[68,162292,33540],{"class":102},[68,162294,162295],{"class":587}," 函数名",[68,162297,33546],{"class":85},[68,162299,162300],{"class":70,"line":78},[68,162301,162302],{"class":85},"    函数体\n",[19,162304,16731],{},[58,162306,162308],{"className":31971,"code":162307,"language":31973,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[65,162309,162310,162319,162329,162339,162343,162347],{"__ignoreMap":63},[68,162311,162312,162314,162317],{"class":70,"line":71},[68,162313,33540],{"class":102},[68,162315,162316],{"class":587}," say_hello",[68,162318,33546],{"class":85},[68,162320,162321,162323,162325,162327],{"class":70,"line":78},[68,162322,32892],{"class":92},[68,162324,997],{"class":85},[68,162326,7443],{"class":872},[68,162328,1757],{"class":85},[68,162330,162331,162333,162335,162337],{"class":70,"line":89},[68,162332,32892],{"class":92},[68,162334,997],{"class":85},[68,162336,147959],{"class":872},[68,162338,1757],{"class":85},[68,162340,162341],{"class":70,"line":115},[68,162342,4000],{"emptyLinePlaceholder":1679},[68,162344,162345],{"class":70,"line":280},[68,162346,4000],{"emptyLinePlaceholder":1679},[68,162348,162349],{"class":70,"line":301},[68,162350,162351],{"class":85},"say_hello()\n",[19,162353,1210],{},[48,162355,162356,162359,162362,162365],{},[51,162357,162358],{},"函数必须先定义，再调用。",[51,162360,162361],{},"函数名遵循变量命名规则。",[51,162363,162364],{},"函数体需要缩进。",[51,162366,162367],{},"函数不调用就不会执行。",[14,162369,162371],{"id":162370},"_53-函数调用","5.3 函数调用",[58,162373,162375],{"className":31971,"code":162374,"language":31973,"meta":63,"style":63},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[65,162376,162377,162386,162397,162408,162419,162429,162433,162437,162442],{"__ignoreMap":63},[68,162378,162379,162381,162384],{"class":70,"line":71},[68,162380,33540],{"class":102},[68,162382,162383],{"class":587}," print_menu",[68,162385,33546],{"class":85},[68,162387,162388,162390,162392,162395],{"class":70,"line":78},[68,162389,32892],{"class":92},[68,162391,997],{"class":85},[68,162393,162394],{"class":872},"\"1. 查询\"",[68,162396,1757],{"class":85},[68,162398,162399,162401,162403,162406],{"class":70,"line":89},[68,162400,32892],{"class":92},[68,162402,997],{"class":85},[68,162404,162405],{"class":872},"\"2. 添加\"",[68,162407,1757],{"class":85},[68,162409,162410,162412,162414,162417],{"class":70,"line":115},[68,162411,32892],{"class":92},[68,162413,997],{"class":85},[68,162415,162416],{"class":872},"\"3. 删除\"",[68,162418,1757],{"class":85},[68,162420,162421,162423,162425,162427],{"class":70,"line":280},[68,162422,32892],{"class":92},[68,162424,997],{"class":85},[68,162426,162001],{"class":872},[68,162428,1757],{"class":85},[68,162430,162431],{"class":70,"line":301},[68,162432,4000],{"emptyLinePlaceholder":1679},[68,162434,162435],{"class":70,"line":320},[68,162436,4000],{"emptyLinePlaceholder":1679},[68,162438,162439],{"class":70,"line":2915},[68,162440,162441],{"class":85},"print_menu()\n",[68,162443,162444],{"class":70,"line":2921},[68,162445,162441],{"class":85},[19,162447,162448],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162450,162452],{"id":162451},"_54-参数","5.4 参数",[19,162454,162455],{},"参数用于向函数传递数据。",[58,162457,162459],{"className":31971,"code":162458,"language":31973,"meta":63,"style":63},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[65,162460,162461,162470,162490,162494,162498,162507],{"__ignoreMap":63},[68,162462,162463,162465,162467],{"class":70,"line":71},[68,162464,33540],{"class":102},[68,162466,162316],{"class":587},[68,162468,162469],{"class":85},"(name):\n",[68,162471,162472,162474,162476,162478,162480,162482,162484,162486,162488],{"class":70,"line":78},[68,162473,32892],{"class":92},[68,162475,997],{"class":85},[68,162477,1801],{"class":102},[68,162479,158374],{"class":872},[68,162481,2632],{"class":92},[68,162483,81387],{"class":85},[68,162485,2681],{"class":92},[68,162487,1987],{"class":872},[68,162489,1757],{"class":85},[68,162491,162492],{"class":70,"line":89},[68,162493,4000],{"emptyLinePlaceholder":1679},[68,162495,162496],{"class":70,"line":115},[68,162497,4000],{"emptyLinePlaceholder":1679},[68,162499,162500,162503,162505],{"class":70,"line":280},[68,162501,162502],{"class":85},"say_hello(",[68,162504,151208],{"class":872},[68,162506,1757],{"class":85},[68,162508,162509,162511,162513],{"class":70,"line":301},[68,162510,162502],{"class":85},[68,162512,152256],{"class":872},[68,162514,1757],{"class":85},[19,162516,162517,162519,162520,162522],{},[65,162518,81387],{}," 是形参，",[65,162521,151208],{}," 是实参。",[19,162524,162525],{},"多个参数：",[58,162527,162529],{"className":31971,"code":162528,"language":31973,"meta":63,"style":63},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[65,162530,162531,162539,162552,162558,162562,162566],{"__ignoreMap":63},[68,162532,162533,162535,162537],{"class":70,"line":71},[68,162534,33540],{"class":102},[68,162536,6808],{"class":587},[68,162538,152413],{"class":85},[68,162540,162541,162544,162546,162548,162550],{"class":70,"line":78},[68,162542,162543],{"class":85},"    result ",[68,162545,869],{"class":102},[68,162547,12467],{"class":85},[68,162549,2217],{"class":102},[68,162551,152424],{"class":85},[68,162553,162554,162556],{"class":70,"line":89},[68,162555,32892],{"class":92},[68,162557,78163],{"class":85},[68,162559,162560],{"class":70,"line":115},[68,162561,4000],{"emptyLinePlaceholder":1679},[68,162563,162564],{"class":70,"line":280},[68,162565,4000],{"emptyLinePlaceholder":1679},[68,162567,162568,162571,162573,162575,162577],{"class":70,"line":301},[68,162569,162570],{"class":85},"add(",[68,162572,2182],{"class":92},[68,162574,1002],{"class":85},[68,162576,2436],{"class":92},[68,162578,1757],{"class":85},[19,162580,162581],{},"调用时参数数量必须匹配。",[14,162583,162585],{"id":162584},"_55-返回值","5.5 返回值",[19,162587,162588,162590],{},[65,162589,18641],{}," 用于把函数内部的结果返回给调用者。",[58,162592,162594],{"className":31971,"code":162593,"language":31973,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[65,162595,162596,162604,162614,162618,162622,162640],{"__ignoreMap":63},[68,162597,162598,162600,162602],{"class":70,"line":71},[68,162599,33540],{"class":102},[68,162601,6808],{"class":587},[68,162603,152413],{"class":85},[68,162605,162606,162608,162610,162612],{"class":70,"line":78},[68,162607,5689],{"class":102},[68,162609,12467],{"class":85},[68,162611,2217],{"class":102},[68,162613,152424],{"class":85},[68,162615,162616],{"class":70,"line":89},[68,162617,4000],{"emptyLinePlaceholder":1679},[68,162619,162620],{"class":70,"line":115},[68,162621,4000],{"emptyLinePlaceholder":1679},[68,162623,162624,162627,162629,162632,162634,162636,162638],{"class":70,"line":280},[68,162625,162626],{"class":85},"result ",[68,162628,869],{"class":102},[68,162630,162631],{"class":85}," add(",[68,162633,2182],{"class":92},[68,162635,1002],{"class":85},[68,162637,2436],{"class":92},[68,162639,1757],{"class":85},[68,162641,162642,162644],{"class":70,"line":301},[68,162643,32008],{"class":92},[68,162645,78163],{"class":85},[19,162647,162648,162649,162651,162652,29978],{},"如果函数没有写 ",[65,162650,18641],{},"，默认返回 ",[65,162653,97261],{},[58,162655,162657],{"className":31971,"code":162656,"language":31973,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[65,162658,162659,162667,162677,162681,162685,162694],{"__ignoreMap":63},[68,162660,162661,162663,162665],{"class":70,"line":71},[68,162662,33540],{"class":102},[68,162664,162316],{"class":587},[68,162666,33546],{"class":85},[68,162668,162669,162671,162673,162675],{"class":70,"line":78},[68,162670,32892],{"class":92},[68,162672,997],{"class":85},[68,162674,7443],{"class":872},[68,162676,1757],{"class":85},[68,162678,162679],{"class":70,"line":89},[68,162680,4000],{"emptyLinePlaceholder":1679},[68,162682,162683],{"class":70,"line":115},[68,162684,4000],{"emptyLinePlaceholder":1679},[68,162686,162687,162689,162691],{"class":70,"line":280},[68,162688,162626],{"class":85},[68,162690,869],{"class":102},[68,162692,162693],{"class":85}," say_hello()\n",[68,162695,162696,162698,162701],{"class":70,"line":301},[68,162697,32008],{"class":92},[68,162699,162700],{"class":85},"(result)  ",[68,162702,162703],{"class":74},"# None\n",[14,162705,162707],{"id":162706},"_56-return的作用","5.6 return的作用",[19,162709,162710,162712],{},[65,162711,18641],{}," 有两个作用：",[48,162714,162715,162718],{},[51,162716,162717],{},"返回结果。",[51,162719,162720],{},"结束函数。",[58,162722,162724],{"className":31971,"code":162723,"language":31973,"meta":63,"style":63},"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",[65,162725,162726,162736,162748,162755,162759,162771,162778,162782,162789,162793,162797,162808],{"__ignoreMap":63},[68,162727,162728,162730,162733],{"class":70,"line":71},[68,162729,33540],{"class":102},[68,162731,162732],{"class":587}," check_age",[68,162734,162735],{"class":85},"(age):\n",[68,162737,162738,162740,162742,162744,162746],{"class":70,"line":78},[68,162739,4700],{"class":102},[68,162741,17302],{"class":85},[68,162743,861],{"class":102},[68,162745,5692],{"class":92},[68,162747,5338],{"class":85},[68,162749,162750,162752],{"class":70,"line":89},[68,162751,16349],{"class":102},[68,162753,162754],{"class":872}," \"年龄不合法\"\n",[68,162756,162757],{"class":70,"line":115},[68,162758,4000],{"emptyLinePlaceholder":1679},[68,162760,162761,162763,162765,162767,162769],{"class":70,"line":280},[68,162762,4700],{"class":102},[68,162764,17302],{"class":85},[68,162766,3312],{"class":102},[68,162768,157605],{"class":92},[68,162770,5338],{"class":85},[68,162772,162773,162775],{"class":70,"line":301},[68,162774,16349],{"class":102},[68,162776,162777],{"class":872}," \"成年人\"\n",[68,162779,162780],{"class":70,"line":320},[68,162781,4000],{"emptyLinePlaceholder":1679},[68,162783,162784,162786],{"class":70,"line":2915},[68,162785,5689],{"class":102},[68,162787,162788],{"class":872}," \"未成年人\"\n",[68,162790,162791],{"class":70,"line":2921},[68,162792,4000],{"emptyLinePlaceholder":1679},[68,162794,162795],{"class":70,"line":2933},[68,162796,4000],{"emptyLinePlaceholder":1679},[68,162798,162799,162801,162804,162806],{"class":70,"line":3214},[68,162800,32008],{"class":92},[68,162802,162803],{"class":85},"(check_age(",[68,162805,2436],{"class":92},[68,162807,32090],{"class":85},[68,162809,162810,162812,162814,162816,162818],{"class":70,"line":3219},[68,162811,32008],{"class":92},[68,162813,162803],{"class":85},[68,162815,2268],{"class":102},[68,162817,99],{"class":92},[68,162819,32090],{"class":85},[19,162821,162822,162823,162825],{},"函数执行到 ",[65,162824,18641],{}," 后，后面的代码不会继续执行。",[14,162827,162829],{"id":162828},"_57-none","5.7 None",[19,162831,162832,162834],{},[65,162833,97261],{}," 表示空值或没有结果。",[19,162836,162837],{},"常见使用场景：",[48,162839,162840,162843,162846],{},[51,162841,162842],{},"函数没有返回值。",[51,162844,162845],{},"变量暂时没有具体值。",[51,162847,162848],{},"表示查询不到结果。",[58,162850,162852],{"className":31971,"code":162851,"language":31973,"meta":63,"style":63},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[65,162853,162854,162862,162866,162879],{"__ignoreMap":63},[68,162855,162856,162858,162860],{"class":70,"line":71},[68,162857,162626],{"class":85},[68,162859,869],{"class":102},[68,162861,153492],{"class":92},[68,162863,162864],{"class":70,"line":78},[68,162865,4000],{"emptyLinePlaceholder":1679},[68,162867,162868,162870,162873,162875,162877],{"class":70,"line":89},[68,162869,3134],{"class":102},[68,162871,162872],{"class":85}," result ",[68,162874,40520],{"class":102},[68,162876,40526],{"class":92},[68,162878,5338],{"class":85},[68,162880,162881,162883,162885,162888],{"class":70,"line":115},[68,162882,32892],{"class":92},[68,162884,997],{"class":85},[68,162886,162887],{"class":872},"\"没有数据\"",[68,162889,1757],{"class":85},[19,162891,162892,162893,162895,162896,162899,162900,29978],{},"判断 ",[65,162894,97261],{}," 推荐使用 ",[65,162897,162898],{},"is None","，不要写成 ",[65,162901,162902],{},"== None",[14,162904,162906],{"id":162905},"_58-函数文档字符串","5.8 函数文档字符串",[19,162908,162909],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[58,162911,162913],{"className":31971,"code":162912,"language":31973,"meta":63,"style":63},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[65,162914,162915,162925,162930],{"__ignoreMap":63},[68,162916,162917,162919,162922],{"class":70,"line":71},[68,162918,33540],{"class":102},[68,162920,162921],{"class":587}," calculate_bmi",[68,162923,162924],{"class":85},"(weight, height):\n",[68,162926,162927],{"class":70,"line":78},[68,162928,162929],{"class":872},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[68,162931,162932,162934,162937,162939,162942,162944],{"class":70,"line":89},[68,162933,5689],{"class":102},[68,162935,162936],{"class":85}," weight ",[68,162938,2320],{"class":102},[68,162940,162941],{"class":85}," height ",[68,162943,12259],{"class":102},[68,162945,49316],{"class":92},[19,162947,162948],{},"查看说明：",[58,162950,162952],{"className":31971,"code":162951,"language":31973,"meta":63,"style":63},"help(calculate_bmi)\n",[65,162953,162954],{"__ignoreMap":63},[68,162955,162956,162959],{"class":70,"line":71},[68,162957,162958],{"class":92},"help",[68,162960,162961],{"class":85},"(calculate_bmi)\n",[19,162963,162964],{},"较完整的写法：",[58,162966,162968],{"className":31971,"code":162967,"language":31973,"meta":63,"style":63},"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",[65,162969,162970,162978,162983,162988,162992,162997,163002,163007,163011],{"__ignoreMap":63},[68,162971,162972,162974,162976],{"class":70,"line":71},[68,162973,33540],{"class":102},[68,162975,162921],{"class":587},[68,162977,162924],{"class":85},[68,162979,162980],{"class":70,"line":78},[68,162981,162982],{"class":872},"    \"\"\"\n",[68,162984,162985],{"class":70,"line":89},[68,162986,162987],{"class":872},"    计算BMI。\n",[68,162989,162990],{"class":70,"line":115},[68,162991,4000],{"emptyLinePlaceholder":1679},[68,162993,162994],{"class":70,"line":280},[68,162995,162996],{"class":872},"    :param weight: 体重，单位kg\n",[68,162998,162999],{"class":70,"line":301},[68,163000,163001],{"class":872},"    :param height: 身高，单位m\n",[68,163003,163004],{"class":70,"line":320},[68,163005,163006],{"class":872},"    :return: BMI数值\n",[68,163008,163009],{"class":70,"line":2915},[68,163010,162982],{"class":872},[68,163012,163013,163015,163017,163019,163021,163023],{"class":70,"line":2921},[68,163014,5689],{"class":102},[68,163016,162936],{"class":85},[68,163018,2320],{"class":102},[68,163020,162941],{"class":85},[68,163022,12259],{"class":102},[68,163024,49316],{"class":92},[14,163026,163028],{"id":163027},"_59-变量作用域","5.9 变量作用域",[43,163030,163032],{"id":163031},"_591-局部变量","5.9.1 局部变量",[19,163034,163035],{},"在函数内部定义的变量，只能在函数内部使用。",[58,163037,163039],{"className":31971,"code":163038,"language":31973,"meta":63,"style":63},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[65,163040,163041,163050,163058,163064,163068,163072,163077],{"__ignoreMap":63},[68,163042,163043,163045,163048],{"class":70,"line":71},[68,163044,33540],{"class":102},[68,163046,163047],{"class":587}," test",[68,163049,33546],{"class":85},[68,163051,163052,163054,163056],{"class":70,"line":78},[68,163053,47186],{"class":85},[68,163055,869],{"class":102},[68,163057,60012],{"class":92},[68,163059,163060,163062],{"class":70,"line":89},[68,163061,32892],{"class":92},[68,163063,1764],{"class":85},[68,163065,163066],{"class":70,"line":115},[68,163067,4000],{"emptyLinePlaceholder":1679},[68,163069,163070],{"class":70,"line":280},[68,163071,4000],{"emptyLinePlaceholder":1679},[68,163073,163074],{"class":70,"line":301},[68,163075,163076],{"class":85},"test()\n",[68,163078,163079,163081,163084],{"class":70,"line":320},[68,163080,32008],{"class":92},[68,163082,163083],{"class":85},"(num)  ",[68,163085,163086],{"class":74},"# 报错\n",[43,163088,163090],{"id":163089},"_592-全局变量","5.9.2 全局变量",[19,163092,163093],{},"在函数外部定义的变量，可以在函数内部读取。",[58,163095,163097],{"className":31971,"code":163096,"language":31973,"meta":63,"style":63},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[65,163098,163099,163107,163111,163115,163123,163129,163133,163137],{"__ignoreMap":63},[68,163100,163101,163103,163105],{"class":70,"line":71},[68,163102,147856],{"class":85},[68,163104,869],{"class":102},[68,163106,150673],{"class":872},[68,163108,163109],{"class":70,"line":78},[68,163110,4000],{"emptyLinePlaceholder":1679},[68,163112,163113],{"class":70,"line":89},[68,163114,4000],{"emptyLinePlaceholder":1679},[68,163116,163117,163119,163121],{"class":70,"line":115},[68,163118,33540],{"class":102},[68,163120,162316],{"class":587},[68,163122,33546],{"class":85},[68,163124,163125,163127],{"class":70,"line":280},[68,163126,32892],{"class":92},[68,163128,151980],{"class":85},[68,163130,163131],{"class":70,"line":301},[68,163132,4000],{"emptyLinePlaceholder":1679},[68,163134,163135],{"class":70,"line":320},[68,163136,4000],{"emptyLinePlaceholder":1679},[68,163138,163139],{"class":70,"line":2915},[68,163140,162351],{"class":85},[19,163142,163143,163144,29978],{},"如果要在函数内部修改全局变量，需要 ",[65,163145,163146],{},"global",[58,163148,163150],{"className":31971,"code":163149,"language":31973,"meta":63,"style":63},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[65,163151,163152,163160,163164,163168,163177,163185,163193,163197,163201,163206],{"__ignoreMap":63},[68,163153,163154,163156,163158],{"class":70,"line":71},[68,163155,148011],{"class":85},[68,163157,869],{"class":102},[68,163159,48926],{"class":92},[68,163161,163162],{"class":70,"line":78},[68,163163,4000],{"emptyLinePlaceholder":1679},[68,163165,163166],{"class":70,"line":89},[68,163167,4000],{"emptyLinePlaceholder":1679},[68,163169,163170,163172,163175],{"class":70,"line":115},[68,163171,33540],{"class":102},[68,163173,163174],{"class":587}," add_count",[68,163176,33546],{"class":85},[68,163178,163179,163182],{"class":70,"line":280},[68,163180,163181],{"class":102},"    global",[68,163183,163184],{"class":85}," count\n",[68,163186,163187,163189,163191],{"class":70,"line":301},[68,163188,160753],{"class":85},[68,163190,11075],{"class":102},[68,163192,57283],{"class":92},[68,163194,163195],{"class":70,"line":320},[68,163196,4000],{"emptyLinePlaceholder":1679},[68,163198,163199],{"class":70,"line":2915},[68,163200,4000],{"emptyLinePlaceholder":1679},[68,163202,163203],{"class":70,"line":2921},[68,163204,163205],{"class":85},"add_count()\n",[68,163207,163208,163210],{"class":70,"line":2933},[68,163209,32008],{"class":92},[68,163211,163212],{"class":85},"(count)\n",[19,163214,163215],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163217,163219],{"id":163218},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163221,163222],{},"一个函数中可以调用另一个函数。",[58,163224,163226],{"className":31971,"code":163225,"language":31973,"meta":63,"style":63},"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",[65,163227,163228,163237,163251,163255,163259,163268,163273,163293,163314,163318,163322,163326],{"__ignoreMap":63},[68,163229,163230,163232,163235],{"class":70,"line":71},[68,163231,33540],{"class":102},[68,163233,163234],{"class":587}," print_line",[68,163236,33546],{"class":85},[68,163238,163239,163241,163243,163245,163247,163249],{"class":70,"line":78},[68,163240,32892],{"class":92},[68,163242,997],{"class":85},[68,163244,34076],{"class":872},[68,163246,8117],{"class":102},[68,163248,80243],{"class":92},[68,163250,1757],{"class":85},[68,163252,163253],{"class":70,"line":89},[68,163254,4000],{"emptyLinePlaceholder":1679},[68,163256,163257],{"class":70,"line":115},[68,163258,4000],{"emptyLinePlaceholder":1679},[68,163260,163261,163263,163266],{"class":70,"line":280},[68,163262,33540],{"class":102},[68,163264,163265],{"class":587}," print_info",[68,163267,150695],{"class":85},[68,163269,163270],{"class":70,"line":301},[68,163271,163272],{"class":85},"    print_line()\n",[68,163274,163275,163277,163279,163281,163283,163285,163287,163289,163291],{"class":70,"line":320},[68,163276,32892],{"class":92},[68,163278,997],{"class":85},[68,163280,1801],{"class":102},[68,163282,158002],{"class":872},[68,163284,2632],{"class":92},[68,163286,81387],{"class":85},[68,163288,2681],{"class":92},[68,163290,1987],{"class":872},[68,163292,1757],{"class":85},[68,163294,163295,163297,163299,163301,163304,163306,163308,163310,163312],{"class":70,"line":2915},[68,163296,32892],{"class":92},[68,163298,997],{"class":85},[68,163300,1801],{"class":102},[68,163302,163303],{"class":872},"\"年龄:",[68,163305,2632],{"class":92},[68,163307,71803],{"class":85},[68,163309,2681],{"class":92},[68,163311,1987],{"class":872},[68,163313,1757],{"class":85},[68,163315,163316],{"class":70,"line":2921},[68,163317,163272],{"class":85},[68,163319,163320],{"class":70,"line":2933},[68,163321,4000],{"emptyLinePlaceholder":1679},[68,163323,163324],{"class":70,"line":3214},[68,163325,4000],{"emptyLinePlaceholder":1679},[68,163327,163328,163331,163333,163335,163337],{"class":70,"line":3219},[68,163329,163330],{"class":85},"print_info(",[68,163332,151208],{"class":872},[68,163334,1002],{"class":85},[68,163336,2386],{"class":92},[68,163338,1757],{"class":85},[19,163340,163341],{},"这种方式可以把小功能组合成大功能。",[14,163343,163345],{"id":163344},"_511-参数检查","5.11 参数检查",[19,163347,163348],{},"函数内部可以检查参数是否合法。",[58,163350,163352],{"className":31971,"code":163351,"language":31973,"meta":63,"style":63},"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",[65,163353,163354,163363,163375,163381,163391,163395,163399,163416,163420,163432,163443,163449],{"__ignoreMap":63},[68,163355,163356,163358,163361],{"class":70,"line":71},[68,163357,33540],{"class":102},[68,163359,163360],{"class":587}," divide",[68,163362,152413],{"class":85},[68,163364,163365,163367,163369,163371,163373],{"class":70,"line":78},[68,163366,4700],{"class":102},[68,163368,12480],{"class":85},[68,163370,4548],{"class":102},[68,163372,5692],{"class":92},[68,163374,5338],{"class":85},[68,163376,163377,163379],{"class":70,"line":89},[68,163378,16349],{"class":102},[68,163380,153492],{"class":92},[68,163382,163383,163385,163387,163389],{"class":70,"line":115},[68,163384,5689],{"class":102},[68,163386,12467],{"class":85},[68,163388,2320],{"class":102},[68,163390,152424],{"class":85},[68,163392,163393],{"class":70,"line":280},[68,163394,4000],{"emptyLinePlaceholder":1679},[68,163396,163397],{"class":70,"line":301},[68,163398,4000],{"emptyLinePlaceholder":1679},[68,163400,163401,163403,163405,163408,163410,163412,163414],{"class":70,"line":320},[68,163402,162626],{"class":85},[68,163404,869],{"class":102},[68,163406,163407],{"class":85}," divide(",[68,163409,2182],{"class":92},[68,163411,1002],{"class":85},[68,163413,600],{"class":92},[68,163415,1757],{"class":85},[68,163417,163418],{"class":70,"line":2915},[68,163419,4000],{"emptyLinePlaceholder":1679},[68,163421,163422,163424,163426,163428,163430],{"class":70,"line":2921},[68,163423,3134],{"class":102},[68,163425,162872],{"class":85},[68,163427,40520],{"class":102},[68,163429,40526],{"class":92},[68,163431,5338],{"class":85},[68,163433,163434,163436,163438,163441],{"class":70,"line":2933},[68,163435,32892],{"class":92},[68,163437,997],{"class":85},[68,163439,163440],{"class":872},"\"除数不能为0\"",[68,163442,1757],{"class":85},[68,163444,163445,163447],{"class":70,"line":3214},[68,163446,3303],{"class":102},[68,163448,5338],{"class":85},[68,163450,163451,163453],{"class":70,"line":3219},[68,163452,32892],{"class":92},[68,163454,78163],{"class":85},[14,163456,163458],{"id":163457},"_512-类型提示","5.12 类型提示",[19,163460,163461],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[58,163463,163465],{"className":31971,"code":163464,"language":31973,"meta":63,"style":63},"def add(a: int, b: int) -> int:\n    return a + b\n",[65,163466,163467,163490],{"__ignoreMap":63},[68,163468,163469,163471,163473,163476,163478,163481,163483,163486,163488],{"class":70,"line":71},[68,163470,33540],{"class":102},[68,163472,6808],{"class":587},[68,163474,163475],{"class":85},"(a: ",[68,163477,1754],{"class":92},[68,163479,163480],{"class":85},", b: ",[68,163482,1754],{"class":92},[68,163484,163485],{"class":85},") -> ",[68,163487,1754],{"class":92},[68,163489,5338],{"class":85},[68,163491,163492,163494,163496,163498],{"class":70,"line":78},[68,163493,5689],{"class":102},[68,163495,12467],{"class":85},[68,163497,2217],{"class":102},[68,163499,152424],{"class":85},[19,163501,163502],{},"字符串参数：",[58,163504,163506],{"className":31971,"code":163505,"language":31973,"meta":63,"style":63},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[65,163507,163508,163525],{"__ignoreMap":63},[68,163509,163510,163512,163514,163517,163519,163521,163523],{"class":70,"line":71},[68,163511,33540],{"class":102},[68,163513,162316],{"class":587},[68,163515,163516],{"class":85},"(name: ",[68,163518,2903],{"class":92},[68,163520,163485],{"class":85},[68,163522,97261],{"class":92},[68,163524,5338],{"class":85},[68,163526,163527,163529,163531,163533,163535,163537,163539,163541,163543],{"class":70,"line":78},[68,163528,32892],{"class":92},[68,163530,997],{"class":85},[68,163532,1801],{"class":102},[68,163534,158374],{"class":872},[68,163536,2632],{"class":92},[68,163538,81387],{"class":85},[68,163540,2681],{"class":92},[68,163542,1987],{"class":872},[68,163544,1757],{"class":85},[19,163546,163547],{},"列表参数：",[58,163549,163551],{"className":31971,"code":163550,"language":31973,"meta":63,"style":63},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[65,163552,163553,163572,163580,163592,163601],{"__ignoreMap":63},[68,163554,163555,163557,163560,163563,163565,163568,163570],{"class":70,"line":71},[68,163556,33540],{"class":102},[68,163558,163559],{"class":587}," get_total",[68,163561,163562],{"class":85},"(numbers: list[",[68,163564,1754],{"class":92},[68,163566,163567],{"class":85},"]) -> ",[68,163569,1754],{"class":92},[68,163571,5338],{"class":85},[68,163573,163574,163576,163578],{"class":70,"line":78},[68,163575,160627],{"class":85},[68,163577,869],{"class":102},[68,163579,48926],{"class":92},[68,163581,163582,163584,163587,163589],{"class":70,"line":89},[68,163583,4800],{"class":102},[68,163585,163586],{"class":85}," number ",[68,163588,27637],{"class":102},[68,163590,163591],{"class":85}," numbers:\n",[68,163593,163594,163596,163598],{"class":70,"line":115},[68,163595,161302],{"class":85},[68,163597,11075],{"class":102},[68,163599,163600],{"class":85}," number\n",[68,163602,163603,163605],{"class":70,"line":280},[68,163604,5689],{"class":102},[68,163606,163607],{"class":85}," total\n",[19,163609,163610],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163612,163614],{"id":163613},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[58,163616,163618],{"className":31971,"code":163617,"language":31973,"meta":63,"style":63},"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",[65,163619,163620,163630,163634,163638,163646,163657,163667,163677,163687,163697,163701,163705,163714,163736,163740,163744,163753,163759,163779,163791,163802,163806,163815,163826,163831,163835,163839,163848,163854,163873,163885,163895,163899,163910,163920,163924,163932,163943,163947,163951,163955,163963,163968,163982,163986,163998,164003,164015,164020,164032,164037,164049,164059,164063,164069],{"__ignoreMap":63},[68,163621,163622,163625,163627],{"class":70,"line":71},[68,163623,163624],{"class":85},"balance ",[68,163626,869],{"class":102},[68,163628,163629],{"class":92}," 1000\n",[68,163631,163632],{"class":70,"line":78},[68,163633,4000],{"emptyLinePlaceholder":1679},[68,163635,163636],{"class":70,"line":89},[68,163637,4000],{"emptyLinePlaceholder":1679},[68,163639,163640,163642,163644],{"class":70,"line":115},[68,163641,33540],{"class":102},[68,163643,153353],{"class":587},[68,163645,33546],{"class":85},[68,163647,163648,163650,163652,163655],{"class":70,"line":280},[68,163649,32892],{"class":92},[68,163651,997],{"class":85},[68,163653,163654],{"class":872},"\"====== ATM ======\"",[68,163656,1757],{"class":85},[68,163658,163659,163661,163663,163665],{"class":70,"line":301},[68,163660,32892],{"class":92},[68,163662,997],{"class":85},[68,163664,161968],{"class":872},[68,163666,1757],{"class":85},[68,163668,163669,163671,163673,163675],{"class":70,"line":320},[68,163670,32892],{"class":92},[68,163672,997],{"class":85},[68,163674,161979],{"class":872},[68,163676,1757],{"class":85},[68,163678,163679,163681,163683,163685],{"class":70,"line":2915},[68,163680,32892],{"class":92},[68,163682,997],{"class":85},[68,163684,161990],{"class":872},[68,163686,1757],{"class":85},[68,163688,163689,163691,163693,163695],{"class":70,"line":2921},[68,163690,32892],{"class":92},[68,163692,997],{"class":85},[68,163694,162001],{"class":872},[68,163696,1757],{"class":85},[68,163698,163699],{"class":70,"line":2933},[68,163700,4000],{"emptyLinePlaceholder":1679},[68,163702,163703],{"class":70,"line":3214},[68,163704,4000],{"emptyLinePlaceholder":1679},[68,163706,163707,163709,163712],{"class":70,"line":3219},[68,163708,33540],{"class":102},[68,163710,163711],{"class":587}," show_balance",[68,163713,33546],{"class":85},[68,163715,163716,163718,163720,163722,163725,163727,163730,163732,163734],{"class":70,"line":3225},[68,163717,32892],{"class":92},[68,163719,997],{"class":85},[68,163721,1801],{"class":102},[68,163723,163724],{"class":872},"\"当前余额:",[68,163726,2632],{"class":92},[68,163728,163729],{"class":85},"balance",[68,163731,2681],{"class":92},[68,163733,158332],{"class":872},[68,163735,1757],{"class":85},[68,163737,163738],{"class":70,"line":3230},[68,163739,4000],{"emptyLinePlaceholder":1679},[68,163741,163742],{"class":70,"line":3244},[68,163743,4000],{"emptyLinePlaceholder":1679},[68,163745,163746,163748,163751],{"class":70,"line":3249},[68,163747,33540],{"class":102},[68,163749,163750],{"class":587}," save_money",[68,163752,33546],{"class":85},[68,163754,163755,163757],{"class":70,"line":3255},[68,163756,163181],{"class":102},[68,163758,151419],{"class":85},[68,163760,163761,163764,163766,163768,163770,163772,163774,163777],{"class":70,"line":3276},[68,163762,163763],{"class":85},"    money ",[68,163765,869],{"class":102},[68,163767,111370],{"class":92},[68,163769,997],{"class":85},[68,163771,55405],{"class":92},[68,163773,997],{"class":85},[68,163775,163776],{"class":872},"\"请输入存款金额:\"",[68,163778,32090],{"class":85},[68,163780,163781,163783,163785,163787,163789],{"class":70,"line":3281},[68,163782,4700],{"class":102},[68,163784,151462],{"class":85},[68,163786,3190],{"class":102},[68,163788,5692],{"class":92},[68,163790,5338],{"class":85},[68,163792,163793,163795,163797,163800],{"class":70,"line":3295},[68,163794,34044],{"class":92},[68,163796,997],{"class":85},[68,163798,163799],{"class":872},"\"金额必须大于0\"",[68,163801,1757],{"class":85},[68,163803,163804],{"class":70,"line":3300},[68,163805,153681],{"class":102},[68,163807,163808,163811,163813],{"class":70,"line":3329},[68,163809,163810],{"class":85},"    balance ",[68,163812,11075],{"class":102},[68,163814,151495],{"class":85},[68,163816,163817,163819,163821,163824],{"class":70,"line":3334},[68,163818,32892],{"class":92},[68,163820,997],{"class":85},[68,163822,163823],{"class":872},"\"存款成功\"",[68,163825,1757],{"class":85},[68,163827,163828],{"class":70,"line":3351},[68,163829,163830],{"class":85},"    show_balance()\n",[68,163832,163833],{"class":70,"line":3356},[68,163834,4000],{"emptyLinePlaceholder":1679},[68,163836,163837],{"class":70,"line":3361},[68,163838,4000],{"emptyLinePlaceholder":1679},[68,163840,163841,163843,163846],{"class":70,"line":3366},[68,163842,33540],{"class":102},[68,163844,163845],{"class":587}," withdraw_money",[68,163847,33546],{"class":85},[68,163849,163850,163852],{"class":70,"line":3380},[68,163851,163181],{"class":102},[68,163853,151419],{"class":85},[68,163855,163856,163858,163860,163862,163864,163866,163868,163871],{"class":70,"line":3385},[68,163857,163763],{"class":85},[68,163859,869],{"class":102},[68,163861,111370],{"class":92},[68,163863,997],{"class":85},[68,163865,55405],{"class":92},[68,163867,997],{"class":85},[68,163869,163870],{"class":872},"\"请输入取款金额:\"",[68,163872,32090],{"class":85},[68,163874,163875,163877,163879,163881,163883],{"class":70,"line":4177},[68,163876,4700],{"class":102},[68,163878,151462],{"class":85},[68,163880,3190],{"class":102},[68,163882,5692],{"class":92},[68,163884,5338],{"class":85},[68,163886,163887,163889,163891,163893],{"class":70,"line":4191},[68,163888,34044],{"class":92},[68,163890,997],{"class":85},[68,163892,163799],{"class":872},[68,163894,1757],{"class":85},[68,163896,163897],{"class":70,"line":4199},[68,163898,153681],{"class":102},[68,163900,163901,163903,163905,163907],{"class":70,"line":4204},[68,163902,4700],{"class":102},[68,163904,151462],{"class":85},[68,163906,2695],{"class":102},[68,163908,163909],{"class":85}," balance:\n",[68,163911,163912,163914,163916,163918],{"class":70,"line":4210},[68,163913,34044],{"class":92},[68,163915,997],{"class":85},[68,163917,151557],{"class":872},[68,163919,1757],{"class":85},[68,163921,163922],{"class":70,"line":4216},[68,163923,153681],{"class":102},[68,163925,163926,163928,163930],{"class":70,"line":4221},[68,163927,163810],{"class":85},[68,163929,151572],{"class":102},[68,163931,151495],{"class":85},[68,163933,163934,163936,163938,163941],{"class":70,"line":9547},[68,163935,32892],{"class":92},[68,163937,997],{"class":85},[68,163939,163940],{"class":872},"\"取款成功\"",[68,163942,1757],{"class":85},[68,163944,163945],{"class":70,"line":9571},[68,163946,163830],{"class":85},[68,163948,163949],{"class":70,"line":9576},[68,163950,4000],{"emptyLinePlaceholder":1679},[68,163952,163953],{"class":70,"line":9582},[68,163954,4000],{"emptyLinePlaceholder":1679},[68,163956,163957,163959,163961],{"class":70,"line":9609},[68,163958,110236],{"class":102},[68,163960,96867],{"class":92},[68,163962,5338],{"class":85},[68,163964,163965],{"class":70,"line":9614},[68,163966,163967],{"class":85},"    show_menu()\n",[68,163969,163970,163972,163974,163976,163978,163980],{"class":70,"line":9620},[68,163971,162012],{"class":85},[68,163973,869],{"class":102},[68,163975,62189],{"class":92},[68,163977,997],{"class":85},[68,163979,154393],{"class":872},[68,163981,1757],{"class":85},[68,163983,163984],{"class":70,"line":9632},[68,163985,4000],{"emptyLinePlaceholder":1679},[68,163987,163988,163990,163992,163994,163996],{"class":70,"line":9644},[68,163989,4700],{"class":102},[68,163991,154406],{"class":85},[68,163993,4548],{"class":102},[68,163995,154411],{"class":872},[68,163997,5338],{"class":85},[68,163999,164000],{"class":70,"line":9656},[68,164001,164002],{"class":85},"        show_balance()\n",[68,164004,164005,164007,164009,164011,164013],{"class":70,"line":11314},[68,164006,40886],{"class":102},[68,164008,154406],{"class":85},[68,164010,4548],{"class":102},[68,164012,154430],{"class":872},[68,164014,5338],{"class":85},[68,164016,164017],{"class":70,"line":11339},[68,164018,164019],{"class":85},"        save_money()\n",[68,164021,164022,164024,164026,164028,164030],{"class":70,"line":11362},[68,164023,40886],{"class":102},[68,164025,154406],{"class":85},[68,164027,4548],{"class":102},[68,164029,154448],{"class":872},[68,164031,5338],{"class":85},[68,164033,164034],{"class":70,"line":11386},[68,164035,164036],{"class":85},"        withdraw_money()\n",[68,164038,164039,164041,164043,164045,164047],{"class":70,"line":11391},[68,164040,40886],{"class":102},[68,164042,154406],{"class":85},[68,164044,4548],{"class":102},[68,164046,154502],{"class":872},[68,164048,5338],{"class":85},[68,164050,164051,164053,164055,164057],{"class":70,"line":11396},[68,164052,34044],{"class":92},[68,164054,997],{"class":85},[68,164056,154513],{"class":872},[68,164058,1757],{"class":85},[68,164060,164061],{"class":70,"line":11401},[68,164062,33220],{"class":102},[68,164064,164065,164067],{"class":70,"line":11410},[68,164066,159342],{"class":102},[68,164068,5338],{"class":85},[68,164070,164071,164073,164075,164077],{"class":70,"line":11415},[68,164072,34044],{"class":92},[68,164074,997],{"class":85},[68,164076,154534],{"class":872},[68,164078,1757],{"class":85},[19,164080,164081],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164083,164085],{"id":164084},"_514-易错点","5.14 易错点",[48,164087,164088,164091,164094,164099,164104,164107],{},[51,164089,164090],{},"函数定义后必须调用才会执行。",[51,164092,164093],{},"函数名后面有括号才是调用。",[51,164095,164096,164098],{},[65,164097,18641],{}," 后面的代码不会执行。",[51,164100,164101,164102,29978],{},"没有返回值的函数默认返回 ",[65,164103,97261],{},[51,164105,164106],{},"局部变量不能在函数外部访问。",[51,164108,164109,164110,164112],{},"不要滥用 ",[65,164111,163146],{},"，更好的方式是让函数返回新值。",[19,164114,164115,164116,164118],{},"例如不用 ",[65,164117,163146],{}," 改写存款：",[58,164120,164122],{"className":31971,"code":164121,"language":31973,"meta":63,"style":63},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[65,164123,164124,164133,164144,164148,164152,164160,164173],{"__ignoreMap":63},[68,164125,164126,164128,164130],{"class":70,"line":71},[68,164127,33540],{"class":102},[68,164129,163750],{"class":587},[68,164131,164132],{"class":85},"(balance, money):\n",[68,164134,164135,164137,164140,164142],{"class":70,"line":78},[68,164136,5689],{"class":102},[68,164138,164139],{"class":85}," balance ",[68,164141,2217],{"class":102},[68,164143,151495],{"class":85},[68,164145,164146],{"class":70,"line":89},[68,164147,4000],{"emptyLinePlaceholder":1679},[68,164149,164150],{"class":70,"line":115},[68,164151,4000],{"emptyLinePlaceholder":1679},[68,164153,164154,164156,164158],{"class":70,"line":280},[68,164155,163624],{"class":85},[68,164157,869],{"class":102},[68,164159,163629],{"class":92},[68,164161,164162,164164,164166,164169,164171],{"class":70,"line":301},[68,164163,163624],{"class":85},[68,164165,869],{"class":102},[68,164167,164168],{"class":85}," save_money(balance, ",[68,164170,3324],{"class":92},[68,164172,1757],{"class":85},[68,164174,164175,164177],{"class":70,"line":320},[68,164176,32008],{"class":92},[68,164178,164179],{"class":85},"(balance)\n",[14,164181,164183],{"id":164182},"_515-本章练习","5.15 本章练习",[48,164185,164186,164193,164199,164205,164211],{},[51,164187,164188,164189,164192],{},"定义函数 ",[65,164190,164191],{},"print_student(name, age)","，输出学生信息。",[51,164194,164188,164195,164198],{},[65,164196,164197],{},"get_max(a, b, c)","，返回三个数中的最大值。",[51,164200,164188,164201,164204],{},[65,164202,164203],{},"is_even(num)","，判断一个数是否为偶数。",[51,164206,164188,164207,164210],{},[65,164208,164209],{},"calculate_bmi(weight, height)","，返回 BMI。",[51,164212,164213],{},"把第 4 章的菜单程序拆分成多个函数。",[1652,164215,164216],{},"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":63,"searchDepth":78,"depth":78,"links":164218},[164219,164220,164221,164222,164223,164224,164225,164226,164227,164231,164232,164233,164234,164235,164236],{"id":162239,"depth":78,"text":162240},{"id":162280,"depth":78,"text":162281},{"id":162370,"depth":78,"text":162371},{"id":162451,"depth":78,"text":162452},{"id":162584,"depth":78,"text":162585},{"id":162706,"depth":78,"text":162707},{"id":162828,"depth":78,"text":162829},{"id":162905,"depth":78,"text":162906},{"id":163027,"depth":78,"text":163028,"children":164228},[164229,164230],{"id":163031,"depth":89,"text":163032},{"id":163089,"depth":89,"text":163090},{"id":163218,"depth":78,"text":163219},{"id":163344,"depth":78,"text":163345},{"id":163457,"depth":78,"text":163458},{"id":163613,"depth":78,"text":163614},{"id":164084,"depth":78,"text":164085},{"id":164182,"depth":78,"text":164183},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162231,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164243,"title":164244,"body":164245,"description":1676,"extension":1677,"meta":167289,"navigation":1679,"path":167290,"seo":167291,"stem":167292,"__hash__":167293},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164246,"toc":167270},[164247,164250,164254,164257,164260,164364,164367,164371,164374,164454,164457,164461,164464,164524,164527,164563,164566,164581,164585,164658,164661,164716,164719,164789,164792,164876,164886,164944,164948,164993,164996,165022,165025,165131,165135,165138,165180,165183,165247,165250,165254,165257,165318,165321,165351,165354,165392,165396,165399,165408,165411,165535,165538,165579,165583,165586,165597,165637,165640,165655,165660,165663,165730,165733,165823,165827,165830,165878,165881,165908,165910,165940,165943,165963,165966,165997,166000,166033,166037,166040,166064,166067,166091,166094,166118,166122,166125,166255,166258,166338,166341,166416,166420,166423,166473,166476,166518,166521,166545,166547,166571,166574,166629,166632,166698,166702,166705,166708,166746,166749,166802,166805,166851,166854,166887,166890,166894,167213,167217,167246,167250,167267],[10,164248,164244],{"id":164249},"_6-数据容器",[14,164251,164253],{"id":164252},"_61-什么是数据容器","6.1 什么是数据容器",[19,164255,164256],{},"数据容器用于一次保存多个数据。",[19,164258,164259],{},"常见容器：",[120,164261,164262,164279],{},[123,164263,164264],{},[126,164265,164266,164268,164271,164274,164277],{},[129,164267,27365],{},[129,164269,164270],{},"是否有序",[129,164272,164273],{},"是否可变",[129,164275,164276],{},"是否允许重复",[129,164278,29085],{},[137,164280,164281,164299,164315,164330,164347],{},[126,164282,164283,164286,164289,164292,164295],{},[142,164284,164285],{},"list列表",[142,164287,164288],{},"有序",[142,164290,164291],{},"可变",[142,164293,164294],{},"允许",[142,164296,164297],{},[65,164298,156577],{},[126,164300,164301,164304,164306,164309,164311],{},[142,164302,164303],{},"tuple元组",[142,164305,164288],{},[142,164307,164308],{},"不可变",[142,164310,164294],{},[142,164312,164313],{},[65,164314,156590],{},[126,164316,164317,164320,164322,164324,164326],{},[142,164318,164319],{},"str字符串",[142,164321,164288],{},[142,164323,164308],{},[142,164325,164294],{},[142,164327,164328],{},[65,164329,157200],{},[126,164331,164332,164335,164338,164340,164343],{},[142,164333,164334],{},"set集合",[142,164336,164337],{},"无序",[142,164339,164291],{},[142,164341,164342],{},"不允许",[142,164344,164345],{},[65,164346,156615],{},[126,164348,164349,164352,164354,164356,164359],{},[142,164350,164351],{},"dict字典",[142,164353,164288],{},[142,164355,164291],{},[142,164357,164358],{},"key不允许重复",[142,164360,164361],{},[65,164362,164363],{},"{\"name\": \"小明\"}",[19,164365,164366],{},"Python 3.7 之后，字典保持插入顺序。",[14,164368,164370],{"id":164369},"_62-列表list","6.2 列表list",[19,164372,164373],{},"列表用于保存一组有顺序的数据。",[58,164375,164377],{"className":31971,"code":164376,"language":31973,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[65,164378,164379,164399,164424,164445],{"__ignoreMap":63},[68,164380,164381,164383,164385,164387,164389,164391,164393,164395,164397],{"class":70,"line":71},[68,164382,161700],{"class":85},[68,164384,869],{"class":102},[68,164386,53811],{"class":85},[68,164388,151208],{"class":872},[68,164390,1002],{"class":85},[68,164392,152256],{"class":872},[68,164394,1002],{"class":85},[68,164396,161051],{"class":872},[68,164398,34839],{"class":85},[68,164400,164401,164404,164406,164408,164410,164412,164414,164416,164418,164420,164422],{"class":70,"line":78},[68,164402,164403],{"class":85},"numbers ",[68,164405,869],{"class":102},[68,164407,53811],{"class":85},[68,164409,99],{"class":92},[68,164411,1002],{"class":85},[68,164413,267],{"class":92},[68,164415,1002],{"class":85},[68,164417,288],{"class":92},[68,164419,1002],{"class":85},[68,164421,2029],{"class":92},[68,164423,34839],{"class":85},[68,164425,164426,164429,164431,164433,164435,164437,164439,164441,164443],{"class":70,"line":89},[68,164427,164428],{"class":85},"mixed ",[68,164430,869],{"class":102},[68,164432,53811],{"class":85},[68,164434,151208],{"class":872},[68,164436,1002],{"class":85},[68,164438,2386],{"class":92},[68,164440,1002],{"class":85},[68,164442,33069],{"class":92},[68,164444,34839],{"class":85},[68,164446,164447,164450,164452],{"class":70,"line":115},[68,164448,164449],{"class":85},"empty ",[68,164451,869],{"class":102},[68,164453,53423],{"class":85},[19,164455,164456],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164458,164460],{"id":164459},"_63-列表索引","6.3 列表索引",[19,164462,164463],{},"正向索引从 0 开始：",[58,164465,164467],{"className":31971,"code":164466,"language":31973,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[65,164468,164469,164489,164493,164504,164514],{"__ignoreMap":63},[68,164470,164471,164473,164475,164477,164479,164481,164483,164485,164487],{"class":70,"line":71},[68,164472,161700],{"class":85},[68,164474,869],{"class":102},[68,164476,53811],{"class":85},[68,164478,151208],{"class":872},[68,164480,1002],{"class":85},[68,164482,152256],{"class":872},[68,164484,1002],{"class":85},[68,164486,161051],{"class":872},[68,164488,34839],{"class":85},[68,164490,164491],{"class":70,"line":78},[68,164492,4000],{"emptyLinePlaceholder":1679},[68,164494,164495,164497,164500,164502],{"class":70,"line":89},[68,164496,32008],{"class":92},[68,164498,164499],{"class":85},"(names[",[68,164501,600],{"class":92},[68,164503,6256],{"class":85},[68,164505,164506,164508,164510,164512],{"class":70,"line":115},[68,164507,32008],{"class":92},[68,164509,164499],{"class":85},[68,164511,99],{"class":92},[68,164513,6256],{"class":85},[68,164515,164516,164518,164520,164522],{"class":70,"line":280},[68,164517,32008],{"class":92},[68,164519,164499],{"class":85},[68,164521,267],{"class":92},[68,164523,6256],{"class":85},[19,164525,164526],{},"反向索引从 -1 开始：",[58,164528,164530],{"className":31971,"code":164529,"language":31973,"meta":63,"style":63},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[65,164531,164532,164548],{"__ignoreMap":63},[68,164533,164534,164536,164538,164540,164542,164545],{"class":70,"line":71},[68,164535,32008],{"class":92},[68,164537,164499],{"class":85},[68,164539,2268],{"class":102},[68,164541,99],{"class":92},[68,164543,164544],{"class":85},"])  ",[68,164546,164547],{"class":74},"# 小刚\n",[68,164549,164550,164552,164554,164556,164558,164560],{"class":70,"line":78},[68,164551,32008],{"class":92},[68,164553,164499],{"class":85},[68,164555,2268],{"class":102},[68,164557,267],{"class":92},[68,164559,164544],{"class":85},[68,164561,164562],{"class":74},"# 小红\n",[19,164564,164565],{},"索引越界会报错：",[58,164567,164569],{"className":31971,"code":164568,"language":31973,"meta":63,"style":63},"print(names[3])\n",[65,164570,164571],{"__ignoreMap":63},[68,164572,164573,164575,164577,164579],{"class":70,"line":71},[68,164574,32008],{"class":92},[68,164576,164499],{"class":85},[68,164578,288],{"class":92},[68,164580,6256],{"class":85},[14,164582,164584],{"id":164583},"_64-列表常用方法","6.4 列表常用方法",[58,164586,164588],{"className":31971,"code":164587,"language":31973,"meta":63,"style":63},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[65,164589,164590,164606,164610,164619,164633,164647,164651],{"__ignoreMap":63},[68,164591,164592,164594,164596,164598,164600,164602,164604],{"class":70,"line":71},[68,164593,161700],{"class":85},[68,164595,869],{"class":102},[68,164597,53811],{"class":85},[68,164599,151208],{"class":872},[68,164601,1002],{"class":85},[68,164603,152256],{"class":872},[68,164605,34839],{"class":85},[68,164607,164608],{"class":70,"line":78},[68,164609,4000],{"emptyLinePlaceholder":1679},[68,164611,164612,164615,164617],{"class":70,"line":89},[68,164613,164614],{"class":85},"names.append(",[68,164616,161051],{"class":872},[68,164618,1757],{"class":85},[68,164620,164621,164624,164626,164628,164631],{"class":70,"line":115},[68,164622,164623],{"class":85},"names.insert(",[68,164625,99],{"class":92},[68,164627,1002],{"class":85},[68,164629,164630],{"class":872},"\"小李\"",[68,164632,1757],{"class":85},[68,164634,164635,164638,164640,164642,164645],{"class":70,"line":280},[68,164636,164637],{"class":85},"names.extend([",[68,164639,10282],{"class":872},[68,164641,1002],{"class":85},[68,164643,164644],{"class":872},"\"小赵\"",[68,164646,6256],{"class":85},[68,164648,164649],{"class":70,"line":301},[68,164650,4000],{"emptyLinePlaceholder":1679},[68,164652,164653,164655],{"class":70,"line":320},[68,164654,32008],{"class":92},[68,164656,164657],{"class":85},"(names)\n",[19,164659,164660],{},"删除元素：",[58,164662,164664],{"className":31971,"code":164663,"language":31973,"meta":63,"style":63},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[65,164665,164666,164675,164685,164699,164711],{"__ignoreMap":63},[68,164667,164668,164671,164673],{"class":70,"line":71},[68,164669,164670],{"class":85},"names.remove(",[68,164672,152256],{"class":872},[68,164674,1757],{"class":85},[68,164676,164677,164680,164682],{"class":70,"line":78},[68,164678,164679],{"class":85},"last ",[68,164681,869],{"class":102},[68,164683,164684],{"class":85}," names.pop()\n",[68,164686,164687,164690,164692,164695,164697],{"class":70,"line":89},[68,164688,164689],{"class":85},"first ",[68,164691,869],{"class":102},[68,164693,164694],{"class":85}," names.pop(",[68,164696,600],{"class":92},[68,164698,1757],{"class":85},[68,164700,164701,164704,164707,164709],{"class":70,"line":115},[68,164702,164703],{"class":102},"del",[68,164705,164706],{"class":85}," names[",[68,164708,600],{"class":92},[68,164710,34839],{"class":85},[68,164712,164713],{"class":70,"line":280},[68,164714,164715],{"class":85},"names.clear()\n",[19,164717,164718],{},"查询和统计：",[58,164720,164722],{"className":31971,"code":164721,"language":31973,"meta":63,"style":63},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[65,164723,164724,164752,164756,164767,164778],{"__ignoreMap":63},[68,164725,164726,164728,164730,164732,164734,164736,164738,164740,164742,164744,164746,164748,164750],{"class":70,"line":71},[68,164727,164403],{"class":85},[68,164729,869],{"class":102},[68,164731,53811],{"class":85},[68,164733,99],{"class":92},[68,164735,1002],{"class":85},[68,164737,267],{"class":92},[68,164739,1002],{"class":85},[68,164741,288],{"class":92},[68,164743,1002],{"class":85},[68,164745,267],{"class":92},[68,164747,1002],{"class":85},[68,164749,2029],{"class":92},[68,164751,34839],{"class":85},[68,164753,164754],{"class":70,"line":78},[68,164755,4000],{"emptyLinePlaceholder":1679},[68,164757,164758,164760,164763,164765],{"class":70,"line":89},[68,164759,32008],{"class":92},[68,164761,164762],{"class":85},"(numbers.index(",[68,164764,288],{"class":92},[68,164766,32090],{"class":85},[68,164768,164769,164771,164774,164776],{"class":70,"line":115},[68,164770,32008],{"class":92},[68,164772,164773],{"class":85},"(numbers.count(",[68,164775,267],{"class":92},[68,164777,32090],{"class":85},[68,164779,164780,164782,164784,164786],{"class":70,"line":280},[68,164781,32008],{"class":92},[68,164783,997],{"class":85},[68,164785,8957],{"class":92},[68,164787,164788],{"class":85},"(numbers))\n",[19,164790,164791],{},"排序：",[58,164793,164795],{"className":31971,"code":164794,"language":31973,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[65,164796,164797,164821,164825,164830,164837,164841,164855,164861,164865,164870],{"__ignoreMap":63},[68,164798,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819],{"class":70,"line":71},[68,164800,164403],{"class":85},[68,164802,869],{"class":102},[68,164804,53811],{"class":85},[68,164806,288],{"class":92},[68,164808,1002],{"class":85},[68,164810,99],{"class":92},[68,164812,1002],{"class":85},[68,164814,2055],{"class":92},[68,164816,1002],{"class":85},[68,164818,267],{"class":92},[68,164820,34839],{"class":85},[68,164822,164823],{"class":70,"line":78},[68,164824,4000],{"emptyLinePlaceholder":1679},[68,164826,164827],{"class":70,"line":89},[68,164828,164829],{"class":85},"numbers.sort()\n",[68,164831,164832,164834],{"class":70,"line":115},[68,164833,32008],{"class":92},[68,164835,164836],{"class":85},"(numbers)\n",[68,164838,164839],{"class":70,"line":280},[68,164840,4000],{"emptyLinePlaceholder":1679},[68,164842,164843,164846,164849,164851,164853],{"class":70,"line":301},[68,164844,164845],{"class":85},"numbers.sort(",[68,164847,164848],{"class":6815},"reverse",[68,164850,869],{"class":102},[68,164852,33069],{"class":92},[68,164854,1757],{"class":85},[68,164856,164857,164859],{"class":70,"line":320},[68,164858,32008],{"class":92},[68,164860,164836],{"class":85},[68,164862,164863],{"class":70,"line":2915},[68,164864,4000],{"emptyLinePlaceholder":1679},[68,164866,164867],{"class":70,"line":2921},[68,164868,164869],{"class":85},"numbers.reverse()\n",[68,164871,164872,164874],{"class":70,"line":2933},[68,164873,32008],{"class":92},[68,164875,164836],{"class":85},[19,164877,164878,164881,164882,164885],{},[65,164879,164880],{},"sort()"," 会修改原列表，",[65,164883,164884],{},"sorted()"," 返回新列表。",[58,164887,164889],{"className":31971,"code":164888,"language":31973,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[65,164890,164891,164915,164927,164931,164937],{"__ignoreMap":63},[68,164892,164893,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913],{"class":70,"line":71},[68,164894,164403],{"class":85},[68,164896,869],{"class":102},[68,164898,53811],{"class":85},[68,164900,288],{"class":92},[68,164902,1002],{"class":85},[68,164904,99],{"class":92},[68,164906,1002],{"class":85},[68,164908,2055],{"class":92},[68,164910,1002],{"class":85},[68,164912,267],{"class":92},[68,164914,34839],{"class":85},[68,164916,164917,164920,164922,164925],{"class":70,"line":78},[68,164918,164919],{"class":85},"new_numbers ",[68,164921,869],{"class":102},[68,164923,164924],{"class":92}," sorted",[68,164926,164836],{"class":85},[68,164928,164929],{"class":70,"line":89},[68,164930,4000],{"emptyLinePlaceholder":1679},[68,164932,164933,164935],{"class":70,"line":115},[68,164934,32008],{"class":92},[68,164936,164836],{"class":85},[68,164938,164939,164941],{"class":70,"line":280},[68,164940,32008],{"class":92},[68,164942,164943],{"class":85},"(new_numbers)\n",[14,164945,164947],{"id":164946},"_65-列表遍历","6.5 列表遍历",[58,164949,164951],{"className":31971,"code":164950,"language":31973,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[65,164952,164953,164973,164977,164987],{"__ignoreMap":63},[68,164954,164955,164957,164959,164961,164963,164965,164967,164969,164971],{"class":70,"line":71},[68,164956,161700],{"class":85},[68,164958,869],{"class":102},[68,164960,53811],{"class":85},[68,164962,151208],{"class":872},[68,164964,1002],{"class":85},[68,164966,152256],{"class":872},[68,164968,1002],{"class":85},[68,164970,161051],{"class":872},[68,164972,34839],{"class":85},[68,164974,164975],{"class":70,"line":78},[68,164976,4000],{"emptyLinePlaceholder":1679},[68,164978,164979,164981,164983,164985],{"class":70,"line":89},[68,164980,4624],{"class":102},[68,164982,161736],{"class":85},[68,164984,27637],{"class":102},[68,164986,161741],{"class":85},[68,164988,164989,164991],{"class":70,"line":115},[68,164990,32892],{"class":92},[68,164992,151980],{"class":85},[19,164994,164995],{},"需要索引时：",[58,164997,164999],{"className":31971,"code":164998,"language":31973,"meta":63,"style":63},"for index, name in enumerate(names):\n    print(index, name)\n",[65,165000,165001,165015],{"__ignoreMap":63},[68,165002,165003,165005,165008,165010,165012],{"class":70,"line":71},[68,165004,4624],{"class":102},[68,165006,165007],{"class":85}," index, name ",[68,165009,27637],{"class":102},[68,165011,33199],{"class":92},[68,165013,165014],{"class":85},"(names):\n",[68,165016,165017,165019],{"class":70,"line":78},[68,165018,32892],{"class":92},[68,165020,165021],{"class":85},"(index, name)\n",[19,165023,165024],{},"统计总分：",[58,165026,165028],{"className":31971,"code":165027,"language":31973,"meta":63,"style":63},"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",[65,165029,165030,165055,165063,165067,165078,165086,165090,165107],{"__ignoreMap":63},[68,165031,165032,165035,165037,165039,165041,165043,165045,165047,165049,165051,165053],{"class":70,"line":71},[68,165033,165034],{"class":85},"scores ",[68,165036,869],{"class":102},[68,165038,53811],{"class":85},[68,165040,2598],{"class":92},[68,165042,1002],{"class":85},[68,165044,2472],{"class":92},[68,165046,1002],{"class":85},[68,165048,1990],{"class":92},[68,165050,1002],{"class":85},[68,165052,2297],{"class":92},[68,165054,34839],{"class":85},[68,165056,165057,165059,165061],{"class":70,"line":78},[68,165058,158580],{"class":85},[68,165060,869],{"class":102},[68,165062,48926],{"class":92},[68,165064,165065],{"class":70,"line":89},[68,165066,4000],{"emptyLinePlaceholder":1679},[68,165068,165069,165071,165073,165075],{"class":70,"line":115},[68,165070,4624],{"class":102},[68,165072,159103],{"class":85},[68,165074,27637],{"class":102},[68,165076,165077],{"class":85}," scores:\n",[68,165079,165080,165082,165084],{"class":70,"line":280},[68,165081,160627],{"class":85},[68,165083,11075],{"class":102},[68,165085,3181],{"class":85},[68,165087,165088],{"class":70,"line":301},[68,165089,4000],{"emptyLinePlaceholder":1679},[68,165091,165092,165095,165097,165100,165102,165104],{"class":70,"line":320},[68,165093,165094],{"class":85},"avg ",[68,165096,869],{"class":102},[68,165098,165099],{"class":85}," total ",[68,165101,2320],{"class":102},[68,165103,8930],{"class":92},[68,165105,165106],{"class":85},"(scores)\n",[68,165108,165109,165111,165113,165115,165118,165120,165123,165125,165127,165129],{"class":70,"line":2915},[68,165110,32008],{"class":92},[68,165112,997],{"class":85},[68,165114,1801],{"class":102},[68,165116,165117],{"class":872},"\"平均分:",[68,165119,2632],{"class":92},[68,165121,165122],{"class":85},"avg",[68,165124,158479],{"class":102},[68,165126,2681],{"class":92},[68,165128,1987],{"class":872},[68,165130,1757],{"class":85},[14,165132,165134],{"id":165133},"_66-元组tuple","6.6 元组tuple",[19,165136,165137],{},"元组和列表类似，但不可修改。",[58,165139,165141],{"className":31971,"code":165140,"language":31973,"meta":63,"style":63},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[65,165142,165143,165160],{"__ignoreMap":63},[68,165144,165145,165148,165150,165152,165154,165156,165158],{"class":70,"line":71},[68,165146,165147],{"class":85},"point ",[68,165149,869],{"class":102},[68,165151,3260],{"class":85},[68,165153,2182],{"class":92},[68,165155,1002],{"class":85},[68,165157,2436],{"class":92},[68,165159,1757],{"class":85},[68,165161,165162,165164,165166,165168,165170,165172,165174,165176,165178],{"class":70,"line":78},[68,165163,117887],{"class":85},[68,165165,869],{"class":102},[68,165167,3260],{"class":85},[68,165169,151208],{"class":872},[68,165171,1002],{"class":85},[68,165173,2386],{"class":92},[68,165175,1002],{"class":85},[68,165177,70851],{"class":872},[68,165179,1757],{"class":85},[19,165181,165182],{},"单元素元组必须加逗号：",[58,165184,165186],{"className":31971,"code":165185,"language":31973,"meta":63,"style":63},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[65,165187,165188,165202,165215,165219,165233],{"__ignoreMap":63},[68,165189,165190,165193,165195,165197,165199],{"class":70,"line":71},[68,165191,165192],{"class":85},"t1 ",[68,165194,869],{"class":102},[68,165196,3260],{"class":85},[68,165198,2182],{"class":92},[68,165200,165201],{"class":85},",)\n",[68,165203,165204,165207,165209,165211,165213],{"class":70,"line":78},[68,165205,165206],{"class":85},"t2 ",[68,165208,869],{"class":102},[68,165210,3260],{"class":85},[68,165212,2182],{"class":92},[68,165214,1757],{"class":85},[68,165216,165217],{"class":70,"line":89},[68,165218,4000],{"emptyLinePlaceholder":1679},[68,165220,165221,165223,165225,165227,165230],{"class":70,"line":115},[68,165222,32008],{"class":92},[68,165224,997],{"class":85},[68,165226,104680],{"class":92},[68,165228,165229],{"class":85},"(t1))  ",[68,165231,165232],{"class":74},"# tuple\n",[68,165234,165235,165237,165239,165241,165244],{"class":70,"line":280},[68,165236,32008],{"class":92},[68,165238,997],{"class":85},[68,165240,104680],{"class":92},[68,165242,165243],{"class":85},"(t2))  ",[68,165245,165246],{"class":74},"# int\n",[19,165248,165249],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165251,165253],{"id":165252},"_67-字符串str","6.7 字符串str",[19,165255,165256],{},"字符串也是序列，可以索引、切片和遍历。",[58,165258,165260],{"className":31971,"code":165259,"language":31973,"meta":63,"style":63},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[65,165261,165262,165270,165274,165285,165297,165301,165312],{"__ignoreMap":63},[68,165263,165264,165266,165268],{"class":70,"line":71},[68,165265,157764],{"class":85},[68,165267,869],{"class":102},[68,165269,161001],{"class":872},[68,165271,165272],{"class":70,"line":78},[68,165273,4000],{"emptyLinePlaceholder":1679},[68,165275,165276,165278,165281,165283],{"class":70,"line":89},[68,165277,32008],{"class":92},[68,165279,165280],{"class":85},"(text[",[68,165282,600],{"class":92},[68,165284,6256],{"class":85},[68,165286,165287,165289,165291,165293,165295],{"class":70,"line":115},[68,165288,32008],{"class":92},[68,165290,165280],{"class":85},[68,165292,2268],{"class":102},[68,165294,99],{"class":92},[68,165296,6256],{"class":85},[68,165298,165299],{"class":70,"line":280},[68,165300,4000],{"emptyLinePlaceholder":1679},[68,165302,165303,165305,165307,165309],{"class":70,"line":301},[68,165304,4624],{"class":102},[68,165306,161012],{"class":85},[68,165308,27637],{"class":102},[68,165310,165311],{"class":85}," text:\n",[68,165313,165314,165316],{"class":70,"line":320},[68,165315,32892],{"class":92},[68,165317,161023],{"class":85},[19,165319,165320],{},"字符串不可变：",[58,165322,165324],{"className":31971,"code":165323,"language":31973,"meta":63,"style":63},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[65,165325,165326,165334],{"__ignoreMap":63},[68,165327,165328,165330,165332],{"class":70,"line":71},[68,165329,157764],{"class":85},[68,165331,869],{"class":102},[68,165333,161001],{"class":872},[68,165335,165336,165339,165341,165343,165345,165348],{"class":70,"line":78},[68,165337,165338],{"class":85},"text[",[68,165340,600],{"class":92},[68,165342,6042],{"class":85},[68,165344,869],{"class":102},[68,165346,165347],{"class":872}," \"P\"",[68,165349,165350],{"class":74},"  # 报错\n",[19,165352,165353],{},"如果要得到新字符串：",[58,165355,165357],{"className":31971,"code":165356,"language":31973,"meta":63,"style":63},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[65,165358,165359,165367,165385],{"__ignoreMap":63},[68,165360,165361,165363,165365],{"class":70,"line":71},[68,165362,157764],{"class":85},[68,165364,869],{"class":102},[68,165366,161001],{"class":872},[68,165368,165369,165371,165373,165375,165377,165380,165382],{"class":70,"line":78},[68,165370,157764],{"class":85},[68,165372,869],{"class":102},[68,165374,165347],{"class":872},[68,165376,47159],{"class":102},[68,165378,165379],{"class":85}," text[",[68,165381,99],{"class":92},[68,165383,165384],{"class":85},":]\n",[68,165386,165387,165389],{"class":70,"line":89},[68,165388,32008],{"class":92},[68,165390,165391],{"class":85},"(text)\n",[14,165393,165395],{"id":165394},"_68-切片","6.8 切片",[19,165397,165398],{},"切片用于从序列中取一部分。",[58,165400,165402],{"className":31971,"code":165401,"language":31973,"meta":63,"style":63},"序列[开始:结束:步长]\n",[65,165403,165404],{"__ignoreMap":63},[68,165405,165406],{"class":70,"line":71},[68,165407,165401],{"class":85},[19,165409,165410],{},"结束位置不包含。",[58,165412,165414],{"className":31971,"code":165413,"language":31973,"meta":63,"style":63},"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",[65,165415,165416,165453,165457,165476,165491,165505,165519],{"__ignoreMap":63},[68,165417,165418,165421,165423,165425,165427,165429,165431,165433,165435,165437,165439,165441,165443,165445,165447,165449,165451],{"class":70,"line":71},[68,165419,165420],{"class":85},"nums ",[68,165422,869],{"class":102},[68,165424,53811],{"class":85},[68,165426,600],{"class":92},[68,165428,1002],{"class":85},[68,165430,99],{"class":92},[68,165432,1002],{"class":85},[68,165434,267],{"class":92},[68,165436,1002],{"class":85},[68,165438,288],{"class":92},[68,165440,1002],{"class":85},[68,165442,2029],{"class":92},[68,165444,1002],{"class":85},[68,165446,2055],{"class":92},[68,165448,1002],{"class":85},[68,165450,2080],{"class":92},[68,165452,34839],{"class":85},[68,165454,165455],{"class":70,"line":78},[68,165456,4000],{"emptyLinePlaceholder":1679},[68,165458,165459,165461,165464,165466,165468,165470,165473],{"class":70,"line":89},[68,165460,32008],{"class":92},[68,165462,165463],{"class":85},"(nums[",[68,165465,99],{"class":92},[68,165467,2595],{"class":85},[68,165469,2029],{"class":92},[68,165471,165472],{"class":85},"])    ",[68,165474,165475],{"class":74},"# [1, 2, 3]\n",[68,165477,165478,165480,165483,165485,165488],{"class":70,"line":115},[68,165479,32008],{"class":92},[68,165481,165482],{"class":85},"(nums[:",[68,165484,288],{"class":92},[68,165486,165487],{"class":85},"])     ",[68,165489,165490],{"class":74},"# [0, 1, 2]\n",[68,165492,165493,165495,165497,165499,165502],{"class":70,"line":280},[68,165494,32008],{"class":92},[68,165496,165463],{"class":85},[68,165498,288],{"class":92},[68,165500,165501],{"class":85},":])     ",[68,165503,165504],{"class":74},"# [3, 4, 5, 6]\n",[68,165506,165507,165509,165512,165514,165516],{"class":70,"line":301},[68,165508,32008],{"class":92},[68,165510,165511],{"class":85},"(nums[::",[68,165513,267],{"class":92},[68,165515,165472],{"class":85},[68,165517,165518],{"class":74},"# [0, 2, 4, 6]\n",[68,165520,165521,165523,165525,165527,165529,165532],{"class":70,"line":320},[68,165522,32008],{"class":92},[68,165524,165511],{"class":85},[68,165526,2268],{"class":102},[68,165528,99],{"class":92},[68,165530,165531],{"class":85},"])   ",[68,165533,165534],{"class":74},"# 反转\n",[19,165536,165537],{},"字符串切片：",[58,165539,165541],{"className":31971,"code":165540,"language":31973,"meta":63,"style":63},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[65,165542,165543,165552,165566],{"__ignoreMap":63},[68,165544,165545,165547,165549],{"class":70,"line":71},[68,165546,157764],{"class":85},[68,165548,869],{"class":102},[68,165550,165551],{"class":872}," \"abcdef\"\n",[68,165553,165554,165556,165558,165560,165562,165564],{"class":70,"line":78},[68,165555,32008],{"class":92},[68,165557,165280],{"class":85},[68,165559,99],{"class":92},[68,165561,2595],{"class":85},[68,165563,2029],{"class":92},[68,165565,6256],{"class":85},[68,165567,165568,165570,165573,165575,165577],{"class":70,"line":89},[68,165569,32008],{"class":92},[68,165571,165572],{"class":85},"(text[::",[68,165574,2268],{"class":102},[68,165576,99],{"class":92},[68,165578,6256],{"class":85},[14,165580,165582],{"id":165581},"_69-集合set","6.9 集合set",[19,165584,165585],{},"集合特点：",[48,165587,165588,165591,165594],{},[51,165589,165590],{},"无序。",[51,165592,165593],{},"元素不重复。",[51,165595,165596],{},"可以做交集、并集、差集。",[58,165598,165600],{"className":31971,"code":165599,"language":31973,"meta":63,"style":63},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[65,165601,165602,165630],{"__ignoreMap":63},[68,165603,165604,165606,165608,165610,165612,165614,165616,165618,165620,165622,165624,165626,165628],{"class":70,"line":71},[68,165605,165420],{"class":85},[68,165607,869],{"class":102},[68,165609,6047],{"class":85},[68,165611,99],{"class":92},[68,165613,1002],{"class":85},[68,165615,267],{"class":92},[68,165617,1002],{"class":85},[68,165619,288],{"class":92},[68,165621,1002],{"class":85},[68,165623,288],{"class":92},[68,165625,1002],{"class":85},[68,165627,2029],{"class":92},[68,165629,118],{"class":85},[68,165631,165632,165634],{"class":70,"line":78},[68,165633,32008],{"class":92},[68,165635,165636],{"class":85},"(nums)\n",[19,165638,165639],{},"创建空集合：",[58,165641,165643],{"className":31971,"code":165642,"language":31973,"meta":63,"style":63},"s = set()\n",[65,165644,165645],{"__ignoreMap":63},[68,165646,165647,165649,165651,165653],{"class":70,"line":71},[68,165648,12177],{"class":85},[68,165650,869],{"class":102},[68,165652,121295],{"class":92},[68,165654,3577],{"class":85},[19,165656,1210,165657,165659],{},[65,165658,34052],{}," 是空字典，不是空集合。",[19,165661,165662],{},"集合常用操作：",[58,165664,165666],{"className":31971,"code":165665,"language":31973,"meta":63,"style":63},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[65,165667,165668,165688,165692,165701,165710,165719],{"__ignoreMap":63},[68,165669,165670,165672,165674,165676,165678,165680,165682,165684,165686],{"class":70,"line":71},[68,165671,12177],{"class":85},[68,165673,869],{"class":102},[68,165675,6047],{"class":85},[68,165677,99],{"class":92},[68,165679,1002],{"class":85},[68,165681,267],{"class":92},[68,165683,1002],{"class":85},[68,165685,288],{"class":92},[68,165687,118],{"class":85},[68,165689,165690],{"class":70,"line":78},[68,165691,4000],{"emptyLinePlaceholder":1679},[68,165693,165694,165697,165699],{"class":70,"line":89},[68,165695,165696],{"class":85},"s.add(",[68,165698,2029],{"class":92},[68,165700,1757],{"class":85},[68,165702,165703,165706,165708],{"class":70,"line":115},[68,165704,165705],{"class":85},"s.remove(",[68,165707,267],{"class":92},[68,165709,1757],{"class":85},[68,165711,165712,165715,165717],{"class":70,"line":280},[68,165713,165714],{"class":85},"s.discard(",[68,165716,2182],{"class":92},[68,165718,1757],{"class":85},[68,165720,165721,165723,165725,165727],{"class":70,"line":301},[68,165722,32008],{"class":92},[68,165724,997],{"class":85},[68,165726,8957],{"class":92},[68,165728,165729],{"class":85},"(s))\n",[19,165731,165732],{},"交并差：",[58,165734,165736],{"className":31971,"code":165735,"language":31973,"meta":63,"style":63},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[65,165737,165738,165758,165778,165782,165797,165810],{"__ignoreMap":63},[68,165739,165740,165742,165744,165746,165748,165750,165752,165754,165756],{"class":70,"line":71},[68,165741,12517],{"class":85},[68,165743,869],{"class":102},[68,165745,6047],{"class":85},[68,165747,99],{"class":92},[68,165749,1002],{"class":85},[68,165751,267],{"class":92},[68,165753,1002],{"class":85},[68,165755,288],{"class":92},[68,165757,118],{"class":85},[68,165759,165760,165762,165764,165766,165768,165770,165772,165774,165776],{"class":70,"line":78},[68,165761,12543],{"class":85},[68,165763,869],{"class":102},[68,165765,6047],{"class":85},[68,165767,288],{"class":92},[68,165769,1002],{"class":85},[68,165771,2029],{"class":92},[68,165773,1002],{"class":85},[68,165775,2055],{"class":92},[68,165777,118],{"class":85},[68,165779,165780],{"class":70,"line":89},[68,165781,4000],{"emptyLinePlaceholder":1679},[68,165783,165784,165786,165789,165791,165794],{"class":70,"line":115},[68,165785,32008],{"class":92},[68,165787,165788],{"class":85},"(a ",[68,165790,2089],{"class":102},[68,165792,165793],{"class":85}," b)  ",[68,165795,165796],{"class":74},"# 交集\n",[68,165798,165799,165801,165803,165805,165807],{"class":70,"line":280},[68,165800,32008],{"class":92},[68,165802,165788],{"class":85},[68,165804,2656],{"class":102},[68,165806,165793],{"class":85},[68,165808,165809],{"class":74},"# 并集\n",[68,165811,165812,165814,165816,165818,165820],{"class":70,"line":301},[68,165813,32008],{"class":92},[68,165815,165788],{"class":85},[68,165817,2268],{"class":102},[68,165819,165793],{"class":85},[68,165821,165822],{"class":74},"# 差集\n",[14,165824,165826],{"id":165825},"_610-字典dict","6.10 字典dict",[19,165828,165829],{},"字典通过 key-value 保存数据。",[58,165831,165833],{"className":31971,"code":165832,"language":31973,"meta":63,"style":63},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[65,165834,165835,165843,165853,165864,165874],{"__ignoreMap":63},[68,165836,165837,165839,165841],{"class":70,"line":71},[68,165838,150801],{"class":85},[68,165840,869],{"class":102},[68,165842,86],{"class":85},[68,165844,165845,165847,165849,165851],{"class":70,"line":78},[68,165846,148340],{"class":872},[68,165848,96],{"class":85},[68,165850,151208],{"class":872},[68,165852,33059],{"class":85},[68,165854,165855,165858,165860,165862],{"class":70,"line":89},[68,165856,165857],{"class":872},"    \"age\"",[68,165859,96],{"class":85},[68,165861,2386],{"class":92},[68,165863,33059],{"class":85},[68,165865,165866,165869,165871],{"class":70,"line":115},[68,165867,165868],{"class":872},"    \"score\"",[68,165870,96],{"class":85},[68,165872,165873],{"class":92},"95\n",[68,165875,165876],{"class":70,"line":280},[68,165877,118],{"class":85},[19,165879,165880],{},"获取值：",[58,165882,165884],{"className":31971,"code":165883,"language":31973,"meta":63,"style":63},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[65,165885,165886,165897],{"__ignoreMap":63},[68,165887,165888,165890,165893,165895],{"class":70,"line":71},[68,165889,32008],{"class":92},[68,165891,165892],{"class":85},"(student[",[68,165894,64262],{"class":872},[68,165896,6256],{"class":85},[68,165898,165899,165901,165904,165906],{"class":70,"line":78},[68,165900,32008],{"class":92},[68,165902,165903],{"class":85},"(student.get(",[68,165905,64262],{"class":872},[68,165907,32090],{"class":85},[19,165909,16984],{},[58,165911,165913],{"className":31971,"code":165912,"language":31973,"meta":63,"style":63},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[65,165914,165915,165928],{"__ignoreMap":63},[68,165916,165917,165919,165922,165925],{"class":70,"line":71},[68,165918,154179],{"class":85},[68,165920,165921],{"class":872},"\"address\"",[68,165923,165924],{"class":85},"]     ",[68,165926,165927],{"class":74},"# key不存在会报错\n",[68,165929,165930,165933,165935,165937],{"class":70,"line":78},[68,165931,165932],{"class":85},"student.get(",[68,165934,165921],{"class":872},[68,165936,15311],{"class":85},[68,165938,165939],{"class":74},"# key不存在返回None\n",[19,165941,165942],{},"设置默认值：",[58,165944,165946],{"className":31971,"code":165945,"language":31973,"meta":63,"style":63},"print(student.get(\"address\", \"未知\"))\n",[65,165947,165948],{"__ignoreMap":63},[68,165949,165950,165952,165954,165956,165958,165961],{"class":70,"line":71},[68,165951,32008],{"class":92},[68,165953,165903],{"class":85},[68,165955,165921],{"class":872},[68,165957,1002],{"class":85},[68,165959,165960],{"class":872},"\"未知\"",[68,165962,32090],{"class":85},[19,165964,165965],{},"新增和修改：",[58,165967,165969],{"className":31971,"code":165968,"language":31973,"meta":63,"style":63},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[65,165970,165971,165984],{"__ignoreMap":63},[68,165972,165973,165975,165977,165979,165981],{"class":70,"line":71},[68,165974,154179],{"class":85},[68,165976,70706],{"class":872},[68,165978,6042],{"class":85},[68,165980,869],{"class":102},[68,165982,165983],{"class":92}," 19\n",[68,165985,165986,165988,165990,165992,165994],{"class":70,"line":78},[68,165987,154179],{"class":85},[68,165989,165921],{"class":872},[68,165991,6042],{"class":85},[68,165993,869],{"class":102},[68,165995,165996],{"class":872}," \"北京\"\n",[19,165998,165999],{},"删除：",[58,166001,166003],{"className":31971,"code":166002,"language":31973,"meta":63,"style":63},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[65,166004,166005,166018,166028],{"__ignoreMap":63},[68,166006,166007,166009,166011,166014,166016],{"class":70,"line":71},[68,166008,156678],{"class":85},[68,166010,869],{"class":102},[68,166012,166013],{"class":85}," student.pop(",[68,166015,152792],{"class":872},[68,166017,1757],{"class":85},[68,166019,166020,166022,166024,166026],{"class":70,"line":78},[68,166021,164703],{"class":102},[68,166023,153469],{"class":85},[68,166025,70706],{"class":872},[68,166027,34839],{"class":85},[68,166029,166030],{"class":70,"line":89},[68,166031,166032],{"class":85},"student.clear()\n",[14,166034,166036],{"id":166035},"_611-字典遍历","6.11 字典遍历",[19,166038,166039],{},"遍历 key：",[58,166041,166043],{"className":31971,"code":166042,"language":31973,"meta":63,"style":63},"for key in student:\n    print(key, student[key])\n",[65,166044,166045,166057],{"__ignoreMap":63},[68,166046,166047,166049,166052,166054],{"class":70,"line":71},[68,166048,4624],{"class":102},[68,166050,166051],{"class":85}," key ",[68,166053,27637],{"class":102},[68,166055,166056],{"class":85}," student:\n",[68,166058,166059,166061],{"class":70,"line":78},[68,166060,32892],{"class":92},[68,166062,166063],{"class":85},"(key, student[key])\n",[19,166065,166066],{},"遍历 value：",[58,166068,166070],{"className":31971,"code":166069,"language":31973,"meta":63,"style":63},"for value in student.values():\n    print(value)\n",[65,166071,166072,166084],{"__ignoreMap":63},[68,166073,166074,166076,166079,166081],{"class":70,"line":71},[68,166075,4624],{"class":102},[68,166077,166078],{"class":85}," value ",[68,166080,27637],{"class":102},[68,166082,166083],{"class":85}," student.values():\n",[68,166085,166086,166088],{"class":70,"line":78},[68,166087,32892],{"class":92},[68,166089,166090],{"class":85},"(value)\n",[19,166092,166093],{},"遍历 key 和 value：",[58,166095,166097],{"className":31971,"code":166096,"language":31973,"meta":63,"style":63},"for key, value in student.items():\n    print(key, value)\n",[65,166098,166099,166111],{"__ignoreMap":63},[68,166100,166101,166103,166106,166108],{"class":70,"line":71},[68,166102,4624],{"class":102},[68,166104,166105],{"class":85}," key, value ",[68,166107,27637],{"class":102},[68,166109,166110],{"class":85}," student.items():\n",[68,166112,166113,166115],{"class":70,"line":78},[68,166114,32892],{"class":92},[68,166116,166117],{"class":85},"(key, value)\n",[14,166119,166121],{"id":166120},"_612-嵌套容器","6.12 嵌套容器",[19,166123,166124],{},"列表中保存字典，是项目中最常见的结构之一。",[58,166126,166128],{"className":31971,"code":166127,"language":31973,"meta":63,"style":63},"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",[65,166129,166130,166138,166166,166194,166222,166226,166230,166240],{"__ignoreMap":63},[68,166131,166132,166134,166136],{"class":70,"line":71},[68,166133,161036],{"class":85},[68,166135,869],{"class":102},[68,166137,57031],{"class":85},[68,166139,166140,166142,166144,166146,166148,166150,166152,166154,166156,166158,166160,166162,166164],{"class":70,"line":78},[68,166141,149705],{"class":85},[68,166143,64262],{"class":872},[68,166145,96],{"class":85},[68,166147,151208],{"class":872},[68,166149,1002],{"class":85},[68,166151,70706],{"class":872},[68,166153,96],{"class":85},[68,166155,2386],{"class":92},[68,166157,1002],{"class":85},[68,166159,152792],{"class":872},[68,166161,96],{"class":85},[68,166163,2724],{"class":92},[68,166165,6529],{"class":85},[68,166167,166168,166170,166172,166174,166176,166178,166180,166182,166184,166186,166188,166190,166192],{"class":70,"line":89},[68,166169,149705],{"class":85},[68,166171,64262],{"class":872},[68,166173,96],{"class":85},[68,166175,152256],{"class":872},[68,166177,1002],{"class":85},[68,166179,70706],{"class":872},[68,166181,96],{"class":85},[68,166183,2361],{"class":92},[68,166185,1002],{"class":85},[68,166187,152792],{"class":872},[68,166189,96],{"class":85},[68,166191,2547],{"class":92},[68,166193,6529],{"class":85},[68,166195,166196,166198,166200,166202,166204,166206,166208,166210,166212,166214,166216,166218,166220],{"class":70,"line":115},[68,166197,149705],{"class":85},[68,166199,64262],{"class":872},[68,166201,96],{"class":85},[68,166203,161051],{"class":872},[68,166205,1002],{"class":85},[68,166207,70706],{"class":872},[68,166209,96],{"class":85},[68,166211,2411],{"class":92},[68,166213,1002],{"class":85},[68,166215,152792],{"class":872},[68,166217,96],{"class":85},[68,166219,2142],{"class":92},[68,166221,6529],{"class":85},[68,166223,166224],{"class":70,"line":280},[68,166225,34839],{"class":85},[68,166227,166228],{"class":70,"line":301},[68,166229,4000],{"emptyLinePlaceholder":1679},[68,166231,166232,166234,166236,166238],{"class":70,"line":320},[68,166233,4624],{"class":102},[68,166235,153457],{"class":85},[68,166237,27637],{"class":102},[68,166239,153462],{"class":85},[68,166241,166242,166244,166246,166248,166251,166253],{"class":70,"line":2915},[68,166243,32892],{"class":92},[68,166245,165892],{"class":85},[68,166247,64262],{"class":872},[68,166249,166250],{"class":85},"], student[",[68,166252,152792],{"class":872},[68,166254,6256],{"class":85},[19,166256,166257],{},"统计平均分：",[58,166259,166261],{"className":31971,"code":166260,"language":31973,"meta":63,"style":63},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[65,166262,166263,166271,166275,166285,166297,166301,166316],{"__ignoreMap":63},[68,166264,166265,166267,166269],{"class":70,"line":71},[68,166266,158580],{"class":85},[68,166268,869],{"class":102},[68,166270,48926],{"class":92},[68,166272,166273],{"class":70,"line":78},[68,166274,4000],{"emptyLinePlaceholder":1679},[68,166276,166277,166279,166281,166283],{"class":70,"line":89},[68,166278,4624],{"class":102},[68,166280,153457],{"class":85},[68,166282,27637],{"class":102},[68,166284,153462],{"class":85},[68,166286,166287,166289,166291,166293,166295],{"class":70,"line":115},[68,166288,160627],{"class":85},[68,166290,11075],{"class":102},[68,166292,153469],{"class":85},[68,166294,152792],{"class":872},[68,166296,34839],{"class":85},[68,166298,166299],{"class":70,"line":280},[68,166300,4000],{"emptyLinePlaceholder":1679},[68,166302,166303,166305,166307,166309,166311,166313],{"class":70,"line":301},[68,166304,165094],{"class":85},[68,166306,869],{"class":102},[68,166308,165099],{"class":85},[68,166310,2320],{"class":102},[68,166312,8930],{"class":92},[68,166314,166315],{"class":85},"(students)\n",[68,166317,166318,166320,166322,166324,166326,166328,166330,166332,166334,166336],{"class":70,"line":320},[68,166319,32008],{"class":92},[68,166321,997],{"class":85},[68,166323,1801],{"class":102},[68,166325,165117],{"class":872},[68,166327,2632],{"class":92},[68,166329,165122],{"class":85},[68,166331,158479],{"class":102},[68,166333,2681],{"class":92},[68,166335,1987],{"class":872},[68,166337,1757],{"class":85},[19,166339,166340],{},"查找学生：",[58,166342,166344],{"className":31971,"code":166343,"language":31973,"meta":63,"style":63},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[65,166345,166346,166361,166365,166375,166389,166395,166399,166405],{"__ignoreMap":63},[68,166347,166348,166350,166352,166354,166356,166359],{"class":70,"line":71},[68,166349,113151],{"class":85},[68,166351,869],{"class":102},[68,166353,62189],{"class":92},[68,166355,997],{"class":85},[68,166357,166358],{"class":872},"\"请输入学生姓名:\"",[68,166360,1757],{"class":85},[68,166362,166363],{"class":70,"line":78},[68,166364,4000],{"emptyLinePlaceholder":1679},[68,166366,166367,166369,166371,166373],{"class":70,"line":89},[68,166368,4624],{"class":102},[68,166370,153457],{"class":85},[68,166372,27637],{"class":102},[68,166374,153462],{"class":85},[68,166376,166377,166379,166381,166383,166385,166387],{"class":70,"line":115},[68,166378,4700],{"class":102},[68,166380,153469],{"class":85},[68,166382,64262],{"class":872},[68,166384,6042],{"class":85},[68,166386,4548],{"class":102},[68,166388,161752],{"class":85},[68,166390,166391,166393],{"class":70,"line":280},[68,166392,34044],{"class":92},[68,166394,151362],{"class":85},[68,166396,166397],{"class":70,"line":301},[68,166398,33220],{"class":102},[68,166400,166401,166403],{"class":70,"line":320},[68,166402,3303],{"class":102},[68,166404,5338],{"class":85},[68,166406,166407,166409,166411,166414],{"class":70,"line":2915},[68,166408,32892],{"class":92},[68,166410,997],{"class":85},[68,166412,166413],{"class":872},"\"没有找到\"",[68,166415,1757],{"class":85},[14,166417,166419],{"id":166418},"_613-容器通用操作","6.13 容器通用操作",[19,166421,166422],{},"长度：",[58,166424,166426],{"className":31971,"code":166425,"language":31973,"meta":63,"style":63},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[65,166427,166428,166447,166457],{"__ignoreMap":63},[68,166429,166430,166432,166435,166437,166439,166441,166443,166445],{"class":70,"line":71},[68,166431,8957],{"class":92},[68,166433,166434],{"class":85},"([",[68,166436,99],{"class":92},[68,166438,1002],{"class":85},[68,166440,267],{"class":92},[68,166442,1002],{"class":85},[68,166444,288],{"class":92},[68,166446,6256],{"class":85},[68,166448,166449,166451,166453,166455],{"class":70,"line":78},[68,166450,8957],{"class":92},[68,166452,997],{"class":85},[68,166454,157200],{"class":872},[68,166456,1757],{"class":85},[68,166458,166459,166461,166464,166466,166468,166470],{"class":70,"line":89},[68,166460,8957],{"class":92},[68,166462,166463],{"class":85},"({",[68,166465,64262],{"class":872},[68,166467,96],{"class":85},[68,166469,151208],{"class":872},[68,166471,166472],{"class":85},"})\n",[19,166474,166475],{},"最大最小：",[58,166477,166479],{"className":31971,"code":166478,"language":31973,"meta":63,"style":63},"max([1, 2, 3])\nmin([1, 2, 3])\n",[65,166480,166481,166499],{"__ignoreMap":63},[68,166482,166483,166485,166487,166489,166491,166493,166495,166497],{"class":70,"line":71},[68,166484,7614],{"class":92},[68,166486,166434],{"class":85},[68,166488,99],{"class":92},[68,166490,1002],{"class":85},[68,166492,267],{"class":92},[68,166494,1002],{"class":85},[68,166496,288],{"class":92},[68,166498,6256],{"class":85},[68,166500,166501,166504,166506,166508,166510,166512,166514,166516],{"class":70,"line":78},[68,166502,166503],{"class":92},"min",[68,166505,166434],{"class":85},[68,166507,99],{"class":92},[68,166509,1002],{"class":85},[68,166511,267],{"class":92},[68,166513,1002],{"class":85},[68,166515,288],{"class":92},[68,166517,6256],{"class":85},[19,166519,166520],{},"求和：",[58,166522,166524],{"className":31971,"code":166523,"language":31973,"meta":63,"style":63},"sum([1, 2, 3])\n",[65,166525,166526],{"__ignoreMap":63},[68,166527,166528,166531,166533,166535,166537,166539,166541,166543],{"class":70,"line":71},[68,166529,166530],{"class":92},"sum",[68,166532,166434],{"class":85},[68,166534,99],{"class":92},[68,166536,1002],{"class":85},[68,166538,267],{"class":92},[68,166540,1002],{"class":85},[68,166542,288],{"class":92},[68,166544,6256],{"class":85},[19,166546,164791],{},[58,166548,166550],{"className":31971,"code":166549,"language":31973,"meta":63,"style":63},"sorted([3, 1, 2])\n",[65,166551,166552],{"__ignoreMap":63},[68,166553,166554,166557,166559,166561,166563,166565,166567,166569],{"class":70,"line":71},[68,166555,166556],{"class":92},"sorted",[68,166558,166434],{"class":85},[68,166560,288],{"class":92},[68,166562,1002],{"class":85},[68,166564,99],{"class":92},[68,166566,1002],{"class":85},[68,166568,267],{"class":92},[68,166570,6256],{"class":85},[19,166572,166573],{},"类型转换：",[58,166575,166577],{"className":31971,"code":166576,"language":31973,"meta":63,"style":63},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[65,166578,166579,166589,166607],{"__ignoreMap":63},[68,166580,166581,166583,166585,166587],{"class":70,"line":71},[68,166582,155390],{"class":92},[68,166584,997],{"class":85},[68,166586,157200],{"class":872},[68,166588,1757],{"class":85},[68,166590,166591,166593,166595,166597,166599,166601,166603,166605],{"class":70,"line":78},[68,166592,156585],{"class":92},[68,166594,166434],{"class":85},[68,166596,99],{"class":92},[68,166598,1002],{"class":85},[68,166600,267],{"class":92},[68,166602,1002],{"class":85},[68,166604,288],{"class":92},[68,166606,6256],{"class":85},[68,166608,166609,166611,166613,166615,166617,166619,166621,166623,166625,166627],{"class":70,"line":89},[68,166610,156610],{"class":92},[68,166612,166434],{"class":85},[68,166614,99],{"class":92},[68,166616,1002],{"class":85},[68,166618,99],{"class":92},[68,166620,1002],{"class":85},[68,166622,267],{"class":92},[68,166624,1002],{"class":85},[68,166626,288],{"class":92},[68,166628,6256],{"class":85},[19,166630,166631],{},"成员判断：",[58,166633,166635],{"className":31971,"code":166634,"language":31973,"meta":63,"style":63},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[65,166636,166637,166654,166678],{"__ignoreMap":63},[68,166638,166639,166641,166643,166646,166649,166652],{"class":70,"line":71},[68,166640,32008],{"class":92},[68,166642,997],{"class":85},[68,166644,166645],{"class":872},"\"a\"",[68,166647,166648],{"class":102}," in",[68,166650,166651],{"class":872}," \"abc\"",[68,166653,1757],{"class":85},[68,166655,166656,166658,166660,166662,166664,166666,166668,166670,166672,166674,166676],{"class":70,"line":78},[68,166657,32008],{"class":92},[68,166659,997],{"class":85},[68,166661,99],{"class":92},[68,166663,166648],{"class":102},[68,166665,53811],{"class":85},[68,166667,99],{"class":92},[68,166669,1002],{"class":85},[68,166671,267],{"class":92},[68,166673,1002],{"class":85},[68,166675,288],{"class":92},[68,166677,6256],{"class":85},[68,166679,166680,166682,166684,166686,166688,166690,166692,166694,166696],{"class":70,"line":89},[68,166681,32008],{"class":92},[68,166683,997],{"class":85},[68,166685,64262],{"class":872},[68,166687,166648],{"class":102},[68,166689,6047],{"class":85},[68,166691,64262],{"class":872},[68,166693,96],{"class":85},[68,166695,151208],{"class":872},[68,166697,166472],{"class":85},[14,166699,166701],{"id":166700},"_614-推导式","6.14 推导式",[19,166703,166704],{},"推导式用于快速生成容器。",[19,166706,166707],{},"列表推导式：",[58,166709,166711],{"className":31971,"code":166710,"language":31973,"meta":63,"style":63},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[65,166712,166713,166740],{"__ignoreMap":63},[68,166714,166715,166717,166719,166722,166724,166726,166728,166730,166732,166734,166736,166738],{"class":70,"line":71},[68,166716,165420],{"class":85},[68,166718,869],{"class":102},[68,166720,166721],{"class":85}," [i ",[68,166723,4624],{"class":102},[68,166725,11036],{"class":85},[68,166727,27637],{"class":102},[68,166729,34036],{"class":92},[68,166731,997],{"class":85},[68,166733,99],{"class":92},[68,166735,1002],{"class":85},[68,166737,2080],{"class":92},[68,166739,98875],{"class":85},[68,166741,166742,166744],{"class":70,"line":78},[68,166743,32008],{"class":92},[68,166745,165636],{"class":85},[19,166747,166748],{},"带条件：",[58,166750,166752],{"className":31971,"code":166751,"language":31973,"meta":63,"style":63},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[65,166753,166754,166795],{"__ignoreMap":63},[68,166755,166756,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777,166779,166781,166783,166785,166787,166789,166791,166793],{"class":70,"line":71},[68,166757,166758],{"class":85},"even_nums ",[68,166760,869],{"class":102},[68,166762,166721],{"class":85},[68,166764,4624],{"class":102},[68,166766,11036],{"class":85},[68,166768,27637],{"class":102},[68,166770,34036],{"class":92},[68,166772,997],{"class":85},[68,166774,99],{"class":92},[68,166776,1002],{"class":85},[68,166778,2073],{"class":92},[68,166780,15311],{"class":85},[68,166782,3134],{"class":102},[68,166784,11036],{"class":85},[68,166786,2064],{"class":102},[68,166788,984],{"class":92},[68,166790,103133],{"class":102},[68,166792,5692],{"class":92},[68,166794,34839],{"class":85},[68,166796,166797,166799],{"class":70,"line":78},[68,166798,32008],{"class":92},[68,166800,166801],{"class":85},"(even_nums)\n",[19,166803,166804],{},"字典推导式：",[58,166806,166808],{"className":31971,"code":166807,"language":31973,"meta":63,"style":63},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[65,166809,166810,166844],{"__ignoreMap":63},[68,166811,166812,166815,166817,166820,166822,166824,166827,166829,166831,166833,166835,166837,166839,166841],{"class":70,"line":71},[68,166813,166814],{"class":85},"squares ",[68,166816,869],{"class":102},[68,166818,166819],{"class":85}," {i: i ",[68,166821,12259],{"class":102},[68,166823,984],{"class":92},[68,166825,166826],{"class":102}," for",[68,166828,11036],{"class":85},[68,166830,27637],{"class":102},[68,166832,34036],{"class":92},[68,166834,997],{"class":85},[68,166836,99],{"class":92},[68,166838,1002],{"class":85},[68,166840,2080],{"class":92},[68,166842,166843],{"class":85},")}\n",[68,166845,166846,166848],{"class":70,"line":78},[68,166847,32008],{"class":92},[68,166849,166850],{"class":85},"(squares)\n",[19,166852,166853],{},"集合推导式：",[58,166855,166857],{"className":31971,"code":166856,"language":31973,"meta":63,"style":63},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[65,166858,166859,166880],{"__ignoreMap":63},[68,166860,166861,166864,166866,166869,166871,166873,166875,166878],{"class":70,"line":71},[68,166862,166863],{"class":85},"chars ",[68,166865,869],{"class":102},[68,166867,166868],{"class":85}," {ch ",[68,166870,4624],{"class":102},[68,166872,161012],{"class":85},[68,166874,27637],{"class":102},[68,166876,166877],{"class":872}," \"hello\"",[68,166879,118],{"class":85},[68,166881,166882,166884],{"class":70,"line":78},[68,166883,32008],{"class":92},[68,166885,166886],{"class":85},"(chars)\n",[19,166888,166889],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166891,166893],{"id":166892},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[58,166895,166897],{"className":31971,"code":166896,"language":31973,"meta":63,"style":63},"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",[65,166898,166899,166907,166927,166947,166967,166987,166991,166995,167003,167017,167026,167030,167040,167052,167056,167076,167085,167089,167105,167110,167114,167128,167132,167154,167190],{"__ignoreMap":63},[68,166900,166901,166903,166905],{"class":70,"line":71},[68,166902,161036],{"class":85},[68,166904,869],{"class":102},[68,166906,57031],{"class":85},[68,166908,166909,166911,166913,166915,166917,166919,166921,166923,166925],{"class":70,"line":78},[68,166910,149705],{"class":85},[68,166912,64262],{"class":872},[68,166914,96],{"class":85},[68,166916,151208],{"class":872},[68,166918,1002],{"class":85},[68,166920,152792],{"class":872},[68,166922,96],{"class":85},[68,166924,2724],{"class":92},[68,166926,6529],{"class":85},[68,166928,166929,166931,166933,166935,166937,166939,166941,166943,166945],{"class":70,"line":89},[68,166930,149705],{"class":85},[68,166932,64262],{"class":872},[68,166934,96],{"class":85},[68,166936,152256],{"class":872},[68,166938,1002],{"class":85},[68,166940,152792],{"class":872},[68,166942,96],{"class":85},[68,166944,2547],{"class":92},[68,166946,6529],{"class":85},[68,166948,166949,166951,166953,166955,166957,166959,166961,166963,166965],{"class":70,"line":115},[68,166950,149705],{"class":85},[68,166952,64262],{"class":872},[68,166954,96],{"class":85},[68,166956,161051],{"class":872},[68,166958,1002],{"class":85},[68,166960,152792],{"class":872},[68,166962,96],{"class":85},[68,166964,2142],{"class":92},[68,166966,6529],{"class":85},[68,166968,166969,166971,166973,166975,166977,166979,166981,166983,166985],{"class":70,"line":280},[68,166970,149705],{"class":85},[68,166972,64262],{"class":872},[68,166974,96],{"class":85},[68,166976,164630],{"class":872},[68,166978,1002],{"class":85},[68,166980,152792],{"class":872},[68,166982,96],{"class":85},[68,166984,2618],{"class":92},[68,166986,6529],{"class":85},[68,166988,166989],{"class":70,"line":301},[68,166990,34839],{"class":85},[68,166992,166993],{"class":70,"line":320},[68,166994,4000],{"emptyLinePlaceholder":1679},[68,166996,166997,166999,167001],{"class":70,"line":2915},[68,166998,158580],{"class":85},[68,167000,869],{"class":102},[68,167002,48926],{"class":92},[68,167004,167005,167008,167010,167013,167015],{"class":70,"line":2921},[68,167006,167007],{"class":85},"max_student ",[68,167009,869],{"class":102},[68,167011,167012],{"class":85}," students[",[68,167014,600],{"class":92},[68,167016,34839],{"class":85},[68,167018,167019,167022,167024],{"class":70,"line":2933},[68,167020,167021],{"class":85},"passed ",[68,167023,869],{"class":102},[68,167025,53423],{"class":85},[68,167027,167028],{"class":70,"line":3214},[68,167029,4000],{"emptyLinePlaceholder":1679},[68,167031,167032,167034,167036,167038],{"class":70,"line":3219},[68,167033,4624],{"class":102},[68,167035,153457],{"class":85},[68,167037,27637],{"class":102},[68,167039,153462],{"class":85},[68,167041,167042,167044,167046,167048,167050],{"class":70,"line":3225},[68,167043,160627],{"class":85},[68,167045,11075],{"class":102},[68,167047,153469],{"class":85},[68,167049,152792],{"class":872},[68,167051,34839],{"class":85},[68,167053,167054],{"class":70,"line":3230},[68,167055,4000],{"emptyLinePlaceholder":1679},[68,167057,167058,167060,167062,167064,167066,167068,167071,167073],{"class":70,"line":3244},[68,167059,4700],{"class":102},[68,167061,153469],{"class":85},[68,167063,152792],{"class":872},[68,167065,6042],{"class":85},[68,167067,2695],{"class":102},[68,167069,167070],{"class":85}," max_student[",[68,167072,152792],{"class":872},[68,167074,167075],{"class":85},"]:\n",[68,167077,167078,167081,167083],{"class":70,"line":3249},[68,167079,167080],{"class":85},"        max_student ",[68,167082,869],{"class":102},[68,167084,153485],{"class":85},[68,167086,167087],{"class":70,"line":3255},[68,167088,4000],{"emptyLinePlaceholder":1679},[68,167090,167091,167093,167095,167097,167099,167101,167103],{"class":70,"line":3276},[68,167092,4700],{"class":102},[68,167094,153469],{"class":85},[68,167096,152792],{"class":872},[68,167098,6042],{"class":85},[68,167100,3312],{"class":102},[68,167102,159157],{"class":92},[68,167104,5338],{"class":85},[68,167106,167107],{"class":70,"line":3281},[68,167108,167109],{"class":85},"        passed.append(student)\n",[68,167111,167112],{"class":70,"line":3295},[68,167113,4000],{"emptyLinePlaceholder":1679},[68,167115,167116,167118,167120,167122,167124,167126],{"class":70,"line":3300},[68,167117,165094],{"class":85},[68,167119,869],{"class":102},[68,167121,165099],{"class":85},[68,167123,2320],{"class":102},[68,167125,8930],{"class":92},[68,167127,166315],{"class":85},[68,167129,167130],{"class":70,"line":3329},[68,167131,4000],{"emptyLinePlaceholder":1679},[68,167133,167134,167136,167138,167140,167142,167144,167146,167148,167150,167152],{"class":70,"line":3334},[68,167135,32008],{"class":92},[68,167137,997],{"class":85},[68,167139,1801],{"class":102},[68,167141,165117],{"class":872},[68,167143,2632],{"class":92},[68,167145,165122],{"class":85},[68,167147,158479],{"class":102},[68,167149,2681],{"class":92},[68,167151,1987],{"class":872},[68,167153,1757],{"class":85},[68,167155,167156,167158,167160,167162,167165,167167,167170,167172,167174,167176,167178,167180,167182,167184,167186,167188],{"class":70,"line":3351},[68,167157,32008],{"class":92},[68,167159,997],{"class":85},[68,167161,1801],{"class":102},[68,167163,167164],{"class":872},"\"最高分学生:",[68,167166,2632],{"class":92},[68,167168,167169],{"class":85},"max_student[",[68,167171,154202],{"class":872},[68,167173,2675],{"class":85},[68,167175,2681],{"class":92},[68,167177,6047],{"class":92},[68,167179,167169],{"class":85},[68,167181,154240],{"class":872},[68,167183,2675],{"class":85},[68,167185,2681],{"class":92},[68,167187,1987],{"class":872},[68,167189,1757],{"class":85},[68,167191,167192,167194,167196,167198,167201,167204,167207,167209,167211],{"class":70,"line":3356},[68,167193,32008],{"class":92},[68,167195,997],{"class":85},[68,167197,1801],{"class":102},[68,167199,167200],{"class":872},"\"及格人数:",[68,167202,167203],{"class":92},"{len",[68,167205,167206],{"class":85},"(passed)",[68,167208,2681],{"class":92},[68,167210,1987],{"class":872},[68,167212,1757],{"class":85},[14,167214,167216],{"id":167215},"_616-易错点","6.16 易错点",[48,167218,167219,167222,167225,167228,167234,167243],{},[51,167220,167221],{},"列表可变，元组和字符串不可变。",[51,167223,167224],{},"切片结束位置不包含。",[51,167226,167227],{},"字典通过 key 取值，不是通过索引。",[51,167229,167230,167231,29978],{},"空集合要用 ",[65,167232,167233],{},"set()",[51,167235,105939,167236,167239,167240,29978],{},[65,167237,167238],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[65,167241,167242],{},"get()",[51,167244,167245],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167247,167249],{"id":167248},"_617-本章练习","6.17 本章练习",[48,167251,167252,167255,167258,167261,167264],{},[51,167253,167254],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[51,167256,167257],{},"输入一句话，统计每个字符出现次数。",[51,167259,167260],{},"使用集合去除列表中的重复元素。",[51,167262,167263],{},"使用字典保存一个学生的信息，并实现修改成绩。",[51,167265,167266],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1652,167268,167269],{},"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":63,"searchDepth":78,"depth":78,"links":167271},[167272,167273,167274,167275,167276,167277,167278,167279,167280,167281,167282,167283,167284,167285,167286,167287,167288],{"id":164252,"depth":78,"text":164253},{"id":164369,"depth":78,"text":164370},{"id":164459,"depth":78,"text":164460},{"id":164583,"depth":78,"text":164584},{"id":164946,"depth":78,"text":164947},{"id":165133,"depth":78,"text":165134},{"id":165252,"depth":78,"text":165253},{"id":165394,"depth":78,"text":165395},{"id":165581,"depth":78,"text":165582},{"id":165825,"depth":78,"text":165826},{"id":166035,"depth":78,"text":166036},{"id":166120,"depth":78,"text":166121},{"id":166418,"depth":78,"text":166419},{"id":166700,"depth":78,"text":166701},{"id":166892,"depth":78,"text":166893},{"id":167215,"depth":78,"text":167216},{"id":167248,"depth":78,"text":167249},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164244,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167295,"title":167296,"body":167297,"description":1676,"extension":1677,"meta":169469,"navigation":1679,"path":169470,"seo":169471,"stem":169472,"__hash__":169473},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167298,"toc":169444},[167299,167302,167306,167309,167389,167392,167413,167416,167420,167423,167485,167488,167505,167509,167512,167557,167559,167567,167571,167574,167656,167659,167662,167687,167690,167713,167717,167720,167722,167784,167787,167789,167840,167844,167848,167854,167959,167963,167969,168040,168044,168047,168115,168118,168198,168202,168208,168244,168247,168250,168360,168366,168370,168373,168445,168448,168452,168456,168461,168523,168527,168532,168600,168604,168609,168725,168729,168732,168812,168815,168819,168822,168926,168928,168943,168946,168950,169088,169096,169100,169102,169113,169115,169373,169377,169409,169413,169441],[10,167300,167296],{"id":167301},"_7-函数进阶",[14,167303,167305],{"id":167304},"_71-多返回值","7.1 多返回值",[19,167307,167308],{},"Python 函数可以返回多个值，本质上返回的是元组。",[58,167310,167312],{"className":31971,"code":167311,"language":31973,"meta":63,"style":63},"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",[65,167313,167314,167323,167331,167339,167348,167355,167359,167363,167372,167378],{"__ignoreMap":63},[68,167315,167316,167318,167321],{"class":70,"line":71},[68,167317,33540],{"class":102},[68,167319,167320],{"class":587}," get_info",[68,167322,33546],{"class":85},[68,167324,167325,167327,167329],{"class":70,"line":78},[68,167326,153690],{"class":85},[68,167328,869],{"class":102},[68,167330,150673],{"class":872},[68,167332,167333,167335,167337],{"class":70,"line":89},[68,167334,153706],{"class":85},[68,167336,869],{"class":102},[68,167338,147871],{"class":92},[68,167340,167341,167343,167345],{"class":70,"line":115},[68,167342,153721],{"class":85},[68,167344,869],{"class":102},[68,167346,167347],{"class":92}," 95\n",[68,167349,167350,167352],{"class":70,"line":280},[68,167351,5689],{"class":102},[68,167353,167354],{"class":85}," name, age, score\n",[68,167356,167357],{"class":70,"line":301},[68,167358,4000],{"emptyLinePlaceholder":1679},[68,167360,167361],{"class":70,"line":320},[68,167362,4000],{"emptyLinePlaceholder":1679},[68,167364,167365,167367,167369],{"class":70,"line":2915},[68,167366,162626],{"class":85},[68,167368,869],{"class":102},[68,167370,167371],{"class":85}," get_info()\n",[68,167373,167374,167376],{"class":70,"line":2921},[68,167375,32008],{"class":92},[68,167377,78163],{"class":85},[68,167379,167380,167382,167384,167386],{"class":70,"line":2933},[68,167381,32008],{"class":92},[68,167383,997],{"class":85},[68,167385,104680],{"class":92},[68,167387,167388],{"class":85},"(result))\n",[19,167390,167391],{},"可以直接解包：",[58,167393,167395],{"className":31971,"code":167394,"language":31973,"meta":63,"style":63},"name, age, score = get_info()\nprint(name, age, score)\n",[65,167396,167397,167406],{"__ignoreMap":63},[68,167398,167399,167402,167404],{"class":70,"line":71},[68,167400,167401],{"class":85},"name, age, score ",[68,167403,869],{"class":102},[68,167405,167371],{"class":85},[68,167407,167408,167410],{"class":70,"line":78},[68,167409,32008],{"class":92},[68,167411,167412],{"class":85},"(name, age, score)\n",[19,167414,167415],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167417,167419],{"id":167418},"_72-位置参数","7.2 位置参数",[19,167421,167422],{},"位置参数按顺序传递。",[58,167424,167426],{"className":31971,"code":167425,"language":31973,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[65,167427,167428,167436,167464,167468,167472],{"__ignoreMap":63},[68,167429,167430,167432,167434],{"class":70,"line":71},[68,167431,33540],{"class":102},[68,167433,150692],{"class":587},[68,167435,150695],{"class":85},[68,167437,167438,167440,167442,167444,167446,167448,167450,167452,167454,167456,167458,167460,167462],{"class":70,"line":78},[68,167439,32892],{"class":92},[68,167441,997],{"class":85},[68,167443,1801],{"class":102},[68,167445,150706],{"class":872},[68,167447,2632],{"class":92},[68,167449,81387],{"class":85},[68,167451,2681],{"class":92},[68,167453,150715],{"class":872},[68,167455,2632],{"class":92},[68,167457,71803],{"class":85},[68,167459,2681],{"class":92},[68,167461,150724],{"class":872},[68,167463,1757],{"class":85},[68,167465,167466],{"class":70,"line":89},[68,167467,4000],{"emptyLinePlaceholder":1679},[68,167469,167470],{"class":70,"line":115},[68,167471,4000],{"emptyLinePlaceholder":1679},[68,167473,167474,167477,167479,167481,167483],{"class":70,"line":280},[68,167475,167476],{"class":85},"introduce(",[68,167478,151208],{"class":872},[68,167480,1002],{"class":85},[68,167482,2386],{"class":92},[68,167484,1757],{"class":85},[19,167486,167487],{},"顺序错了就会得到错误含义：",[58,167489,167491],{"className":31971,"code":167490,"language":31973,"meta":63,"style":63},"introduce(18, \"小明\")\n",[65,167492,167493],{"__ignoreMap":63},[68,167494,167495,167497,167499,167501,167503],{"class":70,"line":71},[68,167496,167476],{"class":85},[68,167498,2386],{"class":92},[68,167500,1002],{"class":85},[68,167502,151208],{"class":872},[68,167504,1757],{"class":85},[14,167506,167508],{"id":167507},"_73-关键字参数","7.3 关键字参数",[19,167510,167511],{},"关键字参数按参数名传递。",[58,167513,167515],{"className":31971,"code":167514,"language":31973,"meta":63,"style":63},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[65,167516,167517,167537],{"__ignoreMap":63},[68,167518,167519,167521,167523,167525,167527,167529,167531,167533,167535],{"class":70,"line":71},[68,167520,167476],{"class":85},[68,167522,81387],{"class":6815},[68,167524,869],{"class":102},[68,167526,151208],{"class":872},[68,167528,1002],{"class":85},[68,167530,71803],{"class":6815},[68,167532,869],{"class":102},[68,167534,2386],{"class":92},[68,167536,1757],{"class":85},[68,167538,167539,167541,167543,167545,167547,167549,167551,167553,167555],{"class":70,"line":78},[68,167540,167476],{"class":85},[68,167542,71803],{"class":6815},[68,167544,869],{"class":102},[68,167546,2386],{"class":92},[68,167548,1002],{"class":85},[68,167550,81387],{"class":6815},[68,167552,869],{"class":102},[68,167554,151208],{"class":872},[68,167556,1757],{"class":85},[19,167558,119507],{},[48,167560,167561,167564],{},[51,167562,167563],{},"顺序不容易错。",[51,167565,167566],{},"调用时可读性更强。",[14,167568,167570],{"id":167569},"_74-默认参数","7.4 默认参数",[19,167572,167573],{},"默认参数给参数设置默认值。",[58,167575,167577],{"className":31971,"code":167576,"language":31973,"meta":63,"style":63},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[65,167578,167579,167595,167625,167629,167633,167643],{"__ignoreMap":63},[68,167580,167581,167583,167585,167588,167590,167593],{"class":70,"line":71},[68,167582,33540],{"class":102},[68,167584,123666],{"class":587},[68,167586,167587],{"class":85},"(host, port",[68,167589,869],{"class":102},[68,167591,167592],{"class":92},"3306",[68,167594,32379],{"class":85},[68,167596,167597,167599,167601,167603,167606,167608,167610,167612,167614,167616,167619,167621,167623],{"class":70,"line":78},[68,167598,32892],{"class":92},[68,167600,997],{"class":85},[68,167602,1801],{"class":102},[68,167604,167605],{"class":872},"\"连接",[68,167607,2632],{"class":92},[68,167609,28989],{"class":85},[68,167611,2681],{"class":92},[68,167613,2595],{"class":872},[68,167615,2632],{"class":92},[68,167617,167618],{"class":85},"port",[68,167620,2681],{"class":92},[68,167622,1987],{"class":872},[68,167624,1757],{"class":85},[68,167626,167627],{"class":70,"line":89},[68,167628,4000],{"emptyLinePlaceholder":1679},[68,167630,167631],{"class":70,"line":115},[68,167632,4000],{"emptyLinePlaceholder":1679},[68,167634,167635,167638,167641],{"class":70,"line":280},[68,167636,167637],{"class":85},"connect(",[68,167639,167640],{"class":872},"\"localhost\"",[68,167642,1757],{"class":85},[68,167644,167645,167647,167649,167651,167654],{"class":70,"line":301},[68,167646,167637],{"class":85},[68,167648,167640],{"class":872},[68,167650,1002],{"class":85},[68,167652,167653],{"class":92},"6379",[68,167655,1757],{"class":85},[19,167657,167658],{},"注意：默认参数必须放在非默认参数后面。",[19,167660,167661],{},"错误：",[58,167663,167665],{"className":31971,"code":167664,"language":31973,"meta":63,"style":63},"def connect(port=3306, host):\n    pass\n",[65,167666,167667,167683],{"__ignoreMap":63},[68,167668,167669,167671,167673,167676,167678,167680],{"class":70,"line":71},[68,167670,33540],{"class":102},[68,167672,123666],{"class":587},[68,167674,167675],{"class":85},"(port",[68,167677,869],{"class":102},[68,167679,167592],{"class":92},[68,167681,167682],{"class":85},", host):\n",[68,167684,167685],{"class":70,"line":78},[68,167686,150857],{"class":102},[19,167688,167689],{},"正确：",[58,167691,167693],{"className":31971,"code":167692,"language":31973,"meta":63,"style":63},"def connect(host, port=3306):\n    pass\n",[65,167694,167695,167709],{"__ignoreMap":63},[68,167696,167697,167699,167701,167703,167705,167707],{"class":70,"line":71},[68,167698,33540],{"class":102},[68,167700,123666],{"class":587},[68,167702,167587],{"class":85},[68,167704,869],{"class":102},[68,167706,167592],{"class":92},[68,167708,32379],{"class":85},[68,167710,167711],{"class":70,"line":78},[68,167712,150857],{"class":102},[14,167714,167716],{"id":167715},"_75-默认参数的坑","7.5 默认参数的坑",[19,167718,167719],{},"不要使用可变对象作为默认参数。",[19,167721,158943],{},[58,167723,167725],{"className":31971,"code":167724,"language":31973,"meta":63,"style":63},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[65,167726,167727,167742,167747,167754,167758,167762,167773],{"__ignoreMap":63},[68,167728,167729,167731,167734,167737,167739],{"class":70,"line":71},[68,167730,33540],{"class":102},[68,167732,167733],{"class":587}," add_item",[68,167735,167736],{"class":85},"(item, items",[68,167738,869],{"class":102},[68,167740,167741],{"class":85},"[]):\n",[68,167743,167744],{"class":70,"line":78},[68,167745,167746],{"class":85},"    items.append(item)\n",[68,167748,167749,167751],{"class":70,"line":89},[68,167750,5689],{"class":102},[68,167752,167753],{"class":85}," items\n",[68,167755,167756],{"class":70,"line":115},[68,167757,4000],{"emptyLinePlaceholder":1679},[68,167759,167760],{"class":70,"line":280},[68,167761,4000],{"emptyLinePlaceholder":1679},[68,167763,167764,167766,167769,167771],{"class":70,"line":301},[68,167765,32008],{"class":92},[68,167767,167768],{"class":85},"(add_item(",[68,167770,166645],{"class":872},[68,167772,32090],{"class":85},[68,167774,167775,167777,167779,167782],{"class":70,"line":320},[68,167776,32008],{"class":92},[68,167778,167768],{"class":85},[68,167780,167781],{"class":872},"\"b\"",[68,167783,32090],{"class":85},[19,167785,167786],{},"第二次调用会复用第一次的列表。",[19,167788,157208],{},[58,167790,167792],{"className":31971,"code":167791,"language":31973,"meta":63,"style":63},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[65,167793,167794,167808,167821,167830,167834],{"__ignoreMap":63},[68,167795,167796,167798,167800,167802,167804,167806],{"class":70,"line":71},[68,167797,33540],{"class":102},[68,167799,167733],{"class":587},[68,167801,167736],{"class":85},[68,167803,869],{"class":102},[68,167805,97261],{"class":92},[68,167807,32379],{"class":85},[68,167809,167810,167812,167815,167817,167819],{"class":70,"line":78},[68,167811,4700],{"class":102},[68,167813,167814],{"class":85}," items ",[68,167816,40520],{"class":102},[68,167818,40526],{"class":92},[68,167820,5338],{"class":85},[68,167822,167823,167826,167828],{"class":70,"line":89},[68,167824,167825],{"class":85},"        items ",[68,167827,869],{"class":102},[68,167829,53423],{"class":85},[68,167831,167832],{"class":70,"line":115},[68,167833,167746],{"class":85},[68,167835,167836,167838],{"class":70,"line":280},[68,167837,5689],{"class":102},[68,167839,167753],{"class":85},[14,167841,167843],{"id":167842},"_76-不定长参数","7.6 不定长参数",[43,167845,167847],{"id":167846},"_761-args","7.6.1 *args",[19,167849,167850,167853],{},[65,167851,167852],{},"*args"," 接收任意数量的位置参数，得到元组。",[58,167855,167857],{"className":31971,"code":167856,"language":31973,"meta":63,"style":63},"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",[65,167858,167859,167872,167880,167891,167900,167906,167910,167914,167933],{"__ignoreMap":63},[68,167860,167861,167863,167865,167867,167869],{"class":70,"line":71},[68,167862,33540],{"class":102},[68,167864,6808],{"class":587},[68,167866,997],{"class":85},[68,167868,2191],{"class":102},[68,167870,167871],{"class":85},"args):\n",[68,167873,167874,167876,167878],{"class":70,"line":78},[68,167875,160627],{"class":85},[68,167877,869],{"class":102},[68,167879,48926],{"class":92},[68,167881,167882,167884,167886,167888],{"class":70,"line":89},[68,167883,4800],{"class":102},[68,167885,157500],{"class":85},[68,167887,27637],{"class":102},[68,167889,167890],{"class":85}," args:\n",[68,167892,167893,167895,167897],{"class":70,"line":115},[68,167894,161302],{"class":85},[68,167896,11075],{"class":102},[68,167898,167899],{"class":85}," num\n",[68,167901,167902,167904],{"class":70,"line":280},[68,167903,5689],{"class":102},[68,167905,163607],{"class":85},[68,167907,167908],{"class":70,"line":301},[68,167909,4000],{"emptyLinePlaceholder":1679},[68,167911,167912],{"class":70,"line":320},[68,167913,4000],{"emptyLinePlaceholder":1679},[68,167915,167916,167918,167921,167923,167925,167927,167929,167931],{"class":70,"line":2915},[68,167917,32008],{"class":92},[68,167919,167920],{"class":85},"(add(",[68,167922,99],{"class":92},[68,167924,1002],{"class":85},[68,167926,267],{"class":92},[68,167928,1002],{"class":85},[68,167930,288],{"class":92},[68,167932,32090],{"class":85},[68,167934,167935,167937,167939,167941,167943,167945,167947,167949,167951,167953,167955,167957],{"class":70,"line":2921},[68,167936,32008],{"class":92},[68,167938,167920],{"class":85},[68,167940,99],{"class":92},[68,167942,1002],{"class":85},[68,167944,267],{"class":92},[68,167946,1002],{"class":85},[68,167948,288],{"class":92},[68,167950,1002],{"class":85},[68,167952,2029],{"class":92},[68,167954,1002],{"class":85},[68,167956,2055],{"class":92},[68,167958,32090],{"class":85},[43,167960,167962],{"id":167961},"_762-kwargs","7.6.2 **kwargs",[19,167964,167965,167968],{},[65,167966,167967],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[58,167970,167972],{"className":31971,"code":167971,"language":31973,"meta":63,"style":63},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[65,167973,167974,167987,167998,168004,168008,168012],{"__ignoreMap":63},[68,167975,167976,167978,167980,167982,167984],{"class":70,"line":71},[68,167977,33540],{"class":102},[68,167979,163265],{"class":587},[68,167981,997],{"class":85},[68,167983,12259],{"class":102},[68,167985,167986],{"class":85},"kwargs):\n",[68,167988,167989,167991,167993,167995],{"class":70,"line":78},[68,167990,4800],{"class":102},[68,167992,166105],{"class":85},[68,167994,27637],{"class":102},[68,167996,167997],{"class":85}," kwargs.items():\n",[68,167999,168000,168002],{"class":70,"line":89},[68,168001,34044],{"class":92},[68,168003,166117],{"class":85},[68,168005,168006],{"class":70,"line":115},[68,168007,4000],{"emptyLinePlaceholder":1679},[68,168009,168010],{"class":70,"line":280},[68,168011,4000],{"emptyLinePlaceholder":1679},[68,168013,168014,168016,168018,168020,168022,168024,168026,168028,168030,168032,168034,168036,168038],{"class":70,"line":301},[68,168015,163330],{"class":85},[68,168017,81387],{"class":6815},[68,168019,869],{"class":102},[68,168021,151208],{"class":872},[68,168023,1002],{"class":85},[68,168025,71803],{"class":6815},[68,168027,869],{"class":102},[68,168029,2386],{"class":92},[68,168031,1002],{"class":85},[68,168033,71854],{"class":6815},[68,168035,869],{"class":102},[68,168037,70851],{"class":872},[68,168039,1757],{"class":85},[14,168041,168043],{"id":168042},"_77-参数解包","7.7 参数解包",[19,168045,168046],{},"列表或元组解包为位置参数：",[58,168048,168050],{"className":31971,"code":168049,"language":31973,"meta":63,"style":63},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[65,168051,168052,168061,168076,168080,168084,168104],{"__ignoreMap":63},[68,168053,168054,168056,168058],{"class":70,"line":71},[68,168055,33540],{"class":102},[68,168057,6808],{"class":587},[68,168059,168060],{"class":85},"(a, b, c):\n",[68,168062,168063,168065,168067,168069,168071,168073],{"class":70,"line":78},[68,168064,5689],{"class":102},[68,168066,12467],{"class":85},[68,168068,2217],{"class":102},[68,168070,12480],{"class":85},[68,168072,2217],{"class":102},[68,168074,168075],{"class":85}," c\n",[68,168077,168078],{"class":70,"line":89},[68,168079,4000],{"emptyLinePlaceholder":1679},[68,168081,168082],{"class":70,"line":115},[68,168083,4000],{"emptyLinePlaceholder":1679},[68,168085,168086,168088,168090,168092,168094,168096,168098,168100,168102],{"class":70,"line":280},[68,168087,165420],{"class":85},[68,168089,869],{"class":102},[68,168091,53811],{"class":85},[68,168093,99],{"class":92},[68,168095,1002],{"class":85},[68,168097,267],{"class":92},[68,168099,1002],{"class":85},[68,168101,288],{"class":92},[68,168103,34839],{"class":85},[68,168105,168106,168108,168110,168112],{"class":70,"line":301},[68,168107,32008],{"class":92},[68,168109,167920],{"class":85},[68,168111,2191],{"class":102},[68,168113,168114],{"class":85},"nums))\n",[19,168116,168117],{},"字典解包为关键字参数：",[58,168119,168121],{"className":31971,"code":168120,"language":31973,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[65,168122,168123,168131,168157,168161,168165,168189],{"__ignoreMap":63},[68,168124,168125,168127,168129],{"class":70,"line":71},[68,168126,33540],{"class":102},[68,168128,150692],{"class":587},[68,168130,150695],{"class":85},[68,168132,168133,168135,168137,168139,168141,168143,168145,168147,168149,168151,168153,168155],{"class":70,"line":78},[68,168134,32892],{"class":92},[68,168136,997],{"class":85},[68,168138,1801],{"class":102},[68,168140,1987],{"class":872},[68,168142,2632],{"class":92},[68,168144,81387],{"class":85},[68,168146,2681],{"class":92},[68,168148,6047],{"class":92},[68,168150,71803],{"class":85},[68,168152,2681],{"class":92},[68,168154,1987],{"class":872},[68,168156,1757],{"class":85},[68,168158,168159],{"class":70,"line":89},[68,168160,4000],{"emptyLinePlaceholder":1679},[68,168162,168163],{"class":70,"line":115},[68,168164,4000],{"emptyLinePlaceholder":1679},[68,168166,168167,168169,168171,168173,168175,168177,168179,168181,168183,168185,168187],{"class":70,"line":280},[68,168168,117887],{"class":85},[68,168170,869],{"class":102},[68,168172,6047],{"class":85},[68,168174,64262],{"class":872},[68,168176,96],{"class":85},[68,168178,151208],{"class":872},[68,168180,1002],{"class":85},[68,168182,70706],{"class":872},[68,168184,96],{"class":85},[68,168186,2386],{"class":92},[68,168188,118],{"class":85},[68,168190,168191,168193,168195],{"class":70,"line":301},[68,168192,167476],{"class":85},[68,168194,12259],{"class":102},[68,168196,168197],{"class":85},"info)\n",[14,168199,168201],{"id":168200},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168203,168204,168207],{},[65,168205,168206],{},"lambda"," 用于定义简单匿名函数。",[58,168209,168211],{"className":31971,"code":168210,"language":31973,"meta":63,"style":63},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[65,168212,168213,168230],{"__ignoreMap":63},[68,168214,168215,168218,168220,168223,168226,168228],{"class":70,"line":71},[68,168216,168217],{"class":85},"add ",[68,168219,869],{"class":102},[68,168221,168222],{"class":102}," lambda",[68,168224,168225],{"class":85}," a, b: a ",[68,168227,2217],{"class":102},[68,168229,152424],{"class":85},[68,168231,168232,168234,168236,168238,168240,168242],{"class":70,"line":78},[68,168233,32008],{"class":92},[68,168235,167920],{"class":85},[68,168237,99],{"class":92},[68,168239,1002],{"class":85},[68,168241,267],{"class":92},[68,168243,32090],{"class":85},[19,168245,168246],{},"常和排序、过滤等函数一起使用。",[19,168248,168249],{},"按分数排序：",[58,168251,168253],{"className":31971,"code":168252,"language":31973,"meta":63,"style":63},"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",[65,168254,168255,168263,168283,168303,168323,168327,168331,168354],{"__ignoreMap":63},[68,168256,168257,168259,168261],{"class":70,"line":71},[68,168258,161036],{"class":85},[68,168260,869],{"class":102},[68,168262,57031],{"class":85},[68,168264,168265,168267,168269,168271,168273,168275,168277,168279,168281],{"class":70,"line":78},[68,168266,149705],{"class":85},[68,168268,64262],{"class":872},[68,168270,96],{"class":85},[68,168272,151208],{"class":872},[68,168274,1002],{"class":85},[68,168276,152792],{"class":872},[68,168278,96],{"class":85},[68,168280,2724],{"class":92},[68,168282,6529],{"class":85},[68,168284,168285,168287,168289,168291,168293,168295,168297,168299,168301],{"class":70,"line":89},[68,168286,149705],{"class":85},[68,168288,64262],{"class":872},[68,168290,96],{"class":85},[68,168292,152256],{"class":872},[68,168294,1002],{"class":85},[68,168296,152792],{"class":872},[68,168298,96],{"class":85},[68,168300,2547],{"class":92},[68,168302,6529],{"class":85},[68,168304,168305,168307,168309,168311,168313,168315,168317,168319,168321],{"class":70,"line":115},[68,168306,149705],{"class":85},[68,168308,64262],{"class":872},[68,168310,96],{"class":85},[68,168312,161051],{"class":872},[68,168314,1002],{"class":85},[68,168316,152792],{"class":872},[68,168318,96],{"class":85},[68,168320,2142],{"class":92},[68,168322,6529],{"class":85},[68,168324,168325],{"class":70,"line":280},[68,168326,34839],{"class":85},[68,168328,168329],{"class":70,"line":301},[68,168330,4000],{"emptyLinePlaceholder":1679},[68,168332,168333,168336,168338,168340,168342,168344,168346,168348,168350,168352],{"class":70,"line":320},[68,168334,168335],{"class":85},"students.sort(",[68,168337,155266],{"class":6815},[68,168339,155269],{"class":102},[68,168341,155272],{"class":85},[68,168343,152792],{"class":872},[68,168345,113775],{"class":85},[68,168347,164848],{"class":6815},[68,168349,869],{"class":102},[68,168351,33069],{"class":92},[68,168353,1757],{"class":85},[68,168355,168356,168358],{"class":70,"line":2915},[68,168357,32008],{"class":92},[68,168359,166315],{"class":85},[19,168361,168362,168363,168365],{},"如果逻辑复杂，不要硬写 ",[65,168364,168206],{},"，定义普通函数更清晰。",[14,168367,168369],{"id":168368},"_79-函数作为参数","7.9 函数作为参数",[19,168371,168372],{},"函数可以作为参数传给另一个函数。",[58,168374,168376],{"className":31971,"code":168375,"language":31973,"meta":63,"style":63},"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",[65,168377,168378,168386,168396,168400,168404,168414,168421,168425,168429],{"__ignoreMap":63},[68,168379,168380,168382,168384],{"class":70,"line":71},[68,168381,33540],{"class":102},[68,168383,6808],{"class":587},[68,168385,152413],{"class":85},[68,168387,168388,168390,168392,168394],{"class":70,"line":78},[68,168389,5689],{"class":102},[68,168391,12467],{"class":85},[68,168393,2217],{"class":102},[68,168395,152424],{"class":85},[68,168397,168398],{"class":70,"line":89},[68,168399,4000],{"emptyLinePlaceholder":1679},[68,168401,168402],{"class":70,"line":115},[68,168403,4000],{"emptyLinePlaceholder":1679},[68,168405,168406,168408,168411],{"class":70,"line":280},[68,168407,33540],{"class":102},[68,168409,168410],{"class":587}," calculate",[68,168412,168413],{"class":85},"(a, b, func):\n",[68,168415,168416,168418],{"class":70,"line":301},[68,168417,5689],{"class":102},[68,168419,168420],{"class":85}," func(a, b)\n",[68,168422,168423],{"class":70,"line":320},[68,168424,4000],{"emptyLinePlaceholder":1679},[68,168426,168427],{"class":70,"line":2915},[68,168428,4000],{"emptyLinePlaceholder":1679},[68,168430,168431,168433,168436,168438,168440,168442],{"class":70,"line":2921},[68,168432,32008],{"class":92},[68,168434,168435],{"class":85},"(calculate(",[68,168437,2182],{"class":92},[68,168439,1002],{"class":85},[68,168441,2436],{"class":92},[68,168443,168444],{"class":85},", add))\n",[19,168446,168447],{},"这种思想在排序、回调、框架中经常出现。",[14,168449,168451],{"id":168450},"_710-mapfiltersorted","7.10 map、filter、sorted",[43,168453,168455],{"id":168454},"_7101-map","7.10.1 map",[19,168457,168458,168460],{},[65,168459,75622],{}," 对每个元素执行函数。",[58,168462,168464],{"className":31971,"code":168463,"language":31973,"meta":63,"style":63},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[65,168465,168466,168490,168513],{"__ignoreMap":63},[68,168467,168468,168470,168472,168474,168476,168478,168480,168482,168484,168486,168488],{"class":70,"line":71},[68,168469,165420],{"class":85},[68,168471,869],{"class":102},[68,168473,53811],{"class":85},[68,168475,99],{"class":92},[68,168477,1002],{"class":85},[68,168479,267],{"class":92},[68,168481,1002],{"class":85},[68,168483,288],{"class":92},[68,168485,1002],{"class":85},[68,168487,2029],{"class":92},[68,168489,34839],{"class":85},[68,168491,168492,168494,168496,168499,168501,168503,168506,168508,168510],{"class":70,"line":78},[68,168493,162626],{"class":85},[68,168495,869],{"class":102},[68,168497,168498],{"class":92}," map",[68,168500,997],{"class":85},[68,168502,168206],{"class":102},[68,168504,168505],{"class":85}," x: x ",[68,168507,2191],{"class":102},[68,168509,984],{"class":92},[68,168511,168512],{"class":85},", nums)\n",[68,168514,168515,168517,168519,168521],{"class":70,"line":89},[68,168516,32008],{"class":92},[68,168518,997],{"class":85},[68,168520,155390],{"class":92},[68,168522,167388],{"class":85},[43,168524,168526],{"id":168525},"_7102-filter","7.10.2 filter",[19,168528,168529,168531],{},[65,168530,81628],{}," 保留满足条件的元素。",[58,168533,168535],{"className":31971,"code":168534,"language":31973,"meta":63,"style":63},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[65,168536,168537,168565,168590],{"__ignoreMap":63},[68,168538,168539,168541,168543,168545,168547,168549,168551,168553,168555,168557,168559,168561,168563],{"class":70,"line":71},[68,168540,165420],{"class":85},[68,168542,869],{"class":102},[68,168544,53811],{"class":85},[68,168546,99],{"class":92},[68,168548,1002],{"class":85},[68,168550,267],{"class":92},[68,168552,1002],{"class":85},[68,168554,288],{"class":92},[68,168556,1002],{"class":85},[68,168558,2029],{"class":92},[68,168560,1002],{"class":85},[68,168562,2055],{"class":92},[68,168564,34839],{"class":85},[68,168566,168567,168569,168571,168574,168576,168578,168580,168582,168584,168586,168588],{"class":70,"line":78},[68,168568,162626],{"class":85},[68,168570,869],{"class":102},[68,168572,168573],{"class":92}," filter",[68,168575,997],{"class":85},[68,168577,168206],{"class":102},[68,168579,168505],{"class":85},[68,168581,2064],{"class":102},[68,168583,984],{"class":92},[68,168585,103133],{"class":102},[68,168587,5692],{"class":92},[68,168589,168512],{"class":85},[68,168591,168592,168594,168596,168598],{"class":70,"line":89},[68,168593,32008],{"class":92},[68,168595,997],{"class":85},[68,168597,155390],{"class":92},[68,168599,167388],{"class":85},[43,168601,168603],{"id":168602},"_7103-sorted","7.10.3 sorted",[19,168605,168606,168608],{},[65,168607,166556],{}," 返回排序后的新列表。",[58,168610,168612],{"className":31971,"code":168611,"language":31973,"meta":63,"style":63},"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",[65,168613,168614,168622,168642,168662,168682,168686,168690,168719],{"__ignoreMap":63},[68,168615,168616,168618,168620],{"class":70,"line":71},[68,168617,161036],{"class":85},[68,168619,869],{"class":102},[68,168621,57031],{"class":85},[68,168623,168624,168626,168628,168630,168632,168634,168636,168638,168640],{"class":70,"line":78},[68,168625,149705],{"class":85},[68,168627,64262],{"class":872},[68,168629,96],{"class":85},[68,168631,151208],{"class":872},[68,168633,1002],{"class":85},[68,168635,152792],{"class":872},[68,168637,96],{"class":85},[68,168639,2724],{"class":92},[68,168641,6529],{"class":85},[68,168643,168644,168646,168648,168650,168652,168654,168656,168658,168660],{"class":70,"line":89},[68,168645,149705],{"class":85},[68,168647,64262],{"class":872},[68,168649,96],{"class":85},[68,168651,152256],{"class":872},[68,168653,1002],{"class":85},[68,168655,152792],{"class":872},[68,168657,96],{"class":85},[68,168659,2547],{"class":92},[68,168661,6529],{"class":85},[68,168663,168664,168666,168668,168670,168672,168674,168676,168678,168680],{"class":70,"line":115},[68,168665,149705],{"class":85},[68,168667,64262],{"class":872},[68,168669,96],{"class":85},[68,168671,161051],{"class":872},[68,168673,1002],{"class":85},[68,168675,152792],{"class":872},[68,168677,96],{"class":85},[68,168679,2142],{"class":92},[68,168681,6529],{"class":85},[68,168683,168684],{"class":70,"line":280},[68,168685,34839],{"class":85},[68,168687,168688],{"class":70,"line":301},[68,168689,4000],{"emptyLinePlaceholder":1679},[68,168691,168692,168694,168696,168698,168701,168703,168705,168707,168709,168711,168713,168715,168717],{"class":70,"line":320},[68,168693,162626],{"class":85},[68,168695,869],{"class":102},[68,168697,164924],{"class":92},[68,168699,168700],{"class":85},"(students, ",[68,168702,155266],{"class":6815},[68,168704,155269],{"class":102},[68,168706,155272],{"class":85},[68,168708,152792],{"class":872},[68,168710,113775],{"class":85},[68,168712,164848],{"class":6815},[68,168714,869],{"class":102},[68,168716,33069],{"class":92},[68,168718,1757],{"class":85},[68,168720,168721,168723],{"class":70,"line":2915},[68,168722,32008],{"class":92},[68,168724,78163],{"class":85},[14,168726,168728],{"id":168727},"_711-闭包入门","7.11 闭包入门",[19,168730,168731],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[58,168733,168735],{"className":31971,"code":168734,"language":31973,"meta":63,"style":63},"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",[65,168736,168737,168747,168757,168768,168772,168779,168783,168787,168801],{"__ignoreMap":63},[68,168738,168739,168741,168744],{"class":70,"line":71},[68,168740,33540],{"class":102},[68,168742,168743],{"class":587}," outer",[68,168745,168746],{"class":85},"(base):\n",[68,168748,168749,168751,168754],{"class":70,"line":78},[68,168750,32394],{"class":102},[68,168752,168753],{"class":587}," inner",[68,168755,168756],{"class":85},"(num):\n",[68,168758,168759,168761,168764,168766],{"class":70,"line":89},[68,168760,16349],{"class":102},[68,168762,168763],{"class":85}," base ",[68,168765,2217],{"class":102},[68,168767,167899],{"class":85},[68,168769,168770],{"class":70,"line":115},[68,168771,4000],{"emptyLinePlaceholder":1679},[68,168773,168774,168776],{"class":70,"line":280},[68,168775,5689],{"class":102},[68,168777,168778],{"class":85}," inner\n",[68,168780,168781],{"class":70,"line":301},[68,168782,4000],{"emptyLinePlaceholder":1679},[68,168784,168785],{"class":70,"line":320},[68,168786,4000],{"emptyLinePlaceholder":1679},[68,168788,168789,168792,168794,168797,168799],{"class":70,"line":2915},[68,168790,168791],{"class":85},"add_10 ",[68,168793,869],{"class":102},[68,168795,168796],{"class":85}," outer(",[68,168798,2182],{"class":92},[68,168800,1757],{"class":85},[68,168802,168803,168805,168808,168810],{"class":70,"line":2921},[68,168804,32008],{"class":92},[68,168806,168807],{"class":85},"(add_10(",[68,168809,2055],{"class":92},[68,168811,32090],{"class":85},[19,168813,168814],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168816,168818],{"id":168817},"_712-装饰器入门","7.12 装饰器入门",[19,168820,168821],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[58,168823,168825],{"className":31971,"code":168824,"language":31973,"meta":63,"style":63},"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",[65,168826,168827,168836,168845,168856,168861,168872,168876,168883,168887,168891,168896,168904,168914,168918,168922],{"__ignoreMap":63},[68,168828,168829,168831,168833],{"class":70,"line":71},[68,168830,33540],{"class":102},[68,168832,88767],{"class":587},[68,168834,168835],{"class":85},"(func):\n",[68,168837,168838,168840,168843],{"class":70,"line":78},[68,168839,32394],{"class":102},[68,168841,168842],{"class":587}," wrapper",[68,168844,33546],{"class":85},[68,168846,168847,168849,168851,168854],{"class":70,"line":89},[68,168848,34044],{"class":92},[68,168850,997],{"class":85},[68,168852,168853],{"class":872},"\"函数开始执行\"",[68,168855,1757],{"class":85},[68,168857,168858],{"class":70,"line":115},[68,168859,168860],{"class":85},"        func()\n",[68,168862,168863,168865,168867,168870],{"class":70,"line":280},[68,168864,34044],{"class":92},[68,168866,997],{"class":85},[68,168868,168869],{"class":872},"\"函数执行结束\"",[68,168871,1757],{"class":85},[68,168873,168874],{"class":70,"line":301},[68,168875,4000],{"emptyLinePlaceholder":1679},[68,168877,168878,168880],{"class":70,"line":320},[68,168879,5689],{"class":102},[68,168881,168882],{"class":85}," wrapper\n",[68,168884,168885],{"class":70,"line":2915},[68,168886,4000],{"emptyLinePlaceholder":1679},[68,168888,168889],{"class":70,"line":2921},[68,168890,4000],{"emptyLinePlaceholder":1679},[68,168892,168893],{"class":70,"line":2933},[68,168894,168895],{"class":587},"@log\n",[68,168897,168898,168900,168902],{"class":70,"line":3214},[68,168899,33540],{"class":102},[68,168901,162316],{"class":587},[68,168903,33546],{"class":85},[68,168905,168906,168908,168910,168912],{"class":70,"line":3219},[68,168907,32892],{"class":92},[68,168909,997],{"class":85},[68,168911,7443],{"class":872},[68,168913,1757],{"class":85},[68,168915,168916],{"class":70,"line":3225},[68,168917,4000],{"emptyLinePlaceholder":1679},[68,168919,168920],{"class":70,"line":3230},[68,168921,4000],{"emptyLinePlaceholder":1679},[68,168923,168924],{"class":70,"line":3244},[68,168925,162351],{"class":85},[19,168927,159594],{},[58,168929,168931],{"className":31971,"code":168930,"language":31973,"meta":63,"style":63},"say_hello = log(say_hello)\n",[65,168932,168933],{"__ignoreMap":63},[68,168934,168935,168938,168940],{"class":70,"line":71},[68,168936,168937],{"class":85},"say_hello ",[68,168939,869],{"class":102},[68,168941,168942],{"class":85}," log(say_hello)\n",[19,168944,168945],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168947,168949],{"id":168948},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[58,168951,168953],{"className":31971,"code":168952,"language":31973,"meta":63,"style":63},"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",[65,168954,168955,168963,168980,168990,169009,169019,169026,169030,169036,169040,169044,169048,169056,169066,169070,169074],{"__ignoreMap":63},[68,168956,168957,168959,168961],{"class":70,"line":71},[68,168958,33540],{"class":102},[68,168960,88767],{"class":587},[68,168962,168835],{"class":85},[68,168964,168965,168967,168969,168971,168973,168976,168978],{"class":70,"line":78},[68,168966,32394],{"class":102},[68,168968,168842],{"class":587},[68,168970,997],{"class":85},[68,168972,2191],{"class":102},[68,168974,168975],{"class":85},"args, ",[68,168977,12259],{"class":102},[68,168979,167986],{"class":85},[68,168981,168982,168984,168986,168988],{"class":70,"line":89},[68,168983,34044],{"class":92},[68,168985,997],{"class":85},[68,168987,168853],{"class":872},[68,168989,1757],{"class":85},[68,168991,168992,168995,168997,169000,169002,169004,169006],{"class":70,"line":115},[68,168993,168994],{"class":85},"        result ",[68,168996,869],{"class":102},[68,168998,168999],{"class":85}," func(",[68,169001,2191],{"class":102},[68,169003,168975],{"class":85},[68,169005,12259],{"class":102},[68,169007,169008],{"class":85},"kwargs)\n",[68,169010,169011,169013,169015,169017],{"class":70,"line":280},[68,169012,34044],{"class":92},[68,169014,997],{"class":85},[68,169016,168869],{"class":872},[68,169018,1757],{"class":85},[68,169020,169021,169023],{"class":70,"line":301},[68,169022,16349],{"class":102},[68,169024,169025],{"class":85}," result\n",[68,169027,169028],{"class":70,"line":320},[68,169029,4000],{"emptyLinePlaceholder":1679},[68,169031,169032,169034],{"class":70,"line":2915},[68,169033,5689],{"class":102},[68,169035,168882],{"class":85},[68,169037,169038],{"class":70,"line":2921},[68,169039,4000],{"emptyLinePlaceholder":1679},[68,169041,169042],{"class":70,"line":2933},[68,169043,4000],{"emptyLinePlaceholder":1679},[68,169045,169046],{"class":70,"line":3214},[68,169047,168895],{"class":587},[68,169049,169050,169052,169054],{"class":70,"line":3219},[68,169051,33540],{"class":102},[68,169053,6808],{"class":587},[68,169055,152413],{"class":85},[68,169057,169058,169060,169062,169064],{"class":70,"line":3225},[68,169059,5689],{"class":102},[68,169061,12467],{"class":85},[68,169063,2217],{"class":102},[68,169065,152424],{"class":85},[68,169067,169068],{"class":70,"line":3230},[68,169069,4000],{"emptyLinePlaceholder":1679},[68,169071,169072],{"class":70,"line":3244},[68,169073,4000],{"emptyLinePlaceholder":1679},[68,169075,169076,169078,169080,169082,169084,169086],{"class":70,"line":3249},[68,169077,32008],{"class":92},[68,169079,167920],{"class":85},[68,169081,2182],{"class":92},[68,169083,1002],{"class":85},[68,169085,2436],{"class":92},[68,169087,32090],{"class":85},[19,169089,169090,169091,102592,169093,169095],{},"这个写法使用 ",[65,169092,167852],{},[65,169094,167967],{}," 接收原函数的所有参数。",[14,169097,169099],{"id":169098},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169101,124865],{},[48,169103,169104,169107,169110],{},[51,169105,169106],{},"给定一组学生数据。",[51,169108,169109],{},"封装函数，根据传入规则筛选学生。",[51,169111,169112],{},"筛选及格、优秀、未成年学生。",[19,169114,11633],{},[58,169116,169118],{"className":31971,"code":169117,"language":31973,"meta":63,"style":63},"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",[65,169119,169120,169128,169156,169184,169212,169216,169220,169224,169234,169242,169252,169259,169264,169270,169274,169278,169302,169325,169348,169352,169359,169366],{"__ignoreMap":63},[68,169121,169122,169124,169126],{"class":70,"line":71},[68,169123,161036],{"class":85},[68,169125,869],{"class":102},[68,169127,57031],{"class":85},[68,169129,169130,169132,169134,169136,169138,169140,169142,169144,169146,169148,169150,169152,169154],{"class":70,"line":78},[68,169131,149705],{"class":85},[68,169133,64262],{"class":872},[68,169135,96],{"class":85},[68,169137,151208],{"class":872},[68,169139,1002],{"class":85},[68,169141,70706],{"class":872},[68,169143,96],{"class":85},[68,169145,2386],{"class":92},[68,169147,1002],{"class":85},[68,169149,152792],{"class":872},[68,169151,96],{"class":85},[68,169153,2724],{"class":92},[68,169155,6529],{"class":85},[68,169157,169158,169160,169162,169164,169166,169168,169170,169172,169174,169176,169178,169180,169182],{"class":70,"line":89},[68,169159,149705],{"class":85},[68,169161,64262],{"class":872},[68,169163,96],{"class":85},[68,169165,152256],{"class":872},[68,169167,1002],{"class":85},[68,169169,70706],{"class":872},[68,169171,96],{"class":85},[68,169173,2361],{"class":92},[68,169175,1002],{"class":85},[68,169177,152792],{"class":872},[68,169179,96],{"class":85},[68,169181,2547],{"class":92},[68,169183,6529],{"class":85},[68,169185,169186,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208,169210],{"class":70,"line":115},[68,169187,149705],{"class":85},[68,169189,64262],{"class":872},[68,169191,96],{"class":85},[68,169193,161051],{"class":872},[68,169195,1002],{"class":85},[68,169197,70706],{"class":872},[68,169199,96],{"class":85},[68,169201,2411],{"class":92},[68,169203,1002],{"class":85},[68,169205,152792],{"class":872},[68,169207,96],{"class":85},[68,169209,2618],{"class":92},[68,169211,6529],{"class":85},[68,169213,169214],{"class":70,"line":280},[68,169215,34839],{"class":85},[68,169217,169218],{"class":70,"line":301},[68,169219,4000],{"emptyLinePlaceholder":1679},[68,169221,169222],{"class":70,"line":320},[68,169223,4000],{"emptyLinePlaceholder":1679},[68,169225,169226,169228,169231],{"class":70,"line":2915},[68,169227,33540],{"class":102},[68,169229,169230],{"class":587}," filter_students",[68,169232,169233],{"class":85},"(students, condition):\n",[68,169235,169236,169238,169240],{"class":70,"line":2921},[68,169237,162543],{"class":85},[68,169239,869],{"class":102},[68,169241,53423],{"class":85},[68,169243,169244,169246,169248,169250],{"class":70,"line":2933},[68,169245,4800],{"class":102},[68,169247,153457],{"class":85},[68,169249,27637],{"class":102},[68,169251,153462],{"class":85},[68,169253,169254,169256],{"class":70,"line":3214},[68,169255,4097],{"class":102},[68,169257,169258],{"class":85}," condition(student):\n",[68,169260,169261],{"class":70,"line":3219},[68,169262,169263],{"class":85},"            result.append(student)\n",[68,169265,169266,169268],{"class":70,"line":3225},[68,169267,5689],{"class":102},[68,169269,169025],{"class":85},[68,169271,169272],{"class":70,"line":3230},[68,169273,4000],{"emptyLinePlaceholder":1679},[68,169275,169276],{"class":70,"line":3244},[68,169277,4000],{"emptyLinePlaceholder":1679},[68,169279,169280,169282,169284,169287,169289,169292,169294,169296,169298,169300],{"class":70,"line":3249},[68,169281,167021],{"class":85},[68,169283,869],{"class":102},[68,169285,169286],{"class":85}," filter_students(students, ",[68,169288,168206],{"class":102},[68,169290,169291],{"class":85}," s: s[",[68,169293,152792],{"class":872},[68,169295,6042],{"class":85},[68,169297,3312],{"class":102},[68,169299,159157],{"class":92},[68,169301,1757],{"class":85},[68,169303,169304,169307,169309,169311,169313,169315,169317,169319,169321,169323],{"class":70,"line":3255},[68,169305,169306],{"class":85},"excellent ",[68,169308,869],{"class":102},[68,169310,169286],{"class":85},[68,169312,168206],{"class":102},[68,169314,169291],{"class":85},[68,169316,152792],{"class":872},[68,169318,6042],{"class":85},[68,169320,3312],{"class":102},[68,169322,159108],{"class":92},[68,169324,1757],{"class":85},[68,169326,169327,169330,169332,169334,169336,169338,169340,169342,169344,169346],{"class":70,"line":3276},[68,169328,169329],{"class":85},"under_age ",[68,169331,869],{"class":102},[68,169333,169286],{"class":85},[68,169335,168206],{"class":102},[68,169337,169291],{"class":85},[68,169339,70706],{"class":872},[68,169341,6042],{"class":85},[68,169343,861],{"class":102},[68,169345,157605],{"class":92},[68,169347,1757],{"class":85},[68,169349,169350],{"class":70,"line":3281},[68,169351,4000],{"emptyLinePlaceholder":1679},[68,169353,169354,169356],{"class":70,"line":3295},[68,169355,32008],{"class":92},[68,169357,169358],{"class":85},"(passed)\n",[68,169360,169361,169363],{"class":70,"line":3300},[68,169362,32008],{"class":92},[68,169364,169365],{"class":85},"(excellent)\n",[68,169367,169368,169370],{"class":70,"line":3329},[68,169369,32008],{"class":92},[68,169371,169372],{"class":85},"(under_age)\n",[14,169374,169376],{"id":169375},"_715-易错点","7.15 易错点",[48,169378,169379,169382,169390,169395,169406],{},[51,169380,169381],{},"默认参数不要写可变对象。",[51,169383,169384,169386,169387,169389],{},[65,169385,167852],{}," 是元组，",[65,169388,167967],{}," 是字典。",[51,169391,169392,169394],{},[65,169393,168206],{}," 只适合简单表达式。",[51,169396,169397,102592,169399,169401,169402,169405],{},[65,169398,75622],{},[65,169400,81628],{}," 的结果是迭代器，常用 ",[65,169403,169404],{},"list()"," 转换查看。",[51,169407,169408],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169410,169412],{"id":169411},"_716-本章练习","7.16 本章练习",[48,169414,169415,169422,169428,169433,169438],{},[51,169416,169417,169418,169421],{},"写函数 ",[65,169419,169420],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[51,169423,169417,169424,169427],{},[65,169425,169426],{},"print_user(**kwargs)","，输出用户所有字段。",[51,169429,105939,169430,169432],{},[65,169431,168206],{}," 对学生列表按年龄排序。",[51,169434,105939,169435,169437],{},[65,169436,81628],{}," 找出成绩不及格的学生。",[51,169439,169440],{},"写一个装饰器，统计函数执行前后的提示信息。",[1652,169442,169443],{},"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":63,"searchDepth":78,"depth":78,"links":169445},[169446,169447,169448,169449,169450,169451,169455,169456,169457,169458,169463,169464,169465,169466,169467,169468],{"id":167304,"depth":78,"text":167305},{"id":167418,"depth":78,"text":167419},{"id":167507,"depth":78,"text":167508},{"id":167569,"depth":78,"text":167570},{"id":167715,"depth":78,"text":167716},{"id":167842,"depth":78,"text":167843,"children":169452},[169453,169454],{"id":167846,"depth":89,"text":167847},{"id":167961,"depth":89,"text":167962},{"id":168042,"depth":78,"text":168043},{"id":168200,"depth":78,"text":168201},{"id":168368,"depth":78,"text":168369},{"id":168450,"depth":78,"text":168451,"children":169459},[169460,169461,169462],{"id":168454,"depth":89,"text":168455},{"id":168525,"depth":89,"text":168526},{"id":168602,"depth":89,"text":168603},{"id":168727,"depth":78,"text":168728},{"id":168817,"depth":78,"text":168818},{"id":168948,"depth":78,"text":168949},{"id":169098,"depth":78,"text":169099},{"id":169375,"depth":78,"text":169376},{"id":169411,"depth":78,"text":169412},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167296,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169475,"title":169476,"body":169477,"description":1676,"extension":1677,"meta":171996,"navigation":1679,"path":171997,"seo":171998,"stem":171999,"__hash__":172000},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169478,"toc":171971},[169479,169482,169486,169489,169492,169523,169527,169531,169534,169561,169565,169568,169619,169622,169637,169640,169675,169679,169681,169705,169708,169768,169772,169776,169779,169836,169839,169859,169863,169866,169929,169933,169936,169992,169999,170023,170027,170030,170093,170097,170102,170153,170156,170160,170165,170232,170235,170317,170321,170326,170377,170380,170384,170387,170390,170398,170401,170447,170450,170496,170500,170506,170550,170553,170599,170602,170642,170645,170706,170710,170713,170803,170806,170948,170951,171018,171022,171025,171028,171169,171172,171250,171253,171429,171433,171435,171446,171448,171647,171651,171895,171899,171933,171937,171968],[10,169480,169476],{"id":169481},"_8-文件操作",[14,169483,169485],{"id":169484},"_81-文件操作的意义","8.1 文件操作的意义",[19,169487,169488],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169490,169491],{},"常见文件类型：",[48,169493,169494,169500,169506,169512,169518],{},[51,169495,169496,169499],{},[65,169497,169498],{},".txt","：普通文本。",[51,169501,169502,169505],{},[65,169503,169504],{},".csv","：表格文本。",[51,169507,169508,169511],{},[65,169509,169510],{},".json","：结构化数据。",[51,169513,169514,169517],{},[65,169515,169516],{},".log","：日志文件。",[51,169519,169520,169522],{},[65,169521,147672],{},"：Python 源代码。",[14,169524,169526],{"id":169525},"_82-路径","8.2 路径",[43,169528,169530],{"id":169529},"_821-相对路径","8.2.1 相对路径",[19,169532,169533],{},"相对当前运行目录：",[58,169535,169537],{"className":31971,"code":169536,"language":31973,"meta":63,"style":63},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[65,169538,169539],{"__ignoreMap":63},[68,169540,169541,169543,169545,169547,169549,169551,169553,169555,169557,169559],{"class":70,"line":71},[68,169542,88491],{"class":92},[68,169544,997],{"class":85},[68,169546,148116],{"class":872},[68,169548,1002],{"class":85},[68,169550,148121],{"class":872},[68,169552,1002],{"class":85},[68,169554,148126],{"class":6815},[68,169556,869],{"class":102},[68,169558,148131],{"class":872},[68,169560,1757],{"class":85},[43,169562,169564],{"id":169563},"_822-绝对路径","8.2.2 绝对路径",[19,169566,169567],{},"从根目录或盘符开始：",[58,169569,169571],{"className":31971,"code":169570,"language":31973,"meta":63,"style":63},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[65,169572,169573,169596],{"__ignoreMap":63},[68,169574,169575,169577,169579,169582,169584,169586,169588,169590,169592,169594],{"class":70,"line":71},[68,169576,88491],{"class":92},[68,169578,997],{"class":85},[68,169580,169581],{"class":872},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[68,169583,1002],{"class":85},[68,169585,148121],{"class":872},[68,169587,1002],{"class":85},[68,169589,148126],{"class":6815},[68,169591,869],{"class":102},[68,169593,148131],{"class":872},[68,169595,1757],{"class":85},[68,169597,169598,169600,169602,169605,169607,169609,169611,169613,169615,169617],{"class":70,"line":78},[68,169599,88491],{"class":92},[68,169601,997],{"class":85},[68,169603,169604],{"class":872},"\"D:\u002Fdata\u002Fdata.txt\"",[68,169606,1002],{"class":85},[68,169608,148121],{"class":872},[68,169610,1002],{"class":85},[68,169612,148126],{"class":6815},[68,169614,869],{"class":102},[68,169616,148131],{"class":872},[68,169618,1757],{"class":85},[19,169620,169621],{},"Windows 路径建议写成：",[58,169623,169625],{"className":31971,"code":169624,"language":31973,"meta":63,"style":63},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[65,169626,169627],{"__ignoreMap":63},[68,169628,169629,169632,169634],{"class":70,"line":71},[68,169630,169631],{"class":85},"path ",[68,169633,869],{"class":102},[68,169635,169636],{"class":872}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169638,169639],{},"或原始字符串：",[58,169641,169643],{"className":31971,"code":169642,"language":31973,"meta":63,"style":63},"path = r\"D:\\data\\data.txt\"\n",[65,169644,169645],{"__ignoreMap":63},[68,169646,169647,169649,169651,169653,169655,169658,169661,169664,169666,169668,169670,169673],{"class":70,"line":71},[68,169648,169631],{"class":85},[68,169650,869],{"class":102},[68,169652,18716],{"class":102},[68,169654,1987],{"class":872},[68,169656,169657],{"class":49570},"D:",[68,169659,169660],{"class":92},"\\d",[68,169662,169663],{"class":49570},"ata",[68,169665,169660],{"class":92},[68,169667,169663],{"class":49570},[68,169669,2294],{"class":92},[68,169671,169672],{"class":49570},"txt",[68,169674,26727],{"class":872},[14,169676,169678],{"id":169677},"_83-open函数","8.3 open函数",[19,169680,6780],{},[58,169682,169684],{"className":31971,"code":169683,"language":31973,"meta":63,"style":63},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[65,169685,169686],{"__ignoreMap":63},[68,169687,169688,169690,169692,169694,169697,169699,169701,169703],{"class":70,"line":71},[68,169689,46947],{"class":6815},[68,169691,15161],{"class":102},[68,169693,148111],{"class":92},[68,169695,169696],{"class":85},"(文件路径, 打开模式, ",[68,169698,148126],{"class":6815},[68,169700,869],{"class":102},[68,169702,148131],{"class":872},[68,169704,1757],{"class":85},[19,169706,169707],{},"常见模式：",[120,169709,169710,169719],{},[123,169711,169712],{},[126,169713,169714,169717],{},[129,169715,169716],{},"模式",[129,169718,27463],{},[137,169720,169721,169730,169739,169748,169758],{},[126,169722,169723,169727],{},[142,169724,169725],{},[65,169726,2406],{},[142,169728,169729],{},"只读，文件不存在会报错",[126,169731,169732,169736],{},[142,169733,169734],{},[65,169735,2531],{},[142,169737,169738],{},"只写，文件不存在会创建，存在会清空",[126,169740,169741,169745],{},[142,169742,169743],{},[65,169744,1974],{},[142,169746,169747],{},"追加，文件不存在会创建",[126,169749,169750,169755],{},[142,169751,169752],{},[65,169753,169754],{},"rb",[142,169756,169757],{},"二进制只读",[126,169759,169760,169765],{},[142,169761,169762],{},[65,169763,169764],{},"wb",[142,169766,169767],{},"二进制只写",[14,169769,169771],{"id":169770},"_84-读取文件","8.4 读取文件",[43,169773,169775],{"id":169774},"_841-read","8.4.1 read",[19,169777,169778],{},"一次读取全部内容：",[58,169780,169782],{"className":31971,"code":169781,"language":31973,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[65,169783,169784,169810,169822,169829],{"__ignoreMap":63},[68,169785,169786,169788,169790,169792,169794,169796,169798,169800,169802,169804,169806,169808],{"class":70,"line":71},[68,169787,46947],{"class":6815},[68,169789,15161],{"class":102},[68,169791,148111],{"class":92},[68,169793,997],{"class":85},[68,169795,148116],{"class":872},[68,169797,1002],{"class":85},[68,169799,148121],{"class":872},[68,169801,1002],{"class":85},[68,169803,148126],{"class":6815},[68,169805,869],{"class":102},[68,169807,148131],{"class":872},[68,169809,1757],{"class":85},[68,169811,169812,169815,169817,169819],{"class":70,"line":78},[68,169813,169814],{"class":85},"content ",[68,169816,869],{"class":102},[68,169818,149473],{"class":6815},[68,169820,169821],{"class":85},".read()\n",[68,169823,169824,169826],{"class":70,"line":89},[68,169825,32008],{"class":92},[68,169827,169828],{"class":85},"(content)\n",[68,169830,169831,169833],{"class":70,"line":115},[68,169832,46947],{"class":6815},[68,169834,169835],{"class":85},".close()\n",[19,169837,169838],{},"可以指定读取字符数：",[58,169840,169842],{"className":31971,"code":169841,"language":31973,"meta":63,"style":63},"content = file.read(10)\n",[65,169843,169844],{"__ignoreMap":63},[68,169845,169846,169848,169850,169852,169855,169857],{"class":70,"line":71},[68,169847,169814],{"class":85},[68,169849,869],{"class":102},[68,169851,149473],{"class":6815},[68,169853,169854],{"class":85},".read(",[68,169856,2182],{"class":92},[68,169858,1757],{"class":85},[43,169860,169862],{"id":169861},"_842-readline","8.4.2 readline",[19,169864,169865],{},"一次读取一行：",[58,169867,169869],{"className":31971,"code":169868,"language":31973,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[65,169870,169871,169897,169901,169912,169919,169923],{"__ignoreMap":63},[68,169872,169873,169875,169877,169879,169881,169883,169885,169887,169889,169891,169893,169895],{"class":70,"line":71},[68,169874,46947],{"class":6815},[68,169876,15161],{"class":102},[68,169878,148111],{"class":92},[68,169880,997],{"class":85},[68,169882,148116],{"class":872},[68,169884,1002],{"class":85},[68,169886,148121],{"class":872},[68,169888,1002],{"class":85},[68,169890,148126],{"class":6815},[68,169892,869],{"class":102},[68,169894,148131],{"class":872},[68,169896,1757],{"class":85},[68,169898,169899],{"class":70,"line":78},[68,169900,4000],{"emptyLinePlaceholder":1679},[68,169902,169903,169905,169907,169909],{"class":70,"line":89},[68,169904,148572],{"class":85},[68,169906,869],{"class":102},[68,169908,149473],{"class":6815},[68,169910,169911],{"class":85},".readline()\n",[68,169913,169914,169916],{"class":70,"line":115},[68,169915,32008],{"class":92},[68,169917,169918],{"class":85},"(line)\n",[68,169920,169921],{"class":70,"line":280},[68,169922,4000],{"emptyLinePlaceholder":1679},[68,169924,169925,169927],{"class":70,"line":301},[68,169926,46947],{"class":6815},[68,169928,169835],{"class":85},[43,169930,169932],{"id":169931},"_843-readlines","8.4.3 readlines",[19,169934,169935],{},"读取所有行，返回列表：",[58,169937,169939],{"className":31971,"code":169938,"language":31973,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[65,169940,169941,169967,169979,169986],{"__ignoreMap":63},[68,169942,169943,169945,169947,169949,169951,169953,169955,169957,169959,169961,169963,169965],{"class":70,"line":71},[68,169944,46947],{"class":6815},[68,169946,15161],{"class":102},[68,169948,148111],{"class":92},[68,169950,997],{"class":85},[68,169952,148116],{"class":872},[68,169954,1002],{"class":85},[68,169956,148121],{"class":872},[68,169958,1002],{"class":85},[68,169960,148126],{"class":6815},[68,169962,869],{"class":102},[68,169964,148131],{"class":872},[68,169966,1757],{"class":85},[68,169968,169969,169972,169974,169976],{"class":70,"line":78},[68,169970,169971],{"class":85},"lines ",[68,169973,869],{"class":102},[68,169975,149473],{"class":6815},[68,169977,169978],{"class":85},".readlines()\n",[68,169980,169981,169983],{"class":70,"line":89},[68,169982,32008],{"class":92},[68,169984,169985],{"class":85},"(lines)\n",[68,169987,169988,169990],{"class":70,"line":115},[68,169989,46947],{"class":6815},[68,169991,169835],{"class":85},[19,169993,169994,169995,169998],{},"每一行通常带有换行符，可以用 ",[65,169996,169997],{},"strip()"," 去掉：",[58,170000,170002],{"className":31971,"code":170001,"language":31973,"meta":63,"style":63},"for line in lines:\n    print(line.strip())\n",[65,170003,170004,170016],{"__ignoreMap":63},[68,170005,170006,170008,170011,170013],{"class":70,"line":71},[68,170007,4624],{"class":102},[68,170009,170010],{"class":85}," line ",[68,170012,27637],{"class":102},[68,170014,170015],{"class":85}," lines:\n",[68,170017,170018,170020],{"class":70,"line":78},[68,170019,32892],{"class":92},[68,170021,170022],{"class":85},"(line.strip())\n",[43,170024,170026],{"id":170025},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170028,170029],{},"推荐读取大文件时使用：",[58,170031,170033],{"className":31971,"code":170032,"language":31973,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[65,170034,170035,170061,170065,170077,170083,170087],{"__ignoreMap":63},[68,170036,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059],{"class":70,"line":71},[68,170038,46947],{"class":6815},[68,170040,15161],{"class":102},[68,170042,148111],{"class":92},[68,170044,997],{"class":85},[68,170046,148116],{"class":872},[68,170048,1002],{"class":85},[68,170050,148121],{"class":872},[68,170052,1002],{"class":85},[68,170054,148126],{"class":6815},[68,170056,869],{"class":102},[68,170058,148131],{"class":872},[68,170060,1757],{"class":85},[68,170062,170063],{"class":70,"line":78},[68,170064,4000],{"emptyLinePlaceholder":1679},[68,170066,170067,170069,170071,170073,170075],{"class":70,"line":89},[68,170068,4624],{"class":102},[68,170070,170010],{"class":85},[68,170072,27637],{"class":102},[68,170074,149473],{"class":6815},[68,170076,5338],{"class":85},[68,170078,170079,170081],{"class":70,"line":115},[68,170080,32892],{"class":92},[68,170082,170022],{"class":85},[68,170084,170085],{"class":70,"line":280},[68,170086,4000],{"emptyLinePlaceholder":1679},[68,170088,170089,170091],{"class":70,"line":301},[68,170090,46947],{"class":6815},[68,170092,169835],{"class":85},[14,170094,170096],{"id":170095},"_85-with语句","8.5 with语句",[19,170098,170099,170101],{},[65,170100,109406],{}," 会自动关闭文件，推荐使用。",[58,170103,170105],{"className":31971,"code":170104,"language":31973,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[65,170106,170107,170137,170147],{"__ignoreMap":63},[68,170108,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127,170129,170131,170133,170135],{"class":70,"line":71},[68,170110,109406],{"class":102},[68,170112,148111],{"class":92},[68,170114,997],{"class":85},[68,170116,148116],{"class":872},[68,170118,1002],{"class":85},[68,170120,148121],{"class":872},[68,170122,1002],{"class":85},[68,170124,148126],{"class":6815},[68,170126,869],{"class":102},[68,170128,148131],{"class":872},[68,170130,15311],{"class":85},[68,170132,32976],{"class":102},[68,170134,149473],{"class":6815},[68,170136,5338],{"class":85},[68,170138,170139,170141,170143,170145],{"class":70,"line":78},[68,170140,148143],{"class":85},[68,170142,869],{"class":102},[68,170144,149473],{"class":6815},[68,170146,169821],{"class":85},[68,170148,170149,170151],{"class":70,"line":89},[68,170150,32892],{"class":92},[68,170152,169828],{"class":85},[19,170154,170155],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170157,170159],{"id":170158},"_86-写入文件","8.6 写入文件",[19,170161,170162,170164],{},[65,170163,2531],{}," 模式会清空原文件。",[58,170166,170168],{"className":31971,"code":170167,"language":31973,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[65,170169,170170,170200,170217],{"__ignoreMap":63},[68,170171,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192,170194,170196,170198],{"class":70,"line":71},[68,170173,109406],{"class":102},[68,170175,148111],{"class":92},[68,170177,997],{"class":85},[68,170179,148116],{"class":872},[68,170181,1002],{"class":85},[68,170183,153296],{"class":872},[68,170185,1002],{"class":85},[68,170187,148126],{"class":6815},[68,170189,869],{"class":102},[68,170191,148131],{"class":872},[68,170193,15311],{"class":85},[68,170195,32976],{"class":102},[68,170197,149473],{"class":6815},[68,170199,5338],{"class":85},[68,170201,170202,170205,170208,170211,170213,170215],{"class":70,"line":78},[68,170203,170204],{"class":6815},"    file",[68,170206,170207],{"class":85},".write(",[68,170209,170210],{"class":872},"\"hello",[68,170212,157845],{"class":92},[68,170214,1987],{"class":872},[68,170216,1757],{"class":85},[68,170218,170219,170221,170223,170226,170228,170230],{"class":70,"line":89},[68,170220,170204],{"class":6815},[68,170222,170207],{"class":85},[68,170224,170225],{"class":872},"\"python",[68,170227,157845],{"class":92},[68,170229,1987],{"class":872},[68,170231,1757],{"class":85},[19,170233,170234],{},"写入多行：",[58,170236,170238],{"className":31971,"code":170237,"language":31973,"meta":63,"style":63},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[65,170239,170240,170275,170279,170310],{"__ignoreMap":63},[68,170241,170242,170244,170246,170248,170251,170253,170255,170257,170260,170262,170264,170266,170269,170271,170273],{"class":70,"line":71},[68,170243,169971],{"class":85},[68,170245,869],{"class":102},[68,170247,53811],{"class":85},[68,170249,170250],{"class":872},"\"小明,18",[68,170252,157845],{"class":92},[68,170254,1987],{"class":872},[68,170256,1002],{"class":85},[68,170258,170259],{"class":872},"\"小红,17",[68,170261,157845],{"class":92},[68,170263,1987],{"class":872},[68,170265,1002],{"class":85},[68,170267,170268],{"class":872},"\"小刚,19",[68,170270,157845],{"class":92},[68,170272,1987],{"class":872},[68,170274,34839],{"class":85},[68,170276,170277],{"class":70,"line":78},[68,170278,4000],{"emptyLinePlaceholder":1679},[68,170280,170281,170283,170285,170287,170290,170292,170294,170296,170298,170300,170302,170304,170306,170308],{"class":70,"line":89},[68,170282,109406],{"class":102},[68,170284,148111],{"class":92},[68,170286,997],{"class":85},[68,170288,170289],{"class":872},"\"students.txt\"",[68,170291,1002],{"class":85},[68,170293,153296],{"class":872},[68,170295,1002],{"class":85},[68,170297,148126],{"class":6815},[68,170299,869],{"class":102},[68,170301,148131],{"class":872},[68,170303,15311],{"class":85},[68,170305,32976],{"class":102},[68,170307,149473],{"class":6815},[68,170309,5338],{"class":85},[68,170311,170312,170314],{"class":70,"line":115},[68,170313,170204],{"class":6815},[68,170315,170316],{"class":85},".writelines(lines)\n",[14,170318,170320],{"id":170319},"_87-追加文件","8.7 追加文件",[19,170322,170323,170325],{},[65,170324,1974],{}," 模式不会清空原内容，而是在末尾追加。",[58,170327,170329],{"className":31971,"code":170328,"language":31973,"meta":63,"style":63},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[65,170330,170331,170362],{"__ignoreMap":63},[68,170332,170333,170335,170337,170339,170342,170344,170346,170348,170350,170352,170354,170356,170358,170360],{"class":70,"line":71},[68,170334,109406],{"class":102},[68,170336,148111],{"class":92},[68,170338,997],{"class":85},[68,170340,170341],{"class":872},"\"log.txt\"",[68,170343,1002],{"class":85},[68,170345,166645],{"class":872},[68,170347,1002],{"class":85},[68,170349,148126],{"class":6815},[68,170351,869],{"class":102},[68,170353,148131],{"class":872},[68,170355,15311],{"class":85},[68,170357,32976],{"class":102},[68,170359,149473],{"class":6815},[68,170361,5338],{"class":85},[68,170363,170364,170366,170368,170371,170373,170375],{"class":70,"line":78},[68,170365,170204],{"class":6815},[68,170367,170207],{"class":85},[68,170369,170370],{"class":872},"\"程序启动",[68,170372,157845],{"class":92},[68,170374,1987],{"class":872},[68,170376,1757],{"class":85},[19,170378,170379],{},"日志类文件常用追加模式。",[14,170381,170383],{"id":170382},"_88-文件编码","8.8 文件编码",[19,170385,170386],{},"编码决定文字如何保存为字节。",[19,170388,170389],{},"常见编码：",[48,170391,170392,170395],{},[51,170393,170394],{},"UTF-8：推荐。",[51,170396,170397],{},"GBK：部分 Windows 中文文件常见。",[19,170399,170400],{},"读取文件乱码时，可以尝试：",[58,170402,170404],{"className":31971,"code":170403,"language":31973,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[65,170405,170406,170437],{"__ignoreMap":63},[68,170407,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426,170429,170431,170433,170435],{"class":70,"line":71},[68,170409,109406],{"class":102},[68,170411,148111],{"class":92},[68,170413,997],{"class":85},[68,170415,148116],{"class":872},[68,170417,1002],{"class":85},[68,170419,148121],{"class":872},[68,170421,1002],{"class":85},[68,170423,148126],{"class":6815},[68,170425,869],{"class":102},[68,170427,170428],{"class":872},"\"gbk\"",[68,170430,15311],{"class":85},[68,170432,32976],{"class":102},[68,170434,149473],{"class":6815},[68,170436,5338],{"class":85},[68,170438,170439,170441,170443,170445],{"class":70,"line":78},[68,170440,148143],{"class":85},[68,170442,869],{"class":102},[68,170444,149473],{"class":6815},[68,170446,169821],{"class":85},[19,170448,170449],{},"写文件时建议统一 UTF-8：",[58,170451,170453],{"className":31971,"code":170452,"language":31973,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[65,170454,170455,170485],{"__ignoreMap":63},[68,170456,170457,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483],{"class":70,"line":71},[68,170458,109406],{"class":102},[68,170460,148111],{"class":92},[68,170462,997],{"class":85},[68,170464,148116],{"class":872},[68,170466,1002],{"class":85},[68,170468,153296],{"class":872},[68,170470,1002],{"class":85},[68,170472,148126],{"class":6815},[68,170474,869],{"class":102},[68,170476,148131],{"class":872},[68,170478,15311],{"class":85},[68,170480,32976],{"class":102},[68,170482,149473],{"class":6815},[68,170484,5338],{"class":85},[68,170486,170487,170489,170491,170494],{"class":70,"line":78},[68,170488,170204],{"class":6815},[68,170490,170207],{"class":85},[68,170492,170493],{"class":872},"\"中文内容\"",[68,170495,1757],{"class":85},[14,170497,170499],{"id":170498},"_89-pathlib","8.9 pathlib",[19,170501,170502,170505],{},[65,170503,170504],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[58,170507,170509],{"className":31971,"code":170508,"language":31973,"meta":63,"style":63},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[65,170510,170511,170521,170525,170543],{"__ignoreMap":63},[68,170512,170513,170515,170517,170519],{"class":70,"line":71},[68,170514,32330],{"class":102},[68,170516,109884],{"class":85},[68,170518,31985],{"class":102},[68,170520,109889],{"class":85},[68,170522,170523],{"class":70,"line":78},[68,170524,4000],{"emptyLinePlaceholder":1679},[68,170526,170527,170529,170531,170533,170536,170538,170540],{"class":70,"line":89},[68,170528,169631],{"class":85},[68,170530,869],{"class":102},[68,170532,110118],{"class":85},[68,170534,170535],{"class":872},"\"data\"",[68,170537,15311],{"class":85},[68,170539,2320],{"class":102},[68,170541,170542],{"class":872}," \"students.txt\"\n",[68,170544,170545,170547],{"class":70,"line":115},[68,170546,32008],{"class":92},[68,170548,170549],{"class":85},"(path)\n",[19,170551,170552],{},"创建目录：",[58,170554,170556],{"className":31971,"code":170555,"language":31973,"meta":63,"style":63},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[65,170557,170558,170568,170572,170585],{"__ignoreMap":63},[68,170559,170560,170562,170564,170566],{"class":70,"line":71},[68,170561,32330],{"class":102},[68,170563,109884],{"class":85},[68,170565,31985],{"class":102},[68,170567,109889],{"class":85},[68,170569,170570],{"class":70,"line":78},[68,170571,4000],{"emptyLinePlaceholder":1679},[68,170573,170574,170577,170579,170581,170583],{"class":70,"line":89},[68,170575,170576],{"class":85},"data_dir ",[68,170578,869],{"class":102},[68,170580,110118],{"class":85},[68,170582,170535],{"class":872},[68,170584,1757],{"class":85},[68,170586,170587,170590,170593,170595,170597],{"class":70,"line":115},[68,170588,170589],{"class":85},"data_dir.mkdir(",[68,170591,170592],{"class":6815},"exist_ok",[68,170594,869],{"class":102},[68,170596,33069],{"class":92},[68,170598,1757],{"class":85},[19,170600,170601],{},"判断文件是否存在：",[58,170603,170605],{"className":31971,"code":170604,"language":31973,"meta":63,"style":63},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[65,170606,170607,170620,170624,170631],{"__ignoreMap":63},[68,170608,170609,170611,170613,170615,170618],{"class":70,"line":71},[68,170610,169631],{"class":85},[68,170612,869],{"class":102},[68,170614,110118],{"class":85},[68,170616,170617],{"class":872},"\"data\u002Fstudents.txt\"",[68,170619,1757],{"class":85},[68,170621,170622],{"class":70,"line":78},[68,170623,4000],{"emptyLinePlaceholder":1679},[68,170625,170626,170628],{"class":70,"line":89},[68,170627,3134],{"class":102},[68,170629,170630],{"class":85}," path.exists():\n",[68,170632,170633,170635,170637,170640],{"class":70,"line":115},[68,170634,32892],{"class":92},[68,170636,997],{"class":85},[68,170638,170639],{"class":872},"\"文件存在\"",[68,170641,1757],{"class":85},[19,170643,170644],{},"读写文本：",[58,170646,170648],{"className":31971,"code":170647,"language":31973,"meta":63,"style":63},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[65,170649,170650,170662,170666,170683,170700],{"__ignoreMap":63},[68,170651,170652,170654,170656,170658,170660],{"class":70,"line":71},[68,170653,169631],{"class":85},[68,170655,869],{"class":102},[68,170657,110118],{"class":85},[68,170659,148116],{"class":872},[68,170661,1757],{"class":85},[68,170663,170664],{"class":70,"line":78},[68,170665,4000],{"emptyLinePlaceholder":1679},[68,170667,170668,170671,170673,170675,170677,170679,170681],{"class":70,"line":89},[68,170669,170670],{"class":85},"path.write_text(",[68,170672,147196],{"class":872},[68,170674,1002],{"class":85},[68,170676,148126],{"class":6815},[68,170678,869],{"class":102},[68,170680,148131],{"class":872},[68,170682,1757],{"class":85},[68,170684,170685,170687,170689,170692,170694,170696,170698],{"class":70,"line":115},[68,170686,169814],{"class":85},[68,170688,869],{"class":102},[68,170690,170691],{"class":85}," path.read_text(",[68,170693,148126],{"class":6815},[68,170695,869],{"class":102},[68,170697,148131],{"class":872},[68,170699,1757],{"class":85},[68,170701,170702,170704],{"class":70,"line":280},[68,170703,32008],{"class":92},[68,170705,169828],{"class":85},[14,170707,170709],{"id":170708},"_810-json文件","8.10 JSON文件",[19,170711,170712],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[58,170714,170716],{"className":31971,"code":170715,"language":31973,"meta":63,"style":63},"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",[65,170717,170718,170724,170728,170736,170746,170756,170764,170768,170772,170797],{"__ignoreMap":63},[68,170719,170720,170722],{"class":70,"line":71},[68,170721,31985],{"class":102},[68,170723,148411],{"class":85},[68,170725,170726],{"class":70,"line":78},[68,170727,4000],{"emptyLinePlaceholder":1679},[68,170729,170730,170732,170734],{"class":70,"line":89},[68,170731,150801],{"class":85},[68,170733,869],{"class":102},[68,170735,86],{"class":85},[68,170737,170738,170740,170742,170744],{"class":70,"line":115},[68,170739,148340],{"class":872},[68,170741,96],{"class":85},[68,170743,151208],{"class":872},[68,170745,33059],{"class":85},[68,170747,170748,170750,170752,170754],{"class":70,"line":280},[68,170749,165857],{"class":872},[68,170751,96],{"class":85},[68,170753,2386],{"class":92},[68,170755,33059],{"class":85},[68,170757,170758,170760,170762],{"class":70,"line":301},[68,170759,165868],{"class":872},[68,170761,96],{"class":85},[68,170763,165873],{"class":92},[68,170765,170766],{"class":70,"line":320},[68,170767,118],{"class":85},[68,170769,170770],{"class":70,"line":2915},[68,170771,4000],{"emptyLinePlaceholder":1679},[68,170773,170774,170776,170778,170781,170783,170785,170787,170789,170791,170793,170795],{"class":70,"line":2921},[68,170775,157764],{"class":85},[68,170777,869],{"class":102},[68,170779,170780],{"class":85}," json.dumps(student, ",[68,170782,148457],{"class":6815},[68,170784,869],{"class":102},[68,170786,35580],{"class":92},[68,170788,1002],{"class":85},[68,170790,153332],{"class":6815},[68,170792,869],{"class":102},[68,170794,267],{"class":92},[68,170796,1757],{"class":85},[68,170798,170799,170801],{"class":70,"line":2933},[68,170800,32008],{"class":92},[68,170802,165391],{"class":85},[19,170804,170805],{},"写入 JSON 文件：",[58,170807,170809],{"className":31971,"code":170808,"language":31973,"meta":63,"style":63},"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",[65,170810,170811,170817,170821,170829,170857,170885,170889,170893,170923],{"__ignoreMap":63},[68,170812,170813,170815],{"class":70,"line":71},[68,170814,31985],{"class":102},[68,170816,148411],{"class":85},[68,170818,170819],{"class":70,"line":78},[68,170820,4000],{"emptyLinePlaceholder":1679},[68,170822,170823,170825,170827],{"class":70,"line":89},[68,170824,161036],{"class":85},[68,170826,869],{"class":102},[68,170828,57031],{"class":85},[68,170830,170831,170833,170835,170837,170839,170841,170843,170845,170847,170849,170851,170853,170855],{"class":70,"line":115},[68,170832,149705],{"class":85},[68,170834,64262],{"class":872},[68,170836,96],{"class":85},[68,170838,151208],{"class":872},[68,170840,1002],{"class":85},[68,170842,70706],{"class":872},[68,170844,96],{"class":85},[68,170846,2386],{"class":92},[68,170848,1002],{"class":85},[68,170850,152792],{"class":872},[68,170852,96],{"class":85},[68,170854,2724],{"class":92},[68,170856,6529],{"class":85},[68,170858,170859,170861,170863,170865,170867,170869,170871,170873,170875,170877,170879,170881,170883],{"class":70,"line":280},[68,170860,149705],{"class":85},[68,170862,64262],{"class":872},[68,170864,96],{"class":85},[68,170866,152256],{"class":872},[68,170868,1002],{"class":85},[68,170870,70706],{"class":872},[68,170872,96],{"class":85},[68,170874,2361],{"class":92},[68,170876,1002],{"class":85},[68,170878,152792],{"class":872},[68,170880,96],{"class":85},[68,170882,2547],{"class":92},[68,170884,6529],{"class":85},[68,170886,170887],{"class":70,"line":301},[68,170888,34839],{"class":85},[68,170890,170891],{"class":70,"line":320},[68,170892,4000],{"emptyLinePlaceholder":1679},[68,170894,170895,170897,170899,170901,170903,170905,170907,170909,170911,170913,170915,170917,170919,170921],{"class":70,"line":2915},[68,170896,109406],{"class":102},[68,170898,148111],{"class":92},[68,170900,997],{"class":85},[68,170902,153151],{"class":872},[68,170904,1002],{"class":85},[68,170906,153296],{"class":872},[68,170908,1002],{"class":85},[68,170910,148126],{"class":6815},[68,170912,869],{"class":102},[68,170914,148131],{"class":872},[68,170916,15311],{"class":85},[68,170918,32976],{"class":102},[68,170920,149473],{"class":6815},[68,170922,5338],{"class":85},[68,170924,170925,170928,170930,170932,170934,170936,170938,170940,170942,170944,170946],{"class":70,"line":2921},[68,170926,170927],{"class":85},"    json.dump(students, ",[68,170929,46947],{"class":6815},[68,170931,1002],{"class":85},[68,170933,148457],{"class":6815},[68,170935,869],{"class":102},[68,170937,35580],{"class":92},[68,170939,1002],{"class":85},[68,170941,153332],{"class":6815},[68,170943,869],{"class":102},[68,170945,267],{"class":92},[68,170947,1757],{"class":85},[19,170949,170950],{},"读取 JSON 文件：",[58,170952,170954],{"className":31971,"code":170953,"language":31973,"meta":63,"style":63},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[65,170955,170956,170962,170966,170996,171008,171012],{"__ignoreMap":63},[68,170957,170958,170960],{"class":70,"line":71},[68,170959,31985],{"class":102},[68,170961,148411],{"class":85},[68,170963,170964],{"class":70,"line":78},[68,170965,4000],{"emptyLinePlaceholder":1679},[68,170967,170968,170970,170972,170974,170976,170978,170980,170982,170984,170986,170988,170990,170992,170994],{"class":70,"line":89},[68,170969,109406],{"class":102},[68,170971,148111],{"class":92},[68,170973,997],{"class":85},[68,170975,153151],{"class":872},[68,170977,1002],{"class":85},[68,170979,148121],{"class":872},[68,170981,1002],{"class":85},[68,170983,148126],{"class":6815},[68,170985,869],{"class":102},[68,170987,148131],{"class":872},[68,170989,15311],{"class":85},[68,170991,32976],{"class":102},[68,170993,149473],{"class":6815},[68,170995,5338],{"class":85},[68,170997,170998,171000,171002,171004,171006],{"class":70,"line":115},[68,170999,154357],{"class":85},[68,171001,869],{"class":102},[68,171003,149484],{"class":85},[68,171005,46947],{"class":6815},[68,171007,1757],{"class":85},[68,171009,171010],{"class":70,"line":280},[68,171011,4000],{"emptyLinePlaceholder":1679},[68,171013,171014,171016],{"class":70,"line":301},[68,171015,32008],{"class":92},[68,171017,166315],{"class":85},[14,171019,171021],{"id":171020},"_811-csv文件","8.11 CSV文件",[19,171023,171024],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171026,171027],{},"写入 CSV：",[58,171029,171031],{"className":31971,"code":171030,"language":31973,"meta":63,"style":63},"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",[65,171032,171033,171040,171044,171052,171070,171086,171102,171106,171110,171150,171164],{"__ignoreMap":63},[68,171034,171035,171037],{"class":70,"line":71},[68,171036,31985],{"class":102},[68,171038,171039],{"class":85}," csv\n",[68,171041,171042],{"class":70,"line":78},[68,171043,4000],{"emptyLinePlaceholder":1679},[68,171045,171046,171048,171050],{"class":70,"line":89},[68,171047,161036],{"class":85},[68,171049,869],{"class":102},[68,171051,57031],{"class":85},[68,171053,171054,171057,171059,171061,171063,171065,171068],{"class":70,"line":115},[68,171055,171056],{"class":85},"    [",[68,171058,74677],{"class":872},[68,171060,1002],{"class":85},[68,171062,74710],{"class":872},[68,171064,1002],{"class":85},[68,171066,171067],{"class":872},"\"成绩\"",[68,171069,89412],{"class":85},[68,171071,171072,171074,171076,171078,171080,171082,171084],{"class":70,"line":280},[68,171073,171056],{"class":85},[68,171075,151208],{"class":872},[68,171077,1002],{"class":85},[68,171079,2386],{"class":92},[68,171081,1002],{"class":85},[68,171083,2724],{"class":92},[68,171085,89412],{"class":85},[68,171087,171088,171090,171092,171094,171096,171098,171100],{"class":70,"line":301},[68,171089,171056],{"class":85},[68,171091,152256],{"class":872},[68,171093,1002],{"class":85},[68,171095,2361],{"class":92},[68,171097,1002],{"class":85},[68,171099,2547],{"class":92},[68,171101,89412],{"class":85},[68,171103,171104],{"class":70,"line":320},[68,171105,34839],{"class":85},[68,171107,171108],{"class":70,"line":2915},[68,171109,4000],{"emptyLinePlaceholder":1679},[68,171111,171112,171114,171116,171118,171121,171123,171125,171127,171129,171131,171133,171135,171138,171140,171142,171144,171146,171148],{"class":70,"line":2921},[68,171113,109406],{"class":102},[68,171115,148111],{"class":92},[68,171117,997],{"class":85},[68,171119,171120],{"class":872},"\"students.csv\"",[68,171122,1002],{"class":85},[68,171124,153296],{"class":872},[68,171126,1002],{"class":85},[68,171128,148126],{"class":6815},[68,171130,869],{"class":102},[68,171132,148131],{"class":872},[68,171134,1002],{"class":85},[68,171136,171137],{"class":6815},"newline",[68,171139,869],{"class":102},[68,171141,9251],{"class":872},[68,171143,15311],{"class":85},[68,171145,32976],{"class":102},[68,171147,149473],{"class":6815},[68,171149,5338],{"class":85},[68,171151,171152,171155,171157,171160,171162],{"class":70,"line":2933},[68,171153,171154],{"class":85},"    writer ",[68,171156,869],{"class":102},[68,171158,171159],{"class":85}," csv.writer(",[68,171161,46947],{"class":6815},[68,171163,1757],{"class":85},[68,171165,171166],{"class":70,"line":3214},[68,171167,171168],{"class":85},"    writer.writerows(students)\n",[19,171170,171171],{},"读取 CSV：",[58,171173,171175],{"className":31971,"code":171174,"language":31973,"meta":63,"style":63},"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",[65,171176,171177,171183,171187,171217,171231,171243],{"__ignoreMap":63},[68,171178,171179,171181],{"class":70,"line":71},[68,171180,31985],{"class":102},[68,171182,171039],{"class":85},[68,171184,171185],{"class":70,"line":78},[68,171186,4000],{"emptyLinePlaceholder":1679},[68,171188,171189,171191,171193,171195,171197,171199,171201,171203,171205,171207,171209,171211,171213,171215],{"class":70,"line":89},[68,171190,109406],{"class":102},[68,171192,148111],{"class":92},[68,171194,997],{"class":85},[68,171196,171120],{"class":872},[68,171198,1002],{"class":85},[68,171200,148121],{"class":872},[68,171202,1002],{"class":85},[68,171204,148126],{"class":6815},[68,171206,869],{"class":102},[68,171208,148131],{"class":872},[68,171210,15311],{"class":85},[68,171212,32976],{"class":102},[68,171214,149473],{"class":6815},[68,171216,5338],{"class":85},[68,171218,171219,171222,171224,171227,171229],{"class":70,"line":115},[68,171220,171221],{"class":85},"    reader ",[68,171223,869],{"class":102},[68,171225,171226],{"class":85}," csv.reader(",[68,171228,46947],{"class":6815},[68,171230,1757],{"class":85},[68,171232,171233,171235,171238,171240],{"class":70,"line":280},[68,171234,4800],{"class":102},[68,171236,171237],{"class":85}," row ",[68,171239,27637],{"class":102},[68,171241,171242],{"class":85}," reader:\n",[68,171244,171245,171247],{"class":70,"line":301},[68,171246,34044],{"class":92},[68,171248,171249],{"class":85},"(row)\n",[19,171251,171252],{},"使用字典写入：",[58,171254,171256],{"className":31971,"code":171255,"language":31973,"meta":63,"style":63},"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",[65,171257,171258,171264,171268,171276,171304,171332,171336,171340,171378,171399,171420,171425],{"__ignoreMap":63},[68,171259,171260,171262],{"class":70,"line":71},[68,171261,31985],{"class":102},[68,171263,171039],{"class":85},[68,171265,171266],{"class":70,"line":78},[68,171267,4000],{"emptyLinePlaceholder":1679},[68,171269,171270,171272,171274],{"class":70,"line":89},[68,171271,161036],{"class":85},[68,171273,869],{"class":102},[68,171275,57031],{"class":85},[68,171277,171278,171280,171282,171284,171286,171288,171290,171292,171294,171296,171298,171300,171302],{"class":70,"line":115},[68,171279,149705],{"class":85},[68,171281,64262],{"class":872},[68,171283,96],{"class":85},[68,171285,151208],{"class":872},[68,171287,1002],{"class":85},[68,171289,70706],{"class":872},[68,171291,96],{"class":85},[68,171293,2386],{"class":92},[68,171295,1002],{"class":85},[68,171297,152792],{"class":872},[68,171299,96],{"class":85},[68,171301,2724],{"class":92},[68,171303,6529],{"class":85},[68,171305,171306,171308,171310,171312,171314,171316,171318,171320,171322,171324,171326,171328,171330],{"class":70,"line":280},[68,171307,149705],{"class":85},[68,171309,64262],{"class":872},[68,171311,96],{"class":85},[68,171313,152256],{"class":872},[68,171315,1002],{"class":85},[68,171317,70706],{"class":872},[68,171319,96],{"class":85},[68,171321,2361],{"class":92},[68,171323,1002],{"class":85},[68,171325,152792],{"class":872},[68,171327,96],{"class":85},[68,171329,2547],{"class":92},[68,171331,6529],{"class":85},[68,171333,171334],{"class":70,"line":301},[68,171335,34839],{"class":85},[68,171337,171338],{"class":70,"line":320},[68,171339,4000],{"emptyLinePlaceholder":1679},[68,171341,171342,171344,171346,171348,171350,171352,171354,171356,171358,171360,171362,171364,171366,171368,171370,171372,171374,171376],{"class":70,"line":2915},[68,171343,109406],{"class":102},[68,171345,148111],{"class":92},[68,171347,997],{"class":85},[68,171349,171120],{"class":872},[68,171351,1002],{"class":85},[68,171353,153296],{"class":872},[68,171355,1002],{"class":85},[68,171357,148126],{"class":6815},[68,171359,869],{"class":102},[68,171361,148131],{"class":872},[68,171363,1002],{"class":85},[68,171365,171137],{"class":6815},[68,171367,869],{"class":102},[68,171369,9251],{"class":872},[68,171371,15311],{"class":85},[68,171373,32976],{"class":102},[68,171375,149473],{"class":6815},[68,171377,5338],{"class":85},[68,171379,171380,171383,171385,171387,171389,171391,171393,171395,171397],{"class":70,"line":2921},[68,171381,171382],{"class":85},"    fieldnames ",[68,171384,869],{"class":102},[68,171386,53811],{"class":85},[68,171388,64262],{"class":872},[68,171390,1002],{"class":85},[68,171392,70706],{"class":872},[68,171394,1002],{"class":85},[68,171396,152792],{"class":872},[68,171398,34839],{"class":85},[68,171400,171401,171403,171405,171408,171410,171412,171415,171417],{"class":70,"line":2933},[68,171402,171154],{"class":85},[68,171404,869],{"class":102},[68,171406,171407],{"class":85}," csv.DictWriter(",[68,171409,46947],{"class":6815},[68,171411,1002],{"class":85},[68,171413,171414],{"class":6815},"fieldnames",[68,171416,869],{"class":102},[68,171418,171419],{"class":85},"fieldnames)\n",[68,171421,171422],{"class":70,"line":3214},[68,171423,171424],{"class":85},"    writer.writeheader()\n",[68,171426,171427],{"class":70,"line":3219},[68,171428,171168],{"class":85},[14,171430,171432],{"id":171431},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171434,124865],{},[48,171436,171437,171440,171443],{},[51,171438,171439],{},"读取文本文件。",[51,171441,171442],{},"统计每个单词出现次数。",[51,171444,171445],{},"输出出现次数最多的前 10 个单词。",[19,171447,11633],{},[58,171449,171451],{"className":31971,"code":171450,"language":31973,"meta":63,"style":63},"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",[65,171452,171453,171463,171467,171480,171496,171500,171510,171519,171523,171535,171555,171564,171568,171586,171590,171620,171624,171640],{"__ignoreMap":63},[68,171454,171455,171457,171459,171461],{"class":70,"line":71},[68,171456,32330],{"class":102},[68,171458,109884],{"class":85},[68,171460,31985],{"class":102},[68,171462,109889],{"class":85},[68,171464,171465],{"class":70,"line":78},[68,171466,4000],{"emptyLinePlaceholder":1679},[68,171468,171469,171471,171473,171475,171478],{"class":70,"line":89},[68,171470,169631],{"class":85},[68,171472,869],{"class":102},[68,171474,110118],{"class":85},[68,171476,171477],{"class":872},"\"article.txt\"",[68,171479,1757],{"class":85},[68,171481,171482,171484,171486,171488,171490,171492,171494],{"class":70,"line":115},[68,171483,169814],{"class":85},[68,171485,869],{"class":102},[68,171487,170691],{"class":85},[68,171489,148126],{"class":6815},[68,171491,869],{"class":102},[68,171493,148131],{"class":872},[68,171495,1757],{"class":85},[68,171497,171498],{"class":70,"line":280},[68,171499,4000],{"emptyLinePlaceholder":1679},[68,171501,171502,171505,171507],{"class":70,"line":301},[68,171503,171504],{"class":85},"words ",[68,171506,869],{"class":102},[68,171508,171509],{"class":85}," content.lower().split()\n",[68,171511,171512,171515,171517],{"class":70,"line":320},[68,171513,171514],{"class":85},"counter ",[68,171516,869],{"class":102},[68,171518,89444],{"class":85},[68,171520,171521],{"class":70,"line":2915},[68,171522,4000],{"emptyLinePlaceholder":1679},[68,171524,171525,171527,171530,171532],{"class":70,"line":2921},[68,171526,4624],{"class":102},[68,171528,171529],{"class":85}," word ",[68,171531,27637],{"class":102},[68,171533,171534],{"class":85}," words:\n",[68,171536,171537,171540,171542,171545,171548,171550,171553],{"class":70,"line":2933},[68,171538,171539],{"class":85},"    word ",[68,171541,869],{"class":102},[68,171543,171544],{"class":85}," word.strip(",[68,171546,171547],{"class":872},"\".,!?;:",[68,171549,157815],{"class":92},[68,171551,171552],{"class":872},"'()[]\"",[68,171554,1757],{"class":85},[68,171556,171557,171559,171561],{"class":70,"line":3214},[68,171558,4700],{"class":102},[68,171560,40523],{"class":102},[68,171562,171563],{"class":85}," word:\n",[68,171565,171566],{"class":70,"line":3219},[68,171567,149832],{"class":102},[68,171569,171570,171573,171575,171578,171580,171582,171584],{"class":70,"line":3225},[68,171571,171572],{"class":85},"    counter[word] ",[68,171574,869],{"class":102},[68,171576,171577],{"class":85}," counter.get(word, ",[68,171579,600],{"class":92},[68,171581,15311],{"class":85},[68,171583,2217],{"class":102},[68,171585,57283],{"class":92},[68,171587,171588],{"class":70,"line":3230},[68,171589,4000],{"emptyLinePlaceholder":1679},[68,171591,171592,171595,171597,171599,171602,171604,171606,171608,171610,171612,171614,171616,171618],{"class":70,"line":3244},[68,171593,171594],{"class":85},"items ",[68,171596,869],{"class":102},[68,171598,164924],{"class":92},[68,171600,171601],{"class":85},"(counter.items(), ",[68,171603,155266],{"class":6815},[68,171605,155269],{"class":102},[68,171607,155272],{"class":85},[68,171609,99],{"class":92},[68,171611,113775],{"class":85},[68,171613,164848],{"class":6815},[68,171615,869],{"class":102},[68,171617,33069],{"class":92},[68,171619,1757],{"class":85},[68,171621,171622],{"class":70,"line":3249},[68,171623,4000],{"emptyLinePlaceholder":1679},[68,171625,171626,171628,171631,171633,171636,171638],{"class":70,"line":3255},[68,171627,4624],{"class":102},[68,171629,171630],{"class":85}," word, count ",[68,171632,27637],{"class":102},[68,171634,171635],{"class":85}," items[:",[68,171637,2182],{"class":92},[68,171639,167075],{"class":85},[68,171641,171642,171644],{"class":70,"line":3276},[68,171643,32892],{"class":92},[68,171645,171646],{"class":85},"(word, count)\n",[14,171648,171650],{"id":171649},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[58,171652,171654],{"className":31971,"code":171653,"language":31973,"meta":63,"style":63},"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",[65,171655,171656,171662,171672,171676,171688,171692,171696,171704,171714,171720,171724,171754,171764,171768,171772,171780,171810,171834,171838,171842,171850,171879,171884],{"__ignoreMap":63},[68,171657,171658,171660],{"class":70,"line":71},[68,171659,31985],{"class":102},[68,171661,148411],{"class":85},[68,171663,171664,171666,171668,171670],{"class":70,"line":78},[68,171665,32330],{"class":102},[68,171667,109884],{"class":85},[68,171669,31985],{"class":102},[68,171671,109889],{"class":85},[68,171673,171674],{"class":70,"line":89},[68,171675,4000],{"emptyLinePlaceholder":1679},[68,171677,171678,171680,171682,171684,171686],{"class":70,"line":115},[68,171679,153144],{"class":92},[68,171681,15161],{"class":102},[68,171683,110118],{"class":85},[68,171685,153151],{"class":872},[68,171687,1757],{"class":85},[68,171689,171690],{"class":70,"line":280},[68,171691,4000],{"emptyLinePlaceholder":1679},[68,171693,171694],{"class":70,"line":301},[68,171695,4000],{"emptyLinePlaceholder":1679},[68,171697,171698,171700,171702],{"class":70,"line":320},[68,171699,33540],{"class":102},[68,171701,153168],{"class":587},[68,171703,33546],{"class":85},[68,171705,171706,171708,171710,171712],{"class":70,"line":2915},[68,171707,4700],{"class":102},[68,171709,40523],{"class":102},[68,171711,153179],{"class":92},[68,171713,153182],{"class":85},[68,171715,171716,171718],{"class":70,"line":2921},[68,171717,16349],{"class":102},[68,171719,53423],{"class":85},[68,171721,171722],{"class":70,"line":2933},[68,171723,4000],{"emptyLinePlaceholder":1679},[68,171725,171726,171728,171730,171732,171734,171736,171738,171740,171742,171744,171746,171748,171750,171752],{"class":70,"line":3214},[68,171727,35771],{"class":102},[68,171729,148111],{"class":92},[68,171731,997],{"class":85},[68,171733,153144],{"class":92},[68,171735,1002],{"class":85},[68,171737,148121],{"class":872},[68,171739,1002],{"class":85},[68,171741,148126],{"class":6815},[68,171743,869],{"class":102},[68,171745,148131],{"class":872},[68,171747,15311],{"class":85},[68,171749,32976],{"class":102},[68,171751,149473],{"class":6815},[68,171753,5338],{"class":85},[68,171755,171756,171758,171760,171762],{"class":70,"line":3219},[68,171757,16349],{"class":102},[68,171759,149484],{"class":85},[68,171761,46947],{"class":6815},[68,171763,1757],{"class":85},[68,171765,171766],{"class":70,"line":3225},[68,171767,4000],{"emptyLinePlaceholder":1679},[68,171769,171770],{"class":70,"line":3230},[68,171771,4000],{"emptyLinePlaceholder":1679},[68,171773,171774,171776,171778],{"class":70,"line":3244},[68,171775,33540],{"class":102},[68,171777,153278],{"class":587},[68,171779,153281],{"class":85},[68,171781,171782,171784,171786,171788,171790,171792,171794,171796,171798,171800,171802,171804,171806,171808],{"class":70,"line":3249},[68,171783,35771],{"class":102},[68,171785,148111],{"class":92},[68,171787,997],{"class":85},[68,171789,153144],{"class":92},[68,171791,1002],{"class":85},[68,171793,153296],{"class":872},[68,171795,1002],{"class":85},[68,171797,148126],{"class":6815},[68,171799,869],{"class":102},[68,171801,148131],{"class":872},[68,171803,15311],{"class":85},[68,171805,32976],{"class":102},[68,171807,149473],{"class":6815},[68,171809,5338],{"class":85},[68,171811,171812,171814,171816,171818,171820,171822,171824,171826,171828,171830,171832],{"class":70,"line":3255},[68,171813,153317],{"class":85},[68,171815,46947],{"class":6815},[68,171817,1002],{"class":85},[68,171819,148457],{"class":6815},[68,171821,869],{"class":102},[68,171823,35580],{"class":92},[68,171825,1002],{"class":85},[68,171827,153332],{"class":6815},[68,171829,869],{"class":102},[68,171831,267],{"class":92},[68,171833,1757],{"class":85},[68,171835,171836],{"class":70,"line":3276},[68,171837,4000],{"emptyLinePlaceholder":1679},[68,171839,171840],{"class":70,"line":3281},[68,171841,4000],{"emptyLinePlaceholder":1679},[68,171843,171844,171846,171848],{"class":70,"line":3295},[68,171845,161036],{"class":85},[68,171847,869],{"class":102},[68,171849,154362],{"class":85},[68,171851,171852,171855,171857,171859,171861,171863,171865,171867,171869,171871,171873,171875,171877],{"class":70,"line":3300},[68,171853,171854],{"class":85},"students.append({",[68,171856,64262],{"class":872},[68,171858,96],{"class":85},[68,171860,151208],{"class":872},[68,171862,1002],{"class":85},[68,171864,70706],{"class":872},[68,171866,96],{"class":85},[68,171868,2386],{"class":92},[68,171870,1002],{"class":85},[68,171872,152792],{"class":872},[68,171874,96],{"class":85},[68,171876,2724],{"class":92},[68,171878,166472],{"class":85},[68,171880,171881],{"class":70,"line":3329},[68,171882,171883],{"class":85},"save_students(students)\n",[68,171885,171886,171888,171890,171893],{"class":70,"line":3334},[68,171887,32008],{"class":92},[68,171889,997],{"class":85},[68,171891,171892],{"class":872},"\"保存成功\"",[68,171894,1757],{"class":85},[14,171896,171898],{"id":171897},"_814-易错点","8.14 易错点",[48,171900,171901,171905,171911,171916,171923,171930],{},[51,171902,171903,170164],{},[65,171904,2531],{},[51,171906,171907,171908,29978],{},"读写中文要指定 ",[65,171909,171910],{},"encoding=\"utf-8\"",[51,171912,171913,171914,29978],{},"打开文件后要关闭，推荐使用 ",[65,171915,109406],{},[51,171917,171918,171919,171922],{},"读取大文件不要直接 ",[65,171920,171921],{},"read()"," 全部内容。",[51,171924,171925,171926,171929],{},"Windows 写 CSV 时建议加 ",[65,171927,171928],{},"newline=\"\"","，避免空行。",[51,171931,171932],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171934,171936],{"id":171935},"_815-本章练习","8.15 本章练习",[48,171938,171939,171946,171951,171954,171957],{},[51,171940,171941,171942,171945],{},"写入一个 ",[65,171943,171944],{},"students.txt","，每行保存一个学生姓名。",[51,171947,105928,171948,171950],{},[65,171949,171944],{}," 并输出所有学生。",[51,171952,171953],{},"把学生列表保存为 JSON 文件。",[51,171955,171956],{},"从 JSON 文件读取学生数据，计算平均分。",[51,171958,171959,171960,171963,171964,171967],{},"写一个日志函数 ",[65,171961,171962],{},"write_log(message)","，每次调用向 ",[65,171965,171966],{},"app.log"," 追加一行。",[1652,171969,171970],{},"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":63,"searchDepth":78,"depth":78,"links":171972},[171973,171974,171978,171979,171985,171986,171987,171988,171989,171990,171991,171992,171993,171994,171995],{"id":169484,"depth":78,"text":169485},{"id":169525,"depth":78,"text":169526,"children":171975},[171976,171977],{"id":169529,"depth":89,"text":169530},{"id":169563,"depth":89,"text":169564},{"id":169677,"depth":78,"text":169678},{"id":169770,"depth":78,"text":169771,"children":171980},[171981,171982,171983,171984],{"id":169774,"depth":89,"text":169775},{"id":169861,"depth":89,"text":169862},{"id":169931,"depth":89,"text":169932},{"id":170025,"depth":89,"text":170026},{"id":170095,"depth":78,"text":170096},{"id":170158,"depth":78,"text":170159},{"id":170319,"depth":78,"text":170320},{"id":170382,"depth":78,"text":170383},{"id":170498,"depth":78,"text":170499},{"id":170708,"depth":78,"text":170709},{"id":171020,"depth":78,"text":171021},{"id":171431,"depth":78,"text":171432},{"id":171649,"depth":78,"text":171650},{"id":171897,"depth":78,"text":171898},{"id":171935,"depth":78,"text":171936},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169476,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172002,"title":172003,"body":172004,"description":1676,"extension":1677,"meta":174190,"navigation":1679,"path":174191,"seo":174192,"stem":174193,"__hash__":174194},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172005,"toc":174157},[172006,172009,172013,172016,172019,172111,172113,172132,172137,172141,172144,172147,172176,172183,172186,172190,172193,172222,172224,172276,172282,172335,172339,172437,172440,172507,172511,172568,172570,172576,172580,172585,172591,172682,172687,172691,172694,172772,172775,172813,172817,172935,172938,172942,172945,172990,172993,172997,173002,173008,173058,173061,173092,173096,173100,173130,173134,173169,173173,173208,173248,173252,173268,173271,173275,173279,173358,173362,173403,173407,173462,173466,173500,173504,173534,173543,173550,173556,173613,173616,173624,173627,173631,173638,173641,173647,173650,173667,173672,173676,173682,173695,173698,173735,173738,173749,173752,173766,173769,173783,173787,173794,173827,173830,173832,173838,173841,173845,173847,173853,173858,174031,174035,174098,174102,174126,174130,174154],[10,172007,172003],{"id":172008},"_9-异常模块与包",[14,172010,172012],{"id":172011},"_91-什么是异常","9.1 什么是异常",[19,172014,172015],{},"异常是程序运行过程中出现的错误。",[19,172017,172018],{},"常见异常：",[120,172020,172021,172030],{},[123,172022,172023],{},[126,172024,172025,172028],{},[129,172026,172027],{},"异常",[129,172029,27463],{},[137,172031,172032,172042,172052,172061,172071,172081,172091,172101],{},[126,172033,172034,172039],{},[142,172035,172036],{},[65,172037,172038],{},"NameError",[142,172040,172041],{},"使用了未定义变量",[126,172043,172044,172049],{},[142,172045,172046],{},[65,172047,172048],{},"TypeError",[142,172050,172051],{},"类型不匹配",[126,172053,172054,172058],{},[142,172055,172056],{},[65,172057,156154],{},[142,172059,172060],{},"值不合法",[126,172062,172063,172068],{},[142,172064,172065],{},[65,172066,172067],{},"IndexError",[142,172069,172070],{},"列表索引越界",[126,172072,172073,172078],{},[142,172074,172075],{},[65,172076,172077],{},"KeyError",[142,172079,172080],{},"字典 key 不存在",[126,172082,172083,172088],{},[142,172084,172085],{},[65,172086,172087],{},"FileNotFoundError",[142,172089,172090],{},"文件不存在",[126,172092,172093,172098],{},[142,172094,172095],{},[65,172096,172097],{},"ZeroDivisionError",[142,172099,172100],{},"除数为 0",[126,172102,172103,172108],{},[142,172104,172105],{},[65,172106,172107],{},"ImportError",[142,172109,172110],{},"导入失败",[19,172112,16731],{},[58,172114,172116],{"className":31971,"code":172115,"language":31973,"meta":63,"style":63},"num = int(\"abc\")\n",[65,172117,172118],{"__ignoreMap":63},[68,172119,172120,172122,172124,172126,172128,172130],{"class":70,"line":71},[68,172121,157107],{"class":85},[68,172123,869],{"class":102},[68,172125,3982],{"class":92},[68,172127,997],{"class":85},[68,172129,157200],{"class":872},[68,172131,1757],{"class":85},[19,172133,172134,172135,29978],{},"会触发 ",[65,172136,156154],{},[14,172138,172140],{"id":172139},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172142,172143],{},"如果不处理异常，程序会直接终止。",[19,172145,172146],{},"例如用户输入年龄：",[58,172148,172150],{"className":31971,"code":172149,"language":31973,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[65,172151,172152,172170],{"__ignoreMap":63},[68,172153,172154,172156,172158,172160,172162,172164,172166,172168],{"class":70,"line":71},[68,172155,147866],{"class":85},[68,172157,869],{"class":102},[68,172159,3982],{"class":92},[68,172161,997],{"class":85},[68,172163,55405],{"class":92},[68,172165,997],{"class":85},[68,172167,153714],{"class":872},[68,172169,32090],{"class":85},[68,172171,172172,172174],{"class":70,"line":78},[68,172173,32008],{"class":92},[68,172175,157081],{"class":85},[19,172177,172178,172179,172182],{},"用户输入 ",[65,172180,172181],{},"abc","，程序就会报错退出。",[19,172184,172185],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172187,172189],{"id":172188},"_93-try-except","9.3 try except",[19,172191,172192],{},"基础语法：",[58,172194,172196],{"className":31971,"code":172195,"language":31973,"meta":63,"style":63},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[65,172197,172198,172205,172210,172217],{"__ignoreMap":63},[68,172199,172200,172203],{"class":70,"line":71},[68,172201,172202],{"class":102},"try",[68,172204,5338],{"class":85},[68,172206,172207],{"class":70,"line":78},[68,172208,172209],{"class":85},"    可能出错的代码\n",[68,172211,172212,172215],{"class":70,"line":89},[68,172213,172214],{"class":102},"except",[68,172216,5338],{"class":85},[68,172218,172219],{"class":70,"line":115},[68,172220,172221],{"class":85},"    出错后的处理代码\n",[19,172223,16731],{},[58,172225,172227],{"className":31971,"code":172226,"language":31973,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[65,172228,172229,172235,172253,172259,172265],{"__ignoreMap":63},[68,172230,172231,172233],{"class":70,"line":71},[68,172232,172202],{"class":102},[68,172234,5338],{"class":85},[68,172236,172237,172239,172241,172243,172245,172247,172249,172251],{"class":70,"line":78},[68,172238,153706],{"class":85},[68,172240,869],{"class":102},[68,172242,3982],{"class":92},[68,172244,997],{"class":85},[68,172246,55405],{"class":92},[68,172248,997],{"class":85},[68,172250,153714],{"class":872},[68,172252,32090],{"class":85},[68,172254,172255,172257],{"class":70,"line":89},[68,172256,32892],{"class":92},[68,172258,157081],{"class":85},[68,172260,172261,172263],{"class":70,"line":115},[68,172262,172214],{"class":102},[68,172264,5338],{"class":85},[68,172266,172267,172269,172271,172274],{"class":70,"line":280},[68,172268,32892],{"class":92},[68,172270,997],{"class":85},[68,172272,172273],{"class":872},"\"年龄必须是数字\"",[68,172275,1757],{"class":85},[19,172277,172278,172279,172281],{},"不建议裸写 ",[65,172280,172214],{},"，最好指定异常类型。",[58,172283,172285],{"className":31971,"code":172284,"language":31973,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[65,172286,172287,172293,172311,172317,172325],{"__ignoreMap":63},[68,172288,172289,172291],{"class":70,"line":71},[68,172290,172202],{"class":102},[68,172292,5338],{"class":85},[68,172294,172295,172297,172299,172301,172303,172305,172307,172309],{"class":70,"line":78},[68,172296,153706],{"class":85},[68,172298,869],{"class":102},[68,172300,3982],{"class":92},[68,172302,997],{"class":85},[68,172304,55405],{"class":92},[68,172306,997],{"class":85},[68,172308,153714],{"class":872},[68,172310,32090],{"class":85},[68,172312,172313,172315],{"class":70,"line":89},[68,172314,32892],{"class":92},[68,172316,157081],{"class":85},[68,172318,172319,172321,172323],{"class":70,"line":115},[68,172320,172214],{"class":102},[68,172322,153546],{"class":92},[68,172324,5338],{"class":85},[68,172326,172327,172329,172331,172333],{"class":70,"line":280},[68,172328,32892],{"class":92},[68,172330,997],{"class":85},[68,172332,172273],{"class":872},[68,172334,1757],{"class":85},[14,172336,172338],{"id":172337},"_94-捕获多个异常","9.4 捕获多个异常",[58,172340,172342],{"className":31971,"code":172341,"language":31973,"meta":63,"style":63},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[65,172343,172344,172350,172371,172391,172398,172406,172417,172426],{"__ignoreMap":63},[68,172345,172346,172348],{"class":70,"line":71},[68,172347,172202],{"class":102},[68,172349,5338],{"class":85},[68,172351,172352,172355,172357,172359,172361,172363,172365,172367,172369],{"class":70,"line":78},[68,172353,172354],{"class":85},"    nums ",[68,172356,869],{"class":102},[68,172358,53811],{"class":85},[68,172360,99],{"class":92},[68,172362,1002],{"class":85},[68,172364,267],{"class":92},[68,172366,1002],{"class":85},[68,172368,288],{"class":92},[68,172370,34839],{"class":85},[68,172372,172373,172376,172378,172380,172382,172384,172386,172389],{"class":70,"line":89},[68,172374,172375],{"class":85},"    index ",[68,172377,869],{"class":102},[68,172379,3982],{"class":92},[68,172381,997],{"class":85},[68,172383,55405],{"class":92},[68,172385,997],{"class":85},[68,172387,172388],{"class":872},"\"请输入索引:\"",[68,172390,32090],{"class":85},[68,172392,172393,172395],{"class":70,"line":115},[68,172394,32892],{"class":92},[68,172396,172397],{"class":85},"(nums[index])\n",[68,172399,172400,172402,172404],{"class":70,"line":280},[68,172401,172214],{"class":102},[68,172403,153546],{"class":92},[68,172405,5338],{"class":85},[68,172407,172408,172410,172412,172415],{"class":70,"line":301},[68,172409,32892],{"class":92},[68,172411,997],{"class":85},[68,172413,172414],{"class":872},"\"索引必须是整数\"",[68,172416,1757],{"class":85},[68,172418,172419,172421,172424],{"class":70,"line":320},[68,172420,172214],{"class":102},[68,172422,172423],{"class":92}," IndexError",[68,172425,5338],{"class":85},[68,172427,172428,172430,172432,172435],{"class":70,"line":2915},[68,172429,32892],{"class":92},[68,172431,997],{"class":85},[68,172433,172434],{"class":872},"\"索引越界\"",[68,172436,1757],{"class":85},[19,172438,172439],{},"多个异常使用相同处理逻辑：",[58,172441,172443],{"className":31971,"code":172442,"language":31973,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[65,172444,172445,172451,172469,172482,172496],{"__ignoreMap":63},[68,172446,172447,172449],{"class":70,"line":71},[68,172448,172202],{"class":102},[68,172450,5338],{"class":85},[68,172452,172453,172455,172457,172459,172461,172463,172465,172467],{"class":70,"line":78},[68,172454,47186],{"class":85},[68,172456,869],{"class":102},[68,172458,3982],{"class":92},[68,172460,997],{"class":85},[68,172462,55405],{"class":92},[68,172464,997],{"class":85},[68,172466,157116],{"class":872},[68,172468,32090],{"class":85},[68,172470,172471,172473,172475,172477,172479],{"class":70,"line":89},[68,172472,32892],{"class":92},[68,172474,997],{"class":85},[68,172476,2182],{"class":92},[68,172478,157366],{"class":102},[68,172480,172481],{"class":85}," num)\n",[68,172483,172484,172486,172488,172490,172492,172494],{"class":70,"line":115},[68,172485,172214],{"class":102},[68,172487,3260],{"class":85},[68,172489,156154],{"class":92},[68,172491,1002],{"class":85},[68,172493,172097],{"class":92},[68,172495,32379],{"class":85},[68,172497,172498,172500,172502,172505],{"class":70,"line":280},[68,172499,32892],{"class":92},[68,172501,997],{"class":85},[68,172503,172504],{"class":872},"\"输入不合法\"",[68,172506,1757],{"class":85},[14,172508,172510],{"id":172509},"_95-获取异常信息","9.5 获取异常信息",[58,172512,172514],{"className":31971,"code":172513,"language":31973,"meta":63,"style":63},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[65,172515,172516,172522,172536,172547],{"__ignoreMap":63},[68,172517,172518,172520],{"class":70,"line":71},[68,172519,172202],{"class":102},[68,172521,5338],{"class":85},[68,172523,172524,172526,172528,172530,172532,172534],{"class":70,"line":78},[68,172525,47186],{"class":85},[68,172527,869],{"class":102},[68,172529,3982],{"class":92},[68,172531,997],{"class":85},[68,172533,157200],{"class":872},[68,172535,1757],{"class":85},[68,172537,172538,172540,172542,172544],{"class":70,"line":89},[68,172539,172214],{"class":102},[68,172541,153546],{"class":92},[68,172543,66187],{"class":102},[68,172545,172546],{"class":85}," e:\n",[68,172548,172549,172551,172553,172555,172558,172560,172562,172564,172566],{"class":70,"line":115},[68,172550,32892],{"class":92},[68,172552,997],{"class":85},[68,172554,1801],{"class":102},[68,172556,172557],{"class":872},"\"出错了:",[68,172559,2632],{"class":92},[68,172561,1821],{"class":85},[68,172563,2681],{"class":92},[68,172565,1987],{"class":872},[68,172567,1757],{"class":85},[19,172569,147777],{},[58,172571,172574],{"className":172572,"code":172573,"language":6786,"meta":63},[6784],"出错了:invalid literal for int() with base 10: 'abc'\n",[65,172575,172573],{"__ignoreMap":63},[14,172577,172579],{"id":172578},"_96-else和finally","9.6 else和finally",[19,172581,172582,172584],{},[65,172583,3303],{},"：没有异常时执行。",[19,172586,172587,172590],{},[65,172588,172589],{},"finally","：无论是否异常都会执行。",[58,172592,172594],{"className":31971,"code":172593,"language":31973,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[65,172595,172596,172602,172620,172628,172638,172644,172665,172671],{"__ignoreMap":63},[68,172597,172598,172600],{"class":70,"line":71},[68,172599,172202],{"class":102},[68,172601,5338],{"class":85},[68,172603,172604,172606,172608,172610,172612,172614,172616,172618],{"class":70,"line":78},[68,172605,47186],{"class":85},[68,172607,869],{"class":102},[68,172609,3982],{"class":92},[68,172611,997],{"class":85},[68,172613,55405],{"class":92},[68,172615,997],{"class":85},[68,172617,157116],{"class":872},[68,172619,32090],{"class":85},[68,172621,172622,172624,172626],{"class":70,"line":89},[68,172623,172214],{"class":102},[68,172625,153546],{"class":92},[68,172627,5338],{"class":85},[68,172629,172630,172632,172634,172636],{"class":70,"line":115},[68,172631,32892],{"class":92},[68,172633,997],{"class":85},[68,172635,154534],{"class":872},[68,172637,1757],{"class":85},[68,172639,172640,172642],{"class":70,"line":280},[68,172641,3303],{"class":102},[68,172643,5338],{"class":85},[68,172645,172646,172648,172650,172652,172655,172657,172659,172661,172663],{"class":70,"line":301},[68,172647,32892],{"class":92},[68,172649,997],{"class":85},[68,172651,1801],{"class":102},[68,172653,172654],{"class":872},"\"输入正确:",[68,172656,2632],{"class":92},[68,172658,3267],{"class":85},[68,172660,2681],{"class":92},[68,172662,1987],{"class":872},[68,172664,1757],{"class":85},[68,172666,172667,172669],{"class":70,"line":320},[68,172668,172589],{"class":102},[68,172670,5338],{"class":85},[68,172672,172673,172675,172677,172680],{"class":70,"line":2915},[68,172674,32892],{"class":92},[68,172676,997],{"class":85},[68,172678,172679],{"class":872},"\"程序结束\"",[68,172681,1757],{"class":85},[19,172683,172684,172686],{},[65,172685,172589],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172688,172690],{"id":172689},"_97-抛出异常","9.7 抛出异常",[19,172692,172693],{},"程序可以主动抛出异常。",[58,172695,172697],{"className":31971,"code":172696,"language":31973,"meta":63,"style":63},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[65,172698,172699,172708,172720,172733,172753,172757,172761],{"__ignoreMap":63},[68,172700,172701,172703,172706],{"class":70,"line":71},[68,172702,33540],{"class":102},[68,172704,172705],{"class":587}," set_age",[68,172707,162735],{"class":85},[68,172709,172710,172712,172714,172716,172718],{"class":70,"line":78},[68,172711,4700],{"class":102},[68,172713,17302],{"class":85},[68,172715,861],{"class":102},[68,172717,5692],{"class":92},[68,172719,5338],{"class":85},[68,172721,172722,172724,172726,172728,172731],{"class":70,"line":89},[68,172723,105005],{"class":102},[68,172725,153546],{"class":92},[68,172727,997],{"class":85},[68,172729,172730],{"class":872},"\"年龄不能为负数\"",[68,172732,1757],{"class":85},[68,172734,172735,172737,172739,172741,172743,172745,172747,172749,172751],{"class":70,"line":115},[68,172736,32892],{"class":92},[68,172738,997],{"class":85},[68,172740,1801],{"class":102},[68,172742,163303],{"class":872},[68,172744,2632],{"class":92},[68,172746,71803],{"class":85},[68,172748,2681],{"class":92},[68,172750,1987],{"class":872},[68,172752,1757],{"class":85},[68,172754,172755],{"class":70,"line":280},[68,172756,4000],{"emptyLinePlaceholder":1679},[68,172758,172759],{"class":70,"line":301},[68,172760,4000],{"emptyLinePlaceholder":1679},[68,172762,172763,172766,172768,172770],{"class":70,"line":320},[68,172764,172765],{"class":85},"set_age(",[68,172767,2268],{"class":102},[68,172769,99],{"class":92},[68,172771,1757],{"class":85},[19,172773,172774],{},"调用者可以捕获：",[58,172776,172778],{"className":31971,"code":172777,"language":31973,"meta":63,"style":63},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[65,172779,172780,172786,172797,172807],{"__ignoreMap":63},[68,172781,172782,172784],{"class":70,"line":71},[68,172783,172202],{"class":102},[68,172785,5338],{"class":85},[68,172787,172788,172791,172793,172795],{"class":70,"line":78},[68,172789,172790],{"class":85},"    set_age(",[68,172792,2268],{"class":102},[68,172794,99],{"class":92},[68,172796,1757],{"class":85},[68,172798,172799,172801,172803,172805],{"class":70,"line":89},[68,172800,172214],{"class":102},[68,172802,153546],{"class":92},[68,172804,66187],{"class":102},[68,172806,172546],{"class":85},[68,172808,172809,172811],{"class":70,"line":115},[68,172810,32892],{"class":92},[68,172812,68581],{"class":85},[14,172814,172816],{"id":172815},"_98-自定义异常","9.8 自定义异常",[58,172818,172820],{"className":31971,"code":172819,"language":31973,"meta":63,"style":63},"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",[65,172821,172822,172836,172840,172844,172848,172856,172866,172877,172887,172891,172895,172901,172918,172929],{"__ignoreMap":63},[68,172823,172824,172826,172829,172831,172834],{"class":70,"line":71},[68,172825,16291],{"class":102},[68,172827,172828],{"class":587}," BalanceNotEnoughError",[68,172830,997],{"class":85},[68,172832,172833],{"class":92},"Exception",[68,172835,32379],{"class":85},[68,172837,172838],{"class":70,"line":78},[68,172839,150857],{"class":102},[68,172841,172842],{"class":70,"line":89},[68,172843,4000],{"emptyLinePlaceholder":1679},[68,172845,172846],{"class":70,"line":115},[68,172847,4000],{"emptyLinePlaceholder":1679},[68,172849,172850,172852,172854],{"class":70,"line":280},[68,172851,33540],{"class":102},[68,172853,151506],{"class":587},[68,172855,164132],{"class":85},[68,172857,172858,172860,172862,172864],{"class":70,"line":301},[68,172859,4700],{"class":102},[68,172861,151462],{"class":85},[68,172863,2695],{"class":102},[68,172865,163909],{"class":85},[68,172867,172868,172870,172873,172875],{"class":70,"line":320},[68,172869,105005],{"class":102},[68,172871,172872],{"class":85}," BalanceNotEnoughError(",[68,172874,151557],{"class":872},[68,172876,1757],{"class":85},[68,172878,172879,172881,172883,172885],{"class":70,"line":2915},[68,172880,5689],{"class":102},[68,172882,164139],{"class":85},[68,172884,2268],{"class":102},[68,172886,151495],{"class":85},[68,172888,172889],{"class":70,"line":2921},[68,172890,4000],{"emptyLinePlaceholder":1679},[68,172892,172893],{"class":70,"line":2933},[68,172894,4000],{"emptyLinePlaceholder":1679},[68,172896,172897,172899],{"class":70,"line":3214},[68,172898,172202],{"class":102},[68,172900,5338],{"class":85},[68,172902,172903,172905,172907,172910,172912,172914,172916],{"class":70,"line":3219},[68,172904,163810],{"class":85},[68,172906,869],{"class":102},[68,172908,172909],{"class":85}," withdraw(",[68,172911,2047],{"class":92},[68,172913,1002],{"class":85},[68,172915,3324],{"class":92},[68,172917,1757],{"class":85},[68,172919,172920,172922,172925,172927],{"class":70,"line":3225},[68,172921,172214],{"class":102},[68,172923,172924],{"class":85}," BalanceNotEnoughError ",[68,172926,32976],{"class":102},[68,172928,172546],{"class":85},[68,172930,172931,172933],{"class":70,"line":3230},[68,172932,32892],{"class":92},[68,172934,68581],{"class":85},[19,172936,172937],{},"入门阶段大多数情况使用内置异常即可。",[14,172939,172941],{"id":172940},"_99-traceback","9.9 traceback",[19,172943,172944],{},"调试时可以输出完整异常堆栈。",[58,172946,172948],{"className":31971,"code":172947,"language":31973,"meta":63,"style":63},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[65,172949,172950,172957,172961,172967,172977,172985],{"__ignoreMap":63},[68,172951,172952,172954],{"class":70,"line":71},[68,172953,31985],{"class":102},[68,172955,172956],{"class":85}," traceback\n",[68,172958,172959],{"class":70,"line":78},[68,172960,4000],{"emptyLinePlaceholder":1679},[68,172962,172963,172965],{"class":70,"line":89},[68,172964,172202],{"class":102},[68,172966,5338],{"class":85},[68,172968,172969,172971,172973,172975],{"class":70,"line":115},[68,172970,3586],{"class":92},[68,172972,997],{"class":85},[68,172974,157200],{"class":872},[68,172976,1757],{"class":85},[68,172978,172979,172981,172983],{"class":70,"line":280},[68,172980,172214],{"class":102},[68,172982,153546],{"class":92},[68,172984,5338],{"class":85},[68,172986,172987],{"class":70,"line":301},[68,172988,172989],{"class":85},"    traceback.print_exc()\n",[19,172991,172992],{},"日志系统中常把异常堆栈记录到文件。",[14,172994,172996],{"id":172995},"_910-什么是模块","9.10 什么是模块",[19,172998,172999,173000,127556],{},"模块就是一个 ",[65,173001,147672],{},[19,173003,173004,173005,26213],{},"例如创建 ",[65,173006,173007],{},"my_math.py",[58,173009,173011],{"className":31971,"code":173010,"language":31973,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[65,173012,173013,173021,173031,173035,173039,173048],{"__ignoreMap":63},[68,173014,173015,173017,173019],{"class":70,"line":71},[68,173016,33540],{"class":102},[68,173018,6808],{"class":587},[68,173020,152413],{"class":85},[68,173022,173023,173025,173027,173029],{"class":70,"line":78},[68,173024,5689],{"class":102},[68,173026,12467],{"class":85},[68,173028,2217],{"class":102},[68,173030,152424],{"class":85},[68,173032,173033],{"class":70,"line":89},[68,173034,4000],{"emptyLinePlaceholder":1679},[68,173036,173037],{"class":70,"line":115},[68,173038,4000],{"emptyLinePlaceholder":1679},[68,173040,173041,173043,173046],{"class":70,"line":280},[68,173042,33540],{"class":102},[68,173044,173045],{"class":587}," sub",[68,173047,152413],{"class":85},[68,173049,173050,173052,173054,173056],{"class":70,"line":301},[68,173051,5689],{"class":102},[68,173053,12467],{"class":85},[68,173055,2268],{"class":102},[68,173057,152424],{"class":85},[19,173059,173060],{},"在另一个文件中导入：",[58,173062,173064],{"className":31971,"code":173063,"language":31973,"meta":63,"style":63},"import my_math\n\nprint(my_math.add(1, 2))\n",[65,173065,173066,173073,173077],{"__ignoreMap":63},[68,173067,173068,173070],{"class":70,"line":71},[68,173069,31985],{"class":102},[68,173071,173072],{"class":85}," my_math\n",[68,173074,173075],{"class":70,"line":78},[68,173076,4000],{"emptyLinePlaceholder":1679},[68,173078,173079,173081,173084,173086,173088,173090],{"class":70,"line":89},[68,173080,32008],{"class":92},[68,173082,173083],{"class":85},"(my_math.add(",[68,173085,99],{"class":92},[68,173087,1002],{"class":85},[68,173089,267],{"class":92},[68,173091,32090],{"class":85},[14,173093,173095],{"id":173094},"_911-import导入","9.11 import导入",[43,173097,173099],{"id":173098},"_9111-导入模块","9.11.1 导入模块",[58,173101,173103],{"className":31971,"code":173102,"language":31973,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\n",[65,173104,173105,173111,173115],{"__ignoreMap":63},[68,173106,173107,173109],{"class":70,"line":71},[68,173108,31985],{"class":102},[68,173110,46921],{"class":85},[68,173112,173113],{"class":70,"line":78},[68,173114,4000],{"emptyLinePlaceholder":1679},[68,173116,173117,173119,173122,173124,173126,173128],{"class":70,"line":89},[68,173118,32008],{"class":92},[68,173120,173121],{"class":85},"(random.randint(",[68,173123,99],{"class":92},[68,173125,1002],{"class":85},[68,173127,2182],{"class":92},[68,173129,32090],{"class":85},[43,173131,173133],{"id":173132},"_9112-导入指定内容","9.11.2 导入指定内容",[58,173135,173137],{"className":31971,"code":173136,"language":31973,"meta":63,"style":63},"from random import randint\n\nprint(randint(1, 10))\n",[65,173138,173139,173150,173154],{"__ignoreMap":63},[68,173140,173141,173143,173145,173147],{"class":70,"line":71},[68,173142,32330],{"class":102},[68,173144,59380],{"class":85},[68,173146,31985],{"class":102},[68,173148,173149],{"class":85}," randint\n",[68,173151,173152],{"class":70,"line":78},[68,173153,4000],{"emptyLinePlaceholder":1679},[68,173155,173156,173158,173161,173163,173165,173167],{"class":70,"line":89},[68,173157,32008],{"class":92},[68,173159,173160],{"class":85},"(randint(",[68,173162,99],{"class":92},[68,173164,1002],{"class":85},[68,173166,2182],{"class":92},[68,173168,32090],{"class":85},[43,173170,173172],{"id":173171},"_9113-起别名","9.11.3 起别名",[58,173174,173176],{"className":31971,"code":173175,"language":31973,"meta":63,"style":63},"import random as rd\n\nprint(rd.randint(1, 10))\n",[65,173177,173178,173189,173193],{"__ignoreMap":63},[68,173179,173180,173182,173184,173186],{"class":70,"line":71},[68,173181,31985],{"class":102},[68,173183,59380],{"class":85},[68,173185,32976],{"class":102},[68,173187,173188],{"class":85}," rd\n",[68,173190,173191],{"class":70,"line":78},[68,173192,4000],{"emptyLinePlaceholder":1679},[68,173194,173195,173197,173200,173202,173204,173206],{"class":70,"line":89},[68,173196,32008],{"class":92},[68,173198,173199],{"class":85},"(rd.randint(",[68,173201,99],{"class":92},[68,173203,1002],{"class":85},[68,173205,2182],{"class":92},[68,173207,32090],{"class":85},[58,173209,173211],{"className":31971,"code":173210,"language":31973,"meta":63,"style":63},"from random import randint as rint\n\nprint(rint(1, 10))\n",[65,173212,173213,173229,173233],{"__ignoreMap":63},[68,173214,173215,173217,173219,173221,173224,173226],{"class":70,"line":71},[68,173216,32330],{"class":102},[68,173218,59380],{"class":85},[68,173220,31985],{"class":102},[68,173222,173223],{"class":85}," randint ",[68,173225,32976],{"class":102},[68,173227,173228],{"class":85}," rint\n",[68,173230,173231],{"class":70,"line":78},[68,173232,4000],{"emptyLinePlaceholder":1679},[68,173234,173235,173237,173240,173242,173244,173246],{"class":70,"line":89},[68,173236,32008],{"class":92},[68,173238,173239],{"class":85},"(rint(",[68,173241,99],{"class":92},[68,173243,1002],{"class":85},[68,173245,2182],{"class":92},[68,173247,32090],{"class":85},[43,173249,173251],{"id":173250},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[58,173253,173255],{"className":31971,"code":173254,"language":31973,"meta":63,"style":63},"from random import *\n",[65,173256,173257],{"__ignoreMap":63},[68,173258,173259,173261,173263,173265],{"class":70,"line":71},[68,173260,32330],{"class":102},[68,173262,59380],{"class":85},[68,173264,31985],{"class":102},[68,173266,173267],{"class":102}," *\n",[19,173269,173270],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173272,173274],{"id":173273},"_912-常用内置模块","9.12 常用内置模块",[43,173276,173278],{"id":173277},"_9121-random","9.12.1 random",[58,173280,173282],{"className":31971,"code":173281,"language":31973,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[65,173283,173284,173290,173294,173308,173327],{"__ignoreMap":63},[68,173285,173286,173288],{"class":70,"line":71},[68,173287,31985],{"class":102},[68,173289,46921],{"class":85},[68,173291,173292],{"class":70,"line":78},[68,173293,4000],{"emptyLinePlaceholder":1679},[68,173295,173296,173298,173300,173302,173304,173306],{"class":70,"line":89},[68,173297,32008],{"class":92},[68,173299,173121],{"class":85},[68,173301,99],{"class":92},[68,173303,1002],{"class":85},[68,173305,2182],{"class":92},[68,173307,32090],{"class":85},[68,173309,173310,173312,173315,173317,173319,173321,173323,173325],{"class":70,"line":115},[68,173311,32008],{"class":92},[68,173313,173314],{"class":85},"(random.choice([",[68,173316,151208],{"class":872},[68,173318,1002],{"class":85},[68,173320,152256],{"class":872},[68,173322,1002],{"class":85},[68,173324,161051],{"class":872},[68,173326,34736],{"class":85},[68,173328,173329,173331,173334,173336,173338,173340,173342,173344,173346,173348,173350,173352,173354,173356],{"class":70,"line":280},[68,173330,32008],{"class":92},[68,173332,173333],{"class":85},"(random.sample([",[68,173335,99],{"class":92},[68,173337,1002],{"class":85},[68,173339,267],{"class":92},[68,173341,1002],{"class":85},[68,173343,288],{"class":92},[68,173345,1002],{"class":85},[68,173347,2029],{"class":92},[68,173349,1002],{"class":85},[68,173351,2055],{"class":92},[68,173353,113775],{"class":85},[68,173355,267],{"class":92},[68,173357,32090],{"class":85},[43,173359,173361],{"id":173360},"_9122-time","9.12.2 time",[58,173363,173365],{"className":31971,"code":173364,"language":31973,"meta":63,"style":63},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[65,173366,173367,173373,173377,173384,173392],{"__ignoreMap":63},[68,173368,173369,173371],{"class":70,"line":71},[68,173370,31985],{"class":102},[68,173372,33422],{"class":85},[68,173374,173375],{"class":70,"line":78},[68,173376,4000],{"emptyLinePlaceholder":1679},[68,173378,173379,173381],{"class":70,"line":89},[68,173380,32008],{"class":92},[68,173382,173383],{"class":85},"(time.time())\n",[68,173385,173386,173388,173390],{"class":70,"line":115},[68,173387,96647],{"class":85},[68,173389,99],{"class":92},[68,173391,1757],{"class":85},[68,173393,173394,173396,173398,173401],{"class":70,"line":280},[68,173395,32008],{"class":92},[68,173397,997],{"class":85},[68,173399,173400],{"class":872},"\"1秒后执行\"",[68,173402,1757],{"class":85},[43,173404,173406],{"id":173405},"_9123-datetime","9.12.3 datetime",[58,173408,173410],{"className":31971,"code":173409,"language":31973,"meta":63,"style":63},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[65,173411,173412,173424,173428,173438,173445],{"__ignoreMap":63},[68,173413,173414,173416,173419,173421],{"class":70,"line":71},[68,173415,32330],{"class":102},[68,173417,173418],{"class":85}," datetime ",[68,173420,31985],{"class":102},[68,173422,173423],{"class":85}," datetime\n",[68,173425,173426],{"class":70,"line":78},[68,173427,4000],{"emptyLinePlaceholder":1679},[68,173429,173430,173433,173435],{"class":70,"line":89},[68,173431,173432],{"class":85},"now ",[68,173434,869],{"class":102},[68,173436,173437],{"class":85}," datetime.now()\n",[68,173439,173440,173442],{"class":70,"line":115},[68,173441,32008],{"class":92},[68,173443,173444],{"class":85},"(now)\n",[68,173446,173447,173449,173452,173455,173457,173460],{"class":70,"line":280},[68,173448,32008],{"class":92},[68,173450,173451],{"class":85},"(now.strftime(",[68,173453,173454],{"class":872},"\"%Y-%m-",[68,173456,158011],{"class":92},[68,173458,173459],{"class":872}," %H:%M:%S\"",[68,173461,32090],{"class":85},[43,173463,173465],{"id":173464},"_9124-os","9.12.4 os",[58,173467,173469],{"className":31971,"code":173468,"language":31973,"meta":63,"style":63},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[65,173470,173471,173477,173481,173488],{"__ignoreMap":63},[68,173472,173473,173475],{"class":70,"line":71},[68,173474,31985],{"class":102},[68,173476,46898],{"class":85},[68,173478,173479],{"class":70,"line":78},[68,173480,4000],{"emptyLinePlaceholder":1679},[68,173482,173483,173485],{"class":70,"line":89},[68,173484,32008],{"class":92},[68,173486,173487],{"class":85},"(os.getcwd())\n",[68,173489,173490,173492,173495,173498],{"class":70,"line":115},[68,173491,32008],{"class":92},[68,173493,173494],{"class":85},"(os.listdir(",[68,173496,173497],{"class":872},"\".\"",[68,173499,32090],{"class":85},[43,173501,173503],{"id":173502},"_9125-sys","9.12.5 sys",[58,173505,173507],{"className":31971,"code":173506,"language":31973,"meta":63,"style":63},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[65,173508,173509,173516,173520,173527],{"__ignoreMap":63},[68,173510,173511,173513],{"class":70,"line":71},[68,173512,31985],{"class":102},[68,173514,173515],{"class":85}," sys\n",[68,173517,173518],{"class":70,"line":78},[68,173519,4000],{"emptyLinePlaceholder":1679},[68,173521,173522,173524],{"class":70,"line":89},[68,173523,32008],{"class":92},[68,173525,173526],{"class":85},"(sys.version)\n",[68,173528,173529,173531],{"class":70,"line":115},[68,173530,32008],{"class":92},[68,173532,173533],{"class":85},"(sys.path)\n",[14,173535,173537,173538,173540,173541,1987],{"id":173536},"_913-if-name-main","9.13 if ",[1890,173539,81387],{}," == \"",[1890,173542,103632],{},[19,173544,173545,173546,173549],{},"模块被直接运行和被导入时，",[65,173547,173548],{},"__name__"," 的值不同。",[19,173551,173552,173553,26213],{},"创建 ",[65,173554,173555],{},"my_module.py",[58,173557,173559],{"className":31971,"code":173558,"language":31973,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[65,173560,173561,173569,173579,173583,173587,173599],{"__ignoreMap":63},[68,173562,173563,173565,173567],{"class":70,"line":71},[68,173564,33540],{"class":102},[68,173566,6808],{"class":587},[68,173568,152413],{"class":85},[68,173570,173571,173573,173575,173577],{"class":70,"line":78},[68,173572,5689],{"class":102},[68,173574,12467],{"class":85},[68,173576,2217],{"class":102},[68,173578,152424],{"class":85},[68,173580,173581],{"class":70,"line":89},[68,173582,4000],{"emptyLinePlaceholder":1679},[68,173584,173585],{"class":70,"line":115},[68,173586,4000],{"emptyLinePlaceholder":1679},[68,173588,173589,173591,173593,173595,173597],{"class":70,"line":280},[68,173590,3134],{"class":102},[68,173592,32813],{"class":92},[68,173594,103133],{"class":102},[68,173596,103136],{"class":872},[68,173598,5338],{"class":85},[68,173600,173601,173603,173605,173607,173609,173611],{"class":70,"line":301},[68,173602,32892],{"class":92},[68,173604,167920],{"class":85},[68,173606,99],{"class":92},[68,173608,1002],{"class":85},[68,173610,267],{"class":92},[68,173612,32090],{"class":85},[19,173614,173615],{},"作用：",[48,173617,173618,173621],{},[51,173619,173620],{},"直接运行该文件时，执行测试代码。",[51,173622,173623],{},"被其他文件导入时，不执行测试代码。",[19,173625,173626],{},"这是写模块时很常用的习惯。",[14,173628,173630],{"id":173629},"_914-包","9.14 包",[19,173632,173633,173634,173637],{},"包是包含 ",[65,173635,173636],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173639,173640],{},"目录结构：",[58,173642,173645],{"className":173643,"code":173644,"language":6786,"meta":63},[6784],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[65,173646,173644],{"__ignoreMap":63},[19,173648,173649],{},"导入：",[58,173651,173653],{"className":31971,"code":173652,"language":31973,"meta":63,"style":63},"from utils.file_utils import read_file\n",[65,173654,173655],{"__ignoreMap":63},[68,173656,173657,173659,173662,173664],{"class":70,"line":71},[68,173658,32330],{"class":102},[68,173660,173661],{"class":85}," utils.file_utils ",[68,173663,31985],{"class":102},[68,173665,173666],{"class":85}," read_file\n",[19,173668,173669,173671],{},[65,173670,173636],{}," 可以为空，也可以写包初始化逻辑。",[14,173673,173675],{"id":173674},"_915-第三方包","9.15 第三方包",[19,173677,173678,173679,173681],{},"第三方包通过 ",[65,173680,25425],{}," 安装。",[58,173683,173685],{"className":25416,"code":173684,"language":25418,"meta":63,"style":63},"pip install requests\n",[65,173686,173687],{"__ignoreMap":63},[68,173688,173689,173691,173693],{"class":70,"line":71},[68,173690,25425],{"class":587},[68,173692,25428],{"class":872},[68,173694,147418],{"class":872},[19,173696,173697],{},"使用：",[58,173699,173701],{"className":31971,"code":173700,"language":31973,"meta":63,"style":63},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[65,173702,173703,173709,173713,173728],{"__ignoreMap":63},[68,173704,173705,173707],{"class":70,"line":71},[68,173706,31985],{"class":102},[68,173708,147418],{"class":85},[68,173710,173711],{"class":70,"line":78},[68,173712,4000],{"emptyLinePlaceholder":1679},[68,173714,173715,173718,173720,173723,173726],{"class":70,"line":89},[68,173716,173717],{"class":85},"response ",[68,173719,869],{"class":102},[68,173721,173722],{"class":85}," requests.get(",[68,173724,173725],{"class":872},"\"https:\u002F\u002Fwww.example.com\"",[68,173727,1757],{"class":85},[68,173729,173730,173732],{"class":70,"line":115},[68,173731,32008],{"class":92},[68,173733,173734],{"class":85},"(response.status_code)\n",[19,173736,173737],{},"查看已安装包：",[58,173739,173741],{"className":25416,"code":173740,"language":25418,"meta":63,"style":63},"pip list\n",[65,173742,173743],{"__ignoreMap":63},[68,173744,173745,173747],{"class":70,"line":71},[68,173746,25425],{"class":587},[68,173748,120528],{"class":872},[19,173750,173751],{},"导出项目依赖：",[58,173753,173754],{"className":25416,"code":147613,"language":25418,"meta":63,"style":63},[65,173755,173756],{"__ignoreMap":63},[68,173757,173758,173760,173762,173764],{"class":70,"line":71},[68,173759,25425],{"class":587},[68,173761,147622],{"class":872},[68,173763,27816],{"class":102},[68,173765,147627],{"class":872},[19,173767,173768],{},"安装项目依赖：",[58,173770,173771],{"className":25416,"code":147633,"language":25418,"meta":63,"style":63},[65,173772,173773],{"__ignoreMap":63},[68,173774,173775,173777,173779,173781],{"class":70,"line":71},[68,173776,25425],{"class":587},[68,173778,25428],{"class":872},[68,173780,121212],{"class":92},[68,173782,147627],{"class":872},[14,173784,173786],{"id":173785},"_916-模块搜索路径","9.16 模块搜索路径",[19,173788,173789,173790,173793],{},"Python 导入模块时会在 ",[65,173791,173792],{},"sys.path"," 中查找。",[58,173795,173797],{"className":31971,"code":173796,"language":31973,"meta":63,"style":63},"import sys\n\nfor path in sys.path:\n    print(path)\n",[65,173798,173799,173805,173809,173821],{"__ignoreMap":63},[68,173800,173801,173803],{"class":70,"line":71},[68,173802,31985],{"class":102},[68,173804,173515],{"class":85},[68,173806,173807],{"class":70,"line":78},[68,173808,4000],{"emptyLinePlaceholder":1679},[68,173810,173811,173813,173816,173818],{"class":70,"line":89},[68,173812,4624],{"class":102},[68,173814,173815],{"class":85}," path ",[68,173817,27637],{"class":102},[68,173819,173820],{"class":85}," sys.path:\n",[68,173822,173823,173825],{"class":70,"line":115},[68,173824,32892],{"class":92},[68,173826,170549],{"class":85},[19,173828,173829],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173831,158943],{},[58,173833,173836],{"className":173834,"code":173835,"language":6786,"meta":63},[6784],"random.py\njson.py\ntime.py\n",[65,173837,173835],{"__ignoreMap":63},[19,173839,173840],{},"这些文件名可能导致导入异常。",[14,173842,173844],{"id":173843},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173846,173640],{},[58,173848,173851],{"className":173849,"code":173850,"language":6786,"meta":63},[6784],"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",[65,173852,173850],{"__ignoreMap":63},[19,173854,173855,26213],{},[65,173856,173857],{},"utils\u002Ffile_utils.py",[58,173859,173861],{"className":31971,"code":173860,"language":31973,"meta":63,"style":63},"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",[65,173862,173863,173869,173879,173883,173887,173897,173907,173915,173921,173925,173952,173962,173966,173970,173980,174006],{"__ignoreMap":63},[68,173864,173865,173867],{"class":70,"line":71},[68,173866,31985],{"class":102},[68,173868,148411],{"class":85},[68,173870,173871,173873,173875,173877],{"class":70,"line":78},[68,173872,32330],{"class":102},[68,173874,109884],{"class":85},[68,173876,31985],{"class":102},[68,173878,109889],{"class":85},[68,173880,173881],{"class":70,"line":89},[68,173882,4000],{"emptyLinePlaceholder":1679},[68,173884,173885],{"class":70,"line":115},[68,173886,4000],{"emptyLinePlaceholder":1679},[68,173888,173889,173891,173894],{"class":70,"line":280},[68,173890,33540],{"class":102},[68,173892,173893],{"class":587}," read_json",[68,173895,173896],{"class":85},"(path):\n",[68,173898,173899,173902,173904],{"class":70,"line":301},[68,173900,173901],{"class":85},"    path ",[68,173903,869],{"class":102},[68,173905,173906],{"class":85}," Path(path)\n",[68,173908,173909,173911,173913],{"class":70,"line":320},[68,173910,4700],{"class":102},[68,173912,40523],{"class":102},[68,173914,170630],{"class":85},[68,173916,173917,173919],{"class":70,"line":2915},[68,173918,16349],{"class":102},[68,173920,53423],{"class":85},[68,173922,173923],{"class":70,"line":2921},[68,173924,4000],{"emptyLinePlaceholder":1679},[68,173926,173927,173929,173931,173934,173936,173938,173940,173942,173944,173946,173948,173950],{"class":70,"line":2933},[68,173928,35771],{"class":102},[68,173930,148111],{"class":92},[68,173932,173933],{"class":85},"(path, ",[68,173935,148121],{"class":872},[68,173937,1002],{"class":85},[68,173939,148126],{"class":6815},[68,173941,869],{"class":102},[68,173943,148131],{"class":872},[68,173945,15311],{"class":85},[68,173947,32976],{"class":102},[68,173949,149473],{"class":6815},[68,173951,5338],{"class":85},[68,173953,173954,173956,173958,173960],{"class":70,"line":3214},[68,173955,16349],{"class":102},[68,173957,149484],{"class":85},[68,173959,46947],{"class":6815},[68,173961,1757],{"class":85},[68,173963,173964],{"class":70,"line":3219},[68,173965,4000],{"emptyLinePlaceholder":1679},[68,173967,173968],{"class":70,"line":3225},[68,173969,4000],{"emptyLinePlaceholder":1679},[68,173971,173972,173974,173977],{"class":70,"line":3230},[68,173973,33540],{"class":102},[68,173975,173976],{"class":587}," write_json",[68,173978,173979],{"class":85},"(path, data):\n",[68,173981,173982,173984,173986,173988,173990,173992,173994,173996,173998,174000,174002,174004],{"class":70,"line":3244},[68,173983,35771],{"class":102},[68,173985,148111],{"class":92},[68,173987,173933],{"class":85},[68,173989,153296],{"class":872},[68,173991,1002],{"class":85},[68,173993,148126],{"class":6815},[68,173995,869],{"class":102},[68,173997,148131],{"class":872},[68,173999,15311],{"class":85},[68,174001,32976],{"class":102},[68,174003,149473],{"class":6815},[68,174005,5338],{"class":85},[68,174007,174008,174011,174013,174015,174017,174019,174021,174023,174025,174027,174029],{"class":70,"line":3249},[68,174009,174010],{"class":85},"        json.dump(data, ",[68,174012,46947],{"class":6815},[68,174014,1002],{"class":85},[68,174016,148457],{"class":6815},[68,174018,869],{"class":102},[68,174020,35580],{"class":92},[68,174022,1002],{"class":85},[68,174024,153332],{"class":6815},[68,174026,869],{"class":102},[68,174028,267],{"class":92},[68,174030,1757],{"class":85},[19,174032,174033,26213],{},[65,174034,155927],{},[58,174036,174038],{"className":31971,"code":174037,"language":31973,"meta":63,"style":63},"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",[65,174039,174040,174051,174055,174068,174088],{"__ignoreMap":63},[68,174041,174042,174044,174046,174048],{"class":70,"line":71},[68,174043,32330],{"class":102},[68,174045,173661],{"class":85},[68,174047,31985],{"class":102},[68,174049,174050],{"class":85}," read_json, write_json\n",[68,174052,174053],{"class":70,"line":78},[68,174054,4000],{"emptyLinePlaceholder":1679},[68,174056,174057,174059,174061,174064,174066],{"class":70,"line":89},[68,174058,161036],{"class":85},[68,174060,869],{"class":102},[68,174062,174063],{"class":85}," read_json(",[68,174065,153151],{"class":872},[68,174067,1757],{"class":85},[68,174069,174070,174072,174074,174076,174078,174080,174082,174084,174086],{"class":70,"line":115},[68,174071,171854],{"class":85},[68,174073,64262],{"class":872},[68,174075,96],{"class":85},[68,174077,151208],{"class":872},[68,174079,1002],{"class":85},[68,174081,152792],{"class":872},[68,174083,96],{"class":85},[68,174085,2724],{"class":92},[68,174087,166472],{"class":85},[68,174089,174090,174093,174095],{"class":70,"line":280},[68,174091,174092],{"class":85},"write_json(",[68,174094,153151],{"class":872},[68,174096,174097],{"class":85},", students)\n",[14,174099,174101],{"id":174100},"_918-易错点","9.18 易错点",[48,174103,174104,174107,174112,174117,174120,174123],{},[51,174105,174106],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[51,174108,174109,174110,29978],{},"能指定异常类型就不要裸写 ",[65,174111,172214],{},[51,174113,174114,174116],{},[65,174115,172589],{}," 无论是否出错都会执行。",[51,174118,174119],{},"模块文件名不要和标准库重名。",[51,174121,174122],{},"导入自己写的模块时，要注意运行目录。",[51,174124,174125],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174127,174129],{"id":174128},"_919-本章练习","9.19 本章练习",[48,174131,174132,174135,174138,174144,174151],{},[51,174133,174134],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[51,174136,174137],{},"写函数读取文件，如果文件不存在则返回空字符串。",[51,174139,173552,174140,174143],{},[65,174141,174142],{},"math_utils.py","，实现加减乘除函数并导入使用。",[51,174145,174146,174147,174150],{},"创建一个 ",[65,174148,174149],{},"utils"," 包，把 JSON 读写函数放进去。",[51,174152,174153],{},"写一个程序，捕获除零异常和输入格式异常。",[1652,174155,174156],{},"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":63,"searchDepth":78,"depth":78,"links":174158},[174159,174160,174161,174162,174163,174164,174165,174166,174167,174168,174169,174175,174182,174184,174185,174186,174187,174188,174189],{"id":172011,"depth":78,"text":172012},{"id":172139,"depth":78,"text":172140},{"id":172188,"depth":78,"text":172189},{"id":172337,"depth":78,"text":172338},{"id":172509,"depth":78,"text":172510},{"id":172578,"depth":78,"text":172579},{"id":172689,"depth":78,"text":172690},{"id":172815,"depth":78,"text":172816},{"id":172940,"depth":78,"text":172941},{"id":172995,"depth":78,"text":172996},{"id":173094,"depth":78,"text":173095,"children":174170},[174171,174172,174173,174174],{"id":173098,"depth":89,"text":173099},{"id":173132,"depth":89,"text":173133},{"id":173171,"depth":89,"text":173172},{"id":173250,"depth":89,"text":173251},{"id":173273,"depth":78,"text":173274,"children":174176},[174177,174178,174179,174180,174181],{"id":173277,"depth":89,"text":173278},{"id":173360,"depth":89,"text":173361},{"id":173405,"depth":89,"text":173406},{"id":173464,"depth":89,"text":173465},{"id":173502,"depth":89,"text":173503},{"id":173536,"depth":78,"text":174183},"9.13 if name == \"main\"",{"id":173629,"depth":78,"text":173630},{"id":173674,"depth":78,"text":173675},{"id":173785,"depth":78,"text":173786},{"id":173843,"depth":78,"text":173844},{"id":174100,"depth":78,"text":174101},{"id":174128,"depth":78,"text":174129},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172003,"description":1676},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174196,"title":174197,"body":174198,"description":174361,"extension":1677,"meta":174362,"navigation":1679,"path":174363,"seo":174364,"stem":174365,"__hash__":174366},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174199,"toc":174356},[174200,174203,174206,174209,174220,174222,174296,174299,174302,174305,174308,174311,174314,174317,174320,174323,174326],[10,174201,174197],{"id":174202},"python教程",[19,174204,174205],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174207,174208],{},"建议学习环境：",[48,174210,174211,174214,174217],{},[51,174212,174213],{},"Python 版本：Python 3.10 及以上。",[51,174215,174216],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[51,174218,174219],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174221,118651],{"id":118651},[48,174223,174224,174230,174236,174242,174248,174254,174260,174266,174272,174278,174284,174290],{},[51,174225,174226],{},[1974,174227,174229],{"href":174228},".\u002Fch1-Python","Python环境与第一个程序",[51,174231,174232],{},[1974,174233,174235],{"href":174234},".\u002Fch2","基础语法、变量与字符串",[51,174237,174238],{},[1974,174239,174241],{"href":174240},".\u002Fch3","判断语句",[51,174243,174244],{},[1974,174245,174247],{"href":174246},".\u002Fch4","循环语句",[51,174249,174250],{},[1974,174251,174253],{"href":174252},".\u002Fch5","函数基础",[51,174255,174256],{},[1974,174257,174259],{"href":174258},".\u002Fch6","数据容器",[51,174261,174262],{},[1974,174263,174265],{"href":174264},".\u002Fch7","函数进阶",[51,174267,174268],{},[1974,174269,174271],{"href":174270},".\u002Fch8","文件操作",[51,174273,174274],{},[1974,174275,174277],{"href":174276},".\u002Fch9","异常、模块与包",[51,174279,174280],{},[1974,174281,174283],{"href":174282},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[51,174285,174286],{},[1974,174287,174289],{"href":174288},".\u002Fch11","面向对象基础",[51,174291,174292],{},[1974,174293,174295],{"href":174294},".\u002Fch12","综合案例与复习路线",[14,174297,174298],{"id":174298},"学习路线",[19,174300,174301],{},"第一阶段：能运行程序。",[19,174303,174304],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174306,174307],{},"第二阶段：能组织数据。",[19,174309,174310],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174312,174313],{},"第三阶段：能封装逻辑。",[19,174315,174316],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174318,174319],{},"第四阶段：能做小项目。",[19,174321,174322],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174324,174325],{"id":174325},"参考资料",[48,174327,174328,174335,174342,174349],{},[51,174329,174330,174331],{},"黑马程序员 Python 入门教程推荐：",[1974,174332,174333],{"href":174333,"rel":174334},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25459],[51,174336,174337,174338],{},"Python 官方中文教程：",[1974,174339,174340],{"href":174340,"rel":174341},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25459],[51,174343,174344,174345],{},"Python 标准库文档：",[1974,174346,174347],{"href":174347,"rel":174348},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25459],[51,174350,174351,174352],{},"pyecharts 文档：",[1974,174353,174354],{"href":174354,"rel":174355},"https:\u002F\u002Fpyecharts.org\u002F",[25459],{"title":63,"searchDepth":78,"depth":78,"links":174357},[174358,174359,174360],{"id":118651,"depth":78,"text":118651},{"id":174298,"depth":78,"text":174298},{"id":174325,"depth":78,"text":174325},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24973},"\u002Fwiki\u002F2024-10-10-python",{"title":174197,"description":174361},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426837]