[{"data":1,"prerenderedAt":174244},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch12-xian-shi-yin-cang-yu-tu-xing-zi-yuan":3,"wiki-doc-nav":1556},{"id":4,"title":5,"body":6,"description":1548,"extension":1549,"meta":1550,"navigation":1551,"path":1552,"seo":1553,"stem":1554,"__hash__":1555},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":8,"toc":1527},"minimark",[9,13,18,28,33,39,47,61,65,70,78,89,93,98,151,159,163,168,172,175,309,312,406,409,503,506,509,553,556,559,589,592,595,598,601,604,607,610,690,693,697,701,744,748,756,759,762,766,769,772,775,868,871,874,878,882,885,888,891,894,897,904,914,918,938,942,954,957,960,963,966,969,972,975,978,987,991,1000,1003,1008,1062,1067,1239,1242,1245,1250,1253,1256,1259,1262,1267,1415,1418,1421,1426,1429,1434,1475,1478,1481,1485,1488,1495,1498,1501,1504,1507,1510,1513,1516,1520,1523],[10,11,5],"h1",{"id":12},"_12-显示隐藏与图形资源",[14,15,17],"h2",{"id":16},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[19,20,21,25],"ul",{},[22,23,24],"li",{},"目的:让一个元素在页面中消失或者显示出来",[22,26,27],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[29,30,32],"h3",{"id":31},"_1211-display-显示","12.1.1 display 显示",[34,35,36],"ol",{},[22,37,38],{},"display 设置或检索对象是否及如何显示",[19,40,41,44],{},[22,42,43],{},"display: none;隐藏对象",[22,45,46],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[34,48,50,58],{"start":49},2,[22,51,52,53,57],{},"特点： display 隐藏元素后， ",[54,55,56],"strong",{},"不再占"," 有原来的位置",[22,59,60],{},"在js中使用非常的广泛",[29,62,64],{"id":63},"_1212-visibility可见性","12.1.2 visibility可见性",[34,66,67],{},[22,68,69],{},"visibility 属性用于指定一个元素应可见还是隐藏",[19,71,72,75],{},[22,73,74],{},"visibility： visible；元素可见",[22,76,77],{},"visibility：hidden；元素隐藏",[34,79,80,83,86],{"start":49},[22,81,82],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[22,84,85],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[22,87,88],{},"隐藏后继续占有原有位置",[29,90,92],{"id":91},"_1213-overflow溢出","12.1.3 overflow溢出",[19,94,95],{},[22,96,97],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[99,100,101,115],"table",{},[102,103,104],"thead",{},[105,106,107,112],"tr",{},[108,109,111],"th",{"align":110},"left","属性值",[108,113,114],{"align":110},"描述",[116,117,118,127,135,143],"tbody",{},[105,119,120,124],{},[121,122,123],"td",{"align":110},"visible",[121,125,126],{"align":110},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[105,128,129,132],{},[121,130,131],{"align":110},"hidden",[121,133,134],{"align":110},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[105,136,137,140],{},[121,138,139],{"align":110},"scroll",[121,141,142],{"align":110},"不管超出内容否，总是显示滚动条",[105,144,145,148],{},[121,146,147],{"align":110},"auto",[121,149,150],{"align":110},"超出自动显示滚动条，不超出不显示滚动条",[19,152,153,156],{},[22,154,155],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[22,157,158],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[29,160,162],{"id":161},"_1214-案例收获","12.1.4 案例收获",[164,165],"img",{"style":166,"src":167},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[169,170,171],"p",{},"问题：没做出来动态效果，使用hover没实现",[169,173,174],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[176,177,182],"pre",{"className":178,"code":179,"language":180,"meta":181,"style":181},"language-Css shiki shiki-themes github-light github-dark","\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","Css","",[183,184,185,194,217,223,240,246,263,269,286,292],"code",{"__ignoreMap":181},[186,187,190],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"sJ8bj","\u002F* 静态定位（默认） *\u002F\n",[186,195,196,200,204,208,211,214],{"class":188,"line":49},[186,197,199],{"class":198},"sScJk",".static",[186,201,203],{"class":202},"sVt8B"," { ",[186,205,207],{"class":206},"sj4cs","position",[186,209,210],{"class":202},": ",[186,212,213],{"class":206},"static",[186,215,216],{"class":202},"; }\n",[186,218,220],{"class":188,"line":219},3,[186,221,222],{"class":192},"\u002F* 相对定位 *\u002F\n",[186,224,226,229,231,233,235,238],{"class":188,"line":225},4,[186,227,228],{"class":198},".relative",[186,230,203],{"class":202},[186,232,207],{"class":206},[186,234,210],{"class":202},[186,236,237],{"class":206},"relative",[186,239,216],{"class":202},[186,241,243],{"class":188,"line":242},5,[186,244,245],{"class":192},"\u002F* 绝对定位 *\u002F\n",[186,247,249,252,254,256,258,261],{"class":188,"line":248},6,[186,250,251],{"class":198},".absolute",[186,253,203],{"class":202},[186,255,207],{"class":206},[186,257,210],{"class":202},[186,259,260],{"class":206},"absolute",[186,262,216],{"class":202},[186,264,266],{"class":188,"line":265},7,[186,267,268],{"class":192},"\u002F* 固定定位 *\u002F\n",[186,270,272,275,277,279,281,284],{"class":188,"line":271},8,[186,273,274],{"class":198},".fixed",[186,276,203],{"class":202},[186,278,207],{"class":206},[186,280,210],{"class":202},[186,282,283],{"class":206},"fixed",[186,285,216],{"class":202},[186,287,289],{"class":188,"line":288},9,[186,290,291],{"class":192},"\u002F* 粘性定位 *\u002F\n",[186,293,295,298,300,302,304,307],{"class":188,"line":294},10,[186,296,297],{"class":198},".sticky",[186,299,203],{"class":202},[186,301,207],{"class":206},[186,303,210],{"class":202},[186,305,306],{"class":206},"sticky",[186,308,216],{"class":202},[169,310,311],{},"完整代码：",[176,313,314],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,315,316,320,334,338,352,356,370,374,388,392],{"__ignoreMap":181},[186,317,318],{"class":188,"line":189},[186,319,193],{"class":192},[186,321,322,324,326,328,330,332],{"class":188,"line":49},[186,323,199],{"class":198},[186,325,203],{"class":202},[186,327,207],{"class":206},[186,329,210],{"class":202},[186,331,213],{"class":206},[186,333,216],{"class":202},[186,335,336],{"class":188,"line":219},[186,337,222],{"class":192},[186,339,340,342,344,346,348,350],{"class":188,"line":225},[186,341,228],{"class":198},[186,343,203],{"class":202},[186,345,207],{"class":206},[186,347,210],{"class":202},[186,349,237],{"class":206},[186,351,216],{"class":202},[186,353,354],{"class":188,"line":242},[186,355,245],{"class":192},[186,357,358,360,362,364,366,368],{"class":188,"line":248},[186,359,251],{"class":198},[186,361,203],{"class":202},[186,363,207],{"class":206},[186,365,210],{"class":202},[186,367,260],{"class":206},[186,369,216],{"class":202},[186,371,372],{"class":188,"line":265},[186,373,268],{"class":192},[186,375,376,378,380,382,384,386],{"class":188,"line":271},[186,377,274],{"class":198},[186,379,203],{"class":202},[186,381,207],{"class":206},[186,383,210],{"class":202},[186,385,283],{"class":206},[186,387,216],{"class":202},[186,389,390],{"class":188,"line":288},[186,391,291],{"class":192},[186,393,394,396,398,400,402,404],{"class":188,"line":294},[186,395,297],{"class":198},[186,397,203],{"class":202},[186,399,207],{"class":206},[186,401,210],{"class":202},[186,403,306],{"class":206},[186,405,216],{"class":202},[169,407,408],{},"分布思路重点详解：",[176,410,411],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,412,413,417,431,435,449,453,467,471,485,489],{"__ignoreMap":181},[186,414,415],{"class":188,"line":189},[186,416,193],{"class":192},[186,418,419,421,423,425,427,429],{"class":188,"line":49},[186,420,199],{"class":198},[186,422,203],{"class":202},[186,424,207],{"class":206},[186,426,210],{"class":202},[186,428,213],{"class":206},[186,430,216],{"class":202},[186,432,433],{"class":188,"line":219},[186,434,222],{"class":192},[186,436,437,439,441,443,445,447],{"class":188,"line":225},[186,438,228],{"class":198},[186,440,203],{"class":202},[186,442,207],{"class":206},[186,444,210],{"class":202},[186,446,237],{"class":206},[186,448,216],{"class":202},[186,450,451],{"class":188,"line":242},[186,452,245],{"class":192},[186,454,455,457,459,461,463,465],{"class":188,"line":248},[186,456,251],{"class":198},[186,458,203],{"class":202},[186,460,207],{"class":206},[186,462,210],{"class":202},[186,464,260],{"class":206},[186,466,216],{"class":202},[186,468,469],{"class":188,"line":265},[186,470,268],{"class":192},[186,472,473,475,477,479,481,483],{"class":188,"line":271},[186,474,274],{"class":198},[186,476,203],{"class":202},[186,478,207],{"class":206},[186,480,210],{"class":202},[186,482,283],{"class":206},[186,484,216],{"class":202},[186,486,487],{"class":188,"line":288},[186,488,291],{"class":192},[186,490,491,493,495,497,499,501],{"class":188,"line":294},[186,492,297],{"class":198},[186,494,203],{"class":202},[186,496,207],{"class":206},[186,498,210],{"class":202},[186,500,306],{"class":206},[186,502,216],{"class":202},[164,504],{"style":166,"src":505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[169,507,508],{},"图片太大，盒子太小，此时需要修改图片的大小",[176,510,514],{"className":511,"code":512,"language":513,"meta":181,"style":181},"language-Html shiki shiki-themes github-light github-dark","\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n","Html",[183,515,516],{"__ignoreMap":181},[186,517,518,521,524,527,530,534,537,539,542,545,547,550],{"class":188,"line":189},[186,519,520],{"class":202},"\u003C",[186,522,164],{"class":523},"s9eBZ",[186,525,526],{"class":198}," src",[186,528,529],{"class":202},"=",[186,531,533],{"class":532},"sZZnC","\"images\u002Fpic.jpg\"",[186,535,536],{"class":198}," alt",[186,538,529],{"class":202},[186,540,541],{"class":532},"\"描述文字\"",[186,543,544],{"class":198}," title",[186,546,529],{"class":202},[186,548,549],{"class":532},"\"悬停提示\"",[186,551,552],{"class":202},">\n",[164,554],{"style":166,"src":555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[169,557,558],{},"制造遮罩层",[176,560,561],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,562,563],{"__ignoreMap":181},[186,564,565,567,569,571,573,575,577,579,581,583,585,587],{"class":188,"line":189},[186,566,520],{"class":202},[186,568,164],{"class":523},[186,570,526],{"class":198},[186,572,529],{"class":202},[186,574,533],{"class":532},[186,576,536],{"class":198},[186,578,529],{"class":202},[186,580,541],{"class":532},[186,582,544],{"class":198},[186,584,529],{"class":202},[186,586,549],{"class":532},[186,588,552],{"class":202},[169,590,591],{},"此时是这样的为标准流",[164,593],{"style":166,"src":594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[169,596,597],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[169,599,600],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[169,602,603],{},"让他在中间，用center(background-position)",[169,605,606],{},"将需要变的尽可能放到一个盒子中",[169,608,609],{},"放大盒子上内部盒子发生变化",[176,611,613],{"className":178,"code":612,"language":180,"meta":181,"style":181},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[183,614,615,623,635,640,647,657,673,686],{"__ignoreMap":181},[186,616,617,620],{"class":188,"line":189},[186,618,619],{"class":198},".parent",[186,621,622],{"class":202}," {\n",[186,624,625,628,630,632],{"class":188,"line":49},[186,626,627],{"class":206},"  position",[186,629,210],{"class":202},[186,631,237],{"class":206},[186,633,634],{"class":202},";\n",[186,636,637],{"class":188,"line":219},[186,638,639],{"class":202},"}\n",[186,641,642,645],{"class":188,"line":225},[186,643,644],{"class":198},".child",[186,646,622],{"class":202},[186,648,649,651,653,655],{"class":188,"line":242},[186,650,627],{"class":206},[186,652,210],{"class":202},[186,654,260],{"class":206},[186,656,634],{"class":202},[186,658,659,662,664,667,671],{"class":188,"line":248},[186,660,661],{"class":206},"  top",[186,663,210],{"class":202},[186,665,666],{"class":206},"50",[186,668,670],{"class":669},"szBVR","%",[186,672,634],{"class":202},[186,674,675,678,680,682,684],{"class":188,"line":265},[186,676,677],{"class":206},"  left",[186,679,210],{"class":202},[186,681,666],{"class":206},[186,683,670],{"class":669},[186,685,634],{"class":202},[186,687,688],{"class":188,"line":271},[186,689,639],{"class":202},[169,691,692],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,694,696],{"id":695},"_122-精灵图","12.2 精灵图",[29,698,700],{"id":699},"_1221-理解","12.2.1 理解",[34,702,703,722],{},[22,704,705,706,709,710,713,714,717,718,721],{},"目的： ",[54,707,708],{},"为了有效地减少服务器接收和发送请求的次数"," ， ",[54,711,712],{},"提高"," 页面的 ",[54,715,716],{},"加载速度"," ，出现了 ",[54,719,720],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[22,723,724,725,728,729,731,732,734,735,737,738,740,741,743],{},"使用精灵图核心：",[726,727],"br",{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[726,730],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[726,733],{},"  ③移动背景图片位置， 此时可以使用 background-position",[726,736],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[726,739],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[726,742],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[29,745,747],{"id":746},"_1222-扒图","12.2.2 扒图",[176,749,754],{"className":750,"code":752,"language":753},[751],"language-text","\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n","text",[183,755,752],{"__ignoreMap":181},[164,757],{"style":166,"src":758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[164,760],{"style":166,"src":761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[29,763,765],{"id":764},"_1223-精灵图的实现","12.2.3 精灵图的实现",[164,767],{"style":166,"src":768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[169,770,771],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[164,773],{"style":166,"src":774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[176,776,778],{"className":178,"code":777,"language":180,"meta":181,"style":181},"\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",[183,779,780,785,792,807,820,845,864],{"__ignoreMap":181},[186,781,782],{"class":188,"line":189},[186,783,784],{"class":192},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[186,786,787,790],{"class":188,"line":49},[186,788,789],{"class":198},".icon",[186,791,622],{"class":202},[186,793,794,797,799,802,805],{"class":188,"line":219},[186,795,796],{"class":206},"  width",[186,798,210],{"class":202},[186,800,801],{"class":206},"20",[186,803,804],{"class":669},"px",[186,806,634],{"class":202},[186,808,809,812,814,816,818],{"class":188,"line":225},[186,810,811],{"class":206},"  height",[186,813,210],{"class":202},[186,815,801],{"class":206},[186,817,804],{"class":669},[186,819,634],{"class":202},[186,821,822,825,827,830,833,837,840,843],{"class":188,"line":242},[186,823,824],{"class":206},"  background",[186,826,210],{"class":202},[186,828,829],{"class":206},"url",[186,831,832],{"class":202},"(",[186,834,836],{"class":835},"s4XuR","sprites.png",[186,838,839],{"class":202},") ",[186,841,842],{"class":206},"no-repeat",[186,844,634],{"class":202},[186,846,847,850,852,855,857,860,862],{"class":188,"line":248},[186,848,849],{"class":206},"  background-position",[186,851,210],{"class":202},[186,853,854],{"class":206},"-10",[186,856,804],{"class":669},[186,858,859],{"class":206}," -20",[186,861,804],{"class":669},[186,863,634],{"class":202},[186,865,866],{"class":188,"line":265},[186,867,639],{"class":202},[164,869],{"style":166,"src":870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[169,872,873],{},"在前端中坐标轴的正方向是右和下",[14,875,877],{"id":876},"_123-字体图标","12.3 字体图标",[29,879,881],{"id":880},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[169,883,884],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[169,886,887],{},"精灵图是有诸多优点的，但是缺点很明显。",[169,889,890],{},"1.图片文件还是比较大的。",[169,892,893],{},"2.图片本身放大和缩小会失真。",[169,895,896],{},"3.一旦图片制作完毕想要更换非常复杂。",[169,898,899,900,903],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[54,901,902],{},"字体图标 iconfont"," 。",[169,905,906,909,910,913],{},[54,907,908],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[54,911,912],{},"展示的是图标，本质属于字体","。",[29,915,917],{"id":916},"_1232-字体图标的优点","12.3.2 字体图标的优点",[19,919,920,926,929,932,935],{},[22,921,922,925],{},[54,923,924],{},"轻量级"," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[22,927,928],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[22,930,931],{},"兼容性：几乎支持所有的浏览器，请放心使用",[22,933,934],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[22,936,937],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[29,939,941],{"id":940},"_1233-字体库下载网站","12.3.3 字体库下载网站",[19,943,944],{},[22,945,946,947],{},"icomoon字体库：",[948,949,953],"a",{"href":950,"rel":951},"http:\u002F\u002Ficomoon.io\u002F",[952],"nofollow","http:\u002F\u002Ficomoon.io",[169,955,956],{},"进去之后点icomoon app",[164,958],{"style":166,"src":959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[169,961,962],{},"可以对其编辑：",[164,964],{"style":166,"src":965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[169,967,968],{},"生成字体：",[164,970],{"style":166,"src":971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[169,973,974],{},"下载：",[164,976],{"style":166,"src":977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[19,979,980],{},[22,981,982,983],{},"阿里iconfont字体库： ",[948,984,985],{"href":985,"rel":986},"http:\u002F\u002Fwww.iconfont.cn\u002F",[952],[29,988,990],{"id":989},"_1234-字体图标的引入","12.3.4 字体图标的引入",[34,992,993],{},[22,994,995,996,999],{},"把下载包里面的 ",[54,997,998],{},"fonts"," 文件夹放入页面根目录下",[164,1001],{"style":166,"src":1002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[34,1004,1005],{"start":49},[22,1006,1007],{},"字体文件格式",[99,1009,1010,1020],{},[102,1011,1012],{},[105,1013,1014,1017],{},[108,1015,1016],{"align":110},"格式",[108,1018,1019],{"align":110},"特点",[116,1021,1022,1032,1042,1052],{},[105,1023,1024,1029],{},[121,1025,1026],{"align":110},[54,1027,1028],{},".ttf",[121,1030,1031],{"align":110},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[105,1033,1034,1039],{},[121,1035,1036],{"align":110},[54,1037,1038],{},".woff",[121,1040,1041],{"align":110},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[105,1043,1044,1049],{},[121,1045,1046],{"align":110},[54,1047,1048],{},".eot",[121,1050,1051],{"align":110},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[105,1053,1054,1059],{},[121,1055,1056],{"align":110},[54,1057,1058],{},"svg",[121,1060,1061],{"align":110},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[34,1063,1064],{"start":219},[22,1065,1066],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[176,1068,1070],{"className":178,"code":1069,"language":180,"meta":181,"style":181},"\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",[183,1071,1072,1077,1084,1096,1113,1139,1160,1180,1200,1204,1210,1221,1234],{"__ignoreMap":181},[186,1073,1074],{"class":188,"line":189},[186,1075,1076],{"class":192},"\u002F* 引入字体图标 *\u002F\n",[186,1078,1079,1082],{"class":188,"line":49},[186,1080,1081],{"class":669},"@font-face",[186,1083,622],{"class":202},[186,1085,1086,1089,1091,1094],{"class":188,"line":219},[186,1087,1088],{"class":206},"  font-family",[186,1090,210],{"class":202},[186,1092,1093],{"class":532},"'icomoon'",[186,1095,634],{"class":202},[186,1097,1098,1101,1103,1105,1107,1110],{"class":188,"line":225},[186,1099,1100],{"class":206},"  src",[186,1102,210],{"class":202},[186,1104,829],{"class":206},[186,1106,832],{"class":202},[186,1108,1109],{"class":532},"'fonts\u002Ficomoon.eot'",[186,1111,1112],{"class":202},");\n",[186,1114,1115,1117,1119,1121,1123,1126,1128,1131,1133,1136],{"class":188,"line":242},[186,1116,1100],{"class":206},[186,1118,210],{"class":202},[186,1120,829],{"class":206},[186,1122,832],{"class":202},[186,1124,1125],{"class":532},"'fonts\u002Ficomoon.eot?#iefix'",[186,1127,839],{"class":202},[186,1129,1130],{"class":206},"format",[186,1132,832],{"class":202},[186,1134,1135],{"class":532},"'embedded-opentype'",[186,1137,1138],{"class":202},"),\n",[186,1140,1141,1144,1146,1149,1151,1153,1155,1158],{"class":188,"line":248},[186,1142,1143],{"class":206},"       url",[186,1145,832],{"class":202},[186,1147,1148],{"class":532},"'fonts\u002Ficomoon.woff'",[186,1150,839],{"class":202},[186,1152,1130],{"class":206},[186,1154,832],{"class":202},[186,1156,1157],{"class":532},"'woff'",[186,1159,1138],{"class":202},[186,1161,1162,1164,1166,1169,1171,1173,1175,1178],{"class":188,"line":265},[186,1163,1143],{"class":206},[186,1165,832],{"class":202},[186,1167,1168],{"class":532},"'fonts\u002Ficomoon.ttf'",[186,1170,839],{"class":202},[186,1172,1130],{"class":206},[186,1174,832],{"class":202},[186,1176,1177],{"class":532},"'truetype'",[186,1179,1138],{"class":202},[186,1181,1182,1184,1186,1189,1191,1193,1195,1198],{"class":188,"line":271},[186,1183,1143],{"class":206},[186,1185,832],{"class":202},[186,1187,1188],{"class":532},"'fonts\u002Ficomoon.svg#icomoon'",[186,1190,839],{"class":202},[186,1192,1130],{"class":206},[186,1194,832],{"class":202},[186,1196,1197],{"class":532},"'svg'",[186,1199,1112],{"class":202},[186,1201,1202],{"class":188,"line":288},[186,1203,639],{"class":202},[186,1205,1206,1208],{"class":188,"line":294},[186,1207,789],{"class":198},[186,1209,622],{"class":202},[186,1211,1213,1215,1217,1219],{"class":188,"line":1212},11,[186,1214,1088],{"class":206},[186,1216,210],{"class":202},[186,1218,1093],{"class":532},[186,1220,634],{"class":202},[186,1222,1224,1227,1229,1232],{"class":188,"line":1223},12,[186,1225,1226],{"class":206},"  font-style",[186,1228,210],{"class":202},[186,1230,1231],{"class":206},"normal",[186,1233,634],{"class":202},[186,1235,1237],{"class":188,"line":1236},13,[186,1238,639],{"class":202},[169,1240,1241],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[164,1243],{"style":166,"src":1244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[34,1246,1247],{"start":225},[22,1248,1249],{},"添加字体",[164,1251],{"style":166,"src":1252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[169,1254,1255],{},"复制：",[164,1257],{"style":166,"src":1258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[169,1260,1261],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[34,1263,1264],{"start":242},[22,1265,1266],{},"代码展示：",[176,1268,1269],{"className":178,"code":1069,"language":180,"meta":181,"style":181},[183,1270,1271,1275,1281,1291,1305,1327,1345,1363,1381,1385,1391,1401,1411],{"__ignoreMap":181},[186,1272,1273],{"class":188,"line":189},[186,1274,1076],{"class":192},[186,1276,1277,1279],{"class":188,"line":49},[186,1278,1081],{"class":669},[186,1280,622],{"class":202},[186,1282,1283,1285,1287,1289],{"class":188,"line":219},[186,1284,1088],{"class":206},[186,1286,210],{"class":202},[186,1288,1093],{"class":532},[186,1290,634],{"class":202},[186,1292,1293,1295,1297,1299,1301,1303],{"class":188,"line":225},[186,1294,1100],{"class":206},[186,1296,210],{"class":202},[186,1298,829],{"class":206},[186,1300,832],{"class":202},[186,1302,1109],{"class":532},[186,1304,1112],{"class":202},[186,1306,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325],{"class":188,"line":242},[186,1308,1100],{"class":206},[186,1310,210],{"class":202},[186,1312,829],{"class":206},[186,1314,832],{"class":202},[186,1316,1125],{"class":532},[186,1318,839],{"class":202},[186,1320,1130],{"class":206},[186,1322,832],{"class":202},[186,1324,1135],{"class":532},[186,1326,1138],{"class":202},[186,1328,1329,1331,1333,1335,1337,1339,1341,1343],{"class":188,"line":248},[186,1330,1143],{"class":206},[186,1332,832],{"class":202},[186,1334,1148],{"class":532},[186,1336,839],{"class":202},[186,1338,1130],{"class":206},[186,1340,832],{"class":202},[186,1342,1157],{"class":532},[186,1344,1138],{"class":202},[186,1346,1347,1349,1351,1353,1355,1357,1359,1361],{"class":188,"line":265},[186,1348,1143],{"class":206},[186,1350,832],{"class":202},[186,1352,1168],{"class":532},[186,1354,839],{"class":202},[186,1356,1130],{"class":206},[186,1358,832],{"class":202},[186,1360,1177],{"class":532},[186,1362,1138],{"class":202},[186,1364,1365,1367,1369,1371,1373,1375,1377,1379],{"class":188,"line":271},[186,1366,1143],{"class":206},[186,1368,832],{"class":202},[186,1370,1188],{"class":532},[186,1372,839],{"class":202},[186,1374,1130],{"class":206},[186,1376,832],{"class":202},[186,1378,1197],{"class":532},[186,1380,1112],{"class":202},[186,1382,1383],{"class":188,"line":288},[186,1384,639],{"class":202},[186,1386,1387,1389],{"class":188,"line":294},[186,1388,789],{"class":198},[186,1390,622],{"class":202},[186,1392,1393,1395,1397,1399],{"class":188,"line":1212},[186,1394,1088],{"class":206},[186,1396,210],{"class":202},[186,1398,1093],{"class":532},[186,1400,634],{"class":202},[186,1402,1403,1405,1407,1409],{"class":188,"line":1223},[186,1404,1226],{"class":206},[186,1406,210],{"class":202},[186,1408,1231],{"class":206},[186,1410,634],{"class":202},[186,1412,1413],{"class":188,"line":1236},[186,1414,639],{"class":202},[164,1416],{"style":166,"src":1417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[169,1419,1420],{},"更加细节展示：",[34,1422,1423],{},[22,1424,1425],{},"html 标签内添加小图标",[164,1427],{"style":166,"src":1428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[34,1430,1431],{"start":49},[22,1432,1433],{},"给标签定义字体",[176,1435,1437],{"className":511,"code":1436,"language":513,"meta":181,"style":181},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[183,1438,1439,1444,1461,1466],{"__ignoreMap":181},[186,1440,1441],{"class":188,"line":189},[186,1442,1443],{"class":192},"\u003C!-- HTML 代码示例 -->\n",[186,1445,1446,1448,1451,1454,1456,1459],{"class":188,"line":49},[186,1447,520],{"class":202},[186,1449,1450],{"class":523},"div",[186,1452,1453],{"class":198}," class",[186,1455,529],{"class":202},[186,1457,1458],{"class":532},"\"example\"",[186,1460,552],{"class":202},[186,1462,1463],{"class":188,"line":219},[186,1464,1465],{"class":202},"  示例内容\n",[186,1467,1468,1471,1473],{"class":188,"line":225},[186,1469,1470],{"class":202},"\u003C\u002F",[186,1472,1450],{"class":523},[186,1474,552],{"class":202},[169,1476,1477],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[164,1479],{"style":166,"src":1480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[29,1482,1484],{"id":1483},"_1235-字体图标的追加","12.3.5 字体图标的追加",[169,1486,1487],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[169,1489,1490,1491,1494],{},"把压缩包里面的 ",[54,1492,1493],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[169,1496,1497],{},"打开网站，点下方：",[164,1499],{"style":166,"src":1500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[164,1502],{"style":166,"src":1503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[164,1505],{"style":166,"src":1506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[169,1508,1509],{},"点yes重新加载",[169,1511,1512],{},"然后重复之前的操作就可以实现了",[169,1514,1515],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[29,1517,1519],{"id":1518},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[164,1521],{"style":166,"src":1522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1524,1525,1526],"style",{},"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":181,"searchDepth":49,"depth":49,"links":1528},[1529,1535,1540],{"id":16,"depth":49,"text":17,"children":1530},[1531,1532,1533,1534],{"id":31,"depth":219,"text":32},{"id":63,"depth":219,"text":64},{"id":91,"depth":219,"text":92},{"id":161,"depth":219,"text":162},{"id":695,"depth":49,"text":696,"children":1536},[1537,1538,1539],{"id":699,"depth":219,"text":700},{"id":746,"depth":219,"text":747},{"id":764,"depth":219,"text":765},{"id":876,"depth":49,"text":877,"children":1541},[1542,1543,1544,1545,1546,1547],{"id":880,"depth":219,"text":881},{"id":916,"depth":219,"text":917},{"id":940,"depth":219,"text":941},{"id":989,"depth":219,"text":990},{"id":1483,"depth":219,"text":1484},{"id":1518,"depth":219,"text":1519},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":5,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",[1557,6628,7733,9153,12142,13493,14982,16070,24832,24844,25440,25466,25590,25831,25896,25914,25927,25974,26098,26267,26466,26646,26851,26987,27082,27119,27132,27440,28181,28889,28910,29928,31559,31710,31723,31735,32036,51847,51862,51879,51912,54777,78111,94254,94275,94388,94509,95279,95942,96303,96341,96447,96547,96590,96616,96677,98331,98432,98457,98948,99448,100528,100811,101553,102055,102067,104083,105747,107250,108948,110865,112784,114806,118276,118708,119171,119920,122864,123212,123234,123590,126897,126909,127312,127335,127482,127649,127853,128152,128708,129362,131289,132883,133519,135009,136238,137473,139167,140919,143329,143445,144380,144591,145476,146711,146939,146952,148107,150519,152887,156208,158685,160329,162106,164119,167171,169351,171878,174072],{"id":1558,"title":1559,"body":1560,"description":181,"extension":1549,"meta":6623,"navigation":1551,"path":6624,"seo":6625,"stem":6626,"__hash__":6627},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1561,"toc":6595},[1562,1565,1569,1572,1576,1587,1591,1595,1598,1601,1604,1607,1610,1637,1641,1644,1647,1650,1653,1703,1707,1725,1727,1741,1744,1752,1755,2606,2613,2629,2633,2719,2723,2729,2814,2818,2856,2860,2924,2928,2932,2938,2949,2953,2958,2962,2967,2971,2976,2980,2984,2989,3255,3260,3398,3403,3659,3662,3670,3674,3679,3782,3785,4091,4100,4200,4203,4206,4209,4212,4472,4477,4617,4620,4799,4802,4930,4933,5085,5089,5094,5097,5108,5116,5119,5226,5230,5234,5239,5289,5294,5299,5323,5328,5381,5384,5389,5566,5571,5856,5861,6258,6262,6267,6324,6329,6337,6340,6480,6483,6592],[10,1563,1559],{"id":1564},"_1基础入门",[14,1566,1568],{"id":1567},"_11注释","1.1注释",[169,1570,1571],{},"\u002F\u002F或者\u002F* *\u002F",[14,1573,1575],{"id":1574},"_12命名","1.2命名",[34,1577,1578,1581,1584],{},[22,1579,1580],{},"字母数字下划线",[22,1582,1583],{},"开头必须是字母或_",[22,1585,1586],{},"不能使用关键词",[14,1588,1590],{"id":1589},"_13数据类型","1.3数据类型",[29,1592,1594],{"id":1593},"_131整形","1.3.1整形",[169,1596,1597],{},"short 短整形 2",[169,1599,1600],{},"int 整形 4",[169,1602,1603],{},"long 长整形 win4 linux32位4 linux64位8",[169,1605,1606],{},"long long 长长整形 8",[169,1608,1609],{},"利用sizeof可以求数据类型占用的内存空间大小",[176,1611,1615],{"className":1612,"code":1613,"language":1614,"meta":181,"style":181},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[183,1616,1617,1630],{"__ignoreMap":181},[186,1618,1619,1622,1624,1627],{"class":188,"line":189},[186,1620,1621],{"class":669},"sizeof",[186,1623,832],{"class":202},[186,1625,1626],{"class":669},"int",[186,1628,1629],{"class":202},")\n",[186,1631,1632,1634],{"class":188,"line":49},[186,1633,1621],{"class":669},[186,1635,1636],{"class":202},"(num)\n",[29,1638,1640],{"id":1639},"_132浮点型","1.3.2浮点型",[169,1642,1643],{},"float 单精度 4节 7位有效数字",[169,1645,1646],{},"double 双精度 8节 15-16有效数字",[169,1648,1649],{},"默认情况下，输出一个小数，会显示6位有效数字",[169,1651,1652],{},"注意点：",[176,1654,1656],{"className":1612,"code":1655,"language":1614,"meta":181,"style":181},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[183,1657,1658,1680],{"__ignoreMap":181},[186,1659,1660,1663,1666,1668,1671,1674,1677],{"class":188,"line":189},[186,1661,1662],{"class":669},"float",[186,1664,1665],{"class":202}," f1",[186,1667,529],{"class":669},[186,1669,1670],{"class":206},"3.14",[186,1672,1673],{"class":669},"f",[186,1675,1676],{"class":202},";",[186,1678,1679],{"class":192}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[186,1681,1682,1684,1687,1689,1692,1695,1698,1700],{"class":188,"line":49},[186,1683,1662],{"class":669},[186,1685,1686],{"class":202}," f2",[186,1688,529],{"class":669},[186,1690,1691],{"class":206},"3",[186,1693,1694],{"class":669},"e",[186,1696,1697],{"class":206},"2",[186,1699,1676],{"class":202},[186,1701,1702],{"class":192}," \u002F\u002F科学记数法\n",[29,1704,1706],{"id":1705},"_133字符型","1.3.3字符型",[176,1708,1710],{"className":1612,"code":1709,"language":1614,"meta":181,"style":181},"char ch='a'\n",[183,1711,1712],{"__ignoreMap":181},[186,1713,1714,1717,1720,1722],{"class":188,"line":189},[186,1715,1716],{"class":669},"char",[186,1718,1719],{"class":202}," ch",[186,1721,529],{"class":669},[186,1723,1724],{"class":532},"'a'\n",[169,1726,1652],{},[34,1728,1729,1732,1735,1738],{},[22,1730,1731],{},"在显示字符型变量时，只能单引号，双引号x",[22,1733,1734],{},"单引号内只能一个字符，不能字符串",[22,1736,1737],{},"c和c++字符型变量只占用一个字符",[22,1739,1740],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[169,1742,1743],{},"ASCII码大致由以下两部分组成：",[34,1745,1746,1749],{},[22,1747,1748],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[22,1750,1751],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[169,1753,1754],{},"ASCII码表格：",[99,1756,1757,1797],{},[102,1758,1759],{},[105,1760,1761,1767,1772,1776,1781,1785,1789,1793],{},[108,1762,1763,1766],{},[54,1764,1765],{},"ASCII","值",[108,1768,1769],{},[54,1770,1771],{},"控制字符",[108,1773,1774,1766],{},[54,1775,1765],{},[108,1777,1778],{},[54,1779,1780],{},"字符",[108,1782,1783,1766],{},[54,1784,1765],{},[108,1786,1787],{},[54,1788,1780],{},[108,1790,1791,1766],{},[54,1792,1765],{},[108,1794,1795],{},[54,1796,1780],{},[116,1798,1799,1825,1850,1875,1900,1926,1950,1975,2001,2026,2052,2078,2104,2129,2155,2181,2207,2231,2256,2280,2305,2329,2354,2379,2404,2429,2454,2480,2505,2529,2554,2580],{},[105,1800,1801,1804,1807,1810,1813,1816,1819,1822],{},[121,1802,1803],{},"0",[121,1805,1806],{},"NUT",[121,1808,1809],{},"32",[121,1811,1812],{},"(space)",[121,1814,1815],{},"64",[121,1817,1818],{},"@",[121,1820,1821],{},"96",[121,1823,1824],{},"、",[105,1826,1827,1830,1833,1836,1839,1842,1845,1848],{},[121,1828,1829],{},"1",[121,1831,1832],{},"SOH",[121,1834,1835],{},"33",[121,1837,1838],{},"!",[121,1840,1841],{},"65",[121,1843,1844],{},"A",[121,1846,1847],{},"97",[121,1849,948],{},[105,1851,1852,1854,1857,1860,1863,1866,1869,1872],{},[121,1853,1697],{},[121,1855,1856],{},"STX",[121,1858,1859],{},"34",[121,1861,1862],{},"\"",[121,1864,1865],{},"66",[121,1867,1868],{},"B",[121,1870,1871],{},"98",[121,1873,1874],{},"b",[105,1876,1877,1879,1882,1885,1888,1891,1894,1897],{},[121,1878,1691],{},[121,1880,1881],{},"ETX",[121,1883,1884],{},"35",[121,1886,1887],{},"#",[121,1889,1890],{},"67",[121,1892,1893],{},"C",[121,1895,1896],{},"99",[121,1898,1899],{},"c",[105,1901,1902,1905,1908,1911,1914,1917,1920,1923],{},[121,1903,1904],{},"4",[121,1906,1907],{},"EOT",[121,1909,1910],{},"36",[121,1912,1913],{},"$",[121,1915,1916],{},"68",[121,1918,1919],{},"D",[121,1921,1922],{},"100",[121,1924,1925],{},"d",[105,1927,1928,1931,1934,1937,1939,1942,1945,1948],{},[121,1929,1930],{},"5",[121,1932,1933],{},"ENQ",[121,1935,1936],{},"37",[121,1938,670],{},[121,1940,1941],{},"69",[121,1943,1944],{},"E",[121,1946,1947],{},"101",[121,1949,1694],{},[105,1951,1952,1955,1958,1961,1964,1967,1970,1973],{},[121,1953,1954],{},"6",[121,1956,1957],{},"ACK",[121,1959,1960],{},"38",[121,1962,1963],{},"&",[121,1965,1966],{},"70",[121,1968,1969],{},"F",[121,1971,1972],{},"102",[121,1974,1673],{},[105,1976,1977,1980,1983,1986,1989,1992,1995,1998],{},[121,1978,1979],{},"7",[121,1981,1982],{},"BEL",[121,1984,1985],{},"39",[121,1987,1988],{},",",[121,1990,1991],{},"71",[121,1993,1994],{},"G",[121,1996,1997],{},"103",[121,1999,2000],{},"g",[105,2002,2003,2006,2009,2012,2014,2017,2020,2023],{},[121,2004,2005],{},"8",[121,2007,2008],{},"BS",[121,2010,2011],{},"40",[121,2013,832],{},[121,2015,2016],{},"72",[121,2018,2019],{},"H",[121,2021,2022],{},"104",[121,2024,2025],{},"h",[105,2027,2028,2031,2034,2037,2040,2043,2046,2049],{},[121,2029,2030],{},"9",[121,2032,2033],{},"HT",[121,2035,2036],{},"41",[121,2038,2039],{},")",[121,2041,2042],{},"73",[121,2044,2045],{},"I",[121,2047,2048],{},"105",[121,2050,2051],{},"i",[105,2053,2054,2057,2060,2063,2066,2069,2072,2075],{},[121,2055,2056],{},"10",[121,2058,2059],{},"LF",[121,2061,2062],{},"42",[121,2064,2065],{},"*",[121,2067,2068],{},"74",[121,2070,2071],{},"J",[121,2073,2074],{},"106",[121,2076,2077],{},"j",[105,2079,2080,2083,2086,2089,2092,2095,2098,2101],{},[121,2081,2082],{},"11",[121,2084,2085],{},"VT",[121,2087,2088],{},"43",[121,2090,2091],{},"+",[121,2093,2094],{},"75",[121,2096,2097],{},"K",[121,2099,2100],{},"107",[121,2102,2103],{},"k",[105,2105,2106,2109,2112,2115,2117,2120,2123,2126],{},[121,2107,2108],{},"12",[121,2110,2111],{},"FF",[121,2113,2114],{},"44",[121,2116,1988],{},[121,2118,2119],{},"76",[121,2121,2122],{},"L",[121,2124,2125],{},"108",[121,2127,2128],{},"l",[105,2130,2131,2134,2137,2140,2143,2146,2149,2152],{},[121,2132,2133],{},"13",[121,2135,2136],{},"CR",[121,2138,2139],{},"45",[121,2141,2142],{},"-",[121,2144,2145],{},"77",[121,2147,2148],{},"M",[121,2150,2151],{},"109",[121,2153,2154],{},"m",[105,2156,2157,2160,2163,2166,2169,2172,2175,2178],{},[121,2158,2159],{},"14",[121,2161,2162],{},"SO",[121,2164,2165],{},"46",[121,2167,2168],{},".",[121,2170,2171],{},"78",[121,2173,2174],{},"N",[121,2176,2177],{},"110",[121,2179,2180],{},"n",[105,2182,2183,2186,2189,2192,2195,2198,2201,2204],{},[121,2184,2185],{},"15",[121,2187,2188],{},"SI",[121,2190,2191],{},"47",[121,2193,2194],{},"\u002F",[121,2196,2197],{},"79",[121,2199,2200],{},"O",[121,2202,2203],{},"111",[121,2205,2206],{},"o",[105,2208,2209,2212,2215,2218,2220,2223,2226,2229],{},[121,2210,2211],{},"16",[121,2213,2214],{},"DLE",[121,2216,2217],{},"48",[121,2219,1803],{},[121,2221,2222],{},"80",[121,2224,2225],{},"P",[121,2227,2228],{},"112",[121,2230,169],{},[105,2232,2233,2236,2239,2242,2244,2247,2250,2253],{},[121,2234,2235],{},"17",[121,2237,2238],{},"DCI",[121,2240,2241],{},"49",[121,2243,1829],{},[121,2245,2246],{},"81",[121,2248,2249],{},"Q",[121,2251,2252],{},"113",[121,2254,2255],{},"q",[105,2257,2258,2261,2264,2266,2268,2271,2274,2277],{},[121,2259,2260],{},"18",[121,2262,2263],{},"DC2",[121,2265,666],{},[121,2267,1697],{},[121,2269,2270],{},"82",[121,2272,2273],{},"R",[121,2275,2276],{},"114",[121,2278,2279],{},"r",[105,2281,2282,2285,2288,2291,2293,2296,2299,2302],{},[121,2283,2284],{},"19",[121,2286,2287],{},"DC3",[121,2289,2290],{},"51",[121,2292,1691],{},[121,2294,2295],{},"83",[121,2297,2298],{},"S",[121,2300,2301],{},"115",[121,2303,2304],{},"s",[105,2306,2307,2309,2312,2315,2317,2320,2323,2326],{},[121,2308,801],{},[121,2310,2311],{},"DC4",[121,2313,2314],{},"52",[121,2316,1904],{},[121,2318,2319],{},"84",[121,2321,2322],{},"T",[121,2324,2325],{},"116",[121,2327,2328],{},"t",[105,2330,2331,2334,2337,2340,2342,2345,2348,2351],{},[121,2332,2333],{},"21",[121,2335,2336],{},"NAK",[121,2338,2339],{},"53",[121,2341,1930],{},[121,2343,2344],{},"85",[121,2346,2347],{},"U",[121,2349,2350],{},"117",[121,2352,2353],{},"u",[105,2355,2356,2359,2362,2365,2367,2370,2373,2376],{},[121,2357,2358],{},"22",[121,2360,2361],{},"SYN",[121,2363,2364],{},"54",[121,2366,1954],{},[121,2368,2369],{},"86",[121,2371,2372],{},"V",[121,2374,2375],{},"118",[121,2377,2378],{},"v",[105,2380,2381,2384,2387,2390,2392,2395,2398,2401],{},[121,2382,2383],{},"23",[121,2385,2386],{},"TB",[121,2388,2389],{},"55",[121,2391,1979],{},[121,2393,2394],{},"87",[121,2396,2397],{},"W",[121,2399,2400],{},"119",[121,2402,2403],{},"w",[105,2405,2406,2409,2412,2415,2417,2420,2423,2426],{},[121,2407,2408],{},"24",[121,2410,2411],{},"CAN",[121,2413,2414],{},"56",[121,2416,2005],{},[121,2418,2419],{},"88",[121,2421,2422],{},"X",[121,2424,2425],{},"120",[121,2427,2428],{},"x",[105,2430,2431,2434,2437,2440,2442,2445,2448,2451],{},[121,2432,2433],{},"25",[121,2435,2436],{},"EM",[121,2438,2439],{},"57",[121,2441,2030],{},[121,2443,2444],{},"89",[121,2446,2447],{},"Y",[121,2449,2450],{},"121",[121,2452,2453],{},"y",[105,2455,2456,2459,2462,2465,2468,2471,2474,2477],{},[121,2457,2458],{},"26",[121,2460,2461],{},"SUB",[121,2463,2464],{},"58",[121,2466,2467],{},":",[121,2469,2470],{},"90",[121,2472,2473],{},"Z",[121,2475,2476],{},"122",[121,2478,2479],{},"z",[105,2481,2482,2485,2488,2491,2493,2496,2499,2502],{},[121,2483,2484],{},"27",[121,2486,2487],{},"ESC",[121,2489,2490],{},"59",[121,2492,1676],{},[121,2494,2495],{},"91",[121,2497,2498],{},"[",[121,2500,2501],{},"123",[121,2503,2504],{},"{",[105,2506,2507,2510,2513,2516,2518,2521,2523,2526],{},[121,2508,2509],{},"28",[121,2511,2512],{},"FS",[121,2514,2515],{},"60",[121,2517,520],{},[121,2519,2520],{},"92",[121,2522,2194],{},[121,2524,2525],{},"124",[121,2527,2528],{},"|",[105,2530,2531,2534,2537,2540,2542,2545,2548,2551],{},[121,2532,2533],{},"29",[121,2535,2536],{},"GS",[121,2538,2539],{},"61",[121,2541,529],{},[121,2543,2544],{},"93",[121,2546,2547],{},"]",[121,2549,2550],{},"125",[121,2552,2553],{},"}",[105,2555,2556,2559,2562,2565,2568,2571,2574,2577],{},[121,2557,2558],{},"30",[121,2560,2561],{},"RS",[121,2563,2564],{},"62",[121,2566,2567],{},">",[121,2569,2570],{},"94",[121,2572,2573],{},"^",[121,2575,2576],{},"126",[121,2578,2579],{},"`",[105,2581,2582,2585,2588,2591,2594,2597,2600,2603],{},[121,2583,2584],{},"31",[121,2586,2587],{},"US",[121,2589,2590],{},"63",[121,2592,2593],{},"?",[121,2595,2596],{},"95",[121,2598,2599],{},"_",[121,2601,2602],{},"127",[121,2604,2605],{},"DEL",[169,2607,2608,2609,2612],{},"ASCII 码大致由以下",[54,2610,2611],{},"两部分组","成：",[19,2614,2615,2622],{},[22,2616,2617,2618,2621],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[54,2619,2620],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[22,2623,2624,2625,2628],{},"ASCII 打印字符：数字 ",[54,2626,2627],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[29,2630,2632],{"id":2631},"_134转义字符","1.3.4转义字符",[176,2634,2636],{"className":1612,"code":2635,"language":1614,"meta":181,"style":181},"\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",[183,2637,2638,2643,2659,2673,2678,2691,2696],{"__ignoreMap":181},[186,2639,2640],{"class":188,"line":189},[186,2641,2642],{"class":192},"\u002F\u002F换行符\n",[186,2644,2645,2648,2651,2654,2656],{"class":188,"line":49},[186,2646,2647],{"class":202},"cout ",[186,2649,2650],{"class":669},"\u003C\u003C",[186,2652,2653],{"class":532},"\"hello world\u002Fn\"",[186,2655,1676],{"class":202},[186,2657,2658],{"class":192}," \u002F\u002F就等同于如下：\n",[186,2660,2661,2663,2665,2668,2670],{"class":188,"line":219},[186,2662,2647],{"class":202},[186,2664,2650],{"class":669},[186,2666,2667],{"class":532},"\"hello world\"",[186,2669,2650],{"class":669},[186,2671,2672],{"class":202},"endl;\n",[186,2674,2675],{"class":188,"line":225},[186,2676,2677],{"class":192},"\u002F\u002F反斜杠\n",[186,2679,2680,2682,2684,2687,2689],{"class":188,"line":242},[186,2681,2647],{"class":202},[186,2683,2650],{"class":669},[186,2685,2686],{"class":532},"\"\u002F\u002F\"",[186,2688,2650],{"class":669},[186,2690,2672],{"class":202},[186,2692,2693],{"class":188,"line":248},[186,2694,2695],{"class":192},"\u002F\u002F水平制表符\n",[186,2697,2698,2700,2702,2705,2708,2711,2713,2716],{"class":188,"line":265},[186,2699,2647],{"class":202},[186,2701,2650],{"class":669},[186,2703,2704],{"class":532},"\"aaaa",[186,2706,2707],{"class":206},"\\t",[186,2709,2710],{"class":532},"helloworld\"",[186,2712,2650],{"class":669},[186,2714,2715],{"class":202},"endl;",[186,2717,2718],{"class":192}," \u002F\u002F输出窗口时有对齐效果\n",[29,2720,2722],{"id":2721},"_135字符串型","1.3.5字符串型",[169,2724,2725,2726,2728],{},"char 变量名",[186,2727],{},"=\"字符串值\"",[176,2730,2732],{"className":1612,"code":2731,"language":1614,"meta":181,"style":181},"\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",[183,2733,2734,2739,2744,2749,2754,2767,2780,2785,2790,2801],{"__ignoreMap":181},[186,2735,2736],{"class":188,"line":189},[186,2737,2738],{"class":192},"\u002F\u002Fc风格字符串\n",[186,2740,2741],{"class":188,"line":49},[186,2742,2743],{"class":192},"\u002F\u002F注意事项：\n",[186,2745,2746],{"class":188,"line":219},[186,2747,2748],{"class":192},"\u002F\u002F1.char字符串名[]\n",[186,2750,2751],{"class":188,"line":225},[186,2752,2753],{"class":192},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[186,2755,2756,2758,2761,2763,2765],{"class":188,"line":242},[186,2757,1716],{"class":669},[186,2759,2760],{"class":202}," str[]",[186,2762,529],{"class":669},[186,2764,2667],{"class":532},[186,2766,634],{"class":202},[186,2768,2769,2771,2773,2776,2778],{"class":188,"line":248},[186,2770,2647],{"class":202},[186,2772,2650],{"class":669},[186,2774,2775],{"class":202},"str",[186,2777,2650],{"class":669},[186,2779,2672],{"class":202},[186,2781,2782],{"class":188,"line":265},[186,2783,2784],{"class":192},"\u002F\u002Fc++风格字符串\n",[186,2786,2787],{"class":188,"line":271},[186,2788,2789],{"class":192},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[186,2791,2792,2795,2797,2799],{"class":188,"line":288},[186,2793,2794],{"class":202},"string str2",[186,2796,529],{"class":669},[186,2798,2667],{"class":532},[186,2800,634],{"class":202},[186,2802,2803,2805,2807,2810,2812],{"class":188,"line":294},[186,2804,2647],{"class":202},[186,2806,2650],{"class":669},[186,2808,2809],{"class":202},"str2",[186,2811,2650],{"class":669},[186,2813,2672],{"class":202},[29,2815,2817],{"id":2816},"_136布尔类型bool","1.3.6布尔类型bool",[176,2819,2821],{"className":1612,"code":2820,"language":1614,"meta":181,"style":181},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[183,2822,2823,2838],{"__ignoreMap":181},[186,2824,2825,2828,2831,2833,2836],{"class":188,"line":189},[186,2826,2827],{"class":669},"bool",[186,2829,2830],{"class":202}," flag",[186,2832,529],{"class":669},[186,2834,2835],{"class":206},"true",[186,2837,634],{"class":202},[186,2839,2840,2843,2846,2849,2851,2853],{"class":188,"line":49},[186,2841,2842],{"class":202},"cout",[186,2844,2845],{"class":669},"\u003C\u003Csizeof",[186,2847,2848],{"class":202},"(flag)",[186,2850,2650],{"class":669},[186,2852,2715],{"class":202},[186,2854,2855],{"class":192}," \u002F\u002F查看布尔占内存空间\n",[14,2857,2859],{"id":2858},"_14键盘输入cin","1.4键盘输入cin",[176,2861,2863],{"className":1612,"code":2862,"language":1614,"meta":181,"style":181},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[183,2864,2865,2878,2895,2906],{"__ignoreMap":181},[186,2866,2867,2869,2872,2874,2876],{"class":188,"line":189},[186,2868,1626],{"class":669},[186,2870,2871],{"class":202}," a",[186,2873,529],{"class":669},[186,2875,1803],{"class":206},[186,2877,634],{"class":202},[186,2879,2880,2882,2884,2887,2889,2891,2893],{"class":188,"line":49},[186,2881,2842],{"class":202},[186,2883,2650],{"class":669},[186,2885,2886],{"class":532},"\"请给整型变量a赋值\"",[186,2888,2650],{"class":669},[186,2890,948],{"class":202},[186,2892,2650],{"class":669},[186,2894,2672],{"class":202},[186,2896,2897,2900,2903],{"class":188,"line":219},[186,2898,2899],{"class":202},"cin ",[186,2901,2902],{"class":669},">>",[186,2904,2905],{"class":202}," a;\n",[186,2907,2908,2910,2912,2915,2918,2920,2922],{"class":188,"line":225},[186,2909,2647],{"class":202},[186,2911,2650],{"class":669},[186,2913,2914],{"class":532}," \"整型变量a=\"",[186,2916,2917],{"class":669}," \u003C\u003C",[186,2919,948],{"class":202},[186,2921,2650],{"class":669},[186,2923,2672],{"class":202},[14,2925,2927],{"id":2926},"_15运算符","1.5运算符",[29,2929,2931],{"id":2930},"_151算术运算符","1.5.1算术运算符",[169,2933,2934,2937],{},[164,2935],{"alt":181,"src":2936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[34,2939,2940,2943,2946],{},[22,2941,2942],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[22,2944,2945],{},"两个小数不可以做取模运算",[22,2947,2948],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[29,2950,2952],{"id":2951},"_152赋值运算符","1.5.2赋值运算符",[169,2954,2955],{},[164,2956],{"alt":181,"src":2957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[29,2959,2961],{"id":2960},"_153比较运算符","1.5.3比较运算符",[169,2963,2964],{},[164,2965],{"alt":181,"src":2966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[29,2968,2970],{"id":2969},"_154逻辑运算符","1.5.4逻辑运算符",[169,2972,2973],{},[164,2974],{"alt":181,"src":2975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2977,2979],{"id":2978},"_16程序流程结构","1.6程序流程结构",[29,2981,2983],{"id":2982},"_161选择结构","1.6.1选择结构",[34,2985,2986],{},[22,2987,2988],{},"if语句\n单行、多行、多条件if语句",[176,2990,2992],{"className":1612,"code":2991,"language":1614,"meta":181,"style":181},"\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",[183,2993,2994,2999,3014,3019,3033,3037,3042,3051,3064,3068,3081,3085,3090,3094,3108,3113,3119,3140,3145,3159,3164,3193,3198,3215,3220,3225,3230,3244,3249],{"__ignoreMap":181},[186,2995,2996],{"class":188,"line":189},[186,2997,2998],{"class":192},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[186,3000,3001,3004,3007,3009,3012],{"class":188,"line":49},[186,3002,3003],{"class":669},"if",[186,3005,3006],{"class":202},"(score",[186,3008,2567],{"class":669},[186,3010,3011],{"class":206},"600",[186,3013,1629],{"class":202},[186,3015,3016],{"class":188,"line":219},[186,3017,3018],{"class":202},"{\n",[186,3020,3021,3024,3026,3029,3031],{"class":188,"line":225},[186,3022,3023],{"class":202},"    cout",[186,3025,2650],{"class":669},[186,3027,3028],{"class":532},"'这是单行if语句'",[186,3030,2650],{"class":669},[186,3032,2672],{"class":202},[186,3034,3035],{"class":188,"line":242},[186,3036,639],{"class":202},[186,3038,3039],{"class":188,"line":248},[186,3040,3041],{"class":192},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[186,3043,3044,3046,3048],{"class":188,"line":265},[186,3045,2899],{"class":202},[186,3047,2902],{"class":669},[186,3049,3050],{"class":202}," score\n",[186,3052,3053,3055,3057,3060,3062],{"class":188,"line":271},[186,3054,3003],{"class":669},[186,3056,3006],{"class":202},[186,3058,3059],{"class":669},"\u003C=",[186,3061,3011],{"class":206},[186,3063,1629],{"class":202},[186,3065,3066],{"class":188,"line":288},[186,3067,3018],{"class":202},[186,3069,3070,3072,3074,3077,3079],{"class":188,"line":294},[186,3071,3023],{"class":202},[186,3073,2902],{"class":669},[186,3075,3076],{"class":532},"\"小于等于600\"",[186,3078,2650],{"class":669},[186,3080,2672],{"class":202},[186,3082,3083],{"class":188,"line":1212},[186,3084,639],{"class":202},[186,3086,3087],{"class":188,"line":1223},[186,3088,3089],{"class":669},"else\n",[186,3091,3092],{"class":188,"line":1236},[186,3093,3018],{"class":202},[186,3095,3097,3099,3101,3104,3106],{"class":188,"line":3096},14,[186,3098,3023],{"class":202},[186,3100,2902],{"class":669},[186,3102,3103],{"class":532},"\"大于600\"",[186,3105,2902],{"class":669},[186,3107,2672],{"class":202},[186,3109,3111],{"class":188,"line":3110},15,[186,3112,639],{"class":202},[186,3114,3116],{"class":188,"line":3115},16,[186,3117,3118],{"class":192},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[186,3120,3122,3124,3127,3129,3131,3134,3136,3138],{"class":188,"line":3121},17,[186,3123,3003],{"class":669},[186,3125,3126],{"class":202}," (",[186,3128,1803],{"class":206},[186,3130,520],{"class":669},[186,3132,3133],{"class":202},"num",[186,3135,520],{"class":669},[186,3137,1922],{"class":206},[186,3139,1629],{"class":202},[186,3141,3143],{"class":188,"line":3142},18,[186,3144,3018],{"class":202},[186,3146,3148,3150,3152,3155,3157],{"class":188,"line":3147},19,[186,3149,3023],{"class":202},[186,3151,2650],{"class":669},[186,3153,3154],{"class":532},"\"小于100\"",[186,3156,2650],{"class":669},[186,3158,2672],{"class":202},[186,3160,3162],{"class":188,"line":3161},20,[186,3163,639],{"class":202},[186,3165,3167,3170,3173,3176,3179,3181,3184,3186,3188,3191],{"class":188,"line":3166},21,[186,3168,3169],{"class":669},"else",[186,3171,3172],{"class":669}," if",[186,3174,3175],{"class":202}," (nmu",[186,3177,3178],{"class":669},">=",[186,3180,1922],{"class":206},[186,3182,3183],{"class":669},"&&",[186,3185,3133],{"class":202},[186,3187,520],{"class":669},[186,3189,3190],{"class":206},"200",[186,3192,1629],{"class":202},[186,3194,3196],{"class":188,"line":3195},22,[186,3197,3018],{"class":202},[186,3199,3201,3203,3205,3208,3210,3212],{"class":188,"line":3200},23,[186,3202,3023],{"class":202},[186,3204,2650],{"class":669},[186,3206,3207],{"class":532},"\"不小于100且小于200\"",[186,3209,2650],{"class":669},[186,3211,2715],{"class":202},[186,3213,3214],{"class":192}," \u002F\u002F可以无限else if,python中是elif：\n",[186,3216,3218],{"class":188,"line":3217},24,[186,3219,639],{"class":202},[186,3221,3223],{"class":188,"line":3222},25,[186,3224,3089],{"class":669},[186,3226,3228],{"class":188,"line":3227},26,[186,3229,3018],{"class":202},[186,3231,3233,3235,3237,3240,3242],{"class":188,"line":3232},27,[186,3234,3023],{"class":202},[186,3236,2650],{"class":669},[186,3238,3239],{"class":532},"\"不小于200\"",[186,3241,2650],{"class":669},[186,3243,2672],{"class":202},[186,3245,3247],{"class":188,"line":3246},28,[186,3248,639],{"class":202},[186,3250,3252],{"class":188,"line":3251},29,[186,3253,3254],{"class":192},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[34,3256,3257],{"start":49},[22,3258,3259],{},"三目运算符",[176,3261,3263],{"className":1612,"code":3262,"language":1614,"meta":181,"style":181},"\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",[183,3264,3265,3270,3275,3301,3323,3340,3345,3368,3383],{"__ignoreMap":181},[186,3266,3267],{"class":188,"line":189},[186,3268,3269],{"class":192},"\u002F\u002F创建三个变量a,b,c\n",[186,3271,3272],{"class":188,"line":49},[186,3273,3274],{"class":192},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[186,3276,3277,3279,3281,3283,3285,3288,3290,3292,3295,3297,3299],{"class":188,"line":219},[186,3278,1626],{"class":669},[186,3280,2871],{"class":202},[186,3282,529],{"class":669},[186,3284,801],{"class":206},[186,3286,3287],{"class":202},",b",[186,3289,529],{"class":669},[186,3291,2056],{"class":206},[186,3293,3294],{"class":202},",c",[186,3296,529],{"class":669},[186,3298,1803],{"class":206},[186,3300,634],{"class":202},[186,3302,3303,3305,3307,3310,3312,3314,3316,3318,3320],{"class":188,"line":225},[186,3304,1899],{"class":202},[186,3306,529],{"class":669},[186,3308,3309],{"class":202},"(a",[186,3311,2567],{"class":669},[186,3313,1874],{"class":202},[186,3315,2593],{"class":669},[186,3317,948],{"class":202},[186,3319,2467],{"class":669},[186,3321,3322],{"class":202},"b)\n",[186,3324,3325,3327,3329,3332,3334,3336,3338],{"class":188,"line":242},[186,3326,2842],{"class":202},[186,3328,2650],{"class":669},[186,3330,3331],{"class":532},"\"c=\"",[186,3333,2650],{"class":669},[186,3335,1899],{"class":202},[186,3337,2650],{"class":669},[186,3339,2672],{"class":202},[186,3341,3342],{"class":188,"line":248},[186,3343,3344],{"class":192},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[186,3346,3347,3349,3351,3353,3355,3357,3359,3362,3364,3366],{"class":188,"line":265},[186,3348,3309],{"class":202},[186,3350,2567],{"class":669},[186,3352,1874],{"class":202},[186,3354,2593],{"class":669},[186,3356,948],{"class":202},[186,3358,2467],{"class":669},[186,3360,3361],{"class":202},"b)",[186,3363,529],{"class":669},[186,3365,1922],{"class":206},[186,3367,634],{"class":202},[186,3369,3370,3372,3374,3376,3378,3380],{"class":188,"line":271},[186,3371,2842],{"class":202},[186,3373,2650],{"class":669},[186,3375,948],{"class":202},[186,3377,2650],{"class":669},[186,3379,2715],{"class":202},[186,3381,3382],{"class":192}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[186,3384,3385,3387,3389,3391,3393,3395],{"class":188,"line":288},[186,3386,2842],{"class":202},[186,3388,2650],{"class":669},[186,3390,1874],{"class":202},[186,3392,2650],{"class":669},[186,3394,2715],{"class":202},[186,3396,3397],{"class":192}," \u002F\u002F10   a>b,b还是原值\n",[34,3399,3400],{"start":219},[22,3401,3402],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[176,3404,3406],{"className":1612,"code":3405,"language":1614,"meta":181,"style":181},"\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",[183,3407,3408,3413,3421,3434,3444,3448,3462,3475,3485,3493,3498,3523,3544,3566,3587,3609,3630,3650,3655],{"__ignoreMap":181},[186,3409,3410],{"class":188,"line":189},[186,3411,3412],{"class":192},"\u002F\u002F案例-电影打分\n",[186,3414,3415,3418],{"class":188,"line":49},[186,3416,3417],{"class":669},"#include",[186,3419,3420],{"class":532},"\u003Ciostream>\n",[186,3422,3423,3426,3429,3432],{"class":188,"line":219},[186,3424,3425],{"class":669},"using",[186,3427,3428],{"class":669}," namespace",[186,3430,3431],{"class":198}," std",[186,3433,634],{"class":202},[186,3435,3436,3438,3441],{"class":188,"line":225},[186,3437,1626],{"class":669},[186,3439,3440],{"class":198}," main",[186,3442,3443],{"class":202},"()\n",[186,3445,3446],{"class":188,"line":242},[186,3447,3018],{"class":202},[186,3449,3450,3453,3456,3458,3460],{"class":188,"line":248},[186,3451,3452],{"class":669},"    int",[186,3454,3455],{"class":202}," score",[186,3457,529],{"class":669},[186,3459,1803],{"class":206},[186,3461,634],{"class":202},[186,3463,3464,3466,3468,3471,3473],{"class":188,"line":265},[186,3465,3023],{"class":202},[186,3467,2650],{"class":669},[186,3469,3470],{"class":532},"\"电影打分：\"",[186,3472,2650],{"class":669},[186,3474,2672],{"class":202},[186,3476,3477,3480,3482],{"class":188,"line":271},[186,3478,3479],{"class":202},"    cin",[186,3481,2902],{"class":669},[186,3483,3484],{"class":202},"score;\n",[186,3486,3487,3490],{"class":188,"line":288},[186,3488,3489],{"class":669},"    switch",[186,3491,3492],{"class":202},"(score)\n",[186,3494,3495],{"class":188,"line":294},[186,3496,3497],{"class":202},"    {\n",[186,3499,3500,3503,3506,3509,3511,3514,3516,3518,3521],{"class":188,"line":1212},[186,3501,3502],{"class":669},"        case",[186,3504,3505],{"class":206}," 10",[186,3507,3508],{"class":202},":cout",[186,3510,2650],{"class":669},[186,3512,3513],{"class":532},"\"经典\"",[186,3515,2650],{"class":669},[186,3517,2715],{"class":202},[186,3519,3520],{"class":669},"break",[186,3522,634],{"class":202},[186,3524,3525,3527,3530,3532,3534,3536,3538,3540,3542],{"class":188,"line":1223},[186,3526,3502],{"class":669},[186,3528,3529],{"class":206}," 9",[186,3531,3508],{"class":202},[186,3533,2650],{"class":669},[186,3535,3513],{"class":532},[186,3537,2650],{"class":669},[186,3539,2715],{"class":202},[186,3541,3520],{"class":669},[186,3543,634],{"class":202},[186,3545,3546,3548,3551,3553,3555,3558,3560,3562,3564],{"class":188,"line":1236},[186,3547,3502],{"class":669},[186,3549,3550],{"class":206}," 8",[186,3552,3508],{"class":202},[186,3554,2650],{"class":669},[186,3556,3557],{"class":532},"\"非常好\"",[186,3559,2650],{"class":669},[186,3561,2715],{"class":202},[186,3563,3520],{"class":669},[186,3565,634],{"class":202},[186,3567,3568,3570,3573,3575,3577,3579,3581,3583,3585],{"class":188,"line":3096},[186,3569,3502],{"class":669},[186,3571,3572],{"class":206}," 7",[186,3574,3508],{"class":202},[186,3576,2650],{"class":669},[186,3578,3557],{"class":532},[186,3580,2650],{"class":669},[186,3582,2715],{"class":202},[186,3584,3520],{"class":669},[186,3586,634],{"class":202},[186,3588,3589,3591,3594,3596,3598,3601,3603,3605,3607],{"class":188,"line":3110},[186,3590,3502],{"class":669},[186,3592,3593],{"class":206}," 6",[186,3595,3508],{"class":202},[186,3597,2650],{"class":669},[186,3599,3600],{"class":532},"\"一般\"",[186,3602,2650],{"class":669},[186,3604,2715],{"class":202},[186,3606,3520],{"class":669},[186,3608,634],{"class":202},[186,3610,3611,3613,3616,3618,3620,3622,3624,3626,3628],{"class":188,"line":3115},[186,3612,3502],{"class":669},[186,3614,3615],{"class":206}," 5",[186,3617,3508],{"class":202},[186,3619,2650],{"class":669},[186,3621,3600],{"class":532},[186,3623,2650],{"class":669},[186,3625,2715],{"class":202},[186,3627,3520],{"class":669},[186,3629,634],{"class":202},[186,3631,3632,3635,3637,3639,3642,3644,3646,3648],{"class":188,"line":3121},[186,3633,3634],{"class":669},"        default",[186,3636,3508],{"class":202},[186,3638,2650],{"class":669},[186,3640,3641],{"class":532},"\"烂片\"",[186,3643,2650],{"class":669},[186,3645,2715],{"class":202},[186,3647,3520],{"class":669},[186,3649,634],{"class":202},[186,3651,3652],{"class":188,"line":3142},[186,3653,3654],{"class":202},"    }\n",[186,3656,3657],{"class":188,"line":3147},[186,3658,639],{"class":202},[169,3660,3661],{},"if和switch区别：",[19,3663,3664,3667],{},[22,3665,3666],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[22,3668,3669],{},"switch优点：结构清晰，执行效率高",[29,3671,3673],{"id":3672},"_162循环结构","1.6.2循环结构",[34,3675,3676],{},[22,3677,3678],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[176,3680,3682],{"className":1612,"code":3681,"language":1614,"meta":181,"style":181},"\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",[183,3683,3684,3689,3697,3701,3714,3728,3732,3752,3762,3766,3778],{"__ignoreMap":181},[186,3685,3686],{"class":188,"line":189},[186,3687,3688],{"class":192},"\u002F\u002F打印0-9数字\n",[186,3690,3691,3693,3695],{"class":188,"line":49},[186,3692,1626],{"class":669},[186,3694,3440],{"class":198},[186,3696,3443],{"class":202},[186,3698,3699],{"class":188,"line":219},[186,3700,3018],{"class":202},[186,3702,3703,3705,3708,3710,3712],{"class":188,"line":225},[186,3704,3452],{"class":669},[186,3706,3707],{"class":202}," num",[186,3709,529],{"class":669},[186,3711,1803],{"class":206},[186,3713,634],{"class":202},[186,3715,3716,3719,3722,3724,3726],{"class":188,"line":242},[186,3717,3718],{"class":669},"    while",[186,3720,3721],{"class":202},"(num",[186,3723,520],{"class":669},[186,3725,2056],{"class":206},[186,3727,1629],{"class":202},[186,3729,3730],{"class":188,"line":248},[186,3731,3497],{"class":202},[186,3733,3734,3737,3740,3742,3744,3746,3749],{"class":188,"line":265},[186,3735,3736],{"class":198},"       std",[186,3738,3739],{"class":202},"::cout",[186,3741,2650],{"class":669},[186,3743,3133],{"class":202},[186,3745,2650],{"class":669},[186,3747,3748],{"class":198},"std",[186,3750,3751],{"class":202},"::endl;\n",[186,3753,3754,3757,3760],{"class":188,"line":271},[186,3755,3756],{"class":202},"        num",[186,3758,3759],{"class":669},"++",[186,3761,634],{"class":202},[186,3763,3764],{"class":188,"line":288},[186,3765,3654],{"class":202},[186,3767,3768,3771,3773,3776],{"class":188,"line":294},[186,3769,3770],{"class":198},"    system",[186,3772,832],{"class":202},[186,3774,3775],{"class":532},"\"pause\"",[186,3777,1629],{"class":202},[186,3779,3780],{"class":188,"line":1212},[186,3781,639],{"class":202},[169,3783,3784],{},"注意：写好循环条件，避免死循环情况",[176,3786,3788],{"className":1612,"code":3787,"language":1614,"meta":181,"style":181},"\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",[183,3789,3790,3795,3802,3809,3819,3827,3831,3836,3863,3868,3873,3881,3908,3913,3918,3931,3941,3945,3955,3960,3973,3978,3992,3997,4012,4016,4029,4033,4038,4042,4056,4064,4069,4075,4081,4086],{"__ignoreMap":181},[186,3791,3792],{"class":188,"line":189},[186,3793,3794],{"class":192},"\u002F\u002F循环结构-猜数字\n",[186,3796,3797,3799],{"class":188,"line":49},[186,3798,3417],{"class":669},[186,3800,3801],{"class":532}," \u003Ciostream>\n",[186,3803,3804,3806],{"class":188,"line":219},[186,3805,3417],{"class":669},[186,3807,3808],{"class":532}," \u003Cctime>\n",[186,3810,3811,3813,3815,3817],{"class":188,"line":225},[186,3812,3425],{"class":669},[186,3814,3428],{"class":669},[186,3816,3431],{"class":198},[186,3818,634],{"class":202},[186,3820,3821,3823,3825],{"class":188,"line":242},[186,3822,1626],{"class":669},[186,3824,3440],{"class":198},[186,3826,3443],{"class":202},[186,3828,3829],{"class":188,"line":248},[186,3830,3018],{"class":202},[186,3832,3833],{"class":188,"line":265},[186,3834,3835],{"class":192},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[186,3837,3838,3841,3844,3847,3850,3852,3855,3857,3860],{"class":188,"line":271},[186,3839,3840],{"class":198},"    srand",[186,3842,3843],{"class":202},"((",[186,3845,3846],{"class":669},"unsigned",[186,3848,3849],{"class":669}," int",[186,3851,2039],{"class":202},[186,3853,3854],{"class":198},"time",[186,3856,832],{"class":202},[186,3858,3859],{"class":206},"NULL",[186,3861,3862],{"class":202},"));\n",[186,3864,3865],{"class":188,"line":288},[186,3866,3867],{"emptyLinePlaceholder":1551},"\n",[186,3869,3870],{"class":188,"line":294},[186,3871,3872],{"class":192},"    \u002F\u002F1.系统生成随机数\n",[186,3874,3875,3878],{"class":188,"line":1212},[186,3876,3877],{"class":192},"    \u002F\u002Frand()%100",[186,3879,3880],{"class":192}," \u002F\u002F生成0-99的随机数\n",[186,3882,3883,3885,3887,3889,3892,3895,3897,3899,3901,3903,3905],{"class":188,"line":1223},[186,3884,3452],{"class":669},[186,3886,3707],{"class":202},[186,3888,529],{"class":669},[186,3890,3891],{"class":198},"rand",[186,3893,3894],{"class":202},"()",[186,3896,670],{"class":669},[186,3898,1922],{"class":206},[186,3900,2091],{"class":669},[186,3902,1829],{"class":206},[186,3904,1676],{"class":202},[186,3906,3907],{"class":192}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[186,3909,3910],{"class":188,"line":1236},[186,3911,3912],{"class":192},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[186,3914,3915],{"class":188,"line":3096},[186,3916,3917],{"class":192},"    \u002F\u002F2.玩家猜测\n",[186,3919,3920,3922,3925,3927,3929],{"class":188,"line":3110},[186,3921,3452],{"class":669},[186,3923,3924],{"class":202}," val",[186,3926,529],{"class":669},[186,3928,1803],{"class":206},[186,3930,634],{"class":202},[186,3932,3933,3935,3937,3939],{"class":188,"line":3115},[186,3934,3718],{"class":669},[186,3936,3126],{"class":202},[186,3938,1829],{"class":206},[186,3940,1629],{"class":202},[186,3942,3943],{"class":188,"line":3121},[186,3944,3497],{"class":202},[186,3946,3947,3950,3952],{"class":188,"line":3142},[186,3948,3949],{"class":202},"        cin",[186,3951,2902],{"class":669},[186,3953,3954],{"class":202},"val;\n",[186,3956,3957],{"class":188,"line":3147},[186,3958,3959],{"class":192},"        \u002F\u002F3.判断玩家猜测\n",[186,3961,3962,3965,3968,3970],{"class":188,"line":3161},[186,3963,3964],{"class":669},"        if",[186,3966,3967],{"class":202},"(val",[186,3969,520],{"class":669},[186,3971,3972],{"class":202},"num) \n",[186,3974,3975],{"class":188,"line":3166},[186,3976,3977],{"class":202},"        {\n",[186,3979,3980,3983,3985,3988,3990],{"class":188,"line":3195},[186,3981,3982],{"class":202},"            cout",[186,3984,2650],{"class":669},[186,3986,3987],{"class":532},"\"猜小了！\"",[186,3989,2650],{"class":669},[186,3991,2672],{"class":202},[186,3993,3994],{"class":188,"line":3200},[186,3995,3996],{"class":202},"        }\n",[186,3998,3999,4002,4004,4007,4009],{"class":188,"line":3217},[186,4000,4001],{"class":669},"        else",[186,4003,3172],{"class":669},[186,4005,4006],{"class":202}," (val",[186,4008,2567],{"class":669},[186,4010,4011],{"class":202},"num)\n",[186,4013,4014],{"class":188,"line":3222},[186,4015,3977],{"class":202},[186,4017,4018,4020,4022,4025,4027],{"class":188,"line":3227},[186,4019,3982],{"class":202},[186,4021,2650],{"class":669},[186,4023,4024],{"class":532},"\"猜大了！\"",[186,4026,2650],{"class":669},[186,4028,2672],{"class":202},[186,4030,4031],{"class":188,"line":3232},[186,4032,3996],{"class":202},[186,4034,4035],{"class":188,"line":3246},[186,4036,4037],{"class":669},"        else\n",[186,4039,4040],{"class":188,"line":3251},[186,4041,3977],{"class":202},[186,4043,4045,4047,4049,4052,4054],{"class":188,"line":4044},30,[186,4046,3982],{"class":202},[186,4048,2650],{"class":669},[186,4050,4051],{"class":532},"\"猜对了！\"",[186,4053,2650],{"class":669},[186,4055,2672],{"class":202},[186,4057,4059,4062],{"class":188,"line":4058},31,[186,4060,4061],{"class":669},"            break",[186,4063,634],{"class":202},[186,4065,4067],{"class":188,"line":4066},32,[186,4068,3996],{"class":202},[186,4070,4072],{"class":188,"line":4071},33,[186,4073,4074],{"class":192},"        \u002F\u002F猜对 退出游戏\n",[186,4076,4078],{"class":188,"line":4077},34,[186,4079,4080],{"class":192},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[186,4082,4084],{"class":188,"line":4083},35,[186,4085,3654],{"class":202},[186,4087,4089],{"class":188,"line":4088},36,[186,4090,639],{"class":202},[34,4092,4093],{"start":49},[22,4094,4095,4096,4099],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[54,4097,4098],{},"do...while会先执行一次循环语句","，在判断循环语句",[176,4101,4103],{"className":1612,"code":4102,"language":1614,"meta":181,"style":181},"\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",[183,4104,4105,4110,4118,4122,4134,4142,4146,4163,4170,4174,4186,4196],{"__ignoreMap":181},[186,4106,4107],{"class":188,"line":189},[186,4108,4109],{"class":192},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[186,4111,4112,4114,4116],{"class":188,"line":49},[186,4113,1626],{"class":669},[186,4115,3440],{"class":198},[186,4117,3443],{"class":202},[186,4119,4120],{"class":188,"line":219},[186,4121,3018],{"class":202},[186,4123,4124,4126,4128,4130,4132],{"class":188,"line":225},[186,4125,3452],{"class":669},[186,4127,3707],{"class":202},[186,4129,529],{"class":669},[186,4131,1803],{"class":206},[186,4133,634],{"class":202},[186,4135,4136,4139],{"class":188,"line":242},[186,4137,4138],{"class":669},"    do",[186,4140,4141],{"class":202}," \n",[186,4143,4144],{"class":188,"line":248},[186,4145,3497],{"class":202},[186,4147,4148,4151,4153,4155,4157,4159,4161],{"class":188,"line":265},[186,4149,4150],{"class":198},"        std",[186,4152,3739],{"class":202},[186,4154,2650],{"class":669},[186,4156,3133],{"class":202},[186,4158,2650],{"class":669},[186,4160,3748],{"class":198},[186,4162,3751],{"class":202},[186,4164,4165,4167],{"class":188,"line":271},[186,4166,3756],{"class":202},[186,4168,4169],{"class":669},"++\n",[186,4171,4172],{"class":188,"line":288},[186,4173,3654],{"class":202},[186,4175,4176,4178,4180,4182,4184],{"class":188,"line":294},[186,4177,3718],{"class":669},[186,4179,3721],{"class":202},[186,4181,520],{"class":669},[186,4183,2056],{"class":206},[186,4185,1112],{"class":202},[186,4187,4188,4190,4192,4194],{"class":188,"line":1212},[186,4189,3770],{"class":198},[186,4191,832],{"class":202},[186,4193,3775],{"class":532},[186,4195,1112],{"class":202},[186,4197,4198],{"class":188,"line":1223},[186,4199,639],{"class":202},[169,4201,4202],{},"案例-水仙花数",[169,4204,4205],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[169,4207,4208],{},"例如：1^3+5^3+3^3=153",[169,4210,4211],{},"请用do...while语句，求出所有3位数的水仙花数",[176,4213,4215],{"className":1612,"code":4214,"language":1614,"meta":181,"style":181},"#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",[183,4216,4217,4223,4233,4241,4245,4250,4262,4268,4272,4277,4293,4309,4325,4340,4359,4374,4422,4426,4438,4442,4450,4454,4468],{"__ignoreMap":181},[186,4218,4219,4221],{"class":188,"line":189},[186,4220,3417],{"class":669},[186,4222,3801],{"class":532},[186,4224,4225,4227,4229,4231],{"class":188,"line":49},[186,4226,3425],{"class":669},[186,4228,3428],{"class":669},[186,4230,3431],{"class":198},[186,4232,634],{"class":202},[186,4234,4235,4237,4239],{"class":188,"line":219},[186,4236,1626],{"class":669},[186,4238,3440],{"class":198},[186,4240,3443],{"class":202},[186,4242,4243],{"class":188,"line":225},[186,4244,3018],{"class":202},[186,4246,4247],{"class":188,"line":242},[186,4248,4249],{"class":192},"    \u002F\u002F1.先打印所有三位数字\n",[186,4251,4252,4254,4256,4258,4260],{"class":188,"line":248},[186,4253,3452],{"class":669},[186,4255,3707],{"class":202},[186,4257,529],{"class":669},[186,4259,1922],{"class":206},[186,4261,634],{"class":202},[186,4263,4264,4266],{"class":188,"line":265},[186,4265,4138],{"class":669},[186,4267,4141],{"class":202},[186,4269,4270],{"class":188,"line":271},[186,4271,3497],{"class":202},[186,4273,4274],{"class":188,"line":288},[186,4275,4276],{"class":192},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[186,4278,4279,4282,4284,4286,4288,4290],{"class":188,"line":294},[186,4280,4281],{"class":669},"        int",[186,4283,2871],{"class":202},[186,4285,529],{"class":669},[186,4287,1803],{"class":206},[186,4289,1676],{"class":202},[186,4291,4292],{"class":192}," \u002F\u002F个位\n",[186,4294,4295,4297,4300,4302,4304,4306],{"class":188,"line":1212},[186,4296,4281],{"class":669},[186,4298,4299],{"class":202}," b",[186,4301,529],{"class":669},[186,4303,1803],{"class":206},[186,4305,1676],{"class":202},[186,4307,4308],{"class":192}," \u002F\u002F十位\n",[186,4310,4311,4313,4316,4318,4320,4322],{"class":188,"line":1223},[186,4312,4281],{"class":669},[186,4314,4315],{"class":202}," c",[186,4317,529],{"class":669},[186,4319,1803],{"class":206},[186,4321,1676],{"class":202},[186,4323,4324],{"class":192}," \u002F\u002F百位\n",[186,4326,4327,4330,4332,4334,4336,4338],{"class":188,"line":1236},[186,4328,4329],{"class":202},"        a",[186,4331,529],{"class":669},[186,4333,3133],{"class":202},[186,4335,670],{"class":669},[186,4337,2056],{"class":206},[186,4339,634],{"class":202},[186,4341,4342,4345,4347,4349,4351,4353,4355,4357],{"class":188,"line":3096},[186,4343,4344],{"class":202},"        b",[186,4346,529],{"class":669},[186,4348,3133],{"class":202},[186,4350,2194],{"class":669},[186,4352,2056],{"class":206},[186,4354,670],{"class":669},[186,4356,2056],{"class":206},[186,4358,634],{"class":202},[186,4360,4361,4364,4366,4368,4370,4372],{"class":188,"line":3110},[186,4362,4363],{"class":202},"        c",[186,4365,529],{"class":669},[186,4367,3133],{"class":202},[186,4369,2194],{"class":669},[186,4371,1922],{"class":206},[186,4373,634],{"class":202},[186,4375,4376,4378,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4413,4416,4419],{"class":188,"line":3115},[186,4377,3964],{"class":669},[186,4379,3309],{"class":202},[186,4381,2065],{"class":669},[186,4383,948],{"class":202},[186,4385,2065],{"class":669},[186,4387,948],{"class":202},[186,4389,2091],{"class":669},[186,4391,1874],{"class":202},[186,4393,2065],{"class":669},[186,4395,1874],{"class":202},[186,4397,2065],{"class":669},[186,4399,1874],{"class":202},[186,4401,2091],{"class":669},[186,4403,1899],{"class":202},[186,4405,2065],{"class":669},[186,4407,1899],{"class":202},[186,4409,2065],{"class":669},[186,4411,4412],{"class":202},"c ",[186,4414,4415],{"class":669},"==",[186,4417,4418],{"class":202}," num)",[186,4420,4421],{"class":192}," \u002F\u002F如果是水仙花数，才打印\n",[186,4423,4424],{"class":188,"line":3121},[186,4425,3977],{"class":202},[186,4427,4428,4430,4432,4434,4436],{"class":188,"line":3142},[186,4429,3982],{"class":202},[186,4431,2650],{"class":669},[186,4433,3133],{"class":202},[186,4435,2650],{"class":669},[186,4437,2672],{"class":202},[186,4439,4440],{"class":188,"line":3147},[186,4441,3996],{"class":202},[186,4443,4444,4446,4448],{"class":188,"line":3161},[186,4445,3756],{"class":202},[186,4447,3759],{"class":669},[186,4449,634],{"class":202},[186,4451,4452],{"class":188,"line":3166},[186,4453,3654],{"class":202},[186,4455,4456,4458,4461,4463,4466],{"class":188,"line":3195},[186,4457,3718],{"class":669},[186,4459,4460],{"class":202}," (num ",[186,4462,520],{"class":669},[186,4464,4465],{"class":206}," 1000",[186,4467,1112],{"class":202},[186,4469,4470],{"class":188,"line":3200},[186,4471,639],{"class":202},[34,4473,4474],{"start":219},[22,4475,4476],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[176,4478,4480],{"className":1612,"code":4479,"language":1614,"meta":181,"style":181},"\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",[183,4481,4482,4487,4516,4520,4532,4536,4541,4552,4559,4563,4577,4581,4588,4592,4604,4613],{"__ignoreMap":181},[186,4483,4484],{"class":188,"line":189},[186,4485,4486],{"class":192},"\u002F\u002F从数字0-9打印\n",[186,4488,4489,4492,4494,4496,4499,4501,4503,4506,4508,4510,4512,4514],{"class":188,"line":49},[186,4490,4491],{"class":669},"for",[186,4493,832],{"class":202},[186,4495,1626],{"class":669},[186,4497,4498],{"class":202}," i",[186,4500,529],{"class":669},[186,4502,1803],{"class":206},[186,4504,4505],{"class":202},";i",[186,4507,520],{"class":669},[186,4509,2056],{"class":206},[186,4511,4505],{"class":202},[186,4513,3759],{"class":669},[186,4515,1629],{"class":202},[186,4517,4518],{"class":188,"line":219},[186,4519,3018],{"class":202},[186,4521,4522,4524,4526,4528,4530],{"class":188,"line":225},[186,4523,3023],{"class":202},[186,4525,2650],{"class":669},[186,4527,2051],{"class":202},[186,4529,2650],{"class":669},[186,4531,2672],{"class":202},[186,4533,4534],{"class":188,"line":242},[186,4535,639],{"class":202},[186,4537,4538],{"class":188,"line":248},[186,4539,4540],{"class":192},"\u002F\u002F上式可以进行拆分\n",[186,4542,4543,4545,4547,4549],{"class":188,"line":265},[186,4544,1626],{"class":669},[186,4546,4498],{"class":202},[186,4548,529],{"class":669},[186,4550,4551],{"class":206},"0\n",[186,4553,4554,4556],{"class":188,"line":271},[186,4555,4491],{"class":669},[186,4557,4558],{"class":202},"(;;;)\n",[186,4560,4561],{"class":188,"line":288},[186,4562,3018],{"class":202},[186,4564,4565,4568,4571,4573,4575],{"class":188,"line":294},[186,4566,4567],{"class":669},"    if",[186,4569,4570],{"class":202},"(i",[186,4572,3178],{"class":669},[186,4574,2056],{"class":206},[186,4576,1629],{"class":202},[186,4578,4579],{"class":188,"line":1212},[186,4580,3497],{"class":202},[186,4582,4583,4586],{"class":188,"line":1223},[186,4584,4585],{"class":669},"        break",[186,4587,634],{"class":202},[186,4589,4590],{"class":188,"line":1236},[186,4591,3654],{"class":202},[186,4593,4594,4596,4598,4600,4602],{"class":188,"line":3096},[186,4595,3023],{"class":202},[186,4597,2650],{"class":669},[186,4599,2051],{"class":202},[186,4601,2650],{"class":669},[186,4603,2672],{"class":202},[186,4605,4606,4609,4611],{"class":188,"line":3110},[186,4607,4608],{"class":202},"    i",[186,4610,3759],{"class":669},[186,4612,634],{"class":202},[186,4614,4615],{"class":188,"line":3115},[186,4616,639],{"class":202},[169,4618,4619],{},"小练习",[176,4621,4623],{"className":1612,"code":4622,"language":1614,"meta":181,"style":181},"#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",[183,4624,4625,4631,4641,4649,4653,4658,4663,4691,4695,4700,4705,4746,4750,4763,4767,4771,4775,4787,4791,4795],{"__ignoreMap":181},[186,4626,4627,4629],{"class":188,"line":189},[186,4628,3417],{"class":669},[186,4630,3420],{"class":532},[186,4632,4633,4635,4637,4639],{"class":188,"line":49},[186,4634,3425],{"class":669},[186,4636,3428],{"class":669},[186,4638,3431],{"class":198},[186,4640,634],{"class":202},[186,4642,4643,4645,4647],{"class":188,"line":219},[186,4644,1626],{"class":669},[186,4646,3440],{"class":198},[186,4648,3443],{"class":202},[186,4650,4651],{"class":188,"line":225},[186,4652,3018],{"class":202},[186,4654,4655],{"class":188,"line":242},[186,4656,4657],{"class":192},"    \u002F\u002F敲桌子案例\n",[186,4659,4660],{"class":188,"line":248},[186,4661,4662],{"class":192},"    \u002F\u002F1.先输出1-100的数字\n",[186,4664,4665,4668,4670,4672,4674,4676,4678,4681,4683,4685,4687,4689],{"class":188,"line":265},[186,4666,4667],{"class":669},"    for",[186,4669,832],{"class":202},[186,4671,1626],{"class":669},[186,4673,4498],{"class":202},[186,4675,529],{"class":669},[186,4677,1829],{"class":206},[186,4679,4680],{"class":202},"; i",[186,4682,3059],{"class":669},[186,4684,1922],{"class":206},[186,4686,4680],{"class":202},[186,4688,3759],{"class":669},[186,4690,1629],{"class":202},[186,4692,4693],{"class":188,"line":271},[186,4694,3497],{"class":202},[186,4696,4697],{"class":188,"line":288},[186,4698,4699],{"class":192},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[186,4701,4702],{"class":188,"line":294},[186,4703,4704],{"class":192},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[186,4706,4707,4709,4711,4713,4715,4717,4719,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744],{"class":188,"line":1212},[186,4708,3964],{"class":669},[186,4710,4570],{"class":202},[186,4712,670],{"class":669},[186,4714,1979],{"class":206},[186,4716,4415],{"class":669},[186,4718,1803],{"class":206},[186,4720,4721],{"class":669}," ||",[186,4723,4498],{"class":202},[186,4725,670],{"class":669},[186,4727,2056],{"class":206},[186,4729,4415],{"class":669},[186,4731,1979],{"class":206},[186,4733,4721],{"class":669},[186,4735,4498],{"class":202},[186,4737,2194],{"class":669},[186,4739,2056],{"class":206},[186,4741,4415],{"class":669},[186,4743,1979],{"class":206},[186,4745,1629],{"class":202},[186,4747,4748],{"class":188,"line":1223},[186,4749,3977],{"class":202},[186,4751,4752,4754,4756,4759,4761],{"class":188,"line":1236},[186,4753,3982],{"class":202},[186,4755,2650],{"class":669},[186,4757,4758],{"class":532},"\"敲桌子\"",[186,4760,2650],{"class":669},[186,4762,2672],{"class":202},[186,4764,4765],{"class":188,"line":3096},[186,4766,3996],{"class":202},[186,4768,4769],{"class":188,"line":3110},[186,4770,4037],{"class":669},[186,4772,4773],{"class":188,"line":3115},[186,4774,3977],{"class":202},[186,4776,4777,4779,4781,4783,4785],{"class":188,"line":3121},[186,4778,3982],{"class":202},[186,4780,2650],{"class":669},[186,4782,2051],{"class":202},[186,4784,2650],{"class":669},[186,4786,2672],{"class":202},[186,4788,4789],{"class":188,"line":3142},[186,4790,3996],{"class":202},[186,4792,4793],{"class":188,"line":3147},[186,4794,3654],{"class":202},[186,4796,4797],{"class":188,"line":3161},[186,4798,639],{"class":202},[169,4800,4801],{},"嵌套实现星图",[176,4803,4805],{"className":1612,"code":4804,"language":1614,"meta":181,"style":181},"#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",[183,4806,4807,4813,4823,4831,4835,4861,4865,4894,4898,4909,4913,4922,4926],{"__ignoreMap":181},[186,4808,4809,4811],{"class":188,"line":189},[186,4810,3417],{"class":669},[186,4812,3420],{"class":532},[186,4814,4815,4817,4819,4821],{"class":188,"line":49},[186,4816,3425],{"class":669},[186,4818,3428],{"class":669},[186,4820,3431],{"class":198},[186,4822,634],{"class":202},[186,4824,4825,4827,4829],{"class":188,"line":219},[186,4826,1626],{"class":669},[186,4828,3440],{"class":198},[186,4830,3443],{"class":202},[186,4832,4833],{"class":188,"line":225},[186,4834,3018],{"class":202},[186,4836,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857,4859],{"class":188,"line":242},[186,4838,4667],{"class":669},[186,4840,3126],{"class":202},[186,4842,1626],{"class":669},[186,4844,4498],{"class":202},[186,4846,529],{"class":669},[186,4848,1803],{"class":206},[186,4850,4505],{"class":202},[186,4852,520],{"class":669},[186,4854,2056],{"class":206},[186,4856,4505],{"class":202},[186,4858,3759],{"class":669},[186,4860,1629],{"class":202},[186,4862,4863],{"class":188,"line":248},[186,4864,3497],{"class":202},[186,4866,4867,4870,4872,4874,4877,4879,4881,4884,4886,4888,4890,4892],{"class":188,"line":265},[186,4868,4869],{"class":669},"        for",[186,4871,3126],{"class":202},[186,4873,1626],{"class":669},[186,4875,4876],{"class":202}," j",[186,4878,529],{"class":669},[186,4880,1803],{"class":206},[186,4882,4883],{"class":202},";j",[186,4885,520],{"class":669},[186,4887,2056],{"class":206},[186,4889,4883],{"class":202},[186,4891,3759],{"class":669},[186,4893,1629],{"class":202},[186,4895,4896],{"class":188,"line":271},[186,4897,3977],{"class":202},[186,4899,4900,4902,4904,4907],{"class":188,"line":288},[186,4901,3982],{"class":202},[186,4903,2650],{"class":669},[186,4905,4906],{"class":532},"\"*\"",[186,4908,634],{"class":202},[186,4910,4911],{"class":188,"line":294},[186,4912,3996],{"class":202},[186,4914,4915,4918,4920],{"class":188,"line":1212},[186,4916,4917],{"class":202},"        cout",[186,4919,2650],{"class":669},[186,4921,2672],{"class":202},[186,4923,4924],{"class":188,"line":1223},[186,4925,3654],{"class":202},[186,4927,4928],{"class":188,"line":1236},[186,4929,639],{"class":202},[169,4931,4932],{},"乘法口诀表",[176,4934,4936],{"className":1612,"code":4935,"language":1614,"meta":181,"style":181},"#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",[183,4937,4938,4944,4954,4962,4966,4992,4996,5021,5025,5065,5069,5077,5081],{"__ignoreMap":181},[186,4939,4940,4942],{"class":188,"line":189},[186,4941,3417],{"class":669},[186,4943,3801],{"class":532},[186,4945,4946,4948,4950,4952],{"class":188,"line":49},[186,4947,3425],{"class":669},[186,4949,3428],{"class":669},[186,4951,3431],{"class":198},[186,4953,634],{"class":202},[186,4955,4956,4958,4960],{"class":188,"line":219},[186,4957,1626],{"class":669},[186,4959,3440],{"class":198},[186,4961,3443],{"class":202},[186,4963,4964],{"class":188,"line":225},[186,4965,3018],{"class":202},[186,4967,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986,4988,4990],{"class":188,"line":242},[186,4969,4667],{"class":669},[186,4971,832],{"class":202},[186,4973,1626],{"class":669},[186,4975,4498],{"class":202},[186,4977,529],{"class":669},[186,4979,1829],{"class":206},[186,4981,4505],{"class":202},[186,4983,520],{"class":669},[186,4985,2056],{"class":206},[186,4987,4505],{"class":202},[186,4989,3759],{"class":669},[186,4991,1629],{"class":202},[186,4993,4994],{"class":188,"line":248},[186,4995,3497],{"class":202},[186,4997,4998,5000,5002,5004,5006,5008,5010,5012,5014,5017,5019],{"class":188,"line":265},[186,4999,4869],{"class":669},[186,5001,832],{"class":202},[186,5003,1626],{"class":669},[186,5005,4876],{"class":202},[186,5007,529],{"class":669},[186,5009,1829],{"class":206},[186,5011,4883],{"class":202},[186,5013,3059],{"class":669},[186,5015,5016],{"class":202},"i;j",[186,5018,3759],{"class":669},[186,5020,1629],{"class":202},[186,5022,5023],{"class":188,"line":271},[186,5024,3977],{"class":202},[186,5026,5027,5029,5031,5033,5035,5037,5039,5041,5043,5046,5048,5050,5052,5054,5056,5059,5061,5063],{"class":188,"line":288},[186,5028,3982],{"class":202},[186,5030,2650],{"class":669},[186,5032,2077],{"class":202},[186,5034,2650],{"class":669},[186,5036,4906],{"class":532},[186,5038,2650],{"class":669},[186,5040,2051],{"class":202},[186,5042,2650],{"class":669},[186,5044,5045],{"class":532},"\"=\"",[186,5047,2650],{"class":669},[186,5049,2051],{"class":202},[186,5051,2065],{"class":669},[186,5053,2077],{"class":202},[186,5055,2650],{"class":669},[186,5057,5058],{"class":532},"'",[186,5060,2707],{"class":206},[186,5062,5058],{"class":532},[186,5064,634],{"class":202},[186,5066,5067],{"class":188,"line":294},[186,5068,3996],{"class":202},[186,5070,5071,5073,5075],{"class":188,"line":1212},[186,5072,4917],{"class":202},[186,5074,2650],{"class":669},[186,5076,2672],{"class":202},[186,5078,5079],{"class":188,"line":1223},[186,5080,3654],{"class":202},[186,5082,5083],{"class":188,"line":1236},[186,5084,639],{"class":202},[29,5086,5088],{"id":5087},"_163跳出语句","1.6.3跳出语句",[34,5090,5091],{},[22,5092,5093],{},"break语句\n作用：用于跳出选择结构或者循环结构",[169,5095,5096],{},"break使用时机：",[19,5098,5099,5102,5105],{},[22,5100,5101],{},"出现在switch条件语句中，作用是终止case并跳出switch",[22,5103,5104],{},"出现在循环结构中，作用是跳出当前的循环结构",[22,5106,5107],{},"出现在嵌套循环中，跳出最近的内层循环语句",[34,5109,5110,5113],{"start":49},[22,5111,5112],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[22,5114,5115],{},"goto语句\n语法：goto 标记;",[169,5117,5118],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[176,5120,5122],{"className":1612,"code":5121,"language":1614,"meta":181,"style":181},"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",[183,5123,5124,5132,5136,5149,5159,5172,5185,5198,5206,5222],{"__ignoreMap":181},[186,5125,5126,5128,5130],{"class":188,"line":189},[186,5127,1626],{"class":669},[186,5129,3440],{"class":198},[186,5131,3443],{"class":202},[186,5133,5134],{"class":188,"line":49},[186,5135,3018],{"class":202},[186,5137,5138,5140,5142,5145,5147],{"class":188,"line":219},[186,5139,3023],{"class":202},[186,5141,2650],{"class":669},[186,5143,5144],{"class":532},"\"1\"",[186,5146,2650],{"class":669},[186,5148,2672],{"class":202},[186,5150,5151,5154,5157],{"class":188,"line":225},[186,5152,5153],{"class":669},"    goto",[186,5155,5156],{"class":198}," FLAG",[186,5158,634],{"class":202},[186,5160,5161,5163,5165,5168,5170],{"class":188,"line":242},[186,5162,3023],{"class":202},[186,5164,2650],{"class":669},[186,5166,5167],{"class":532},"\"2\"",[186,5169,2650],{"class":669},[186,5171,2672],{"class":202},[186,5173,5174,5176,5178,5181,5183],{"class":188,"line":248},[186,5175,3023],{"class":202},[186,5177,2650],{"class":669},[186,5179,5180],{"class":532},"\"3\"",[186,5182,2650],{"class":669},[186,5184,2672],{"class":202},[186,5186,5187,5189,5191,5194,5196],{"class":188,"line":265},[186,5188,3023],{"class":202},[186,5190,2650],{"class":669},[186,5192,5193],{"class":532},"\"4\"",[186,5195,2650],{"class":669},[186,5197,2672],{"class":202},[186,5199,5200,5203],{"class":188,"line":271},[186,5201,5202],{"class":198},"    FLAG",[186,5204,5205],{"class":202},":\n",[186,5207,5208,5210,5212,5215,5217,5219],{"class":188,"line":288},[186,5209,3023],{"class":202},[186,5211,2650],{"class":669},[186,5213,5214],{"class":532},"\"5\"",[186,5216,2650],{"class":669},[186,5218,2715],{"class":202},[186,5220,5221],{"class":192},"\u002F\u002F跳过了2,3,4,直接到5\n",[186,5223,5224],{"class":188,"line":294},[186,5225,639],{"class":202},[14,5227,5229],{"id":5228},"_17数组","1.7数组",[29,5231,5233],{"id":5232},"_171一维数组","1.7.1一维数组",[34,5235,5236],{},[22,5237,5238],{},"一维数组定义方式",[99,5240,5241,5251],{},[102,5242,5243],{},[105,5244,5245,5248],{},[108,5246,5247],{},"方式",[108,5249,5250],{},"注意事项",[116,5252,5253,5267,5277],{},[105,5254,5255,5261],{},[121,5256,5257,5258,1676],{},"数据类型 数组名",[186,5259,5260],{},"数组长度",[121,5262,5263,5264,5266],{},"这种方式是先定义再arr",[186,5265,2051],{},"赋值",[105,5268,5269,5274],{},[121,5270,5257,5271,5273],{},[186,5272,5260],{},"={值1,值2....};",[121,5275,5276],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[105,5278,5279,5283],{},[121,5280,5257,5281,5273],{},[186,5282],{},[121,5284,5285,5286,5288],{},"int arr",[186,5287],{},";这是不正确的，按照这样的方式定义必须有初始长度",[34,5290,5291],{"start":49},[22,5292,5293],{},"一维数组数组名\n用途：",[19,5295,5296],{},[22,5297,5298],{},"1.可以统计整个数组在内存中的长度：",[176,5300,5302],{"className":1612,"code":5301,"language":1614,"meta":181,"style":181},"sizeof(arr);\nsizeof(arr[0]);\n",[183,5303,5304,5311],{"__ignoreMap":181},[186,5305,5306,5308],{"class":188,"line":189},[186,5307,1621],{"class":669},[186,5309,5310],{"class":202},"(arr);\n",[186,5312,5313,5315,5318,5320],{"class":188,"line":49},[186,5314,1621],{"class":669},[186,5316,5317],{"class":202},"(arr[",[186,5319,1803],{"class":206},[186,5321,5322],{"class":202},"]);\n",[19,5324,5325],{},[22,5326,5327],{},"2.可以获取数组在内存中的首地址:",[176,5329,5331],{"className":1612,"code":5330,"language":1614,"meta":181,"style":181},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[183,5332,5333,5338,5351,5356],{"__ignoreMap":181},[186,5334,5335],{"class":188,"line":189},[186,5336,5337],{"class":192},"\u002F\u002F查看16进制的首地址\n",[186,5339,5340,5342,5344,5347,5349],{"class":188,"line":49},[186,5341,2842],{"class":202},[186,5343,2650],{"class":669},[186,5345,5346],{"class":202},"arr",[186,5348,2650],{"class":669},[186,5350,2672],{"class":202},[186,5352,5353],{"class":188,"line":219},[186,5354,5355],{"class":192},"\u002F\u002F看10进制数\n",[186,5357,5358,5360,5362,5364,5366,5368,5370,5373,5375,5377,5379],{"class":188,"line":225},[186,5359,2842],{"class":202},[186,5361,2650],{"class":669},[186,5363,832],{"class":202},[186,5365,1626],{"class":669},[186,5367,2039],{"class":202},[186,5369,1963],{"class":669},[186,5371,5372],{"class":202},"arr[",[186,5374,1803],{"class":206},[186,5376,2547],{"class":202},[186,5378,2650],{"class":669},[186,5380,2672],{"class":202},[169,5382,5383],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[19,5385,5386],{},[22,5387,5388],{},"1️⃣五只小猪称体重",[176,5390,5392],{"className":1612,"code":5391,"language":1614,"meta":181,"style":181},"#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",[183,5393,5394,5400,5410,5418,5422,5462,5475,5501,5505,5517,5521,5531,5535,5539,5552,5562],{"__ignoreMap":181},[186,5395,5396,5398],{"class":188,"line":189},[186,5397,3417],{"class":669},[186,5399,3420],{"class":532},[186,5401,5402,5404,5406,5408],{"class":188,"line":49},[186,5403,3425],{"class":669},[186,5405,3428],{"class":669},[186,5407,3431],{"class":198},[186,5409,634],{"class":202},[186,5411,5412,5414,5416],{"class":188,"line":219},[186,5413,1626],{"class":669},[186,5415,3440],{"class":198},[186,5417,3443],{"class":202},[186,5419,5420],{"class":188,"line":225},[186,5421,3018],{"class":202},[186,5423,5424,5426,5429,5431,5433,5435,5437,5440,5442,5445,5447,5449,5451,5454,5456,5459],{"class":188,"line":242},[186,5425,3452],{"class":669},[186,5427,5428],{"class":202}," arr[",[186,5430,1930],{"class":206},[186,5432,2547],{"class":202},[186,5434,529],{"class":669},[186,5436,2504],{"class":202},[186,5438,5439],{"class":206},"300",[186,5441,1988],{"class":202},[186,5443,5444],{"class":206},"350",[186,5446,1988],{"class":202},[186,5448,3190],{"class":206},[186,5450,1988],{"class":202},[186,5452,5453],{"class":206},"400",[186,5455,1988],{"class":202},[186,5457,5458],{"class":206},"250",[186,5460,5461],{"class":202},"};\n",[186,5463,5464,5466,5469,5471,5473],{"class":188,"line":248},[186,5465,3452],{"class":669},[186,5467,5468],{"class":202}," tmp",[186,5470,529],{"class":669},[186,5472,1803],{"class":206},[186,5474,634],{"class":202},[186,5476,5477,5479,5481,5483,5485,5487,5489,5491,5493,5495,5497,5499],{"class":188,"line":265},[186,5478,4667],{"class":669},[186,5480,3126],{"class":202},[186,5482,1626],{"class":669},[186,5484,4498],{"class":202},[186,5486,529],{"class":669},[186,5488,1803],{"class":206},[186,5490,4505],{"class":202},[186,5492,520],{"class":669},[186,5494,1930],{"class":206},[186,5496,4505],{"class":202},[186,5498,3759],{"class":669},[186,5500,1629],{"class":202},[186,5502,5503],{"class":188,"line":271},[186,5504,3497],{"class":202},[186,5506,5507,5509,5512,5514],{"class":188,"line":288},[186,5508,3964],{"class":669},[186,5510,5511],{"class":202},"(tmp",[186,5513,520],{"class":669},[186,5515,5516],{"class":202},"arr[i])\n",[186,5518,5519],{"class":188,"line":294},[186,5520,3977],{"class":202},[186,5522,5523,5526,5528],{"class":188,"line":1212},[186,5524,5525],{"class":202},"            tmp",[186,5527,529],{"class":669},[186,5529,5530],{"class":202},"arr[i];\n",[186,5532,5533],{"class":188,"line":1223},[186,5534,3996],{"class":202},[186,5536,5537],{"class":188,"line":1236},[186,5538,3654],{"class":202},[186,5540,5541,5543,5545,5548,5550],{"class":188,"line":3096},[186,5542,3023],{"class":202},[186,5544,2650],{"class":669},[186,5546,5547],{"class":202},"tmp",[186,5549,2650],{"class":669},[186,5551,2672],{"class":202},[186,5553,5554,5557,5560],{"class":188,"line":3110},[186,5555,5556],{"class":669},"    return",[186,5558,5559],{"class":206}," 0",[186,5561,634],{"class":202},[186,5563,5564],{"class":188,"line":3115},[186,5565,639],{"class":202},[19,5567,5568],{},[22,5569,5570],{},"2️⃣数组元素逆置",[176,5572,5574],{"className":1612,"code":5573,"language":1614,"meta":181,"style":181},"\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",[183,5575,5576,5581,5587,5597,5605,5609,5644,5660,5692,5705,5710,5715,5727,5737,5747,5752,5761,5771,5776,5781,5808,5812,5828,5832,5843,5852],{"__ignoreMap":181},[186,5577,5578],{"class":188,"line":189},[186,5579,5580],{"class":192},"\u002F\u002F元素逆置\n",[186,5582,5583,5585],{"class":188,"line":49},[186,5584,3417],{"class":669},[186,5586,3420],{"class":532},[186,5588,5589,5591,5593,5595],{"class":188,"line":219},[186,5590,3425],{"class":669},[186,5592,3428],{"class":669},[186,5594,3431],{"class":198},[186,5596,634],{"class":202},[186,5598,5599,5601,5603],{"class":188,"line":225},[186,5600,1626],{"class":669},[186,5602,3440],{"class":198},[186,5604,3443],{"class":202},[186,5606,5607],{"class":188,"line":242},[186,5608,3018],{"class":202},[186,5610,5611,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632,5634,5636,5638,5640,5642],{"class":188,"line":248},[186,5612,5613],{"class":669},"   int",[186,5615,5428],{"class":202},[186,5617,1930],{"class":206},[186,5619,2547],{"class":202},[186,5621,529],{"class":669},[186,5623,2504],{"class":202},[186,5625,1829],{"class":206},[186,5627,1988],{"class":202},[186,5629,1697],{"class":206},[186,5631,1988],{"class":202},[186,5633,1691],{"class":206},[186,5635,1988],{"class":202},[186,5637,1904],{"class":206},[186,5639,1988],{"class":202},[186,5641,1930],{"class":206},[186,5643,5461],{"class":202},[186,5645,5646,5648,5651,5653,5655,5657],{"class":188,"line":265},[186,5647,5613],{"class":669},[186,5649,5650],{"class":202}," start",[186,5652,529],{"class":669},[186,5654,1803],{"class":206},[186,5656,1676],{"class":202},[186,5658,5659],{"class":192},"\u002F\u002F起始下标\n",[186,5661,5662,5664,5667,5670,5673,5676,5678,5680,5683,5685,5687,5689],{"class":188,"line":271},[186,5663,5613],{"class":669},[186,5665,5666],{"class":202}," end",[186,5668,5669],{"class":669},"=sizeof",[186,5671,5672],{"class":202},"(arr)",[186,5674,5675],{"class":669},"\u002Fsizeof",[186,5677,5317],{"class":202},[186,5679,1803],{"class":206},[186,5681,5682],{"class":202},"])",[186,5684,2142],{"class":669},[186,5686,1829],{"class":206},[186,5688,1676],{"class":202},[186,5690,5691],{"class":192},"\u002F\u002F结束下标\n",[186,5693,5694,5697,5700,5702],{"class":188,"line":288},[186,5695,5696],{"class":669},"   while",[186,5698,5699],{"class":202}," (start",[186,5701,520],{"class":669},[186,5703,5704],{"class":202},"end)\n",[186,5706,5707],{"class":188,"line":294},[186,5708,5709],{"class":202},"   {\n",[186,5711,5712],{"class":188,"line":1212},[186,5713,5714],{"class":192},"    \u002F\u002F实现元素互换代码\n",[186,5716,5717,5719,5722,5724],{"class":188,"line":1223},[186,5718,3452],{"class":669},[186,5720,5721],{"class":202}," temp",[186,5723,529],{"class":669},[186,5725,5726],{"class":202},"arr[start];\n",[186,5728,5729,5732,5734],{"class":188,"line":1236},[186,5730,5731],{"class":202},"    arr[start]",[186,5733,529],{"class":669},[186,5735,5736],{"class":202},"arr[end];\n",[186,5738,5739,5742,5744],{"class":188,"line":3096},[186,5740,5741],{"class":202},"    arr[end]",[186,5743,529],{"class":669},[186,5745,5746],{"class":202},"temp;\n",[186,5748,5749],{"class":188,"line":3110},[186,5750,5751],{"class":192},"    \u002F\u002F下标更新\n",[186,5753,5754,5757,5759],{"class":188,"line":3115},[186,5755,5756],{"class":202},"    start",[186,5758,3759],{"class":669},[186,5760,634],{"class":202},[186,5762,5763,5766,5769],{"class":188,"line":3121},[186,5764,5765],{"class":202},"    end",[186,5767,5768],{"class":669},"--",[186,5770,634],{"class":202},[186,5772,5773],{"class":188,"line":3142},[186,5774,5775],{"class":202},"   }\n",[186,5777,5778],{"class":188,"line":3147},[186,5779,5780],{"class":192},"   \u002F\u002F输出逆置后的数组\n",[186,5782,5783,5786,5788,5790,5792,5794,5796,5798,5800,5802,5804,5806],{"class":188,"line":3161},[186,5784,5785],{"class":669},"   for",[186,5787,3126],{"class":202},[186,5789,1626],{"class":669},[186,5791,4498],{"class":202},[186,5793,529],{"class":669},[186,5795,1803],{"class":206},[186,5797,4505],{"class":202},[186,5799,520],{"class":669},[186,5801,1930],{"class":206},[186,5803,4505],{"class":202},[186,5805,3759],{"class":669},[186,5807,1629],{"class":202},[186,5809,5810],{"class":188,"line":3166},[186,5811,5709],{"class":202},[186,5813,5814,5816,5818,5821,5823,5826],{"class":188,"line":3195},[186,5815,3023],{"class":202},[186,5817,2650],{"class":669},[186,5819,5820],{"class":202},"arr[i]",[186,5822,2650],{"class":669},[186,5824,5825],{"class":532},"\" \"",[186,5827,634],{"class":202},[186,5829,5830],{"class":188,"line":3200},[186,5831,5775],{"class":202},[186,5833,5834,5837,5839,5841],{"class":188,"line":3217},[186,5835,5836],{"class":198},"   system",[186,5838,832],{"class":202},[186,5840,3775],{"class":532},[186,5842,1112],{"class":202},[186,5844,5845,5848,5850],{"class":188,"line":3222},[186,5846,5847],{"class":669},"   return",[186,5849,5559],{"class":206},[186,5851,634],{"class":202},[186,5853,5854],{"class":188,"line":3227},[186,5855,639],{"class":202},[19,5857,5858],{},[22,5859,5860],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[176,5862,5864],{"className":1612,"code":5863,"language":1614,"meta":181,"style":181},"\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",[183,5865,5866,5871,5877,5887,5895,5899,5951,5964,5990,5994,6008,6012,6017,6022,6052,6056,6061,6095,6099,6104,6124,6129,6141,6157,6172,6177,6181,6185,6198,6224,6228,6242,6246,6254],{"__ignoreMap":181},[186,5867,5868],{"class":188,"line":189},[186,5869,5870],{"class":192},"\u002F\u002F冒泡排序,升序\n",[186,5872,5873,5875],{"class":188,"line":49},[186,5874,3417],{"class":669},[186,5876,3420],{"class":532},[186,5878,5879,5881,5883,5885],{"class":188,"line":219},[186,5880,3425],{"class":669},[186,5882,3428],{"class":669},[186,5884,3431],{"class":198},[186,5886,634],{"class":202},[186,5888,5889,5891,5893],{"class":188,"line":225},[186,5890,1626],{"class":669},[186,5892,3440],{"class":198},[186,5894,3443],{"class":202},[186,5896,5897],{"class":188,"line":242},[186,5898,3018],{"class":202},[186,5900,5901,5903,5905,5907,5910,5912,5915,5917,5919,5921,5923,5925,5927,5929,5931,5933,5935,5937,5939,5941,5943,5945,5947,5949],{"class":188,"line":248},[186,5902,3452],{"class":669},[186,5904,5428],{"class":202},[186,5906,2030],{"class":206},[186,5908,5909],{"class":202},"] ",[186,5911,529],{"class":669},[186,5913,5914],{"class":202}," {",[186,5916,1904],{"class":206},[186,5918,1988],{"class":202},[186,5920,1697],{"class":206},[186,5922,1988],{"class":202},[186,5924,2005],{"class":206},[186,5926,1988],{"class":202},[186,5928,1803],{"class":206},[186,5930,1988],{"class":202},[186,5932,1930],{"class":206},[186,5934,1988],{"class":202},[186,5936,1979],{"class":206},[186,5938,1988],{"class":202},[186,5940,1829],{"class":206},[186,5942,1988],{"class":202},[186,5944,1691],{"class":206},[186,5946,1988],{"class":202},[186,5948,2030],{"class":206},[186,5950,5461],{"class":202},[186,5952,5953,5955,5957,5960,5962],{"class":188,"line":265},[186,5954,3023],{"class":202},[186,5956,2650],{"class":669},[186,5958,5959],{"class":532},"\"排序前：\"",[186,5961,2650],{"class":669},[186,5963,2672],{"class":202},[186,5965,5966,5968,5970,5972,5974,5976,5978,5980,5982,5984,5986,5988],{"class":188,"line":271},[186,5967,4667],{"class":669},[186,5969,3126],{"class":202},[186,5971,1626],{"class":669},[186,5973,4498],{"class":202},[186,5975,529],{"class":669},[186,5977,1803],{"class":206},[186,5979,4505],{"class":202},[186,5981,520],{"class":669},[186,5983,2030],{"class":206},[186,5985,4505],{"class":202},[186,5987,3759],{"class":669},[186,5989,1629],{"class":202},[186,5991,5992],{"class":188,"line":288},[186,5993,3497],{"class":202},[186,5995,5996,5998,6000,6002,6004,6006],{"class":188,"line":294},[186,5997,4917],{"class":202},[186,5999,2650],{"class":669},[186,6001,5820],{"class":202},[186,6003,2650],{"class":669},[186,6005,5825],{"class":532},[186,6007,634],{"class":202},[186,6009,6010],{"class":188,"line":1212},[186,6011,3654],{"class":202},[186,6013,6014],{"class":188,"line":1223},[186,6015,6016],{"class":192},"    \u002F\u002F开始冒泡排序\n",[186,6018,6019],{"class":188,"line":1236},[186,6020,6021],{"class":192},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[186,6023,6024,6026,6028,6030,6032,6034,6036,6038,6040,6042,6044,6046,6048,6050],{"class":188,"line":3096},[186,6025,4667],{"class":669},[186,6027,3126],{"class":202},[186,6029,1626],{"class":669},[186,6031,4498],{"class":202},[186,6033,529],{"class":669},[186,6035,1803],{"class":206},[186,6037,4505],{"class":202},[186,6039,520],{"class":669},[186,6041,2030],{"class":206},[186,6043,2142],{"class":669},[186,6045,1829],{"class":206},[186,6047,4505],{"class":202},[186,6049,3759],{"class":669},[186,6051,1629],{"class":202},[186,6053,6054],{"class":188,"line":3110},[186,6055,3497],{"class":202},[186,6057,6058],{"class":188,"line":3115},[186,6059,6060],{"class":192},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[186,6062,6063,6065,6067,6069,6071,6073,6075,6077,6079,6081,6083,6085,6087,6089,6091,6093],{"class":188,"line":3121},[186,6064,4869],{"class":669},[186,6066,3126],{"class":202},[186,6068,1626],{"class":669},[186,6070,4876],{"class":202},[186,6072,529],{"class":669},[186,6074,1803],{"class":206},[186,6076,4883],{"class":202},[186,6078,520],{"class":669},[186,6080,2030],{"class":206},[186,6082,2142],{"class":669},[186,6084,2051],{"class":202},[186,6086,2142],{"class":669},[186,6088,1829],{"class":206},[186,6090,4883],{"class":202},[186,6092,3759],{"class":669},[186,6094,1629],{"class":202},[186,6096,6097],{"class":188,"line":3142},[186,6098,3977],{"class":202},[186,6100,6101],{"class":188,"line":3147},[186,6102,6103],{"class":192},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[186,6105,6106,6109,6112,6114,6117,6119,6121],{"class":188,"line":3161},[186,6107,6108],{"class":669},"            if",[186,6110,6111],{"class":202},"(arr[j]",[186,6113,2567],{"class":669},[186,6115,6116],{"class":202},"arr[j",[186,6118,2091],{"class":669},[186,6120,1829],{"class":206},[186,6122,6123],{"class":202},"])\n",[186,6125,6126],{"class":188,"line":3166},[186,6127,6128],{"class":202},"            {\n",[186,6130,6131,6134,6136,6138],{"class":188,"line":3195},[186,6132,6133],{"class":669},"                int",[186,6135,5721],{"class":202},[186,6137,529],{"class":669},[186,6139,6140],{"class":202},"arr[j];\n",[186,6142,6143,6146,6148,6150,6152,6154],{"class":188,"line":3200},[186,6144,6145],{"class":202},"                arr[j]",[186,6147,529],{"class":669},[186,6149,6116],{"class":202},[186,6151,2091],{"class":669},[186,6153,1829],{"class":206},[186,6155,6156],{"class":202},"];\n",[186,6158,6159,6162,6164,6166,6168,6170],{"class":188,"line":3217},[186,6160,6161],{"class":202},"                arr[j",[186,6163,2091],{"class":669},[186,6165,1829],{"class":206},[186,6167,2547],{"class":202},[186,6169,529],{"class":669},[186,6171,5746],{"class":202},[186,6173,6174],{"class":188,"line":3222},[186,6175,6176],{"class":202},"            }\n",[186,6178,6179],{"class":188,"line":3227},[186,6180,3996],{"class":202},[186,6182,6183],{"class":188,"line":3232},[186,6184,3654],{"class":202},[186,6186,6187,6189,6191,6194,6196],{"class":188,"line":3246},[186,6188,3023],{"class":202},[186,6190,2650],{"class":669},[186,6192,6193],{"class":532},"\"排序后：\"",[186,6195,2650],{"class":669},[186,6197,2672],{"class":202},[186,6199,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220,6222],{"class":188,"line":3251},[186,6201,4667],{"class":669},[186,6203,3126],{"class":202},[186,6205,1626],{"class":669},[186,6207,4498],{"class":202},[186,6209,529],{"class":669},[186,6211,1803],{"class":206},[186,6213,4505],{"class":202},[186,6215,520],{"class":669},[186,6217,2030],{"class":206},[186,6219,4505],{"class":202},[186,6221,3759],{"class":669},[186,6223,1629],{"class":202},[186,6225,6226],{"class":188,"line":4044},[186,6227,3497],{"class":202},[186,6229,6230,6232,6234,6236,6238,6240],{"class":188,"line":4058},[186,6231,4917],{"class":202},[186,6233,2650],{"class":669},[186,6235,5820],{"class":202},[186,6237,2650],{"class":669},[186,6239,5825],{"class":532},[186,6241,634],{"class":202},[186,6243,6244],{"class":188,"line":4066},[186,6245,3654],{"class":202},[186,6247,6248,6250,6252],{"class":188,"line":4071},[186,6249,5556],{"class":669},[186,6251,5559],{"class":206},[186,6253,634],{"class":202},[186,6255,6256],{"class":188,"line":4077},[186,6257,639],{"class":202},[29,6259,6261],{"id":6260},"_172二维数组","1.7.2二维数组",[34,6263,6264],{},[22,6265,6266],{},"二维数组的四种定义方式",[99,6268,6269,6278],{},[102,6270,6271],{},[105,6272,6273,6276],{},[108,6274,6275],{},"序号",[108,6277,5247],{},[116,6279,6280,6290,6299,6308,6317],{},[105,6281,6282,6284],{},[121,6283,1829],{},[121,6285,6286,6287,1676],{},"数据类型 数组名[行数]",[186,6288,6289],{},"列数",[105,6291,6292,6294],{},[121,6293,1697],{},[121,6295,6286,6296,6298],{},[186,6297,6289],{},"={ {数据1,数据2}，{数据3，数据4}... }",[105,6300,6301,6303],{},[121,6302,1691],{},[121,6304,6286,6305,6307],{},[186,6306,6289],{},"={数据1,数据2,数据3...}",[105,6309,6310,6312],{},[121,6311,1904],{},[121,6313,6314,6315,6307],{},"数据类型 数组名[]",[186,6316,6289],{},[105,6318,6319,6322],{},[121,6320,6321],{},"注意：不能只省略列数",[121,6323],{},[34,6325,6326],{"start":49},[22,6327,6328],{},"二维数组数组名",[19,6330,6331,6334],{},[22,6332,6333],{},"1.查看二维数组所占内存空间",[22,6335,6336],{},"2.获取二维数组首地址",[169,6338,6339],{},"已知二维数组，求二维数组的行数与列数",[176,6341,6343],{"className":1612,"code":6342,"language":1614,"meta":181,"style":181},"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",[183,6344,6345,6353,6357,6375,6379,6397,6413,6418,6443,6476],{"__ignoreMap":181},[186,6346,6347,6349,6351],{"class":188,"line":189},[186,6348,1626],{"class":669},[186,6350,3440],{"class":198},[186,6352,3443],{"class":202},[186,6354,6355],{"class":188,"line":49},[186,6356,3018],{"class":202},[186,6358,6359,6361,6363,6365,6368,6370,6372],{"class":188,"line":219},[186,6360,3452],{"class":669},[186,6362,5428],{"class":202},[186,6364,1697],{"class":206},[186,6366,6367],{"class":202},"][",[186,6369,1691],{"class":206},[186,6371,2547],{"class":202},[186,6373,6374],{"class":669},"=\n",[186,6376,6377],{"class":188,"line":225},[186,6378,3497],{"class":202},[186,6380,6381,6384,6386,6388,6390,6392,6394],{"class":188,"line":242},[186,6382,6383],{"class":202},"        {",[186,6385,1829],{"class":206},[186,6387,1988],{"class":202},[186,6389,1697],{"class":206},[186,6391,1988],{"class":202},[186,6393,1691],{"class":206},[186,6395,6396],{"class":202},"},\n",[186,6398,6399,6401,6403,6405,6407,6409,6411],{"class":188,"line":248},[186,6400,6383],{"class":202},[186,6402,1904],{"class":206},[186,6404,1988],{"class":202},[186,6406,1930],{"class":206},[186,6408,1988],{"class":202},[186,6410,1954],{"class":206},[186,6412,639],{"class":202},[186,6414,6415],{"class":188,"line":265},[186,6416,6417],{"class":202},"    };\n",[186,6419,6420,6422,6424,6427,6429,6431,6433,6435,6437,6439,6441],{"class":188,"line":271},[186,6421,3023],{"class":202},[186,6423,2650],{"class":669},[186,6425,6426],{"class":532},"\"二维数组的行数\"",[186,6428,2845],{"class":669},[186,6430,5672],{"class":202},[186,6432,5675],{"class":669},[186,6434,5317],{"class":202},[186,6436,1803],{"class":206},[186,6438,5682],{"class":202},[186,6440,2650],{"class":669},[186,6442,2672],{"class":202},[186,6444,6445,6447,6449,6452,6454,6456,6458,6460,6462,6464,6466,6468,6470,6472,6474],{"class":188,"line":288},[186,6446,3023],{"class":202},[186,6448,2650],{"class":669},[186,6450,6451],{"class":532},"\"二维数组的列数\"",[186,6453,2845],{"class":669},[186,6455,5317],{"class":202},[186,6457,1803],{"class":206},[186,6459,5682],{"class":202},[186,6461,5675],{"class":669},[186,6463,5317],{"class":202},[186,6465,1803],{"class":206},[186,6467,6367],{"class":202},[186,6469,1803],{"class":206},[186,6471,5682],{"class":202},[186,6473,2650],{"class":669},[186,6475,2672],{"class":202},[186,6477,6478],{"class":188,"line":294},[186,6479,639],{"class":202},[169,6481,6482],{},"查看二维数组首地址",[176,6484,6486],{"className":1612,"code":6485,"language":1614,"meta":181,"style":181},"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",[183,6487,6488,6505,6531,6556],{"__ignoreMap":181},[186,6489,6490,6492,6494,6497,6499,6501,6503],{"class":188,"line":189},[186,6491,2842],{"class":202},[186,6493,2650],{"class":669},[186,6495,6496],{"class":532},"\"二维数组首地址：\"",[186,6498,2650],{"class":669},[186,6500,5346],{"class":202},[186,6502,2650],{"class":669},[186,6504,2672],{"class":202},[186,6506,6507,6509,6511,6514,6516,6518,6520,6523,6525,6527,6529],{"class":188,"line":49},[186,6508,2842],{"class":202},[186,6510,2650],{"class":669},[186,6512,6513],{"class":532},"\"二维数组第一行的首地址：\"",[186,6515,2650],{"class":669},[186,6517,832],{"class":202},[186,6519,1626],{"class":669},[186,6521,6522],{"class":202},")arr[",[186,6524,1803],{"class":206},[186,6526,2547],{"class":202},[186,6528,2650],{"class":669},[186,6530,2672],{"class":202},[186,6532,6533,6535,6537,6540,6542,6544,6546,6548,6550,6552,6554],{"class":188,"line":219},[186,6534,2842],{"class":202},[186,6536,2650],{"class":669},[186,6538,6539],{"class":532},"\"二维数组第二行的首地址：\"",[186,6541,2650],{"class":669},[186,6543,832],{"class":202},[186,6545,1626],{"class":669},[186,6547,6522],{"class":202},[186,6549,1829],{"class":206},[186,6551,2547],{"class":202},[186,6553,2650],{"class":669},[186,6555,2672],{"class":202},[186,6557,6558,6560,6562,6565,6567,6569,6571,6573,6575,6577,6579,6581,6583,6585,6587,6589],{"class":188,"line":225},[186,6559,2842],{"class":202},[186,6561,2650],{"class":669},[186,6563,6564],{"class":532},"\"二维数组第一个元素的首地址:\"",[186,6566,2650],{"class":669},[186,6568,832],{"class":202},[186,6570,1626],{"class":669},[186,6572,2039],{"class":202},[186,6574,1963],{"class":669},[186,6576,5372],{"class":202},[186,6578,1803],{"class":206},[186,6580,6367],{"class":202},[186,6582,1803],{"class":206},[186,6584,2547],{"class":202},[186,6586,2650],{"class":669},[186,6588,2715],{"class":202},[186,6590,6591],{"class":192},"\u002F\u002F对于数，要加取址符\n",[1524,6593,6594],{},"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":181,"searchDepth":49,"depth":49,"links":6596},[6597,6598,6599,6607,6608,6614,6619],{"id":1567,"depth":49,"text":1568},{"id":1574,"depth":49,"text":1575},{"id":1589,"depth":49,"text":1590,"children":6600},[6601,6602,6603,6604,6605,6606],{"id":1593,"depth":219,"text":1594},{"id":1639,"depth":219,"text":1640},{"id":1705,"depth":219,"text":1706},{"id":2631,"depth":219,"text":2632},{"id":2721,"depth":219,"text":2722},{"id":2816,"depth":219,"text":2817},{"id":2858,"depth":49,"text":2859},{"id":2926,"depth":49,"text":2927,"children":6609},[6610,6611,6612,6613],{"id":2930,"depth":219,"text":2931},{"id":2951,"depth":219,"text":2952},{"id":2960,"depth":219,"text":2961},{"id":2969,"depth":219,"text":2970},{"id":2978,"depth":49,"text":2979,"children":6615},[6616,6617,6618],{"id":2982,"depth":219,"text":2983},{"id":3672,"depth":219,"text":3673},{"id":5087,"depth":219,"text":5088},{"id":5228,"depth":49,"text":5229,"children":6620},[6621,6622],{"id":5232,"depth":219,"text":5233},{"id":6260,"depth":219,"text":6261},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1559,"description":181},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6629,"title":6630,"body":6631,"description":181,"extension":1549,"meta":7728,"navigation":1551,"path":7729,"seo":7730,"stem":7731,"__hash__":7732},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6632,"toc":7720},[6633,6636,6640,6648,6654,6657,6722,6726,6729,6805,6809,6812,6815,6818,7031,7035,7040,7104,7109,7176,7181,7272,7275,7380,7384,7387,7393,7537,7541,7544,7558,7561,7606,7609,7717],[10,6634,6630],{"id":6635},"_2函数",[14,6637,6639],{"id":6638},"_21函数概述","2.1函数概述",[34,6641,6642,6645],{},[22,6643,6644],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[22,6646,6647],{},"语法：",[176,6649,6652],{"className":6650,"code":6651,"language":753,"meta":181},[751],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[183,6653,6651],{"__ignoreMap":181},[169,6655,6656],{},"小案例",[176,6658,6660],{"className":1612,"code":6659,"language":1614,"meta":181,"style":181},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[183,6661,6662,6667,6690,6694,6711,6718],{"__ignoreMap":181},[186,6663,6664],{"class":188,"line":189},[186,6665,6666],{"class":192},"\u002F\u002Fnum1,num2形参\n",[186,6668,6669,6671,6674,6676,6678,6681,6683,6685,6688],{"class":188,"line":49},[186,6670,1626],{"class":669},[186,6672,6673],{"class":198}," add",[186,6675,832],{"class":202},[186,6677,1626],{"class":669},[186,6679,6680],{"class":835}," num1",[186,6682,1988],{"class":202},[186,6684,1626],{"class":669},[186,6686,6687],{"class":835}," num2",[186,6689,1629],{"class":202},[186,6691,6692],{"class":188,"line":219},[186,6693,3018],{"class":202},[186,6695,6696,6698,6701,6703,6706,6708],{"class":188,"line":225},[186,6697,3452],{"class":669},[186,6699,6700],{"class":202}," sum",[186,6702,529],{"class":669},[186,6704,6705],{"class":202},"num1",[186,6707,2091],{"class":669},[186,6709,6710],{"class":202},"num2;\n",[186,6712,6713,6715],{"class":188,"line":242},[186,6714,5556],{"class":669},[186,6716,6717],{"class":202}," sum;\n",[186,6719,6720],{"class":188,"line":248},[186,6721,639],{"class":202},[14,6723,6725],{"id":6724},"_22函数调用","2.2函数调用",[169,6727,6728],{},"调用刚刚写的求和函数",[176,6730,6732],{"className":1612,"code":6731,"language":1614,"meta":181,"style":181},"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",[183,6733,6734,6742,6746,6751,6763,6775,6784,6789,6801],{"__ignoreMap":181},[186,6735,6736,6738,6740],{"class":188,"line":189},[186,6737,1626],{"class":669},[186,6739,3440],{"class":198},[186,6741,3443],{"class":202},[186,6743,6744],{"class":188,"line":49},[186,6745,3018],{"class":202},[186,6747,6748],{"class":188,"line":219},[186,6749,6750],{"class":192},"    \u002F\u002Fa,b实参\n",[186,6752,6753,6755,6757,6759,6761],{"class":188,"line":225},[186,6754,3452],{"class":669},[186,6756,2871],{"class":202},[186,6758,529],{"class":669},[186,6760,1803],{"class":206},[186,6762,634],{"class":202},[186,6764,6765,6767,6769,6771,6773],{"class":188,"line":242},[186,6766,3452],{"class":669},[186,6768,4299],{"class":202},[186,6770,529],{"class":669},[186,6772,1803],{"class":206},[186,6774,634],{"class":202},[186,6776,6777,6779,6781],{"class":188,"line":248},[186,6778,3479],{"class":202},[186,6780,2902],{"class":669},[186,6782,6783],{"class":202},"a,b;\n",[186,6785,6786],{"class":188,"line":265},[186,6787,6788],{"class":192},"    \u002F\u002F调用函数时，实参值传给了形参\n",[186,6790,6791,6793,6795,6798],{"class":188,"line":271},[186,6792,3023],{"class":202},[186,6794,2650],{"class":669},[186,6796,6797],{"class":198},"add",[186,6799,6800],{"class":202},"(a,b);\n",[186,6802,6803],{"class":188,"line":288},[186,6804,639],{"class":202},[14,6806,6808],{"id":6807},"_23值传递","2.3值传递",[169,6810,6811],{},"值传递就是函数调用时实参将数值传给形参",[169,6813,6814],{},"值传递时，如果形参发生任何改变，不会影响实参",[169,6816,6817],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[176,6819,6821],{"className":1612,"code":6820,"language":1614,"meta":181,"style":181},"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",[183,6822,6823,6845,6849,6862,6879,6897,6908,6917,6926,6939,6955,6971,6980,6984,6992,6996,7008,7020,7027],{"__ignoreMap":181},[186,6824,6825,6828,6831,6833,6835,6837,6839,6841,6843],{"class":188,"line":189},[186,6826,6827],{"class":669},"void",[186,6829,6830],{"class":198}," swap",[186,6832,832],{"class":202},[186,6834,1626],{"class":669},[186,6836,6680],{"class":835},[186,6838,1988],{"class":202},[186,6840,1626],{"class":669},[186,6842,6687],{"class":835},[186,6844,1629],{"class":202},[186,6846,6847],{"class":188,"line":49},[186,6848,3018],{"class":202},[186,6850,6851,6853,6855,6858,6860],{"class":188,"line":219},[186,6852,3023],{"class":202},[186,6854,2650],{"class":669},[186,6856,6857],{"class":532},"\"交换前：\"",[186,6859,2650],{"class":669},[186,6861,2672],{"class":202},[186,6863,6864,6866,6868,6871,6873,6875,6877],{"class":188,"line":225},[186,6865,3023],{"class":202},[186,6867,2650],{"class":669},[186,6869,6870],{"class":532},"\"num1=\"",[186,6872,2650],{"class":669},[186,6874,6705],{"class":202},[186,6876,2650],{"class":669},[186,6878,2672],{"class":202},[186,6880,6881,6883,6885,6888,6890,6893,6895],{"class":188,"line":242},[186,6882,3023],{"class":202},[186,6884,2650],{"class":669},[186,6886,6887],{"class":532},"\"num2=\"",[186,6889,2650],{"class":669},[186,6891,6892],{"class":202},"num2",[186,6894,2650],{"class":669},[186,6896,2672],{"class":202},[186,6898,6899,6901,6903,6905],{"class":188,"line":248},[186,6900,3452],{"class":669},[186,6902,5721],{"class":202},[186,6904,529],{"class":669},[186,6906,6907],{"class":202},"num1;\n",[186,6909,6910,6913,6915],{"class":188,"line":265},[186,6911,6912],{"class":202},"    num1",[186,6914,529],{"class":669},[186,6916,6710],{"class":202},[186,6918,6919,6922,6924],{"class":188,"line":271},[186,6920,6921],{"class":202},"    num2",[186,6923,529],{"class":669},[186,6925,5746],{"class":202},[186,6927,6928,6930,6932,6935,6937],{"class":188,"line":288},[186,6929,3023],{"class":202},[186,6931,2650],{"class":669},[186,6933,6934],{"class":532},"\"交换后：\"",[186,6936,2650],{"class":669},[186,6938,2672],{"class":202},[186,6940,6941,6943,6945,6947,6949,6951,6953],{"class":188,"line":294},[186,6942,3023],{"class":202},[186,6944,2650],{"class":669},[186,6946,6870],{"class":532},[186,6948,2650],{"class":669},[186,6950,6705],{"class":202},[186,6952,2650],{"class":669},[186,6954,2672],{"class":202},[186,6956,6957,6959,6961,6963,6965,6967,6969],{"class":188,"line":1212},[186,6958,3023],{"class":202},[186,6960,2650],{"class":669},[186,6962,6887],{"class":532},[186,6964,2650],{"class":669},[186,6966,6892],{"class":202},[186,6968,2650],{"class":669},[186,6970,2672],{"class":202},[186,6972,6973,6975,6977],{"class":188,"line":1223},[186,6974,5556],{"class":669},[186,6976,1676],{"class":202},[186,6978,6979],{"class":192},"\u002F\u002F或者不写\n",[186,6981,6982],{"class":188,"line":1236},[186,6983,639],{"class":202},[186,6985,6986,6988,6990],{"class":188,"line":3096},[186,6987,1626],{"class":669},[186,6989,3440],{"class":198},[186,6991,3443],{"class":202},[186,6993,6994],{"class":188,"line":3110},[186,6995,3018],{"class":202},[186,6997,6998,7000,7002,7004,7006],{"class":188,"line":3115},[186,6999,3452],{"class":669},[186,7001,2871],{"class":202},[186,7003,529],{"class":669},[186,7005,2056],{"class":206},[186,7007,634],{"class":202},[186,7009,7010,7012,7014,7016,7018],{"class":188,"line":3121},[186,7011,3452],{"class":669},[186,7013,4299],{"class":202},[186,7015,529],{"class":669},[186,7017,801],{"class":206},[186,7019,634],{"class":202},[186,7021,7022,7025],{"class":188,"line":3142},[186,7023,7024],{"class":198},"    swap",[186,7026,6800],{"class":202},[186,7028,7029],{"class":188,"line":3147},[186,7030,639],{"class":202},[14,7032,7034],{"id":7033},"_24函数的常见形式","2.4函数的常见形式",[34,7036,7037],{},[22,7038,7039],{},"无参无返",[176,7041,7043],{"className":1612,"code":7042,"language":1614,"meta":181,"style":181},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[183,7044,7045,7054,7058,7071,7075,7083,7087,7092,7100],{"__ignoreMap":181},[186,7046,7047,7049,7052],{"class":188,"line":189},[186,7048,6827],{"class":669},[186,7050,7051],{"class":198}," test01",[186,7053,3443],{"class":202},[186,7055,7056],{"class":188,"line":49},[186,7057,3018],{"class":202},[186,7059,7060,7062,7064,7067,7069],{"class":188,"line":219},[186,7061,3023],{"class":202},[186,7063,2650],{"class":669},[186,7065,7066],{"class":532},"\"你好\"",[186,7068,2650],{"class":669},[186,7070,2672],{"class":202},[186,7072,7073],{"class":188,"line":225},[186,7074,639],{"class":202},[186,7076,7077,7079,7081],{"class":188,"line":242},[186,7078,1626],{"class":669},[186,7080,3440],{"class":198},[186,7082,3443],{"class":202},[186,7084,7085],{"class":188,"line":248},[186,7086,3018],{"class":202},[186,7088,7089],{"class":188,"line":265},[186,7090,7091],{"class":192},"    \u002F\u002F函数调用\n",[186,7093,7094,7097],{"class":188,"line":271},[186,7095,7096],{"class":198},"    test01",[186,7098,7099],{"class":202},"();\n",[186,7101,7102],{"class":188,"line":288},[186,7103,639],{"class":202},[34,7105,7106],{"start":49},[22,7107,7108],{},"有参无返",[176,7110,7112],{"className":1612,"code":7111,"language":1614,"meta":181,"style":181},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[183,7113,7114,7129,7133,7145,7149,7157,7161,7172],{"__ignoreMap":181},[186,7115,7116,7118,7121,7123,7125,7127],{"class":188,"line":189},[186,7117,6827],{"class":669},[186,7119,7120],{"class":198}," test02",[186,7122,832],{"class":202},[186,7124,1626],{"class":669},[186,7126,2871],{"class":835},[186,7128,1629],{"class":202},[186,7130,7131],{"class":188,"line":49},[186,7132,3018],{"class":202},[186,7134,7135,7137,7139,7141,7143],{"class":188,"line":219},[186,7136,3023],{"class":202},[186,7138,2650],{"class":669},[186,7140,7066],{"class":532},[186,7142,2650],{"class":669},[186,7144,2672],{"class":202},[186,7146,7147],{"class":188,"line":225},[186,7148,639],{"class":202},[186,7150,7151,7153,7155],{"class":188,"line":242},[186,7152,1626],{"class":669},[186,7154,3440],{"class":198},[186,7156,3443],{"class":202},[186,7158,7159],{"class":188,"line":248},[186,7160,3018],{"class":202},[186,7162,7163,7166,7168,7170],{"class":188,"line":265},[186,7164,7165],{"class":198},"    test02",[186,7167,832],{"class":202},[186,7169,1922],{"class":206},[186,7171,1112],{"class":202},[186,7173,7174],{"class":188,"line":271},[186,7175,639],{"class":202},[34,7177,7178],{"start":219},[22,7179,7180],{},"无参有返",[176,7182,7184],{"className":1612,"code":7183,"language":1614,"meta":181,"style":181},"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",[183,7185,7186,7195,7199,7211,7220,7224,7232,7236,7249,7268],{"__ignoreMap":181},[186,7187,7188,7190,7193],{"class":188,"line":189},[186,7189,1626],{"class":669},[186,7191,7192],{"class":198}," test03",[186,7194,3443],{"class":202},[186,7196,7197],{"class":188,"line":49},[186,7198,3018],{"class":202},[186,7200,7201,7203,7205,7207,7209],{"class":188,"line":219},[186,7202,3023],{"class":202},[186,7204,2650],{"class":669},[186,7206,7066],{"class":532},[186,7208,2650],{"class":669},[186,7210,2672],{"class":202},[186,7212,7213,7215,7218],{"class":188,"line":225},[186,7214,5556],{"class":669},[186,7216,7217],{"class":206}," 100",[186,7219,634],{"class":202},[186,7221,7222],{"class":188,"line":242},[186,7223,639],{"class":202},[186,7225,7226,7228,7230],{"class":188,"line":248},[186,7227,1626],{"class":669},[186,7229,3440],{"class":198},[186,7231,3443],{"class":202},[186,7233,7234],{"class":188,"line":265},[186,7235,3018],{"class":202},[186,7237,7238,7240,7242,7244,7247],{"class":188,"line":271},[186,7239,3452],{"class":669},[186,7241,6680],{"class":202},[186,7243,529],{"class":669},[186,7245,7246],{"class":198},"test03",[186,7248,7099],{"class":202},[186,7250,7251,7253,7255,7257,7259,7261,7263,7265],{"class":188,"line":288},[186,7252,3023],{"class":202},[186,7254,2650],{"class":669},[186,7256,6870],{"class":532},[186,7258,2650],{"class":669},[186,7260,6705],{"class":202},[186,7262,2650],{"class":669},[186,7264,2715],{"class":202},[186,7266,7267],{"class":192}," \u002F\u002F100\n",[186,7269,7270],{"class":188,"line":294},[186,7271,639],{"class":202},[169,7273,7274],{},"4.有参有返",[176,7276,7278],{"className":1612,"code":7277,"language":1614,"meta":181,"style":181},"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",[183,7279,7280,7295,7299,7312,7318,7322,7331,7335,7347,7361,7376],{"__ignoreMap":181},[186,7281,7282,7284,7287,7289,7291,7293],{"class":188,"line":189},[186,7283,1626],{"class":669},[186,7285,7286],{"class":198}," test04",[186,7288,832],{"class":202},[186,7290,1626],{"class":669},[186,7292,2871],{"class":835},[186,7294,1629],{"class":202},[186,7296,7297],{"class":188,"line":49},[186,7298,3018],{"class":202},[186,7300,7301,7303,7305,7308,7310],{"class":188,"line":219},[186,7302,3023],{"class":202},[186,7304,2650],{"class":669},[186,7306,7307],{"class":532},"\"hello\"",[186,7309,2650],{"class":669},[186,7311,2672],{"class":202},[186,7313,7314,7316],{"class":188,"line":225},[186,7315,5556],{"class":669},[186,7317,2905],{"class":202},[186,7319,7320],{"class":188,"line":242},[186,7321,639],{"class":202},[186,7323,7324,7326,7329],{"class":188,"line":248},[186,7325,1626],{"class":669},[186,7327,7328],{"class":198}," mian",[186,7330,3443],{"class":202},[186,7332,7333],{"class":188,"line":265},[186,7334,3018],{"class":202},[186,7336,7337,7339,7341,7343,7345],{"class":188,"line":271},[186,7338,3452],{"class":669},[186,7340,4299],{"class":202},[186,7342,529],{"class":669},[186,7344,1829],{"class":206},[186,7346,634],{"class":202},[186,7348,7349,7351,7353,7355,7358],{"class":188,"line":288},[186,7350,3452],{"class":669},[186,7352,4315],{"class":202},[186,7354,529],{"class":669},[186,7356,7357],{"class":198},"test04",[186,7359,7360],{"class":202},"(b);\n",[186,7362,7363,7365,7367,7369,7371,7373],{"class":188,"line":294},[186,7364,3023],{"class":202},[186,7366,2650],{"class":669},[186,7368,1899],{"class":202},[186,7370,2650],{"class":669},[186,7372,2715],{"class":202},[186,7374,7375],{"class":192}," \u002F\u002F1\n",[186,7377,7378],{"class":188,"line":1212},[186,7379,639],{"class":202},[14,7381,7383],{"id":7382},"_25函数的声明","2.5函数的声明",[169,7385,7386],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[169,7388,7389,7390],{},"函数的",[54,7391,7392],{},"声明可以多次，但是函数的定义只能有一次",[176,7394,7396],{"className":1612,"code":7395,"language":1614,"meta":181,"style":181},"\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",[183,7397,7398,7403,7408,7433,7442,7446,7458,7470,7486,7490,7510,7514,7533],{"__ignoreMap":181},[186,7399,7400],{"class":188,"line":189},[186,7401,7402],{"class":192},"\u002F\u002F函数声明\n",[186,7404,7405],{"class":188,"line":49},[186,7406,7407],{"class":192},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[186,7409,7410,7412,7415,7417,7419,7421,7423,7425,7427,7430],{"class":188,"line":219},[186,7411,1626],{"class":669},[186,7413,7414],{"class":198}," max",[186,7416,832],{"class":202},[186,7418,1626],{"class":669},[186,7420,2871],{"class":835},[186,7422,1988],{"class":202},[186,7424,1626],{"class":669},[186,7426,4299],{"class":835},[186,7428,7429],{"class":202},");",[186,7431,7432],{"class":192},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[186,7434,7435,7437,7439],{"class":188,"line":225},[186,7436,1626],{"class":669},[186,7438,3440],{"class":198},[186,7440,7441],{"class":202},"() \n",[186,7443,7444],{"class":188,"line":242},[186,7445,3018],{"class":202},[186,7447,7448,7450,7452,7454,7456],{"class":188,"line":248},[186,7449,3452],{"class":669},[186,7451,2871],{"class":202},[186,7453,529],{"class":669},[186,7455,2056],{"class":206},[186,7457,634],{"class":202},[186,7459,7460,7462,7464,7466,7468],{"class":188,"line":265},[186,7461,3452],{"class":669},[186,7463,4299],{"class":202},[186,7465,529],{"class":669},[186,7467,801],{"class":206},[186,7469,634],{"class":202},[186,7471,7472,7474,7476,7479,7482,7484],{"class":188,"line":271},[186,7473,3023],{"class":202},[186,7475,2650],{"class":669},[186,7477,7478],{"class":198},"max",[186,7480,7481],{"class":202},"(a,b)",[186,7483,2650],{"class":669},[186,7485,2672],{"class":202},[186,7487,7488],{"class":188,"line":288},[186,7489,639],{"class":202},[186,7491,7492,7494,7496,7498,7500,7502,7504,7506,7508],{"class":188,"line":294},[186,7493,1626],{"class":669},[186,7495,7414],{"class":198},[186,7497,832],{"class":202},[186,7499,1626],{"class":669},[186,7501,2871],{"class":835},[186,7503,1988],{"class":202},[186,7505,1626],{"class":669},[186,7507,4299],{"class":835},[186,7509,1629],{"class":202},[186,7511,7512],{"class":188,"line":1212},[186,7513,3018],{"class":202},[186,7515,7516,7518,7520,7522,7524,7526,7528,7530],{"class":188,"line":1223},[186,7517,5556],{"class":669},[186,7519,2871],{"class":202},[186,7521,2567],{"class":669},[186,7523,1874],{"class":202},[186,7525,2593],{"class":669},[186,7527,948],{"class":202},[186,7529,2467],{"class":669},[186,7531,7532],{"class":202},"b;\n",[186,7534,7535],{"class":188,"line":1236},[186,7536,639],{"class":202},[14,7538,7540],{"id":7539},"_26函数的分文件编写","2.6函数的分文件编写",[169,7542,7543],{},"4个步骤：",[19,7545,7546,7549,7552,7555],{},[22,7547,7548],{},"1.创建后缀名为.h的头文件",[22,7550,7551],{},"2.创建后缀名为.cpp的源文件",[22,7553,7554],{},"3.在头文件中写函数的定义",[22,7556,7557],{},"4.在源文件中写函数的定义\n示例：",[169,7559,7560],{},"头文件：swap.h",[176,7562,7564],{"className":1612,"code":7563,"language":1614,"meta":181,"style":181},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[183,7565,7566,7572,7582,7586],{"__ignoreMap":181},[186,7567,7568,7570],{"class":188,"line":189},[186,7569,3417],{"class":669},[186,7571,3420],{"class":532},[186,7573,7574,7576,7578,7580],{"class":188,"line":49},[186,7575,3425],{"class":669},[186,7577,3428],{"class":669},[186,7579,3431],{"class":198},[186,7581,634],{"class":202},[186,7583,7584],{"class":188,"line":219},[186,7585,7402],{"class":192},[186,7587,7588,7590,7592,7594,7596,7598,7600,7602,7604],{"class":188,"line":225},[186,7589,6827],{"class":669},[186,7591,6830],{"class":198},[186,7593,832],{"class":202},[186,7595,1626],{"class":669},[186,7597,2871],{"class":835},[186,7599,1988],{"class":202},[186,7601,1626],{"class":669},[186,7603,4299],{"class":835},[186,7605,1112],{"class":202},[169,7607,7608],{},"源文件：swap.cpp",[176,7610,7612],{"className":1612,"code":7611,"language":1614,"meta":181,"style":181},"#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",[183,7613,7614,7621,7626,7646,7650,7661,7670,7679,7696,7713],{"__ignoreMap":181},[186,7615,7616,7618],{"class":188,"line":189},[186,7617,3417],{"class":669},[186,7619,7620],{"class":532}," \"swap.h\"\n",[186,7622,7623],{"class":188,"line":49},[186,7624,7625],{"class":192},"\u002F\u002F函数的定义\n",[186,7627,7628,7630,7632,7634,7636,7638,7640,7642,7644],{"class":188,"line":219},[186,7629,6827],{"class":669},[186,7631,6830],{"class":198},[186,7633,832],{"class":202},[186,7635,1626],{"class":669},[186,7637,2871],{"class":835},[186,7639,1988],{"class":202},[186,7641,1626],{"class":669},[186,7643,4299],{"class":835},[186,7645,1629],{"class":202},[186,7647,7648],{"class":188,"line":225},[186,7649,3018],{"class":202},[186,7651,7652,7654,7656,7658],{"class":188,"line":242},[186,7653,3452],{"class":669},[186,7655,5721],{"class":202},[186,7657,529],{"class":669},[186,7659,7660],{"class":202},"a;\n",[186,7662,7663,7666,7668],{"class":188,"line":248},[186,7664,7665],{"class":202},"    a",[186,7667,529],{"class":669},[186,7669,7532],{"class":202},[186,7671,7672,7675,7677],{"class":188,"line":265},[186,7673,7674],{"class":202},"    b",[186,7676,529],{"class":669},[186,7678,5746],{"class":202},[186,7680,7681,7683,7685,7688,7690,7692,7694],{"class":188,"line":271},[186,7682,3023],{"class":202},[186,7684,2650],{"class":669},[186,7686,7687],{"class":532},"\"a=\"",[186,7689,2650],{"class":669},[186,7691,948],{"class":202},[186,7693,2650],{"class":669},[186,7695,2672],{"class":202},[186,7697,7698,7700,7702,7705,7707,7709,7711],{"class":188,"line":288},[186,7699,3023],{"class":202},[186,7701,2650],{"class":669},[186,7703,7704],{"class":532},"\"b=\"",[186,7706,2650],{"class":669},[186,7708,1874],{"class":202},[186,7710,2650],{"class":669},[186,7712,2672],{"class":202},[186,7714,7715],{"class":188,"line":294},[186,7716,639],{"class":202},[1524,7718,7719],{},"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":181,"searchDepth":49,"depth":49,"links":7721},[7722,7723,7724,7725,7726,7727],{"id":6638,"depth":49,"text":6639},{"id":6724,"depth":49,"text":6725},{"id":6807,"depth":49,"text":6808},{"id":7033,"depth":49,"text":7034},{"id":7382,"depth":49,"text":7383},{"id":7539,"depth":49,"text":7540},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6630,"description":181},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7734,"title":7735,"body":7736,"description":7743,"extension":1549,"meta":9148,"navigation":1551,"path":9149,"seo":9150,"stem":9151,"__hash__":9152},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7737,"toc":9138},[7738,7741,7744,7748,7910,7914,7917,7920,7923,7926,8066,8070,8073,8076,8079,8144,8148,8153,8220,8223,8227,8230,8241,8246,8266,8269,8274,8293,8296,8300,8319,8322,8326,8561,8565,8568,8571,8574,8736,8739,8743,8746,8752,9135],[10,7739,7735],{"id":7740},"_3指针",[169,7742,7743],{},"通过指针保存一个地址，指针就是个地址",[14,7745,7747],{"id":7746},"_31定义指针","3.1定义指针",[176,7749,7751],{"className":1612,"code":7750,"language":1614,"meta":181,"style":181},"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",[183,7752,7753,7761,7765,7770,7782,7787,7795,7805,7823,7843,7847,7852,7857,7862,7876,7892,7906],{"__ignoreMap":181},[186,7754,7755,7757,7759],{"class":188,"line":189},[186,7756,1626],{"class":669},[186,7758,3440],{"class":198},[186,7760,3443],{"class":202},[186,7762,7763],{"class":188,"line":49},[186,7764,3018],{"class":202},[186,7766,7767],{"class":188,"line":219},[186,7768,7769],{"class":192},"    \u002F\u002F1.定义指针\n",[186,7771,7772,7774,7776,7778,7780],{"class":188,"line":225},[186,7773,3452],{"class":669},[186,7775,2871],{"class":202},[186,7777,529],{"class":669},[186,7779,2056],{"class":206},[186,7781,634],{"class":202},[186,7783,7784],{"class":188,"line":242},[186,7785,7786],{"class":192},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[186,7788,7789,7792],{"class":188,"line":248},[186,7790,7791],{"class":669},"    int*",[186,7793,7794],{"class":202},"p;\n",[186,7796,7797,7800,7803],{"class":188,"line":265},[186,7798,7799],{"class":202},"    p",[186,7801,7802],{"class":669},"=&",[186,7804,7660],{"class":202},[186,7806,7807,7809,7811,7814,7817,7819,7821],{"class":188,"line":271},[186,7808,3023],{"class":202},[186,7810,2650],{"class":669},[186,7812,7813],{"class":532},"\"a的地址为：\"",[186,7815,7816],{"class":669},"\u003C\u003C&",[186,7818,948],{"class":202},[186,7820,2650],{"class":669},[186,7822,2672],{"class":202},[186,7824,7825,7827,7829,7832,7834,7836,7838,7840],{"class":188,"line":288},[186,7826,3023],{"class":202},[186,7828,2650],{"class":669},[186,7830,7831],{"class":532},"\"指针p为：\"",[186,7833,2650],{"class":669},[186,7835,169],{"class":202},[186,7837,2650],{"class":669},[186,7839,2715],{"class":202},[186,7841,7842],{"class":192},"\u002F\u002F指针p表示的就是a的地址\n",[186,7844,7845],{"class":188,"line":294},[186,7846,3867],{"emptyLinePlaceholder":1551},[186,7848,7849],{"class":188,"line":1212},[186,7850,7851],{"class":192},"    \u002F\u002F2.使用指针\n",[186,7853,7854],{"class":188,"line":1223},[186,7855,7856],{"class":192},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[186,7858,7859],{"class":188,"line":1236},[186,7860,7861],{"class":192},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[186,7863,7864,7867,7869,7871,7874],{"class":188,"line":3096},[186,7865,7866],{"class":669},"    *",[186,7868,169],{"class":202},[186,7870,529],{"class":669},[186,7872,7873],{"class":206},"1000",[186,7875,634],{"class":202},[186,7877,7878,7880,7883,7885,7887,7889],{"class":188,"line":3110},[186,7879,3023],{"class":202},[186,7881,7882],{"class":669},"\u003C\u003C*",[186,7884,169],{"class":202},[186,7886,2650],{"class":669},[186,7888,2715],{"class":202},[186,7890,7891],{"class":192},"\u002F\u002F1000\n",[186,7893,7894,7896,7898,7900,7902,7904],{"class":188,"line":3115},[186,7895,3023],{"class":202},[186,7897,2650],{"class":669},[186,7899,948],{"class":202},[186,7901,2650],{"class":669},[186,7903,2715],{"class":202},[186,7905,7891],{"class":192},[186,7907,7908],{"class":188,"line":3121},[186,7909,639],{"class":202},[14,7911,7913],{"id":7912},"_32指针所占的内存空间","3.2指针所占的内存空间",[169,7915,7916],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[169,7918,7919],{},"在32位操作系统下：占用4个字节空间",[169,7921,7922],{},"在64位操作系统下：占用8个字节空间",[169,7924,7925],{},"上方是不管啥数据类型的",[176,7927,7929],{"className":1612,"code":7928,"language":1614,"meta":181,"style":181},"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",[183,7930,7931,7939,7943,7948,7960,7965,7970,7975,7988,8010,8036,8062],{"__ignoreMap":181},[186,7932,7933,7935,7937],{"class":188,"line":189},[186,7934,1626],{"class":669},[186,7936,3440],{"class":198},[186,7938,3443],{"class":202},[186,7940,7941],{"class":188,"line":49},[186,7942,3018],{"class":202},[186,7944,7945],{"class":188,"line":219},[186,7946,7947],{"class":192},"    \u002F\u002F指针所占内存空间\n",[186,7949,7950,7952,7954,7956,7958],{"class":188,"line":225},[186,7951,3452],{"class":669},[186,7953,2871],{"class":202},[186,7955,529],{"class":669},[186,7957,2056],{"class":206},[186,7959,634],{"class":202},[186,7961,7962],{"class":188,"line":242},[186,7963,7964],{"class":192},"    \u002F\u002Fint *p;\n",[186,7966,7967],{"class":188,"line":248},[186,7968,7969],{"class":192},"    \u002F\u002Fp=&a;\n",[186,7971,7972],{"class":188,"line":265},[186,7973,7974],{"class":192},"    \u002F\u002F上述可以写为以下：\n",[186,7976,7977,7979,7982,7984,7986],{"class":188,"line":271},[186,7978,3452],{"class":669},[186,7980,7981],{"class":669}," *",[186,7983,169],{"class":202},[186,7985,7802],{"class":669},[186,7987,7660],{"class":202},[186,7989,7990,7993,7995,7998,8000,8003,8005,8007],{"class":188,"line":288},[186,7991,7992],{"class":202},"    cout ",[186,7994,2650],{"class":669},[186,7996,7997],{"class":532},"\"sizeof(int *)\"",[186,7999,2845],{"class":669},[186,8001,8002],{"class":202},"(p)",[186,8004,2650],{"class":669},[186,8006,2715],{"class":202},[186,8008,8009],{"class":192},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[186,8011,8012,8014,8016,8018,8020,8022,8024,8026,8028,8030,8033],{"class":188,"line":294},[186,8013,7992],{"class":202},[186,8015,2650],{"class":669},[186,8017,7997],{"class":532},[186,8019,2845],{"class":669},[186,8021,832],{"class":202},[186,8023,1626],{"class":669},[186,8025,7981],{"class":669},[186,8027,2039],{"class":202},[186,8029,2650],{"class":669},[186,8031,8032],{"class":202},"endl",[186,8034,8035],{"class":192},"  \u002F\u002F4字节(32位的话)\n",[186,8037,8038,8040,8042,8045,8047,8049,8051,8053,8055,8057,8059],{"class":188,"line":1212},[186,8039,7992],{"class":202},[186,8041,2650],{"class":669},[186,8043,8044],{"class":532},"\"sizeof(char *)\"",[186,8046,2845],{"class":669},[186,8048,832],{"class":202},[186,8050,1716],{"class":669},[186,8052,7981],{"class":669},[186,8054,2039],{"class":202},[186,8056,2650],{"class":669},[186,8058,2715],{"class":202},[186,8060,8061],{"class":192}," \u002F\u002F4字节(32位的话)\n",[186,8063,8064],{"class":188,"line":1223},[186,8065,639],{"class":202},[14,8067,8069],{"id":8068},"_33空指针","3.3空指针",[169,8071,8072],{},"空指针：指针变量指向内存中编号为0的空间",[169,8074,8075],{},"用途：初始化指针变量",[169,8077,8078],{},"注意：空指针指向的内存是不可以访问的",[176,8080,8082],{"className":1612,"code":8081,"language":1614,"meta":181,"style":181},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[183,8083,8084,8092,8096,8101,8115,8120,8135,8140],{"__ignoreMap":181},[186,8085,8086,8088,8090],{"class":188,"line":189},[186,8087,1626],{"class":669},[186,8089,3440],{"class":198},[186,8091,3443],{"class":202},[186,8093,8094],{"class":188,"line":49},[186,8095,3018],{"class":202},[186,8097,8098],{"class":188,"line":219},[186,8099,8100],{"class":192},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[186,8102,8103,8105,8107,8109,8111,8113],{"class":188,"line":225},[186,8104,3452],{"class":669},[186,8106,7981],{"class":669},[186,8108,169],{"class":202},[186,8110,529],{"class":669},[186,8112,3859],{"class":206},[186,8114,634],{"class":202},[186,8116,8117],{"class":188,"line":242},[186,8118,8119],{"class":192},"    \u002F\u002F2.空指针不能进行访问\n",[186,8121,8122,8124,8126,8128,8130,8132],{"class":188,"line":248},[186,8123,7866],{"class":669},[186,8125,169],{"class":202},[186,8127,529],{"class":669},[186,8129,1922],{"class":206},[186,8131,1676],{"class":202},[186,8133,8134],{"class":192},"\u002F\u002F直接报错，压根不能访问\n",[186,8136,8137],{"class":188,"line":265},[186,8138,8139],{"class":192},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[186,8141,8142],{"class":188,"line":271},[186,8143,639],{"class":202},[14,8145,8147],{"id":8146},"_34野指针","3.4野指针",[169,8149,8150],{},[54,8151,8152],{},"指针变量指向非法的内存空间",[176,8154,8156],{"className":1612,"code":8155,"language":1614,"meta":181,"style":181},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[183,8157,8158,8166,8170,8199,8204,8216],{"__ignoreMap":181},[186,8159,8160,8162,8164],{"class":188,"line":189},[186,8161,1626],{"class":669},[186,8163,3440],{"class":198},[186,8165,3443],{"class":202},[186,8167,8168],{"class":188,"line":49},[186,8169,3018],{"class":202},[186,8171,8172,8174,8176,8178,8180,8182,8184,8186,8188,8191,8194,8196],{"class":188,"line":219},[186,8173,3452],{"class":669},[186,8175,7981],{"class":669},[186,8177,169],{"class":202},[186,8179,529],{"class":669},[186,8181,832],{"class":202},[186,8183,1626],{"class":669},[186,8185,7981],{"class":669},[186,8187,2039],{"class":202},[186,8189,8190],{"class":669},"0x",[186,8192,8193],{"class":206},"1100",[186,8195,1676],{"class":202},[186,8197,8198],{"class":192}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[186,8200,8201],{"class":188,"line":225},[186,8202,8203],{"class":192},"    \u002F\u002F访问野指针报错\n",[186,8205,8206,8208,8210,8212,8214],{"class":188,"line":242},[186,8207,3023],{"class":202},[186,8209,7882],{"class":669},[186,8211,169],{"class":202},[186,8213,2650],{"class":669},[186,8215,2672],{"class":202},[186,8217,8218],{"class":188,"line":248},[186,8219,639],{"class":202},[169,8221,8222],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8224,8226],{"id":8225},"_35const修饰指针","3.5const修饰指针",[169,8228,8229],{},"三种情况：",[19,8231,8232,8235,8238],{},[22,8233,8234],{},"const修饰指针 常量指针",[22,8236,8237],{},"const修饰常量 指针常量",[22,8239,8240],{},"const即修饰指针，又修饰常量",[34,8242,8243],{},[22,8244,8245],{},"常量指针",[176,8247,8249],{"className":1612,"code":8248,"language":1614,"meta":181,"style":181},"const int *p=&a;\n",[183,8250,8251],{"__ignoreMap":181},[186,8252,8253,8256,8258,8260,8262,8264],{"class":188,"line":189},[186,8254,8255],{"class":669},"const",[186,8257,3849],{"class":669},[186,8259,7981],{"class":669},[186,8261,169],{"class":202},[186,8263,7802],{"class":669},[186,8265,7660],{"class":202},[169,8267,8268],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[34,8270,8271],{"start":49},[22,8272,8273],{},"指针常量",[176,8275,8277],{"className":1612,"code":8276,"language":1614,"meta":181,"style":181},"int *const p=&a;\n",[183,8278,8279],{"__ignoreMap":181},[186,8280,8281,8283,8286,8289,8291],{"class":188,"line":189},[186,8282,1626],{"class":669},[186,8284,8285],{"class":669}," *const",[186,8287,8288],{"class":202}," p",[186,8290,7802],{"class":669},[186,8292,7660],{"class":202},[169,8294,8295],{},"指针的指向不可以改，指针指向的值可以改",[34,8297,8298],{"start":219},[22,8299,8240],{},[176,8301,8303],{"className":1612,"code":8302,"language":1614,"meta":181,"style":181},"const int *const p=&a;\n",[183,8304,8305],{"__ignoreMap":181},[186,8306,8307,8309,8311,8313,8315,8317],{"class":188,"line":189},[186,8308,8255],{"class":669},[186,8310,3849],{"class":669},[186,8312,8285],{"class":669},[186,8314,8288],{"class":202},[186,8316,7802],{"class":669},[186,8318,7660],{"class":202},[169,8320,8321],{},"指针的指向和指针指向的值都不可以改变",[14,8323,8325],{"id":8324},"_36指针和数组","3.6指针和数组",[176,8327,8329],{"className":1612,"code":8328,"language":1614,"meta":181,"style":181},"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",[183,8330,8331,8339,8343,8348,8402,8423,8439,8455,8466,8483,8488,8502,8528,8532,8544,8553,8557],{"__ignoreMap":181},[186,8332,8333,8335,8337],{"class":188,"line":189},[186,8334,1626],{"class":669},[186,8336,3440],{"class":198},[186,8338,3443],{"class":202},[186,8340,8341],{"class":188,"line":49},[186,8342,3018],{"class":202},[186,8344,8345],{"class":188,"line":219},[186,8346,8347],{"class":192},"    \u002F\u002F利用指针访问数组中的元素\n",[186,8349,8350,8352,8354,8356,8358,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378,8380,8382,8384,8386,8388,8390,8392,8394,8396,8398,8400],{"class":188,"line":225},[186,8351,3452],{"class":669},[186,8353,5428],{"class":202},[186,8355,2056],{"class":206},[186,8357,2547],{"class":202},[186,8359,529],{"class":669},[186,8361,2504],{"class":202},[186,8363,1829],{"class":206},[186,8365,1988],{"class":202},[186,8367,1697],{"class":206},[186,8369,1988],{"class":202},[186,8371,1691],{"class":206},[186,8373,1988],{"class":202},[186,8375,1904],{"class":206},[186,8377,1988],{"class":202},[186,8379,1930],{"class":206},[186,8381,1988],{"class":202},[186,8383,1954],{"class":206},[186,8385,1988],{"class":202},[186,8387,1979],{"class":206},[186,8389,1988],{"class":202},[186,8391,2005],{"class":206},[186,8393,1988],{"class":202},[186,8395,2030],{"class":206},[186,8397,1988],{"class":202},[186,8399,2056],{"class":206},[186,8401,5461],{"class":202},[186,8403,8404,8406,8408,8411,8413,8415,8417,8419,8421],{"class":188,"line":242},[186,8405,3023],{"class":202},[186,8407,2650],{"class":669},[186,8409,8410],{"class":532},"\"数组的第一个元素为：\"",[186,8412,2650],{"class":669},[186,8414,5372],{"class":202},[186,8416,1803],{"class":206},[186,8418,2547],{"class":202},[186,8420,2650],{"class":669},[186,8422,2672],{"class":202},[186,8424,8425,8427,8429,8431,8433,8436],{"class":188,"line":248},[186,8426,3452],{"class":669},[186,8428,7981],{"class":669},[186,8430,169],{"class":202},[186,8432,529],{"class":669},[186,8434,8435],{"class":202},"arr;",[186,8437,8438],{"class":192},"\u002F\u002F注意数才要加取地址符号&\n",[186,8440,8441,8443,8445,8447,8449,8451,8453],{"class":188,"line":265},[186,8442,3023],{"class":202},[186,8444,2650],{"class":669},[186,8446,8410],{"class":532},[186,8448,7882],{"class":669},[186,8450,169],{"class":202},[186,8452,2650],{"class":669},[186,8454,2672],{"class":202},[186,8456,8457,8459,8461,8463],{"class":188,"line":271},[186,8458,7799],{"class":202},[186,8460,3759],{"class":669},[186,8462,1676],{"class":202},[186,8464,8465],{"class":192}," \u002F\u002F让指针向后偏移4个字节\n",[186,8467,8468,8470,8472,8475,8477,8479,8481],{"class":188,"line":288},[186,8469,3023],{"class":202},[186,8471,2650],{"class":669},[186,8473,8474],{"class":532},"\"数组的第二个元素为：\"",[186,8476,7882],{"class":669},[186,8478,169],{"class":202},[186,8480,2650],{"class":669},[186,8482,2672],{"class":202},[186,8484,8485],{"class":188,"line":294},[186,8486,8487],{"class":192},"    \u002F\u002F利用指针遍历数组\n",[186,8489,8490,8492,8494,8497,8499],{"class":188,"line":1212},[186,8491,3452],{"class":669},[186,8493,7981],{"class":669},[186,8495,8496],{"class":202},"p2",[186,8498,529],{"class":669},[186,8500,8501],{"class":202},"arr;\n",[186,8503,8504,8506,8508,8510,8512,8514,8516,8518,8520,8522,8524,8526],{"class":188,"line":1223},[186,8505,4667],{"class":669},[186,8507,3126],{"class":202},[186,8509,1626],{"class":669},[186,8511,4498],{"class":202},[186,8513,529],{"class":669},[186,8515,1803],{"class":206},[186,8517,4505],{"class":202},[186,8519,520],{"class":669},[186,8521,2056],{"class":206},[186,8523,4505],{"class":202},[186,8525,3759],{"class":669},[186,8527,1629],{"class":202},[186,8529,8530],{"class":188,"line":1236},[186,8531,3497],{"class":202},[186,8533,8534,8536,8538,8540,8542],{"class":188,"line":3096},[186,8535,4917],{"class":202},[186,8537,7882],{"class":669},[186,8539,8496],{"class":202},[186,8541,2650],{"class":669},[186,8543,2672],{"class":202},[186,8545,8546,8549,8551],{"class":188,"line":3110},[186,8547,8548],{"class":202},"        p2",[186,8550,3759],{"class":669},[186,8552,634],{"class":202},[186,8554,8555],{"class":188,"line":3115},[186,8556,3654],{"class":202},[186,8558,8559],{"class":188,"line":3121},[186,8560,639],{"class":202},[14,8562,8564],{"id":8563},"_37指针和函数","3.7指针和函数",[169,8566,8567],{},"利用指针做函数参数，可以修改实参的值",[169,8569,8570],{},"值传递：只改变形参，不改变实参",[169,8572,8573],{},"地址传递：",[176,8575,8577],{"className":1612,"code":8576,"language":1614,"meta":181,"style":181},"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",[183,8578,8579,8604,8608,8620,8631,8641,8645,8653,8657,8669,8681,8686,8702,8717,8732],{"__ignoreMap":181},[186,8580,8581,8583,8585,8587,8589,8591,8594,8596,8598,8600,8602],{"class":188,"line":189},[186,8582,6827],{"class":669},[186,8584,6830],{"class":198},[186,8586,832],{"class":202},[186,8588,1626],{"class":669},[186,8590,7981],{"class":669},[186,8592,8593],{"class":835},"p1",[186,8595,1988],{"class":202},[186,8597,1626],{"class":669},[186,8599,7981],{"class":669},[186,8601,8496],{"class":835},[186,8603,1629],{"class":202},[186,8605,8606],{"class":188,"line":49},[186,8607,3018],{"class":202},[186,8609,8610,8612,8614,8617],{"class":188,"line":219},[186,8611,3452],{"class":669},[186,8613,5721],{"class":202},[186,8615,8616],{"class":669},"=*",[186,8618,8619],{"class":202},"p1;\n",[186,8621,8622,8624,8626,8628],{"class":188,"line":225},[186,8623,7866],{"class":669},[186,8625,8593],{"class":202},[186,8627,8616],{"class":669},[186,8629,8630],{"class":202},"p2;\n",[186,8632,8633,8635,8637,8639],{"class":188,"line":242},[186,8634,7866],{"class":669},[186,8636,8496],{"class":202},[186,8638,529],{"class":669},[186,8640,5746],{"class":202},[186,8642,8643],{"class":188,"line":248},[186,8644,639],{"class":202},[186,8646,8647,8649,8651],{"class":188,"line":265},[186,8648,1626],{"class":669},[186,8650,3440],{"class":198},[186,8652,3443],{"class":202},[186,8654,8655],{"class":188,"line":271},[186,8656,3018],{"class":202},[186,8658,8659,8661,8663,8665,8667],{"class":188,"line":288},[186,8660,3452],{"class":669},[186,8662,2871],{"class":202},[186,8664,529],{"class":669},[186,8666,2056],{"class":206},[186,8668,634],{"class":202},[186,8670,8671,8673,8675,8677,8679],{"class":188,"line":294},[186,8672,3452],{"class":669},[186,8674,4299],{"class":202},[186,8676,529],{"class":669},[186,8678,801],{"class":206},[186,8680,634],{"class":202},[186,8682,8683],{"class":188,"line":1212},[186,8684,8685],{"class":192},"    \u002F\u002F地址传递\n",[186,8687,8688,8690,8692,8694,8697,8699],{"class":188,"line":1223},[186,8689,7024],{"class":198},[186,8691,832],{"class":202},[186,8693,1963],{"class":669},[186,8695,8696],{"class":202},"a,",[186,8698,1963],{"class":669},[186,8700,8701],{"class":202},"b);\n",[186,8703,8704,8706,8708,8710,8712,8714],{"class":188,"line":1236},[186,8705,3023],{"class":202},[186,8707,2650],{"class":669},[186,8709,948],{"class":202},[186,8711,2650],{"class":669},[186,8713,2715],{"class":202},[186,8715,8716],{"class":192},"\u002F\u002F20\n",[186,8718,8719,8721,8723,8725,8727,8729],{"class":188,"line":3096},[186,8720,3023],{"class":202},[186,8722,2650],{"class":669},[186,8724,1874],{"class":202},[186,8726,2650],{"class":669},[186,8728,2715],{"class":202},[186,8730,8731],{"class":192},"\u002F\u002F10\n",[186,8733,8734],{"class":188,"line":3110},[186,8735,639],{"class":202},[169,8737,8738],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8740,8742],{"id":8741},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[169,8744,8745],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[169,8747,8748,8749,8751],{},"例如数组：int arr",[186,8750,2056],{},"={4,3,6,9,1,2,10,8,7,5}",[176,8753,8755],{"className":1612,"code":8754,"language":1614,"meta":181,"style":181},"#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",[183,8756,8757,8763,8773,8797,8801,8832,8836,8870,8874,8892,8896,8907,8922,8937,8941,8945,8949,8953,8957,8965,8969,8974,9028,9040,9052,9057,9065,9069,9074,9099,9103,9118,9127,9131],{"__ignoreMap":181},[186,8758,8759,8761],{"class":188,"line":189},[186,8760,3417],{"class":669},[186,8762,3420],{"class":532},[186,8764,8765,8767,8769,8771],{"class":188,"line":49},[186,8766,3425],{"class":669},[186,8768,3428],{"class":669},[186,8770,3431],{"class":198},[186,8772,634],{"class":202},[186,8774,8775,8777,8780,8782,8784,8786,8788,8790,8792,8795],{"class":188,"line":219},[186,8776,6827],{"class":669},[186,8778,8779],{"class":198}," bubbleSort",[186,8781,832],{"class":202},[186,8783,1626],{"class":669},[186,8785,7981],{"class":669},[186,8787,169],{"class":835},[186,8789,1988],{"class":202},[186,8791,1626],{"class":669},[186,8793,8794],{"class":835}," len",[186,8796,1629],{"class":202},[186,8798,8799],{"class":188,"line":225},[186,8800,3018],{"class":202},[186,8802,8803,8805,8807,8809,8811,8813,8815,8817,8819,8822,8824,8826,8828,8830],{"class":188,"line":242},[186,8804,4667],{"class":669},[186,8806,832],{"class":202},[186,8808,1626],{"class":669},[186,8810,4498],{"class":202},[186,8812,529],{"class":669},[186,8814,1803],{"class":206},[186,8816,4505],{"class":202},[186,8818,520],{"class":669},[186,8820,8821],{"class":202},"len",[186,8823,2142],{"class":669},[186,8825,1829],{"class":206},[186,8827,4505],{"class":202},[186,8829,3759],{"class":669},[186,8831,1629],{"class":202},[186,8833,8834],{"class":188,"line":248},[186,8835,3497],{"class":202},[186,8837,8838,8840,8842,8844,8846,8848,8850,8852,8854,8856,8858,8860,8862,8864,8866,8868],{"class":188,"line":265},[186,8839,4869],{"class":669},[186,8841,832],{"class":202},[186,8843,1626],{"class":669},[186,8845,4876],{"class":202},[186,8847,529],{"class":669},[186,8849,1803],{"class":206},[186,8851,4883],{"class":202},[186,8853,520],{"class":669},[186,8855,8821],{"class":202},[186,8857,2142],{"class":669},[186,8859,2051],{"class":202},[186,8861,2142],{"class":669},[186,8863,1829],{"class":206},[186,8865,4883],{"class":202},[186,8867,3759],{"class":669},[186,8869,1629],{"class":202},[186,8871,8872],{"class":188,"line":271},[186,8873,3977],{"class":202},[186,8875,8876,8878,8881,8883,8886,8888,8890],{"class":188,"line":288},[186,8877,6108],{"class":669},[186,8879,8880],{"class":202},"(p[j]",[186,8882,2567],{"class":669},[186,8884,8885],{"class":202},"p[j",[186,8887,2091],{"class":669},[186,8889,1829],{"class":206},[186,8891,6123],{"class":202},[186,8893,8894],{"class":188,"line":294},[186,8895,6128],{"class":202},[186,8897,8898,8900,8902,8904],{"class":188,"line":1212},[186,8899,6133],{"class":669},[186,8901,5721],{"class":202},[186,8903,529],{"class":669},[186,8905,8906],{"class":202},"p[j];\n",[186,8908,8909,8912,8914,8916,8918,8920],{"class":188,"line":1223},[186,8910,8911],{"class":202},"                p[j]",[186,8913,529],{"class":669},[186,8915,8885],{"class":202},[186,8917,2091],{"class":669},[186,8919,1829],{"class":206},[186,8921,6156],{"class":202},[186,8923,8924,8927,8929,8931,8933,8935],{"class":188,"line":1236},[186,8925,8926],{"class":202},"                p[j",[186,8928,2091],{"class":669},[186,8930,1829],{"class":206},[186,8932,2547],{"class":202},[186,8934,529],{"class":669},[186,8936,5746],{"class":202},[186,8938,8939],{"class":188,"line":3096},[186,8940,6176],{"class":202},[186,8942,8943],{"class":188,"line":3110},[186,8944,3996],{"class":202},[186,8946,8947],{"class":188,"line":3115},[186,8948,3654],{"class":202},[186,8950,8951],{"class":188,"line":3121},[186,8952,639],{"class":202},[186,8954,8955],{"class":188,"line":3142},[186,8956,3867],{"emptyLinePlaceholder":1551},[186,8958,8959,8961,8963],{"class":188,"line":3147},[186,8960,1626],{"class":669},[186,8962,3440],{"class":198},[186,8964,3443],{"class":202},[186,8966,8967],{"class":188,"line":3161},[186,8968,3018],{"class":202},[186,8970,8971],{"class":188,"line":3166},[186,8972,8973],{"class":192},"    \u002F\u002F 1.创建数组\n",[186,8975,8976,8978,8980,8982,8984,8986,8988,8990,8992,8994,8996,8998,9000,9002,9004,9006,9008,9010,9012,9014,9016,9018,9020,9022,9024,9026],{"class":188,"line":3195},[186,8977,3452],{"class":669},[186,8979,5428],{"class":202},[186,8981,2056],{"class":206},[186,8983,2547],{"class":202},[186,8985,529],{"class":669},[186,8987,2504],{"class":202},[186,8989,1904],{"class":206},[186,8991,1988],{"class":202},[186,8993,1691],{"class":206},[186,8995,1988],{"class":202},[186,8997,1954],{"class":206},[186,8999,1988],{"class":202},[186,9001,2030],{"class":206},[186,9003,1988],{"class":202},[186,9005,1829],{"class":206},[186,9007,1988],{"class":202},[186,9009,1697],{"class":206},[186,9011,1988],{"class":202},[186,9013,2056],{"class":206},[186,9015,1988],{"class":202},[186,9017,2005],{"class":206},[186,9019,1988],{"class":202},[186,9021,1979],{"class":206},[186,9023,1988],{"class":202},[186,9025,1930],{"class":206},[186,9027,5461],{"class":202},[186,9029,9030,9032,9034,9036,9038],{"class":188,"line":3200},[186,9031,3452],{"class":669},[186,9033,8794],{"class":202},[186,9035,529],{"class":669},[186,9037,2056],{"class":206},[186,9039,634],{"class":202},[186,9041,9042,9044,9046,9048,9050],{"class":188,"line":3217},[186,9043,3452],{"class":669},[186,9045,7981],{"class":669},[186,9047,169],{"class":202},[186,9049,529],{"class":669},[186,9051,8501],{"class":202},[186,9053,9054],{"class":188,"line":3222},[186,9055,9056],{"class":192},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[186,9058,9059,9062],{"class":188,"line":3227},[186,9060,9061],{"class":198},"    bubbleSort",[186,9063,9064],{"class":202},"(p,len);\n",[186,9066,9067],{"class":188,"line":3232},[186,9068,3867],{"emptyLinePlaceholder":1551},[186,9070,9071],{"class":188,"line":3246},[186,9072,9073],{"class":192},"    \u002F\u002F 3.打印排序后的数组\n",[186,9075,9076,9078,9080,9082,9084,9086,9088,9090,9092,9095,9097],{"class":188,"line":3251},[186,9077,4667],{"class":669},[186,9079,3126],{"class":202},[186,9081,1626],{"class":669},[186,9083,4498],{"class":202},[186,9085,529],{"class":669},[186,9087,1803],{"class":206},[186,9089,4680],{"class":202},[186,9091,520],{"class":669},[186,9093,9094],{"class":202},"len; i",[186,9096,3759],{"class":669},[186,9098,1629],{"class":202},[186,9100,9101],{"class":188,"line":4044},[186,9102,3497],{"class":202},[186,9104,9105,9107,9109,9111,9113,9116],{"class":188,"line":4058},[186,9106,4917],{"class":202},[186,9108,7882],{"class":669},[186,9110,169],{"class":202},[186,9112,2650],{"class":669},[186,9114,9115],{"class":532},"\"\"",[186,9117,634],{"class":202},[186,9119,9120,9123,9125],{"class":188,"line":4066},[186,9121,9122],{"class":202},"        p",[186,9124,3759],{"class":669},[186,9126,634],{"class":202},[186,9128,9129],{"class":188,"line":4071},[186,9130,3654],{"class":202},[186,9132,9133],{"class":188,"line":4077},[186,9134,639],{"class":202},[1524,9136,9137],{},"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":181,"searchDepth":49,"depth":49,"links":9139},[9140,9141,9142,9143,9144,9145,9146,9147],{"id":7746,"depth":49,"text":7747},{"id":7912,"depth":49,"text":7913},{"id":8068,"depth":49,"text":8069},{"id":8146,"depth":49,"text":8147},{"id":8225,"depth":49,"text":8226},{"id":8324,"depth":49,"text":8325},{"id":8563,"depth":49,"text":8564},{"id":8741,"depth":49,"text":8742},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7735,"description":7743},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9154,"title":9155,"body":9156,"description":9163,"extension":1549,"meta":12137,"navigation":1551,"path":12138,"seo":12139,"stem":12140,"__hash__":12141},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9157,"toc":12128},[9158,9161,9164,9168,9171,9174,9185,9523,9526,9530,9533,9540,9795,9799,9802,9805,9960,9964,9967,9970,10176,10180,10183,10486,10489,10497,10501,10504,10655,10657,10668,10725,10729,10734,11391,11399,11402,11496,11499,12119,12125],[10,9159,9155],{"id":9160},"_4结构体",[169,9162,9163],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9165,9167],{"id":9166},"_41结构体定义与使用","4.1结构体定义与使用",[169,9169,9170],{},"语法：struct 结构体名 {结构体成员列表}；",[169,9172,9173],{},"通过结构体创建变量的方式：",[19,9175,9176,9179,9182],{},[22,9177,9178],{},"struct 结构体名 变量名",[22,9180,9181],{},"struct 结构体名 变量名={成员1值，成员2值...}",[22,9183,9184],{},"定义结构体时顺便创建变量",[176,9186,9188],{"className":1612,"code":9187,"language":1614,"meta":181,"style":181},"#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",[183,9189,9190,9196,9206,9213,9218,9226,9230,9235,9239,9244,9249,9254,9261,9266,9273,9277,9284,9288,9292,9296,9300,9304,9308,9314,9318,9324,9332,9340,9344,9349,9354,9365,9370,9382,9393,9404,9409,9433,9438,9444,9471,9476,9482,9494,9506,9518],{"__ignoreMap":181},[186,9191,9192,9194],{"class":188,"line":189},[186,9193,3417],{"class":669},[186,9195,3420],{"class":532},[186,9197,9198,9200,9202,9204],{"class":188,"line":49},[186,9199,3425],{"class":669},[186,9201,3428],{"class":669},[186,9203,3431],{"class":198},[186,9205,634],{"class":202},[186,9207,9208,9210],{"class":188,"line":219},[186,9209,3417],{"class":669},[186,9211,9212],{"class":532},"\u003Cstring>\n",[186,9214,9215],{"class":188,"line":225},[186,9216,9217],{"class":192},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[186,9219,9220,9223],{"class":188,"line":242},[186,9221,9222],{"class":669},"struct",[186,9224,9225],{"class":198}," Student\n",[186,9227,9228],{"class":188,"line":248},[186,9229,3018],{"class":202},[186,9231,9232],{"class":188,"line":265},[186,9233,9234],{"class":192},"    \u002F\u002F成员列表\n",[186,9236,9237],{"class":188,"line":271},[186,9238,3867],{"emptyLinePlaceholder":1551},[186,9240,9241],{"class":188,"line":288},[186,9242,9243],{"class":192},"    \u002F\u002F姓名\n",[186,9245,9246],{"class":188,"line":294},[186,9247,9248],{"class":202},"    string name;\n",[186,9250,9251],{"class":188,"line":1212},[186,9252,9253],{"class":192},"    \u002F\u002F年龄\n",[186,9255,9256,9258],{"class":188,"line":1223},[186,9257,3452],{"class":669},[186,9259,9260],{"class":202}," age;\n",[186,9262,9263],{"class":188,"line":1236},[186,9264,9265],{"class":192},"    \u002F\u002F分数\n",[186,9267,9268,9270],{"class":188,"line":3096},[186,9269,3452],{"class":669},[186,9271,9272],{"class":202}," score;\n",[186,9274,9275],{"class":188,"line":3110},[186,9276,5461],{"class":202},[186,9278,9279,9281],{"class":188,"line":3115},[186,9280,9222],{"class":669},[186,9282,9283],{"class":198}," School\n",[186,9285,9286],{"class":188,"line":3121},[186,9287,3018],{"class":202},[186,9289,9290],{"class":188,"line":3142},[186,9291,9234],{"class":192},[186,9293,9294],{"class":188,"line":3147},[186,9295,3867],{"emptyLinePlaceholder":1551},[186,9297,9298],{"class":188,"line":3161},[186,9299,9243],{"class":192},[186,9301,9302],{"class":188,"line":3166},[186,9303,9248],{"class":202},[186,9305,9306],{"class":188,"line":3195},[186,9307,9253],{"class":192},[186,9309,9310,9312],{"class":188,"line":3200},[186,9311,3452],{"class":669},[186,9313,9260],{"class":202},[186,9315,9316],{"class":188,"line":3217},[186,9317,9265],{"class":192},[186,9319,9320,9322],{"class":188,"line":3222},[186,9321,3452],{"class":669},[186,9323,9272],{"class":202},[186,9325,9326,9329],{"class":188,"line":3227},[186,9327,9328],{"class":202},"} s3;",[186,9330,9331],{"class":192}," \u002F\u002F创建结构体时就创建了变量\n",[186,9333,9334,9336,9338],{"class":188,"line":3232},[186,9335,1626],{"class":669},[186,9337,3440],{"class":198},[186,9339,3443],{"class":202},[186,9341,9342],{"class":188,"line":3246},[186,9343,3018],{"class":202},[186,9345,9346],{"class":188,"line":3251},[186,9347,9348],{"class":192},"    \u002F\u002F2.通过学生类型创建具体学生\n",[186,9350,9351],{"class":188,"line":4044},[186,9352,9353],{"class":192},"    \u002F\u002F2.1 struct Student s1;\n",[186,9355,9356,9359,9362],{"class":188,"line":4058},[186,9357,9358],{"class":669},"    struct",[186,9360,9361],{"class":198}," Student",[186,9363,9364],{"class":202}," s1;\n",[186,9366,9367],{"class":188,"line":4066},[186,9368,9369],{"class":192},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[186,9371,9372,9375,9377,9380],{"class":188,"line":4071},[186,9373,9374],{"class":202},"    s1.name",[186,9376,529],{"class":669},[186,9378,9379],{"class":532},"\"张三\"",[186,9381,634],{"class":202},[186,9383,9384,9387,9389,9391],{"class":188,"line":4077},[186,9385,9386],{"class":202},"    s1.age",[186,9388,529],{"class":669},[186,9390,2260],{"class":206},[186,9392,634],{"class":202},[186,9394,9395,9398,9400,9402],{"class":188,"line":4083},[186,9396,9397],{"class":202},"    s1.score",[186,9399,529],{"class":669},[186,9401,1865],{"class":206},[186,9403,634],{"class":202},[186,9405,9406],{"class":188,"line":4088},[186,9407,9408],{"class":192},"    \u002F\u002F输出结果\n",[186,9410,9412,9414,9416,9419,9421,9424,9426,9429,9431],{"class":188,"line":9411},37,[186,9413,3023],{"class":202},[186,9415,2650],{"class":669},[186,9417,9418],{"class":202},"s1.name",[186,9420,2650],{"class":669},[186,9422,9423],{"class":202},"s1.age",[186,9425,2650],{"class":669},[186,9427,9428],{"class":202},"s1.score",[186,9430,2650],{"class":669},[186,9432,2672],{"class":202},[186,9434,9436],{"class":188,"line":9435},38,[186,9437,3867],{"emptyLinePlaceholder":1551},[186,9439,9441],{"class":188,"line":9440},39,[186,9442,9443],{"class":192},"    \u002F\u002F2.2 struct Student s2={...}\n",[186,9445,9447,9449,9451,9454,9456,9458,9461,9463,9465,9467,9469],{"class":188,"line":9446},40,[186,9448,9358],{"class":669},[186,9450,9361],{"class":198},[186,9452,9453],{"class":202}," s2",[186,9455,529],{"class":669},[186,9457,2504],{"class":202},[186,9459,9460],{"class":532},"\"王五\"",[186,9462,1988],{"class":202},[186,9464,2260],{"class":206},[186,9466,1988],{"class":202},[186,9468,1865],{"class":206},[186,9470,5461],{"class":202},[186,9472,9474],{"class":188,"line":9473},41,[186,9475,3867],{"emptyLinePlaceholder":1551},[186,9477,9479],{"class":188,"line":9478},42,[186,9480,9481],{"class":192},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[186,9483,9485,9488,9490,9492],{"class":188,"line":9484},43,[186,9486,9487],{"class":202},"    s3.name",[186,9489,529],{"class":669},[186,9491,5144],{"class":532},[186,9493,634],{"class":202},[186,9495,9497,9500,9502,9504],{"class":188,"line":9496},44,[186,9498,9499],{"class":202},"    s3.age",[186,9501,529],{"class":669},[186,9503,2260],{"class":206},[186,9505,634],{"class":202},[186,9507,9509,9512,9514,9516],{"class":188,"line":9508},45,[186,9510,9511],{"class":202},"    s3.score",[186,9513,529],{"class":669},[186,9515,801],{"class":206},[186,9517,634],{"class":202},[186,9519,9521],{"class":188,"line":9520},46,[186,9522,639],{"class":202},[169,9524,9525],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9527,9529],{"id":9528},"_42结构体数组","4.2结构体数组",[169,9531,9532],{},"将自定义的结构体放入到数组中方便维护",[169,9534,9535,9536,9539],{},"语法：struct 结构体名 数组名",[186,9537,9538],{},"元素个数","={ {}，{},...{} };",[176,9541,9543],{"className":1612,"code":9542,"language":1614,"meta":181,"style":181},"#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",[183,9544,9545,9551,9561,9567,9572,9578,9582,9586,9592,9598,9602,9606,9614,9618,9623,9638,9642,9658,9674,9678,9683,9699,9714,9729,9734,9760,9764,9787,9791],{"__ignoreMap":181},[186,9546,9547,9549],{"class":188,"line":189},[186,9548,3417],{"class":669},[186,9550,3420],{"class":532},[186,9552,9553,9555,9557,9559],{"class":188,"line":49},[186,9554,3425],{"class":669},[186,9556,3428],{"class":669},[186,9558,3431],{"class":198},[186,9560,634],{"class":202},[186,9562,9563,9565],{"class":188,"line":219},[186,9564,3417],{"class":669},[186,9566,9212],{"class":532},[186,9568,9569],{"class":188,"line":225},[186,9570,9571],{"class":192},"\u002F\u002F1.定义结构体\n",[186,9573,9574,9576],{"class":188,"line":242},[186,9575,9222],{"class":669},[186,9577,9225],{"class":198},[186,9579,9580],{"class":188,"line":248},[186,9581,3018],{"class":202},[186,9583,9584],{"class":188,"line":265},[186,9585,9248],{"class":202},[186,9587,9588,9590],{"class":188,"line":271},[186,9589,3452],{"class":669},[186,9591,9260],{"class":202},[186,9593,9594,9596],{"class":188,"line":288},[186,9595,3452],{"class":669},[186,9597,9272],{"class":202},[186,9599,9600],{"class":188,"line":294},[186,9601,3867],{"emptyLinePlaceholder":1551},[186,9603,9604],{"class":188,"line":1212},[186,9605,5461],{"class":202},[186,9607,9608,9610,9612],{"class":188,"line":1223},[186,9609,1626],{"class":669},[186,9611,3440],{"class":198},[186,9613,3443],{"class":202},[186,9615,9616],{"class":188,"line":1236},[186,9617,3018],{"class":202},[186,9619,9620],{"class":188,"line":3096},[186,9621,9622],{"class":192},"    \u002F\u002F2.创建结构体数组\n",[186,9624,9625,9627,9629,9632,9634,9636],{"class":188,"line":3110},[186,9626,9358],{"class":669},[186,9628,9361],{"class":198},[186,9630,9631],{"class":202}," stuArray[",[186,9633,1697],{"class":206},[186,9635,2547],{"class":202},[186,9637,6374],{"class":669},[186,9639,9640],{"class":188,"line":3115},[186,9641,3497],{"class":202},[186,9643,9644,9646,9648,9650,9652,9654,9656],{"class":188,"line":3121},[186,9645,6383],{"class":202},[186,9647,9379],{"class":532},[186,9649,1988],{"class":202},[186,9651,2260],{"class":206},[186,9653,1988],{"class":202},[186,9655,1922],{"class":206},[186,9657,6396],{"class":202},[186,9659,9660,9662,9664,9666,9668,9670,9672],{"class":188,"line":3142},[186,9661,6383],{"class":202},[186,9663,5144],{"class":532},[186,9665,1988],{"class":202},[186,9667,2185],{"class":206},[186,9669,1988],{"class":202},[186,9671,2185],{"class":206},[186,9673,639],{"class":202},[186,9675,9676],{"class":188,"line":3147},[186,9677,3654],{"class":202},[186,9679,9680],{"class":188,"line":3161},[186,9681,9682],{"class":192},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[186,9684,9685,9688,9690,9693,9695,9697],{"class":188,"line":3166},[186,9686,9687],{"class":202},"    stuArray[",[186,9689,1829],{"class":206},[186,9691,9692],{"class":202},"].name",[186,9694,529],{"class":669},[186,9696,5167],{"class":532},[186,9698,634],{"class":202},[186,9700,9701,9703,9705,9708,9710,9712],{"class":188,"line":3195},[186,9702,9687],{"class":202},[186,9704,1829],{"class":206},[186,9706,9707],{"class":202},"].age",[186,9709,529],{"class":669},[186,9711,1697],{"class":206},[186,9713,634],{"class":202},[186,9715,9716,9718,9720,9723,9725,9727],{"class":188,"line":3200},[186,9717,9687],{"class":202},[186,9719,1829],{"class":206},[186,9721,9722],{"class":202},"].score",[186,9724,529],{"class":669},[186,9726,1697],{"class":206},[186,9728,634],{"class":202},[186,9730,9731],{"class":188,"line":3217},[186,9732,9733],{"class":192},"    \u002F\u002F4.遍历结构体数组\n",[186,9735,9736,9738,9740,9742,9744,9746,9748,9750,9752,9754,9756,9758],{"class":188,"line":3222},[186,9737,4667],{"class":669},[186,9739,3126],{"class":202},[186,9741,1626],{"class":669},[186,9743,4498],{"class":202},[186,9745,529],{"class":669},[186,9747,1803],{"class":206},[186,9749,4505],{"class":202},[186,9751,520],{"class":669},[186,9753,1697],{"class":206},[186,9755,4505],{"class":202},[186,9757,3759],{"class":669},[186,9759,1629],{"class":202},[186,9761,9762],{"class":188,"line":3227},[186,9763,3497],{"class":202},[186,9765,9766,9768,9770,9773,9775,9778,9780,9783,9785],{"class":188,"line":3232},[186,9767,4917],{"class":202},[186,9769,2650],{"class":669},[186,9771,9772],{"class":202},"stuArray[i].name",[186,9774,2650],{"class":669},[186,9776,9777],{"class":202},"stuArray[i].age",[186,9779,2650],{"class":669},[186,9781,9782],{"class":202},"stuArray[i].score",[186,9784,2650],{"class":669},[186,9786,2672],{"class":202},[186,9788,9789],{"class":188,"line":3246},[186,9790,3654],{"class":202},[186,9792,9793],{"class":188,"line":3251},[186,9794,639],{"class":202},[14,9796,9798],{"id":9797},"_43结构体指针","4.3结构体指针",[169,9800,9801],{},"作用：通过指针访问结构体中的成员",[169,9803,9804],{},"利用操作符->可以通过结构体指针访问结构体属性",[176,9806,9808],{"className":1612,"code":9807,"language":1614,"meta":181,"style":181},"#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",[183,9809,9810,9816,9826,9832,9836,9842,9846,9850,9856,9862,9866,9874,9878,9883,9908,9913,9928,9933,9956],{"__ignoreMap":181},[186,9811,9812,9814],{"class":188,"line":189},[186,9813,3417],{"class":669},[186,9815,3420],{"class":532},[186,9817,9818,9820,9822,9824],{"class":188,"line":49},[186,9819,3425],{"class":669},[186,9821,3428],{"class":669},[186,9823,3431],{"class":198},[186,9825,634],{"class":202},[186,9827,9828,9830],{"class":188,"line":219},[186,9829,3417],{"class":669},[186,9831,9212],{"class":532},[186,9833,9834],{"class":188,"line":225},[186,9835,9571],{"class":192},[186,9837,9838,9840],{"class":188,"line":242},[186,9839,9222],{"class":669},[186,9841,9225],{"class":198},[186,9843,9844],{"class":188,"line":248},[186,9845,3018],{"class":202},[186,9847,9848],{"class":188,"line":265},[186,9849,9248],{"class":202},[186,9851,9852,9854],{"class":188,"line":271},[186,9853,3452],{"class":669},[186,9855,9260],{"class":202},[186,9857,9858,9860],{"class":188,"line":288},[186,9859,3452],{"class":669},[186,9861,9272],{"class":202},[186,9863,9864],{"class":188,"line":294},[186,9865,5461],{"class":202},[186,9867,9868,9870,9872],{"class":188,"line":1212},[186,9869,1626],{"class":669},[186,9871,3440],{"class":198},[186,9873,3443],{"class":202},[186,9875,9876],{"class":188,"line":1223},[186,9877,3018],{"class":202},[186,9879,9880],{"class":188,"line":1236},[186,9881,9882],{"class":192},"    \u002F\u002F创建学生结构体变量\n",[186,9884,9885,9887,9889,9892,9894,9896,9898,9900,9902,9904,9906],{"class":188,"line":3096},[186,9886,9358],{"class":669},[186,9888,9361],{"class":198},[186,9890,9891],{"class":202}," s",[186,9893,529],{"class":669},[186,9895,2504],{"class":202},[186,9897,9379],{"class":532},[186,9899,1988],{"class":202},[186,9901,2260],{"class":206},[186,9903,1988],{"class":202},[186,9905,3190],{"class":206},[186,9907,5461],{"class":202},[186,9909,9910],{"class":188,"line":3110},[186,9911,9912],{"class":192},"    \u002F\u002F通过指针指向结构体变量\n",[186,9914,9915,9917,9919,9921,9923,9925],{"class":188,"line":3115},[186,9916,9358],{"class":669},[186,9918,9361],{"class":198},[186,9920,7981],{"class":669},[186,9922,169],{"class":202},[186,9924,7802],{"class":669},[186,9926,9927],{"class":202},"s\n",[186,9929,9930],{"class":188,"line":3121},[186,9931,9932],{"class":192},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[186,9934,9935,9937,9939,9942,9944,9947,9949,9952,9954],{"class":188,"line":3142},[186,9936,3023],{"class":202},[186,9938,2650],{"class":669},[186,9940,9941],{"class":202},"p->name",[186,9943,2650],{"class":669},[186,9945,9946],{"class":202},"p->age",[186,9948,2650],{"class":669},[186,9950,9951],{"class":202},"p->score",[186,9953,2650],{"class":669},[186,9955,2672],{"class":202},[186,9957,9958],{"class":188,"line":3147},[186,9959,639],{"class":202},[14,9961,9963],{"id":9962},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[169,9965,9966],{},"作用：结构体中的成员可以是另一个结构体",[169,9968,9969],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[176,9971,9973],{"className":1612,"code":9972,"language":1614,"meta":181,"style":181},"#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",[183,9974,9975,9981,9991,9997,10002,10010,10014,10018,10024,10030,10034,10039,10046,10050,10057,10061,10067,10072,10076,10084,10088,10093,10098,10103,10114,10126,10137,10150,10161,10172],{"__ignoreMap":181},[186,9976,9977,9979],{"class":188,"line":189},[186,9978,3417],{"class":669},[186,9980,3420],{"class":532},[186,9982,9983,9985,9987,9989],{"class":188,"line":49},[186,9984,3425],{"class":669},[186,9986,3428],{"class":669},[186,9988,3431],{"class":198},[186,9990,634],{"class":202},[186,9992,9993,9995],{"class":188,"line":219},[186,9994,3417],{"class":669},[186,9996,9212],{"class":532},[186,9998,9999],{"class":188,"line":225},[186,10000,10001],{"class":192},"\u002F\u002F定义学生结构体\n",[186,10003,10004,10006,10008],{"class":188,"line":242},[186,10005,9222],{"class":669},[186,10007,9361],{"class":198},[186,10009,4141],{"class":202},[186,10011,10012],{"class":188,"line":248},[186,10013,3018],{"class":202},[186,10015,10016],{"class":188,"line":265},[186,10017,9248],{"class":202},[186,10019,10020,10022],{"class":188,"line":271},[186,10021,3452],{"class":669},[186,10023,9260],{"class":202},[186,10025,10026,10028],{"class":188,"line":288},[186,10027,3452],{"class":669},[186,10029,9272],{"class":202},[186,10031,10032],{"class":188,"line":294},[186,10033,639],{"class":202},[186,10035,10036],{"class":188,"line":1212},[186,10037,10038],{"class":192},"\u002F\u002F定义老师结构体\n",[186,10040,10041,10043],{"class":188,"line":1223},[186,10042,9222],{"class":669},[186,10044,10045],{"class":198}," Teacher\n",[186,10047,10048],{"class":188,"line":1236},[186,10049,3018],{"class":202},[186,10051,10052,10054],{"class":188,"line":3096},[186,10053,3452],{"class":669},[186,10055,10056],{"class":202}," id;\n",[186,10058,10059],{"class":188,"line":3110},[186,10060,9248],{"class":202},[186,10062,10063,10065],{"class":188,"line":3115},[186,10064,3452],{"class":669},[186,10066,9260],{"class":202},[186,10068,10069],{"class":188,"line":3121},[186,10070,10071],{"class":202},"    Student stu;\n",[186,10073,10074],{"class":188,"line":3142},[186,10075,639],{"class":202},[186,10077,10078,10080,10082],{"class":188,"line":3147},[186,10079,1626],{"class":669},[186,10081,3440],{"class":198},[186,10083,7441],{"class":202},[186,10085,10086],{"class":188,"line":3161},[186,10087,3018],{"class":202},[186,10089,10090],{"class":188,"line":3166},[186,10091,10092],{"class":192},"    \u002F\u002F结构体嵌套结构体\n",[186,10094,10095],{"class":188,"line":3195},[186,10096,10097],{"class":192},"    \u002F\u002F创建老师\n",[186,10099,10100],{"class":188,"line":3200},[186,10101,10102],{"class":202},"    Teacher t;\n",[186,10104,10105,10108,10110,10112],{"class":188,"line":3217},[186,10106,10107],{"class":202},"    t.id",[186,10109,529],{"class":669},[186,10111,1922],{"class":206},[186,10113,634],{"class":202},[186,10115,10116,10119,10121,10124],{"class":188,"line":3222},[186,10117,10118],{"class":202},"    t.name",[186,10120,529],{"class":669},[186,10122,10123],{"class":532},"\"老王\"",[186,10125,634],{"class":202},[186,10127,10128,10131,10133,10135],{"class":188,"line":3227},[186,10129,10130],{"class":202},"    t.age",[186,10132,529],{"class":669},[186,10134,2260],{"class":206},[186,10136,634],{"class":202},[186,10138,10139,10142,10144,10147],{"class":188,"line":3232},[186,10140,10141],{"class":202},"    t.stu.name",[186,10143,529],{"class":669},[186,10145,10146],{"class":532},"\"小王\"",[186,10148,10149],{"class":202},"；\n",[186,10151,10152,10155,10157,10159],{"class":188,"line":3246},[186,10153,10154],{"class":202},"    t.stu.age",[186,10156,529],{"class":669},[186,10158,801],{"class":206},[186,10160,634],{"class":202},[186,10162,10163,10166,10168,10170],{"class":188,"line":3251},[186,10164,10165],{"class":202},"    t.stu.score",[186,10167,529],{"class":669},[186,10169,1954],{"class":206},[186,10171,634],{"class":202},[186,10173,10174],{"class":188,"line":4044},[186,10175,639],{"class":202},[14,10177,10179],{"id":10178},"_45结构体做函数参数","4.5结构体做函数参数",[169,10181,10182],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[176,10184,10186],{"className":1612,"code":10185,"language":1614,"meta":181,"style":181},"#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",[183,10187,10188,10194,10204,10210,10216,10220,10224,10230,10236,10240,10245,10250,10267,10271,10304,10308,10313,10332,10336,10367,10371,10379,10383,10392,10404,10416,10428,10441,10449,10462,10474,10482],{"__ignoreMap":181},[186,10189,10190,10192],{"class":188,"line":189},[186,10191,3417],{"class":669},[186,10193,3420],{"class":532},[186,10195,10196,10198,10200,10202],{"class":188,"line":49},[186,10197,3425],{"class":669},[186,10199,3428],{"class":669},[186,10201,3431],{"class":198},[186,10203,634],{"class":202},[186,10205,10206,10208],{"class":188,"line":219},[186,10207,3417],{"class":669},[186,10209,9212],{"class":532},[186,10211,10212,10214],{"class":188,"line":225},[186,10213,9222],{"class":669},[186,10215,9225],{"class":198},[186,10217,10218],{"class":188,"line":242},[186,10219,3018],{"class":202},[186,10221,10222],{"class":188,"line":248},[186,10223,9248],{"class":202},[186,10225,10226,10228],{"class":188,"line":265},[186,10227,3452],{"class":669},[186,10229,9260],{"class":202},[186,10231,10232,10234],{"class":188,"line":271},[186,10233,3452],{"class":669},[186,10235,9272],{"class":202},[186,10237,10238],{"class":188,"line":288},[186,10239,5461],{"class":202},[186,10241,10242],{"class":188,"line":294},[186,10243,10244],{"class":192},"\u002F\u002F打印学生信息的函数\n",[186,10246,10247],{"class":188,"line":1212},[186,10248,10249],{"class":192},"\u002F\u002F值传递\n",[186,10251,10252,10254,10257,10259,10261,10263,10265],{"class":188,"line":1223},[186,10253,6827],{"class":669},[186,10255,10256],{"class":198}," printStudent1",[186,10258,832],{"class":202},[186,10260,9222],{"class":669},[186,10262,9361],{"class":198},[186,10264,9891],{"class":835},[186,10266,1629],{"class":202},[186,10268,10269],{"class":188,"line":1236},[186,10270,3018],{"class":202},[186,10272,10273,10275,10277,10280,10282,10285,10287,10290,10292,10294,10296,10299,10301],{"class":188,"line":3096},[186,10274,7992],{"class":202},[186,10276,2650],{"class":669},[186,10278,10279],{"class":202}," s.name ",[186,10281,2650],{"class":669},[186,10283,10284],{"class":532}," \" \"",[186,10286,2917],{"class":669},[186,10288,10289],{"class":202}," s.age ",[186,10291,2650],{"class":669},[186,10293,10284],{"class":532},[186,10295,2917],{"class":669},[186,10297,10298],{"class":202}," s.score ",[186,10300,2650],{"class":669},[186,10302,10303],{"class":202}," endl;\n",[186,10305,10306],{"class":188,"line":3110},[186,10307,639],{"class":202},[186,10309,10310],{"class":188,"line":3115},[186,10311,10312],{"class":192},"\u002F\u002F地址传递\n",[186,10314,10315,10317,10320,10322,10324,10326,10328,10330],{"class":188,"line":3121},[186,10316,6827],{"class":669},[186,10318,10319],{"class":198}," printStudent2",[186,10321,832],{"class":202},[186,10323,9222],{"class":669},[186,10325,9361],{"class":198},[186,10327,7981],{"class":669},[186,10329,2304],{"class":835},[186,10331,1629],{"class":202},[186,10333,10334],{"class":188,"line":3142},[186,10335,3018],{"class":202},[186,10337,10338,10340,10342,10345,10347,10349,10351,10354,10356,10358,10360,10363,10365],{"class":188,"line":3147},[186,10339,7992],{"class":202},[186,10341,2650],{"class":669},[186,10343,10344],{"class":202}," s->name ",[186,10346,2650],{"class":669},[186,10348,10284],{"class":532},[186,10350,2917],{"class":669},[186,10352,10353],{"class":202}," s->age ",[186,10355,2650],{"class":669},[186,10357,10284],{"class":532},[186,10359,2917],{"class":669},[186,10361,10362],{"class":202}," s->score ",[186,10364,2650],{"class":669},[186,10366,10303],{"class":202},[186,10368,10369],{"class":188,"line":3161},[186,10370,639],{"class":202},[186,10372,10373,10375,10377],{"class":188,"line":3166},[186,10374,1626],{"class":669},[186,10376,3440],{"class":198},[186,10378,3443],{"class":202},[186,10380,10381],{"class":188,"line":3195},[186,10382,3018],{"class":202},[186,10384,10385,10387,10389],{"class":188,"line":3200},[186,10386,9358],{"class":669},[186,10388,9361],{"class":198},[186,10390,10391],{"class":202}," s;\n",[186,10393,10394,10397,10399,10402],{"class":188,"line":3217},[186,10395,10396],{"class":202},"    s.name ",[186,10398,529],{"class":669},[186,10400,10401],{"class":532}," \"张三\"",[186,10403,634],{"class":202},[186,10405,10406,10409,10411,10414],{"class":188,"line":3222},[186,10407,10408],{"class":202},"    s.age ",[186,10410,529],{"class":669},[186,10412,10413],{"class":206}," 20",[186,10415,634],{"class":202},[186,10417,10418,10421,10423,10426],{"class":188,"line":3227},[186,10419,10420],{"class":202},"    s.score ",[186,10422,529],{"class":669},[186,10424,10425],{"class":206}," 85",[186,10427,634],{"class":202},[186,10429,10430,10432,10434,10437,10439],{"class":188,"line":3232},[186,10431,3023],{"class":202},[186,10433,2650],{"class":669},[186,10435,10436],{"class":532},"\"值传递:\"",[186,10438,2650],{"class":669},[186,10440,2672],{"class":202},[186,10442,10443,10446],{"class":188,"line":3246},[186,10444,10445],{"class":198},"    printStudent1",[186,10447,10448],{"class":202},"(s);\n",[186,10450,10451,10453,10455,10458,10460],{"class":188,"line":3251},[186,10452,3023],{"class":202},[186,10454,2650],{"class":669},[186,10456,10457],{"class":532},"\"地址传递:\"",[186,10459,2650],{"class":669},[186,10461,2672],{"class":202},[186,10463,10464,10467,10469,10471],{"class":188,"line":4044},[186,10465,10466],{"class":198},"    printStudent2",[186,10468,832],{"class":202},[186,10470,1963],{"class":669},[186,10472,10473],{"class":202},"s); \n",[186,10475,10476,10478,10480],{"class":188,"line":4058},[186,10477,5556],{"class":669},[186,10479,5559],{"class":206},[186,10481,634],{"class":202},[186,10483,10484],{"class":188,"line":4066},[186,10485,639],{"class":202},[169,10487,10488],{},"注意：",[19,10490,10491,10494],{},[22,10492,10493],{},"1.先定义结构体，不要在函数中写结构体的定义",[22,10495,10496],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10498,10500],{"id":10499},"_46结构体中const使用场景","4.6结构体中const使用场景",[169,10502,10503],{},"用const防止误操作",[176,10505,10507],{"className":1612,"code":10506,"language":1614,"meta":181,"style":181},"#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",[183,10508,10509,10515,10525,10531,10536,10540,10544,10550,10556,10560,10576,10580,10603,10607,10615,10619,10640,10647,10651],{"__ignoreMap":181},[186,10510,10511,10513],{"class":188,"line":189},[186,10512,3417],{"class":669},[186,10514,3420],{"class":532},[186,10516,10517,10519,10521,10523],{"class":188,"line":49},[186,10518,3425],{"class":669},[186,10520,3428],{"class":669},[186,10522,3431],{"class":198},[186,10524,634],{"class":202},[186,10526,10527,10529],{"class":188,"line":219},[186,10528,3417],{"class":669},[186,10530,9212],{"class":532},[186,10532,10533],{"class":188,"line":225},[186,10534,10535],{"class":202},"sctuct Student\n",[186,10537,10538],{"class":188,"line":242},[186,10539,3018],{"class":202},[186,10541,10542],{"class":188,"line":248},[186,10543,9248],{"class":202},[186,10545,10546,10548],{"class":188,"line":265},[186,10547,3452],{"class":669},[186,10549,9260],{"class":202},[186,10551,10552,10554],{"class":188,"line":271},[186,10553,3452],{"class":669},[186,10555,9272],{"class":202},[186,10557,10558],{"class":188,"line":288},[186,10559,5461],{"class":202},[186,10561,10562,10564,10567,10569,10572,10574],{"class":188,"line":294},[186,10563,6827],{"class":669},[186,10565,10566],{"class":198}," printStudents",[186,10568,832],{"class":202},[186,10570,10571],{"class":198},"student",[186,10573,9891],{"class":835},[186,10575,1629],{"class":202},[186,10577,10578],{"class":188,"line":1212},[186,10579,3018],{"class":202},[186,10581,10582,10584,10586,10589,10591,10594,10596,10599,10601],{"class":188,"line":1223},[186,10583,3023],{"class":202},[186,10585,2650],{"class":669},[186,10587,10588],{"class":202},"s.name",[186,10590,2650],{"class":669},[186,10592,10593],{"class":202},"s.age",[186,10595,2650],{"class":669},[186,10597,10598],{"class":202},"s.score",[186,10600,2650],{"class":669},[186,10602,2672],{"class":202},[186,10604,10605],{"class":188,"line":1236},[186,10606,639],{"class":202},[186,10608,10609,10611,10613],{"class":188,"line":3096},[186,10610,1626],{"class":669},[186,10612,3440],{"class":198},[186,10614,7441],{"class":202},[186,10616,10617],{"class":188,"line":3110},[186,10618,3018],{"class":202},[186,10620,10621,10624,10626,10628,10630,10632,10634,10636,10638],{"class":188,"line":3115},[186,10622,10623],{"class":202},"    Student s",[186,10625,529],{"class":669},[186,10627,2504],{"class":202},[186,10629,9379],{"class":532},[186,10631,1988],{"class":202},[186,10633,2260],{"class":206},[186,10635,1988],{"class":202},[186,10637,2260],{"class":206},[186,10639,5461],{"class":202},[186,10641,10642,10645],{"class":188,"line":3121},[186,10643,10644],{"class":198},"    printStudent",[186,10646,10448],{"class":202},[186,10648,10649],{"class":188,"line":3142},[186,10650,3867],{"emptyLinePlaceholder":1551},[186,10652,10653],{"class":188,"line":3147},[186,10654,639],{"class":202},[169,10656,10488],{},[19,10658,10659,10662,10665],{},[22,10660,10661],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[22,10663,10664],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[22,10666,10667],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[176,10669,10671],{"className":1612,"code":10670,"language":1614,"meta":181,"style":181},"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",[183,10672,10673,10692,10696,10701,10721],{"__ignoreMap":181},[186,10674,10675,10677,10679,10681,10683,10686,10688,10690],{"class":188,"line":189},[186,10676,6827],{"class":669},[186,10678,10566],{"class":198},[186,10680,832],{"class":202},[186,10682,8255],{"class":669},[186,10684,10685],{"class":198}," student",[186,10687,7981],{"class":669},[186,10689,2304],{"class":835},[186,10691,1629],{"class":202},[186,10693,10694],{"class":188,"line":49},[186,10695,3018],{"class":202},[186,10697,10698],{"class":188,"line":219},[186,10699,10700],{"class":192},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[186,10702,10703,10705,10707,10709,10711,10713,10715,10717,10719],{"class":188,"line":225},[186,10704,3023],{"class":202},[186,10706,2650],{"class":669},[186,10708,10588],{"class":202},[186,10710,2650],{"class":669},[186,10712,10593],{"class":202},[186,10714,2650],{"class":669},[186,10716,10598],{"class":202},[186,10718,2650],{"class":669},[186,10720,2672],{"class":202},[186,10722,10723],{"class":188,"line":242},[186,10724,639],{"class":202},[14,10726,10728],{"id":10727},"_47案例","4.7案例",[34,10730,10731],{},[22,10732,10733],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[176,10735,10737],{"className":1612,"code":10736,"language":1614,"meta":181,"style":181},"#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",[183,10738,10739,10745,10755,10761,10768,10772,10778,10782,10787,10793,10799,10803,10807,10813,10817,10822,10827,10840,10844,10849,10875,10879,10891,10918,10922,10934,10944,10948,10953,10982,10986,10998,11007,11034,11045,11055,11059,11063,11067,11072,11096,11100,11124,11128,11147,11173,11177,11202,11225,11249,11254,11259,11264,11273,11278,11284,11305,11311,11325,11331,11358,11367,11373,11381,11386],{"__ignoreMap":181},[186,10740,10741,10743],{"class":188,"line":189},[186,10742,3417],{"class":669},[186,10744,3420],{"class":532},[186,10746,10747,10749,10751,10753],{"class":188,"line":49},[186,10748,3425],{"class":669},[186,10750,3428],{"class":669},[186,10752,3431],{"class":198},[186,10754,634],{"class":202},[186,10756,10757,10759],{"class":188,"line":219},[186,10758,3417],{"class":669},[186,10760,9212],{"class":532},[186,10762,10763,10765],{"class":188,"line":225},[186,10764,3417],{"class":669},[186,10766,10767],{"class":532},"\u003Cctime>\n",[186,10769,10770],{"class":188,"line":242},[186,10771,10001],{"class":192},[186,10773,10774,10776],{"class":188,"line":248},[186,10775,9222],{"class":669},[186,10777,9225],{"class":198},[186,10779,10780],{"class":188,"line":265},[186,10781,3018],{"class":202},[186,10783,10784],{"class":188,"line":271},[186,10785,10786],{"class":202},"    string sName;\n",[186,10788,10789,10791],{"class":188,"line":288},[186,10790,3452],{"class":669},[186,10792,9260],{"class":202},[186,10794,10795,10797],{"class":188,"line":294},[186,10796,3452],{"class":669},[186,10798,9272],{"class":202},[186,10800,10801],{"class":188,"line":1212},[186,10802,5461],{"class":202},[186,10804,10805],{"class":188,"line":1223},[186,10806,10038],{"class":192},[186,10808,10809,10811],{"class":188,"line":1236},[186,10810,9222],{"class":669},[186,10812,10045],{"class":198},[186,10814,10815],{"class":188,"line":3096},[186,10816,3018],{"class":202},[186,10818,10819],{"class":188,"line":3110},[186,10820,10821],{"class":202},"    string tName;\n",[186,10823,10824],{"class":188,"line":3115},[186,10825,10826],{"class":192},"    \u002F\u002F学生数组\n",[186,10828,10829,10831,10833,10836,10838],{"class":188,"line":3121},[186,10830,9358],{"class":669},[186,10832,9361],{"class":198},[186,10834,10835],{"class":202}," sArray[",[186,10837,1930],{"class":206},[186,10839,6156],{"class":202},[186,10841,10842],{"class":188,"line":3142},[186,10843,5461],{"class":202},[186,10845,10846],{"class":188,"line":3147},[186,10847,10848],{"class":192},"\u002F\u002F给老师和学生赋值的函数\n",[186,10850,10851,10853,10856,10858,10860,10863,10866,10869,10871,10873],{"class":188,"line":3161},[186,10852,6827],{"class":669},[186,10854,10855],{"class":198}," allocateSpace",[186,10857,832],{"class":202},[186,10859,9222],{"class":669},[186,10861,10862],{"class":198}," Teacher",[186,10864,10865],{"class":835}," tArray",[186,10867,10868],{"class":202},"[],",[186,10870,1626],{"class":669},[186,10872,8794],{"class":835},[186,10874,1629],{"class":202},[186,10876,10877],{"class":188,"line":3166},[186,10878,3018],{"class":202},[186,10880,10881,10884,10886,10889],{"class":188,"line":3195},[186,10882,10883],{"class":202},"    string nameSeed",[186,10885,529],{"class":669},[186,10887,10888],{"class":532},"\"ABCDE\"",[186,10890,634],{"class":202},[186,10892,10893,10895,10897,10899,10902,10904,10906,10909,10911,10914,10916],{"class":188,"line":3200},[186,10894,4667],{"class":669},[186,10896,3126],{"class":202},[186,10898,1626],{"class":669},[186,10900,10901],{"class":202}," i ",[186,10903,529],{"class":669},[186,10905,5559],{"class":206},[186,10907,10908],{"class":202},"; i ",[186,10910,520],{"class":669},[186,10912,10913],{"class":202}," len; i",[186,10915,3759],{"class":669},[186,10917,1629],{"class":202},[186,10919,10920],{"class":188,"line":3217},[186,10921,3497],{"class":202},[186,10923,10924,10927,10929,10932],{"class":188,"line":3222},[186,10925,10926],{"class":202},"        tArray[i].tName ",[186,10928,529],{"class":669},[186,10930,10931],{"class":532}," \"Teacher_\"",[186,10933,634],{"class":202},[186,10935,10936,10938,10941],{"class":188,"line":3227},[186,10937,10926],{"class":202},[186,10939,10940],{"class":669},"+=",[186,10942,10943],{"class":202},"nameSeed[i];\n",[186,10945,10946],{"class":188,"line":3232},[186,10947,3867],{"emptyLinePlaceholder":1551},[186,10949,10950],{"class":188,"line":3246},[186,10951,10952],{"class":192},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[186,10954,10955,10957,10959,10961,10964,10966,10968,10971,10973,10975,10978,10980],{"class":188,"line":3251},[186,10956,4869],{"class":669},[186,10958,3126],{"class":202},[186,10960,1626],{"class":669},[186,10962,10963],{"class":202}," j ",[186,10965,529],{"class":669},[186,10967,5559],{"class":206},[186,10969,10970],{"class":202},"; j ",[186,10972,520],{"class":669},[186,10974,3615],{"class":206},[186,10976,10977],{"class":202},"; j",[186,10979,3759],{"class":669},[186,10981,1629],{"class":202},[186,10983,10984],{"class":188,"line":4044},[186,10985,3977],{"class":202},[186,10987,10988,10991,10993,10996],{"class":188,"line":4058},[186,10989,10990],{"class":202},"            tArray[i].sArray[j].sName ",[186,10992,529],{"class":669},[186,10994,10995],{"class":532}," \"Student_\"",[186,10997,634],{"class":202},[186,10999,11000,11002,11004],{"class":188,"line":4066},[186,11001,10990],{"class":202},[186,11003,10940],{"class":669},[186,11005,11006],{"class":202}," nameSeed[j];\n",[186,11008,11009,11012,11015,11017,11019,11021,11023,11025,11027,11029,11031],{"class":188,"line":4071},[186,11010,11011],{"class":669},"            int",[186,11013,11014],{"class":202}," random",[186,11016,529],{"class":669},[186,11018,3891],{"class":198},[186,11020,3894],{"class":202},[186,11022,670],{"class":669},[186,11024,2515],{"class":206},[186,11026,2091],{"class":669},[186,11028,2011],{"class":206},[186,11030,1676],{"class":202},[186,11032,11033],{"class":192},"\u002F\u002F40~99\n",[186,11035,11036,11039,11041,11043],{"class":188,"line":4077},[186,11037,11038],{"class":202},"            tArray[i].sArray[j].age ",[186,11040,529],{"class":669},[186,11042,10413],{"class":206},[186,11044,634],{"class":202},[186,11046,11047,11050,11052],{"class":188,"line":4083},[186,11048,11049],{"class":202},"            tArray[i].sArray[j].score ",[186,11051,529],{"class":669},[186,11053,11054],{"class":202}," random;\n",[186,11056,11057],{"class":188,"line":4088},[186,11058,3996],{"class":202},[186,11060,11061],{"class":188,"line":9411},[186,11062,3654],{"class":202},[186,11064,11065],{"class":188,"line":9435},[186,11066,639],{"class":202},[186,11068,11069],{"class":188,"line":9440},[186,11070,11071],{"class":192},"\u002F\u002F打印所有信息的函数\n",[186,11073,11074,11076,11079,11081,11083,11085,11087,11090,11092,11094],{"class":188,"line":9446},[186,11075,6827],{"class":669},[186,11077,11078],{"class":198}," printInfo",[186,11080,832],{"class":202},[186,11082,9222],{"class":669},[186,11084,10862],{"class":198},[186,11086,10865],{"class":835},[186,11088,11089],{"class":202},"[], ",[186,11091,1626],{"class":669},[186,11093,8794],{"class":835},[186,11095,1629],{"class":202},[186,11097,11098],{"class":188,"line":9473},[186,11099,3018],{"class":202},[186,11101,11102,11104,11106,11108,11110,11112,11114,11116,11118,11120,11122],{"class":188,"line":9478},[186,11103,4667],{"class":669},[186,11105,3126],{"class":202},[186,11107,1626],{"class":669},[186,11109,10901],{"class":202},[186,11111,529],{"class":669},[186,11113,5559],{"class":206},[186,11115,10908],{"class":202},[186,11117,520],{"class":669},[186,11119,10913],{"class":202},[186,11121,3759],{"class":669},[186,11123,1629],{"class":202},[186,11125,11126],{"class":188,"line":9484},[186,11127,3497],{"class":202},[186,11129,11130,11133,11135,11138,11140,11143,11145],{"class":188,"line":9496},[186,11131,11132],{"class":202},"        cout ",[186,11134,2650],{"class":669},[186,11136,11137],{"class":532}," \"Teacher: \"",[186,11139,2917],{"class":669},[186,11141,11142],{"class":202}," tArray[i].tName ",[186,11144,2650],{"class":669},[186,11146,10303],{"class":202},[186,11148,11149,11151,11153,11155,11157,11159,11161,11163,11165,11167,11169,11171],{"class":188,"line":9508},[186,11150,4869],{"class":669},[186,11152,3126],{"class":202},[186,11154,1626],{"class":669},[186,11156,10963],{"class":202},[186,11158,529],{"class":669},[186,11160,5559],{"class":206},[186,11162,10970],{"class":202},[186,11164,520],{"class":669},[186,11166,3615],{"class":206},[186,11168,10977],{"class":202},[186,11170,3759],{"class":669},[186,11172,1629],{"class":202},[186,11174,11175],{"class":188,"line":9520},[186,11176,3977],{"class":202},[186,11178,11180,11183,11185,11188,11190,11193,11195,11198,11200],{"class":188,"line":11179},47,[186,11181,11182],{"class":202},"            cout ",[186,11184,2650],{"class":669},[186,11186,11187],{"class":532}," \"",[186,11189,2707],{"class":206},[186,11191,11192],{"class":532},"Student: \"",[186,11194,2917],{"class":669},[186,11196,11197],{"class":202}," tArray[i].sArray[j].sName",[186,11199,2650],{"class":669},[186,11201,2672],{"class":202},[186,11203,11205,11207,11209,11211,11213,11216,11218,11221,11223],{"class":188,"line":11204},48,[186,11206,11182],{"class":202},[186,11208,2650],{"class":669},[186,11210,11187],{"class":532},[186,11212,2707],{"class":206},[186,11214,11215],{"class":532},"Age: \"",[186,11217,2917],{"class":669},[186,11219,11220],{"class":202}," tArray[i].sArray[j].age ",[186,11222,2650],{"class":669},[186,11224,10303],{"class":202},[186,11226,11228,11230,11232,11234,11236,11239,11241,11244,11246],{"class":188,"line":11227},49,[186,11229,11182],{"class":202},[186,11231,2650],{"class":669},[186,11233,11187],{"class":532},[186,11235,2707],{"class":206},[186,11237,11238],{"class":532},"Score: \"",[186,11240,2917],{"class":669},[186,11242,11243],{"class":202}," tArray[i].sArray[j].score ",[186,11245,2650],{"class":669},[186,11247,11248],{"class":202}," endl;   \n",[186,11250,11252],{"class":188,"line":11251},50,[186,11253,3996],{"class":202},[186,11255,11257],{"class":188,"line":11256},51,[186,11258,3654],{"class":202},[186,11260,11262],{"class":188,"line":11261},52,[186,11263,639],{"class":202},[186,11265,11267,11269,11271],{"class":188,"line":11266},53,[186,11268,1626],{"class":669},[186,11270,3440],{"class":198},[186,11272,3443],{"class":202},[186,11274,11276],{"class":188,"line":11275},54,[186,11277,3018],{"class":202},[186,11279,11281],{"class":188,"line":11280},55,[186,11282,11283],{"class":192},"    \u002F\u002F随机数种子\n",[186,11285,11287,11289,11291,11293,11295,11297,11299,11301,11303],{"class":188,"line":11286},56,[186,11288,3840],{"class":198},[186,11290,3843],{"class":202},[186,11292,3846],{"class":669},[186,11294,3849],{"class":669},[186,11296,2039],{"class":202},[186,11298,3854],{"class":198},[186,11300,832],{"class":202},[186,11302,3859],{"class":206},[186,11304,3862],{"class":202},[186,11306,11308],{"class":188,"line":11307},57,[186,11309,11310],{"class":192},"    \u002F\u002F1.创建3名老师的数组\n",[186,11312,11314,11316,11318,11321,11323],{"class":188,"line":11313},58,[186,11315,9358],{"class":669},[186,11317,10862],{"class":198},[186,11319,11320],{"class":202}," tArray[",[186,11322,1691],{"class":206},[186,11324,6156],{"class":202},[186,11326,11328],{"class":188,"line":11327},59,[186,11329,11330],{"class":192},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[186,11332,11334,11336,11339,11341,11344,11347,11349,11351,11354,11356],{"class":188,"line":11333},60,[186,11335,3452],{"class":669},[186,11337,11338],{"class":202}," len ",[186,11340,529],{"class":669},[186,11342,11343],{"class":669}," sizeof",[186,11345,11346],{"class":202},"(tArray) ",[186,11348,2194],{"class":669},[186,11350,11343],{"class":669},[186,11352,11353],{"class":202},"(tArray[",[186,11355,1803],{"class":206},[186,11357,5322],{"class":202},[186,11359,11361,11364],{"class":188,"line":11360},61,[186,11362,11363],{"class":198},"    allocateSpace",[186,11365,11366],{"class":202},"(tArray, len);\n",[186,11368,11370],{"class":188,"line":11369},62,[186,11371,11372],{"class":192},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[186,11374,11376,11379],{"class":188,"line":11375},63,[186,11377,11378],{"class":198},"    printInfo",[186,11380,11366],{"class":202},[186,11382,11384],{"class":188,"line":11383},64,[186,11385,3867],{"emptyLinePlaceholder":1551},[186,11387,11389],{"class":188,"line":11388},65,[186,11390,639],{"class":202},[34,11392,11393],{"start":49},[22,11394,11395,11398],{},[54,11396,11397],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[169,11400,11401],{},"五名英雄信息如下：",[176,11403,11407],{"className":11404,"code":11405,"language":11406,"meta":181,"style":181},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[183,11408,11409,11427,11444,11461,11478],{"__ignoreMap":181},[186,11410,11411,11413,11416,11418,11420,11422,11425],{"class":188,"line":189},[186,11412,6383],{"class":202},[186,11414,11415],{"class":532},"\"刘备\"",[186,11417,1988],{"class":202},[186,11419,2383],{"class":206},[186,11421,1988],{"class":202},[186,11423,11424],{"class":532},"\"男\"",[186,11426,6396],{"class":202},[186,11428,11429,11431,11434,11436,11438,11440,11442],{"class":188,"line":49},[186,11430,6383],{"class":202},[186,11432,11433],{"class":532},"\"关羽\"",[186,11435,1988],{"class":202},[186,11437,2358],{"class":206},[186,11439,1988],{"class":202},[186,11441,11424],{"class":532},[186,11443,6396],{"class":202},[186,11445,11446,11448,11451,11453,11455,11457,11459],{"class":188,"line":219},[186,11447,6383],{"class":202},[186,11449,11450],{"class":532},"\"张飞\"",[186,11452,1988],{"class":202},[186,11454,801],{"class":206},[186,11456,1988],{"class":202},[186,11458,11424],{"class":532},[186,11460,6396],{"class":202},[186,11462,11463,11465,11468,11470,11472,11474,11476],{"class":188,"line":225},[186,11464,6383],{"class":202},[186,11466,11467],{"class":532},"\"赵云\"",[186,11469,1988],{"class":202},[186,11471,2333],{"class":206},[186,11473,1988],{"class":202},[186,11475,11424],{"class":532},[186,11477,6396],{"class":202},[186,11479,11480,11482,11485,11487,11489,11491,11494],{"class":188,"line":242},[186,11481,6383],{"class":202},[186,11483,11484],{"class":532},"\"貂蝉\"",[186,11486,1988],{"class":202},[186,11488,2284],{"class":206},[186,11490,1988],{"class":202},[186,11492,11493],{"class":532},"\"女\"",[186,11495,6396],{"class":202},[169,11497,11498],{},"代码：",[176,11500,11502],{"className":1612,"code":11501,"language":1614,"meta":181,"style":181},"#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",[183,11503,11504,11510,11520,11526,11533,11537,11541,11547,11552,11556,11561,11584,11588,11613,11617,11650,11655,11684,11689,11704,11730,11750,11755,11760,11764,11768,11773,11795,11799,11823,11827,11889,11893,11897,11905,11909,11914,11925,11929,11945,11961,11977,11993,12009,12013,12033,12055,12060,12073,12080,12085,12091,12096,12109,12115],{"__ignoreMap":181},[186,11505,11506,11508],{"class":188,"line":189},[186,11507,3417],{"class":669},[186,11509,3420],{"class":532},[186,11511,11512,11514,11516,11518],{"class":188,"line":49},[186,11513,3425],{"class":669},[186,11515,3428],{"class":669},[186,11517,3431],{"class":198},[186,11519,634],{"class":202},[186,11521,11522,11524],{"class":188,"line":219},[186,11523,3417],{"class":669},[186,11525,9212],{"class":532},[186,11527,11528,11530],{"class":188,"line":225},[186,11529,9222],{"class":669},[186,11531,11532],{"class":198}," Sanguo\n",[186,11534,11535],{"class":188,"line":242},[186,11536,3018],{"class":202},[186,11538,11539],{"class":188,"line":248},[186,11540,9248],{"class":202},[186,11542,11543,11545],{"class":188,"line":265},[186,11544,3452],{"class":669},[186,11546,9260],{"class":202},[186,11548,11549],{"class":188,"line":271},[186,11550,11551],{"class":202},"    string gender;\n",[186,11553,11554],{"class":188,"line":288},[186,11555,5461],{"class":202},[186,11557,11558],{"class":188,"line":294},[186,11559,11560],{"class":192},"\u002F\u002F定义排序函数\n",[186,11562,11563,11565,11567,11569,11572,11574,11576,11578,11580,11582],{"class":188,"line":1212},[186,11564,6827],{"class":669},[186,11566,8779],{"class":198},[186,11568,832],{"class":202},[186,11570,11571],{"class":198},"Sanguo",[186,11573,7981],{"class":669},[186,11575,2304],{"class":835},[186,11577,1988],{"class":202},[186,11579,1626],{"class":669},[186,11581,8794],{"class":835},[186,11583,1629],{"class":202},[186,11585,11586],{"class":188,"line":1223},[186,11587,3018],{"class":202},[186,11589,11590,11592,11594,11596,11598,11600,11602,11604,11606,11609,11611],{"class":188,"line":1236},[186,11591,4667],{"class":669},[186,11593,832],{"class":202},[186,11595,1626],{"class":669},[186,11597,4498],{"class":202},[186,11599,529],{"class":669},[186,11601,1803],{"class":206},[186,11603,4505],{"class":202},[186,11605,520],{"class":669},[186,11607,11608],{"class":202},"len;i",[186,11610,3759],{"class":669},[186,11612,1629],{"class":202},[186,11614,11615],{"class":188,"line":3096},[186,11616,3497],{"class":202},[186,11618,11619,11622,11624,11626,11628,11630,11632,11634,11636,11638,11640,11642,11644,11646,11648],{"class":188,"line":3110},[186,11620,11621],{"class":669},"     for",[186,11623,3126],{"class":202},[186,11625,1626],{"class":669},[186,11627,4876],{"class":202},[186,11629,529],{"class":669},[186,11631,1803],{"class":206},[186,11633,4883],{"class":202},[186,11635,520],{"class":669},[186,11637,8821],{"class":202},[186,11639,2142],{"class":669},[186,11641,1829],{"class":206},[186,11643,2142],{"class":669},[186,11645,5016],{"class":202},[186,11647,3759],{"class":669},[186,11649,1629],{"class":202},[186,11651,11652],{"class":188,"line":3115},[186,11653,11654],{"class":202},"     {\n",[186,11656,11657,11660,11663,11665,11668,11670,11673,11675,11677,11679,11681],{"class":188,"line":3121},[186,11658,11659],{"class":669},"         if",[186,11661,11662],{"class":202}," ((s",[186,11664,2091],{"class":669},[186,11666,11667],{"class":202},"j)->age ",[186,11669,2567],{"class":669},[186,11671,11672],{"class":202}," (s",[186,11674,2091],{"class":669},[186,11676,2077],{"class":202},[186,11678,2091],{"class":669},[186,11680,1829],{"class":206},[186,11682,11683],{"class":202},")->age)\n",[186,11685,11686],{"class":188,"line":3142},[186,11687,11688],{"class":202},"         {\n",[186,11690,11691,11694,11696,11699,11701],{"class":188,"line":3147},[186,11692,11693],{"class":202},"             Sanguo temp",[186,11695,8616],{"class":669},[186,11697,11698],{"class":202},"(s",[186,11700,2091],{"class":669},[186,11702,11703],{"class":202},"j);\n",[186,11705,11706,11709,11711,11713,11716,11718,11720,11722,11724,11726,11728],{"class":188,"line":3161},[186,11707,11708],{"class":669},"             *",[186,11710,11698],{"class":202},[186,11712,2091],{"class":669},[186,11714,11715],{"class":202},"j)",[186,11717,8616],{"class":669},[186,11719,11698],{"class":202},[186,11721,2091],{"class":669},[186,11723,2077],{"class":202},[186,11725,2091],{"class":669},[186,11727,1829],{"class":206},[186,11729,1112],{"class":202},[186,11731,11732,11734,11736,11738,11740,11742,11744,11746,11748],{"class":188,"line":3166},[186,11733,11708],{"class":669},[186,11735,11698],{"class":202},[186,11737,2091],{"class":669},[186,11739,2077],{"class":202},[186,11741,2091],{"class":669},[186,11743,1829],{"class":206},[186,11745,2039],{"class":202},[186,11747,529],{"class":669},[186,11749,5746],{"class":202},[186,11751,11752],{"class":188,"line":3195},[186,11753,11754],{"class":202},"         }\n",[186,11756,11757],{"class":188,"line":3200},[186,11758,11759],{"class":202},"     }\n",[186,11761,11762],{"class":188,"line":3217},[186,11763,3654],{"class":202},[186,11765,11766],{"class":188,"line":3222},[186,11767,639],{"class":202},[186,11769,11770],{"class":188,"line":3227},[186,11771,11772],{"class":192},"\u002F\u002F定义打印函数\n",[186,11774,11775,11777,11779,11781,11783,11785,11787,11789,11791,11793],{"class":188,"line":3232},[186,11776,6827],{"class":669},[186,11778,11078],{"class":198},[186,11780,832],{"class":202},[186,11782,11571],{"class":198},[186,11784,7981],{"class":669},[186,11786,2304],{"class":835},[186,11788,1988],{"class":202},[186,11790,1626],{"class":669},[186,11792,8794],{"class":835},[186,11794,1629],{"class":202},[186,11796,11797],{"class":188,"line":3246},[186,11798,3018],{"class":202},[186,11800,11801,11803,11805,11807,11809,11811,11813,11815,11817,11819,11821],{"class":188,"line":3251},[186,11802,4667],{"class":669},[186,11804,3126],{"class":202},[186,11806,1626],{"class":669},[186,11808,4498],{"class":202},[186,11810,529],{"class":669},[186,11812,1803],{"class":206},[186,11814,4505],{"class":202},[186,11816,520],{"class":669},[186,11818,11608],{"class":202},[186,11820,3759],{"class":669},[186,11822,1629],{"class":202},[186,11824,11825],{"class":188,"line":4044},[186,11826,3497],{"class":202},[186,11828,11829,11831,11833,11835,11837,11840,11842,11844,11846,11849,11851,11853,11855,11858,11860,11862,11864,11867,11869,11871,11873,11876,11878,11880,11882,11885,11887],{"class":188,"line":4058},[186,11830,4917],{"class":202},[186,11832,2650],{"class":669},[186,11834,1862],{"class":532},[186,11836,2707],{"class":206},[186,11838,11839],{"class":532},"姓名：\"",[186,11841,2650],{"class":669},[186,11843,11698],{"class":202},[186,11845,2091],{"class":669},[186,11847,11848],{"class":202},"i)->name",[186,11850,2650],{"class":669},[186,11852,1862],{"class":532},[186,11854,2707],{"class":206},[186,11856,11857],{"class":532},"年龄：\"",[186,11859,2650],{"class":669},[186,11861,11698],{"class":202},[186,11863,2091],{"class":669},[186,11865,11866],{"class":202},"i)->age",[186,11868,2650],{"class":669},[186,11870,1862],{"class":532},[186,11872,2707],{"class":206},[186,11874,11875],{"class":532},"性别：\"",[186,11877,2650],{"class":669},[186,11879,11698],{"class":202},[186,11881,2091],{"class":669},[186,11883,11884],{"class":202},"i)->gender",[186,11886,2650],{"class":669},[186,11888,2672],{"class":202},[186,11890,11891],{"class":188,"line":4066},[186,11892,3654],{"class":202},[186,11894,11895],{"class":188,"line":4071},[186,11896,639],{"class":202},[186,11898,11899,11901,11903],{"class":188,"line":4077},[186,11900,1626],{"class":669},[186,11902,3440],{"class":198},[186,11904,3443],{"class":202},[186,11906,11907],{"class":188,"line":4083},[186,11908,3018],{"class":202},[186,11910,11911],{"class":188,"line":4088},[186,11912,11913],{"class":192},"    \u002F\u002F定义结构体变量\n",[186,11915,11916,11919,11921,11923],{"class":188,"line":9411},[186,11917,11918],{"class":202},"    Sanguo s1[",[186,11920,1930],{"class":206},[186,11922,2547],{"class":202},[186,11924,6374],{"class":669},[186,11926,11927],{"class":188,"line":9435},[186,11928,3497],{"class":202},[186,11930,11931,11933,11935,11937,11939,11941,11943],{"class":188,"line":9440},[186,11932,6383],{"class":202},[186,11934,11415],{"class":532},[186,11936,1988],{"class":202},[186,11938,2383],{"class":206},[186,11940,1988],{"class":202},[186,11942,11424],{"class":532},[186,11944,6396],{"class":202},[186,11946,11947,11949,11951,11953,11955,11957,11959],{"class":188,"line":9446},[186,11948,6383],{"class":202},[186,11950,11433],{"class":532},[186,11952,1988],{"class":202},[186,11954,2358],{"class":206},[186,11956,1988],{"class":202},[186,11958,11424],{"class":532},[186,11960,6396],{"class":202},[186,11962,11963,11965,11967,11969,11971,11973,11975],{"class":188,"line":9473},[186,11964,6383],{"class":202},[186,11966,11450],{"class":532},[186,11968,1988],{"class":202},[186,11970,801],{"class":206},[186,11972,1988],{"class":202},[186,11974,11424],{"class":532},[186,11976,6396],{"class":202},[186,11978,11979,11981,11983,11985,11987,11989,11991],{"class":188,"line":9478},[186,11980,6383],{"class":202},[186,11982,11467],{"class":532},[186,11984,1988],{"class":202},[186,11986,2333],{"class":206},[186,11988,1988],{"class":202},[186,11990,11424],{"class":532},[186,11992,6396],{"class":202},[186,11994,11995,11997,11999,12001,12003,12005,12007],{"class":188,"line":9484},[186,11996,6383],{"class":202},[186,11998,11484],{"class":532},[186,12000,1988],{"class":202},[186,12002,2284],{"class":206},[186,12004,1988],{"class":202},[186,12006,11493],{"class":532},[186,12008,6396],{"class":202},[186,12010,12011],{"class":188,"line":9496},[186,12012,6417],{"class":202},[186,12014,12015,12017,12019,12021,12024,12026,12029,12031],{"class":188,"line":9508},[186,12016,3452],{"class":669},[186,12018,8794],{"class":202},[186,12020,5669],{"class":669},[186,12022,12023],{"class":202},"(s1)",[186,12025,5675],{"class":669},[186,12027,12028],{"class":202},"(s1[",[186,12030,1803],{"class":206},[186,12032,5322],{"class":202},[186,12034,12035,12038,12040,12043,12045,12048,12051,12053],{"class":188,"line":9520},[186,12036,12037],{"class":202},"    Sanguo ",[186,12039,2065],{"class":669},[186,12041,12042],{"class":202},"s ",[186,12044,529],{"class":669},[186,12046,12047],{"class":669}," &",[186,12049,12050],{"class":202},"s1[",[186,12052,1803],{"class":206},[186,12054,6156],{"class":202},[186,12056,12057],{"class":188,"line":11179},[186,12058,12059],{"class":192},"    \u002F\u002F排序前：\n",[186,12061,12062,12064,12066,12069,12071],{"class":188,"line":11204},[186,12063,7992],{"class":202},[186,12065,2650],{"class":669},[186,12067,12068],{"class":532}," \"排序前：\"",[186,12070,2917],{"class":669},[186,12072,10303],{"class":202},[186,12074,12075,12077],{"class":188,"line":11227},[186,12076,11378],{"class":198},[186,12078,12079],{"class":202},"(s,len);\n",[186,12081,12082],{"class":188,"line":11251},[186,12083,12084],{"class":192},"    \u002F\u002F调用排序函数\n",[186,12086,12087,12089],{"class":188,"line":11256},[186,12088,9061],{"class":198},[186,12090,12079],{"class":202},[186,12092,12093],{"class":188,"line":11261},[186,12094,12095],{"class":192},"    \u002F\u002F排序后\n",[186,12097,12098,12100,12102,12105,12107],{"class":188,"line":11266},[186,12099,7992],{"class":202},[186,12101,2650],{"class":669},[186,12103,12104],{"class":532}," \"排序后：\"",[186,12106,2917],{"class":669},[186,12108,10303],{"class":202},[186,12110,12111,12113],{"class":188,"line":11275},[186,12112,11378],{"class":198},[186,12114,12079],{"class":202},[186,12116,12117],{"class":188,"line":11280},[186,12118,639],{"class":202},[169,12120,12121,12122,12124],{},"注意：使用指针时直接用传首地址**&s",[186,12123,1803],{},"**",[1524,12126,12127],{},"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":181,"searchDepth":49,"depth":49,"links":12129},[12130,12131,12132,12133,12134,12135,12136],{"id":9166,"depth":49,"text":9167},{"id":9528,"depth":49,"text":9529},{"id":9797,"depth":49,"text":9798},{"id":9962,"depth":49,"text":9963},{"id":10178,"depth":49,"text":10179},{"id":10499,"depth":49,"text":10500},{"id":10727,"depth":49,"text":10728},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9155,"description":9163},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12143,"title":12144,"body":12145,"description":181,"extension":1549,"meta":13488,"navigation":1551,"path":13489,"seo":13490,"stem":13491,"__hash__":13492},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12146,"toc":13482},[12147,12150,12154,12160,12174,12179,12182,12186,12193,12199,12202,12209,12215,12220,12223,12226,12229,12793,12796,12810,12814,12819,12835,12975,12978,12984,12987,12992,13000,13108,13111,13116,13119,13124,13127,13133,13136,13479],[10,12148,12144],{"id":12149},"_5程序内存模型",[14,12151,12153],{"id":12152},"_51内存分区模型","5.1内存分区模型",[169,12155,12156,12157],{},"C++程序在执行时，将内存大方向划分为",[54,12158,12159],{},"4个区域",[19,12161,12162,12165,12168,12171],{},[22,12163,12164],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[22,12166,12167],{},"全局区：存放全局变量和静态变量以及常量",[22,12169,12170],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[22,12172,12173],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[169,12175,12176],{},[54,12177,12178],{},"内存四区意义：",[169,12180,12181],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[29,12183,12185],{"id":12184},"_511程序运行前","5.1.1程序运行前",[169,12187,12188,12189,12192],{},"​\t在程序编译后，生成了exe可执行程序，",[54,12190,12191],{},"未执行该程序前","分为两个区域",[169,12194,12195,12196],{},"​\t",[54,12197,12198],{},"代码区：",[169,12200,12201],{},"​\t\t存放 CPU 执行的机器指令",[169,12203,12204,12205,12208],{},"​\t\t代码区是",[54,12206,12207],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[169,12210,12204,12211,12214],{},[54,12212,12213],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[169,12216,12195,12217],{},[54,12218,12219],{},"全局区：",[169,12221,12222],{},"​\t\t全局变量和静态变量存放在此.",[169,12224,12225],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[169,12227,12228],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[176,12230,12232],{"className":1612,"code":12231,"language":1614,"meta":181,"style":181},"\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",[183,12233,12234,12239,12252,12265,12269,12274,12289,12304,12308,12317,12321,12326,12339,12352,12356,12361,12387,12413,12417,12444,12470,12474,12479,12495,12510,12514,12540,12566,12570,12595,12620,12624,12650,12676,12680,12696,12711,12737,12763,12767,12777,12781,12789],{"__ignoreMap":181},[186,12235,12236],{"class":188,"line":189},[186,12237,12238],{"class":192},"\u002F\u002F全局变量\n",[186,12240,12241,12243,12246,12248,12250],{"class":188,"line":49},[186,12242,1626],{"class":669},[186,12244,12245],{"class":202}," g_a ",[186,12247,529],{"class":669},[186,12249,3505],{"class":206},[186,12251,634],{"class":202},[186,12253,12254,12256,12259,12261,12263],{"class":188,"line":219},[186,12255,1626],{"class":669},[186,12257,12258],{"class":202}," g_b ",[186,12260,529],{"class":669},[186,12262,3505],{"class":206},[186,12264,634],{"class":202},[186,12266,12267],{"class":188,"line":225},[186,12268,3867],{"emptyLinePlaceholder":1551},[186,12270,12271],{"class":188,"line":242},[186,12272,12273],{"class":192},"\u002F\u002F全局常量\n",[186,12275,12276,12278,12280,12283,12285,12287],{"class":188,"line":248},[186,12277,8255],{"class":669},[186,12279,3849],{"class":669},[186,12281,12282],{"class":202}," c_g_a ",[186,12284,529],{"class":669},[186,12286,3505],{"class":206},[186,12288,634],{"class":202},[186,12290,12291,12293,12295,12298,12300,12302],{"class":188,"line":265},[186,12292,8255],{"class":669},[186,12294,3849],{"class":669},[186,12296,12297],{"class":202}," c_g_b ",[186,12299,529],{"class":669},[186,12301,3505],{"class":206},[186,12303,634],{"class":202},[186,12305,12306],{"class":188,"line":271},[186,12307,3867],{"emptyLinePlaceholder":1551},[186,12309,12310,12312,12314],{"class":188,"line":288},[186,12311,1626],{"class":669},[186,12313,3440],{"class":198},[186,12315,12316],{"class":202},"() {\n",[186,12318,12319],{"class":188,"line":294},[186,12320,3867],{"emptyLinePlaceholder":1551},[186,12322,12323],{"class":188,"line":1212},[186,12324,12325],{"class":192},"    \u002F\u002F局部变量\n",[186,12327,12328,12330,12333,12335,12337],{"class":188,"line":1223},[186,12329,3452],{"class":669},[186,12331,12332],{"class":202}," a ",[186,12334,529],{"class":669},[186,12336,3505],{"class":206},[186,12338,634],{"class":202},[186,12340,12341,12343,12346,12348,12350],{"class":188,"line":1236},[186,12342,3452],{"class":669},[186,12344,12345],{"class":202}," b ",[186,12347,529],{"class":669},[186,12349,3505],{"class":206},[186,12351,634],{"class":202},[186,12353,12354],{"class":188,"line":3096},[186,12355,3867],{"emptyLinePlaceholder":1551},[186,12357,12358],{"class":188,"line":3110},[186,12359,12360],{"class":192},"    \u002F\u002F打印地址\n",[186,12362,12363,12365,12367,12370,12372,12374,12376,12378,12380,12383,12385],{"class":188,"line":3115},[186,12364,7992],{"class":202},[186,12366,2650],{"class":669},[186,12368,12369],{"class":532}," \"局部变量a地址为： \"",[186,12371,2917],{"class":669},[186,12373,3126],{"class":202},[186,12375,1626],{"class":669},[186,12377,2039],{"class":202},[186,12379,1963],{"class":669},[186,12381,12382],{"class":202},"a ",[186,12384,2650],{"class":669},[186,12386,10303],{"class":202},[186,12388,12389,12391,12393,12396,12398,12400,12402,12404,12406,12409,12411],{"class":188,"line":3121},[186,12390,7992],{"class":202},[186,12392,2650],{"class":669},[186,12394,12395],{"class":532}," \"局部变量b地址为： \"",[186,12397,2917],{"class":669},[186,12399,3126],{"class":202},[186,12401,1626],{"class":669},[186,12403,2039],{"class":202},[186,12405,1963],{"class":669},[186,12407,12408],{"class":202},"b ",[186,12410,2650],{"class":669},[186,12412,10303],{"class":202},[186,12414,12415],{"class":188,"line":3142},[186,12416,3867],{"emptyLinePlaceholder":1551},[186,12418,12419,12421,12423,12426,12428,12431,12433,12435,12437,12440,12442],{"class":188,"line":3147},[186,12420,7992],{"class":202},[186,12422,2650],{"class":669},[186,12424,12425],{"class":532}," \"全局变量g_a地址为： \"",[186,12427,2917],{"class":669},[186,12429,12430],{"class":202},"  (",[186,12432,1626],{"class":669},[186,12434,2039],{"class":202},[186,12436,1963],{"class":669},[186,12438,12439],{"class":202},"g_a ",[186,12441,2650],{"class":669},[186,12443,10303],{"class":202},[186,12445,12446,12448,12450,12453,12455,12457,12459,12461,12463,12466,12468],{"class":188,"line":3161},[186,12447,7992],{"class":202},[186,12449,2650],{"class":669},[186,12451,12452],{"class":532}," \"全局变量g_b地址为： \"",[186,12454,2917],{"class":669},[186,12456,12430],{"class":202},[186,12458,1626],{"class":669},[186,12460,2039],{"class":202},[186,12462,1963],{"class":669},[186,12464,12465],{"class":202},"g_b ",[186,12467,2650],{"class":669},[186,12469,10303],{"class":202},[186,12471,12472],{"class":188,"line":3166},[186,12473,3867],{"emptyLinePlaceholder":1551},[186,12475,12476],{"class":188,"line":3195},[186,12477,12478],{"class":192},"    \u002F\u002F静态变量\n",[186,12480,12481,12484,12486,12489,12491,12493],{"class":188,"line":3200},[186,12482,12483],{"class":669},"    static",[186,12485,3849],{"class":669},[186,12487,12488],{"class":202}," s_a ",[186,12490,529],{"class":669},[186,12492,3505],{"class":206},[186,12494,634],{"class":202},[186,12496,12497,12499,12501,12504,12506,12508],{"class":188,"line":3217},[186,12498,12483],{"class":669},[186,12500,3849],{"class":669},[186,12502,12503],{"class":202}," s_b ",[186,12505,529],{"class":669},[186,12507,3505],{"class":206},[186,12509,634],{"class":202},[186,12511,12512],{"class":188,"line":3222},[186,12513,3867],{"emptyLinePlaceholder":1551},[186,12515,12516,12518,12520,12523,12525,12527,12529,12531,12533,12536,12538],{"class":188,"line":3227},[186,12517,7992],{"class":202},[186,12519,2650],{"class":669},[186,12521,12522],{"class":532}," \"静态变量s_a地址为： \"",[186,12524,2917],{"class":669},[186,12526,3126],{"class":202},[186,12528,1626],{"class":669},[186,12530,2039],{"class":202},[186,12532,1963],{"class":669},[186,12534,12535],{"class":202},"s_a ",[186,12537,2650],{"class":669},[186,12539,10303],{"class":202},[186,12541,12542,12544,12546,12549,12551,12553,12555,12557,12559,12562,12564],{"class":188,"line":3232},[186,12543,7992],{"class":202},[186,12545,2650],{"class":669},[186,12547,12548],{"class":532}," \"静态变量s_b地址为： \"",[186,12550,2917],{"class":669},[186,12552,3126],{"class":202},[186,12554,1626],{"class":669},[186,12556,2039],{"class":202},[186,12558,1963],{"class":669},[186,12560,12561],{"class":202},"s_b ",[186,12563,2650],{"class":669},[186,12565,10303],{"class":202},[186,12567,12568],{"class":188,"line":3246},[186,12569,3867],{"emptyLinePlaceholder":1551},[186,12571,12572,12574,12576,12579,12581,12583,12585,12587,12589,12591,12593],{"class":188,"line":3251},[186,12573,7992],{"class":202},[186,12575,2650],{"class":669},[186,12577,12578],{"class":532}," \"字符串常量地址为： \"",[186,12580,2917],{"class":669},[186,12582,3126],{"class":202},[186,12584,1626],{"class":669},[186,12586,2039],{"class":202},[186,12588,1963],{"class":669},[186,12590,2667],{"class":532},[186,12592,2917],{"class":669},[186,12594,10303],{"class":202},[186,12596,12597,12599,12601,12603,12605,12607,12609,12611,12613,12616,12618],{"class":188,"line":4044},[186,12598,7992],{"class":202},[186,12600,2650],{"class":669},[186,12602,12578],{"class":532},[186,12604,2917],{"class":669},[186,12606,3126],{"class":202},[186,12608,1626],{"class":669},[186,12610,2039],{"class":202},[186,12612,1963],{"class":669},[186,12614,12615],{"class":532},"\"hello world1\"",[186,12617,2917],{"class":669},[186,12619,10303],{"class":202},[186,12621,12622],{"class":188,"line":4058},[186,12623,3867],{"emptyLinePlaceholder":1551},[186,12625,12626,12628,12630,12633,12635,12637,12639,12641,12643,12646,12648],{"class":188,"line":4066},[186,12627,7992],{"class":202},[186,12629,2650],{"class":669},[186,12631,12632],{"class":532}," \"全局常量c_g_a地址为： \"",[186,12634,2917],{"class":669},[186,12636,3126],{"class":202},[186,12638,1626],{"class":669},[186,12640,2039],{"class":202},[186,12642,1963],{"class":669},[186,12644,12645],{"class":202},"c_g_a ",[186,12647,2650],{"class":669},[186,12649,10303],{"class":202},[186,12651,12652,12654,12656,12659,12661,12663,12665,12667,12669,12672,12674],{"class":188,"line":4071},[186,12653,7992],{"class":202},[186,12655,2650],{"class":669},[186,12657,12658],{"class":532}," \"全局常量c_g_b地址为： \"",[186,12660,2917],{"class":669},[186,12662,3126],{"class":202},[186,12664,1626],{"class":669},[186,12666,2039],{"class":202},[186,12668,1963],{"class":669},[186,12670,12671],{"class":202},"c_g_b ",[186,12673,2650],{"class":669},[186,12675,10303],{"class":202},[186,12677,12678],{"class":188,"line":4077},[186,12679,3867],{"emptyLinePlaceholder":1551},[186,12681,12682,12685,12687,12690,12692,12694],{"class":188,"line":4083},[186,12683,12684],{"class":669},"    const",[186,12686,3849],{"class":669},[186,12688,12689],{"class":202}," c_l_a ",[186,12691,529],{"class":669},[186,12693,3505],{"class":206},[186,12695,634],{"class":202},[186,12697,12698,12700,12702,12705,12707,12709],{"class":188,"line":4088},[186,12699,12684],{"class":669},[186,12701,3849],{"class":669},[186,12703,12704],{"class":202}," c_l_b ",[186,12706,529],{"class":669},[186,12708,3505],{"class":206},[186,12710,634],{"class":202},[186,12712,12713,12715,12717,12720,12722,12724,12726,12728,12730,12733,12735],{"class":188,"line":9411},[186,12714,7992],{"class":202},[186,12716,2650],{"class":669},[186,12718,12719],{"class":532}," \"局部常量c_l_a地址为： \"",[186,12721,2917],{"class":669},[186,12723,3126],{"class":202},[186,12725,1626],{"class":669},[186,12727,2039],{"class":202},[186,12729,1963],{"class":669},[186,12731,12732],{"class":202},"c_l_a ",[186,12734,2650],{"class":669},[186,12736,10303],{"class":202},[186,12738,12739,12741,12743,12746,12748,12750,12752,12754,12756,12759,12761],{"class":188,"line":9435},[186,12740,7992],{"class":202},[186,12742,2650],{"class":669},[186,12744,12745],{"class":532}," \"局部常量c_l_b地址为： \"",[186,12747,2917],{"class":669},[186,12749,3126],{"class":202},[186,12751,1626],{"class":669},[186,12753,2039],{"class":202},[186,12755,1963],{"class":669},[186,12757,12758],{"class":202},"c_l_b ",[186,12760,2650],{"class":669},[186,12762,10303],{"class":202},[186,12764,12765],{"class":188,"line":9440},[186,12766,3867],{"emptyLinePlaceholder":1551},[186,12768,12769,12771,12773,12775],{"class":188,"line":9446},[186,12770,3770],{"class":198},[186,12772,832],{"class":202},[186,12774,3775],{"class":532},[186,12776,1112],{"class":202},[186,12778,12779],{"class":188,"line":9473},[186,12780,3867],{"emptyLinePlaceholder":1551},[186,12782,12783,12785,12787],{"class":188,"line":9478},[186,12784,5556],{"class":669},[186,12786,5559],{"class":206},[186,12788,634],{"class":202},[186,12790,12791],{"class":188,"line":9484},[186,12792,639],{"class":202},[169,12794,12795],{},"总结：",[19,12797,12798,12801,12804,12807],{},[22,12799,12800],{},"c++中程序运行前分为全局区和代码区",[22,12802,12803],{},"代码区特点是共享和只读",[22,12805,12806],{},"全局区中存放全局变量、静态变量、常量",[22,12808,12809],{},"常量区中存放const修饰的全局常量和字符串常量",[29,12811,12813],{"id":12812},"_512程序运行后","5.1.2程序运行后",[34,12815,12816],{},[22,12817,12818],{},"栈区：",[19,12820,12821,12828],{},[22,12822,12823,12824,12827],{},"由编译器自动分配释放, 存放",[54,12825,12826],{},"函数的参数值,局部变量","等",[22,12829,12830,12831,12834],{},"注意事项：",[54,12832,12833],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[176,12836,12838],{"className":1612,"code":12837,"language":1614,"meta":181,"style":181},"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",[183,12839,12840,12851,12855,12870,12882,12886,12890,12898,12903,12918,12936,12953,12963,12971],{"__ignoreMap":181},[186,12841,12842,12844,12846,12849],{"class":188,"line":189},[186,12843,1626],{"class":669},[186,12845,7981],{"class":669},[186,12847,12848],{"class":198}," func",[186,12850,3443],{"class":202},[186,12852,12853],{"class":188,"line":49},[186,12854,3018],{"class":202},[186,12856,12857,12859,12861,12863,12865,12867],{"class":188,"line":219},[186,12858,3452],{"class":669},[186,12860,12332],{"class":202},[186,12862,529],{"class":669},[186,12864,3505],{"class":206},[186,12866,1676],{"class":202},[186,12868,12869],{"class":192}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[186,12871,12872,12874,12876,12879],{"class":188,"line":225},[186,12873,5556],{"class":669},[186,12875,12047],{"class":669},[186,12877,12878],{"class":202},"a;",[186,12880,12881],{"class":192}," \u002F\u002F放回局部变量的地址\n",[186,12883,12884],{"class":188,"line":242},[186,12885,639],{"class":202},[186,12887,12888],{"class":188,"line":248},[186,12889,3867],{"emptyLinePlaceholder":1551},[186,12891,12892,12894,12896],{"class":188,"line":265},[186,12893,1626],{"class":669},[186,12895,3440],{"class":198},[186,12897,12316],{"class":202},[186,12899,12900],{"class":188,"line":271},[186,12901,12902],{"class":192},"    \u002F\u002F接受func的返回值\n",[186,12904,12905,12907,12909,12912,12914,12916],{"class":188,"line":288},[186,12906,3452],{"class":669},[186,12908,7981],{"class":669},[186,12910,12911],{"class":202},"p ",[186,12913,529],{"class":669},[186,12915,12848],{"class":198},[186,12917,7099],{"class":202},[186,12919,12920,12922,12924,12926,12928,12930,12933],{"class":188,"line":294},[186,12921,7992],{"class":202},[186,12923,2650],{"class":669},[186,12925,7981],{"class":669},[186,12927,12911],{"class":202},[186,12929,2650],{"class":669},[186,12931,12932],{"class":202}," endl;",[186,12934,12935],{"class":192}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[186,12937,12938,12940,12942,12944,12946,12948,12950],{"class":188,"line":1212},[186,12939,7992],{"class":202},[186,12941,2650],{"class":669},[186,12943,7981],{"class":669},[186,12945,12911],{"class":202},[186,12947,2650],{"class":669},[186,12949,12932],{"class":202},[186,12951,12952],{"class":192}," \u002F\u002F第二次这个数据不再保留\n",[186,12954,12955,12957,12959,12961],{"class":188,"line":1223},[186,12956,3770],{"class":198},[186,12958,832],{"class":202},[186,12960,3775],{"class":532},[186,12962,1112],{"class":202},[186,12964,12965,12967,12969],{"class":188,"line":1236},[186,12966,5556],{"class":669},[186,12968,5559],{"class":206},[186,12970,634],{"class":202},[186,12972,12973],{"class":188,"line":3096},[186,12974,639],{"class":202},[169,12976,12977],{},"输出结果：",[169,12979,12980],{},[164,12981],{"alt":12982,"src":12983},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[169,12985,12986],{},"总结：不要返回局部变量的地址",[34,12988,12989],{"start":49},[22,12990,12991],{},"堆区",[19,12993,12994,12997],{},[22,12995,12996],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[22,12998,12999],{},"在c++中主要利用new在堆区开辟内存",[176,13001,13003],{"className":1612,"code":13002,"language":1614,"meta":181,"style":181},"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",[183,13004,13005,13020,13024,13029,13050,13057,13061,13069,13073,13078,13092,13104],{"__ignoreMap":181},[186,13006,13007,13009,13012,13015,13017],{"class":188,"line":189},[186,13008,1626],{"class":669},[186,13010,13011],{"class":669},"  *",[186,13013,13014],{"class":198},"func",[186,13016,3894],{"class":202},[186,13018,13019],{"class":192},"  \u002F\u002F函数返回指针\n",[186,13021,13022],{"class":188,"line":49},[186,13023,3018],{"class":202},[186,13025,13026],{"class":188,"line":219},[186,13027,13028],{"class":192},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[186,13030,13031,13033,13035,13037,13039,13042,13044,13046,13048],{"class":188,"line":225},[186,13032,5613],{"class":669},[186,13034,7981],{"class":669},[186,13036,169],{"class":202},[186,13038,529],{"class":669},[186,13040,13041],{"class":669}," new",[186,13043,3849],{"class":669},[186,13045,832],{"class":202},[186,13047,2056],{"class":206},[186,13049,1112],{"class":202},[186,13051,13052,13054],{"class":188,"line":242},[186,13053,5847],{"class":669},[186,13055,13056],{"class":202}," p;\n",[186,13058,13059],{"class":188,"line":248},[186,13060,639],{"class":202},[186,13062,13063,13065,13067],{"class":188,"line":265},[186,13064,1626],{"class":669},[186,13066,3440],{"class":198},[186,13068,3443],{"class":202},[186,13070,13071],{"class":188,"line":271},[186,13072,3018],{"class":202},[186,13074,13075],{"class":188,"line":288},[186,13076,13077],{"class":192},"    \u002F\u002F在堆区开辟数据\n",[186,13079,13080,13082,13084,13086,13088,13090],{"class":188,"line":294},[186,13081,3452],{"class":669},[186,13083,7981],{"class":669},[186,13085,169],{"class":202},[186,13087,529],{"class":669},[186,13089,13014],{"class":198},[186,13091,7099],{"class":202},[186,13093,13094,13096,13098,13100,13102],{"class":188,"line":1212},[186,13095,3023],{"class":202},[186,13097,7882],{"class":669},[186,13099,169],{"class":202},[186,13101,2650],{"class":669},[186,13103,2672],{"class":202},[186,13105,13106],{"class":188,"line":1223},[186,13107,639],{"class":202},[169,13109,13110],{},"图片展示：",[169,13112,13113],{},[164,13114],{"alt":12982,"src":13115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[169,13117,13118],{},"堆区内存由程序员管生死！！！",[34,13120,13121],{"start":219},[22,13122,13123],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[169,13125,13126],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[169,13128,13129,13130],{},"​语法：",[183,13131,13132],{}," new 数据类型",[169,13134,13135],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[176,13137,13139],{"className":1612,"code":13138,"language":1614,"meta":181,"style":181},"\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",[183,13140,13141,13146,13156,13160,13165,13170,13192,13196,13204,13208,13222,13234,13246,13258,13263,13268,13279,13283,13288,13296,13300,13305,13327,13353,13357,13375,13379,13405,13409,13421,13425,13430,13435,13443,13447,13451,13459,13463,13469,13475],{"__ignoreMap":181},[186,13142,13143],{"class":188,"line":189},[186,13144,13145],{"class":192},"\u002F\u002F1.new的基本语法\n",[186,13147,13148,13150,13152,13154],{"class":188,"line":49},[186,13149,1626],{"class":669},[186,13151,7981],{"class":669},[186,13153,13014],{"class":198},[186,13155,3443],{"class":202},[186,13157,13158],{"class":188,"line":219},[186,13159,3018],{"class":202},[186,13161,13162],{"class":188,"line":225},[186,13163,13164],{"class":192},"    \u002F\u002F在堆区创建整型数据\n",[186,13166,13167],{"class":188,"line":242},[186,13168,13169],{"class":192},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[186,13171,13172,13174,13176,13178,13181,13183,13185,13187,13189],{"class":188,"line":248},[186,13173,3452],{"class":669},[186,13175,7981],{"class":669},[186,13177,169],{"class":202},[186,13179,13180],{"class":669},"=new",[186,13182,3849],{"class":669},[186,13184,832],{"class":202},[186,13186,2056],{"class":206},[186,13188,7429],{"class":202},[186,13190,13191],{"class":192},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[186,13193,13194],{"class":188,"line":265},[186,13195,639],{"class":202},[186,13197,13198,13200,13202],{"class":188,"line":271},[186,13199,6827],{"class":669},[186,13201,7051],{"class":198},[186,13203,3443],{"class":202},[186,13205,13206],{"class":188,"line":288},[186,13207,3018],{"class":202},[186,13209,13210,13212,13214,13216,13218,13220],{"class":188,"line":294},[186,13211,3452],{"class":669},[186,13213,7981],{"class":669},[186,13215,169],{"class":202},[186,13217,529],{"class":669},[186,13219,13014],{"class":198},[186,13221,7099],{"class":202},[186,13223,13224,13226,13228,13230,13232],{"class":188,"line":1212},[186,13225,3023],{"class":202},[186,13227,7882],{"class":669},[186,13229,169],{"class":202},[186,13231,2650],{"class":669},[186,13233,2672],{"class":202},[186,13235,13236,13238,13240,13242,13244],{"class":188,"line":1223},[186,13237,3023],{"class":202},[186,13239,7882],{"class":669},[186,13241,169],{"class":202},[186,13243,2650],{"class":669},[186,13245,2672],{"class":202},[186,13247,13248,13250,13252,13254,13256],{"class":188,"line":1236},[186,13249,3023],{"class":202},[186,13251,7882],{"class":669},[186,13253,169],{"class":202},[186,13255,2650],{"class":669},[186,13257,2672],{"class":202},[186,13259,13260],{"class":188,"line":3096},[186,13261,13262],{"class":192},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[186,13264,13265],{"class":188,"line":3110},[186,13266,13267],{"class":192},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[186,13269,13270,13273,13276],{"class":188,"line":3115},[186,13271,13272],{"class":669},"    delete",[186,13274,13275],{"class":202}," p;",[186,13277,13278],{"class":192},"\u002F\u002F删除这块地址\n",[186,13280,13281],{"class":188,"line":3121},[186,13282,639],{"class":202},[186,13284,13285],{"class":188,"line":3142},[186,13286,13287],{"class":192},"\u002F\u002F2.在堆区利用new开辟数组\n",[186,13289,13290,13292,13294],{"class":188,"line":3147},[186,13291,6827],{"class":669},[186,13293,7120],{"class":198},[186,13295,3443],{"class":202},[186,13297,13298],{"class":188,"line":3161},[186,13299,3018],{"class":202},[186,13301,13302],{"class":188,"line":3166},[186,13303,13304],{"class":192},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[186,13306,13307,13309,13311,13313,13315,13317,13319,13321,13324],{"class":188,"line":3195},[186,13308,3452],{"class":669},[186,13310,7981],{"class":669},[186,13312,5346],{"class":202},[186,13314,13180],{"class":669},[186,13316,3849],{"class":669},[186,13318,2498],{"class":202},[186,13320,2056],{"class":206},[186,13322,13323],{"class":202},"];",[186,13325,13326],{"class":192},"\u002F\u002F10代表数组有10个元素\n",[186,13328,13329,13331,13333,13335,13337,13339,13341,13343,13345,13347,13349,13351],{"class":188,"line":3200},[186,13330,4667],{"class":669},[186,13332,3126],{"class":202},[186,13334,1626],{"class":669},[186,13336,4498],{"class":202},[186,13338,529],{"class":669},[186,13340,1803],{"class":206},[186,13342,4505],{"class":202},[186,13344,520],{"class":669},[186,13346,2056],{"class":206},[186,13348,4505],{"class":202},[186,13350,3759],{"class":669},[186,13352,1629],{"class":202},[186,13354,13355],{"class":188,"line":3217},[186,13356,3497],{"class":202},[186,13358,13359,13362,13364,13366,13368,13370,13372],{"class":188,"line":3222},[186,13360,13361],{"class":202},"        arr[i]",[186,13363,529],{"class":669},[186,13365,2051],{"class":202},[186,13367,2091],{"class":669},[186,13369,1922],{"class":206},[186,13371,1676],{"class":202},[186,13373,13374],{"class":192},"\u002F\u002F给10个元素赋值100～109\n",[186,13376,13377],{"class":188,"line":3227},[186,13378,3654],{"class":202},[186,13380,13381,13383,13385,13387,13389,13391,13393,13395,13397,13399,13401,13403],{"class":188,"line":3232},[186,13382,4667],{"class":669},[186,13384,3126],{"class":202},[186,13386,1626],{"class":669},[186,13388,4498],{"class":202},[186,13390,529],{"class":669},[186,13392,1803],{"class":206},[186,13394,4505],{"class":202},[186,13396,520],{"class":669},[186,13398,2056],{"class":206},[186,13400,4505],{"class":202},[186,13402,3759],{"class":669},[186,13404,1629],{"class":202},[186,13406,13407],{"class":188,"line":3246},[186,13408,3497],{"class":202},[186,13410,13411,13413,13415,13417,13419],{"class":188,"line":3251},[186,13412,4917],{"class":202},[186,13414,2650],{"class":669},[186,13416,5820],{"class":202},[186,13418,2650],{"class":669},[186,13420,2672],{"class":202},[186,13422,13423],{"class":188,"line":4044},[186,13424,3654],{"class":202},[186,13426,13427],{"class":188,"line":4058},[186,13428,13429],{"class":192},"    \u002F\u002F释放堆区数组\n",[186,13431,13432],{"class":188,"line":4066},[186,13433,13434],{"class":192},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[186,13436,13437,13440],{"class":188,"line":4071},[186,13438,13439],{"class":669},"    delete[]",[186,13441,13442],{"class":202}," arr;\n",[186,13444,13445],{"class":188,"line":4077},[186,13446,639],{"class":202},[186,13448,13449],{"class":188,"line":4083},[186,13450,3867],{"emptyLinePlaceholder":1551},[186,13452,13453,13455,13457],{"class":188,"line":4088},[186,13454,1626],{"class":669},[186,13456,3440],{"class":198},[186,13458,3443],{"class":202},[186,13460,13461],{"class":188,"line":9411},[186,13462,3018],{"class":202},[186,13464,13465,13467],{"class":188,"line":9435},[186,13466,7096],{"class":198},[186,13468,7099],{"class":202},[186,13470,13471,13473],{"class":188,"line":9440},[186,13472,7165],{"class":198},[186,13474,7099],{"class":202},[186,13476,13477],{"class":188,"line":9446},[186,13478,639],{"class":202},[1524,13480,13481],{},"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":181,"searchDepth":49,"depth":49,"links":13483},[13484],{"id":12152,"depth":49,"text":12153,"children":13485},[13486,13487],{"id":12184,"depth":219,"text":12185},{"id":12812,"depth":219,"text":12813},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12144,"description":181},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13494,"title":13495,"body":13496,"description":181,"extension":1549,"meta":14977,"navigation":1551,"path":14978,"seo":14979,"stem":14980,"__hash__":14981},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13497,"toc":14969},[13498,13501,13505,13508,13511,13680,13684,13689,13706,13711,13863,13867,13870,13873,14267,14271,14274,14279,14282,14594,14598,14604,14764,14766,14774,14778,14781,14788,14966],[10,13499,13495],{"id":13500},"_6引用",[14,13502,13504],{"id":13503},"_61引用基本用法","6.1引用基本用法",[169,13506,13507],{},"引用的本质：给变量起别名",[169,13509,13510],{},"语法：数据类型 &别名=原名",[176,13512,13514],{"className":1612,"code":13513,"language":1614,"meta":181,"style":181},"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",[183,13515,13516,13524,13528,13540,13552,13556,13575,13594,13598,13609,13613,13632,13650,13654,13664,13668,13676],{"__ignoreMap":181},[186,13517,13518,13520,13522],{"class":188,"line":189},[186,13519,1626],{"class":669},[186,13521,3440],{"class":198},[186,13523,12316],{"class":202},[186,13525,13526],{"class":188,"line":49},[186,13527,3867],{"emptyLinePlaceholder":1551},[186,13529,13530,13532,13534,13536,13538],{"class":188,"line":219},[186,13531,3452],{"class":669},[186,13533,12332],{"class":202},[186,13535,529],{"class":669},[186,13537,3505],{"class":206},[186,13539,634],{"class":202},[186,13541,13542,13544,13546,13548,13550],{"class":188,"line":225},[186,13543,3452],{"class":669},[186,13545,12047],{"class":669},[186,13547,12408],{"class":202},[186,13549,529],{"class":669},[186,13551,2905],{"class":202},[186,13553,13554],{"class":188,"line":242},[186,13555,3867],{"emptyLinePlaceholder":1551},[186,13557,13558,13560,13562,13565,13567,13569,13571,13573],{"class":188,"line":248},[186,13559,7992],{"class":202},[186,13561,2650],{"class":669},[186,13563,13564],{"class":532}," \"a = \"",[186,13566,2917],{"class":669},[186,13568,12332],{"class":202},[186,13570,2650],{"class":669},[186,13572,12932],{"class":202},[186,13574,8731],{"class":192},[186,13576,13577,13579,13581,13584,13586,13588,13590,13592],{"class":188,"line":265},[186,13578,7992],{"class":202},[186,13580,2650],{"class":669},[186,13582,13583],{"class":532}," \"b = \"",[186,13585,2917],{"class":669},[186,13587,12345],{"class":202},[186,13589,2650],{"class":669},[186,13591,12932],{"class":202},[186,13593,8731],{"class":192},[186,13595,13596],{"class":188,"line":271},[186,13597,3867],{"emptyLinePlaceholder":1551},[186,13599,13600,13603,13605,13607],{"class":188,"line":288},[186,13601,13602],{"class":202},"    b ",[186,13604,529],{"class":669},[186,13606,7217],{"class":206},[186,13608,634],{"class":202},[186,13610,13611],{"class":188,"line":294},[186,13612,3867],{"emptyLinePlaceholder":1551},[186,13614,13615,13617,13619,13621,13623,13625,13627,13629],{"class":188,"line":1212},[186,13616,7992],{"class":202},[186,13618,2650],{"class":669},[186,13620,13564],{"class":532},[186,13622,2917],{"class":669},[186,13624,12332],{"class":202},[186,13626,2650],{"class":669},[186,13628,12932],{"class":202},[186,13630,13631],{"class":192},"\u002F\u002F100\n",[186,13633,13634,13636,13638,13640,13642,13644,13646,13648],{"class":188,"line":1223},[186,13635,7992],{"class":202},[186,13637,2650],{"class":669},[186,13639,13583],{"class":532},[186,13641,2917],{"class":669},[186,13643,12345],{"class":202},[186,13645,2650],{"class":669},[186,13647,12932],{"class":202},[186,13649,13631],{"class":192},[186,13651,13652],{"class":188,"line":1236},[186,13653,3867],{"emptyLinePlaceholder":1551},[186,13655,13656,13658,13660,13662],{"class":188,"line":3096},[186,13657,3770],{"class":198},[186,13659,832],{"class":202},[186,13661,3775],{"class":532},[186,13663,1112],{"class":202},[186,13665,13666],{"class":188,"line":3110},[186,13667,3867],{"emptyLinePlaceholder":1551},[186,13669,13670,13672,13674],{"class":188,"line":3115},[186,13671,5556],{"class":669},[186,13673,5559],{"class":206},[186,13675,634],{"class":202},[186,13677,13678],{"class":188,"line":3121},[186,13679,639],{"class":202},[14,13681,13683],{"id":13682},"_62引用的注意事项","6.2引用的注意事项",[34,13685,13686],{},[22,13687,13688],{},"引用必须要初始化",[176,13690,13692],{"className":1612,"code":13691,"language":1614,"meta":181,"style":181},"int &b;\u002F\u002F非常错误！\n",[183,13693,13694],{"__ignoreMap":181},[186,13695,13696,13698,13700,13703],{"class":188,"line":189},[186,13697,1626],{"class":669},[186,13699,12047],{"class":669},[186,13701,13702],{"class":202},"b;",[186,13704,13705],{"class":192},"\u002F\u002F非常错误！\n",[34,13707,13708],{"start":49},[22,13709,13710],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[176,13712,13714],{"className":1612,"code":13713,"language":1614,"meta":181,"style":181},"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",[183,13715,13716,13724,13736,13748,13756,13772,13785,13803,13821,13841,13851,13859],{"__ignoreMap":181},[186,13717,13718,13720,13722],{"class":188,"line":189},[186,13719,1626],{"class":669},[186,13721,3440],{"class":198},[186,13723,12316],{"class":202},[186,13725,13726,13728,13730,13732,13734],{"class":188,"line":49},[186,13727,3452],{"class":669},[186,13729,12332],{"class":202},[186,13731,529],{"class":669},[186,13733,3505],{"class":206},[186,13735,634],{"class":202},[186,13737,13738,13740,13742,13744,13746],{"class":188,"line":219},[186,13739,3452],{"class":669},[186,13741,12345],{"class":202},[186,13743,529],{"class":669},[186,13745,10413],{"class":206},[186,13747,634],{"class":202},[186,13749,13750,13753],{"class":188,"line":225},[186,13751,13752],{"class":192},"    \u002F\u002Fint &c;",[186,13754,13755],{"class":192}," \u002F\u002F错误，引用必须初始化\n",[186,13757,13758,13760,13762,13764,13766,13769],{"class":188,"line":242},[186,13759,3452],{"class":669},[186,13761,12047],{"class":669},[186,13763,4412],{"class":202},[186,13765,529],{"class":669},[186,13767,13768],{"class":202}," a;",[186,13770,13771],{"class":192}," \u002F\u002F一旦初始化后，就不可以更改\n",[186,13773,13774,13777,13779,13782],{"class":188,"line":248},[186,13775,13776],{"class":202},"    c ",[186,13778,529],{"class":669},[186,13780,13781],{"class":202}," b;",[186,13783,13784],{"class":192}," \u002F\u002F这是赋值操作，不是更改引用\n",[186,13786,13787,13789,13791,13793,13795,13797,13799,13801],{"class":188,"line":265},[186,13788,7992],{"class":202},[186,13790,2650],{"class":669},[186,13792,13564],{"class":532},[186,13794,2917],{"class":669},[186,13796,12332],{"class":202},[186,13798,2650],{"class":669},[186,13800,12932],{"class":202},[186,13802,8716],{"class":192},[186,13804,13805,13807,13809,13811,13813,13815,13817,13819],{"class":188,"line":271},[186,13806,7992],{"class":202},[186,13808,2650],{"class":669},[186,13810,13583],{"class":532},[186,13812,2917],{"class":669},[186,13814,12345],{"class":202},[186,13816,2650],{"class":669},[186,13818,12932],{"class":202},[186,13820,8716],{"class":192},[186,13822,13823,13825,13827,13830,13832,13835,13837,13839],{"class":188,"line":288},[186,13824,7992],{"class":202},[186,13826,2650],{"class":669},[186,13828,13829],{"class":532}," \"c = \"",[186,13831,2917],{"class":669},[186,13833,13834],{"class":202}," c ",[186,13836,2650],{"class":669},[186,13838,12932],{"class":202},[186,13840,8716],{"class":192},[186,13842,13843,13845,13847,13849],{"class":188,"line":294},[186,13844,3770],{"class":198},[186,13846,832],{"class":202},[186,13848,3775],{"class":532},[186,13850,1112],{"class":202},[186,13852,13853,13855,13857],{"class":188,"line":1212},[186,13854,5556],{"class":669},[186,13856,5559],{"class":206},[186,13858,634],{"class":202},[186,13860,13861],{"class":188,"line":1223},[186,13862,639],{"class":202},[14,13864,13866],{"id":13865},"_63引用做函数参数","6.3引用做函数参数",[169,13868,13869],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[169,13871,13872],{},"优点：可以简化指针修改实参",[176,13874,13876],{"className":1612,"code":13875,"language":1614,"meta":181,"style":181},"\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",[183,13877,13878,13883,13906,13917,13927,13936,13940,13944,13949,13971,13983,13995,14005,14009,14013,14018,14040,14050,14058,14066,14070,14074,14082,14086,14098,14110,14114,14125,14151,14155,14175,14199,14203,14213,14237,14241,14251,14255,14263],{"__ignoreMap":181},[186,13879,13880],{"class":188,"line":189},[186,13881,13882],{"class":192},"\u002F\u002F1. 值传递\n",[186,13884,13885,13887,13890,13892,13894,13896,13899,13901,13903],{"class":188,"line":49},[186,13886,6827],{"class":669},[186,13888,13889],{"class":198}," mySwap01",[186,13891,832],{"class":202},[186,13893,1626],{"class":669},[186,13895,2871],{"class":835},[186,13897,13898],{"class":202},", ",[186,13900,1626],{"class":669},[186,13902,4299],{"class":835},[186,13904,13905],{"class":202},") {\n",[186,13907,13908,13910,13913,13915],{"class":188,"line":219},[186,13909,3452],{"class":669},[186,13911,13912],{"class":202}," temp ",[186,13914,529],{"class":669},[186,13916,2905],{"class":202},[186,13918,13919,13922,13924],{"class":188,"line":225},[186,13920,13921],{"class":202},"    a ",[186,13923,529],{"class":669},[186,13925,13926],{"class":202}," b;\n",[186,13928,13929,13931,13933],{"class":188,"line":242},[186,13930,13602],{"class":202},[186,13932,529],{"class":669},[186,13934,13935],{"class":202}," temp;\n",[186,13937,13938],{"class":188,"line":248},[186,13939,639],{"class":202},[186,13941,13942],{"class":188,"line":265},[186,13943,3867],{"emptyLinePlaceholder":1551},[186,13945,13946],{"class":188,"line":271},[186,13947,13948],{"class":192},"\u002F\u002F2. 地址传递\n",[186,13950,13951,13953,13956,13958,13961,13963,13965,13967,13969],{"class":188,"line":288},[186,13952,6827],{"class":669},[186,13954,13955],{"class":198}," mySwap02",[186,13957,832],{"class":202},[186,13959,13960],{"class":669},"int*",[186,13962,2871],{"class":835},[186,13964,13898],{"class":202},[186,13966,13960],{"class":669},[186,13968,4299],{"class":835},[186,13970,13905],{"class":202},[186,13972,13973,13975,13977,13979,13981],{"class":188,"line":294},[186,13974,3452],{"class":669},[186,13976,13912],{"class":202},[186,13978,529],{"class":669},[186,13980,7981],{"class":669},[186,13982,7660],{"class":202},[186,13984,13985,13987,13989,13991,13993],{"class":188,"line":1212},[186,13986,7866],{"class":669},[186,13988,12382],{"class":202},[186,13990,529],{"class":669},[186,13992,7981],{"class":669},[186,13994,7532],{"class":202},[186,13996,13997,13999,14001,14003],{"class":188,"line":1223},[186,13998,7866],{"class":669},[186,14000,12408],{"class":202},[186,14002,529],{"class":669},[186,14004,13935],{"class":202},[186,14006,14007],{"class":188,"line":1236},[186,14008,639],{"class":202},[186,14010,14011],{"class":188,"line":3096},[186,14012,3867],{"emptyLinePlaceholder":1551},[186,14014,14015],{"class":188,"line":3110},[186,14016,14017],{"class":192},"\u002F\u002F3. 引用传递\n",[186,14019,14020,14022,14025,14027,14030,14032,14034,14036,14038],{"class":188,"line":3115},[186,14021,6827],{"class":669},[186,14023,14024],{"class":198}," mySwap03",[186,14026,832],{"class":202},[186,14028,14029],{"class":669},"int&",[186,14031,2871],{"class":835},[186,14033,13898],{"class":202},[186,14035,14029],{"class":669},[186,14037,4299],{"class":835},[186,14039,13905],{"class":202},[186,14041,14042,14044,14046,14048],{"class":188,"line":3121},[186,14043,3452],{"class":669},[186,14045,13912],{"class":202},[186,14047,529],{"class":669},[186,14049,2905],{"class":202},[186,14051,14052,14054,14056],{"class":188,"line":3142},[186,14053,13921],{"class":202},[186,14055,529],{"class":669},[186,14057,13926],{"class":202},[186,14059,14060,14062,14064],{"class":188,"line":3147},[186,14061,13602],{"class":202},[186,14063,529],{"class":669},[186,14065,13935],{"class":202},[186,14067,14068],{"class":188,"line":3161},[186,14069,639],{"class":202},[186,14071,14072],{"class":188,"line":3166},[186,14073,3867],{"emptyLinePlaceholder":1551},[186,14075,14076,14078,14080],{"class":188,"line":3195},[186,14077,1626],{"class":669},[186,14079,3440],{"class":198},[186,14081,12316],{"class":202},[186,14083,14084],{"class":188,"line":3200},[186,14085,3867],{"emptyLinePlaceholder":1551},[186,14087,14088,14090,14092,14094,14096],{"class":188,"line":3217},[186,14089,3452],{"class":669},[186,14091,12332],{"class":202},[186,14093,529],{"class":669},[186,14095,3505],{"class":206},[186,14097,634],{"class":202},[186,14099,14100,14102,14104,14106,14108],{"class":188,"line":3222},[186,14101,3452],{"class":669},[186,14103,12345],{"class":202},[186,14105,529],{"class":669},[186,14107,10413],{"class":206},[186,14109,634],{"class":202},[186,14111,14112],{"class":188,"line":3227},[186,14113,3867],{"emptyLinePlaceholder":1551},[186,14115,14116,14119,14122],{"class":188,"line":3232},[186,14117,14118],{"class":198},"    mySwap01",[186,14120,14121],{"class":202},"(a, b);",[186,14123,14124],{"class":192},"\u002F\u002F值传递，形参不会修饰实参\n",[186,14126,14127,14129,14131,14134,14136,14138,14140,14143,14145,14147,14149],{"class":188,"line":3246},[186,14128,7992],{"class":202},[186,14130,2650],{"class":669},[186,14132,14133],{"class":532}," \"a:\"",[186,14135,2917],{"class":669},[186,14137,12332],{"class":202},[186,14139,2650],{"class":669},[186,14141,14142],{"class":532}," \" b:\"",[186,14144,2917],{"class":669},[186,14146,12345],{"class":202},[186,14148,2650],{"class":669},[186,14150,10303],{"class":202},[186,14152,14153],{"class":188,"line":3251},[186,14154,3867],{"emptyLinePlaceholder":1551},[186,14156,14157,14160,14162,14164,14167,14169,14172],{"class":188,"line":4044},[186,14158,14159],{"class":198},"    mySwap02",[186,14161,832],{"class":202},[186,14163,1963],{"class":669},[186,14165,14166],{"class":202},"a, ",[186,14168,1963],{"class":669},[186,14170,14171],{"class":202},"b);",[186,14173,14174],{"class":192},"\u002F\u002F地址传递，形参会修饰实参\n",[186,14176,14177,14179,14181,14183,14185,14187,14189,14191,14193,14195,14197],{"class":188,"line":4058},[186,14178,7992],{"class":202},[186,14180,2650],{"class":669},[186,14182,14133],{"class":532},[186,14184,2917],{"class":669},[186,14186,12332],{"class":202},[186,14188,2650],{"class":669},[186,14190,14142],{"class":532},[186,14192,2917],{"class":669},[186,14194,12345],{"class":202},[186,14196,2650],{"class":669},[186,14198,10303],{"class":202},[186,14200,14201],{"class":188,"line":4066},[186,14202,3867],{"emptyLinePlaceholder":1551},[186,14204,14205,14208,14210],{"class":188,"line":4071},[186,14206,14207],{"class":198},"    mySwap03",[186,14209,14121],{"class":202},[186,14211,14212],{"class":192},"\u002F\u002F引用传递，形参会修饰实参\n",[186,14214,14215,14217,14219,14221,14223,14225,14227,14229,14231,14233,14235],{"class":188,"line":4077},[186,14216,7992],{"class":202},[186,14218,2650],{"class":669},[186,14220,14133],{"class":532},[186,14222,2917],{"class":669},[186,14224,12332],{"class":202},[186,14226,2650],{"class":669},[186,14228,14142],{"class":532},[186,14230,2917],{"class":669},[186,14232,12345],{"class":202},[186,14234,2650],{"class":669},[186,14236,10303],{"class":202},[186,14238,14239],{"class":188,"line":4083},[186,14240,3867],{"emptyLinePlaceholder":1551},[186,14242,14243,14245,14247,14249],{"class":188,"line":4088},[186,14244,3770],{"class":198},[186,14246,832],{"class":202},[186,14248,3775],{"class":532},[186,14250,1112],{"class":202},[186,14252,14253],{"class":188,"line":9411},[186,14254,3867],{"emptyLinePlaceholder":1551},[186,14256,14257,14259,14261],{"class":188,"line":9435},[186,14258,5556],{"class":669},[186,14260,5559],{"class":206},[186,14262,634],{"class":202},[186,14264,14265],{"class":188,"line":9440},[186,14266,639],{"class":202},[14,14268,14270],{"id":14269},"_64引用做函数的返回值","6.4引用做函数的返回值",[169,14272,14273],{},"作用：引用是可以作为函数的返回值存在的",[169,14275,10488,14276],{},[54,14277,14278],{},"不要返回局部变量引用",[169,14280,14281],{},"用法：函数调用作为左值",[176,14283,14285],{"className":11404,"code":14284,"language":11406,"meta":181,"style":181},"\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",[183,14286,14287,14292,14300,14315,14321,14325,14329,14334,14342,14359,14365,14369,14373,14381,14385,14390,14404,14424,14443,14447,14452,14465,14485,14503,14507,14523,14527,14546,14564,14568,14578,14582,14590],{"__ignoreMap":181},[186,14288,14289],{"class":188,"line":189},[186,14290,14291],{"class":192},"\u002F\u002F返回局部变量引用\n",[186,14293,14294,14296,14298],{"class":188,"line":49},[186,14295,14029],{"class":669},[186,14297,7051],{"class":198},[186,14299,12316],{"class":202},[186,14301,14302,14304,14306,14308,14310,14312],{"class":188,"line":219},[186,14303,3452],{"class":669},[186,14305,12332],{"class":202},[186,14307,529],{"class":669},[186,14309,3505],{"class":206},[186,14311,1676],{"class":202},[186,14313,14314],{"class":192}," \u002F\u002F局部变量\n",[186,14316,14317,14319],{"class":188,"line":225},[186,14318,5556],{"class":669},[186,14320,2905],{"class":202},[186,14322,14323],{"class":188,"line":242},[186,14324,639],{"class":202},[186,14326,14327],{"class":188,"line":248},[186,14328,3867],{"emptyLinePlaceholder":1551},[186,14330,14331],{"class":188,"line":265},[186,14332,14333],{"class":192},"\u002F\u002F返回静态变量引用\n",[186,14335,14336,14338,14340],{"class":188,"line":271},[186,14337,14029],{"class":669},[186,14339,7120],{"class":198},[186,14341,12316],{"class":202},[186,14343,14344,14346,14348,14350,14352,14354,14356],{"class":188,"line":288},[186,14345,12483],{"class":669},[186,14347,3849],{"class":669},[186,14349,12332],{"class":202},[186,14351,529],{"class":669},[186,14353,10413],{"class":206},[186,14355,1676],{"class":202},[186,14357,14358],{"class":192},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[186,14360,14361,14363],{"class":188,"line":294},[186,14362,5556],{"class":669},[186,14364,2905],{"class":202},[186,14366,14367],{"class":188,"line":1212},[186,14368,639],{"class":202},[186,14370,14371],{"class":188,"line":1223},[186,14372,3867],{"emptyLinePlaceholder":1551},[186,14374,14375,14377,14379],{"class":188,"line":1236},[186,14376,1626],{"class":669},[186,14378,3440],{"class":198},[186,14380,12316],{"class":202},[186,14382,14383],{"class":188,"line":3096},[186,14384,3867],{"emptyLinePlaceholder":1551},[186,14386,14387],{"class":188,"line":3110},[186,14388,14389],{"class":192},"    \u002F\u002F不能返回局部变量的引用\n",[186,14391,14392,14395,14398,14400,14402],{"class":188,"line":3115},[186,14393,14394],{"class":669},"    int&",[186,14396,14397],{"class":202}," ref ",[186,14399,529],{"class":669},[186,14401,7051],{"class":198},[186,14403,7099],{"class":202},[186,14405,14406,14408,14410,14413,14415,14417,14419,14421],{"class":188,"line":3121},[186,14407,7992],{"class":202},[186,14409,2650],{"class":669},[186,14411,14412],{"class":532}," \"ref = \"",[186,14414,2917],{"class":669},[186,14416,14397],{"class":202},[186,14418,2650],{"class":669},[186,14420,12932],{"class":202},[186,14422,14423],{"class":192},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[186,14425,14426,14428,14430,14432,14434,14436,14438,14440],{"class":188,"line":3142},[186,14427,7992],{"class":202},[186,14429,2650],{"class":669},[186,14431,14412],{"class":532},[186,14433,2917],{"class":669},[186,14435,14397],{"class":202},[186,14437,2650],{"class":669},[186,14439,12932],{"class":202},[186,14441,14442],{"class":192},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[186,14444,14445],{"class":188,"line":3147},[186,14446,3867],{"emptyLinePlaceholder":1551},[186,14448,14449],{"class":188,"line":3161},[186,14450,14451],{"class":192},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[186,14453,14454,14456,14459,14461,14463],{"class":188,"line":3166},[186,14455,14394],{"class":669},[186,14457,14458],{"class":202}," ref2 ",[186,14460,529],{"class":669},[186,14462,7120],{"class":198},[186,14464,7099],{"class":202},[186,14466,14467,14469,14471,14474,14476,14478,14480,14482],{"class":188,"line":3195},[186,14468,7992],{"class":202},[186,14470,2650],{"class":669},[186,14472,14473],{"class":532}," \"ref2 = \"",[186,14475,2917],{"class":669},[186,14477,14458],{"class":202},[186,14479,2650],{"class":669},[186,14481,12932],{"class":202},[186,14483,14484],{"class":192}," \u002F\u002F20\n",[186,14486,14487,14489,14491,14493,14495,14497,14499,14501],{"class":188,"line":3200},[186,14488,7992],{"class":202},[186,14490,2650],{"class":669},[186,14492,14473],{"class":532},[186,14494,2917],{"class":669},[186,14496,14458],{"class":202},[186,14498,2650],{"class":669},[186,14500,12932],{"class":202},[186,14502,14484],{"class":192},[186,14504,14505],{"class":188,"line":3217},[186,14506,3867],{"emptyLinePlaceholder":1551},[186,14508,14509,14511,14514,14516,14518,14520],{"class":188,"line":3222},[186,14510,7165],{"class":198},[186,14512,14513],{"class":202},"() ",[186,14515,529],{"class":669},[186,14517,4465],{"class":206},[186,14519,1676],{"class":202},[186,14521,14522],{"class":192},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[186,14524,14525],{"class":188,"line":3227},[186,14526,3867],{"emptyLinePlaceholder":1551},[186,14528,14529,14531,14533,14535,14537,14539,14541,14543],{"class":188,"line":3232},[186,14530,7992],{"class":202},[186,14532,2650],{"class":669},[186,14534,14473],{"class":532},[186,14536,2917],{"class":669},[186,14538,14458],{"class":202},[186,14540,2650],{"class":669},[186,14542,12932],{"class":202},[186,14544,14545],{"class":192}," \u002F\u002F1000\n",[186,14547,14548,14550,14552,14554,14556,14558,14560,14562],{"class":188,"line":3246},[186,14549,7992],{"class":202},[186,14551,2650],{"class":669},[186,14553,14473],{"class":532},[186,14555,2917],{"class":669},[186,14557,14458],{"class":202},[186,14559,2650],{"class":669},[186,14561,12932],{"class":202},[186,14563,14545],{"class":192},[186,14565,14566],{"class":188,"line":3251},[186,14567,3867],{"emptyLinePlaceholder":1551},[186,14569,14570,14572,14574,14576],{"class":188,"line":4044},[186,14571,3770],{"class":198},[186,14573,832],{"class":202},[186,14575,3775],{"class":532},[186,14577,1112],{"class":202},[186,14579,14580],{"class":188,"line":4058},[186,14581,3867],{"emptyLinePlaceholder":1551},[186,14583,14584,14586,14588],{"class":188,"line":4066},[186,14585,5556],{"class":669},[186,14587,5559],{"class":206},[186,14589,634],{"class":202},[186,14591,14592],{"class":188,"line":4071},[186,14593,639],{"class":202},[14,14595,14597],{"id":14596},"_65引用的本质","6.5引用的本质",[169,14599,14600,14601],{},"本质：",[54,14602,14603],{},"引用的本质在c++内部实现是一个指针常量.",[176,14605,14607],{"className":1612,"code":14606,"language":1614,"meta":181,"style":181},"\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",[183,14608,14609,14614,14630,14644,14648,14657,14669,14674,14679,14690,14703,14707,14723,14740,14744,14752,14760],{"__ignoreMap":181},[186,14610,14611],{"class":188,"line":189},[186,14612,14613],{"class":192},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[186,14615,14616,14618,14620,14622,14624,14627],{"class":188,"line":49},[186,14617,6827],{"class":669},[186,14619,12848],{"class":198},[186,14621,832],{"class":202},[186,14623,14029],{"class":669},[186,14625,14626],{"class":835}," ref",[186,14628,14629],{"class":202},"){\n",[186,14631,14632,14635,14637,14639,14641],{"class":188,"line":219},[186,14633,14634],{"class":202},"    ref ",[186,14636,529],{"class":669},[186,14638,7217],{"class":206},[186,14640,1676],{"class":202},[186,14642,14643],{"class":192}," \u002F\u002F ref是引用，转换为*ref = 100\n",[186,14645,14646],{"class":188,"line":225},[186,14647,639],{"class":202},[186,14649,14650,14652,14654],{"class":188,"line":242},[186,14651,1626],{"class":669},[186,14653,3440],{"class":198},[186,14655,14656],{"class":202},"(){\n",[186,14658,14659,14661,14663,14665,14667],{"class":188,"line":248},[186,14660,3452],{"class":669},[186,14662,12332],{"class":202},[186,14664,529],{"class":669},[186,14666,3505],{"class":206},[186,14668,634],{"class":202},[186,14670,14671],{"class":188,"line":265},[186,14672,14673],{"class":202},"    \n",[186,14675,14676],{"class":188,"line":271},[186,14677,14678],{"class":192},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[186,14680,14681,14683,14685,14687],{"class":188,"line":288},[186,14682,14394],{"class":669},[186,14684,14397],{"class":202},[186,14686,529],{"class":669},[186,14688,14689],{"class":202}," a; \n",[186,14691,14692,14694,14696,14698,14700],{"class":188,"line":294},[186,14693,14634],{"class":202},[186,14695,529],{"class":669},[186,14697,10413],{"class":206},[186,14699,1676],{"class":202},[186,14701,14702],{"class":192}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[186,14704,14705],{"class":188,"line":1212},[186,14706,14673],{"class":202},[186,14708,14709,14711,14713,14715,14717,14719,14721],{"class":188,"line":1223},[186,14710,7992],{"class":202},[186,14712,2650],{"class":669},[186,14714,14133],{"class":532},[186,14716,2917],{"class":669},[186,14718,12332],{"class":202},[186,14720,2650],{"class":669},[186,14722,10303],{"class":202},[186,14724,14725,14727,14729,14732,14734,14736,14738],{"class":188,"line":1236},[186,14726,7992],{"class":202},[186,14728,2650],{"class":669},[186,14730,14731],{"class":532}," \"ref:\"",[186,14733,2917],{"class":669},[186,14735,14397],{"class":202},[186,14737,2650],{"class":669},[186,14739,10303],{"class":202},[186,14741,14742],{"class":188,"line":3096},[186,14743,14673],{"class":202},[186,14745,14746,14749],{"class":188,"line":3110},[186,14747,14748],{"class":198},"    func",[186,14750,14751],{"class":202},"(a);\n",[186,14753,14754,14756,14758],{"class":188,"line":3115},[186,14755,5556],{"class":669},[186,14757,5559],{"class":206},[186,14759,634],{"class":202},[186,14761,14762],{"class":188,"line":3121},[186,14763,639],{"class":202},[169,14765,12795],{},[34,14767,14768,14771],{},[22,14769,14770],{},"引用的本质，就是一个指针常量",[22,14772,14773],{},"引用一旦初始化，就不可以发生改变",[14,14775,14777],{"id":14776},"_66常量引用","6.6常量引用",[169,14779,14780],{},"作用：常量引用主要用来修饰形参",[169,14782,14783,14784,14787],{},"在函数形参列表中，可以加",[54,14785,14786],{},"const修饰形参","，防止形参改变实参",[176,14789,14791],{"className":1612,"code":14790,"language":1614,"meta":181,"style":181},"\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",[183,14792,14793,14798,14803,14822,14827,14840,14844,14848,14856,14860,14865,14870,14884,14888,14896,14908,14912,14917,14929,14936,14940,14950,14954,14962],{"__ignoreMap":181},[186,14794,14795],{"class":188,"line":189},[186,14796,14797],{"class":192},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[186,14799,14800],{"class":188,"line":49},[186,14801,14802],{"class":192},"\u002F\u002F加上const就不能修改实参的\n",[186,14804,14805,14807,14810,14812,14814,14817,14820],{"class":188,"line":219},[186,14806,6827],{"class":669},[186,14808,14809],{"class":198}," showValue",[186,14811,832],{"class":202},[186,14813,8255],{"class":669},[186,14815,14816],{"class":669}," int&",[186,14818,14819],{"class":835}," v",[186,14821,13905],{"class":202},[186,14823,14824],{"class":188,"line":225},[186,14825,14826],{"class":192},"    \u002F\u002Fv += 100;\n",[186,14828,14829,14831,14833,14836,14838],{"class":188,"line":242},[186,14830,7992],{"class":202},[186,14832,2650],{"class":669},[186,14834,14835],{"class":202}," v ",[186,14837,2650],{"class":669},[186,14839,10303],{"class":202},[186,14841,14842],{"class":188,"line":248},[186,14843,639],{"class":202},[186,14845,14846],{"class":188,"line":265},[186,14847,3867],{"emptyLinePlaceholder":1551},[186,14849,14850,14852,14854],{"class":188,"line":271},[186,14851,1626],{"class":669},[186,14853,3440],{"class":198},[186,14855,12316],{"class":202},[186,14857,14858],{"class":188,"line":288},[186,14859,3867],{"emptyLinePlaceholder":1551},[186,14861,14862],{"class":188,"line":294},[186,14863,14864],{"class":192},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[186,14866,14867],{"class":188,"line":1212},[186,14868,14869],{"class":192},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[186,14871,14872,14874,14876,14878,14880,14882],{"class":188,"line":1223},[186,14873,12684],{"class":669},[186,14875,14816],{"class":669},[186,14877,14397],{"class":202},[186,14879,529],{"class":669},[186,14881,3505],{"class":206},[186,14883,634],{"class":202},[186,14885,14886],{"class":188,"line":1236},[186,14887,3867],{"emptyLinePlaceholder":1551},[186,14889,14890,14893],{"class":188,"line":3096},[186,14891,14892],{"class":192},"    \u002F\u002Fref = 100;",[186,14894,14895],{"class":192},"  \u002F\u002F加入const后不可以修改变量\n",[186,14897,14898,14900,14902,14904,14906],{"class":188,"line":3110},[186,14899,7992],{"class":202},[186,14901,2650],{"class":669},[186,14903,14397],{"class":202},[186,14905,2650],{"class":669},[186,14907,10303],{"class":202},[186,14909,14910],{"class":188,"line":3115},[186,14911,3867],{"emptyLinePlaceholder":1551},[186,14913,14914],{"class":188,"line":3121},[186,14915,14916],{"class":192},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[186,14918,14919,14921,14923,14925,14927],{"class":188,"line":3142},[186,14920,3452],{"class":669},[186,14922,12332],{"class":202},[186,14924,529],{"class":669},[186,14926,3505],{"class":206},[186,14928,634],{"class":202},[186,14930,14931,14934],{"class":188,"line":3147},[186,14932,14933],{"class":198},"    showValue",[186,14935,14751],{"class":202},[186,14937,14938],{"class":188,"line":3161},[186,14939,3867],{"emptyLinePlaceholder":1551},[186,14941,14942,14944,14946,14948],{"class":188,"line":3166},[186,14943,3770],{"class":198},[186,14945,832],{"class":202},[186,14947,3775],{"class":532},[186,14949,1112],{"class":202},[186,14951,14952],{"class":188,"line":3195},[186,14953,3867],{"emptyLinePlaceholder":1551},[186,14955,14956,14958,14960],{"class":188,"line":3200},[186,14957,5556],{"class":669},[186,14959,5559],{"class":206},[186,14961,634],{"class":202},[186,14963,14964],{"class":188,"line":3217},[186,14965,639],{"class":202},[1524,14967,14968],{},"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":181,"searchDepth":49,"depth":49,"links":14970},[14971,14972,14973,14974,14975,14976],{"id":13503,"depth":49,"text":13504},{"id":13682,"depth":49,"text":13683},{"id":13865,"depth":49,"text":13866},{"id":14269,"depth":49,"text":14270},{"id":14596,"depth":49,"text":14597},{"id":14776,"depth":49,"text":14777},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13495,"description":181},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14983,"title":14984,"body":14985,"description":181,"extension":1549,"meta":16065,"navigation":1551,"path":16066,"seo":16067,"stem":16068,"__hash__":16069},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14986,"toc":16057},[14987,14990,14994,14997,15002,15233,15235,15246,15250,15253,15261,15365,15368,15372,15375,15379,15382,15387,15409,15415,15742,15745,15749,15757,16054],[10,14988,14984],{"id":14989},"_7函数高级部分",[14,14991,14993],{"id":14992},"_71函数默认参数","7.1函数默认参数",[169,14995,14996],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[169,14998,6647,14999],{},[183,15000,15001],{}," 返回值类型  函数名 （参数= 默认值）{}",[176,15003,15005],{"className":1612,"code":15004,"language":1614,"meta":181,"style":181},"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",[183,15006,15007,15042,15057,15061,15065,15070,15075,15104,15124,15134,15138,15142,15150,15154,15181,15203,15207,15217,15221,15229],{"__ignoreMap":181},[186,15008,15009,15011,15013,15015,15017,15019,15021,15023,15025,15028,15030,15032,15034,15036,15038,15040],{"class":188,"line":189},[186,15010,1626],{"class":669},[186,15012,12848],{"class":198},[186,15014,832],{"class":202},[186,15016,1626],{"class":669},[186,15018,2871],{"class":835},[186,15020,13898],{"class":202},[186,15022,1626],{"class":669},[186,15024,4299],{"class":835},[186,15026,15027],{"class":669}," =",[186,15029,3505],{"class":206},[186,15031,13898],{"class":202},[186,15033,1626],{"class":669},[186,15035,4315],{"class":835},[186,15037,15027],{"class":669},[186,15039,3505],{"class":206},[186,15041,13905],{"class":202},[186,15043,15044,15046,15048,15050,15052,15054],{"class":188,"line":49},[186,15045,5556],{"class":669},[186,15047,12332],{"class":202},[186,15049,2091],{"class":669},[186,15051,12345],{"class":202},[186,15053,2091],{"class":669},[186,15055,15056],{"class":202}," c;\n",[186,15058,15059],{"class":188,"line":219},[186,15060,639],{"class":202},[186,15062,15063],{"class":188,"line":225},[186,15064,3867],{"emptyLinePlaceholder":1551},[186,15066,15067],{"class":188,"line":242},[186,15068,15069],{"class":192},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[186,15071,15072],{"class":188,"line":248},[186,15073,15074],{"class":192},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[186,15076,15077,15079,15082,15084,15086,15088,15090,15092,15094,15096,15098,15100,15102],{"class":188,"line":265},[186,15078,1626],{"class":669},[186,15080,15081],{"class":198}," func2",[186,15083,832],{"class":202},[186,15085,1626],{"class":669},[186,15087,2871],{"class":835},[186,15089,15027],{"class":669},[186,15091,3505],{"class":206},[186,15093,13898],{"class":202},[186,15095,1626],{"class":669},[186,15097,4299],{"class":835},[186,15099,15027],{"class":669},[186,15101,3505],{"class":206},[186,15103,1112],{"class":202},[186,15105,15106,15108,15110,15112,15114,15116,15118,15120,15122],{"class":188,"line":271},[186,15107,1626],{"class":669},[186,15109,15081],{"class":198},[186,15111,832],{"class":202},[186,15113,1626],{"class":669},[186,15115,2871],{"class":835},[186,15117,13898],{"class":202},[186,15119,1626],{"class":669},[186,15121,4299],{"class":835},[186,15123,13905],{"class":202},[186,15125,15126,15128,15130,15132],{"class":188,"line":288},[186,15127,5556],{"class":669},[186,15129,12332],{"class":202},[186,15131,2091],{"class":669},[186,15133,13926],{"class":202},[186,15135,15136],{"class":188,"line":294},[186,15137,639],{"class":202},[186,15139,15140],{"class":188,"line":1212},[186,15141,3867],{"emptyLinePlaceholder":1551},[186,15143,15144,15146,15148],{"class":188,"line":1223},[186,15145,1626],{"class":669},[186,15147,3440],{"class":198},[186,15149,12316],{"class":202},[186,15151,15152],{"class":188,"line":1236},[186,15153,3867],{"emptyLinePlaceholder":1551},[186,15155,15156,15158,15160,15163,15165,15167,15169,15171,15173,15175,15177,15179],{"class":188,"line":3096},[186,15157,7992],{"class":202},[186,15159,2650],{"class":669},[186,15161,15162],{"class":532}," \"ret = \"",[186,15164,2917],{"class":669},[186,15166,12848],{"class":198},[186,15168,832],{"class":202},[186,15170,801],{"class":206},[186,15172,13898],{"class":202},[186,15174,801],{"class":206},[186,15176,839],{"class":202},[186,15178,2650],{"class":669},[186,15180,10303],{"class":202},[186,15182,15183,15185,15187,15189,15191,15193,15195,15197,15199,15201],{"class":188,"line":3110},[186,15184,7992],{"class":202},[186,15186,2650],{"class":669},[186,15188,15162],{"class":532},[186,15190,2917],{"class":669},[186,15192,12848],{"class":198},[186,15194,832],{"class":202},[186,15196,1922],{"class":206},[186,15198,839],{"class":202},[186,15200,2650],{"class":669},[186,15202,10303],{"class":202},[186,15204,15205],{"class":188,"line":3115},[186,15206,3867],{"emptyLinePlaceholder":1551},[186,15208,15209,15211,15213,15215],{"class":188,"line":3121},[186,15210,3770],{"class":198},[186,15212,832],{"class":202},[186,15214,3775],{"class":532},[186,15216,1112],{"class":202},[186,15218,15219],{"class":188,"line":3142},[186,15220,3867],{"emptyLinePlaceholder":1551},[186,15222,15223,15225,15227],{"class":188,"line":3147},[186,15224,5556],{"class":669},[186,15226,5559],{"class":206},[186,15228,634],{"class":202},[186,15230,15231],{"class":188,"line":3161},[186,15232,639],{"class":202},[169,15234,12795],{},[34,15236,15237,15240,15243],{},[22,15238,15239],{},"我传就用我；没传就用你",[22,15241,15242],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[22,15244,15245],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15247,15249],{"id":15248},"_72函数的占位参数","7.2函数的占位参数",[169,15251,15252],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[169,15254,15255,15257,15258],{},[54,15256,6647],{}," ",[183,15259,15260],{},"返回值类型 函数名 (数据类型){}",[176,15262,15264],{"className":1612,"code":15263,"language":1614,"meta":181,"style":181},"\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",[183,15265,15266,15271,15289,15302,15306,15314,15318,15335,15339,15349,15353,15361],{"__ignoreMap":181},[186,15267,15268],{"class":188,"line":189},[186,15269,15270],{"class":192},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[186,15272,15273,15275,15277,15279,15281,15283,15285,15287],{"class":188,"line":49},[186,15274,6827],{"class":669},[186,15276,12848],{"class":198},[186,15278,832],{"class":202},[186,15280,1626],{"class":669},[186,15282,2871],{"class":835},[186,15284,13898],{"class":202},[186,15286,1626],{"class":669},[186,15288,13905],{"class":202},[186,15290,15291,15293,15295,15298,15300],{"class":188,"line":219},[186,15292,7992],{"class":202},[186,15294,2650],{"class":669},[186,15296,15297],{"class":532}," \"this is func\"",[186,15299,2917],{"class":669},[186,15301,10303],{"class":202},[186,15303,15304],{"class":188,"line":225},[186,15305,639],{"class":202},[186,15307,15308,15310,15312],{"class":188,"line":242},[186,15309,1626],{"class":669},[186,15311,3440],{"class":198},[186,15313,12316],{"class":202},[186,15315,15316],{"class":188,"line":248},[186,15317,3867],{"emptyLinePlaceholder":1551},[186,15319,15320,15322,15324,15326,15328,15330,15332],{"class":188,"line":265},[186,15321,14748],{"class":198},[186,15323,832],{"class":202},[186,15325,2056],{"class":206},[186,15327,1988],{"class":202},[186,15329,2056],{"class":206},[186,15331,7429],{"class":202},[186,15333,15334],{"class":192}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[186,15336,15337],{"class":188,"line":271},[186,15338,3867],{"emptyLinePlaceholder":1551},[186,15340,15341,15343,15345,15347],{"class":188,"line":288},[186,15342,3770],{"class":198},[186,15344,832],{"class":202},[186,15346,3775],{"class":532},[186,15348,1112],{"class":202},[186,15350,15351],{"class":188,"line":294},[186,15352,3867],{"emptyLinePlaceholder":1551},[186,15354,15355,15357,15359],{"class":188,"line":1212},[186,15356,5556],{"class":669},[186,15358,5559],{"class":206},[186,15360,634],{"class":202},[186,15362,15363],{"class":188,"line":1223},[186,15364,639],{"class":202},[169,15366,15367],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15369,15371],{"id":15370},"_73函数重载","7.3函数重载",[169,15373,15374],{},"意思是函数名是可以相同的",[29,15376,15378],{"id":15377},"_731基本语法","7.3.1基本语法",[169,15380,15381],{},"作用：函数名可以相同，提高复用性",[169,15383,15384],{},[54,15385,15386],{},"函数重载满足条件：",[19,15388,15389,15392,15395],{},[22,15390,15391],{},"同一个作用域下",[22,15393,15394],{},"函数名称相同",[22,15396,15397,15398,15401,15402,15405,15406],{},"函数参数",[54,15399,15400],{},"类型不同","  或者 ",[54,15403,15404],{},"个数不同"," 或者 ",[54,15407,15408],{},"顺序不同",[169,15410,15411,15414],{},[54,15412,15413],{},"注意:","  函数的返回值不可以作为函数重载的条件",[176,15416,15418],{"className":11404,"code":15417,"language":11406,"meta":181,"style":181},"\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",[183,15419,15420,15425,15433,15437,15450,15454,15468,15472,15485,15489,15504,15508,15521,15525,15546,15550,15563,15567,15587,15591,15604,15608,15612,15617,15622,15627,15632,15637,15641,15645,15653,15657,15663,15673,15683,15697,15712,15716,15726,15730,15738],{"__ignoreMap":181},[186,15421,15422],{"class":188,"line":189},[186,15423,15424],{"class":192},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[186,15426,15427,15429,15431],{"class":188,"line":49},[186,15428,6827],{"class":669},[186,15430,12848],{"class":198},[186,15432,3443],{"class":202},[186,15434,15435],{"class":188,"line":219},[186,15436,3018],{"class":202},[186,15438,15439,15441,15443,15446,15448],{"class":188,"line":225},[186,15440,7992],{"class":202},[186,15442,2650],{"class":669},[186,15444,15445],{"class":532}," \"func 的调用！\"",[186,15447,2917],{"class":669},[186,15449,10303],{"class":202},[186,15451,15452],{"class":188,"line":242},[186,15453,639],{"class":202},[186,15455,15456,15458,15460,15462,15464,15466],{"class":188,"line":248},[186,15457,6827],{"class":669},[186,15459,12848],{"class":198},[186,15461,832],{"class":202},[186,15463,1626],{"class":669},[186,15465,2871],{"class":835},[186,15467,1629],{"class":202},[186,15469,15470],{"class":188,"line":265},[186,15471,3018],{"class":202},[186,15473,15474,15476,15478,15481,15483],{"class":188,"line":271},[186,15475,7992],{"class":202},[186,15477,2650],{"class":669},[186,15479,15480],{"class":532}," \"func (int a) 的调用！\"",[186,15482,2917],{"class":669},[186,15484,10303],{"class":202},[186,15486,15487],{"class":188,"line":288},[186,15488,639],{"class":202},[186,15490,15491,15493,15495,15497,15500,15502],{"class":188,"line":294},[186,15492,6827],{"class":669},[186,15494,12848],{"class":198},[186,15496,832],{"class":202},[186,15498,15499],{"class":669},"double",[186,15501,2871],{"class":835},[186,15503,1629],{"class":202},[186,15505,15506],{"class":188,"line":1212},[186,15507,3018],{"class":202},[186,15509,15510,15512,15514,15517,15519],{"class":188,"line":1223},[186,15511,7992],{"class":202},[186,15513,2650],{"class":669},[186,15515,15516],{"class":532}," \"func (double a)的调用！\"",[186,15518,2917],{"class":669},[186,15520,10303],{"class":202},[186,15522,15523],{"class":188,"line":1236},[186,15524,639],{"class":202},[186,15526,15527,15529,15531,15533,15535,15537,15540,15542,15544],{"class":188,"line":3096},[186,15528,6827],{"class":669},[186,15530,12848],{"class":198},[186,15532,832],{"class":202},[186,15534,1626],{"class":669},[186,15536,2871],{"class":835},[186,15538,15539],{"class":202}," ,",[186,15541,15499],{"class":669},[186,15543,4299],{"class":835},[186,15545,1629],{"class":202},[186,15547,15548],{"class":188,"line":3110},[186,15549,3018],{"class":202},[186,15551,15552,15554,15556,15559,15561],{"class":188,"line":3115},[186,15553,7992],{"class":202},[186,15555,2650],{"class":669},[186,15557,15558],{"class":532}," \"func (int a ,double b) 的调用！\"",[186,15560,2917],{"class":669},[186,15562,10303],{"class":202},[186,15564,15565],{"class":188,"line":3121},[186,15566,639],{"class":202},[186,15568,15569,15571,15573,15575,15577,15579,15581,15583,15585],{"class":188,"line":3142},[186,15570,6827],{"class":669},[186,15572,12848],{"class":198},[186,15574,832],{"class":202},[186,15576,15499],{"class":669},[186,15578,2871],{"class":835},[186,15580,15539],{"class":202},[186,15582,1626],{"class":669},[186,15584,4299],{"class":835},[186,15586,1629],{"class":202},[186,15588,15589],{"class":188,"line":3147},[186,15590,3018],{"class":202},[186,15592,15593,15595,15597,15600,15602],{"class":188,"line":3161},[186,15594,7992],{"class":202},[186,15596,2650],{"class":669},[186,15598,15599],{"class":532}," \"func (double a ,int b)的调用！\"",[186,15601,2917],{"class":669},[186,15603,10303],{"class":202},[186,15605,15606],{"class":188,"line":3166},[186,15607,639],{"class":202},[186,15609,15610],{"class":188,"line":3195},[186,15611,3867],{"emptyLinePlaceholder":1551},[186,15613,15614],{"class":188,"line":3200},[186,15615,15616],{"class":192},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[186,15618,15619],{"class":188,"line":3217},[186,15620,15621],{"class":192},"\u002F\u002Fint func(double a, int b)\n",[186,15623,15624],{"class":188,"line":3222},[186,15625,15626],{"class":192},"\u002F\u002F{\n",[186,15628,15629],{"class":188,"line":3227},[186,15630,15631],{"class":192},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[186,15633,15634],{"class":188,"line":3232},[186,15635,15636],{"class":192},"\u002F\u002F}\n",[186,15638,15639],{"class":188,"line":3246},[186,15640,3867],{"emptyLinePlaceholder":1551},[186,15642,15643],{"class":188,"line":3251},[186,15644,3867],{"emptyLinePlaceholder":1551},[186,15646,15647,15649,15651],{"class":188,"line":4044},[186,15648,1626],{"class":669},[186,15650,3440],{"class":198},[186,15652,12316],{"class":202},[186,15654,15655],{"class":188,"line":4058},[186,15656,3867],{"emptyLinePlaceholder":1551},[186,15658,15659,15661],{"class":188,"line":4066},[186,15660,14748],{"class":198},[186,15662,7099],{"class":202},[186,15664,15665,15667,15669,15671],{"class":188,"line":4071},[186,15666,14748],{"class":198},[186,15668,832],{"class":202},[186,15670,2056],{"class":206},[186,15672,1112],{"class":202},[186,15674,15675,15677,15679,15681],{"class":188,"line":4077},[186,15676,14748],{"class":198},[186,15678,832],{"class":202},[186,15680,1670],{"class":206},[186,15682,1112],{"class":202},[186,15684,15685,15687,15689,15691,15693,15695],{"class":188,"line":4083},[186,15686,14748],{"class":198},[186,15688,832],{"class":202},[186,15690,2056],{"class":206},[186,15692,1988],{"class":202},[186,15694,1670],{"class":206},[186,15696,1112],{"class":202},[186,15698,15699,15701,15703,15705,15708,15710],{"class":188,"line":4088},[186,15700,14748],{"class":198},[186,15702,832],{"class":202},[186,15704,1670],{"class":206},[186,15706,15707],{"class":202}," , ",[186,15709,2056],{"class":206},[186,15711,1112],{"class":202},[186,15713,15714],{"class":188,"line":9411},[186,15715,14673],{"class":202},[186,15717,15718,15720,15722,15724],{"class":188,"line":9435},[186,15719,3770],{"class":198},[186,15721,832],{"class":202},[186,15723,3775],{"class":532},[186,15725,1112],{"class":202},[186,15727,15728],{"class":188,"line":9440},[186,15729,3867],{"emptyLinePlaceholder":1551},[186,15731,15732,15734,15736],{"class":188,"line":9446},[186,15733,5556],{"class":669},[186,15735,5559],{"class":206},[186,15737,634],{"class":202},[186,15739,15740],{"class":188,"line":9473},[186,15741,639],{"class":202},[169,15743,15744],{},"重点：函数返回值不可以作为函数重载条件！",[29,15746,15748],{"id":15747},"_732注意事项","7.3.2注意事项",[19,15750,15751,15754],{},[22,15752,15753],{},"引用作为重载条件!!!",[22,15755,15756],{},"函数重载碰到函数默认参数",[176,15758,15760],{"className":1612,"code":15759,"language":1614,"meta":181,"style":181},"\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",[183,15761,15762,15767,15772,15776,15792,15796,15809,15813,15817,15835,15839,15852,15856,15860,15864,15869,15873,15897,15901,15914,15918,15922,15936,15940,15953,15957,15961,15969,15973,15985,15995,16008,16012,16016,16024,16028,16038,16042,16050],{"__ignoreMap":181},[186,15763,15764],{"class":188,"line":189},[186,15765,15766],{"class":192},"\u002F\u002F函数重载注意事项\n",[186,15768,15769],{"class":188,"line":49},[186,15770,15771],{"class":192},"\u002F\u002F1、引用作为重载条件\n",[186,15773,15774],{"class":188,"line":219},[186,15775,3867],{"emptyLinePlaceholder":1551},[186,15777,15778,15780,15782,15784,15786,15788,15790],{"class":188,"line":225},[186,15779,6827],{"class":669},[186,15781,12848],{"class":198},[186,15783,832],{"class":202},[186,15785,1626],{"class":669},[186,15787,12047],{"class":669},[186,15789,948],{"class":835},[186,15791,1629],{"class":202},[186,15793,15794],{"class":188,"line":242},[186,15795,3018],{"class":202},[186,15797,15798,15800,15802,15805,15807],{"class":188,"line":248},[186,15799,7992],{"class":202},[186,15801,2650],{"class":669},[186,15803,15804],{"class":532}," \"func (int &a) 调用 \"",[186,15806,2917],{"class":669},[186,15808,10303],{"class":202},[186,15810,15811],{"class":188,"line":265},[186,15812,639],{"class":202},[186,15814,15815],{"class":188,"line":271},[186,15816,3867],{"emptyLinePlaceholder":1551},[186,15818,15819,15821,15823,15825,15827,15829,15831,15833],{"class":188,"line":288},[186,15820,6827],{"class":669},[186,15822,12848],{"class":198},[186,15824,832],{"class":202},[186,15826,8255],{"class":669},[186,15828,3849],{"class":669},[186,15830,12047],{"class":669},[186,15832,948],{"class":835},[186,15834,1629],{"class":202},[186,15836,15837],{"class":188,"line":294},[186,15838,3018],{"class":202},[186,15840,15841,15843,15845,15848,15850],{"class":188,"line":1212},[186,15842,7992],{"class":202},[186,15844,2650],{"class":669},[186,15846,15847],{"class":532}," \"func (const int &a) 调用 \"",[186,15849,2917],{"class":669},[186,15851,10303],{"class":202},[186,15853,15854],{"class":188,"line":1223},[186,15855,639],{"class":202},[186,15857,15858],{"class":188,"line":1236},[186,15859,3867],{"emptyLinePlaceholder":1551},[186,15861,15862],{"class":188,"line":3096},[186,15863,3867],{"emptyLinePlaceholder":1551},[186,15865,15866],{"class":188,"line":3110},[186,15867,15868],{"class":192},"\u002F\u002F2、函数重载碰到函数默认参数\n",[186,15870,15871],{"class":188,"line":3115},[186,15872,3867],{"emptyLinePlaceholder":1551},[186,15874,15875,15877,15879,15881,15883,15885,15887,15889,15891,15893,15895],{"class":188,"line":3121},[186,15876,6827],{"class":669},[186,15878,15081],{"class":198},[186,15880,832],{"class":202},[186,15882,1626],{"class":669},[186,15884,2871],{"class":835},[186,15886,13898],{"class":202},[186,15888,1626],{"class":669},[186,15890,4299],{"class":835},[186,15892,15027],{"class":669},[186,15894,3505],{"class":206},[186,15896,1629],{"class":202},[186,15898,15899],{"class":188,"line":3142},[186,15900,3018],{"class":202},[186,15902,15903,15905,15907,15910,15912],{"class":188,"line":3147},[186,15904,7992],{"class":202},[186,15906,2650],{"class":669},[186,15908,15909],{"class":532}," \"func2(int a, int b = 10) 调用\"",[186,15911,2917],{"class":669},[186,15913,10303],{"class":202},[186,15915,15916],{"class":188,"line":3161},[186,15917,639],{"class":202},[186,15919,15920],{"class":188,"line":3166},[186,15921,3867],{"emptyLinePlaceholder":1551},[186,15923,15924,15926,15928,15930,15932,15934],{"class":188,"line":3195},[186,15925,6827],{"class":669},[186,15927,15081],{"class":198},[186,15929,832],{"class":202},[186,15931,1626],{"class":669},[186,15933,2871],{"class":835},[186,15935,1629],{"class":202},[186,15937,15938],{"class":188,"line":3200},[186,15939,3018],{"class":202},[186,15941,15942,15944,15946,15949,15951],{"class":188,"line":3217},[186,15943,7992],{"class":202},[186,15945,2650],{"class":669},[186,15947,15948],{"class":532}," \"func2(int a) 调用\"",[186,15950,2917],{"class":669},[186,15952,10303],{"class":202},[186,15954,15955],{"class":188,"line":3222},[186,15956,639],{"class":202},[186,15958,15959],{"class":188,"line":3227},[186,15960,3867],{"emptyLinePlaceholder":1551},[186,15962,15963,15965,15967],{"class":188,"line":3232},[186,15964,1626],{"class":669},[186,15966,3440],{"class":198},[186,15968,12316],{"class":202},[186,15970,15971],{"class":188,"line":3246},[186,15972,14673],{"class":202},[186,15974,15975,15977,15979,15981,15983],{"class":188,"line":3251},[186,15976,3452],{"class":669},[186,15978,12332],{"class":202},[186,15980,529],{"class":669},[186,15982,3505],{"class":206},[186,15984,634],{"class":202},[186,15986,15987,15989,15992],{"class":188,"line":4044},[186,15988,14748],{"class":198},[186,15990,15991],{"class":202},"(a);",[186,15993,15994],{"class":192}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[186,15996,15997,15999,16001,16003,16005],{"class":188,"line":4058},[186,15998,14748],{"class":198},[186,16000,832],{"class":202},[186,16002,2056],{"class":206},[186,16004,7429],{"class":202},[186,16006,16007],{"class":192},"\u002F\u002F调用有const   10是个常量\n",[186,16009,16010],{"class":188,"line":4066},[186,16011,3867],{"emptyLinePlaceholder":1551},[186,16013,16014],{"class":188,"line":4071},[186,16015,3867],{"emptyLinePlaceholder":1551},[186,16017,16018,16021],{"class":188,"line":4077},[186,16019,16020],{"class":192},"    \u002F\u002Ffunc2(10);",[186,16022,16023],{"class":192}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[186,16025,16026],{"class":188,"line":4083},[186,16027,3867],{"emptyLinePlaceholder":1551},[186,16029,16030,16032,16034,16036],{"class":188,"line":4088},[186,16031,3770],{"class":198},[186,16033,832],{"class":202},[186,16035,3775],{"class":532},[186,16037,1112],{"class":202},[186,16039,16040],{"class":188,"line":9411},[186,16041,3867],{"emptyLinePlaceholder":1551},[186,16043,16044,16046,16048],{"class":188,"line":9435},[186,16045,5556],{"class":669},[186,16047,5559],{"class":206},[186,16049,634],{"class":202},[186,16051,16052],{"class":188,"line":9440},[186,16053,639],{"class":202},[1524,16055,16056],{},"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":181,"searchDepth":49,"depth":49,"links":16058},[16059,16060,16061],{"id":14992,"depth":49,"text":14993},{"id":15248,"depth":49,"text":15249},{"id":15370,"depth":49,"text":15371,"children":16062},[16063,16064],{"id":15377,"depth":219,"text":15378},{"id":15747,"depth":219,"text":15748},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14984,"description":181},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16071,"title":16072,"body":16073,"description":24826,"extension":1549,"meta":24827,"navigation":1551,"path":24828,"seo":24829,"stem":24830,"__hash__":24831},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16074,"toc":24807},[16075,16078,16084,16091,16096,16099,16102,16105,16109,16113,16116,16119,16127,16132,16135,16142,16147,16306,16309,16562,16565,16568,16571,16576,16579,16582,16593,16598,16834,16838,16848,16851,16859,17006,17010,17013,17016,17020,17464,17468,17476,17484,18396,18403,18408,19036,19039,19042,19045,19164,19167,19254,19257,19383,19386,19480,19483,19836,19840,19848,19852,19859,19862,19865,19876,19882,19887,19899,19907,19927,19935,19952,20138,20141,20145,20148,20151,20154,20157,20160,20163,20166,20626,20632,20636,20639,20650,21237,21240,21729,21733,21736,21739,21742,21745,21748,21756,22152,22156,22159,22162,22609,22612,22615,22620,22623,22628,22631,22635,22638,22640,22646,22649,22955,22965,23006,23010,23013,23015,23048,23051,23358,23360,23375,23378,23401,23410,23416,23419,23423,23426,23429,23434,23445,23450,23458,23463,23593,23596,23599,23774,23779,23991,23995,23998,24112,24117,24356,24360,24364,24367,24370,24375,24480,24483,24486,24489,24493,24604,24607,24610,24615,24667,24670,24673,24678,24724,24727,24732,24800,24802,24805],[10,16076,16072],{"id":16077},"_8类和对象",[169,16079,16080,16081],{},"C++面向对象的三大特性为",[54,16082,16083],{},"封装、继承、多态",[169,16085,16086,16087,16090],{},"C++认为",[54,16088,16089],{},"万事万物都皆为对象","，对象上有其属性和行为",[169,16092,16093],{},[54,16094,16095],{},"例如：",[169,16097,16098],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[169,16100,16101],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[169,16103,16104],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16106,16108],{"id":16107},"_81封装","8.1封装",[29,16110,16112],{"id":16111},"_811封装的意义","8.1.1封装的意义",[169,16114,16115],{},"封装是C++面向对象三大特性之一",[169,16117,16118],{},"封装的意义：",[19,16120,16121,16124],{},[22,16122,16123],{},"将属性和行为作为一个整体，表现生活中的事物",[22,16125,16126],{},"将属性和行为加以权限控制",[169,16128,16129],{},[54,16130,16131],{},"封装意义一：",[169,16133,16134],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[169,16136,16137,15257,16139],{},[54,16138,6647],{},[183,16140,16141],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[34,16143,16144],{},[22,16145,16146],{},"**示例1：**设计一个圆类，求圆的周长",[176,16148,16150],{"className":1612,"code":16149,"language":1614,"meta":181,"style":181},"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",[183,16151,16152,16160,16164,16169,16174,16179,16184,16191,16196,16206,16210,16228,16232,16236,16244,16248,16253,16258,16263,16268,16279,16302],{"__ignoreMap":181},[186,16153,16154,16157],{"class":188,"line":189},[186,16155,16156],{"class":669},"class",[186,16158,16159],{"class":198}," Circle\n",[186,16161,16162],{"class":188,"line":49},[186,16163,3018],{"class":202},[186,16165,16166],{"class":188,"line":219},[186,16167,16168],{"class":192},"    \u002F\u002F访问权限\n",[186,16170,16171],{"class":188,"line":225},[186,16172,16173],{"class":192},"    \u002F\u002F公共权限\n",[186,16175,16176],{"class":188,"line":242},[186,16177,16178],{"class":669},"public:\n",[186,16180,16181],{"class":188,"line":248},[186,16182,16183],{"class":192},"    \u002F\u002F属性\n",[186,16185,16186,16188],{"class":188,"line":265},[186,16187,3452],{"class":669},[186,16189,16190],{"class":202}," m_r;\n",[186,16192,16193],{"class":188,"line":271},[186,16194,16195],{"class":192},"    \u002F\u002F行为\n",[186,16197,16198,16201,16204],{"class":188,"line":288},[186,16199,16200],{"class":669},"    double",[186,16202,16203],{"class":198}," calculateZC",[186,16205,3443],{"class":202},[186,16207,16208],{"class":188,"line":294},[186,16209,3497],{"class":202},[186,16211,16212,16215,16218,16220,16223,16225],{"class":188,"line":1212},[186,16213,16214],{"class":669},"        return",[186,16216,16217],{"class":206}," 2",[186,16219,2065],{"class":669},[186,16221,16222],{"class":202},"PI",[186,16224,2065],{"class":669},[186,16226,16227],{"class":202},"m_r;\n",[186,16229,16230],{"class":188,"line":1223},[186,16231,3654],{"class":202},[186,16233,16234],{"class":188,"line":1236},[186,16235,5461],{"class":202},[186,16237,16238,16240,16242],{"class":188,"line":3096},[186,16239,1626],{"class":669},[186,16241,3440],{"class":198},[186,16243,3443],{"class":202},[186,16245,16246],{"class":188,"line":3110},[186,16247,3018],{"class":202},[186,16249,16250],{"class":188,"line":3115},[186,16251,16252],{"class":192},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[186,16254,16255],{"class":188,"line":3121},[186,16256,16257],{"class":192},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[186,16259,16260],{"class":188,"line":3142},[186,16261,16262],{"class":202},"    Circle c1;\n",[186,16264,16265],{"class":188,"line":3147},[186,16266,16267],{"class":192},"    \u002F\u002F给圆对象 的属性进行赋值\n",[186,16269,16270,16273,16275,16277],{"class":188,"line":3161},[186,16271,16272],{"class":202},"    c1.m_r",[186,16274,529],{"class":669},[186,16276,2056],{"class":206},[186,16278,634],{"class":202},[186,16280,16281,16283,16285,16288,16290,16293,16296,16298,16300],{"class":188,"line":3166},[186,16282,3023],{"class":202},[186,16284,2650],{"class":669},[186,16286,16287],{"class":532},"\"圆的周长\"",[186,16289,2650],{"class":669},[186,16291,16292],{"class":202},"c1.",[186,16294,16295],{"class":198},"calculateZC",[186,16297,3894],{"class":202},[186,16299,2650],{"class":669},[186,16301,2672],{"class":202},[186,16303,16304],{"class":188,"line":3195},[186,16305,639],{"class":202},[169,16307,16308],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[176,16310,16312],{"className":1612,"code":16311,"language":1614,"meta":181,"style":181},"#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",[183,16313,16314,16320,16330,16336,16342,16346,16350,16355,16362,16367,16385,16389,16399,16403,16408,16424,16428,16438,16442,16447,16455,16459,16491,16495,16499,16507,16511,16516,16521,16535,16549,16558],{"__ignoreMap":181},[186,16315,16316,16318],{"class":188,"line":189},[186,16317,3417],{"class":669},[186,16319,3420],{"class":532},[186,16321,16322,16324,16326,16328],{"class":188,"line":49},[186,16323,3425],{"class":669},[186,16325,3428],{"class":669},[186,16327,3431],{"class":198},[186,16329,634],{"class":202},[186,16331,16332,16334],{"class":188,"line":219},[186,16333,3417],{"class":669},[186,16335,9212],{"class":532},[186,16337,16338,16340],{"class":188,"line":225},[186,16339,16156],{"class":669},[186,16341,9225],{"class":198},[186,16343,16344],{"class":188,"line":242},[186,16345,3018],{"class":202},[186,16347,16348],{"class":188,"line":248},[186,16349,16178],{"class":669},[186,16351,16352],{"class":188,"line":265},[186,16353,16354],{"class":202},"    string m_name;\n",[186,16356,16357,16359],{"class":188,"line":271},[186,16358,3452],{"class":669},[186,16360,16361],{"class":202}," m_id;\n",[186,16363,16364],{"class":188,"line":288},[186,16365,16366],{"class":192},"    \u002F\u002F赋值姓名\n",[186,16368,16369,16372,16375,16377,16380,16383],{"class":188,"line":294},[186,16370,16371],{"class":669},"    void",[186,16373,16374],{"class":198}," setName",[186,16376,832],{"class":202},[186,16378,16379],{"class":198},"string",[186,16381,16382],{"class":835}," name",[186,16384,1629],{"class":202},[186,16386,16387],{"class":188,"line":1212},[186,16388,3497],{"class":202},[186,16390,16391,16394,16396],{"class":188,"line":1223},[186,16392,16393],{"class":202},"        m_name",[186,16395,529],{"class":669},[186,16397,16398],{"class":202},"name;\n",[186,16400,16401],{"class":188,"line":1236},[186,16402,3654],{"class":202},[186,16404,16405],{"class":188,"line":3096},[186,16406,16407],{"class":192},"    \u002F\u002F赋值学号\n",[186,16409,16410,16412,16415,16417,16419,16422],{"class":188,"line":3110},[186,16411,16371],{"class":669},[186,16413,16414],{"class":198}," setId",[186,16416,832],{"class":202},[186,16418,1626],{"class":669},[186,16420,16421],{"class":835}," id",[186,16423,1629],{"class":202},[186,16425,16426],{"class":188,"line":3115},[186,16427,3497],{"class":202},[186,16429,16430,16433,16435],{"class":188,"line":3121},[186,16431,16432],{"class":202},"        m_id",[186,16434,529],{"class":669},[186,16436,16437],{"class":202},"id;\n",[186,16439,16440],{"class":188,"line":3142},[186,16441,3654],{"class":202},[186,16443,16444],{"class":188,"line":3147},[186,16445,16446],{"class":192},"    \u002F\u002F打印学生信息\n",[186,16448,16449,16451,16453],{"class":188,"line":3161},[186,16450,16371],{"class":669},[186,16452,11078],{"class":198},[186,16454,3443],{"class":202},[186,16456,16457],{"class":188,"line":3166},[186,16458,3497],{"class":202},[186,16460,16461,16463,16465,16468,16470,16473,16475,16477,16479,16482,16484,16487,16489],{"class":188,"line":3195},[186,16462,4917],{"class":202},[186,16464,2650],{"class":669},[186,16466,16467],{"class":532},"\"姓名：\"",[186,16469,2650],{"class":669},[186,16471,16472],{"class":202},"m_name",[186,16474,2650],{"class":669},[186,16476,5825],{"class":532},[186,16478,2650],{"class":669},[186,16480,16481],{"class":532},"\"学号：\"",[186,16483,2650],{"class":669},[186,16485,16486],{"class":202},"m_id",[186,16488,2650],{"class":669},[186,16490,2672],{"class":202},[186,16492,16493],{"class":188,"line":3200},[186,16494,3654],{"class":202},[186,16496,16497],{"class":188,"line":3217},[186,16498,5461],{"class":202},[186,16500,16501,16503,16505],{"class":188,"line":3222},[186,16502,1626],{"class":669},[186,16504,3440],{"class":198},[186,16506,3443],{"class":202},[186,16508,16509],{"class":188,"line":3227},[186,16510,3018],{"class":202},[186,16512,16513],{"class":188,"line":3232},[186,16514,16515],{"class":192},"    \u002F\u002F实例化\n",[186,16517,16518],{"class":188,"line":3246},[186,16519,16520],{"class":202},"    Student s1;\n",[186,16522,16523,16526,16529,16531,16533],{"class":188,"line":3251},[186,16524,16525],{"class":202},"    s1.",[186,16527,16528],{"class":198},"setName",[186,16530,832],{"class":202},[186,16532,9379],{"class":532},[186,16534,1112],{"class":202},[186,16536,16537,16539,16542,16544,16547],{"class":188,"line":4044},[186,16538,16525],{"class":202},[186,16540,16541],{"class":198},"setId",[186,16543,832],{"class":202},[186,16545,16546],{"class":206},"123456",[186,16548,1112],{"class":202},[186,16550,16551,16553,16556],{"class":188,"line":4058},[186,16552,16525],{"class":202},[186,16554,16555],{"class":198},"printInfo",[186,16557,7099],{"class":202},[186,16559,16560],{"class":188,"line":4066},[186,16561,639],{"class":202},[169,16563,16564],{},"类中的属性和行为统称为成员",[169,16566,16567],{},"属性：成员属性(成员变量)",[169,16569,16570],{},"方法：成员函数(成员方法)",[169,16572,16573],{},[54,16574,16575],{},"封装意义二：",[169,16577,16578],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[169,16580,16581],{},"访问权限有三种：",[34,16583,16584,16587,16590],{},[22,16585,16586],{},"public        公共权限",[22,16588,16589],{},"protected 保护权限",[22,16591,16592],{},"private      私有权限",[169,16594,16595],{},[54,16596,16597],{},"示例：",[176,16599,16601],{"className":11404,"code":16600,"language":11406,"meta":181,"style":181},"\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",[183,16602,16603,16608,16613,16618,16623,16627,16634,16638,16643,16647,16652,16656,16661,16666,16671,16675,16680,16685,16692,16696,16700,16708,16712,16723,16735,16747,16751,16755,16759,16767,16771,16776,16788,16796,16804,16808,16818,16822,16830],{"__ignoreMap":181},[186,16604,16605],{"class":188,"line":189},[186,16606,16607],{"class":192},"\u002F\u002F三种权限\n",[186,16609,16610],{"class":188,"line":49},[186,16611,16612],{"class":192},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[186,16614,16615],{"class":188,"line":219},[186,16616,16617],{"class":192},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[186,16619,16620],{"class":188,"line":225},[186,16621,16622],{"class":192},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[186,16624,16625],{"class":188,"line":242},[186,16626,3867],{"emptyLinePlaceholder":1551},[186,16628,16629,16631],{"class":188,"line":248},[186,16630,16156],{"class":669},[186,16632,16633],{"class":198}," Person\n",[186,16635,16636],{"class":188,"line":265},[186,16637,3018],{"class":202},[186,16639,16640],{"class":188,"line":271},[186,16641,16642],{"class":192},"    \u002F\u002F姓名  公共权限\n",[186,16644,16645],{"class":188,"line":288},[186,16646,16178],{"class":669},[186,16648,16649],{"class":188,"line":294},[186,16650,16651],{"class":202},"    string m_Name;\n",[186,16653,16654],{"class":188,"line":1212},[186,16655,3867],{"emptyLinePlaceholder":1551},[186,16657,16658],{"class":188,"line":1223},[186,16659,16660],{"class":192},"    \u002F\u002F汽车  保护权限\n",[186,16662,16663],{"class":188,"line":1236},[186,16664,16665],{"class":669},"protected:\n",[186,16667,16668],{"class":188,"line":3096},[186,16669,16670],{"class":202},"    string m_Car;\n",[186,16672,16673],{"class":188,"line":3110},[186,16674,3867],{"emptyLinePlaceholder":1551},[186,16676,16677],{"class":188,"line":3115},[186,16678,16679],{"class":192},"    \u002F\u002F银行卡密码  私有权限\n",[186,16681,16682],{"class":188,"line":3121},[186,16683,16684],{"class":669},"private:\n",[186,16686,16687,16689],{"class":188,"line":3142},[186,16688,3452],{"class":669},[186,16690,16691],{"class":202}," m_Password;\n",[186,16693,16694],{"class":188,"line":3147},[186,16695,3867],{"emptyLinePlaceholder":1551},[186,16697,16698],{"class":188,"line":3161},[186,16699,16178],{"class":669},[186,16701,16702,16704,16706],{"class":188,"line":3166},[186,16703,16371],{"class":669},[186,16705,12848],{"class":198},[186,16707,3443],{"class":202},[186,16709,16710],{"class":188,"line":3195},[186,16711,3497],{"class":202},[186,16713,16714,16717,16719,16721],{"class":188,"line":3200},[186,16715,16716],{"class":202},"        m_Name ",[186,16718,529],{"class":669},[186,16720,10401],{"class":532},[186,16722,634],{"class":202},[186,16724,16725,16728,16730,16733],{"class":188,"line":3217},[186,16726,16727],{"class":202},"        m_Car ",[186,16729,529],{"class":669},[186,16731,16732],{"class":532}," \"拖拉机\"",[186,16734,634],{"class":202},[186,16736,16737,16740,16742,16745],{"class":188,"line":3222},[186,16738,16739],{"class":202},"        m_Password ",[186,16741,529],{"class":669},[186,16743,16744],{"class":206}," 123456",[186,16746,634],{"class":202},[186,16748,16749],{"class":188,"line":3227},[186,16750,3654],{"class":202},[186,16752,16753],{"class":188,"line":3232},[186,16754,5461],{"class":202},[186,16756,16757],{"class":188,"line":3246},[186,16758,3867],{"emptyLinePlaceholder":1551},[186,16760,16761,16763,16765],{"class":188,"line":3251},[186,16762,1626],{"class":669},[186,16764,3440],{"class":198},[186,16766,12316],{"class":202},[186,16768,16769],{"class":188,"line":4044},[186,16770,3867],{"emptyLinePlaceholder":1551},[186,16772,16773],{"class":188,"line":4058},[186,16774,16775],{"class":202},"    Person p;\n",[186,16777,16778,16781,16783,16786],{"class":188,"line":4066},[186,16779,16780],{"class":202},"    p.m_Name ",[186,16782,529],{"class":669},[186,16784,16785],{"class":532}," \"李四\"",[186,16787,634],{"class":202},[186,16789,16790,16793],{"class":188,"line":4071},[186,16791,16792],{"class":192},"    \u002F\u002Fp.m_Car = \"奔驰\";",[186,16794,16795],{"class":192},"  \u002F\u002F保护权限类外访问不到\n",[186,16797,16798,16801],{"class":188,"line":4077},[186,16799,16800],{"class":192},"    \u002F\u002Fp.m_Password = 123;",[186,16802,16803],{"class":192}," \u002F\u002F私有权限类外访问不到\n",[186,16805,16806],{"class":188,"line":4083},[186,16807,3867],{"emptyLinePlaceholder":1551},[186,16809,16810,16812,16814,16816],{"class":188,"line":4088},[186,16811,3770],{"class":198},[186,16813,832],{"class":202},[186,16815,3775],{"class":532},[186,16817,1112],{"class":202},[186,16819,16820],{"class":188,"line":9411},[186,16821,3867],{"emptyLinePlaceholder":1551},[186,16823,16824,16826,16828],{"class":188,"line":9435},[186,16825,5556],{"class":669},[186,16827,5559],{"class":206},[186,16829,634],{"class":202},[186,16831,16832],{"class":188,"line":9440},[186,16833,639],{"class":202},[29,16835,16837],{"id":16836},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[169,16839,16840,16841,16844,16845],{},"在C++中 struct和class唯一的",[54,16842,16843],{},"区别","就在于 ",[54,16846,16847],{},"默认的访问权限不同",[169,16849,16850],{},"区别：",[19,16852,16853,16856],{},[22,16854,16855],{},"struct 默认权限为公共",[22,16857,16858],{},"class   默认权限为私有",[176,16860,16862],{"className":11404,"code":16861,"language":11406,"meta":181,"style":181},"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",[183,16863,16864,16871,16875,16885,16889,16893,16900,16904,16914,16918,16922,16930,16934,16939,16953,16957,16962,16976,16980,16990,16994,17002],{"__ignoreMap":181},[186,16865,16866,16868],{"class":188,"line":189},[186,16867,16156],{"class":669},[186,16869,16870],{"class":198}," C1\n",[186,16872,16873],{"class":188,"line":49},[186,16874,3018],{"class":202},[186,16876,16877,16879,16882],{"class":188,"line":219},[186,16878,3452],{"class":669},[186,16880,16881],{"class":202},"  m_A;",[186,16883,16884],{"class":192}," \u002F\u002F默认是私有权限\n",[186,16886,16887],{"class":188,"line":225},[186,16888,5461],{"class":202},[186,16890,16891],{"class":188,"line":242},[186,16892,3867],{"emptyLinePlaceholder":1551},[186,16894,16895,16897],{"class":188,"line":248},[186,16896,9222],{"class":669},[186,16898,16899],{"class":198}," C2\n",[186,16901,16902],{"class":188,"line":265},[186,16903,3018],{"class":202},[186,16905,16906,16908,16911],{"class":188,"line":271},[186,16907,3452],{"class":669},[186,16909,16910],{"class":202}," m_A;",[186,16912,16913],{"class":192},"  \u002F\u002F默认是公共权限\n",[186,16915,16916],{"class":188,"line":288},[186,16917,5461],{"class":202},[186,16919,16920],{"class":188,"line":294},[186,16921,3867],{"emptyLinePlaceholder":1551},[186,16923,16924,16926,16928],{"class":188,"line":1212},[186,16925,1626],{"class":669},[186,16927,3440],{"class":198},[186,16929,12316],{"class":202},[186,16931,16932],{"class":188,"line":1223},[186,16933,3867],{"emptyLinePlaceholder":1551},[186,16935,16936],{"class":188,"line":1236},[186,16937,16938],{"class":202},"    C1 c1;\n",[186,16940,16941,16944,16946,16948,16950],{"class":188,"line":3096},[186,16942,16943],{"class":202},"    c1.m_A ",[186,16945,529],{"class":669},[186,16947,3505],{"class":206},[186,16949,1676],{"class":202},[186,16951,16952],{"class":192}," \u002F\u002F错误，访问权限是私有\n",[186,16954,16955],{"class":188,"line":3110},[186,16956,3867],{"emptyLinePlaceholder":1551},[186,16958,16959],{"class":188,"line":3115},[186,16960,16961],{"class":202},"    C2 c2;\n",[186,16963,16964,16967,16969,16971,16973],{"class":188,"line":3121},[186,16965,16966],{"class":202},"    c2.m_A ",[186,16968,529],{"class":669},[186,16970,3505],{"class":206},[186,16972,1676],{"class":202},[186,16974,16975],{"class":192}," \u002F\u002F正确，访问权限是公共\n",[186,16977,16978],{"class":188,"line":3142},[186,16979,3867],{"emptyLinePlaceholder":1551},[186,16981,16982,16984,16986,16988],{"class":188,"line":3147},[186,16983,3770],{"class":198},[186,16985,832],{"class":202},[186,16987,3775],{"class":532},[186,16989,1112],{"class":202},[186,16991,16992],{"class":188,"line":3161},[186,16993,3867],{"emptyLinePlaceholder":1551},[186,16995,16996,16998,17000],{"class":188,"line":3166},[186,16997,5556],{"class":669},[186,16999,5559],{"class":206},[186,17001,634],{"class":202},[186,17003,17004],{"class":188,"line":3195},[186,17005,639],{"class":202},[29,17007,17009],{"id":17008},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[169,17011,17012],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[169,17014,17015],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[169,17017,17018],{},[54,17019,16597],{},[176,17021,17023],{"className":11404,"code":17022,"language":11406,"meta":181,"style":181},"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",[183,17024,17025,17034,17038,17042,17047,17061,17070,17074,17084,17088,17095,17099,17103,17107,17112,17121,17128,17132,17137,17153,17176,17189,17196,17200,17209,17213,17217,17222,17238,17248,17252,17256,17260,17268,17272,17282,17286,17294,17298,17302,17310,17314,17318,17323,17336,17359,17363,17368,17381,17403,17407,17412,17426,17434,17438,17448,17452,17460],{"__ignoreMap":181},[186,17026,17027,17029,17032],{"class":188,"line":189},[186,17028,16156],{"class":669},[186,17030,17031],{"class":198}," Person",[186,17033,622],{"class":202},[186,17035,17036],{"class":188,"line":49},[186,17037,16178],{"class":669},[186,17039,17040],{"class":188,"line":219},[186,17041,3867],{"emptyLinePlaceholder":1551},[186,17043,17044],{"class":188,"line":225},[186,17045,17046],{"class":192},"    \u002F\u002F姓名设置可读可写\n",[186,17048,17049,17051,17053,17055,17057,17059],{"class":188,"line":242},[186,17050,16371],{"class":669},[186,17052,16374],{"class":198},[186,17054,832],{"class":202},[186,17056,16379],{"class":198},[186,17058,16382],{"class":835},[186,17060,13905],{"class":202},[186,17062,17063,17065,17067],{"class":188,"line":248},[186,17064,16716],{"class":202},[186,17066,529],{"class":669},[186,17068,17069],{"class":202}," name;\n",[186,17071,17072],{"class":188,"line":265},[186,17073,3654],{"class":202},[186,17075,17076,17079,17082],{"class":188,"line":271},[186,17077,17078],{"class":198},"    string",[186,17080,17081],{"class":198}," getName",[186,17083,3443],{"class":202},[186,17085,17086],{"class":188,"line":288},[186,17087,3497],{"class":202},[186,17089,17090,17092],{"class":188,"line":294},[186,17091,16214],{"class":669},[186,17093,17094],{"class":202}," m_Name;\n",[186,17096,17097],{"class":188,"line":1212},[186,17098,3654],{"class":202},[186,17100,17101],{"class":188,"line":1223},[186,17102,3867],{"emptyLinePlaceholder":1551},[186,17104,17105],{"class":188,"line":1236},[186,17106,3867],{"emptyLinePlaceholder":1551},[186,17108,17109],{"class":188,"line":3096},[186,17110,17111],{"class":192},"    \u002F\u002F获取年龄 \n",[186,17113,17114,17116,17119],{"class":188,"line":3110},[186,17115,3452],{"class":669},[186,17117,17118],{"class":198}," getAge",[186,17120,12316],{"class":202},[186,17122,17123,17125],{"class":188,"line":3115},[186,17124,16214],{"class":669},[186,17126,17127],{"class":202}," m_Age;\n",[186,17129,17130],{"class":188,"line":3121},[186,17131,3654],{"class":202},[186,17133,17134],{"class":188,"line":3142},[186,17135,17136],{"class":192},"    \u002F\u002F设置年龄\n",[186,17138,17139,17141,17144,17146,17148,17151],{"class":188,"line":3147},[186,17140,16371],{"class":669},[186,17142,17143],{"class":198}," setAge",[186,17145,832],{"class":202},[186,17147,1626],{"class":669},[186,17149,17150],{"class":835}," age",[186,17152,13905],{"class":202},[186,17154,17155,17157,17160,17162,17164,17166,17169,17171,17174],{"class":188,"line":3161},[186,17156,3964],{"class":669},[186,17158,17159],{"class":202}," (age ",[186,17161,520],{"class":669},[186,17163,5559],{"class":206},[186,17165,4721],{"class":669},[186,17167,17168],{"class":202}," age ",[186,17170,2567],{"class":669},[186,17172,17173],{"class":206}," 150",[186,17175,13905],{"class":202},[186,17177,17178,17180,17182,17185,17187],{"class":188,"line":3166},[186,17179,11182],{"class":202},[186,17181,2650],{"class":669},[186,17183,17184],{"class":532}," \"你个老妖精!\"",[186,17186,2917],{"class":669},[186,17188,10303],{"class":202},[186,17190,17191,17194],{"class":188,"line":3195},[186,17192,17193],{"class":669},"            return",[186,17195,634],{"class":202},[186,17197,17198],{"class":188,"line":3200},[186,17199,3996],{"class":202},[186,17201,17202,17205,17207],{"class":188,"line":3217},[186,17203,17204],{"class":202},"        m_Age ",[186,17206,529],{"class":669},[186,17208,9260],{"class":202},[186,17210,17211],{"class":188,"line":3222},[186,17212,3654],{"class":202},[186,17214,17215],{"class":188,"line":3227},[186,17216,3867],{"emptyLinePlaceholder":1551},[186,17218,17219],{"class":188,"line":3232},[186,17220,17221],{"class":192},"    \u002F\u002F情人设置为只写\n",[186,17223,17224,17226,17229,17231,17233,17236],{"class":188,"line":3246},[186,17225,16371],{"class":669},[186,17227,17228],{"class":198}," setLover",[186,17230,832],{"class":202},[186,17232,16379],{"class":198},[186,17234,17235],{"class":835}," lover",[186,17237,13905],{"class":202},[186,17239,17240,17243,17245],{"class":188,"line":3251},[186,17241,17242],{"class":202},"        m_Lover ",[186,17244,529],{"class":669},[186,17246,17247],{"class":202}," lover;\n",[186,17249,17250],{"class":188,"line":4044},[186,17251,3654],{"class":202},[186,17253,17254],{"class":188,"line":4058},[186,17255,3867],{"emptyLinePlaceholder":1551},[186,17257,17258],{"class":188,"line":4066},[186,17259,16684],{"class":669},[186,17261,17262,17265],{"class":188,"line":4071},[186,17263,17264],{"class":202},"    string m_Name;",[186,17266,17267],{"class":192}," \u002F\u002F可读可写  姓名\n",[186,17269,17270],{"class":188,"line":4077},[186,17271,14673],{"class":202},[186,17273,17274,17276,17279],{"class":188,"line":4083},[186,17275,3452],{"class":669},[186,17277,17278],{"class":202}," m_Age;",[186,17280,17281],{"class":192}," \u002F\u002F只读  年龄\n",[186,17283,17284],{"class":188,"line":4088},[186,17285,3867],{"emptyLinePlaceholder":1551},[186,17287,17288,17291],{"class":188,"line":9411},[186,17289,17290],{"class":202},"    string m_Lover;",[186,17292,17293],{"class":192}," \u002F\u002F只写  情人\n",[186,17295,17296],{"class":188,"line":9435},[186,17297,5461],{"class":202},[186,17299,17300],{"class":188,"line":9440},[186,17301,3867],{"emptyLinePlaceholder":1551},[186,17303,17304,17306,17308],{"class":188,"line":9446},[186,17305,1626],{"class":669},[186,17307,3440],{"class":198},[186,17309,12316],{"class":202},[186,17311,17312],{"class":188,"line":9473},[186,17313,3867],{"emptyLinePlaceholder":1551},[186,17315,17316],{"class":188,"line":9478},[186,17317,16775],{"class":202},[186,17319,17320],{"class":188,"line":9484},[186,17321,17322],{"class":192},"    \u002F\u002F姓名设置\n",[186,17324,17325,17328,17330,17332,17334],{"class":188,"line":9496},[186,17326,17327],{"class":202},"    p.",[186,17329,16528],{"class":198},[186,17331,832],{"class":202},[186,17333,9379],{"class":532},[186,17335,1112],{"class":202},[186,17337,17338,17340,17342,17345,17347,17350,17353,17355,17357],{"class":188,"line":9508},[186,17339,7992],{"class":202},[186,17341,2650],{"class":669},[186,17343,17344],{"class":532}," \"姓名： \"",[186,17346,2917],{"class":669},[186,17348,17349],{"class":202}," p.",[186,17351,17352],{"class":198},"getName",[186,17354,14513],{"class":202},[186,17356,2650],{"class":669},[186,17358,10303],{"class":202},[186,17360,17361],{"class":188,"line":9520},[186,17362,3867],{"emptyLinePlaceholder":1551},[186,17364,17365],{"class":188,"line":11179},[186,17366,17367],{"class":192},"    \u002F\u002F年龄设置\n",[186,17369,17370,17372,17375,17377,17379],{"class":188,"line":11204},[186,17371,17327],{"class":202},[186,17373,17374],{"class":198},"setAge",[186,17376,832],{"class":202},[186,17378,666],{"class":206},[186,17380,1112],{"class":202},[186,17382,17383,17385,17387,17390,17392,17394,17397,17399,17401],{"class":188,"line":11227},[186,17384,7992],{"class":202},[186,17386,2650],{"class":669},[186,17388,17389],{"class":532}," \"年龄： \"",[186,17391,2917],{"class":669},[186,17393,17349],{"class":202},[186,17395,17396],{"class":198},"getAge",[186,17398,14513],{"class":202},[186,17400,2650],{"class":669},[186,17402,10303],{"class":202},[186,17404,17405],{"class":188,"line":11251},[186,17406,3867],{"emptyLinePlaceholder":1551},[186,17408,17409],{"class":188,"line":11256},[186,17410,17411],{"class":192},"    \u002F\u002F情人设置\n",[186,17413,17414,17416,17419,17421,17424],{"class":188,"line":11261},[186,17415,17327],{"class":202},[186,17417,17418],{"class":198},"setLover",[186,17420,832],{"class":202},[186,17422,17423],{"class":532},"\"苍井\"",[186,17425,1112],{"class":202},[186,17427,17428,17431],{"class":188,"line":11266},[186,17429,17430],{"class":192},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[186,17432,17433],{"class":192},"  \u002F\u002F只写属性，不可以读取\n",[186,17435,17436],{"class":188,"line":11275},[186,17437,3867],{"emptyLinePlaceholder":1551},[186,17439,17440,17442,17444,17446],{"class":188,"line":11280},[186,17441,3770],{"class":198},[186,17443,832],{"class":202},[186,17445,3775],{"class":532},[186,17447,1112],{"class":202},[186,17449,17450],{"class":188,"line":11286},[186,17451,3867],{"emptyLinePlaceholder":1551},[186,17453,17454,17456,17458],{"class":188,"line":11307},[186,17455,5556],{"class":669},[186,17457,5559],{"class":206},[186,17459,634],{"class":202},[186,17461,17462],{"class":188,"line":11313},[186,17463,639],{"class":202},[29,17465,17467],{"id":17466},"_814封装案例","8.1.4封装案例",[34,17469,17470],{},[22,17471,17472,17475],{},[54,17473,17474],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[19,17477,17478,17481],{},[22,17479,17480],{},"求出立方体的面积和体积",[22,17482,17483],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[176,17485,17487],{"className":1612,"code":17486,"language":1614,"meta":181,"style":181},"#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",[183,17488,17489,17495,17505,17512,17516,17520,17525,17555,17559,17569,17579,17589,17593,17602,17606,17642,17646,17655,17659,17675,17679,17684,17693,17697,17704,17708,17717,17721,17728,17732,17741,17745,17752,17756,17761,17778,17782,17828,17832,17841,17845,17849,17853,17862,17866,17870,17875,17879,17885,17891,17897,17901,17905,17910,17932,17936,17990,17994,18002,18006,18011,18016,18029,18036,18052,18063,18069,18092,18098,18121,18135,18155,18161,18172,18195,18217,18222,18228,18242,18255,18260,18274,18279,18285,18290,18304,18309,18314,18328,18340,18345,18358,18363,18368,18373,18386,18391],{"__ignoreMap":181},[186,17490,17491,17493],{"class":188,"line":189},[186,17492,3417],{"class":669},[186,17494,3420],{"class":532},[186,17496,17497,17499,17501,17503],{"class":188,"line":49},[186,17498,3425],{"class":669},[186,17500,3428],{"class":669},[186,17502,3431],{"class":198},[186,17504,634],{"class":202},[186,17506,17507,17509],{"class":188,"line":219},[186,17508,16156],{"class":669},[186,17510,17511],{"class":198}," Cube\n",[186,17513,17514],{"class":188,"line":225},[186,17515,3018],{"class":202},[186,17517,17518],{"class":188,"line":242},[186,17519,16178],{"class":669},[186,17521,17522],{"class":188,"line":248},[186,17523,17524],{"class":192},"    \u002F\u002F输入长宽高\n",[186,17526,17527,17529,17532,17534,17536,17539,17541,17543,17546,17548,17550,17553],{"class":188,"line":265},[186,17528,16371],{"class":669},[186,17530,17531],{"class":198}," setLwh",[186,17533,832],{"class":202},[186,17535,1626],{"class":669},[186,17537,17538],{"class":835}," l",[186,17540,1988],{"class":202},[186,17542,1626],{"class":669},[186,17544,17545],{"class":835}," w",[186,17547,1988],{"class":202},[186,17549,1626],{"class":669},[186,17551,17552],{"class":835}," h",[186,17554,1629],{"class":202},[186,17556,17557],{"class":188,"line":271},[186,17558,3497],{"class":202},[186,17560,17561,17564,17566],{"class":188,"line":288},[186,17562,17563],{"class":202},"        m_L",[186,17565,529],{"class":669},[186,17567,17568],{"class":202},"l;\n",[186,17570,17571,17574,17576],{"class":188,"line":294},[186,17572,17573],{"class":202},"        m_W",[186,17575,529],{"class":669},[186,17577,17578],{"class":202},"w;\n",[186,17580,17581,17584,17586],{"class":188,"line":1212},[186,17582,17583],{"class":202},"        m_H",[186,17585,529],{"class":669},[186,17587,17588],{"class":202},"h;\n",[186,17590,17591],{"class":188,"line":1223},[186,17592,3654],{"class":202},[186,17594,17595,17597,17600],{"class":188,"line":1236},[186,17596,3452],{"class":669},[186,17598,17599],{"class":198}," mianji",[186,17601,3443],{"class":202},[186,17603,17604],{"class":188,"line":3096},[186,17605,3497],{"class":202},[186,17607,17608,17610,17612,17614,17617,17619,17622,17624,17627,17629,17632,17634,17637,17639],{"class":188,"line":3110},[186,17609,16214],{"class":669},[186,17611,16217],{"class":206},[186,17613,2065],{"class":669},[186,17615,17616],{"class":202},"(m_L",[186,17618,2065],{"class":669},[186,17620,17621],{"class":202},"m_W ",[186,17623,2091],{"class":669},[186,17625,17626],{"class":202}," m_L",[186,17628,2065],{"class":669},[186,17630,17631],{"class":202},"m_H ",[186,17633,2091],{"class":669},[186,17635,17636],{"class":202}," m_W",[186,17638,2065],{"class":669},[186,17640,17641],{"class":202},"m_H);\n",[186,17643,17644],{"class":188,"line":3115},[186,17645,3654],{"class":202},[186,17647,17648,17650,17653],{"class":188,"line":3121},[186,17649,3452],{"class":669},[186,17651,17652],{"class":198}," tiji",[186,17654,3443],{"class":202},[186,17656,17657],{"class":188,"line":3142},[186,17658,3497],{"class":202},[186,17660,17661,17663,17665,17667,17670,17672],{"class":188,"line":3147},[186,17662,16214],{"class":669},[186,17664,17626],{"class":202},[186,17666,2065],{"class":669},[186,17668,17669],{"class":202},"m_W",[186,17671,2065],{"class":669},[186,17673,17674],{"class":202},"m_H;\n",[186,17676,17677],{"class":188,"line":3161},[186,17678,3654],{"class":202},[186,17680,17681],{"class":188,"line":3166},[186,17682,17683],{"class":192},"    \u002F\u002F获取长宽高\n",[186,17685,17686,17688,17691],{"class":188,"line":3195},[186,17687,3452],{"class":669},[186,17689,17690],{"class":198}," getLength",[186,17692,3443],{"class":202},[186,17694,17695],{"class":188,"line":3200},[186,17696,3497],{"class":202},[186,17698,17699,17701],{"class":188,"line":3217},[186,17700,16214],{"class":669},[186,17702,17703],{"class":202}," m_L;\n",[186,17705,17706],{"class":188,"line":3222},[186,17707,3654],{"class":202},[186,17709,17710,17712,17715],{"class":188,"line":3227},[186,17711,3452],{"class":669},[186,17713,17714],{"class":198}," getWidth",[186,17716,3443],{"class":202},[186,17718,17719],{"class":188,"line":3232},[186,17720,3497],{"class":202},[186,17722,17723,17725],{"class":188,"line":3246},[186,17724,16214],{"class":669},[186,17726,17727],{"class":202}," m_W;\n",[186,17729,17730],{"class":188,"line":3251},[186,17731,3654],{"class":202},[186,17733,17734,17736,17739],{"class":188,"line":4044},[186,17735,3452],{"class":669},[186,17737,17738],{"class":198}," getHeight",[186,17740,3443],{"class":202},[186,17742,17743],{"class":188,"line":4058},[186,17744,3497],{"class":202},[186,17746,17747,17749],{"class":188,"line":4066},[186,17748,16214],{"class":669},[186,17750,17751],{"class":202}," m_H;\n",[186,17753,17754],{"class":188,"line":4071},[186,17755,3654],{"class":202},[186,17757,17758],{"class":188,"line":4077},[186,17759,17760],{"class":192},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[186,17762,17763,17766,17769,17771,17774,17776],{"class":188,"line":4083},[186,17764,17765],{"class":669},"    bool",[186,17767,17768],{"class":198}," isEqual",[186,17770,832],{"class":202},[186,17772,17773],{"class":198},"Cube",[186,17775,4315],{"class":835},[186,17777,1629],{"class":202},[186,17779,17780],{"class":188,"line":4088},[186,17781,3497],{"class":202},[186,17783,17784,17786,17789,17792,17794,17796,17799,17801,17804,17807,17809,17811,17814,17816,17818,17821,17823,17825],{"class":188,"line":9411},[186,17785,3964],{"class":669},[186,17787,17788],{"class":202}," (c.",[186,17790,17791],{"class":198},"getLength",[186,17793,14513],{"class":202},[186,17795,4415],{"class":669},[186,17797,17798],{"class":202}," m_L ",[186,17800,3183],{"class":669},[186,17802,17803],{"class":202}," c.",[186,17805,17806],{"class":198},"getWidth",[186,17808,14513],{"class":202},[186,17810,4415],{"class":669},[186,17812,17813],{"class":202}," m_W ",[186,17815,3183],{"class":669},[186,17817,17803],{"class":202},[186,17819,17820],{"class":198},"getHeight",[186,17822,14513],{"class":202},[186,17824,4415],{"class":669},[186,17826,17827],{"class":202}," m_H)\n",[186,17829,17830],{"class":188,"line":9435},[186,17831,3977],{"class":202},[186,17833,17834,17836,17839],{"class":188,"line":9440},[186,17835,17193],{"class":669},[186,17837,17838],{"class":206}," true",[186,17840,634],{"class":202},[186,17842,17843],{"class":188,"line":9446},[186,17844,3996],{"class":202},[186,17846,17847],{"class":188,"line":9473},[186,17848,4037],{"class":669},[186,17850,17851],{"class":188,"line":9478},[186,17852,3977],{"class":202},[186,17854,17855,17857,17860],{"class":188,"line":9484},[186,17856,17193],{"class":669},[186,17858,17859],{"class":206}," false",[186,17861,634],{"class":202},[186,17863,17864],{"class":188,"line":9496},[186,17865,3996],{"class":202},[186,17867,17868],{"class":188,"line":9508},[186,17869,3654],{"class":202},[186,17871,17872],{"class":188,"line":9520},[186,17873,17874],{"class":192},"    \u002F\u002F私有属性\n",[186,17876,17877],{"class":188,"line":11179},[186,17878,16684],{"class":669},[186,17880,17881,17883],{"class":188,"line":11204},[186,17882,3452],{"class":669},[186,17884,17703],{"class":202},[186,17886,17887,17889],{"class":188,"line":11227},[186,17888,3452],{"class":669},[186,17890,17727],{"class":202},[186,17892,17893,17895],{"class":188,"line":11251},[186,17894,3452],{"class":669},[186,17896,17751],{"class":202},[186,17898,17899],{"class":188,"line":11256},[186,17900,3867],{"emptyLinePlaceholder":1551},[186,17902,17903],{"class":188,"line":11261},[186,17904,5461],{"class":202},[186,17906,17907],{"class":188,"line":11266},[186,17908,17909],{"class":192},"\u002F\u002F全局函数判断两个立方体是否相等\n",[186,17911,17912,17914,17916,17918,17920,17923,17925,17927,17930],{"class":188,"line":11275},[186,17913,2827],{"class":669},[186,17915,17768],{"class":198},[186,17917,832],{"class":202},[186,17919,17773],{"class":198},[186,17921,17922],{"class":835}," c1",[186,17924,1988],{"class":202},[186,17926,17773],{"class":198},[186,17928,17929],{"class":835}," c2",[186,17931,1629],{"class":202},[186,17933,17934],{"class":188,"line":11280},[186,17935,3018],{"class":202},[186,17937,17938,17940,17943,17945,17947,17949,17952,17954,17957,17959,17961,17963,17965,17967,17969,17971,17973,17975,17977,17979,17981,17983,17985,17987],{"class":188,"line":11286},[186,17939,5556],{"class":669},[186,17941,17942],{"class":202}," (c1.",[186,17944,17791],{"class":198},[186,17946,14513],{"class":202},[186,17948,4415],{"class":669},[186,17950,17951],{"class":202}," c2.",[186,17953,17791],{"class":198},[186,17955,17956],{"class":202},"()) ",[186,17958,3183],{"class":669},[186,17960,17942],{"class":202},[186,17962,17806],{"class":198},[186,17964,14513],{"class":202},[186,17966,4415],{"class":669},[186,17968,17951],{"class":202},[186,17970,17806],{"class":198},[186,17972,17956],{"class":202},[186,17974,3183],{"class":669},[186,17976,17942],{"class":202},[186,17978,17820],{"class":198},[186,17980,14513],{"class":202},[186,17982,4415],{"class":669},[186,17984,17951],{"class":202},[186,17986,17820],{"class":198},[186,17988,17989],{"class":202},"());\n",[186,17991,17992],{"class":188,"line":11307},[186,17993,639],{"class":202},[186,17995,17996,17998,18000],{"class":188,"line":11313},[186,17997,1626],{"class":669},[186,17999,3440],{"class":198},[186,18001,3443],{"class":202},[186,18003,18004],{"class":188,"line":11327},[186,18005,3018],{"class":202},[186,18007,18008],{"class":188,"line":11333},[186,18009,18010],{"class":202},"    Cube c1;\n",[186,18012,18013],{"class":188,"line":11360},[186,18014,18015],{"class":192},"    \u002F\u002F输入立方体的长宽高\n",[186,18017,18018,18020,18022,18025,18027],{"class":188,"line":11369},[186,18019,3023],{"class":202},[186,18021,2650],{"class":669},[186,18023,18024],{"class":532},"\"请输入第一个立方体的长、宽、高：\"",[186,18026,2650],{"class":669},[186,18028,2672],{"class":202},[186,18030,18031,18033],{"class":188,"line":11375},[186,18032,3452],{"class":669},[186,18034,18035],{"class":202}," l,w,h,l1,w1,h1;\n",[186,18037,18038,18040,18042,18044,18046,18048,18050],{"class":188,"line":11383},[186,18039,3479],{"class":202},[186,18041,2902],{"class":669},[186,18043,2128],{"class":202},[186,18045,2902],{"class":669},[186,18047,2403],{"class":202},[186,18049,2902],{"class":669},[186,18051,17588],{"class":202},[186,18053,18054,18057,18060],{"class":188,"line":11388},[186,18055,18056],{"class":202},"    c1.",[186,18058,18059],{"class":198},"setLwh",[186,18061,18062],{"class":202},"(l,w,h);\n",[186,18064,18066],{"class":188,"line":18065},66,[186,18067,18068],{"class":192},"    \u002F\u002F面积\n",[186,18070,18072,18074,18076,18079,18081,18083,18086,18088,18090],{"class":188,"line":18071},67,[186,18073,3023],{"class":202},[186,18075,2650],{"class":669},[186,18077,18078],{"class":532},"\"立方体的表面积为：\"",[186,18080,2650],{"class":669},[186,18082,16292],{"class":202},[186,18084,18085],{"class":198},"mianji",[186,18087,3894],{"class":202},[186,18089,2650],{"class":669},[186,18091,2672],{"class":202},[186,18093,18095],{"class":188,"line":18094},68,[186,18096,18097],{"class":192},"    \u002F\u002F体积\n",[186,18099,18101,18103,18105,18108,18110,18112,18115,18117,18119],{"class":188,"line":18100},69,[186,18102,3023],{"class":202},[186,18104,2650],{"class":669},[186,18106,18107],{"class":532},"\"立方体的体积为：\"",[186,18109,2650],{"class":669},[186,18111,16292],{"class":202},[186,18113,18114],{"class":198},"tiji",[186,18116,3894],{"class":202},[186,18118,2650],{"class":669},[186,18120,2672],{"class":202},[186,18122,18124,18126,18128,18131,18133],{"class":188,"line":18123},70,[186,18125,3023],{"class":202},[186,18127,2650],{"class":669},[186,18129,18130],{"class":532},"\"请输入第二个立方体的长、宽、高：\"",[186,18132,2650],{"class":669},[186,18134,2672],{"class":202},[186,18136,18138,18140,18142,18145,18147,18150,18152],{"class":188,"line":18137},71,[186,18139,3479],{"class":202},[186,18141,2902],{"class":669},[186,18143,18144],{"class":202},"l1",[186,18146,2902],{"class":669},[186,18148,18149],{"class":202},"w1",[186,18151,2902],{"class":669},[186,18153,18154],{"class":202},"h1;\n",[186,18156,18158],{"class":188,"line":18157},72,[186,18159,18160],{"class":202},"    Cube c2;\n",[186,18162,18164,18167,18169],{"class":188,"line":18163},73,[186,18165,18166],{"class":202},"    c2.",[186,18168,18059],{"class":198},[186,18170,18171],{"class":202},"(l1,w1,h1);\n",[186,18173,18175,18177,18179,18182,18184,18187,18189,18191,18193],{"class":188,"line":18174},74,[186,18176,3023],{"class":202},[186,18178,2650],{"class":669},[186,18180,18181],{"class":532},"\"第二个立方体的表面积为：\"",[186,18183,2650],{"class":669},[186,18185,18186],{"class":202},"c2.",[186,18188,18085],{"class":198},[186,18190,3894],{"class":202},[186,18192,2650],{"class":669},[186,18194,2672],{"class":202},[186,18196,18198,18200,18202,18205,18207,18209,18211,18213,18215],{"class":188,"line":18197},75,[186,18199,3023],{"class":202},[186,18201,2650],{"class":669},[186,18203,18204],{"class":532},"\"第二个立方体的体积为：\"",[186,18206,2650],{"class":669},[186,18208,18186],{"class":202},[186,18210,18114],{"class":198},[186,18212,3894],{"class":202},[186,18214,2650],{"class":669},[186,18216,2672],{"class":202},[186,18218,18220],{"class":188,"line":18219},76,[186,18221,3867],{"emptyLinePlaceholder":1551},[186,18223,18225],{"class":188,"line":18224},77,[186,18226,18227],{"class":192},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[186,18229,18231,18233,18235,18238,18240],{"class":188,"line":18230},78,[186,18232,3023],{"class":202},[186,18234,2650],{"class":669},[186,18236,18237],{"class":532},"\"内部函数判断结果：\"",[186,18239,2650],{"class":669},[186,18241,2672],{"class":202},[186,18243,18245,18247,18249,18252],{"class":188,"line":18244},79,[186,18246,4567],{"class":669},[186,18248,17942],{"class":202},[186,18250,18251],{"class":198},"isEqual",[186,18253,18254],{"class":202},"(c2))\n",[186,18256,18258],{"class":188,"line":18257},80,[186,18259,3497],{"class":202},[186,18261,18263,18265,18267,18270,18272],{"class":188,"line":18262},81,[186,18264,4917],{"class":202},[186,18266,2650],{"class":669},[186,18268,18269],{"class":532},"\"两个立方体相等\"",[186,18271,2650],{"class":669},[186,18273,2672],{"class":202},[186,18275,18277],{"class":188,"line":18276},82,[186,18278,3654],{"class":202},[186,18280,18282],{"class":188,"line":18281},83,[186,18283,18284],{"class":669},"    else\n",[186,18286,18288],{"class":188,"line":18287},84,[186,18289,3497],{"class":202},[186,18291,18293,18295,18297,18300,18302],{"class":188,"line":18292},85,[186,18294,4917],{"class":202},[186,18296,2650],{"class":669},[186,18298,18299],{"class":532},"\"两个立方体不相等\"",[186,18301,2650],{"class":669},[186,18303,2672],{"class":202},[186,18305,18307],{"class":188,"line":18306},86,[186,18308,3654],{"class":202},[186,18310,18312],{"class":188,"line":18311},87,[186,18313,3867],{"emptyLinePlaceholder":1551},[186,18315,18317,18319,18321,18324,18326],{"class":188,"line":18316},88,[186,18318,3023],{"class":202},[186,18320,2650],{"class":669},[186,18322,18323],{"class":532},"\"全局函数判断结果：\"",[186,18325,2650],{"class":669},[186,18327,2672],{"class":202},[186,18329,18331,18333,18335,18337],{"class":188,"line":18330},89,[186,18332,4567],{"class":669},[186,18334,3126],{"class":202},[186,18336,18251],{"class":198},[186,18338,18339],{"class":202},"(c1, c2))\n",[186,18341,18343],{"class":188,"line":18342},90,[186,18344,3497],{"class":202},[186,18346,18348,18350,18352,18354,18356],{"class":188,"line":18347},91,[186,18349,4917],{"class":202},[186,18351,2650],{"class":669},[186,18353,18269],{"class":532},[186,18355,2650],{"class":669},[186,18357,2672],{"class":202},[186,18359,18361],{"class":188,"line":18360},92,[186,18362,3654],{"class":202},[186,18364,18366],{"class":188,"line":18365},93,[186,18367,18284],{"class":669},[186,18369,18371],{"class":188,"line":18370},94,[186,18372,3497],{"class":202},[186,18374,18376,18378,18380,18382,18384],{"class":188,"line":18375},95,[186,18377,4917],{"class":202},[186,18379,2650],{"class":669},[186,18381,18299],{"class":532},[186,18383,2650],{"class":669},[186,18385,2672],{"class":202},[186,18387,18389],{"class":188,"line":18388},96,[186,18390,3654],{"class":202},[186,18392,18394],{"class":188,"line":18393},97,[186,18395,639],{"class":202},[34,18397,18398],{"start":49},[22,18399,18400],{},[54,18401,18402],{},"练习案例2：点和圆的关系",[19,18404,18405],{},[22,18406,18407],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[176,18409,18411],{"className":1612,"code":18410,"language":1614,"meta":181,"style":181},"#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",[183,18412,18413,18419,18429,18436,18443,18447,18451,18456,18490,18495,18511,18525,18529,18533,18540,18547,18551,18557,18561,18565,18569,18591,18614,18619,18633,18648,18652,18656,18662,18667,18672,18676,18702,18706,18736,18764,18792,18809,18813,18826,18830,18834,18838,18851,18855,18859,18867,18871,18875,18879,18884,18888,18899,18906,18915,18925,18936,18943,18956,18967,18977,18988,18995,19009,19014,19024,19032],{"__ignoreMap":181},[186,18414,18415,18417],{"class":188,"line":189},[186,18416,3417],{"class":669},[186,18418,3420],{"class":532},[186,18420,18421,18423,18425,18427],{"class":188,"line":49},[186,18422,3425],{"class":669},[186,18424,3428],{"class":669},[186,18426,3431],{"class":198},[186,18428,634],{"class":202},[186,18430,18431,18433],{"class":188,"line":219},[186,18432,3417],{"class":669},[186,18434,18435],{"class":532},"\u003Ccmath>\n",[186,18437,18438,18440],{"class":188,"line":225},[186,18439,16156],{"class":669},[186,18441,18442],{"class":198}," Point\n",[186,18444,18445],{"class":188,"line":242},[186,18446,3018],{"class":202},[186,18448,18449],{"class":188,"line":248},[186,18450,16178],{"class":669},[186,18452,18453],{"class":188,"line":265},[186,18454,18455],{"class":192},"    \u002F\u002F赋值\n",[186,18457,18458,18460,18463,18465,18467,18470,18472,18474,18477,18480,18482,18485,18487],{"class":188,"line":271},[186,18459,16371],{"class":669},[186,18461,18462],{"class":198}," setPoint",[186,18464,832],{"class":202},[186,18466,15499],{"class":669},[186,18468,18469],{"class":835}," x",[186,18471,13898],{"class":202},[186,18473,15499],{"class":669},[186,18475,18476],{"class":835}," y",[186,18478,18479],{"class":202},") { m_x ",[186,18481,529],{"class":669},[186,18483,18484],{"class":202}," x; m_y ",[186,18486,529],{"class":669},[186,18488,18489],{"class":202}," y; }\n",[186,18491,18492],{"class":188,"line":288},[186,18493,18494],{"class":192},"    \u002F\u002F获取坐标\n",[186,18496,18497,18499,18502,18505,18508],{"class":188,"line":294},[186,18498,16200],{"class":669},[186,18500,18501],{"class":198}," getX",[186,18503,18504],{"class":202},"() { ",[186,18506,18507],{"class":669},"return",[186,18509,18510],{"class":202}," m_x; }\n",[186,18512,18513,18515,18518,18520,18522],{"class":188,"line":1212},[186,18514,16200],{"class":669},[186,18516,18517],{"class":198}," getY",[186,18519,18504],{"class":202},[186,18521,18507],{"class":669},[186,18523,18524],{"class":202}," m_y; }\n",[186,18526,18527],{"class":188,"line":1223},[186,18528,3867],{"emptyLinePlaceholder":1551},[186,18530,18531],{"class":188,"line":1236},[186,18532,16684],{"class":669},[186,18534,18535,18537],{"class":188,"line":3096},[186,18536,16200],{"class":669},[186,18538,18539],{"class":202}," m_x;\n",[186,18541,18542,18544],{"class":188,"line":3110},[186,18543,16200],{"class":669},[186,18545,18546],{"class":202}," m_y;\n",[186,18548,18549],{"class":188,"line":3115},[186,18550,5461],{"class":202},[186,18552,18553,18555],{"class":188,"line":3121},[186,18554,16156],{"class":669},[186,18556,16159],{"class":198},[186,18558,18559],{"class":188,"line":3142},[186,18560,3018],{"class":202},[186,18562,18563],{"class":188,"line":3147},[186,18564,16178],{"class":669},[186,18566,18567],{"class":188,"line":3161},[186,18568,18455],{"class":192},[186,18570,18571,18573,18576,18578,18580,18583,18586,18588],{"class":188,"line":3166},[186,18572,16371],{"class":669},[186,18574,18575],{"class":198}," setRadius",[186,18577,832],{"class":202},[186,18579,15499],{"class":669},[186,18581,18582],{"class":835}," r",[186,18584,18585],{"class":202},") { m_r ",[186,18587,529],{"class":669},[186,18589,18590],{"class":202}," r; }\n",[186,18592,18593,18595,18598,18600,18603,18606,18609,18611],{"class":188,"line":3195},[186,18594,16371],{"class":669},[186,18596,18597],{"class":198}," setCenter",[186,18599,832],{"class":202},[186,18601,18602],{"class":198},"Point",[186,18604,18605],{"class":835}," center",[186,18607,18608],{"class":202},") { m_center ",[186,18610,529],{"class":669},[186,18612,18613],{"class":202}," center; }\n",[186,18615,18616],{"class":188,"line":3200},[186,18617,18618],{"class":192},"    \u002F\u002F获取属性\n",[186,18620,18621,18623,18626,18628,18630],{"class":188,"line":3217},[186,18622,16200],{"class":669},[186,18624,18625],{"class":198}," getRadius",[186,18627,18504],{"class":202},[186,18629,18507],{"class":669},[186,18631,18632],{"class":202}," m_r; }\n",[186,18634,18635,18638,18641,18643,18645],{"class":188,"line":3222},[186,18636,18637],{"class":198},"    Point",[186,18639,18640],{"class":198}," getCenter",[186,18642,18504],{"class":202},[186,18644,18507],{"class":669},[186,18646,18647],{"class":202}," m_center; }\n",[186,18649,18650],{"class":188,"line":3227},[186,18651,3867],{"emptyLinePlaceholder":1551},[186,18653,18654],{"class":188,"line":3232},[186,18655,16684],{"class":669},[186,18657,18658,18660],{"class":188,"line":3246},[186,18659,16200],{"class":669},[186,18661,16190],{"class":202},[186,18663,18664],{"class":188,"line":3251},[186,18665,18666],{"class":192},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[186,18668,18669],{"class":188,"line":4044},[186,18670,18671],{"class":202},"    Point m_center;\n",[186,18673,18674],{"class":188,"line":4058},[186,18675,5461],{"class":202},[186,18677,18678,18680,18683,18685,18688,18690,18692,18694,18696,18698,18700],{"class":188,"line":4066},[186,18679,6827],{"class":669},[186,18681,18682],{"class":198}," isInCircle",[186,18684,832],{"class":202},[186,18686,18687],{"class":198},"Circle",[186,18689,12047],{"class":669},[186,18691,1899],{"class":835},[186,18693,1988],{"class":202},[186,18695,18602],{"class":198},[186,18697,12047],{"class":669},[186,18699,169],{"class":835},[186,18701,1629],{"class":202},[186,18703,18704],{"class":188,"line":4071},[186,18705,3018],{"class":202},[186,18707,18708,18710,18713,18715,18717,18720,18723,18726,18728,18730,18732,18734],{"class":188,"line":4077},[186,18709,16200],{"class":669},[186,18711,18712],{"class":202}," dx ",[186,18714,529],{"class":669},[186,18716,17803],{"class":202},[186,18718,18719],{"class":198},"getCenter",[186,18721,18722],{"class":202},"().",[186,18724,18725],{"class":198},"getX",[186,18727,14513],{"class":202},[186,18729,2142],{"class":669},[186,18731,17349],{"class":202},[186,18733,18725],{"class":198},[186,18735,7099],{"class":202},[186,18737,18738,18740,18743,18745,18747,18749,18751,18754,18756,18758,18760,18762],{"class":188,"line":4083},[186,18739,16200],{"class":669},[186,18741,18742],{"class":202}," dy ",[186,18744,529],{"class":669},[186,18746,17803],{"class":202},[186,18748,18719],{"class":198},[186,18750,18722],{"class":202},[186,18752,18753],{"class":198},"getY",[186,18755,14513],{"class":202},[186,18757,2142],{"class":669},[186,18759,17349],{"class":202},[186,18761,18753],{"class":198},[186,18763,7099],{"class":202},[186,18765,18766,18768,18771,18773,18776,18779,18781,18783,18785,18787,18789],{"class":188,"line":4088},[186,18767,16200],{"class":669},[186,18769,18770],{"class":202}," distance ",[186,18772,529],{"class":669},[186,18774,18775],{"class":198}," sqrt",[186,18777,18778],{"class":202},"(dx ",[186,18780,2065],{"class":669},[186,18782,18712],{"class":202},[186,18784,2091],{"class":669},[186,18786,18742],{"class":202},[186,18788,2065],{"class":669},[186,18790,18791],{"class":202}," dy);\n",[186,18793,18794,18796,18799,18801,18803,18806],{"class":188,"line":9411},[186,18795,4567],{"class":669},[186,18797,18798],{"class":202}," (distance ",[186,18800,520],{"class":669},[186,18802,17803],{"class":202},[186,18804,18805],{"class":198},"getRadius",[186,18807,18808],{"class":202},"())\n",[186,18810,18811],{"class":188,"line":9435},[186,18812,3497],{"class":202},[186,18814,18815,18817,18819,18822,18824],{"class":188,"line":9440},[186,18816,11132],{"class":202},[186,18818,2650],{"class":669},[186,18820,18821],{"class":532}," \"点在圆内\"",[186,18823,2917],{"class":669},[186,18825,10303],{"class":202},[186,18827,18828],{"class":188,"line":9446},[186,18829,3654],{"class":202},[186,18831,18832],{"class":188,"line":9473},[186,18833,18284],{"class":669},[186,18835,18836],{"class":188,"line":9478},[186,18837,3497],{"class":202},[186,18839,18840,18842,18844,18847,18849],{"class":188,"line":9484},[186,18841,11132],{"class":202},[186,18843,2650],{"class":669},[186,18845,18846],{"class":532}," \"点在圆外\"",[186,18848,2917],{"class":669},[186,18850,10303],{"class":202},[186,18852,18853],{"class":188,"line":9496},[186,18854,3654],{"class":202},[186,18856,18857],{"class":188,"line":9508},[186,18858,639],{"class":202},[186,18860,18861,18863,18865],{"class":188,"line":9520},[186,18862,1626],{"class":669},[186,18864,3440],{"class":198},[186,18866,3443],{"class":202},[186,18868,18869],{"class":188,"line":11179},[186,18870,3018],{"class":202},[186,18872,18873],{"class":188,"line":11204},[186,18874,16515],{"class":192},[186,18876,18877],{"class":188,"line":11227},[186,18878,16262],{"class":202},[186,18880,18881],{"class":188,"line":11251},[186,18882,18883],{"class":202},"    Point p1;\n",[186,18885,18886],{"class":188,"line":11256},[186,18887,18455],{"class":192},[186,18889,18890,18892,18894,18897],{"class":188,"line":11261},[186,18891,3023],{"class":202},[186,18893,2650],{"class":669},[186,18895,18896],{"class":532},"\"请输入圆的半径：\"",[186,18898,634],{"class":202},[186,18900,18901,18903],{"class":188,"line":11266},[186,18902,16200],{"class":669},[186,18904,18905],{"class":202}," r;\n",[186,18907,18908,18910,18912],{"class":188,"line":11275},[186,18909,3479],{"class":202},[186,18911,2902],{"class":669},[186,18913,18914],{"class":202},"r;\n",[186,18916,18917,18919,18922],{"class":188,"line":11280},[186,18918,18056],{"class":202},[186,18920,18921],{"class":198},"setRadius",[186,18923,18924],{"class":202},"(r);\n",[186,18926,18927,18929,18931,18934],{"class":188,"line":11286},[186,18928,3023],{"class":202},[186,18930,2650],{"class":669},[186,18932,18933],{"class":532},"\"请输入圆心坐标：\"",[186,18935,634],{"class":202},[186,18937,18938,18940],{"class":188,"line":11307},[186,18939,16200],{"class":669},[186,18941,18942],{"class":202}," x, y;\n",[186,18944,18945,18947,18949,18951,18953],{"class":188,"line":11313},[186,18946,3479],{"class":202},[186,18948,2902],{"class":669},[186,18950,2428],{"class":202},[186,18952,2902],{"class":669},[186,18954,18955],{"class":202},"y;\n",[186,18957,18958,18961,18964],{"class":188,"line":11327},[186,18959,18960],{"class":202},"    p1.",[186,18962,18963],{"class":198},"setPoint",[186,18965,18966],{"class":202},"(x, y);\n",[186,18968,18969,18971,18974],{"class":188,"line":11333},[186,18970,18056],{"class":202},[186,18972,18973],{"class":198},"setCenter",[186,18975,18976],{"class":202},"(p1);\n",[186,18978,18979,18981,18983,18986],{"class":188,"line":11360},[186,18980,3023],{"class":202},[186,18982,2650],{"class":669},[186,18984,18985],{"class":532},"\"请输入测试点坐标：\"",[186,18987,634],{"class":202},[186,18989,18990,18992],{"class":188,"line":11369},[186,18991,16200],{"class":669},[186,18993,18994],{"class":202}," x1, y1;\n",[186,18996,18997,18999,19001,19004,19006],{"class":188,"line":11375},[186,18998,3479],{"class":202},[186,19000,2902],{"class":669},[186,19002,19003],{"class":202},"x1",[186,19005,2902],{"class":669},[186,19007,19008],{"class":202},"y1;\n",[186,19010,19011],{"class":188,"line":11383},[186,19012,19013],{"class":202},"    Point p2;\n",[186,19015,19016,19019,19021],{"class":188,"line":11388},[186,19017,19018],{"class":202},"    p2.",[186,19020,18963],{"class":198},[186,19022,19023],{"class":202},"(x1, y1);\n",[186,19025,19026,19029],{"class":188,"line":18065},[186,19027,19028],{"class":198},"    isInCircle",[186,19030,19031],{"class":202},"(c1, p2);\n",[186,19033,19034],{"class":188,"line":18071},[186,19035,639],{"class":202},[169,19037,19038],{},"在类中可以让另一个类作为本来的成员",[169,19040,19041],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[169,19043,19044],{},"创建point.h",[176,19046,19048],{"className":1612,"code":19047,"language":1614,"meta":181,"style":181},"#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",[183,19049,19050,19061,19067,19077,19083,19087,19092,19096,19100,19120,19124,19132,19140,19144,19148,19154,19160],{"__ignoreMap":181},[186,19051,19052,19055,19058],{"class":188,"line":189},[186,19053,19054],{"class":669},"#pragma",[186,19056,19057],{"class":198}," once",[186,19059,19060],{"class":192}," \u002F\u002F防止头文件重复包含\n",[186,19062,19063,19065],{"class":188,"line":49},[186,19064,3417],{"class":669},[186,19066,3420],{"class":532},[186,19068,19069,19071,19073,19075],{"class":188,"line":219},[186,19070,3425],{"class":669},[186,19072,3428],{"class":669},[186,19074,3431],{"class":198},[186,19076,634],{"class":202},[186,19078,19079,19081],{"class":188,"line":225},[186,19080,16156],{"class":669},[186,19082,18442],{"class":198},[186,19084,19085],{"class":188,"line":242},[186,19086,3018],{"class":202},[186,19088,19089],{"class":188,"line":248},[186,19090,19091],{"class":192},"\u002F\u002F做好声明与变量定义就可以\n",[186,19093,19094],{"class":188,"line":265},[186,19095,16178],{"class":669},[186,19097,19098],{"class":188,"line":271},[186,19099,18455],{"class":192},[186,19101,19102,19104,19106,19108,19110,19112,19114,19116,19118],{"class":188,"line":288},[186,19103,16371],{"class":669},[186,19105,18462],{"class":198},[186,19107,832],{"class":202},[186,19109,15499],{"class":669},[186,19111,18469],{"class":835},[186,19113,13898],{"class":202},[186,19115,15499],{"class":669},[186,19117,18476],{"class":835},[186,19119,1112],{"class":202},[186,19121,19122],{"class":188,"line":294},[186,19123,18494],{"class":192},[186,19125,19126,19128,19130],{"class":188,"line":1212},[186,19127,16200],{"class":669},[186,19129,18501],{"class":198},[186,19131,7099],{"class":202},[186,19133,19134,19136,19138],{"class":188,"line":1223},[186,19135,16200],{"class":669},[186,19137,18517],{"class":198},[186,19139,7099],{"class":202},[186,19141,19142],{"class":188,"line":1236},[186,19143,3867],{"emptyLinePlaceholder":1551},[186,19145,19146],{"class":188,"line":3096},[186,19147,16684],{"class":669},[186,19149,19150,19152],{"class":188,"line":3110},[186,19151,16200],{"class":669},[186,19153,18539],{"class":202},[186,19155,19156,19158],{"class":188,"line":3115},[186,19157,16200],{"class":669},[186,19159,18546],{"class":202},[186,19161,19162],{"class":188,"line":3121},[186,19163,5461],{"class":202},[169,19165,19166],{},"创建point.cpp",[176,19168,19170],{"className":1612,"code":19169,"language":1614,"meta":181,"style":181},"#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",[183,19171,19172,19179,19184,19218,19222,19238],{"__ignoreMap":181},[186,19173,19174,19176],{"class":188,"line":189},[186,19175,3417],{"class":669},[186,19177,19178],{"class":532},"\u003Cpoint.h>\n",[186,19180,19181],{"class":188,"line":49},[186,19182,19183],{"class":192},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[186,19185,19186,19188,19191,19194,19196,19198,19200,19202,19204,19206,19208,19210,19212,19214,19216],{"class":188,"line":219},[186,19187,16371],{"class":669},[186,19189,19190],{"class":198}," Point",[186,19192,19193],{"class":202},"::",[186,19195,18963],{"class":198},[186,19197,832],{"class":202},[186,19199,15499],{"class":669},[186,19201,18469],{"class":835},[186,19203,13898],{"class":202},[186,19205,15499],{"class":669},[186,19207,18476],{"class":835},[186,19209,18479],{"class":202},[186,19211,529],{"class":669},[186,19213,18484],{"class":202},[186,19215,529],{"class":669},[186,19217,18489],{"class":202},[186,19219,19220],{"class":188,"line":225},[186,19221,18494],{"class":192},[186,19223,19224,19226,19228,19230,19232,19234,19236],{"class":188,"line":242},[186,19225,16200],{"class":669},[186,19227,19190],{"class":198},[186,19229,19193],{"class":202},[186,19231,18725],{"class":198},[186,19233,18504],{"class":202},[186,19235,18507],{"class":669},[186,19237,18510],{"class":202},[186,19239,19240,19242,19244,19246,19248,19250,19252],{"class":188,"line":248},[186,19241,16200],{"class":669},[186,19243,19190],{"class":198},[186,19245,19193],{"class":202},[186,19247,18753],{"class":198},[186,19249,18504],{"class":202},[186,19251,18507],{"class":669},[186,19253,18524],{"class":202},[169,19255,19256],{},"创建circle.h",[176,19258,19260],{"className":1612,"code":19259,"language":1614,"meta":181,"style":181},"#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",[183,19261,19262,19269,19275,19285,19291,19297,19301,19305,19309,19323,19337,19341,19349,19357,19361,19365,19371,19375,19379],{"__ignoreMap":181},[186,19263,19264,19266],{"class":188,"line":189},[186,19265,19054],{"class":669},[186,19267,19268],{"class":198}," once\n",[186,19270,19271,19273],{"class":188,"line":49},[186,19272,3417],{"class":669},[186,19274,3420],{"class":532},[186,19276,19277,19279,19281,19283],{"class":188,"line":219},[186,19278,3425],{"class":669},[186,19280,3428],{"class":669},[186,19282,3431],{"class":198},[186,19284,634],{"class":202},[186,19286,19287,19289],{"class":188,"line":225},[186,19288,3417],{"class":669},[186,19290,19178],{"class":532},[186,19292,19293,19295],{"class":188,"line":242},[186,19294,16156],{"class":669},[186,19296,16159],{"class":198},[186,19298,19299],{"class":188,"line":248},[186,19300,3018],{"class":202},[186,19302,19303],{"class":188,"line":265},[186,19304,16178],{"class":669},[186,19306,19307],{"class":188,"line":271},[186,19308,18455],{"class":192},[186,19310,19311,19313,19315,19317,19319,19321],{"class":188,"line":288},[186,19312,16371],{"class":669},[186,19314,18575],{"class":198},[186,19316,832],{"class":202},[186,19318,15499],{"class":669},[186,19320,18582],{"class":835},[186,19322,1112],{"class":202},[186,19324,19325,19327,19329,19331,19333,19335],{"class":188,"line":294},[186,19326,16371],{"class":669},[186,19328,18597],{"class":198},[186,19330,832],{"class":202},[186,19332,18602],{"class":198},[186,19334,18605],{"class":835},[186,19336,1112],{"class":202},[186,19338,19339],{"class":188,"line":1212},[186,19340,18618],{"class":192},[186,19342,19343,19345,19347],{"class":188,"line":1223},[186,19344,16200],{"class":669},[186,19346,18625],{"class":198},[186,19348,7099],{"class":202},[186,19350,19351,19353,19355],{"class":188,"line":1236},[186,19352,18637],{"class":198},[186,19354,18640],{"class":198},[186,19356,7099],{"class":202},[186,19358,19359],{"class":188,"line":3096},[186,19360,3867],{"emptyLinePlaceholder":1551},[186,19362,19363],{"class":188,"line":3110},[186,19364,16684],{"class":669},[186,19366,19367,19369],{"class":188,"line":3115},[186,19368,16200],{"class":669},[186,19370,16190],{"class":202},[186,19372,19373],{"class":188,"line":3121},[186,19374,18666],{"class":192},[186,19376,19377],{"class":188,"line":3142},[186,19378,18671],{"class":202},[186,19380,19381],{"class":188,"line":3147},[186,19382,5461],{"class":202},[169,19384,19385],{},"创建circle.cpp",[176,19387,19389],{"className":1612,"code":19388,"language":1614,"meta":181,"style":181},"#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",[183,19390,19391,19398,19421,19443,19448,19464],{"__ignoreMap":181},[186,19392,19393,19395],{"class":188,"line":189},[186,19394,3417],{"class":669},[186,19396,19397],{"class":532},"\u003Ccircle.h>\n",[186,19399,19400,19402,19405,19407,19409,19411,19413,19415,19417,19419],{"class":188,"line":49},[186,19401,6827],{"class":669},[186,19403,19404],{"class":198}," Circle",[186,19406,19193],{"class":202},[186,19408,18921],{"class":198},[186,19410,832],{"class":202},[186,19412,15499],{"class":669},[186,19414,18582],{"class":835},[186,19416,18585],{"class":202},[186,19418,529],{"class":669},[186,19420,18590],{"class":202},[186,19422,19423,19425,19427,19429,19431,19433,19435,19437,19439,19441],{"class":188,"line":219},[186,19424,6827],{"class":669},[186,19426,19404],{"class":198},[186,19428,19193],{"class":202},[186,19430,18973],{"class":198},[186,19432,832],{"class":202},[186,19434,18602],{"class":198},[186,19436,18605],{"class":835},[186,19438,18608],{"class":202},[186,19440,529],{"class":669},[186,19442,18613],{"class":202},[186,19444,19445],{"class":188,"line":225},[186,19446,19447],{"class":192},"\u002F\u002F获取属性\n",[186,19449,19450,19452,19454,19456,19458,19460,19462],{"class":188,"line":242},[186,19451,15499],{"class":669},[186,19453,19404],{"class":198},[186,19455,19193],{"class":202},[186,19457,18805],{"class":198},[186,19459,18504],{"class":202},[186,19461,18507],{"class":669},[186,19463,18632],{"class":202},[186,19465,19466,19468,19470,19472,19474,19476,19478],{"class":188,"line":248},[186,19467,18602],{"class":198},[186,19469,19404],{"class":198},[186,19471,19193],{"class":202},[186,19473,18719],{"class":198},[186,19475,18504],{"class":202},[186,19477,18507],{"class":669},[186,19479,18647],{"class":202},[169,19481,19482],{},"使用封装的类",[176,19484,19486],{"className":1612,"code":19485,"language":1614,"meta":181,"style":181},"#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",[183,19487,19488,19494,19504,19510,19516,19540,19544,19570,19596,19620,19634,19638,19650,19654,19658,19662,19674,19678,19682,19690,19694,19698,19702,19706,19710,19720,19726,19734,19742,19752,19758,19770,19778,19786,19796,19802,19814,19818,19826,19832],{"__ignoreMap":181},[186,19489,19490,19492],{"class":188,"line":189},[186,19491,3417],{"class":669},[186,19493,3420],{"class":532},[186,19495,19496,19498,19500,19502],{"class":188,"line":49},[186,19497,3425],{"class":669},[186,19499,3428],{"class":669},[186,19501,3431],{"class":198},[186,19503,634],{"class":202},[186,19505,19506,19508],{"class":188,"line":219},[186,19507,3417],{"class":669},[186,19509,19397],{"class":532},[186,19511,19512,19514],{"class":188,"line":225},[186,19513,3417],{"class":669},[186,19515,19178],{"class":532},[186,19517,19518,19520,19522,19524,19526,19528,19530,19532,19534,19536,19538],{"class":188,"line":242},[186,19519,6827],{"class":669},[186,19521,18682],{"class":198},[186,19523,832],{"class":202},[186,19525,18687],{"class":198},[186,19527,12047],{"class":669},[186,19529,1899],{"class":835},[186,19531,1988],{"class":202},[186,19533,18602],{"class":198},[186,19535,12047],{"class":669},[186,19537,169],{"class":835},[186,19539,1629],{"class":202},[186,19541,19542],{"class":188,"line":248},[186,19543,3018],{"class":202},[186,19545,19546,19548,19550,19552,19554,19556,19558,19560,19562,19564,19566,19568],{"class":188,"line":265},[186,19547,16200],{"class":669},[186,19549,18712],{"class":202},[186,19551,529],{"class":669},[186,19553,17803],{"class":202},[186,19555,18719],{"class":198},[186,19557,18722],{"class":202},[186,19559,18725],{"class":198},[186,19561,14513],{"class":202},[186,19563,2142],{"class":669},[186,19565,17349],{"class":202},[186,19567,18725],{"class":198},[186,19569,7099],{"class":202},[186,19571,19572,19574,19576,19578,19580,19582,19584,19586,19588,19590,19592,19594],{"class":188,"line":271},[186,19573,16200],{"class":669},[186,19575,18742],{"class":202},[186,19577,529],{"class":669},[186,19579,17803],{"class":202},[186,19581,18719],{"class":198},[186,19583,18722],{"class":202},[186,19585,18753],{"class":198},[186,19587,14513],{"class":202},[186,19589,2142],{"class":669},[186,19591,17349],{"class":202},[186,19593,18753],{"class":198},[186,19595,7099],{"class":202},[186,19597,19598,19600,19602,19604,19606,19608,19610,19612,19614,19616,19618],{"class":188,"line":288},[186,19599,16200],{"class":669},[186,19601,18770],{"class":202},[186,19603,529],{"class":669},[186,19605,18775],{"class":198},[186,19607,18778],{"class":202},[186,19609,2065],{"class":669},[186,19611,18712],{"class":202},[186,19613,2091],{"class":669},[186,19615,18742],{"class":202},[186,19617,2065],{"class":669},[186,19619,18791],{"class":202},[186,19621,19622,19624,19626,19628,19630,19632],{"class":188,"line":294},[186,19623,4567],{"class":669},[186,19625,18798],{"class":202},[186,19627,520],{"class":669},[186,19629,17803],{"class":202},[186,19631,18805],{"class":198},[186,19633,18808],{"class":202},[186,19635,19636],{"class":188,"line":1212},[186,19637,3497],{"class":202},[186,19639,19640,19642,19644,19646,19648],{"class":188,"line":1223},[186,19641,11132],{"class":202},[186,19643,2650],{"class":669},[186,19645,18821],{"class":532},[186,19647,2917],{"class":669},[186,19649,10303],{"class":202},[186,19651,19652],{"class":188,"line":1236},[186,19653,3654],{"class":202},[186,19655,19656],{"class":188,"line":3096},[186,19657,18284],{"class":669},[186,19659,19660],{"class":188,"line":3110},[186,19661,3497],{"class":202},[186,19663,19664,19666,19668,19670,19672],{"class":188,"line":3115},[186,19665,11132],{"class":202},[186,19667,2650],{"class":669},[186,19669,18846],{"class":532},[186,19671,2917],{"class":669},[186,19673,10303],{"class":202},[186,19675,19676],{"class":188,"line":3121},[186,19677,3654],{"class":202},[186,19679,19680],{"class":188,"line":3142},[186,19681,639],{"class":202},[186,19683,19684,19686,19688],{"class":188,"line":3147},[186,19685,1626],{"class":669},[186,19687,3440],{"class":198},[186,19689,3443],{"class":202},[186,19691,19692],{"class":188,"line":3161},[186,19693,3018],{"class":202},[186,19695,19696],{"class":188,"line":3166},[186,19697,16515],{"class":192},[186,19699,19700],{"class":188,"line":3195},[186,19701,16262],{"class":202},[186,19703,19704],{"class":188,"line":3200},[186,19705,18883],{"class":202},[186,19707,19708],{"class":188,"line":3217},[186,19709,18455],{"class":192},[186,19711,19712,19714,19716,19718],{"class":188,"line":3222},[186,19713,3023],{"class":202},[186,19715,2650],{"class":669},[186,19717,18896],{"class":532},[186,19719,634],{"class":202},[186,19721,19722,19724],{"class":188,"line":3227},[186,19723,16200],{"class":669},[186,19725,18905],{"class":202},[186,19727,19728,19730,19732],{"class":188,"line":3232},[186,19729,3479],{"class":202},[186,19731,2902],{"class":669},[186,19733,18914],{"class":202},[186,19735,19736,19738,19740],{"class":188,"line":3246},[186,19737,18056],{"class":202},[186,19739,18921],{"class":198},[186,19741,18924],{"class":202},[186,19743,19744,19746,19748,19750],{"class":188,"line":3251},[186,19745,3023],{"class":202},[186,19747,2650],{"class":669},[186,19749,18933],{"class":532},[186,19751,634],{"class":202},[186,19753,19754,19756],{"class":188,"line":4044},[186,19755,16200],{"class":669},[186,19757,18942],{"class":202},[186,19759,19760,19762,19764,19766,19768],{"class":188,"line":4058},[186,19761,3479],{"class":202},[186,19763,2902],{"class":669},[186,19765,2428],{"class":202},[186,19767,2902],{"class":669},[186,19769,18955],{"class":202},[186,19771,19772,19774,19776],{"class":188,"line":4066},[186,19773,18960],{"class":202},[186,19775,18963],{"class":198},[186,19777,18966],{"class":202},[186,19779,19780,19782,19784],{"class":188,"line":4071},[186,19781,18056],{"class":202},[186,19783,18973],{"class":198},[186,19785,18976],{"class":202},[186,19787,19788,19790,19792,19794],{"class":188,"line":4077},[186,19789,3023],{"class":202},[186,19791,2650],{"class":669},[186,19793,18985],{"class":532},[186,19795,634],{"class":202},[186,19797,19798,19800],{"class":188,"line":4083},[186,19799,16200],{"class":669},[186,19801,18994],{"class":202},[186,19803,19804,19806,19808,19810,19812],{"class":188,"line":4088},[186,19805,3479],{"class":202},[186,19807,2902],{"class":669},[186,19809,19003],{"class":202},[186,19811,2902],{"class":669},[186,19813,19008],{"class":202},[186,19815,19816],{"class":188,"line":9411},[186,19817,19013],{"class":202},[186,19819,19820,19822,19824],{"class":188,"line":9435},[186,19821,19018],{"class":202},[186,19823,18963],{"class":198},[186,19825,19023],{"class":202},[186,19827,19828,19830],{"class":188,"line":9440},[186,19829,19028],{"class":198},[186,19831,19031],{"class":202},[186,19833,19834],{"class":188,"line":9446},[186,19835,639],{"class":202},[14,19837,19839],{"id":19838},"_82对象的初始化清理","8.2对象的初始化清理",[19,19841,19842,19845],{},[22,19843,19844],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[22,19846,19847],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[29,19849,19851],{"id":19850},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[169,19853,19854,19855,19858],{},"对象的",[54,19856,19857],{},"初始化和清理","也是两个非常重要的安全问题",[169,19860,19861],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[169,19863,19864],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[169,19866,19867,19868,19871,19872,19875],{},"c++利用了",[54,19869,19870],{},"构造函数","和",[54,19873,19874],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[169,19877,19878,19879],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[54,19880,19881],{},"我们不提供构造和析构，编译器会提供",[169,19883,19884],{},[54,19885,19886],{},"编译器提供的构造函数和析构函数是空实现。",[19,19888,19889,19892],{},[22,19890,19891],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[22,19893,19894,19895,19898],{},"析构函数：主要作用在于对象",[54,19896,19897],{},"销毁前","系统自动调用，执行一些清理工作。",[169,19900,19901,19904],{},[54,19902,19903],{},"构造函数语法：",[183,19905,19906],{},"类名(){}",[34,19908,19909,19912,19915,19918,19921],{},[22,19910,19911],{},"构造函数，没有返回值也不写void",[22,19913,19914],{},"函数名称与类名相同",[22,19916,19917],{},"构造函数可以有参数，因此可以发生重载",[22,19919,19920],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[22,19922,19923,19924,2039],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[183,19925,19926],{},"Person(){}",[169,19928,19929,15257,19932],{},[54,19930,19931],{},"析构函数语法：",[183,19933,19934],{},"~类名(){}",[34,19936,19937,19940,19943,19949],{},[22,19938,19939],{},"析构函数，没有返回值也不写void",[22,19941,19942],{},"函数名称与类名相同,在名称前加上符号  ~",[22,19944,19945,19946],{},"析构函数不可以有参数，因此",[54,19947,19948],{},"不可以发生重载",[22,19950,19951],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[176,19953,19955],{"className":1612,"code":19954,"language":1614,"meta":181,"style":181},"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",[183,19956,19957,19963,19967,19971,19976,19983,19987,20000,20004,20009,20016,20020,20033,20037,20041,20045,20049,20057,20061,20069,20073,20077,20085,20089,20094,20098,20105,20109,20122,20126,20134],{"__ignoreMap":181},[186,19958,19959,19961],{"class":188,"line":189},[186,19960,16156],{"class":669},[186,19962,16633],{"class":198},[186,19964,19965],{"class":188,"line":49},[186,19966,3018],{"class":202},[186,19968,19969],{"class":188,"line":219},[186,19970,16178],{"class":669},[186,19972,19973],{"class":188,"line":225},[186,19974,19975],{"class":192},"    \u002F\u002F构造函数\n",[186,19977,19978,19981],{"class":188,"line":242},[186,19979,19980],{"class":198},"    Person",[186,19982,3443],{"class":202},[186,19984,19985],{"class":188,"line":248},[186,19986,3497],{"class":202},[186,19988,19989,19991,19993,19996,19998],{"class":188,"line":265},[186,19990,11132],{"class":202},[186,19992,2650],{"class":669},[186,19994,19995],{"class":532}," \"Person的构造函数调用\"",[186,19997,2917],{"class":669},[186,19999,10303],{"class":202},[186,20001,20002],{"class":188,"line":271},[186,20003,3654],{"class":202},[186,20005,20006],{"class":188,"line":288},[186,20007,20008],{"class":192},"    \u002F\u002F析构函数\n",[186,20010,20011,20014],{"class":188,"line":294},[186,20012,20013],{"class":198},"    ~Person",[186,20015,3443],{"class":202},[186,20017,20018],{"class":188,"line":1212},[186,20019,3497],{"class":202},[186,20021,20022,20024,20026,20029,20031],{"class":188,"line":1223},[186,20023,11132],{"class":202},[186,20025,2650],{"class":669},[186,20027,20028],{"class":532}," \"Person的析构函数调用\"",[186,20030,2917],{"class":669},[186,20032,10303],{"class":202},[186,20034,20035],{"class":188,"line":1236},[186,20036,3654],{"class":202},[186,20038,20039],{"class":188,"line":3096},[186,20040,3867],{"emptyLinePlaceholder":1551},[186,20042,20043],{"class":188,"line":3110},[186,20044,5461],{"class":202},[186,20046,20047],{"class":188,"line":3115},[186,20048,3867],{"emptyLinePlaceholder":1551},[186,20050,20051,20053,20055],{"class":188,"line":3121},[186,20052,6827],{"class":669},[186,20054,7051],{"class":198},[186,20056,3443],{"class":202},[186,20058,20059],{"class":188,"line":3142},[186,20060,3018],{"class":202},[186,20062,20063,20066],{"class":188,"line":3147},[186,20064,20065],{"class":202},"    Person p;",[186,20067,20068],{"class":192},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[186,20070,20071],{"class":188,"line":3161},[186,20072,639],{"class":202},[186,20074,20075],{"class":188,"line":3166},[186,20076,3867],{"emptyLinePlaceholder":1551},[186,20078,20079,20081,20083],{"class":188,"line":3195},[186,20080,1626],{"class":669},[186,20082,3440],{"class":198},[186,20084,12316],{"class":202},[186,20086,20087],{"class":188,"line":3200},[186,20088,14673],{"class":202},[186,20090,20091],{"class":188,"line":3217},[186,20092,20093],{"class":192},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[186,20095,20096],{"class":188,"line":3222},[186,20097,3867],{"emptyLinePlaceholder":1551},[186,20099,20100,20102],{"class":188,"line":3227},[186,20101,20065],{"class":202},[186,20103,20104],{"class":192},"\u002F\u002F只有构造函数\n",[186,20106,20107],{"class":188,"line":3232},[186,20108,3867],{"emptyLinePlaceholder":1551},[186,20110,20111,20113,20115,20117,20119],{"class":188,"line":3246},[186,20112,3770],{"class":198},[186,20114,832],{"class":202},[186,20116,3775],{"class":532},[186,20118,7429],{"class":202},[186,20120,20121],{"class":192},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[186,20123,20124],{"class":188,"line":3251},[186,20125,3867],{"emptyLinePlaceholder":1551},[186,20127,20128,20130,20132],{"class":188,"line":4044},[186,20129,5556],{"class":669},[186,20131,5559],{"class":206},[186,20133,634],{"class":202},[186,20135,20136],{"class":188,"line":4058},[186,20137,639],{"class":202},[169,20139,20140],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[29,20142,20144],{"id":20143},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[169,20146,20147],{},"两种分类方式：",[169,20149,20150],{},"​\t按参数分为： 有参构造和无参构造",[169,20152,20153],{},"​\t按类型分为： 普通构造和拷贝构造",[169,20155,20156],{},"三种调用方式：",[169,20158,20159],{},"​\t括号法",[169,20161,20162],{},"​\t显示法",[169,20164,20165],{},"​\t隐式转换法",[176,20167,20169],{"className":1612,"code":20168,"language":1614,"meta":181,"style":181},"#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",[183,20170,20171,20177,20187,20192,20197,20202,20207,20211,20219,20223,20227,20231,20237,20241,20254,20258,20270,20274,20283,20296,20300,20304,20310,20314,20327,20331,20336,20352,20356,20361,20370,20383,20387,20393,20397,20402,20410,20414,20419,20423,20431,20435,20440,20445,20450,20455,20460,20464,20469,20474,20479,20484,20488,20493,20498,20514,20526,20531,20535,20540,20545,20550,20554,20559,20573,20586,20590,20598,20602,20608,20614,20622],{"__ignoreMap":181},[186,20172,20173,20175],{"class":188,"line":189},[186,20174,3417],{"class":669},[186,20176,3420],{"class":532},[186,20178,20179,20181,20183,20185],{"class":188,"line":49},[186,20180,3425],{"class":669},[186,20182,3428],{"class":669},[186,20184,3431],{"class":198},[186,20186,634],{"class":202},[186,20188,20189],{"class":188,"line":219},[186,20190,20191],{"class":192},"\u002F\u002F1.构造函数的分类及调用\n",[186,20193,20194],{"class":188,"line":225},[186,20195,20196],{"class":192},"\u002F\u002F分类\n",[186,20198,20199],{"class":188,"line":242},[186,20200,20201],{"class":192},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[186,20203,20204],{"class":188,"line":248},[186,20205,20206],{"class":192},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[186,20208,20209],{"class":188,"line":265},[186,20210,3867],{"emptyLinePlaceholder":1551},[186,20212,20213,20215,20217],{"class":188,"line":271},[186,20214,16156],{"class":669},[186,20216,17031],{"class":198},[186,20218,4141],{"class":202},[186,20220,20221],{"class":188,"line":288},[186,20222,3018],{"class":202},[186,20224,20225],{"class":188,"line":294},[186,20226,16178],{"class":669},[186,20228,20229],{"class":188,"line":1212},[186,20230,19975],{"class":192},[186,20232,20233,20235],{"class":188,"line":1223},[186,20234,19980],{"class":198},[186,20236,3443],{"class":202},[186,20238,20239],{"class":188,"line":1236},[186,20240,3497],{"class":202},[186,20242,20243,20245,20247,20250,20252],{"class":188,"line":3096},[186,20244,4917],{"class":202},[186,20246,2650],{"class":669},[186,20248,20249],{"class":532},"\"Person构造函数无参构造\"",[186,20251,2650],{"class":669},[186,20253,2672],{"class":202},[186,20255,20256],{"class":188,"line":3110},[186,20257,3654],{"class":202},[186,20259,20260,20262,20264,20266,20268],{"class":188,"line":3115},[186,20261,19980],{"class":198},[186,20263,832],{"class":202},[186,20265,1626],{"class":669},[186,20267,2871],{"class":835},[186,20269,1629],{"class":202},[186,20271,20272],{"class":188,"line":3121},[186,20273,3497],{"class":202},[186,20275,20276,20279,20281],{"class":188,"line":3142},[186,20277,20278],{"class":202},"        age",[186,20280,529],{"class":669},[186,20282,7660],{"class":202},[186,20284,20285,20287,20289,20292,20294],{"class":188,"line":3147},[186,20286,4917],{"class":202},[186,20288,2650],{"class":669},[186,20290,20291],{"class":532},"\"Person构造函数有参构造\"",[186,20293,2650],{"class":669},[186,20295,2672],{"class":202},[186,20297,20298],{"class":188,"line":3161},[186,20299,3654],{"class":202},[186,20301,20302],{"class":188,"line":3166},[186,20303,20008],{"class":192},[186,20305,20306,20308],{"class":188,"line":3195},[186,20307,20013],{"class":198},[186,20309,3443],{"class":202},[186,20311,20312],{"class":188,"line":3200},[186,20313,3497],{"class":202},[186,20315,20316,20318,20320,20323,20325],{"class":188,"line":3217},[186,20317,4917],{"class":202},[186,20319,2650],{"class":669},[186,20321,20322],{"class":532},"\"Person析构函数被调用\"",[186,20324,2650],{"class":669},[186,20326,2672],{"class":202},[186,20328,20329],{"class":188,"line":3222},[186,20330,3654],{"class":202},[186,20332,20333],{"class":188,"line":3227},[186,20334,20335],{"class":192},"    \u002F\u002F拷贝构造函数\n",[186,20337,20338,20340,20342,20344,20346,20348,20350],{"class":188,"line":3232},[186,20339,19980],{"class":198},[186,20341,832],{"class":202},[186,20343,8255],{"class":669},[186,20345,17031],{"class":198},[186,20347,12047],{"class":669},[186,20349,169],{"class":835},[186,20351,1629],{"class":202},[186,20353,20354],{"class":188,"line":3246},[186,20355,3497],{"class":202},[186,20357,20358],{"class":188,"line":3251},[186,20359,20360],{"class":192},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[186,20362,20363,20365,20367],{"class":188,"line":4044},[186,20364,20278],{"class":202},[186,20366,529],{"class":669},[186,20368,20369],{"class":202},"p.age;\n",[186,20371,20372,20374,20376,20379,20381],{"class":188,"line":4058},[186,20373,4917],{"class":202},[186,20375,2650],{"class":669},[186,20377,20378],{"class":532},"\"Person拷贝构造函数被调用\"",[186,20380,2650],{"class":669},[186,20382,2672],{"class":202},[186,20384,20385],{"class":188,"line":4066},[186,20386,3654],{"class":202},[186,20388,20389,20391],{"class":188,"line":4071},[186,20390,3452],{"class":669},[186,20392,9260],{"class":202},[186,20394,20395],{"class":188,"line":4077},[186,20396,5461],{"class":202},[186,20398,20399],{"class":188,"line":4083},[186,20400,20401],{"class":192},"\u002F\u002F调用\n",[186,20403,20404,20406,20408],{"class":188,"line":4088},[186,20405,6827],{"class":669},[186,20407,7051],{"class":198},[186,20409,3443],{"class":202},[186,20411,20412],{"class":188,"line":9411},[186,20413,3018],{"class":202},[186,20415,20416],{"class":188,"line":9435},[186,20417,20418],{"class":192},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[186,20420,20421],{"class":188,"line":9440},[186,20422,639],{"class":202},[186,20424,20425,20427,20429],{"class":188,"line":9446},[186,20426,6827],{"class":669},[186,20428,7120],{"class":198},[186,20430,3443],{"class":202},[186,20432,20433],{"class":188,"line":9473},[186,20434,3018],{"class":202},[186,20436,20437],{"class":188,"line":9478},[186,20438,20439],{"class":192},"    \u002F\u002F1.括号法\n",[186,20441,20442],{"class":188,"line":9484},[186,20443,20444],{"class":192},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[186,20446,20447],{"class":188,"line":9496},[186,20448,20449],{"class":192},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[186,20451,20452],{"class":188,"line":9508},[186,20453,20454],{"class":192},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[186,20456,20457],{"class":188,"line":9520},[186,20458,20459],{"class":192},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[186,20461,20462],{"class":188,"line":11179},[186,20463,3867],{"emptyLinePlaceholder":1551},[186,20465,20466],{"class":188,"line":11204},[186,20467,20468],{"class":192},"    \u002F\u002F注意事项\n",[186,20470,20471],{"class":188,"line":11227},[186,20472,20473],{"class":192},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[186,20475,20476],{"class":188,"line":11251},[186,20477,20478],{"class":192},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[186,20480,20481],{"class":188,"line":11256},[186,20482,20483],{"class":192},"    \u002F\u002F Person p4();\n",[186,20485,20486],{"class":188,"line":11261},[186,20487,3867],{"emptyLinePlaceholder":1551},[186,20489,20490],{"class":188,"line":11266},[186,20491,20492],{"class":192},"    \u002F\u002F2.显示法\n",[186,20494,20495],{"class":188,"line":11275},[186,20496,20497],{"class":202},"    Person p1;\n",[186,20499,20500,20503,20505,20508,20510,20512],{"class":188,"line":11280},[186,20501,20502],{"class":202},"    Person p2",[186,20504,529],{"class":669},[186,20506,20507],{"class":198},"Person",[186,20509,832],{"class":202},[186,20511,2056],{"class":206},[186,20513,1112],{"class":202},[186,20515,20516,20519,20521,20523],{"class":188,"line":11286},[186,20517,20518],{"class":202},"    Person p3",[186,20520,529],{"class":669},[186,20522,20507],{"class":198},[186,20524,20525],{"class":202},"(p2);\n",[186,20527,20528],{"class":188,"line":11307},[186,20529,20530],{"class":192},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[186,20532,20533],{"class":188,"line":11313},[186,20534,3867],{"emptyLinePlaceholder":1551},[186,20536,20537],{"class":188,"line":11327},[186,20538,20539],{"class":192},"    \u002F\u002F 注意事项2\n",[186,20541,20542],{"class":188,"line":11333},[186,20543,20544],{"class":192},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[186,20546,20547],{"class":188,"line":11360},[186,20548,20549],{"class":192},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[186,20551,20552],{"class":188,"line":11369},[186,20553,3867],{"emptyLinePlaceholder":1551},[186,20555,20556],{"class":188,"line":11375},[186,20557,20558],{"class":192},"    \u002F\u002F3.隐士转换法\n",[186,20560,20561,20564,20566,20568,20570],{"class":188,"line":11383},[186,20562,20563],{"class":202},"    Person p4",[186,20565,529],{"class":669},[186,20567,2056],{"class":206},[186,20569,1676],{"class":202},[186,20571,20572],{"class":192},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[186,20574,20575,20578,20580,20583],{"class":188,"line":11388},[186,20576,20577],{"class":202},"    Person p5",[186,20579,529],{"class":669},[186,20581,20582],{"class":202},"p4;",[186,20584,20585],{"class":192}," \u002F\u002F 这里会调用拷贝构造函数\n",[186,20587,20588],{"class":188,"line":18065},[186,20589,639],{"class":202},[186,20591,20592,20594,20596],{"class":188,"line":18071},[186,20593,1626],{"class":669},[186,20595,3440],{"class":198},[186,20597,3443],{"class":202},[186,20599,20600],{"class":188,"line":18094},[186,20601,3018],{"class":202},[186,20603,20604,20606],{"class":188,"line":18100},[186,20605,7096],{"class":198},[186,20607,7099],{"class":202},[186,20609,20610,20612],{"class":188,"line":18123},[186,20611,7165],{"class":198},[186,20613,7099],{"class":202},[186,20615,20616,20618,20620],{"class":188,"line":18137},[186,20617,5556],{"class":669},[186,20619,5559],{"class":206},[186,20621,634],{"class":202},[186,20623,20624],{"class":188,"line":18157},[186,20625,639],{"class":202},[169,20627,20628,20631],{},[54,20629,20630],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[29,20633,20635],{"id":20634},"_823拷贝构造函数","8.2.3拷贝构造函数",[169,20637,20638],{},"C++中拷贝构造函数调用时机通常有三种情况",[19,20640,20641,20644,20647],{},[22,20642,20643],{},"使用一个已经创建完毕的对象来初始化一个新对象",[22,20645,20646],{},"值传递的方式给函数参数传值",[22,20648,20649],{},"以值方式返回局部对象",[176,20651,20653],{"className":1612,"code":20652,"language":1614,"meta":181,"style":181},"#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",[183,20654,20655,20661,20671,20675,20680,20684,20689,20694,20699,20705,20709,20713,20719,20723,20736,20740,20745,20757,20761,20769,20782,20786,20790,20806,20810,20819,20832,20836,20842,20846,20858,20862,20868,20872,20876,20884,20888,20901,20909,20927,20931,20936,20941,20956,20960,20973,20977,20985,20989,20993,21001,21005,21010,21019,21023,21027,21052,21062,21066,21074,21078,21089,21114,21118,21122,21126,21134,21138,21143,21148,21155,21160,21165,21170,21175,21179,21184,21188,21193,21197,21202,21207,21211,21215,21220,21225,21233],{"__ignoreMap":181},[186,20656,20657,20659],{"class":188,"line":189},[186,20658,3417],{"class":669},[186,20660,3420],{"class":532},[186,20662,20663,20665,20667,20669],{"class":188,"line":49},[186,20664,3425],{"class":669},[186,20666,3428],{"class":669},[186,20668,3431],{"class":198},[186,20670,634],{"class":202},[186,20672,20673],{"class":188,"line":219},[186,20674,3867],{"emptyLinePlaceholder":1551},[186,20676,20677],{"class":188,"line":225},[186,20678,20679],{"class":192},"\u002F\u002F拷贝构造函数调用时机\n",[186,20681,20682],{"class":188,"line":242},[186,20683,3867],{"emptyLinePlaceholder":1551},[186,20685,20686],{"class":188,"line":248},[186,20687,20688],{"class":192},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[186,20690,20691],{"class":188,"line":265},[186,20692,20693],{"class":192},"\u002F\u002F2.值传递的方式给函数参数传值\n",[186,20695,20696],{"class":188,"line":271},[186,20697,20698],{"class":192},"\u002F\u002F3.以值方式返回局部对象\n",[186,20700,20701,20703],{"class":188,"line":288},[186,20702,16156],{"class":669},[186,20704,16633],{"class":198},[186,20706,20707],{"class":188,"line":294},[186,20708,3018],{"class":202},[186,20710,20711],{"class":188,"line":1212},[186,20712,16178],{"class":669},[186,20714,20715,20717],{"class":188,"line":1223},[186,20716,19980],{"class":198},[186,20718,3443],{"class":202},[186,20720,20721],{"class":188,"line":1236},[186,20722,3497],{"class":202},[186,20724,20725,20727,20729,20732,20734],{"class":188,"line":3096},[186,20726,11132],{"class":202},[186,20728,2650],{"class":669},[186,20730,20731],{"class":532}," \"Person的默认构造函数调用\"",[186,20733,2917],{"class":669},[186,20735,10303],{"class":202},[186,20737,20738],{"class":188,"line":3110},[186,20739,3654],{"class":202},[186,20741,20742],{"class":188,"line":3115},[186,20743,20744],{"class":192},"    \u002F\u002F有参构造\n",[186,20746,20747,20749,20751,20753,20755],{"class":188,"line":3121},[186,20748,19980],{"class":198},[186,20750,832],{"class":202},[186,20752,1626],{"class":669},[186,20754,17150],{"class":835},[186,20756,1629],{"class":202},[186,20758,20759],{"class":188,"line":3142},[186,20760,3497],{"class":202},[186,20762,20763,20765,20767],{"class":188,"line":3147},[186,20764,17204],{"class":202},[186,20766,529],{"class":669},[186,20768,9260],{"class":202},[186,20770,20771,20773,20775,20778,20780],{"class":188,"line":3161},[186,20772,11132],{"class":202},[186,20774,2650],{"class":669},[186,20776,20777],{"class":532}," \"Person的有参构造函数调用\"",[186,20779,2917],{"class":669},[186,20781,10303],{"class":202},[186,20783,20784],{"class":188,"line":3166},[186,20785,3654],{"class":202},[186,20787,20788],{"class":188,"line":3195},[186,20789,20335],{"class":192},[186,20791,20792,20794,20796,20798,20800,20802,20804],{"class":188,"line":3200},[186,20793,19980],{"class":198},[186,20795,832],{"class":202},[186,20797,8255],{"class":669},[186,20799,17031],{"class":198},[186,20801,12047],{"class":669},[186,20803,169],{"class":835},[186,20805,1629],{"class":202},[186,20807,20808],{"class":188,"line":3217},[186,20809,3497],{"class":202},[186,20811,20812,20814,20816],{"class":188,"line":3222},[186,20813,17204],{"class":202},[186,20815,529],{"class":669},[186,20817,20818],{"class":202}," p.m_Age;\n",[186,20820,20821,20823,20825,20828,20830],{"class":188,"line":3227},[186,20822,11132],{"class":202},[186,20824,2650],{"class":669},[186,20826,20827],{"class":532}," \"Person的拷贝构造函数调用\"",[186,20829,2917],{"class":669},[186,20831,10303],{"class":202},[186,20833,20834],{"class":188,"line":3232},[186,20835,3654],{"class":202},[186,20837,20838,20840],{"class":188,"line":3246},[186,20839,20013],{"class":198},[186,20841,3443],{"class":202},[186,20843,20844],{"class":188,"line":3251},[186,20845,3497],{"class":202},[186,20847,20848,20850,20852,20854,20856],{"class":188,"line":4044},[186,20849,11132],{"class":202},[186,20851,2650],{"class":669},[186,20853,20028],{"class":532},[186,20855,2917],{"class":669},[186,20857,10303],{"class":202},[186,20859,20860],{"class":188,"line":4058},[186,20861,3654],{"class":202},[186,20863,20864,20866],{"class":188,"line":4066},[186,20865,3452],{"class":669},[186,20867,17127],{"class":202},[186,20869,20870],{"class":188,"line":4071},[186,20871,5461],{"class":202},[186,20873,20874],{"class":188,"line":4077},[186,20875,20688],{"class":192},[186,20877,20878,20880,20882],{"class":188,"line":4083},[186,20879,6827],{"class":669},[186,20881,7051],{"class":198},[186,20883,3443],{"class":202},[186,20885,20886],{"class":188,"line":4088},[186,20887,3018],{"class":202},[186,20889,20890,20893,20895,20897,20899],{"class":188,"line":9411},[186,20891,20892],{"class":202},"    Person ",[186,20894,8593],{"class":198},[186,20896,832],{"class":202},[186,20898,801],{"class":206},[186,20900,1112],{"class":202},[186,20902,20903,20905,20907],{"class":188,"line":9435},[186,20904,20892],{"class":202},[186,20906,8496],{"class":198},[186,20908,18976],{"class":202},[186,20910,20911,20913,20915,20918,20920,20923,20925],{"class":188,"line":9440},[186,20912,3023],{"class":202},[186,20914,2650],{"class":669},[186,20916,20917],{"class":532},"\"P2的年龄为：\"",[186,20919,2650],{"class":669},[186,20921,20922],{"class":202},"p2.m_Age",[186,20924,2650],{"class":669},[186,20926,2672],{"class":202},[186,20928,20929],{"class":188,"line":9446},[186,20930,639],{"class":202},[186,20932,20933],{"class":188,"line":9473},[186,20934,20935],{"class":192},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[186,20937,20938],{"class":188,"line":9478},[186,20939,20940],{"class":192},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[186,20942,20943,20945,20948,20950,20952,20954],{"class":188,"line":9484},[186,20944,6827],{"class":669},[186,20946,20947],{"class":198}," doWork",[186,20949,832],{"class":202},[186,20951,20507],{"class":198},[186,20953,8288],{"class":835},[186,20955,1629],{"class":202},[186,20957,20958],{"class":188,"line":9496},[186,20959,3018],{"class":202},[186,20961,20962,20964,20966,20969,20971],{"class":188,"line":9508},[186,20963,7992],{"class":202},[186,20965,2650],{"class":669},[186,20967,20968],{"class":532}," \"doWork函数调用\"",[186,20970,2917],{"class":669},[186,20972,10303],{"class":202},[186,20974,20975],{"class":188,"line":9520},[186,20976,639],{"class":202},[186,20978,20979,20981,20983],{"class":188,"line":11179},[186,20980,6827],{"class":669},[186,20982,7120],{"class":198},[186,20984,3443],{"class":202},[186,20986,20987],{"class":188,"line":11204},[186,20988,3018],{"class":202},[186,20990,20991],{"class":188,"line":11227},[186,20992,16775],{"class":202},[186,20994,20995,20998],{"class":188,"line":11251},[186,20996,20997],{"class":198},"    doWork",[186,20999,21000],{"class":202},"(p);\n",[186,21002,21003],{"class":188,"line":11256},[186,21004,639],{"class":202},[186,21006,21007],{"class":188,"line":11261},[186,21008,21009],{"class":192},"\u002F\u002F 3.以值方式返回局部对象\n",[186,21011,21012,21014,21017],{"class":188,"line":11266},[186,21013,20507],{"class":198},[186,21015,21016],{"class":198}," doWork2",[186,21018,3443],{"class":202},[186,21020,21021],{"class":188,"line":11275},[186,21022,3018],{"class":202},[186,21024,21025],{"class":188,"line":11280},[186,21026,20497],{"class":202},[186,21028,21029,21031,21033,21035,21037,21039,21041,21043,21045,21047,21049],{"class":188,"line":11286},[186,21030,3023],{"class":202},[186,21032,2650],{"class":669},[186,21034,832],{"class":202},[186,21036,1626],{"class":669},[186,21038,7981],{"class":669},[186,21040,2039],{"class":202},[186,21042,1963],{"class":669},[186,21044,8593],{"class":202},[186,21046,2650],{"class":669},[186,21048,2715],{"class":202},[186,21050,21051],{"class":192},"\u002F\u002F打印p1的地址\n",[186,21053,21054,21056,21059],{"class":188,"line":11307},[186,21055,5556],{"class":669},[186,21057,21058],{"class":202}," p1;",[186,21060,21061],{"class":192},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[186,21063,21064],{"class":188,"line":11313},[186,21065,639],{"class":202},[186,21067,21068,21070,21072],{"class":188,"line":11327},[186,21069,6827],{"class":669},[186,21071,7192],{"class":198},[186,21073,3443],{"class":202},[186,21075,21076],{"class":188,"line":11333},[186,21077,3018],{"class":202},[186,21079,21080,21083,21085,21087],{"class":188,"line":11360},[186,21081,21082],{"class":202},"    Person p ",[186,21084,529],{"class":669},[186,21086,21016],{"class":198},[186,21088,7099],{"class":202},[186,21090,21091,21093,21095,21097,21099,21101,21103,21105,21107,21109,21111],{"class":188,"line":11369},[186,21092,3023],{"class":202},[186,21094,2650],{"class":669},[186,21096,832],{"class":202},[186,21098,1626],{"class":669},[186,21100,7981],{"class":669},[186,21102,2039],{"class":202},[186,21104,1963],{"class":669},[186,21106,169],{"class":202},[186,21108,2650],{"class":669},[186,21110,2715],{"class":202},[186,21112,21113],{"class":192},"\u002F\u002F打印p的地址\n",[186,21115,21116],{"class":188,"line":11375},[186,21117,639],{"class":202},[186,21119,21120],{"class":188,"line":11383},[186,21121,3867],{"emptyLinePlaceholder":1551},[186,21123,21124],{"class":188,"line":11388},[186,21125,3867],{"emptyLinePlaceholder":1551},[186,21127,21128,21130,21132],{"class":188,"line":18065},[186,21129,1626],{"class":669},[186,21131,3440],{"class":198},[186,21133,3443],{"class":202},[186,21135,21136],{"class":188,"line":18071},[186,21137,3018],{"class":202},[186,21139,21140],{"class":188,"line":18094},[186,21141,21142],{"class":192},"    \u002F\u002F test01();\n",[186,21144,21145],{"class":188,"line":18100},[186,21146,21147],{"class":192},"    \u002F\u002F test02();\n",[186,21149,21150,21153],{"class":188,"line":18123},[186,21151,21152],{"class":198},"    test03",[186,21154,7099],{"class":202},[186,21156,21157],{"class":188,"line":18137},[186,21158,21159],{"class":192},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[186,21161,21162],{"class":188,"line":18157},[186,21163,21164],{"class":192},"\u002F\u002F 输出结果如下：\n",[186,21166,21167],{"class":188,"line":18163},[186,21168,21169],{"class":192},"\u002F\u002F Person的默认构造函数调用\n",[186,21171,21172],{"class":188,"line":18174},[186,21173,21174],{"class":192},"\u002F\u002F 0x7fffffffceec\n",[186,21176,21177],{"class":188,"line":18197},[186,21178,21174],{"class":192},[186,21180,21181],{"class":188,"line":18219},[186,21182,21183],{"class":192},"\u002F\u002F Person的析构函数调用\n",[186,21185,21186],{"class":188,"line":18224},[186,21187,3867],{"emptyLinePlaceholder":1551},[186,21189,21190],{"class":188,"line":18230},[186,21191,21192],{"class":192},"\u002F\u002F 之前的输出结果如下：\n",[186,21194,21195],{"class":188,"line":18244},[186,21196,21169],{"class":192},[186,21198,21199],{"class":188,"line":18257},[186,21200,21201],{"class":192},"\u002F\u002F 地址\n",[186,21203,21204],{"class":188,"line":18262},[186,21205,21206],{"class":192},"\u002F\u002F Person的拷贝构造函数调用\n",[186,21208,21209],{"class":188,"line":18276},[186,21210,21183],{"class":192},[186,21212,21213],{"class":188,"line":18281},[186,21214,21201],{"class":192},[186,21216,21217],{"class":188,"line":18287},[186,21218,21219],{"class":192},"\u002F\u002F (这两次输出的地址也是不同的) \n",[186,21221,21222],{"class":188,"line":18292},[186,21223,21224],{"class":192},"\u002F\u002F Person的析构函数调用     \n",[186,21226,21227,21229,21231],{"class":188,"line":18306},[186,21228,5556],{"class":669},[186,21230,5559],{"class":206},[186,21232,634],{"class":202},[186,21234,21235],{"class":188,"line":18311},[186,21236,639],{"class":202},[169,21238,21239],{},"简化版理解",[176,21241,21243],{"className":1612,"code":21242,"language":1614,"meta":181,"style":181},"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",[183,21244,21245,21253,21257,21263,21276,21287,21291,21303,21316,21324,21328,21344,21357,21366,21370,21375,21381,21394,21398,21402,21409,21413,21417,21422,21430,21434,21450,21463,21476,21480,21485,21493,21497,21501,21506,21511,21527,21535,21542,21548,21552,21556,21561,21569,21573,21577,21600,21607,21611,21615,21623,21627,21637,21659,21663,21667,21671,21679,21683,21688,21693,21699,21703,21713,21717,21725],{"__ignoreMap":181},[186,21246,21247,21249,21251],{"class":188,"line":189},[186,21248,16156],{"class":669},[186,21250,17031],{"class":198},[186,21252,622],{"class":202},[186,21254,21255],{"class":188,"line":49},[186,21256,16178],{"class":669},[186,21258,21259,21261],{"class":188,"line":219},[186,21260,19980],{"class":198},[186,21262,12316],{"class":202},[186,21264,21265,21267,21269,21272,21274],{"class":188,"line":225},[186,21266,11132],{"class":202},[186,21268,2650],{"class":669},[186,21270,21271],{"class":532}," \"无参构造函数!\"",[186,21273,2917],{"class":669},[186,21275,10303],{"class":202},[186,21277,21278,21281,21283,21285],{"class":188,"line":242},[186,21279,21280],{"class":202},"        mAge ",[186,21282,529],{"class":669},[186,21284,5559],{"class":206},[186,21286,634],{"class":202},[186,21288,21289],{"class":188,"line":248},[186,21290,3654],{"class":202},[186,21292,21293,21295,21297,21299,21301],{"class":188,"line":265},[186,21294,19980],{"class":198},[186,21296,832],{"class":202},[186,21298,1626],{"class":669},[186,21300,17150],{"class":835},[186,21302,13905],{"class":202},[186,21304,21305,21307,21309,21312,21314],{"class":188,"line":271},[186,21306,11132],{"class":202},[186,21308,2650],{"class":669},[186,21310,21311],{"class":532}," \"有参构造函数!\"",[186,21313,2917],{"class":669},[186,21315,10303],{"class":202},[186,21317,21318,21320,21322],{"class":188,"line":288},[186,21319,21280],{"class":202},[186,21321,529],{"class":669},[186,21323,9260],{"class":202},[186,21325,21326],{"class":188,"line":294},[186,21327,3654],{"class":202},[186,21329,21330,21332,21334,21336,21338,21340,21342],{"class":188,"line":1212},[186,21331,19980],{"class":198},[186,21333,832],{"class":202},[186,21335,8255],{"class":669},[186,21337,17031],{"class":198},[186,21339,1963],{"class":669},[186,21341,8288],{"class":835},[186,21343,13905],{"class":202},[186,21345,21346,21348,21350,21353,21355],{"class":188,"line":1223},[186,21347,11132],{"class":202},[186,21349,2650],{"class":669},[186,21351,21352],{"class":532}," \"拷贝构造函数!\"",[186,21354,2917],{"class":669},[186,21356,10303],{"class":202},[186,21358,21359,21361,21363],{"class":188,"line":1236},[186,21360,21280],{"class":202},[186,21362,529],{"class":669},[186,21364,21365],{"class":202}," p.mAge;\n",[186,21367,21368],{"class":188,"line":3096},[186,21369,3654],{"class":202},[186,21371,21372],{"class":188,"line":3110},[186,21373,21374],{"class":192},"    \u002F\u002F析构函数在释放内存之前调用\n",[186,21376,21377,21379],{"class":188,"line":3115},[186,21378,20013],{"class":198},[186,21380,12316],{"class":202},[186,21382,21383,21385,21387,21390,21392],{"class":188,"line":3121},[186,21384,11132],{"class":202},[186,21386,2650],{"class":669},[186,21388,21389],{"class":532}," \"析构函数!\"",[186,21391,2917],{"class":669},[186,21393,10303],{"class":202},[186,21395,21396],{"class":188,"line":3142},[186,21397,3654],{"class":202},[186,21399,21400],{"class":188,"line":3147},[186,21401,16178],{"class":669},[186,21403,21404,21406],{"class":188,"line":3161},[186,21405,3452],{"class":669},[186,21407,21408],{"class":202}," mAge;\n",[186,21410,21411],{"class":188,"line":3166},[186,21412,5461],{"class":202},[186,21414,21415],{"class":188,"line":3195},[186,21416,3867],{"emptyLinePlaceholder":1551},[186,21418,21419],{"class":188,"line":3200},[186,21420,21421],{"class":192},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[186,21423,21424,21426,21428],{"class":188,"line":3217},[186,21425,6827],{"class":669},[186,21427,7051],{"class":198},[186,21429,12316],{"class":202},[186,21431,21432],{"class":188,"line":3222},[186,21433,3867],{"emptyLinePlaceholder":1551},[186,21435,21436,21438,21441,21443,21445,21447],{"class":188,"line":3227},[186,21437,20892],{"class":202},[186,21439,21440],{"class":198},"man",[186,21442,832],{"class":202},[186,21444,1922],{"class":206},[186,21446,7429],{"class":202},[186,21448,21449],{"class":192}," \u002F\u002Fp对象已经创建完毕\n",[186,21451,21452,21454,21457,21460],{"class":188,"line":3232},[186,21453,20892],{"class":202},[186,21455,21456],{"class":198},"newman",[186,21458,21459],{"class":202},"(man);",[186,21461,21462],{"class":192}," \u002F\u002F调用拷贝构造函数\n",[186,21464,21465,21468,21470,21473],{"class":188,"line":3246},[186,21466,21467],{"class":202},"    Person newman2 ",[186,21469,529],{"class":669},[186,21471,21472],{"class":202}," man;",[186,21474,21475],{"class":192}," \u002F\u002F拷贝构造\n",[186,21477,21478],{"class":188,"line":3251},[186,21479,3867],{"emptyLinePlaceholder":1551},[186,21481,21482],{"class":188,"line":4044},[186,21483,21484],{"class":192},"    \u002F\u002FPerson newman3;\n",[186,21486,21487,21490],{"class":188,"line":4058},[186,21488,21489],{"class":192},"    \u002F\u002Fnewman3 = man;",[186,21491,21492],{"class":192}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[186,21494,21495],{"class":188,"line":4066},[186,21496,639],{"class":202},[186,21498,21499],{"class":188,"line":4071},[186,21500,3867],{"emptyLinePlaceholder":1551},[186,21502,21503],{"class":188,"line":4077},[186,21504,21505],{"class":192},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[186,21507,21508],{"class":188,"line":4083},[186,21509,21510],{"class":192},"\u002F\u002F相当于Person p1 = p;\n",[186,21512,21513,21515,21517,21519,21521,21524],{"class":188,"line":4088},[186,21514,6827],{"class":669},[186,21516,20947],{"class":198},[186,21518,832],{"class":202},[186,21520,20507],{"class":198},[186,21522,21523],{"class":835}," p1",[186,21525,21526],{"class":202},") {}\n",[186,21528,21529,21531,21533],{"class":188,"line":9411},[186,21530,6827],{"class":669},[186,21532,7120],{"class":198},[186,21534,12316],{"class":202},[186,21536,21537,21539],{"class":188,"line":9435},[186,21538,20065],{"class":202},[186,21540,21541],{"class":192}," \u002F\u002F无参构造函数\n",[186,21543,21544,21546],{"class":188,"line":9440},[186,21545,20997],{"class":198},[186,21547,21000],{"class":202},[186,21549,21550],{"class":188,"line":9446},[186,21551,639],{"class":202},[186,21553,21554],{"class":188,"line":9473},[186,21555,3867],{"emptyLinePlaceholder":1551},[186,21557,21558],{"class":188,"line":9478},[186,21559,21560],{"class":192},"\u002F\u002F3. 以值方式返回局部对象\n",[186,21562,21563,21565,21567],{"class":188,"line":9484},[186,21564,20507],{"class":198},[186,21566,21016],{"class":198},[186,21568,3443],{"class":202},[186,21570,21571],{"class":188,"line":9496},[186,21572,3018],{"class":202},[186,21574,21575],{"class":188,"line":9508},[186,21576,20497],{"class":202},[186,21578,21579,21581,21583,21585,21587,21589,21591,21593,21596,21598],{"class":188,"line":9520},[186,21580,7992],{"class":202},[186,21582,2650],{"class":669},[186,21584,3126],{"class":202},[186,21586,1626],{"class":669},[186,21588,7981],{"class":669},[186,21590,2039],{"class":202},[186,21592,1963],{"class":669},[186,21594,21595],{"class":202},"p1 ",[186,21597,2650],{"class":669},[186,21599,10303],{"class":202},[186,21601,21602,21604],{"class":188,"line":11179},[186,21603,5556],{"class":669},[186,21605,21606],{"class":202}," p1;\n",[186,21608,21609],{"class":188,"line":11204},[186,21610,639],{"class":202},[186,21612,21613],{"class":188,"line":11227},[186,21614,3867],{"emptyLinePlaceholder":1551},[186,21616,21617,21619,21621],{"class":188,"line":11251},[186,21618,6827],{"class":669},[186,21620,7192],{"class":198},[186,21622,3443],{"class":202},[186,21624,21625],{"class":188,"line":11256},[186,21626,3018],{"class":202},[186,21628,21629,21631,21633,21635],{"class":188,"line":11261},[186,21630,21082],{"class":202},[186,21632,529],{"class":669},[186,21634,21016],{"class":198},[186,21636,7099],{"class":202},[186,21638,21639,21641,21643,21645,21647,21649,21651,21653,21655,21657],{"class":188,"line":11266},[186,21640,7992],{"class":202},[186,21642,2650],{"class":669},[186,21644,3126],{"class":202},[186,21646,1626],{"class":669},[186,21648,7981],{"class":669},[186,21650,2039],{"class":202},[186,21652,1963],{"class":669},[186,21654,12911],{"class":202},[186,21656,2650],{"class":669},[186,21658,10303],{"class":202},[186,21660,21661],{"class":188,"line":11275},[186,21662,639],{"class":202},[186,21664,21665],{"class":188,"line":11280},[186,21666,3867],{"emptyLinePlaceholder":1551},[186,21668,21669],{"class":188,"line":11286},[186,21670,3867],{"emptyLinePlaceholder":1551},[186,21672,21673,21675,21677],{"class":188,"line":11307},[186,21674,1626],{"class":669},[186,21676,3440],{"class":198},[186,21678,12316],{"class":202},[186,21680,21681],{"class":188,"line":11313},[186,21682,3867],{"emptyLinePlaceholder":1551},[186,21684,21685],{"class":188,"line":11327},[186,21686,21687],{"class":192},"    \u002F\u002Ftest01();\n",[186,21689,21690],{"class":188,"line":11333},[186,21691,21692],{"class":192},"    \u002F\u002Ftest02();\n",[186,21694,21695,21697],{"class":188,"line":11360},[186,21696,21152],{"class":198},[186,21698,7099],{"class":202},[186,21700,21701],{"class":188,"line":11369},[186,21702,3867],{"emptyLinePlaceholder":1551},[186,21704,21705,21707,21709,21711],{"class":188,"line":11375},[186,21706,3770],{"class":198},[186,21708,832],{"class":202},[186,21710,3775],{"class":532},[186,21712,1112],{"class":202},[186,21714,21715],{"class":188,"line":11383},[186,21716,3867],{"emptyLinePlaceholder":1551},[186,21718,21719,21721,21723],{"class":188,"line":11388},[186,21720,5556],{"class":669},[186,21722,5559],{"class":206},[186,21724,634],{"class":202},[186,21726,21727],{"class":188,"line":18065},[186,21728,639],{"class":202},[29,21730,21732],{"id":21731},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[169,21734,21735],{},"默认情况下，c++编译器至少给一个类添加3个函数",[169,21737,21738],{},"1．默认构造函数(无参，函数体为空)",[169,21740,21741],{},"2．默认析构函数(无参，函数体为空)",[169,21743,21744],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[169,21746,21747],{},"构造函数调用规则如下：",[19,21749,21750,21753],{},[22,21751,21752],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[22,21754,21755],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[176,21757,21759],{"className":1612,"code":21758,"language":1614,"meta":181,"style":181},"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",[183,21760,21761,21769,21773,21778,21784,21796,21800,21805,21817,21826,21838,21842,21846,21862,21871,21883,21887,21891,21897,21909,21913,21917,21923,21927,21931,21939,21943,21955,21960,21968,21972,21990,21994,21998,22006,22010,22015,22023,22038,22051,22055,22060,22067,22083,22096,22100,22104,22112,22116,22122,22126,22136,22140,22148],{"__ignoreMap":181},[186,21762,21763,21765,21767],{"class":188,"line":189},[186,21764,16156],{"class":669},[186,21766,17031],{"class":198},[186,21768,622],{"class":202},[186,21770,21771],{"class":188,"line":49},[186,21772,16178],{"class":669},[186,21774,21775],{"class":188,"line":219},[186,21776,21777],{"class":192},"    \u002F\u002F无参（默认）构造函数\n",[186,21779,21780,21782],{"class":188,"line":225},[186,21781,19980],{"class":198},[186,21783,12316],{"class":202},[186,21785,21786,21788,21790,21792,21794],{"class":188,"line":242},[186,21787,11132],{"class":202},[186,21789,2650],{"class":669},[186,21791,21271],{"class":532},[186,21793,2917],{"class":669},[186,21795,10303],{"class":202},[186,21797,21798],{"class":188,"line":248},[186,21799,3654],{"class":202},[186,21801,21802],{"class":188,"line":265},[186,21803,21804],{"class":192},"    \u002F\u002F有参构造函数\n",[186,21806,21807,21809,21811,21813,21815],{"class":188,"line":271},[186,21808,19980],{"class":198},[186,21810,832],{"class":202},[186,21812,1626],{"class":669},[186,21814,2871],{"class":835},[186,21816,13905],{"class":202},[186,21818,21819,21822,21824],{"class":188,"line":288},[186,21820,21821],{"class":202},"        age ",[186,21823,529],{"class":669},[186,21825,2905],{"class":202},[186,21827,21828,21830,21832,21834,21836],{"class":188,"line":294},[186,21829,11132],{"class":202},[186,21831,2650],{"class":669},[186,21833,21311],{"class":532},[186,21835,2917],{"class":669},[186,21837,10303],{"class":202},[186,21839,21840],{"class":188,"line":1212},[186,21841,3654],{"class":202},[186,21843,21844],{"class":188,"line":1223},[186,21845,20335],{"class":192},[186,21847,21848,21850,21852,21854,21856,21858,21860],{"class":188,"line":1236},[186,21849,19980],{"class":198},[186,21851,832],{"class":202},[186,21853,8255],{"class":669},[186,21855,17031],{"class":198},[186,21857,1963],{"class":669},[186,21859,8288],{"class":835},[186,21861,13905],{"class":202},[186,21863,21864,21866,21868],{"class":188,"line":3096},[186,21865,21821],{"class":202},[186,21867,529],{"class":669},[186,21869,21870],{"class":202}," p.age;\n",[186,21872,21873,21875,21877,21879,21881],{"class":188,"line":3110},[186,21874,11132],{"class":202},[186,21876,2650],{"class":669},[186,21878,21352],{"class":532},[186,21880,2917],{"class":669},[186,21882,10303],{"class":202},[186,21884,21885],{"class":188,"line":3115},[186,21886,3654],{"class":202},[186,21888,21889],{"class":188,"line":3121},[186,21890,20008],{"class":192},[186,21892,21893,21895],{"class":188,"line":3142},[186,21894,20013],{"class":198},[186,21896,12316],{"class":202},[186,21898,21899,21901,21903,21905,21907],{"class":188,"line":3147},[186,21900,11132],{"class":202},[186,21902,2650],{"class":669},[186,21904,21389],{"class":532},[186,21906,2917],{"class":669},[186,21908,10303],{"class":202},[186,21910,21911],{"class":188,"line":3161},[186,21912,3654],{"class":202},[186,21914,21915],{"class":188,"line":3166},[186,21916,16178],{"class":669},[186,21918,21919,21921],{"class":188,"line":3195},[186,21920,3452],{"class":669},[186,21922,9260],{"class":202},[186,21924,21925],{"class":188,"line":3200},[186,21926,5461],{"class":202},[186,21928,21929],{"class":188,"line":3217},[186,21930,3867],{"emptyLinePlaceholder":1551},[186,21932,21933,21935,21937],{"class":188,"line":3222},[186,21934,6827],{"class":669},[186,21936,7051],{"class":198},[186,21938,3443],{"class":202},[186,21940,21941],{"class":188,"line":3227},[186,21942,3018],{"class":202},[186,21944,21945,21947,21949,21951,21953],{"class":188,"line":3232},[186,21946,20892],{"class":202},[186,21948,8593],{"class":198},[186,21950,832],{"class":202},[186,21952,2260],{"class":206},[186,21954,1112],{"class":202},[186,21956,21957],{"class":188,"line":3246},[186,21958,21959],{"class":192},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[186,21961,21962,21964,21966],{"class":188,"line":3251},[186,21963,20892],{"class":202},[186,21965,8496],{"class":198},[186,21967,18976],{"class":202},[186,21969,21970],{"class":188,"line":4044},[186,21971,3867],{"emptyLinePlaceholder":1551},[186,21973,21974,21976,21978,21981,21983,21986,21988],{"class":188,"line":4058},[186,21975,7992],{"class":202},[186,21977,2650],{"class":669},[186,21979,21980],{"class":532}," \"p2的年龄为： \"",[186,21982,2917],{"class":669},[186,21984,21985],{"class":202}," p2.age ",[186,21987,2650],{"class":669},[186,21989,10303],{"class":202},[186,21991,21992],{"class":188,"line":4066},[186,21993,639],{"class":202},[186,21995,21996],{"class":188,"line":4071},[186,21997,3867],{"emptyLinePlaceholder":1551},[186,21999,22000,22002,22004],{"class":188,"line":4077},[186,22001,6827],{"class":669},[186,22003,7120],{"class":198},[186,22005,3443],{"class":202},[186,22007,22008],{"class":188,"line":4083},[186,22009,3018],{"class":202},[186,22011,22012],{"class":188,"line":4088},[186,22013,22014],{"class":192},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[186,22016,22017,22020],{"class":188,"line":9411},[186,22018,22019],{"class":202},"    Person p1;",[186,22021,22022],{"class":192}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[186,22024,22025,22027,22029,22031,22033,22035],{"class":188,"line":9435},[186,22026,20892],{"class":202},[186,22028,8496],{"class":198},[186,22030,832],{"class":202},[186,22032,2056],{"class":206},[186,22034,7429],{"class":202},[186,22036,22037],{"class":192}," \u002F\u002F用户提供的有参\n",[186,22039,22040,22042,22045,22048],{"class":188,"line":9440},[186,22041,20892],{"class":202},[186,22043,22044],{"class":198},"p3",[186,22046,22047],{"class":202},"(p2);",[186,22049,22050],{"class":192}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[186,22052,22053],{"class":188,"line":9446},[186,22054,3867],{"emptyLinePlaceholder":1551},[186,22056,22057],{"class":188,"line":9473},[186,22058,22059],{"class":192},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[186,22061,22062,22065],{"class":188,"line":9478},[186,22063,22064],{"class":202},"    Person p4;",[186,22066,22022],{"class":192},[186,22068,22069,22071,22074,22076,22078,22080],{"class":188,"line":9484},[186,22070,20892],{"class":202},[186,22072,22073],{"class":198},"p5",[186,22075,832],{"class":202},[186,22077,2056],{"class":206},[186,22079,7429],{"class":202},[186,22081,22082],{"class":192}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[186,22084,22085,22087,22090,22093],{"class":188,"line":9496},[186,22086,20892],{"class":202},[186,22088,22089],{"class":198},"p6",[186,22091,22092],{"class":202},"(p5);",[186,22094,22095],{"class":192}," \u002F\u002F用户自己提供拷贝构造\n",[186,22097,22098],{"class":188,"line":9508},[186,22099,639],{"class":202},[186,22101,22102],{"class":188,"line":9520},[186,22103,3867],{"emptyLinePlaceholder":1551},[186,22105,22106,22108,22110],{"class":188,"line":11179},[186,22107,1626],{"class":669},[186,22109,3440],{"class":198},[186,22111,12316],{"class":202},[186,22113,22114],{"class":188,"line":11204},[186,22115,3867],{"emptyLinePlaceholder":1551},[186,22117,22118,22120],{"class":188,"line":11227},[186,22119,7096],{"class":198},[186,22121,7099],{"class":202},[186,22123,22124],{"class":188,"line":11251},[186,22125,3867],{"emptyLinePlaceholder":1551},[186,22127,22128,22130,22132,22134],{"class":188,"line":11256},[186,22129,3770],{"class":198},[186,22131,832],{"class":202},[186,22133,3775],{"class":532},[186,22135,1112],{"class":202},[186,22137,22138],{"class":188,"line":11261},[186,22139,3867],{"emptyLinePlaceholder":1551},[186,22141,22142,22144,22146],{"class":188,"line":11266},[186,22143,5556],{"class":669},[186,22145,5559],{"class":206},[186,22147,634],{"class":202},[186,22149,22150],{"class":188,"line":11275},[186,22151,639],{"class":202},[29,22153,22155],{"id":22154},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[169,22157,22158],{},"浅拷贝：简单的赋值拷贝操作",[169,22160,22161],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[176,22163,22165],{"className":1612,"code":22164,"language":1614,"meta":181,"style":181},"#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",[183,22166,22167,22173,22183,22189,22193,22197,22202,22208,22212,22225,22229,22233,22240,22244,22254,22269,22282,22286,22291,22296,22312,22316,22329,22334,22339,22344,22353,22358,22373,22377,22381,22385,22391,22395,22400,22415,22419,22430,22444,22448,22457,22461,22467,22479,22483,22491,22495,22512,22543,22551,22579,22583,22587,22595,22599,22605],{"__ignoreMap":181},[186,22168,22169,22171],{"class":188,"line":189},[186,22170,3417],{"class":669},[186,22172,3420],{"class":532},[186,22174,22175,22177,22179,22181],{"class":188,"line":49},[186,22176,3425],{"class":669},[186,22178,3428],{"class":669},[186,22180,3431],{"class":198},[186,22182,634],{"class":202},[186,22184,22185,22187],{"class":188,"line":219},[186,22186,16156],{"class":669},[186,22188,16633],{"class":198},[186,22190,22191],{"class":188,"line":225},[186,22192,3018],{"class":202},[186,22194,22195],{"class":188,"line":242},[186,22196,16178],{"class":669},[186,22198,22199],{"class":188,"line":248},[186,22200,22201],{"class":192},"    \u002F\u002F默认构造函数\n",[186,22203,22204,22206],{"class":188,"line":265},[186,22205,19980],{"class":198},[186,22207,3443],{"class":202},[186,22209,22210],{"class":188,"line":271},[186,22211,3497],{"class":202},[186,22213,22214,22216,22218,22221,22223],{"class":188,"line":288},[186,22215,4917],{"class":202},[186,22217,2650],{"class":669},[186,22219,22220],{"class":532},"\"默认构造函数\"",[186,22222,2650],{"class":669},[186,22224,2672],{"class":202},[186,22226,22227],{"class":188,"line":294},[186,22228,3654],{"class":202},[186,22230,22231],{"class":188,"line":1212},[186,22232,21804],{"class":192},[186,22234,22235,22237],{"class":188,"line":1223},[186,22236,20013],{"class":198},[186,22238,22239],{"class":202},"(int age,int height)\n",[186,22241,22242],{"class":188,"line":1236},[186,22243,3497],{"class":202},[186,22245,22246,22249,22251],{"class":188,"line":3096},[186,22247,22248],{"class":202},"        m_Age",[186,22250,529],{"class":669},[186,22252,22253],{"class":202},"age;\n",[186,22255,22256,22259,22261,22263,22266],{"class":188,"line":3110},[186,22257,22258],{"class":202},"        m_Height",[186,22260,13180],{"class":669},[186,22262,3849],{"class":669},[186,22264,22265],{"class":202},"(height);",[186,22267,22268],{"class":192},"\u002F\u002F放到堆区\n",[186,22270,22271,22273,22275,22278,22280],{"class":188,"line":3115},[186,22272,4917],{"class":202},[186,22274,2650],{"class":669},[186,22276,22277],{"class":532},"\"有参构造函数\"",[186,22279,2650],{"class":669},[186,22281,2672],{"class":202},[186,22283,22284],{"class":188,"line":3121},[186,22285,3654],{"class":202},[186,22287,22288],{"class":188,"line":3142},[186,22289,22290],{"class":192},"    \u002F\u002F深拷贝解决上述问题\n",[186,22292,22293],{"class":188,"line":3147},[186,22294,22295],{"class":192},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[186,22297,22298,22300,22302,22304,22306,22308,22310],{"class":188,"line":3161},[186,22299,19980],{"class":198},[186,22301,832],{"class":202},[186,22303,8255],{"class":669},[186,22305,17031],{"class":198},[186,22307,12047],{"class":669},[186,22309,169],{"class":835},[186,22311,1629],{"class":202},[186,22313,22314],{"class":188,"line":3166},[186,22315,3497],{"class":202},[186,22317,22318,22320,22322,22325,22327],{"class":188,"line":3195},[186,22319,4917],{"class":202},[186,22321,2650],{"class":669},[186,22323,22324],{"class":532},"\"拷贝构造函数\"",[186,22326,2650],{"class":669},[186,22328,2672],{"class":202},[186,22330,22331],{"class":188,"line":3200},[186,22332,22333],{"class":192},"        \u002F\u002F编译器默认的写如下注释部分\n",[186,22335,22336],{"class":188,"line":3217},[186,22337,22338],{"class":192},"        \u002F\u002Fm_Age=p.m_Age;\n",[186,22340,22341],{"class":188,"line":3222},[186,22342,22343],{"class":192},"        \u002F\u002Fm_Height=p.m_Height;\n",[186,22345,22346,22348,22350],{"class":188,"line":3227},[186,22347,22248],{"class":202},[186,22349,529],{"class":669},[186,22351,22352],{"class":202},"p.m_Age;\n",[186,22354,22355],{"class":188,"line":3232},[186,22356,22357],{"class":192},"        \u002F\u002F深拷贝操作\n",[186,22359,22360,22362,22364,22366,22368,22370],{"class":188,"line":3246},[186,22361,22258],{"class":202},[186,22363,13180],{"class":669},[186,22365,3849],{"class":669},[186,22367,832],{"class":202},[186,22369,2065],{"class":669},[186,22371,22372],{"class":202},"p.m_Height);\n",[186,22374,22375],{"class":188,"line":3251},[186,22376,3654],{"class":202},[186,22378,22379],{"class":188,"line":4044},[186,22380,3867],{"emptyLinePlaceholder":1551},[186,22382,22383],{"class":188,"line":4058},[186,22384,20008],{"class":192},[186,22386,22387,22389],{"class":188,"line":4066},[186,22388,20013],{"class":198},[186,22390,3443],{"class":202},[186,22392,22393],{"class":188,"line":4071},[186,22394,3497],{"class":202},[186,22396,22397],{"class":188,"line":4077},[186,22398,22399],{"class":192},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[186,22401,22402,22404,22407,22410,22413],{"class":188,"line":4083},[186,22403,3964],{"class":669},[186,22405,22406],{"class":202},"(m_Height ",[186,22408,22409],{"class":669},"!=",[186,22411,22412],{"class":206}," NULL",[186,22414,1629],{"class":202},[186,22416,22417],{"class":188,"line":4088},[186,22418,3977],{"class":202},[186,22420,22421,22424,22427],{"class":188,"line":9411},[186,22422,22423],{"class":669},"            delete",[186,22425,22426],{"class":202}," m_Height;",[186,22428,22429],{"class":192}," \u002F\u002F释放堆区内存\n",[186,22431,22432,22435,22437,22439,22441],{"class":188,"line":9435},[186,22433,22434],{"class":202},"            m_Height",[186,22436,529],{"class":669},[186,22438,3859],{"class":206},[186,22440,1676],{"class":202},[186,22442,22443],{"class":192}," \u002F\u002F防止野指针\n",[186,22445,22446],{"class":188,"line":9440},[186,22447,3996],{"class":202},[186,22449,22450,22452,22454],{"class":188,"line":9446},[186,22451,4917],{"class":202},[186,22453,2650],{"class":669},[186,22455,22456],{"class":532},"\"Person的析构函数调用\"\n",[186,22458,22459],{"class":188,"line":9473},[186,22460,3654],{"class":202},[186,22462,22463,22465],{"class":188,"line":9478},[186,22464,3452],{"class":669},[186,22466,17127],{"class":202},[186,22468,22469,22471,22473,22476],{"class":188,"line":9484},[186,22470,3452],{"class":669},[186,22472,7981],{"class":669},[186,22474,22475],{"class":202},"m_Height;",[186,22477,22478],{"class":192}," \u002F\u002F定义一个指针，指向身高\n",[186,22480,22481],{"class":188,"line":9496},[186,22482,5461],{"class":202},[186,22484,22485,22487,22489],{"class":188,"line":9508},[186,22486,6827],{"class":669},[186,22488,7051],{"class":198},[186,22490,3443],{"class":202},[186,22492,22493],{"class":188,"line":9520},[186,22494,3018],{"class":202},[186,22496,22497,22499,22501,22503,22505,22507,22510],{"class":188,"line":11179},[186,22498,20892],{"class":202},[186,22500,8593],{"class":198},[186,22502,832],{"class":202},[186,22504,2260],{"class":206},[186,22506,1988],{"class":202},[186,22508,22509],{"class":206},"160",[186,22511,1112],{"class":202},[186,22513,22514,22516,22518,22521,22523,22526,22528,22531,22533,22536,22538,22540],{"class":188,"line":11204},[186,22515,3023],{"class":202},[186,22517,2650],{"class":669},[186,22519,22520],{"class":532},"\"p1的年龄为:\"",[186,22522,2650],{"class":669},[186,22524,22525],{"class":202},"p1.m_Age",[186,22527,2650],{"class":669},[186,22529,22530],{"class":532},"\"身高为：\"",[186,22532,7882],{"class":669},[186,22534,22535],{"class":202},"p1.m_Height",[186,22537,2650],{"class":669},[186,22539,2715],{"class":202},[186,22541,22542],{"class":192},"  \u002F\u002F18\n",[186,22544,22545,22547,22549],{"class":188,"line":11227},[186,22546,20892],{"class":202},[186,22548,8496],{"class":198},[186,22550,18976],{"class":202},[186,22552,22553,22555,22557,22560,22562,22564,22566,22568,22570,22573,22575,22577],{"class":188,"line":11251},[186,22554,3023],{"class":202},[186,22556,2650],{"class":669},[186,22558,22559],{"class":532},"\"p2的年龄为：\"",[186,22561,2650],{"class":669},[186,22563,20922],{"class":202},[186,22565,2650],{"class":669},[186,22567,22530],{"class":532},[186,22569,7882],{"class":669},[186,22571,22572],{"class":202},"p2.m_Height",[186,22574,2650],{"class":669},[186,22576,2715],{"class":202},[186,22578,22542],{"class":192},[186,22580,22581],{"class":188,"line":11256},[186,22582,14673],{"class":202},[186,22584,22585],{"class":188,"line":11261},[186,22586,639],{"class":202},[186,22588,22589,22591,22593],{"class":188,"line":11266},[186,22590,1626],{"class":669},[186,22592,3440],{"class":198},[186,22594,3443],{"class":202},[186,22596,22597],{"class":188,"line":11275},[186,22598,3018],{"class":202},[186,22600,22601,22603],{"class":188,"line":11280},[186,22602,7096],{"class":198},[186,22604,7099],{"class":202},[186,22606,22607],{"class":188,"line":11286},[186,22608,639],{"class":202},[169,22610,22611],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[169,22613,22614],{},"浅拷贝带来的问题是堆区的内存重复释放",[169,22616,22617],{},[164,22618],{"alt":181,"src":22619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[169,22621,22622],{},"浅拷贝问题要使用深拷贝来解决",[169,22624,22625],{},[164,22626],{"alt":181,"src":22627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[169,22629,22630],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[29,22632,22634],{"id":22633},"_826初始化列表","8.2.6初始化列表",[169,22636,22637],{},"作用：初始化属性",[169,22639,6647],{},[176,22641,22644],{"className":22642,"code":22643,"language":753},[751],"构造函数():属性1(值1),属性2(值2).....{}\n",[183,22645,22643],{"__ignoreMap":181},[169,22647,22648],{},"例子",[176,22650,22652],{"className":1612,"code":22651,"language":1614,"meta":181,"style":181},"#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",[183,22653,22654,22660,22670,22676,22680,22685,22689,22694,22699,22704,22709,22714,22719,22723,22728,22733,22776,22785,22803,22821,22839,22843,22847,22854,22861,22868,22872,22876,22884,22888,22892,22912,22921,22925,22929,22939,22943,22951],{"__ignoreMap":181},[186,22655,22656,22658],{"class":188,"line":189},[186,22657,3417],{"class":669},[186,22659,3420],{"class":532},[186,22661,22662,22664,22666,22668],{"class":188,"line":49},[186,22663,3425],{"class":669},[186,22665,3428],{"class":669},[186,22667,3431],{"class":198},[186,22669,634],{"class":202},[186,22671,22672,22674],{"class":188,"line":219},[186,22673,16156],{"class":669},[186,22675,16633],{"class":198},[186,22677,22678],{"class":188,"line":225},[186,22679,3018],{"class":202},[186,22681,22682],{"class":188,"line":242},[186,22683,22684],{"class":669},"    public:\n",[186,22686,22687],{"class":188,"line":248},[186,22688,3867],{"emptyLinePlaceholder":1551},[186,22690,22691],{"class":188,"line":265},[186,22692,22693],{"class":192},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[186,22695,22696],{"class":188,"line":271},[186,22697,22698],{"class":192},"    \u002F\u002FPerson(int a, int b, int c) {\n",[186,22700,22701],{"class":188,"line":288},[186,22702,22703],{"class":192},"    \u002F\u002F  m_A = a;\n",[186,22705,22706],{"class":188,"line":294},[186,22707,22708],{"class":192},"    \u002F\u002F  m_B = b;\n",[186,22710,22711],{"class":188,"line":1212},[186,22712,22713],{"class":192},"    \u002F\u002F  m_C = c;\n",[186,22715,22716],{"class":188,"line":1223},[186,22717,22718],{"class":192},"    \u002F\u002F}\n",[186,22720,22721],{"class":188,"line":1236},[186,22722,3867],{"emptyLinePlaceholder":1551},[186,22724,22725],{"class":188,"line":3096},[186,22726,22727],{"class":192},"    \u002F\u002F初始化列表方式初始化\n",[186,22729,22730],{"class":188,"line":3110},[186,22731,22732],{"class":192},"    \u002F\u002F使用有参构造函数\n",[186,22734,22735,22737,22739,22741,22743,22745,22747,22749,22751,22753,22755,22758,22761,22764,22767,22770,22773],{"class":188,"line":3115},[186,22736,19980],{"class":198},[186,22738,832],{"class":202},[186,22740,1626],{"class":669},[186,22742,2871],{"class":835},[186,22744,13898],{"class":202},[186,22746,1626],{"class":669},[186,22748,4299],{"class":835},[186,22750,13898],{"class":202},[186,22752,1626],{"class":669},[186,22754,4315],{"class":835},[186,22756,22757],{"class":202},") :",[186,22759,22760],{"class":198},"m_A",[186,22762,22763],{"class":202},"(a), ",[186,22765,22766],{"class":198},"m_B",[186,22768,22769],{"class":202},"(b), ",[186,22771,22772],{"class":198},"m_C",[186,22774,22775],{"class":202},"(c) {}\n",[186,22777,22778,22780,22783],{"class":188,"line":3121},[186,22779,16371],{"class":669},[186,22781,22782],{"class":198}," PrintPerson",[186,22784,12316],{"class":202},[186,22786,22787,22789,22791,22794,22796,22799,22801],{"class":188,"line":3142},[186,22788,11132],{"class":202},[186,22790,2650],{"class":669},[186,22792,22793],{"class":532}," \"mA:\"",[186,22795,2917],{"class":669},[186,22797,22798],{"class":202}," m_A ",[186,22800,2650],{"class":669},[186,22802,10303],{"class":202},[186,22804,22805,22807,22809,22812,22814,22817,22819],{"class":188,"line":3147},[186,22806,11132],{"class":202},[186,22808,2650],{"class":669},[186,22810,22811],{"class":532}," \"mB:\"",[186,22813,2917],{"class":669},[186,22815,22816],{"class":202}," m_B ",[186,22818,2650],{"class":669},[186,22820,10303],{"class":202},[186,22822,22823,22825,22827,22830,22832,22835,22837],{"class":188,"line":3161},[186,22824,11132],{"class":202},[186,22826,2650],{"class":669},[186,22828,22829],{"class":532}," \"mC:\"",[186,22831,2917],{"class":669},[186,22833,22834],{"class":202}," m_C ",[186,22836,2650],{"class":669},[186,22838,10303],{"class":202},[186,22840,22841],{"class":188,"line":3166},[186,22842,3654],{"class":202},[186,22844,22845],{"class":188,"line":3195},[186,22846,16684],{"class":669},[186,22848,22849,22851],{"class":188,"line":3200},[186,22850,3452],{"class":669},[186,22852,22853],{"class":202}," m_A;\n",[186,22855,22856,22858],{"class":188,"line":3217},[186,22857,3452],{"class":669},[186,22859,22860],{"class":202}," m_B;\n",[186,22862,22863,22865],{"class":188,"line":3222},[186,22864,3452],{"class":669},[186,22866,22867],{"class":202}," m_C;\n",[186,22869,22870],{"class":188,"line":3227},[186,22871,5461],{"class":202},[186,22873,22874],{"class":188,"line":3232},[186,22875,3867],{"emptyLinePlaceholder":1551},[186,22877,22878,22880,22882],{"class":188,"line":3246},[186,22879,1626],{"class":669},[186,22881,3440],{"class":198},[186,22883,7441],{"class":202},[186,22885,22886],{"class":188,"line":3251},[186,22887,3018],{"class":202},[186,22889,22890],{"class":188,"line":4044},[186,22891,3867],{"emptyLinePlaceholder":1551},[186,22893,22894,22896,22898,22900,22902,22904,22906,22908,22910],{"class":188,"line":4058},[186,22895,20892],{"class":202},[186,22897,169],{"class":198},[186,22899,832],{"class":202},[186,22901,1829],{"class":206},[186,22903,13898],{"class":202},[186,22905,1697],{"class":206},[186,22907,13898],{"class":202},[186,22909,1691],{"class":206},[186,22911,1112],{"class":202},[186,22913,22914,22916,22919],{"class":188,"line":4066},[186,22915,17327],{"class":202},[186,22917,22918],{"class":198},"PrintPerson",[186,22920,7099],{"class":202},[186,22922,22923],{"class":188,"line":4071},[186,22924,3867],{"emptyLinePlaceholder":1551},[186,22926,22927],{"class":188,"line":4077},[186,22928,3867],{"emptyLinePlaceholder":1551},[186,22930,22931,22933,22935,22937],{"class":188,"line":4083},[186,22932,3770],{"class":198},[186,22934,832],{"class":202},[186,22936,3775],{"class":532},[186,22938,1112],{"class":202},[186,22940,22941],{"class":188,"line":4088},[186,22942,3867],{"emptyLinePlaceholder":1551},[186,22944,22945,22947,22949],{"class":188,"line":9411},[186,22946,5556],{"class":669},[186,22948,5559],{"class":206},[186,22950,634],{"class":202},[186,22952,22953],{"class":188,"line":9435},[186,22954,639],{"class":202},[169,22956,22957,22958,22961,22962],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[54,22959,22960],{},"参数名就是定义的对象属性","，",[54,22963,22964],{},"属性后面的值为有参构造函数的形参",[176,22966,22968],{"className":1612,"code":22967,"language":1614,"meta":181,"style":181},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[183,22969,22970],{"__ignoreMap":181},[186,22971,22972,22974,22976,22978,22981,22983,22986,22988,22991,22993,22996,22998,23001,23003],{"class":188,"line":189},[186,22973,20507],{"class":198},[186,22975,832],{"class":202},[186,22977,1626],{"class":669},[186,22979,22980],{"class":202}," a.",[186,22982,1626],{"class":669},[186,22984,22985],{"class":202}," b,",[186,22987,1626],{"class":669},[186,22989,22990],{"class":202}," b):",[186,22992,22760],{"class":198},[186,22994,22995],{"class":202},"(a),",[186,22997,22766],{"class":198},[186,22999,23000],{"class":202},"(c),",[186,23002,22772],{"class":198},[186,23004,23005],{"class":202},"(b) {}\n",[29,23007,23009],{"id":23008},"_827类对象作为类成员","8.2.7类对象作为类成员",[169,23011,23012],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[169,23014,16095],{},[176,23016,23018],{"className":1612,"code":23017,"language":1614,"meta":181,"style":181},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[183,23019,23020,23025,23030,23034,23039,23043],{"__ignoreMap":181},[186,23021,23022],{"class":188,"line":189},[186,23023,23024],{"class":202},"A{};\n",[186,23026,23027],{"class":188,"line":49},[186,23028,23029],{"class":202},"B\n",[186,23031,23032],{"class":188,"line":219},[186,23033,3018],{"class":202},[186,23035,23036],{"class":188,"line":225},[186,23037,23038],{"class":202},"    A a;\n",[186,23040,23041],{"class":188,"line":242},[186,23042,639],{"class":202},[186,23044,23045],{"class":188,"line":248},[186,23046,23047],{"class":192},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[169,23049,23050],{},"案例",[176,23052,23054],{"className":1612,"code":23053,"language":1614,"meta":181,"style":181},"\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",[183,23055,23056,23061,23068,23072,23077,23082,23096,23100,23110,23121,23125,23132,23136,23149,23153,23158,23163,23167,23173,23177,23181,23185,23216,23220,23231,23235,23241,23245,23258,23262,23266,23270,23275,23280,23284,23292,23296,23313,23332,23336,23344,23348,23354],{"__ignoreMap":181},[186,23057,23058],{"class":188,"line":189},[186,23059,23060],{"class":192},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[186,23062,23063,23065],{"class":188,"line":49},[186,23064,16156],{"class":669},[186,23066,23067],{"class":198}," Phone\n",[186,23069,23070],{"class":188,"line":219},[186,23071,3018],{"class":202},[186,23073,23074],{"class":188,"line":225},[186,23075,23076],{"class":202},"public：\n",[186,23078,23079],{"class":188,"line":242},[186,23080,23081],{"class":192},"    \u002F\u002F 赋值(构造函数)\n",[186,23083,23084,23087,23089,23091,23094],{"class":188,"line":248},[186,23085,23086],{"class":198},"    Phone",[186,23088,832],{"class":202},[186,23090,16379],{"class":198},[186,23092,23093],{"class":835}," pName",[186,23095,1629],{"class":202},[186,23097,23098],{"class":188,"line":265},[186,23099,3497],{"class":202},[186,23101,23102,23105,23107],{"class":188,"line":271},[186,23103,23104],{"class":202},"        m_pName",[186,23106,529],{"class":669},[186,23108,23109],{"class":202},"pName;\n",[186,23111,23112,23114,23116,23119],{"class":188,"line":288},[186,23113,4917],{"class":202},[186,23115,2650],{"class":669},[186,23117,23118],{"class":532},"\"Phone的构造函数调用\"",[186,23120,634],{"class":202},[186,23122,23123],{"class":188,"line":294},[186,23124,3654],{"class":202},[186,23126,23127,23130],{"class":188,"line":1212},[186,23128,23129],{"class":198},"    ~Phone",[186,23131,3443],{"class":202},[186,23133,23134],{"class":188,"line":1223},[186,23135,3497],{"class":202},[186,23137,23138,23140,23142,23145,23147],{"class":188,"line":1236},[186,23139,4917],{"class":202},[186,23141,2650],{"class":669},[186,23143,23144],{"class":532},"\"Phone析构函数调用\"",[186,23146,2650],{"class":669},[186,23148,2672],{"class":202},[186,23150,23151],{"class":188,"line":3096},[186,23152,3654],{"class":202},[186,23154,23155],{"class":188,"line":3110},[186,23156,23157],{"class":192},"    \u002F\u002F\n",[186,23159,23160],{"class":188,"line":3115},[186,23161,23162],{"class":202},"    string m_PName;\n",[186,23164,23165],{"class":188,"line":3121},[186,23166,5461],{"class":202},[186,23168,23169,23171],{"class":188,"line":3142},[186,23170,16156],{"class":669},[186,23172,16633],{"class":198},[186,23174,23175],{"class":188,"line":3147},[186,23176,3018],{"class":202},[186,23178,23179],{"class":188,"line":3161},[186,23180,16178],{"class":669},[186,23182,23183],{"class":188,"line":3166},[186,23184,18455],{"class":192},[186,23186,23187,23189,23191,23193,23195,23197,23199,23202,23205,23207,23210,23213],{"class":188,"line":3195},[186,23188,19980],{"class":198},[186,23190,832],{"class":202},[186,23192,16379],{"class":198},[186,23194,16382],{"class":835},[186,23196,1988],{"class":202},[186,23198,16379],{"class":198},[186,23200,23201],{"class":835}," pname",[186,23203,23204],{"class":202},"):",[186,23206,16472],{"class":198},[186,23208,23209],{"class":202},"(name),m_phone.",[186,23211,23212],{"class":198},"m_PName",[186,23214,23215],{"class":202},"(pname) \n",[186,23217,23218],{"class":188,"line":3200},[186,23219,3497],{"class":202},[186,23221,23222,23224,23226,23229],{"class":188,"line":3217},[186,23223,4917],{"class":202},[186,23225,2650],{"class":669},[186,23227,23228],{"class":532},"\"Person的构造函数调用\"",[186,23230,634],{"class":202},[186,23232,23233],{"class":188,"line":3222},[186,23234,3654],{"class":202},[186,23236,23237,23239],{"class":188,"line":3227},[186,23238,20013],{"class":198},[186,23240,3443],{"class":202},[186,23242,23243],{"class":188,"line":3232},[186,23244,3497],{"class":202},[186,23246,23247,23249,23251,23254,23256],{"class":188,"line":3246},[186,23248,4917],{"class":202},[186,23250,2650],{"class":669},[186,23252,23253],{"class":532},"\"Person析构函数调用\"",[186,23255,2650],{"class":669},[186,23257,2672],{"class":202},[186,23259,23260],{"class":188,"line":3251},[186,23261,3654],{"class":202},[186,23263,23264],{"class":188,"line":4044},[186,23265,9243],{"class":192},[186,23267,23268],{"class":188,"line":4058},[186,23269,16354],{"class":202},[186,23271,23272],{"class":188,"line":4066},[186,23273,23274],{"class":192},"    \u002F\u002F手机\n",[186,23276,23277],{"class":188,"line":4071},[186,23278,23279],{"class":202},"    Phone m_Phone;\n",[186,23281,23282],{"class":188,"line":4077},[186,23283,5461],{"class":202},[186,23285,23286,23288,23290],{"class":188,"line":4083},[186,23287,6827],{"class":669},[186,23289,7051],{"class":198},[186,23291,3443],{"class":202},[186,23293,23294],{"class":188,"line":4088},[186,23295,3018],{"class":202},[186,23297,23298,23300,23302,23304,23306,23308,23311],{"class":188,"line":9411},[186,23299,20892],{"class":202},[186,23301,169],{"class":198},[186,23303,832],{"class":202},[186,23305,9379],{"class":532},[186,23307,1988],{"class":202},[186,23309,23310],{"class":532},"\"安卓\"",[186,23312,1112],{"class":202},[186,23314,23315,23317,23319,23322,23324,23327,23329],{"class":188,"line":9435},[186,23316,3023],{"class":202},[186,23318,2650],{"class":669},[186,23320,23321],{"class":202},"p.Name",[186,23323,2650],{"class":669},[186,23325,23326],{"class":532},"\"拿着：\"",[186,23328,2650],{"class":669},[186,23330,23331],{"class":202},"p.m_phone.m_PName;\n",[186,23333,23334],{"class":188,"line":9440},[186,23335,639],{"class":202},[186,23337,23338,23340,23342],{"class":188,"line":9446},[186,23339,1626],{"class":669},[186,23341,3440],{"class":198},[186,23343,3443],{"class":202},[186,23345,23346],{"class":188,"line":9473},[186,23347,3018],{"class":202},[186,23349,23350,23352],{"class":188,"line":9478},[186,23351,7096],{"class":198},[186,23353,7099],{"class":202},[186,23355,23356],{"class":188,"line":9484},[186,23357,639],{"class":202},[169,23359,10488],{},[176,23361,23363],{"className":1612,"code":23362,"language":1614,"meta":181,"style":181},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[183,23364,23365,23370],{"__ignoreMap":181},[186,23366,23367],{"class":188,"line":189},[186,23368,23369],{"class":192},"    \u002F\u002F不需要写这个：\n",[186,23371,23372],{"class":188,"line":49},[186,23373,23374],{"class":192},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[169,23376,23377],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[176,23379,23381],{"className":1612,"code":23380,"language":1614,"meta":181,"style":181},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[183,23382,23383],{"__ignoreMap":181},[186,23384,23385,23387,23390,23392,23395,23398],{"class":188,"line":189},[186,23386,20507],{"class":198},[186,23388,23389],{"class":202},"(string name.string pname):",[186,23391,16472],{"class":198},[186,23393,23394],{"class":202},"(name),",[186,23396,23397],{"class":198},"m_phone",[186,23399,23400],{"class":202},"(pname) {}\n",[169,23402,23403,23404,529,23407],{},"采用的是隐式转换法，实际为如下：\n",[183,23405,23406],{},"m_phone(pname)",[183,23408,23409],{},"Phone m_phone=pname",[169,23411,23412,23415],{},[54,23413,23414],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[169,23417,23418],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[29,23420,23422],{"id":23421},"_828静态对象","8.2.8静态对象",[169,23424,23425],{},"静态对象在成员对象前static，称为静态对象",[169,23427,23428],{},"静态对象分为两类：",[34,23430,23431],{},[22,23432,23433],{},"静态成员变量",[19,23435,23436,23439,23442],{},[22,23437,23438],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[22,23440,23441],{},"②在编译阶段分配内存",[22,23443,23444],{},"③类内声明，类外初始化",[34,23446,23447],{"start":49},[22,23448,23449],{},"静态成员函数",[19,23451,23452,23455],{},[22,23453,23454],{},"①所有对象共享同一个函数",[22,23456,23457],{},"②静态成员函数只能访问静态成员变量",[23459,23460,23462],"h4",{"id":23461},"_8281静态成员变量","8.2.8.1静态成员变量",[176,23464,23466],{"className":1612,"code":23465,"language":1614,"meta":181,"style":181},"#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",[183,23467,23468,23474,23484,23490,23494,23498,23503,23508,23513,23521,23525,23529,23533,23541,23545,23549,23554,23567,23571,23579,23583,23589],{"__ignoreMap":181},[186,23469,23470,23472],{"class":188,"line":189},[186,23471,3417],{"class":669},[186,23473,3420],{"class":532},[186,23475,23476,23478,23480,23482],{"class":188,"line":49},[186,23477,3425],{"class":669},[186,23479,3428],{"class":669},[186,23481,3431],{"class":198},[186,23483,634],{"class":202},[186,23485,23486,23488],{"class":188,"line":219},[186,23487,16156],{"class":669},[186,23489,16633],{"class":198},[186,23491,23492],{"class":188,"line":225},[186,23493,3018],{"class":202},[186,23495,23496],{"class":188,"line":242},[186,23497,16178],{"class":669},[186,23499,23500],{"class":188,"line":248},[186,23501,23502],{"class":192},"    \u002F\u002F非静态成员变量\n",[186,23504,23505],{"class":188,"line":265},[186,23506,23507],{"class":192},"    \u002F\u002F int m_A;\n",[186,23509,23510],{"class":188,"line":271},[186,23511,23512],{"class":192},"    \u002F\u002F定义静态成员变量\n",[186,23514,23515,23517,23519],{"class":188,"line":288},[186,23516,12483],{"class":669},[186,23518,3849],{"class":669},[186,23520,22853],{"class":202},[186,23522,23523],{"class":188,"line":294},[186,23524,3867],{"emptyLinePlaceholder":1551},[186,23526,23527],{"class":188,"line":1212},[186,23528,3867],{"emptyLinePlaceholder":1551},[186,23530,23531],{"class":188,"line":1223},[186,23532,5461],{"class":202},[186,23534,23535,23537,23539],{"class":188,"line":1236},[186,23536,6827],{"class":669},[186,23538,7051],{"class":198},[186,23540,3443],{"class":202},[186,23542,23543],{"class":188,"line":3096},[186,23544,3018],{"class":202},[186,23546,23547],{"class":188,"line":3110},[186,23548,16775],{"class":202},[186,23550,23551],{"class":188,"line":3115},[186,23552,23553],{"class":192},"    \u002F\u002F输出类成员变量这块内存\n",[186,23555,23556,23558,23560,23563,23565],{"class":188,"line":3121},[186,23557,3023],{"class":202},[186,23559,2650],{"class":669},[186,23561,23562],{"class":202},"p.m_A",[186,23564,2650],{"class":669},[186,23566,2672],{"class":202},[186,23568,23569],{"class":188,"line":3142},[186,23570,639],{"class":202},[186,23572,23573,23575,23577],{"class":188,"line":3147},[186,23574,1626],{"class":669},[186,23576,3440],{"class":198},[186,23578,3443],{"class":202},[186,23580,23581],{"class":188,"line":3161},[186,23582,3018],{"class":202},[186,23584,23585,23587],{"class":188,"line":3166},[186,23586,7096],{"class":198},[186,23588,3443],{"class":202},[186,23590,23591],{"class":188,"line":3195},[186,23592,639],{"class":202},[169,23594,23595],{},"此时输出是报错的：无法解析外部命令",[169,23597,23598],{},"解决这一问题：必须用到类内声明，类外初始化操作",[176,23600,23602],{"className":1612,"code":23601,"language":1614,"meta":181,"style":181},"#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",[183,23603,23604,23610,23620,23626,23630,23634,23639,23647,23651,23656,23671,23679,23683,23687,23692,23697,23709,23714,23725,23730,23735,23748,23752,23760,23764,23770],{"__ignoreMap":181},[186,23605,23606,23608],{"class":188,"line":189},[186,23607,3417],{"class":669},[186,23609,3420],{"class":532},[186,23611,23612,23614,23616,23618],{"class":188,"line":49},[186,23613,3425],{"class":669},[186,23615,3428],{"class":669},[186,23617,3431],{"class":198},[186,23619,634],{"class":202},[186,23621,23622,23624],{"class":188,"line":219},[186,23623,16156],{"class":669},[186,23625,16633],{"class":198},[186,23627,23628],{"class":188,"line":225},[186,23629,3018],{"class":202},[186,23631,23632],{"class":188,"line":242},[186,23633,16178],{"class":669},[186,23635,23636],{"class":188,"line":248},[186,23637,23638],{"class":192},"    \u002F\u002F类内声明\n",[186,23640,23641,23643,23645],{"class":188,"line":265},[186,23642,12483],{"class":669},[186,23644,3849],{"class":669},[186,23646,22853],{"class":202},[186,23648,23649],{"class":188,"line":271},[186,23650,5461],{"class":202},[186,23652,23653],{"class":188,"line":288},[186,23654,23655],{"class":192},"\u002F\u002F类外初始化\n",[186,23657,23658,23660,23662,23665,23667,23669],{"class":188,"line":294},[186,23659,1626],{"class":669},[186,23661,17031],{"class":198},[186,23663,23664],{"class":202},"::m_A",[186,23666,529],{"class":669},[186,23668,2056],{"class":206},[186,23670,634],{"class":202},[186,23672,23673,23675,23677],{"class":188,"line":1212},[186,23674,6827],{"class":669},[186,23676,7051],{"class":198},[186,23678,3443],{"class":202},[186,23680,23681],{"class":188,"line":1223},[186,23682,3018],{"class":202},[186,23684,23685],{"class":188,"line":1236},[186,23686,16775],{"class":202},[186,23688,23689],{"class":188,"line":3096},[186,23690,23691],{"class":192},"    \u002F\u002F访问变量的原内存空间\n",[186,23693,23694],{"class":188,"line":3110},[186,23695,23696],{"class":192},"    \u002F\u002F100\n",[186,23698,23699,23701,23703,23705,23707],{"class":188,"line":3115},[186,23700,3023],{"class":202},[186,23702,2650],{"class":669},[186,23704,23562],{"class":202},[186,23706,2650],{"class":669},[186,23708,2672],{"class":202},[186,23710,23711],{"class":188,"line":3121},[186,23712,23713],{"class":202},"    Person p2;\n",[186,23715,23716,23719,23721,23723],{"class":188,"line":3142},[186,23717,23718],{"class":202},"    p2.m_A",[186,23720,529],{"class":669},[186,23722,3190],{"class":206},[186,23724,634],{"class":202},[186,23726,23727],{"class":188,"line":3147},[186,23728,23729],{"class":192},"    \u002F\u002F继续访问这片空间\n",[186,23731,23732],{"class":188,"line":3161},[186,23733,23734],{"class":192},"    \u002F\u002F200\n",[186,23736,23737,23739,23741,23744,23746],{"class":188,"line":3166},[186,23738,3023],{"class":202},[186,23740,2650],{"class":669},[186,23742,23743],{"class":202},"p2.m_A",[186,23745,2650],{"class":669},[186,23747,2672],{"class":202},[186,23749,23750],{"class":188,"line":3195},[186,23751,639],{"class":202},[186,23753,23754,23756,23758],{"class":188,"line":3200},[186,23755,1626],{"class":669},[186,23757,3440],{"class":198},[186,23759,3443],{"class":202},[186,23761,23762],{"class":188,"line":3217},[186,23763,3018],{"class":202},[186,23765,23766,23768],{"class":188,"line":3222},[186,23767,7096],{"class":198},[186,23769,7099],{"class":202},[186,23771,23772],{"class":188,"line":3227},[186,23773,639],{"class":202},[169,23775,23776],{},[54,23777,23778],{},"静态变量的访问",[176,23780,23782],{"className":1612,"code":23781,"language":1614,"meta":181,"style":181},"#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",[183,23783,23784,23790,23800,23806,23810,23814,23818,23826,23830,23835,23843,23847,23851,23865,23880,23888,23892,23897,23902,23907,23912,23924,23929,23934,23948,23965,23969,23977,23981,23987],{"__ignoreMap":181},[186,23785,23786,23788],{"class":188,"line":189},[186,23787,3417],{"class":669},[186,23789,3420],{"class":532},[186,23791,23792,23794,23796,23798],{"class":188,"line":49},[186,23793,3425],{"class":669},[186,23795,3428],{"class":669},[186,23797,3431],{"class":198},[186,23799,634],{"class":202},[186,23801,23802,23804],{"class":188,"line":219},[186,23803,16156],{"class":669},[186,23805,16633],{"class":198},[186,23807,23808],{"class":188,"line":225},[186,23809,3018],{"class":202},[186,23811,23812],{"class":188,"line":242},[186,23813,16178],{"class":669},[186,23815,23816],{"class":188,"line":248},[186,23817,23638],{"class":192},[186,23819,23820,23822,23824],{"class":188,"line":265},[186,23821,12483],{"class":669},[186,23823,3849],{"class":669},[186,23825,22853],{"class":202},[186,23827,23828],{"class":188,"line":271},[186,23829,16684],{"class":669},[186,23831,23832],{"class":188,"line":288},[186,23833,23834],{"class":192},"    \u002F\u002F静态成员变量也是有访问权限的\n",[186,23836,23837,23839,23841],{"class":188,"line":294},[186,23838,12483],{"class":669},[186,23840,3849],{"class":669},[186,23842,22860],{"class":202},[186,23844,23845],{"class":188,"line":1212},[186,23846,5461],{"class":202},[186,23848,23849],{"class":188,"line":1223},[186,23850,23655],{"class":192},[186,23852,23853,23855,23857,23859,23861,23863],{"class":188,"line":1236},[186,23854,1626],{"class":669},[186,23856,17031],{"class":198},[186,23858,23664],{"class":202},[186,23860,529],{"class":669},[186,23862,2056],{"class":206},[186,23864,634],{"class":202},[186,23866,23867,23869,23871,23874,23876,23878],{"class":188,"line":3096},[186,23868,1626],{"class":669},[186,23870,17031],{"class":198},[186,23872,23873],{"class":202},"::m_B",[186,23875,529],{"class":669},[186,23877,801],{"class":206},[186,23879,634],{"class":202},[186,23881,23882,23884,23886],{"class":188,"line":3110},[186,23883,6827],{"class":669},[186,23885,7120],{"class":198},[186,23887,3443],{"class":202},[186,23889,23890],{"class":188,"line":3115},[186,23891,3018],{"class":202},[186,23893,23894],{"class":188,"line":3121},[186,23895,23896],{"class":192},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[186,23898,23899],{"class":188,"line":3142},[186,23900,23901],{"class":192},"    \u002F\u002F静态成员变量有两种访问方式：\n",[186,23903,23904],{"class":188,"line":3147},[186,23905,23906],{"class":192},"    \u002F\u002F1.通过对象进行访问\n",[186,23908,23909],{"class":188,"line":3161},[186,23910,23911],{"class":202},"    Person p;  \n",[186,23913,23914,23916,23918,23920,23922],{"class":188,"line":3166},[186,23915,3023],{"class":202},[186,23917,2650],{"class":669},[186,23919,23562],{"class":202},[186,23921,2650],{"class":669},[186,23923,2672],{"class":202},[186,23925,23926],{"class":188,"line":3195},[186,23927,23928],{"class":192},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[186,23930,23931],{"class":188,"line":3200},[186,23932,23933],{"class":192},"    \u002F\u002F2.通过类名进行访问\n",[186,23935,23936,23938,23940,23942,23944,23946],{"class":188,"line":3217},[186,23937,3023],{"class":202},[186,23939,2650],{"class":669},[186,23941,20507],{"class":198},[186,23943,23664],{"class":202},[186,23945,2650],{"class":669},[186,23947,2672],{"class":202},[186,23949,23950,23952,23954,23956,23958,23960,23962],{"class":188,"line":3222},[186,23951,3023],{"class":202},[186,23953,2650],{"class":669},[186,23955,20507],{"class":198},[186,23957,23873],{"class":202},[186,23959,2650],{"class":669},[186,23961,2715],{"class":202},[186,23963,23964],{"class":192}," \u002F\u002F没有访问权限，报错\n",[186,23966,23967],{"class":188,"line":3227},[186,23968,639],{"class":202},[186,23970,23971,23973,23975],{"class":188,"line":3232},[186,23972,1626],{"class":669},[186,23974,3440],{"class":198},[186,23976,3443],{"class":202},[186,23978,23979],{"class":188,"line":3246},[186,23980,3018],{"class":202},[186,23982,23983,23985],{"class":188,"line":3251},[186,23984,7165],{"class":198},[186,23986,7099],{"class":202},[186,23988,23989],{"class":188,"line":4044},[186,23990,639],{"class":202},[23459,23992,23994],{"id":23993},"_8282静态成员函数","8.2.8.2静态成员函数",[169,23996,23997],{},"1.静态成员函数定义与访问",[176,23999,24001],{"className":1612,"code":24000,"language":1614,"meta":181,"style":181},"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",[183,24002,24003,24009,24013,24017,24022,24033,24037,24051,24055,24059,24067,24071,24076,24081,24085,24093,24098,24108],{"__ignoreMap":181},[186,24004,24005,24007],{"class":188,"line":189},[186,24006,16156],{"class":669},[186,24008,16633],{"class":198},[186,24010,24011],{"class":188,"line":49},[186,24012,3018],{"class":202},[186,24014,24015],{"class":188,"line":219},[186,24016,16178],{"class":669},[186,24018,24019],{"class":188,"line":225},[186,24020,24021],{"class":192},"    \u002F\u002F在公共权限下定义静态成员函数\n",[186,24023,24024,24026,24029,24031],{"class":188,"line":242},[186,24025,12483],{"class":669},[186,24027,24028],{"class":669}," void",[186,24030,12848],{"class":198},[186,24032,3443],{"class":202},[186,24034,24035],{"class":188,"line":248},[186,24036,3497],{"class":202},[186,24038,24039,24042,24044,24047,24049],{"class":188,"line":265},[186,24040,24041],{"class":202},"        coout",[186,24043,2650],{"class":669},[186,24045,24046],{"class":532},"\"静态成员函数的调用\"",[186,24048,2650],{"class":669},[186,24050,2672],{"class":202},[186,24052,24053],{"class":188,"line":271},[186,24054,3654],{"class":202},[186,24056,24057],{"class":188,"line":288},[186,24058,5461],{"class":202},[186,24060,24061,24063,24065],{"class":188,"line":294},[186,24062,6827],{"class":669},[186,24064,7051],{"class":198},[186,24066,3443],{"class":202},[186,24068,24069],{"class":188,"line":1212},[186,24070,3018],{"class":202},[186,24072,24073],{"class":188,"line":1223},[186,24074,24075],{"class":192},"    \u002F\u002F静态成员函数的调用方式:\n",[186,24077,24078],{"class":188,"line":1236},[186,24079,24080],{"class":192},"    \u002F\u002F1.通过对象访问\n",[186,24082,24083],{"class":188,"line":3096},[186,24084,16775],{"class":202},[186,24086,24087,24089,24091],{"class":188,"line":3110},[186,24088,17327],{"class":202},[186,24090,13014],{"class":198},[186,24092,7099],{"class":202},[186,24094,24095],{"class":188,"line":3115},[186,24096,24097],{"class":192},"    \u002F\u002F2.通过类名访问\n",[186,24099,24100,24102,24104,24106],{"class":188,"line":3121},[186,24101,19980],{"class":198},[186,24103,19193],{"class":202},[186,24105,13014],{"class":198},[186,24107,7099],{"class":202},[186,24109,24110],{"class":188,"line":3142},[186,24111,639],{"class":202},[34,24113,24114],{"start":49},[22,24115,24116],{},"静态成员函数只能访问静态成员变量",[176,24118,24120],{"className":1612,"code":24119,"language":1614,"meta":181,"style":181},"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",[183,24121,24122,24128,24132,24136,24140,24150,24154,24168,24173,24185,24189,24200,24210,24214,24218,24222,24232,24236,24249,24253,24257,24261,24265,24279,24287,24291,24295,24299,24303,24311,24315,24325,24330,24334,24342,24346,24352],{"__ignoreMap":181},[186,24123,24124,24126],{"class":188,"line":189},[186,24125,16156],{"class":669},[186,24127,16633],{"class":198},[186,24129,24130],{"class":188,"line":49},[186,24131,3018],{"class":202},[186,24133,24134],{"class":188,"line":219},[186,24135,16178],{"class":669},[186,24137,24138],{"class":188,"line":225},[186,24139,24021],{"class":192},[186,24141,24142,24144,24146,24148],{"class":188,"line":242},[186,24143,12483],{"class":669},[186,24145,24028],{"class":669},[186,24147,12848],{"class":198},[186,24149,3443],{"class":202},[186,24151,24152],{"class":188,"line":248},[186,24153,3497],{"class":202},[186,24155,24156,24159,24161,24163,24165],{"class":188,"line":265},[186,24157,24158],{"class":202},"        m_A",[186,24160,529],{"class":669},[186,24162,1922],{"class":206},[186,24164,1676],{"class":202},[186,24166,24167],{"class":192}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[186,24169,24170],{"class":188,"line":271},[186,24171,24172],{"class":192},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[186,24174,24175,24177,24179,24181,24183],{"class":188,"line":288},[186,24176,24041],{"class":202},[186,24178,2650],{"class":669},[186,24180,24046],{"class":532},[186,24182,2650],{"class":669},[186,24184,2672],{"class":202},[186,24186,24187],{"class":188,"line":294},[186,24188,3654],{"class":202},[186,24190,24191,24193,24195,24197],{"class":188,"line":1212},[186,24192,12483],{"class":669},[186,24194,3849],{"class":669},[186,24196,16910],{"class":202},[186,24198,24199],{"class":192}," \u002F\u002F静态成员变量\n",[186,24201,24202,24204,24207],{"class":188,"line":1223},[186,24203,3452],{"class":669},[186,24205,24206],{"class":202}," m_B;",[186,24208,24209],{"class":192}," \u002F\u002F非静态成员变量\n",[186,24211,24212],{"class":188,"line":1236},[186,24213,3867],{"emptyLinePlaceholder":1551},[186,24215,24216],{"class":188,"line":3096},[186,24217,16684],{"class":669},[186,24219,24220],{"class":188,"line":3110},[186,24221,23834],{"class":192},[186,24223,24224,24226,24228,24230],{"class":188,"line":3115},[186,24225,12483],{"class":669},[186,24227,24028],{"class":669},[186,24229,15081],{"class":198},[186,24231,3443],{"class":202},[186,24233,24234],{"class":188,"line":3121},[186,24235,3497],{"class":202},[186,24237,24238,24240,24242,24245,24247],{"class":188,"line":3142},[186,24239,4917],{"class":202},[186,24241,2650],{"class":669},[186,24243,24244],{"class":532},"\"这是私有权限下的静态函数调用\"",[186,24246,2650],{"class":669},[186,24248,2672],{"class":202},[186,24250,24251],{"class":188,"line":3147},[186,24252,3654],{"class":202},[186,24254,24255],{"class":188,"line":3161},[186,24256,3867],{"emptyLinePlaceholder":1551},[186,24258,24259],{"class":188,"line":3166},[186,24260,3867],{"emptyLinePlaceholder":1551},[186,24262,24263],{"class":188,"line":3195},[186,24264,5461],{"class":202},[186,24266,24267,24269,24271,24273,24275,24277],{"class":188,"line":3200},[186,24268,1626],{"class":669},[186,24270,17031],{"class":198},[186,24272,23664],{"class":202},[186,24274,529],{"class":669},[186,24276,1803],{"class":206},[186,24278,634],{"class":202},[186,24280,24281,24283,24285],{"class":188,"line":3217},[186,24282,6827],{"class":669},[186,24284,7051],{"class":198},[186,24286,3443],{"class":202},[186,24288,24289],{"class":188,"line":3222},[186,24290,3018],{"class":202},[186,24292,24293],{"class":188,"line":3227},[186,24294,24075],{"class":192},[186,24296,24297],{"class":188,"line":3232},[186,24298,24080],{"class":192},[186,24300,24301],{"class":188,"line":3246},[186,24302,16775],{"class":202},[186,24304,24305,24307,24309],{"class":188,"line":3251},[186,24306,17327],{"class":202},[186,24308,13014],{"class":198},[186,24310,7099],{"class":202},[186,24312,24313],{"class":188,"line":4044},[186,24314,24097],{"class":192},[186,24316,24317,24319,24321,24323],{"class":188,"line":4058},[186,24318,19980],{"class":198},[186,24320,19193],{"class":202},[186,24322,13014],{"class":198},[186,24324,7099],{"class":202},[186,24326,24327],{"class":188,"line":4066},[186,24328,24329],{"class":192},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[186,24331,24332],{"class":188,"line":4071},[186,24333,639],{"class":202},[186,24335,24336,24338,24340],{"class":188,"line":4077},[186,24337,1626],{"class":669},[186,24339,3440],{"class":198},[186,24341,3443],{"class":202},[186,24343,24344],{"class":188,"line":4083},[186,24345,3018],{"class":202},[186,24347,24348,24350],{"class":188,"line":4088},[186,24349,7096],{"class":198},[186,24351,7099],{"class":202},[186,24353,24354],{"class":188,"line":9411},[186,24355,639],{"class":202},[29,24357,24359],{"id":24358},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23459,24361,24363],{"id":24362},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[169,24365,24366],{},"在c++中，类内的成员变量和成员函数分开存储",[169,24368,24369],{},"只有非静态成员变量才属于类的对象上",[24371,24372,24374],"h5",{"id":24373},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[176,24376,24378],{"className":1612,"code":24377,"language":1614,"meta":181,"style":181},"#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",[183,24379,24380,24387,24397,24403,24407,24411,24415,24423,24427,24431,24454,24458,24466,24470,24476],{"__ignoreMap":181},[186,24381,24382,24384],{"class":188,"line":189},[186,24383,3417],{"class":669},[186,24385,24386],{"class":532},"\u003Ciostraem>\n",[186,24388,24389,24391,24393,24395],{"class":188,"line":49},[186,24390,3425],{"class":669},[186,24392,3428],{"class":669},[186,24394,3431],{"class":198},[186,24396,634],{"class":202},[186,24398,24399,24401],{"class":188,"line":219},[186,24400,16156],{"class":669},[186,24402,16633],{"class":198},[186,24404,24405],{"class":188,"line":225},[186,24406,3018],{"class":202},[186,24408,24409],{"class":188,"line":242},[186,24410,3867],{"emptyLinePlaceholder":1551},[186,24412,24413],{"class":188,"line":248},[186,24414,5461],{"class":202},[186,24416,24417,24419,24421],{"class":188,"line":265},[186,24418,6827],{"class":669},[186,24420,7051],{"class":198},[186,24422,3443],{"class":202},[186,24424,24425],{"class":188,"line":271},[186,24426,3018],{"class":202},[186,24428,24429],{"class":188,"line":288},[186,24430,16775],{"class":202},[186,24432,24433,24435,24437,24440,24442,24445,24447,24449,24451],{"class":188,"line":294},[186,24434,3023],{"class":202},[186,24436,2650],{"class":669},[186,24438,24439],{"class":532},"\"size of p=\"",[186,24441,2650],{"class":669},[186,24443,24444],{"class":198},"sizeoif",[186,24446,8002],{"class":202},[186,24448,2650],{"class":669},[186,24450,2715],{"class":202},[186,24452,24453],{"class":192}," \u002F\u002F查看这个空类的占用的内存空间\n",[186,24455,24456],{"class":188,"line":1212},[186,24457,639],{"class":202},[186,24459,24460,24462,24464],{"class":188,"line":1223},[186,24461,1626],{"class":669},[186,24463,3440],{"class":198},[186,24465,3443],{"class":202},[186,24467,24468],{"class":188,"line":1236},[186,24469,3018],{"class":202},[186,24471,24472,24474],{"class":188,"line":3096},[186,24473,7096],{"class":198},[186,24475,7099],{"class":202},[186,24477,24478],{"class":188,"line":3110},[186,24479,639],{"class":202},[169,24481,24482],{},"输出结果为：size of p=1",[169,24484,24485],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[169,24487,24488],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24371,24490,24492],{"id":24491},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[176,24494,24496],{"className":1612,"code":24495,"language":1614,"meta":181,"style":181},"#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",[183,24497,24498,24504,24514,24522,24526,24535,24539,24547,24551,24555,24574,24578,24582,24590,24594,24600],{"__ignoreMap":181},[186,24499,24500,24502],{"class":188,"line":189},[186,24501,3417],{"class":669},[186,24503,3420],{"class":532},[186,24505,24506,24508,24510,24512],{"class":188,"line":49},[186,24507,3425],{"class":669},[186,24509,3428],{"class":669},[186,24511,3431],{"class":198},[186,24513,634],{"class":202},[186,24515,24516,24518,24520],{"class":188,"line":219},[186,24517,16156],{"class":669},[186,24519,17031],{"class":198},[186,24521,4141],{"class":202},[186,24523,24524],{"class":188,"line":225},[186,24525,3018],{"class":202},[186,24527,24528,24530,24532],{"class":188,"line":242},[186,24529,3452],{"class":669},[186,24531,16910],{"class":202},[186,24533,24534],{"class":192},"\u002F\u002F非静态成员变量\n",[186,24536,24537],{"class":188,"line":248},[186,24538,5461],{"class":202},[186,24540,24541,24543,24545],{"class":188,"line":265},[186,24542,6827],{"class":669},[186,24544,7051],{"class":198},[186,24546,3443],{"class":202},[186,24548,24549],{"class":188,"line":271},[186,24550,3018],{"class":202},[186,24552,24553],{"class":188,"line":288},[186,24554,16775],{"class":202},[186,24556,24557,24559,24561,24563,24565,24567,24569,24571],{"class":188,"line":294},[186,24558,3023],{"class":202},[186,24560,2650],{"class":669},[186,24562,24439],{"class":532},[186,24564,2845],{"class":669},[186,24566,8002],{"class":202},[186,24568,2650],{"class":669},[186,24570,2715],{"class":202},[186,24572,24573],{"class":192}," \u002F\u002F查看不是空对象时占用多少内存\n",[186,24575,24576],{"class":188,"line":1212},[186,24577,3867],{"emptyLinePlaceholder":1551},[186,24579,24580],{"class":188,"line":1223},[186,24581,639],{"class":202},[186,24583,24584,24586,24588],{"class":188,"line":1236},[186,24585,1626],{"class":669},[186,24587,3440],{"class":198},[186,24589,3443],{"class":202},[186,24591,24592],{"class":188,"line":3096},[186,24593,3018],{"class":202},[186,24595,24596,24598],{"class":188,"line":3110},[186,24597,7096],{"class":198},[186,24599,7099],{"class":202},[186,24601,24602],{"class":188,"line":3115},[186,24603,639],{"class":202},[169,24605,24606],{},"输出结果：size of p=4",[169,24608,24609],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[34,24611,24612],{},[22,24613,24614],{},"如果加上非静态成员变量，Person类修改如下",[176,24616,24618],{"className":1612,"code":24617,"language":1614,"meta":181,"style":181},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[183,24619,24620,24626,24630,24636,24644,24648,24653],{"__ignoreMap":181},[186,24621,24622,24624],{"class":188,"line":189},[186,24623,16156],{"class":669},[186,24625,16633],{"class":198},[186,24627,24628],{"class":188,"line":49},[186,24629,3018],{"class":202},[186,24631,24632,24634],{"class":188,"line":219},[186,24633,3452],{"class":669},[186,24635,22853],{"class":202},[186,24637,24638,24640,24642],{"class":188,"line":225},[186,24639,12483],{"class":669},[186,24641,3849],{"class":669},[186,24643,22860],{"class":202},[186,24645,24646],{"class":188,"line":242},[186,24647,5461],{"class":202},[186,24649,24650],{"class":188,"line":248},[186,24651,24652],{"class":192},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[186,24654,24655,24657,24659,24661,24663,24665],{"class":188,"line":265},[186,24656,1626],{"class":669},[186,24658,17031],{"class":198},[186,24660,23873],{"class":202},[186,24662,529],{"class":669},[186,24664,1803],{"class":206},[186,24666,634],{"class":202},[169,24668,24669],{},"输出结果：4",[169,24671,24672],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[34,24674,24675],{"start":49},[22,24676,24677],{},"加上非静态成员函数",[176,24679,24681],{"className":1612,"code":24680,"language":1614,"meta":181,"style":181},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[183,24682,24683,24690,24694,24700,24708,24712,24716,24720],{"__ignoreMap":181},[186,24684,24685,24687],{"class":188,"line":189},[186,24686,16156],{"class":669},[186,24688,24689],{"class":198},"  Person\n",[186,24691,24692],{"class":188,"line":49},[186,24693,3018],{"class":202},[186,24695,24696,24698],{"class":188,"line":219},[186,24697,3452],{"class":669},[186,24699,22853],{"class":202},[186,24701,24702,24704,24706],{"class":188,"line":225},[186,24703,16371],{"class":669},[186,24705,12848],{"class":198},[186,24707,3443],{"class":202},[186,24709,24710],{"class":188,"line":242},[186,24711,3497],{"class":202},[186,24713,24714],{"class":188,"line":248},[186,24715,3867],{"emptyLinePlaceholder":1551},[186,24717,24718],{"class":188,"line":265},[186,24719,3654],{"class":202},[186,24721,24722],{"class":188,"line":271},[186,24723,5461],{"class":202},[169,24725,24726],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[34,24728,24729],{"start":219},[22,24730,24731],{},"加上静态成员函数",[176,24733,24735],{"className":1612,"code":24734,"language":1614,"meta":181,"style":181},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[183,24736,24737,24743,24747,24753,24761,24765,24769,24773,24784,24788,24792,24796],{"__ignoreMap":181},[186,24738,24739,24741],{"class":188,"line":189},[186,24740,16156],{"class":669},[186,24742,24689],{"class":198},[186,24744,24745],{"class":188,"line":49},[186,24746,3018],{"class":202},[186,24748,24749,24751],{"class":188,"line":219},[186,24750,3452],{"class":669},[186,24752,22853],{"class":202},[186,24754,24755,24757,24759],{"class":188,"line":225},[186,24756,16371],{"class":669},[186,24758,12848],{"class":198},[186,24760,3443],{"class":202},[186,24762,24763],{"class":188,"line":242},[186,24764,3497],{"class":202},[186,24766,24767],{"class":188,"line":248},[186,24768,3867],{"emptyLinePlaceholder":1551},[186,24770,24771],{"class":188,"line":265},[186,24772,3654],{"class":202},[186,24774,24775,24777,24779,24782],{"class":188,"line":271},[186,24776,12483],{"class":669},[186,24778,24028],{"class":669},[186,24780,24781],{"class":198}," func1",[186,24783,3443],{"class":202},[186,24785,24786],{"class":188,"line":288},[186,24787,3497],{"class":202},[186,24789,24790],{"class":188,"line":294},[186,24791,3867],{"emptyLinePlaceholder":1551},[186,24793,24794],{"class":188,"line":1212},[186,24795,3654],{"class":202},[186,24797,24798],{"class":188,"line":1223},[186,24799,5461],{"class":202},[169,24801,24669],{},[169,24803,24804],{},"解释：静态成员函数也不属于类上",[1524,24806,9137],{},{"title":181,"searchDepth":49,"depth":49,"links":24808},[24809,24815],{"id":16107,"depth":49,"text":16108,"children":24810},[24811,24812,24813,24814],{"id":16111,"depth":219,"text":16112},{"id":16836,"depth":219,"text":16837},{"id":17008,"depth":219,"text":17009},{"id":17466,"depth":219,"text":17467},{"id":19838,"depth":49,"text":19839,"children":24816},[24817,24818,24819,24820,24821,24822,24823,24824,24825],{"id":19850,"depth":219,"text":19851},{"id":20143,"depth":219,"text":20144},{"id":20634,"depth":219,"text":20635},{"id":21731,"depth":219,"text":21732},{"id":22154,"depth":219,"text":22155},{"id":22633,"depth":219,"text":22634},{"id":23008,"depth":219,"text":23009},{"id":23421,"depth":219,"text":23422},{"id":24358,"depth":219,"text":24359},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16072,"description":24826},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24833,"title":1614,"body":24834,"description":1548,"extension":1549,"meta":24838,"navigation":1551,"path":24840,"seo":24841,"stem":24842,"__hash__":24843},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24835,"toc":24836},[],{"title":181,"searchDepth":49,"depth":49,"links":24837},[],{"category":24839},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1614,"description":1548},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24845,"title":24846,"body":24847,"description":181,"extension":1549,"meta":25435,"navigation":1551,"path":25436,"seo":25437,"stem":25438,"__hash__":25439},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24848,"toc":25417},[24849,24852,24856,24859,24862,24865,24883,24888,24891,24894,24897,24900,24905,24908,24913,24916,24919,24923,24926,24929,24935,24938,24956,24960,24964,24967,24972,24975,24979,24982,24995,24998,25002,25005,25008,25011,25036,25039,25048,25059,25074,25106,25110,25117,25125,25129,25132,25135,25140,25144,25147,25150,25155,25158,25162,25165,25168,25173,25176,25180,25185,25189,25254,25258,25261,25264,25267,25270,25273,25279,25300,25303,25317,25325,25329,25332,25335,25340,25343,25348,25353,25356,25359,25364,25369,25372,25377,25382,25385,25390,25395,25398,25401,25406,25409,25414],[10,24850,24846],{"id":24851},"_1强化学习基本认识",[14,24853,24855],{"id":24854},"_11什么是强化学习","1.1.什么是强化学习",[169,24857,24858],{},"强化学习有两部分组成：智能体和环境；",[169,24860,24861],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[169,24863,24864],{},"强化学习与监督学习的区别:",[34,24866,24867,24870,24873,24876],{},[22,24868,24869],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[22,24871,24872],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[22,24874,24875],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[22,24877,24878,24879,24882],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[54,24880,24881],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[169,24884,24885],{},[164,24886],{"alt":181,"src":24887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[169,24889,24890],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[169,24892,24893],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[169,24895,24896],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[169,24898,24899],{},"获取奖励",[169,24901,24902],{},[164,24903],{"alt":181,"src":24904},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[169,24906,24907],{},"强化学习可以分成标准强化学习和深度强化学习",[169,24909,24910],{},[164,24911],{"alt":181,"src":24912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[169,24914,24915],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[169,24917,24918],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24920,24922],{"id":24921},"_12强化学习应用场景","1.2.强化学习应用场景",[169,24924,24925],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[169,24927,24928],{},"具身智能中的应用",[169,24930,24931,24934],{},[54,24932,24933],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[169,24936,24937],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[169,24939,24940,24941,24944,24945,24948,24949,24952,24953],{},"机器人是",[54,24942,24943],{},"躯体","，深度学习是",[54,24946,24947],{},"神经元****网络","，VLA是",[54,24950,24951],{},"通用的行为逻辑","，而强化学习是",[54,24954,24955],{},"教练",[14,24957,24959],{"id":24958},"_13序列决策","1.3.序列决策",[29,24961,24963],{"id":24962},"_131智能体与环境","1.3.1.智能体与环境",[169,24965,24966],{},"强化学习研究的问题是智能体agent与环境交互的问题",[169,24968,24969],{},[164,24970],{"alt":181,"src":24971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[169,24973,24974],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[29,24976,24978],{"id":24977},"_132奖励","1.3.2.奖励",[169,24980,24981],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[169,24983,24984,24985,24994],{},"取某个策略的表现如何。强化学习的目的就是",[54,24986,24987,24988,24993],{},"最大化",[54,24989,24990],{},[54,24991,24992],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[169,24996,24997],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[29,24999,25001],{"id":25000},"_133序列决策","1.3.3.序列决策",[169,25003,25004],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[169,25006,25007],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[169,25009,25010],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[169,25012,25013,25017,25018,25020,25021,25023,25024,25026,25027,15257,25030,15257,25033],{},[25014,25015,25016],"em",{},"Ht"," = ",[25014,25019,2206],{},"1*, a",[25014,25022,1829],{},", r",[25014,25025,1829],{},", . . . ,* ",[25014,25028,25029],{},"ot",[25014,25031,25032],{},", at ,",[25014,25034,25035],{},"rt",[169,25037,25038],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[169,25040,25041,25017,25044,3126,25046,2039],{},[25014,25042,25043],{},"st",[25014,25045,1673],{},[25014,25047,25016],{},[169,25049,25050,25051,25054,25055,25058],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[54,25052,25053],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[54,25056,25057],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[169,25060,25061,25062,25065,25066,25069,25070,25073],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[54,25063,25064],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[54,25067,25068],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25014,25071,25072],{},"S, A, T, R, Ω, O, γ",")。",[169,25075,25076,25077,25079,25080,25082,25083,832,25085,25088,25089,25091,25092,832,25095,25098,25099,25101,25102,25105],{},"其中 ",[25014,25078,2298],{}," 表示状态空间，为隐变量，",[25014,25081,1844],{}," 为动作空间，",[25014,25084,2322],{},[25014,25086,25087],{},"s ′ |s, a",") 为状态转移概率，",[25014,25090,2273],{}," 为奖励函数，",[25014,25093,25094],{},"Ω",[25014,25096,25097],{},"o|s, a",") 为观测概率，",[25014,25100,2200],{}," 为观测空间，",[25014,25103,25104],{},"γ"," 为折扣因子。",[14,25107,25109],{"id":25108},"_14动作空间","1.4.动作空间",[169,25111,25112,25113,25116],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[54,25114,25115],{},"动作空间"," ，动作空间分为:",[34,25118,25119,25122],{},[22,25120,25121],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[22,25123,25124],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25126,25128],{"id":25127},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[169,25130,25131],{},"由策略、价值函数、模型三部分组成",[169,25133,25134],{},"这三者组成马尔可夫决策过程",[169,25136,25137],{},[164,25138],{"alt":181,"src":25139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[29,25141,25143],{"id":25142},"_151策略","1.5.1.策略",[169,25145,25146],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[169,25148,25149],{},"策略可分为两种：",[169,25151,25152],{},[164,25153],{"alt":181,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[169,25156,25157],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[29,25159,25161],{"id":25160},"_152价值函数","1.5.2.价值函数",[169,25163,25164],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[169,25166,25167],{},"价值函数中有一个折扣因子，类似于存款利息",[169,25169,25170],{},[164,25171],{"alt":181,"src":25172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[169,25174,25175],{},"进入某个状态采取的最优动作可以通过Q函数得到",[29,25177,25179],{"id":25178},"_153模型","1.5.3.模型",[169,25181,25182],{},[164,25183],{"alt":181,"src":25184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25186,25188],{"id":25187},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[99,25190,25191,25200],{},[102,25192,25193],{},[105,25194,25195,25198],{},[108,25196,25197],{"align":110},"类型",[108,25199,1019],{"align":110},[116,25201,25202,25212,25222,25232,25244],{},[105,25203,25204,25209],{},[121,25205,25206],{"align":110},[54,25207,25208],{},"基于价值的智能体",[121,25210,25211],{"align":110},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[105,25213,25214,25219],{},[121,25215,25216],{"align":110},[54,25217,25218],{},"基于策略的智能体",[121,25220,25221],{"align":110},"直接学习策略，没有学习价值函数",[105,25223,25224,25229],{},[121,25225,25226],{"align":110},[54,25227,25228],{},"演员-评论员智能体",[121,25230,25231],{"align":110},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[105,25233,25234,25239],{},[121,25235,25236],{"align":110},[54,25237,25238],{},"有模型强化学习智能体",[121,25240,25241],{"align":110},[164,25242],{"alt":181,"src":25243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[105,25245,25246,25251],{},[121,25247,25248],{"align":110},[54,25249,25250],{},"免模型强化学习智能体",[121,25252,25253],{"align":110},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25255,25257],{"id":25256},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[169,25259,25260],{},"学习和规划是序列决策的两个基本问题",[169,25262,25263],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[169,25265,25266],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[169,25268,25269],{},"强化学习用到的库：Gym",[169,25271,25272],{},"Gym可以检验强化学习算法的优劣",[169,25274,25275,25278],{},[54,25276,25277],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[176,25280,25284],{"className":25281,"code":25282,"language":25283,"meta":181,"style":181},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[183,25285,25286],{"__ignoreMap":181},[186,25287,25288,25291,25294,25297],{"class":188,"line":189},[186,25289,25290],{"class":198},"pip",[186,25292,25293],{"class":532}," install",[186,25295,25296],{"class":532}," gym==",[186,25298,25299],{"class":206},"0.25.2\n",[169,25301,25302],{},"显示图形界面需要",[176,25304,25306],{"className":25281,"code":25305,"language":25283,"meta":181,"style":181},"pip install pygame\n",[183,25307,25308],{"__ignoreMap":181},[186,25309,25310,25312,25314],{"class":188,"line":189},[186,25311,25290],{"class":198},[186,25313,25293],{"class":532},[186,25315,25316],{"class":532}," pygame\n",[169,25318,25319,25320],{},"有关Gym库的相关文档介绍：",[948,25321,25324],{"href":25322,"rel":25323},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[952],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25326,25328],{"id":25327},"_18一些补充基础概念","1.8.一些补充基础概念",[169,25330,25331],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[169,25333,25334],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[169,25336,25337],{},[164,25338],{"alt":181,"src":25339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[169,25341,25342],{},"折扣率需要自己来设定",[169,25344,25345],{},[164,25346],{"alt":181,"src":25347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[34,25349,25350],{},[22,25351,25352],{},"状态转移函数：",[169,25354,25355],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[169,25357,25358],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[169,25360,25361],{},[164,25362],{"alt":181,"src":25363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[34,25365,25366],{"start":49},[22,25367,25368],{},"动作价值函数：",[169,25370,25371],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[169,25373,25374],{},[164,25375],{"alt":181,"src":25376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[34,25378,25379],{"start":219},[22,25380,25381],{},"最优动作价值函数：",[169,25383,25384],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[169,25386,25387],{},[164,25388],{"alt":181,"src":25389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[34,25391,25392],{"start":225},[22,25393,25394],{},"状态价值函数:",[169,25396,25397],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[169,25399,25400],{},"它衡量的是“一个具体动作”的长期价值",[169,25402,25403],{},[164,25404],{"alt":181,"src":25405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[169,25407,25408],{},"几个价值函数之间的比较：",[169,25410,25411],{},[164,25412],{"alt":181,"src":25413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1524,25415,25416],{},"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":181,"searchDepth":49,"depth":49,"links":25418},[25419,25420,25421,25426,25427,25432,25433,25434],{"id":24854,"depth":49,"text":24855},{"id":24921,"depth":49,"text":24922},{"id":24958,"depth":49,"text":24959,"children":25422},[25423,25424,25425],{"id":24962,"depth":219,"text":24963},{"id":24977,"depth":219,"text":24978},{"id":25000,"depth":219,"text":25001},{"id":25108,"depth":49,"text":25109},{"id":25127,"depth":49,"text":25128,"children":25428},[25429,25430,25431],{"id":25142,"depth":219,"text":25143},{"id":25160,"depth":219,"text":25161},{"id":25178,"depth":219,"text":25179},{"id":25187,"depth":49,"text":25188},{"id":25256,"depth":49,"text":25257},{"id":25327,"depth":49,"text":25328},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24846,"description":181},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25441,"title":25442,"body":25443,"description":25450,"extension":1549,"meta":25461,"navigation":1551,"path":25462,"seo":25463,"stem":25464,"__hash__":25465},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25444,"toc":25459},[25445,25448,25451,25456],[10,25446,25442],{"id":25447},"_2马尔可夫决策过程",[169,25449,25450],{},"这是强化学习的基本框架",[169,25452,25453],{},[164,25454],{"alt":181,"src":25455},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[169,25457,25458],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":181,"searchDepth":49,"depth":49,"links":25460},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25442,"description":25450},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25467,"title":25468,"body":25469,"description":181,"extension":1549,"meta":25585,"navigation":1551,"path":25586,"seo":25587,"stem":25588,"__hash__":25589},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25470,"toc":25580},[25471,25474,25478,25481,25486,25491,25494,25499,25502,25507,25510,25514,25519,25522,25527,25532,25537,25540,25544,25549,25552,25557,25562,25567,25572,25575],[10,25472,25468],{"id":25473},"_3动作价值函数",[14,25475,25477],{"id":25476},"_31dqn","3.1.DQN",[169,25479,25480],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[169,25482,25483],{},[164,25484],{"alt":181,"src":25485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[169,25487,25488],{},[164,25489],{"alt":181,"src":25490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[169,25492,25493],{},"DQN算法的描述：",[169,25495,25496],{},[164,25497],{"alt":181,"src":25498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[169,25500,25501],{},"这里的Dense指的是全连接层",[169,25503,25504],{},[164,25505],{"alt":181,"src":25506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[169,25508,25509],{},"当前观测的状态为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,25511,25513],{"id":25512},"_32dqn的举例","3.2.DQN的举例",[169,25515,25516],{},[164,25517],{"alt":181,"src":25518},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[169,25520,25521],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[169,25523,25524],{},[164,25525],{"alt":181,"src":25526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[169,25528,25529],{},[164,25530],{"alt":181,"src":25531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[169,25533,25534],{},[164,25535],{"alt":181,"src":25536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[169,25538,25539],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25541,25543],{"id":25542},"_33td算法","3.3.TD算法",[169,25545,25546],{},[164,25547],{"alt":181,"src":25548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[169,25550,25551],{},"强化学习TD算法公式的粗略解释：",[169,25553,25554],{},[164,25555],{"alt":181,"src":25556},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[169,25558,25559],{},[164,25560],{"alt":181,"src":25561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[169,25563,25564],{},[164,25565],{"alt":181,"src":25566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[169,25568,25569],{},[164,25570],{"alt":181,"src":25571},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[169,25573,25574],{},"TD算法总结：",[169,25576,25577],{},[164,25578],{"alt":181,"src":25579},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":181,"searchDepth":49,"depth":49,"links":25581},[25582,25583,25584],{"id":25476,"depth":49,"text":25477},{"id":25512,"depth":49,"text":25513},{"id":25542,"depth":49,"text":25543},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25468,"description":181},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25591,"title":25592,"body":25593,"description":181,"extension":1549,"meta":25826,"navigation":1551,"path":25827,"seo":25828,"stem":25829,"__hash__":25830},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25594,"toc":25822},[25595,25598,25602,25605,25608,25613,25618,25621,25626,25631,25634,25639,25642,25647,25650,25655,25658,25663,25666,25671,25676,25679,25684,25687,25690,25695,25698,25703,25708,25712,25715,25718,25723,25728,25731,25736,25741,25744,25749,25752,25755,25760,25763,25768,25771,25776,25781,25784,25789,25794,25797,25802,25805,25810,25813],[10,25596,25592],{"id":25597},"_4策略学习",[14,25599,25601],{"id":25600},"_41概念描述","4.1.概念描述",[169,25603,25604],{},"用神经网络（策略网络）近似策略函数",[169,25606,25607],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[169,25609,25610],{},[164,25611],{"alt":181,"src":25612},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[169,25614,25615],{},[164,25616],{"alt":181,"src":25617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[169,25619,25620],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[169,25622,25623],{},[164,25624],{"alt":181,"src":25625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[169,25627,25628],{},[164,25629],{"alt":181,"src":25630},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[169,25632,25633],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[169,25635,25636],{},[164,25637],{"alt":181,"src":25638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[169,25640,25641],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[169,25643,25644],{},[164,25645],{"alt":181,"src":25646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[169,25648,25649],{},"改进theta要用到策略梯度算法",[169,25651,25652],{},[164,25653],{"alt":181,"src":25654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[169,25656,25657],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[169,25659,25660],{},[164,25661],{"alt":181,"src":25662},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[169,25664,25665],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[169,25667,25668],{},[164,25669],{"alt":181,"src":25670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[169,25672,25673],{},[164,25674],{"alt":181,"src":25675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[169,25677,25678],{},"梯度公式总结：",[169,25680,25681],{},[164,25682],{"alt":181,"src":25683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[169,25685,25686],{},"两个公式的分别应用场景：",[169,25688,25689],{},"对于离散的动作：",[169,25691,25692],{},[164,25693],{"alt":181,"src":25694},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[169,25696,25697],{},"对于连续的动作：",[169,25699,25700],{},[164,25701],{"alt":181,"src":25702},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[169,25704,25705],{},[164,25706],{"alt":181,"src":25707},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25709,25711],{"id":25710},"_42概率梯度算法总结","4.2.概率梯度算法总结",[169,25713,25714],{},"使用蒙特卡洛来近似计算策略梯度",[169,25716,25717],{},"蒙特卡洛法的解释如下：",[169,25719,25720],{},[164,25721],{"alt":181,"src":25722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[169,25724,25725],{},[164,25726],{"alt":181,"src":25727},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[169,25729,25730],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[34,25732,25733],{},[22,25734,25735],{},"方法一：reinforce算法",[169,25737,25738],{},[164,25739],{"alt":181,"src":25740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[169,25742,25743],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[34,25745,25746],{"start":49},[22,25747,25748],{},"方法二：actor-critic算法",[169,25750,25751],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[169,25753,25754],{},"两个网络的构建：",[169,25756,25757],{},[164,25758],{"alt":181,"src":25759},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[169,25761,25762],{},"actor网路：",[169,25764,25765],{},[164,25766],{"alt":181,"src":25767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[169,25769,25770],{},"critic网络",[169,25772,25773],{},[164,25774],{"alt":181,"src":25775},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[34,25777,25778],{"start":219},[22,25779,25780],{},"网络的训练",[169,25782,25783],{},"网络描述",[169,25785,25786],{},[164,25787],{"alt":181,"src":25788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[169,25790,25791],{},[164,25792],{"alt":181,"src":25793},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[169,25795,25796],{},"TD算法更新梯度：",[169,25798,25799],{},[164,25800],{"alt":181,"src":25801},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[169,25803,25804],{},"策略网络更新梯度：",[169,25806,25807],{},[164,25808],{"alt":181,"src":25809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[169,25811,25812],{},"训练整个流程的具体描述：",[169,25814,25815,25818,25819],{},[164,25816],{"alt":181,"src":25817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[164,25820],{"alt":181,"src":25821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":181,"searchDepth":49,"depth":49,"links":25823},[25824,25825],{"id":25600,"depth":49,"text":25601},{"id":25710,"depth":49,"text":25711},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25592,"description":181},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25832,"title":25833,"body":25834,"description":25841,"extension":1549,"meta":25891,"navigation":1551,"path":25892,"seo":25893,"stem":25894,"__hash__":25895},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25835,"toc":25887},[25836,25839,25842,25846,25849,25854,25858,25861,25866,25869,25874,25879,25882],[10,25837,25833],{"id":25838},"_5alphago算法",[169,25840,25841],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25843,25845],{"id":25844},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[169,25847,25848],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[169,25850,25851],{},[164,25852],{"alt":181,"src":25853},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25855,25857],{"id":25856},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[169,25859,25860],{},"采用强化学习的方式训练策略网络",[169,25862,25863],{},[164,25864],{"alt":181,"src":25865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[169,25867,25868],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[169,25870,25871],{},[164,25872],{"alt":181,"src":25873},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[169,25875,25876],{},[164,25877],{"alt":181,"src":25878},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[169,25880,25881],{},"强化学习训练策略网络的总结：",[169,25883,25884],{},[164,25885],{"alt":181,"src":25886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":181,"searchDepth":49,"depth":49,"links":25888},[25889,25890],{"id":25844,"depth":49,"text":25845},{"id":25856,"depth":49,"text":25857},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25833,"description":25841},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25897,"title":25898,"body":25899,"description":25906,"extension":1549,"meta":25909,"navigation":1551,"path":25910,"seo":25911,"stem":25912,"__hash__":25913},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25900,"toc":25907},[25901,25904],[10,25902,25898],{"id":25903},"_6价值网络",[169,25905,25906],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":181,"searchDepth":49,"depth":49,"links":25908},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25898,"description":25906},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25915,"title":25916,"body":25917,"description":25921,"extension":1549,"meta":25922,"navigation":1551,"path":25923,"seo":25924,"stem":25925,"__hash__":25926},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25918,"toc":25919},[],{"title":181,"searchDepth":49,"depth":49,"links":25920},[],"记录自己的强化学习笔记。",{"category":24839},"\u002Fwiki\u002F2025-12-04",{"title":25916,"description":25921},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25928,"title":25929,"body":25930,"description":1548,"extension":1549,"meta":25969,"navigation":1551,"path":25970,"seo":25971,"stem":25972,"__hash__":25973},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25931,"toc":25967},[25932,25935,25938,25944,25947,25953,25956,25961,25964],[10,25933,25929],{"id":25934},"_1-项目概览与官方资源",[169,25936,25937],{},"官方文档：",[169,25939,25940],{},[948,25941,25942],{"href":25942,"rel":25943},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[952],[169,25945,25946],{},"官方代码仓库：",[169,25948,25949],{},[948,25950,25951],{"href":25951,"rel":25952},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[952],[169,25954,25955],{},"复现大体流程：",[169,25957,25958],{},[164,25959],{"alt":181,"src":25960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[169,25962,25963],{},"本教程的目标是打通这条链路：",[169,25965,25966],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":181,"searchDepth":49,"depth":49,"links":25968},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25929,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25975,"title":25976,"body":25977,"description":1548,"extension":1549,"meta":26093,"navigation":1551,"path":26094,"seo":26095,"stem":26096,"__hash__":26097},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25978,"toc":26088},[25979,25982,25986,25989,25996,26000,26003,26012,26022,26026,26056,26059,26085],[10,25980,25976],{"id":25981},"_2-环境准备与设备连接",[14,25983,25985],{"id":25984},"_21-系统与环境","2.1 系统与环境",[169,25987,25988],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[169,25990,25991,25992,25995],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[183,25993,25994],{},"lerobot"," 依赖。",[14,25997,25999],{"id":25998},"_22-机械臂串口识别","2.2 机械臂串口识别",[169,26001,26002],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[176,26004,26006],{"className":25281,"code":26005,"language":25283,"meta":181,"style":181},"lerobot-find-out\n",[183,26007,26008],{"__ignoreMap":181},[186,26009,26010],{"class":188,"line":189},[186,26011,26005],{"class":198},[169,26013,26014,26015,1824,26018,26021],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[183,26016,26017],{},"\u002Fdev\u002FttyACM0",[183,26019,26020],{},"\u002Fdev\u002FttyACM1","）。",[14,26023,26025],{"id":26024},"_23-串口授权","2.3 串口授权",[176,26027,26029],{"className":25281,"code":26028,"language":25283,"meta":181,"style":181},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[183,26030,26031,26045],{"__ignoreMap":181},[186,26032,26033,26036,26039,26042],{"class":188,"line":189},[186,26034,26035],{"class":198},"sudo",[186,26037,26038],{"class":532}," chmod",[186,26040,26041],{"class":206}," 666",[186,26043,26044],{"class":532}," \u002Fdev\u002FttyACM0\n",[186,26046,26047,26049,26051,26053],{"class":188,"line":49},[186,26048,26035],{"class":198},[186,26050,26038],{"class":532},[186,26052,26041],{"class":206},[186,26054,26055],{"class":532}," \u002Fdev\u002FttyACM1\n",[169,26057,26058],{},"说明：",[19,26060,26061,26066,26072,26082],{},[22,26062,26063,26065],{},[183,26064,26035],{},"：以 root 权限执行命令。",[22,26067,26068,26071],{},[183,26069,26070],{},"chmod","：修改设备节点权限。",[22,26073,26074,26077,26078,26081],{},[183,26075,26076],{},"666","：",[183,26079,26080],{},"rw-rw-rw-","，所有用户可读写。",[22,26083,26084],{},"串口号必须替换为你机器上的真实端口。",[1524,26086,26087],{},"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":181,"searchDepth":49,"depth":49,"links":26089},[26090,26091,26092],{"id":25984,"depth":49,"text":25985},{"id":25998,"depth":49,"text":25999},{"id":26024,"depth":49,"text":26025},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25976,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26099,"title":26100,"body":26101,"description":1548,"extension":1549,"meta":26262,"navigation":1551,"path":26263,"seo":26264,"stem":26265,"__hash__":26266},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26102,"toc":26258},[26103,26107,26111,26117,26120,26177,26180,26184,26187,26255],[10,26104,26106],{"id":26105},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26108,26110],{"id":26109},"_31-配置电机-id","3.1 配置电机 ID",[169,26112,26113,26114,26116],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[183,26115,1829],{},"，需要改成机械臂链路里不冲突的编号。",[169,26118,26119],{},"方式一：用 LeRobot 命令逐步写入。",[176,26121,26123],{"className":25281,"code":26122,"language":25283,"meta":181,"style":181},"# 主臂舵机配置 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",[183,26124,26125,26130,26138,26145,26150,26154,26159,26165,26172],{"__ignoreMap":181},[186,26126,26127],{"class":188,"line":189},[186,26128,26129],{"class":192},"# 主臂舵机配置 ID\n",[186,26131,26132,26135],{"class":188,"line":49},[186,26133,26134],{"class":198},"lerobot-setup-motors",[186,26136,26137],{"class":206}," \\\n",[186,26139,26140,26143],{"class":188,"line":219},[186,26141,26142],{"class":206},"  --teleop.type=so101_leader",[186,26144,26137],{"class":206},[186,26146,26147],{"class":188,"line":225},[186,26148,26149],{"class":206},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[186,26151,26152],{"class":188,"line":242},[186,26153,3867],{"emptyLinePlaceholder":1551},[186,26155,26156],{"class":188,"line":248},[186,26157,26158],{"class":192},"# 从臂舵机配置 ID\n",[186,26160,26161,26163],{"class":188,"line":265},[186,26162,26134],{"class":198},[186,26164,26137],{"class":206},[186,26166,26167,26170],{"class":188,"line":271},[186,26168,26169],{"class":206},"  --robot.type=so101_follower",[186,26171,26137],{"class":206},[186,26173,26174],{"class":188,"line":288},[186,26175,26176],{"class":206},"  --robot.port=\u002Fdev\u002FttyACM1\n",[169,26178,26179],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26181,26183],{"id":26182},"_32-机械臂校准","3.2 机械臂校准",[169,26185,26186],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[176,26188,26190],{"className":25281,"code":26189,"language":25283,"meta":181,"style":181},"# 主臂校准\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",[183,26191,26192,26197,26204,26210,26217,26222,26226,26231,26237,26243,26250],{"__ignoreMap":181},[186,26193,26194],{"class":188,"line":189},[186,26195,26196],{"class":192},"# 主臂校准\n",[186,26198,26199,26202],{"class":188,"line":49},[186,26200,26201],{"class":198},"lerobot-calibrate",[186,26203,26137],{"class":206},[186,26205,26206,26208],{"class":188,"line":219},[186,26207,26142],{"class":206},[186,26209,26137],{"class":206},[186,26211,26212,26215],{"class":188,"line":225},[186,26213,26214],{"class":206},"  --teleop.port=\u002Fdev\u002FttyACM0",[186,26216,26137],{"class":206},[186,26218,26219],{"class":188,"line":242},[186,26220,26221],{"class":206},"  --teleop.id=my_awesome_leader_arm\n",[186,26223,26224],{"class":188,"line":248},[186,26225,3867],{"emptyLinePlaceholder":1551},[186,26227,26228],{"class":188,"line":265},[186,26229,26230],{"class":192},"# 从臂校准\n",[186,26232,26233,26235],{"class":188,"line":271},[186,26234,26201],{"class":198},[186,26236,26137],{"class":206},[186,26238,26239,26241],{"class":188,"line":288},[186,26240,26169],{"class":206},[186,26242,26137],{"class":206},[186,26244,26245,26248],{"class":188,"line":294},[186,26246,26247],{"class":206},"  --robot.port=\u002Fdev\u002FttyACM1",[186,26249,26137],{"class":206},[186,26251,26252],{"class":188,"line":1212},[186,26253,26254],{"class":206},"  --robot.id=my_awesome_follower_arm\n",[1524,26256,26257],{},"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":181,"searchDepth":49,"depth":49,"links":26259},[26260,26261],{"id":26109,"depth":49,"text":26110},{"id":26182,"depth":49,"text":26183},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26100,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26268,"title":26269,"body":26270,"description":1548,"extension":1549,"meta":26461,"navigation":1551,"path":26462,"seo":26463,"stem":26464,"__hash__":26465},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26271,"toc":26457},[26272,26275,26279,26326,26330,26343,26406,26409,26454],[10,26273,26269],{"id":26274},"_4-遥操与相机接入",[14,26276,26278],{"id":26277},"_41-不带相机遥操","4.1 不带相机遥操",[176,26280,26282],{"className":25281,"code":26281,"language":25283,"meta":181,"style":181},"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",[183,26283,26284,26291,26297,26303,26310,26316,26322],{"__ignoreMap":181},[186,26285,26286,26289],{"class":188,"line":189},[186,26287,26288],{"class":198},"lerobot-teleoperate",[186,26290,26137],{"class":206},[186,26292,26293,26295],{"class":188,"line":49},[186,26294,26169],{"class":206},[186,26296,26137],{"class":206},[186,26298,26299,26301],{"class":188,"line":219},[186,26300,26247],{"class":206},[186,26302,26137],{"class":206},[186,26304,26305,26308],{"class":188,"line":225},[186,26306,26307],{"class":206},"  --robot.id=my_awesome_follower_arm",[186,26309,26137],{"class":206},[186,26311,26312,26314],{"class":188,"line":242},[186,26313,26142],{"class":206},[186,26315,26137],{"class":206},[186,26317,26318,26320],{"class":188,"line":248},[186,26319,26214],{"class":206},[186,26321,26137],{"class":206},[186,26323,26324],{"class":188,"line":265},[186,26325,26221],{"class":206},[14,26327,26329],{"id":26328},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[176,26331,26333],{"className":25281,"code":26332,"language":25283,"meta":181,"style":181},"lerobot-find-cameras opencv\n",[183,26334,26335],{"__ignoreMap":181},[186,26336,26337,26340],{"class":188,"line":189},[186,26338,26339],{"class":198},"lerobot-find-cameras",[186,26341,26342],{"class":532}," opencv\n",[176,26344,26346],{"className":25281,"code":26345,"language":25283,"meta":181,"style":181},"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",[183,26347,26348,26354,26360,26366,26372,26382,26388,26394,26401],{"__ignoreMap":181},[186,26349,26350,26352],{"class":188,"line":189},[186,26351,26288],{"class":198},[186,26353,26137],{"class":206},[186,26355,26356,26358],{"class":188,"line":49},[186,26357,26169],{"class":206},[186,26359,26137],{"class":206},[186,26361,26362,26364],{"class":188,"line":219},[186,26363,26247],{"class":206},[186,26365,26137],{"class":206},[186,26367,26368,26370],{"class":188,"line":225},[186,26369,26307],{"class":206},[186,26371,26137],{"class":206},[186,26373,26374,26377,26380],{"class":188,"line":242},[186,26375,26376],{"class":206},"  --robot.cameras=",[186,26378,26379],{"class":532},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[186,26381,26137],{"class":206},[186,26383,26384,26386],{"class":188,"line":248},[186,26385,26142],{"class":206},[186,26387,26137],{"class":206},[186,26389,26390,26392],{"class":188,"line":265},[186,26391,26214],{"class":206},[186,26393,26137],{"class":206},[186,26395,26396,26399],{"class":188,"line":271},[186,26397,26398],{"class":206},"  --teleop.id=my_awesome_leader_arm",[186,26400,26137],{"class":206},[186,26402,26403],{"class":188,"line":288},[186,26404,26405],{"class":206},"  --display_data=true\n",[169,26407,26408],{},"相机参数说明：",[19,26410,26411,26417,26423,26432,26442,26448],{},[22,26412,26413,26416],{},[183,26414,26415],{},"front","：相机名称。",[22,26418,26419,26422],{},[183,26420,26421],{},"type: opencv","：相机驱动类型。",[22,26424,26425,26428,26429,26021],{},[183,26426,26427],{},"index_or_path","：设备编号或设备路径（如 ",[183,26430,26431],{},"\u002Fdev\u002Fvideo4",[22,26433,26434,26437,26438,26441],{},[183,26435,26436],{},"width"," \u002F ",[183,26439,26440],{},"height","：图像分辨率。",[22,26443,26444,26447],{},[183,26445,26446],{},"fps","：采样帧率。",[22,26449,26450,26453],{},[183,26451,26452],{},"--display_data=true","：启用实时可视化。",[1524,26455,26456],{},"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":181,"searchDepth":49,"depth":49,"links":26458},[26459,26460],{"id":26277,"depth":49,"text":26278},{"id":26328,"depth":49,"text":26329},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26269,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26467,"title":26468,"body":26469,"description":1548,"extension":1549,"meta":26641,"navigation":1551,"path":26642,"seo":26643,"stem":26644,"__hash__":26645},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26470,"toc":26636},[26471,26475,26479,26484,26489,26492,26534,26540,26544,26593,26598,26602,26605,26613,26618,26623,26628,26633],[10,26472,26474],{"id":26473},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26476,26478],{"id":26477},"_51-生成访问令牌","5.1 生成访问令牌",[169,26480,26481],{},[164,26482],{"alt":181,"src":26483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[169,26485,26486],{},[164,26487],{"alt":181,"src":26488},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[169,26490,26491],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[176,26493,26495],{"className":25281,"code":26494,"language":25283,"meta":181,"style":181},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[183,26496,26497,26510],{"__ignoreMap":181},[186,26498,26499,26502,26505,26507],{"class":188,"line":189},[186,26500,26501],{"class":669},"export",[186,26503,26504],{"class":202}," HF_TOKEN",[186,26506,529],{"class":669},[186,26508,26509],{"class":532},"\"your_huggingface_token\"\n",[186,26511,26512,26515,26518,26521,26524,26526,26529,26531],{"class":188,"line":49},[186,26513,26514],{"class":198},"hf",[186,26516,26517],{"class":532}," auth",[186,26519,26520],{"class":532}," login",[186,26522,26523],{"class":206}," --token",[186,26525,11187],{"class":532},[186,26527,26528],{"class":202},"$HF_TOKEN",[186,26530,1862],{"class":532},[186,26532,26533],{"class":206}," --add-to-git-credential\n",[169,26535,26536,26539],{},[183,26537,26538],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26541,26543],{"id":26542},"_52-验证登录","5.2 验证登录",[176,26545,26547],{"className":25281,"code":26546,"language":25283,"meta":181,"style":181},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[183,26548,26549,26580],{"__ignoreMap":181},[186,26550,26551,26554,26556,26559,26561,26563,26566,26569,26572,26575,26578],{"class":188,"line":189},[186,26552,26553],{"class":202},"HF_USER",[186,26555,529],{"class":669},[186,26557,26558],{"class":202},"$(",[186,26560,26514],{"class":198},[186,26562,26517],{"class":532},[186,26564,26565],{"class":532}," whoami",[186,26567,26568],{"class":669}," |",[186,26570,26571],{"class":198}," head",[186,26573,26574],{"class":206}," -n",[186,26576,26577],{"class":206}," 1",[186,26579,1629],{"class":202},[186,26581,26582,26585,26587,26590],{"class":188,"line":49},[186,26583,26584],{"class":206},"echo",[186,26586,11187],{"class":532},[186,26588,26589],{"class":202},"$HF_USER",[186,26591,26592],{"class":532},"\"\n",[169,26594,26595],{},[164,26596],{"alt":181,"src":26597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26599,26601],{"id":26600},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[169,26603,26604],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[19,26606,26607,26610],{},[22,26608,26609],{},"Dataset Repo（用于上传演示数据）",[22,26611,26612],{},"Model Repo（用于上传训练后的 ACT 权重）",[169,26614,26615],{},[164,26616],{"alt":181,"src":26617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[169,26619,26620],{},[164,26621],{"alt":181,"src":26622},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[169,26624,26625],{},[164,26626],{"alt":181,"src":26627},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[169,26629,26630],{},[164,26631],{"alt":181,"src":26632},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1524,26634,26635],{},"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":181,"searchDepth":49,"depth":49,"links":26637},[26638,26639,26640],{"id":26477,"depth":49,"text":26478},{"id":26542,"depth":49,"text":26543},{"id":26600,"depth":49,"text":26601},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26468,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26647,"title":26648,"body":26649,"description":1548,"extension":1549,"meta":26846,"navigation":1551,"path":26847,"seo":26848,"stem":26849,"__hash__":26850},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26650,"toc":26841},[26651,26655,26659,26755,26763,26768,26772,26788,26791,26795,26838],[10,26652,26654],{"id":26653},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26656,26658],{"id":26657},"_61-录制示教数据","6.1 录制示教数据",[176,26660,26662],{"className":25281,"code":26661,"language":25283,"meta":181,"style":181},"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",[183,26663,26664,26671,26677,26683,26689,26698,26704,26710,26716,26723,26733,26740,26750],{"__ignoreMap":181},[186,26665,26666,26669],{"class":188,"line":189},[186,26667,26668],{"class":198},"lerobot-record",[186,26670,26137],{"class":206},[186,26672,26673,26675],{"class":188,"line":49},[186,26674,26169],{"class":206},[186,26676,26137],{"class":206},[186,26678,26679,26681],{"class":188,"line":219},[186,26680,26247],{"class":206},[186,26682,26137],{"class":206},[186,26684,26685,26687],{"class":188,"line":225},[186,26686,26307],{"class":206},[186,26688,26137],{"class":206},[186,26690,26691,26693,26696],{"class":188,"line":242},[186,26692,26376],{"class":206},[186,26694,26695],{"class":532},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[186,26697,26137],{"class":206},[186,26699,26700,26702],{"class":188,"line":248},[186,26701,26142],{"class":206},[186,26703,26137],{"class":206},[186,26705,26706,26708],{"class":188,"line":265},[186,26707,26214],{"class":206},[186,26709,26137],{"class":206},[186,26711,26712,26714],{"class":188,"line":271},[186,26713,26398],{"class":206},[186,26715,26137],{"class":206},[186,26717,26718,26721],{"class":188,"line":288},[186,26719,26720],{"class":206},"  --display_data=true",[186,26722,26137],{"class":206},[186,26724,26725,26728,26731],{"class":188,"line":294},[186,26726,26727],{"class":206},"  --dataset.repo_id=",[186,26729,26730],{"class":532},"\"Embodied-AI-6\u002Fso101_test\"",[186,26732,26137],{"class":206},[186,26734,26735,26738],{"class":188,"line":1212},[186,26736,26737],{"class":206},"  --dataset.num_episodes=10",[186,26739,26137],{"class":206},[186,26741,26742,26745,26748],{"class":188,"line":1223},[186,26743,26744],{"class":206},"  --dataset.single_task=",[186,26746,26747],{"class":532},"\"Grab the green cube\"",[186,26749,26137],{"class":206},[186,26751,26752],{"class":188,"line":1236},[186,26753,26754],{"class":206},"  --resume=true\n",[19,26756,26757],{},[22,26758,26759,26762],{},[183,26760,26761],{},"--resume=true","：已有同一数据集时继续追加 episode。",[169,26764,26765],{},[164,26766],{"alt":181,"src":26767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26769,26771],{"id":26770},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[176,26773,26775],{"className":25281,"code":26774,"language":25283,"meta":181,"style":181},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[183,26776,26777],{"__ignoreMap":181},[186,26778,26779,26782,26785],{"class":188,"line":189},[186,26780,26781],{"class":198},"rm",[186,26783,26784],{"class":206}," -rf",[186,26786,26787],{"class":532}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[169,26789,26790],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26792,26794],{"id":26793},"_63-回放指定-episode","6.3 回放指定 episode",[176,26796,26798],{"className":25281,"code":26797,"language":25283,"meta":181,"style":181},"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",[183,26799,26800,26807,26813,26819,26825,26833],{"__ignoreMap":181},[186,26801,26802,26805],{"class":188,"line":189},[186,26803,26804],{"class":198},"lerobot-replay",[186,26806,26137],{"class":206},[186,26808,26809,26811],{"class":188,"line":49},[186,26810,26169],{"class":206},[186,26812,26137],{"class":206},[186,26814,26815,26817],{"class":188,"line":219},[186,26816,26247],{"class":206},[186,26818,26137],{"class":206},[186,26820,26821,26823],{"class":188,"line":225},[186,26822,26307],{"class":206},[186,26824,26137],{"class":206},[186,26826,26827,26829,26831],{"class":188,"line":242},[186,26828,26727],{"class":206},[186,26830,26730],{"class":532},[186,26832,26137],{"class":206},[186,26834,26835],{"class":188,"line":248},[186,26836,26837],{"class":206},"  --dataset.episode=0\n",[1524,26839,26840],{},"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":181,"searchDepth":49,"depth":49,"links":26842},[26843,26844,26845],{"id":26657,"depth":49,"text":26658},{"id":26770,"depth":49,"text":26771},{"id":26793,"depth":49,"text":26794},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26648,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26852,"title":26853,"body":26854,"description":1548,"extension":1549,"meta":26982,"navigation":1551,"path":26983,"seo":26984,"stem":26985,"__hash__":26986},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26855,"toc":26980},[26856,26860,26923,26926,26973,26978],[10,26857,26859],{"id":26858},"_7-act-模型训练","7. ACT 模型训练",[176,26861,26863],{"className":25281,"code":26862,"language":25283,"meta":181,"style":181},"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",[183,26864,26865,26872,26880,26887,26894,26901,26908,26915],{"__ignoreMap":181},[186,26866,26867,26870],{"class":188,"line":189},[186,26868,26869],{"class":198},"lerobot-train",[186,26871,26137],{"class":206},[186,26873,26874,26876,26878],{"class":188,"line":49},[186,26875,26727],{"class":206},[186,26877,26730],{"class":532},[186,26879,26137],{"class":206},[186,26881,26882,26885],{"class":188,"line":219},[186,26883,26884],{"class":206},"  --policy.type=act",[186,26886,26137],{"class":206},[186,26888,26889,26892],{"class":188,"line":225},[186,26890,26891],{"class":206},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[186,26893,26137],{"class":206},[186,26895,26896,26899],{"class":188,"line":242},[186,26897,26898],{"class":206},"  --job_name=act_so101_test",[186,26900,26137],{"class":206},[186,26902,26903,26906],{"class":188,"line":248},[186,26904,26905],{"class":206},"  --policy.device=cuda",[186,26907,26137],{"class":206},[186,26909,26910,26913],{"class":188,"line":265},[186,26911,26912],{"class":206},"  --wandb.enable=false",[186,26914,26137],{"class":206},[186,26916,26917,26920],{"class":188,"line":271},[186,26918,26919],{"class":206},"  --policy.repo_id=",[186,26921,26922],{"class":532},"\"Embodied-AI-6\u002Flerobot_new\"\n",[169,26924,26925],{},"参数说明：",[19,26927,26928,26934,26940,26946,26952,26961,26967],{},[22,26929,26930,26933],{},[183,26931,26932],{},"--dataset.repo_id","：训练数据集仓库。",[22,26935,26936,26939],{},[183,26937,26938],{},"--policy.type=act","：策略模型类型为 ACT。",[22,26941,26942,26945],{},[183,26943,26944],{},"--output_dir","：本地训练输出目录。",[22,26947,26948,26951],{},[183,26949,26950],{},"--job_name","：训练任务名称。",[22,26953,26954,26957,26958,26021],{},[183,26955,26956],{},"--policy.device","：训练设备（如 ",[183,26959,26960],{},"cuda",[22,26962,26963,26966],{},[183,26964,26965],{},"--wandb.enable","：是否启用 WandB 可视化。",[22,26968,26969,26972],{},[183,26970,26971],{},"--policy.repo_id","：训练后模型推送目标仓库。",[169,26974,26975],{},[164,26976],{"alt":181,"src":26977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1524,26979,26840],{},{"title":181,"searchDepth":49,"depth":49,"links":26981},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26853,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26988,"title":26989,"body":26990,"description":1548,"extension":1549,"meta":27077,"navigation":1551,"path":27078,"seo":27079,"stem":27080,"__hash__":27081},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26991,"toc":27075},[26992,26995,26998,27065,27073],[10,26993,26989],{"id":26994},"_8-策略部署与自动采集",[169,26996,26997],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[176,26999,27001],{"className":25281,"code":27000,"language":25283,"meta":181,"style":181},"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",[183,27002,27003,27009,27015,27021,27029,27035,27042,27050,27058],{"__ignoreMap":181},[186,27004,27005,27007],{"class":188,"line":189},[186,27006,26668],{"class":198},[186,27008,26137],{"class":206},[186,27010,27011,27013],{"class":188,"line":49},[186,27012,26169],{"class":206},[186,27014,26137],{"class":206},[186,27016,27017,27019],{"class":188,"line":219},[186,27018,26247],{"class":206},[186,27020,26137],{"class":206},[186,27022,27023,27025,27027],{"class":188,"line":225},[186,27024,26376],{"class":206},[186,27026,26695],{"class":532},[186,27028,26137],{"class":206},[186,27030,27031,27033],{"class":188,"line":242},[186,27032,26307],{"class":206},[186,27034,26137],{"class":206},[186,27036,27037,27040],{"class":188,"line":248},[186,27038,27039],{"class":206},"  --display_data=false",[186,27041,26137],{"class":206},[186,27043,27044,27046,27048],{"class":188,"line":265},[186,27045,26727],{"class":206},[186,27047,26730],{"class":532},[186,27049,26137],{"class":206},[186,27051,27052,27054,27056],{"class":188,"line":271},[186,27053,26744],{"class":206},[186,27055,26747],{"class":532},[186,27057,26137],{"class":206},[186,27059,27060,27063],{"class":188,"line":288},[186,27061,27062],{"class":206},"  --policy.path=",[186,27064,26922],{"class":532},[19,27066,27067],{},[22,27068,27069,27072],{},[183,27070,27071],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1524,27074,26840],{},{"title":181,"searchDepth":49,"depth":49,"links":27076},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26989,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27083,"title":27084,"body":27085,"description":1548,"extension":1549,"meta":27114,"navigation":1551,"path":27115,"seo":27116,"stem":27117,"__hash__":27118},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27086,"toc":27112},[27087,27091,27094,27100,27103,27109],[10,27088,27090],{"id":27089},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[169,27092,27093],{},"项目地址：",[169,27095,27096],{},[948,27097,27098],{"href":27098,"rel":27099},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[952],[169,27101,27102],{},"参考教程：",[169,27104,27105],{},[948,27106,27107],{"href":27107,"rel":27108},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[952],[169,27110,27111],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":181,"searchDepth":49,"depth":49,"links":27113},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27084,"description":1548},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27120,"title":27121,"body":27122,"description":27126,"extension":1549,"meta":27127,"navigation":1551,"path":27128,"seo":27129,"stem":27130,"__hash__":27131},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27123,"toc":27124},[],{"title":181,"searchDepth":49,"depth":49,"links":27125},[],"act复现",{"category":24839},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27121,"description":27126},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27133,"title":27134,"body":27135,"description":181,"extension":1549,"meta":27435,"navigation":1551,"path":27436,"seo":27437,"stem":27438,"__hash__":27439},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27136,"toc":27427},[27137,27140,27144,27154,27161,27168,27171,27178,27181,27184,27188,27199,27203,27249,27252,27255,27258,27261,27264,27268,27306,27312,27316,27369,27374,27377,27380,27385,27388,27393,27396,27399,27403,27406,27409,27413],[10,27138,27134],{"id":27139},"_1简介",[29,27141,27143],{"id":27142},"_11什么是-docker","1.1什么是 Docker？",[169,27145,27146,27147,27150,27151],{},"Docker 是一个开源的 ",[54,27148,27149],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[54,27152,27153],{},"一次构建，到处运行。",[169,27155,27156,27157,27160],{},"“ ",[54,27158,27159],{},"一次构建，到处运行"," ”也就是说：",[34,27162,27163],{},[22,27164,27165],{},[54,27166,27167],{},"之前：",[169,27169,27170],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[34,27172,27173],{},[22,27174,27175],{},[54,27176,27177],{},"使用docker后：",[169,27179,27180],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[169,27182,27183],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[29,27185,27187],{"id":27186},"_12它是怎么工作的","1.2.它是怎么工作的？",[19,27189,27190,27193],{},[22,27191,27192],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[22,27194,27195,27196,903],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[54,27197,27198],{},"无论在哪运行都一样稳定",[29,27200,27202],{"id":27201},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[99,27204,27205,27215],{},[102,27206,27207],{},[105,27208,27209,27212],{},[108,27210,27211],{"align":110},"概念",[108,27213,27214],{"align":110},"解释",[116,27216,27217,27225,27233,27241],{},[105,27218,27219,27222],{},[121,27220,27221],{"align":110},"镜像",[121,27223,27224],{"align":110},"Image，运行容器的模板，像是一个应用快照",[105,27226,27227,27230],{},[121,27228,27229],{"align":110},"容器",[121,27231,27232],{"align":110},"Container，运行中的镜像实例，有自己的文件系统、网络等",[105,27234,27235,27238],{},[121,27236,27237],{"align":110},"Dockerfile",[121,27239,27240],{"align":110},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[105,27242,27243,27246],{},[121,27244,27245],{"align":110},"仓库",[121,27247,27248],{"align":110},"Registry，存放镜像的地方，比如 Docker Hub",[169,27250,27251],{},"抽象化理解:",[169,27253,27254],{},"Docker镜像≈C++类",[169,27256,27257],{},"Docker容器≈C++类实例(即对象)",[169,27259,27260],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[169,27262,27263],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[29,27265,27267],{"id":27266},"_14类比理解","1.4.类比理解",[99,27269,27270,27280],{},[102,27271,27272],{},[105,27273,27274,27277],{},[108,27275,27276],{"align":110},"传统部署",[108,27278,27279],{"align":110},"Docker部署",[116,27281,27282,27290,27298],{},[105,27283,27284,27287],{},[121,27285,27286],{"align":110},"手动安装依赖、调试版本不一致问题",[121,27288,27289],{"align":110},"一次打包环境和代码",[105,27291,27292,27295],{},[121,27293,27294],{"align":110},"程序“裸奔”跑在系统上",[121,27296,27297],{"align":110},"程序“穿着容器”隔离运行",[105,27299,27300,27303],{},[121,27301,27302],{"align":110},"容易“在我电脑上能跑”",[121,27304,27305],{"align":110},"保证“无论在哪都能跑”",[169,27307,27308,27309],{},"就像快递包裹： ",[54,27310,27311],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[29,27313,27315],{"id":27314},"_15docker-的核心优势","1.5.Docker 的核心优势",[99,27317,27318,27328],{},[102,27319,27320],{},[105,27321,27322,27325],{},[108,27323,27324],{"align":110},"优势",[108,27326,27327],{"align":110},"说明",[116,27329,27330,27337,27345,27353,27361],{},[105,27331,27332,27334],{},[121,27333,924],{"align":110},[121,27335,27336],{"align":110},"基于系统内核共享，启动速度快，占资源少",[105,27338,27339,27342],{},[121,27340,27341],{"align":110},"跨平台",[121,27343,27344],{"align":110},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[105,27346,27347,27350],{},[121,27348,27349],{"align":110},"易于迁移部署",[121,27351,27352],{"align":110},"应用和环境一起封装，不怕依赖不一致",[105,27354,27355,27358],{},[121,27356,27357],{"align":110},"易于版本控制",[121,27359,27360],{"align":110},"镜像版本可控，支持回滚",[105,27362,27363,27366],{},[121,27364,27365],{"align":110},"生态丰富",[121,27367,27368],{"align":110},"Docker Hub 上有成千上万的现成镜像可用",[34,27370,27371],{},[22,27372,27373],{},"在Linux上可以几乎实现无性能损失。",[169,27375,27376],{},"docker里的发行版和本机共用Linux内核。",[169,27378,27379],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[34,27381,27382],{},[22,27383,27384],{},"可以快速部署在绝大多数Linux发行版",[169,27386,27387],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[34,27389,27390],{},[22,27391,27392],{},"配置环境简单",[169,27394,27395],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[169,27397,27398],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[34,27400,27401],{},[22,27402,27365],{},[169,27404,27405],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[169,27407,27408],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[29,27410,27412],{"id":27411},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[19,27414,27415,27418,27421,27424],{},[22,27416,27417],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[22,27419,27420],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[22,27422,27423],{},"微服务架构：每个服务一个容器，灵活组合",[22,27425,27426],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":181,"searchDepth":49,"depth":49,"links":27428},[27429,27430,27431,27432,27433,27434],{"id":27142,"depth":219,"text":27143},{"id":27186,"depth":219,"text":27187},{"id":27201,"depth":219,"text":27202},{"id":27266,"depth":219,"text":27267},{"id":27314,"depth":219,"text":27315},{"id":27411,"depth":219,"text":27412},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27134,"description":181},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27441,"title":27442,"body":27443,"description":181,"extension":1549,"meta":28176,"navigation":1551,"path":28177,"seo":28178,"stem":28179,"__hash__":28180},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27444,"toc":28171},[27445,27448,27452,27455,27458,27464,27470,27474,27483,27486,27543,27546,27597,27600,27683,27686,27723,27727,27738,27751,27758,27761,27841,27844,27894,27897,27920,27924,27931,27934,27950,27956,27959,27975,27981,27984,28000,28014,28020,28040,28046,28049,28061,28067,28070,28084,28090,28093,28113,28118,28121,28124,28128,28131,28134,28137,28144,28147,28150,28153,28158,28163,28168],[10,27446,27442],{"id":27447},"_2安装docker",[29,27449,27451],{"id":27450},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[169,27453,27454],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[169,27456,27457],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[169,27459,27460],{},[948,27461,27462],{"href":27462,"rel":27463},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[952],[169,27465,27466],{},[948,27467,27468],{"href":27468,"rel":27469},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[952],[23459,27471,27473],{"id":27472},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[169,27475,27476,27477,27482],{},"以下内容根据 ",[948,27478,27481],{"href":27479,"rel":27480},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[952],"官方文档"," 修改而来。",[169,27484,27485],{},"如果你过去安装过 docker，先删掉：",[176,27487,27489],{"className":25281,"code":27488,"language":25283,"meta":181,"style":181},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[183,27490,27491],{"__ignoreMap":181},[186,27492,27493,27495,27498,27501,27504,27507,27510,27513,27516,27519,27522,27525,27528,27531,27534,27537,27540],{"class":188,"line":189},[186,27494,4491],{"class":669},[186,27496,27497],{"class":202}," pkg ",[186,27499,27500],{"class":669},"in",[186,27502,27503],{"class":532}," docker.io",[186,27505,27506],{"class":532}," docker-doc",[186,27508,27509],{"class":532}," docker-compose",[186,27511,27512],{"class":532}," docker-compose-v2",[186,27514,27515],{"class":532}," podman-docker",[186,27517,27518],{"class":532}," containerd",[186,27520,27521],{"class":532}," runc",[186,27523,27524],{"class":202},"; ",[186,27526,27527],{"class":669},"do",[186,27529,27530],{"class":198}," sudo",[186,27532,27533],{"class":532}," apt-get",[186,27535,27536],{"class":532}," remove",[186,27538,27539],{"class":202}," $pkg; ",[186,27541,27542],{"class":669},"done\n",[169,27544,27545],{},"首先安装依赖和GPG：",[176,27547,27551],{"className":27548,"code":27549,"language":27550,"meta":181,"style":181},"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",[183,27552,27553,27558,27563,27568,27573,27578,27583,27587,27592],{"__ignoreMap":181},[186,27554,27555],{"class":188,"line":189},[186,27556,27557],{},"# Add Docker's official GPG key:\n",[186,27559,27560],{"class":188,"line":49},[186,27561,27562],{},"sudo apt-get update\n",[186,27564,27565],{"class":188,"line":219},[186,27566,27567],{},"sudo apt-get install ca-certificates curl\n",[186,27569,27570],{"class":188,"line":225},[186,27571,27572],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[186,27574,27575],{"class":188,"line":242},[186,27576,27577],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[186,27579,27580],{"class":188,"line":248},[186,27581,27582],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[186,27584,27585],{"class":188,"line":265},[186,27586,3867],{"emptyLinePlaceholder":1551},[186,27588,27589],{"class":188,"line":271},[186,27590,27591],{},"# 如果上面这行报错就弄下面这行\n",[186,27593,27594],{"class":188,"line":288},[186,27595,27596],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[169,27598,27599],{},"信任 Docker 的 GPG 公钥并添加仓库：",[176,27601,27603],{"className":25281,"code":27602,"language":25283,"meta":181,"style":181},"# 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",[183,27604,27605,27610,27616,27633,27666],{"__ignoreMap":181},[186,27606,27607],{"class":188,"line":189},[186,27608,27609],{"class":192},"# Add the repository to Apt sources:\n",[186,27611,27612,27614],{"class":188,"line":49},[186,27613,26584],{"class":206},[186,27615,26137],{"class":206},[186,27617,27618,27621,27624,27627,27630],{"class":188,"line":219},[186,27619,27620],{"class":532},"  \"deb [arch=$(",[186,27622,27623],{"class":198},"dpkg",[186,27625,27626],{"class":206}," --print-architecture",[186,27628,27629],{"class":532},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[186,27631,27632],{"class":206},"\\\n",[186,27634,27635,27638,27640,27642,27645,27648,27650,27652,27655,27657,27659,27662,27664],{"class":188,"line":225},[186,27636,27637],{"class":532},"  \"",[186,27639,26558],{"class":202},[186,27641,2168],{"class":206},[186,27643,27644],{"class":532}," \u002Fetc\u002Fos-release",[186,27646,27647],{"class":202}," && ",[186,27649,26584],{"class":206},[186,27651,11187],{"class":532},[186,27653,27654],{"class":202},"$VERSION_CODENAME",[186,27656,1862],{"class":532},[186,27658,2039],{"class":202},[186,27660,27661],{"class":532},"\" stable\"",[186,27663,26568],{"class":669},[186,27665,26137],{"class":206},[186,27667,27668,27671,27674,27677,27680],{"class":188,"line":242},[186,27669,27670],{"class":198},"  sudo",[186,27672,27673],{"class":532}," tee",[186,27675,27676],{"class":532}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[186,27678,27679],{"class":669}," >",[186,27681,27682],{"class":532}," \u002Fdev\u002Fnull\n",[169,27684,27685],{},"最后安装",[176,27687,27689],{"className":25281,"code":27688,"language":25283,"meta":181,"style":181},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[183,27690,27691,27700],{"__ignoreMap":181},[186,27692,27693,27695,27697],{"class":188,"line":189},[186,27694,26035],{"class":198},[186,27696,27533],{"class":532},[186,27698,27699],{"class":532}," update\n",[186,27701,27702,27704,27706,27708,27711,27714,27717,27720],{"class":188,"line":49},[186,27703,26035],{"class":198},[186,27705,27533],{"class":532},[186,27707,25293],{"class":532},[186,27709,27710],{"class":532}," docker-ce",[186,27712,27713],{"class":532}," docker-ce-cli",[186,27715,27716],{"class":532}," containerd.io",[186,27718,27719],{"class":532}," docker-buildx-plugin",[186,27721,27722],{"class":532}," docker-compose-plugin\n",[23459,27724,27726],{"id":27725},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[169,27728,27729,27730,27733,27734,27737],{},"查看自己自己包管理工具版本（dnf是 ",[54,27731,27732],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[54,27735,27736],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[176,27739,27741],{"className":25281,"code":27740,"language":25283,"meta":181,"style":181},"dnf --version\n",[183,27742,27743],{"__ignoreMap":181},[186,27744,27745,27748],{"class":188,"line":189},[186,27746,27747],{"class":198},"dnf",[186,27749,27750],{"class":206}," --version\n",[169,27752,27476,27753,27757],{},[948,27754,27481],{"href":27755,"rel":27756},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[952]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[169,27759,27760],{},"如果你之前安装过 docker，请先删掉",[176,27762,27764],{"className":25281,"code":27763,"language":25283,"meta":181,"style":181},"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",[183,27765,27766,27780,27787,27794,27801,27808,27815,27822,27829,27836],{"__ignoreMap":181},[186,27767,27768,27770,27773,27775,27778],{"class":188,"line":189},[186,27769,26035],{"class":198},[186,27771,27772],{"class":532}," dnf",[186,27774,27536],{"class":532},[186,27776,27777],{"class":532}," docker",[186,27779,26137],{"class":206},[186,27781,27782,27785],{"class":188,"line":49},[186,27783,27784],{"class":532},"                  docker-client",[186,27786,26137],{"class":206},[186,27788,27789,27792],{"class":188,"line":219},[186,27790,27791],{"class":532},"                  docker-client-latest",[186,27793,26137],{"class":206},[186,27795,27796,27799],{"class":188,"line":225},[186,27797,27798],{"class":532},"                  docker-common",[186,27800,26137],{"class":206},[186,27802,27803,27806],{"class":188,"line":242},[186,27804,27805],{"class":532},"                  docker-latest",[186,27807,26137],{"class":206},[186,27809,27810,27813],{"class":188,"line":248},[186,27811,27812],{"class":532},"                  docker-latest-logrotate",[186,27814,26137],{"class":206},[186,27816,27817,27820],{"class":188,"line":265},[186,27818,27819],{"class":532},"                  docker-logrotate",[186,27821,26137],{"class":206},[186,27823,27824,27827],{"class":188,"line":271},[186,27825,27826],{"class":532},"                  docker-selinux",[186,27828,26137],{"class":206},[186,27830,27831,27834],{"class":188,"line":288},[186,27832,27833],{"class":532},"                  docker-engine-selinux",[186,27835,26137],{"class":206},[186,27837,27838],{"class":188,"line":294},[186,27839,27840],{"class":532},"                  docker-engine\n",[169,27842,27843],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[176,27845,27847],{"className":25281,"code":27846,"language":25283,"meta":181,"style":181},"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",[183,27848,27849,27863,27878],{"__ignoreMap":181},[186,27850,27851,27853,27855,27858,27860],{"class":188,"line":189},[186,27852,26035],{"class":198},[186,27854,27772],{"class":532},[186,27856,27857],{"class":206}," -y",[186,27859,25293],{"class":532},[186,27861,27862],{"class":532}," dnf-plugins-core\n",[186,27864,27865,27867,27869,27872,27875],{"class":188,"line":49},[186,27866,26035],{"class":198},[186,27868,27772],{"class":532},[186,27870,27871],{"class":532}," config-manager",[186,27873,27874],{"class":532}," addrepo",[186,27876,27877],{"class":206}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[186,27879,27880,27882,27885,27888,27891],{"class":188,"line":219},[186,27881,26035],{"class":198},[186,27883,27884],{"class":532}," sed",[186,27886,27887],{"class":206}," -i",[186,27889,27890],{"class":532}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[186,27892,27893],{"class":532}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[169,27895,27896],{},"最后安装：",[176,27898,27900],{"className":25281,"code":27899,"language":25283,"meta":181,"style":181},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[183,27901,27902],{"__ignoreMap":181},[186,27903,27904,27906,27908,27910,27912,27914,27916,27918],{"class":188,"line":189},[186,27905,26035],{"class":198},[186,27907,27772],{"class":532},[186,27909,25293],{"class":532},[186,27911,27710],{"class":532},[186,27913,27713],{"class":532},[186,27915,27716],{"class":532},[186,27917,27719],{"class":532},[186,27919,27722],{"class":532},[29,27921,27923],{"id":27922},"_22配置环境","2.2.配置环境",[23459,27925,27927,27930],{"id":27926},"_221检查-docker-服务状态",[54,27928,27929],{},"2.2.1.检查 Docker 服务状态"," ：",[169,27932,27933],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[176,27935,27937],{"className":25281,"code":27936,"language":25283,"meta":181,"style":181},"systemctl status docker\n",[183,27938,27939],{"__ignoreMap":181},[186,27940,27941,27944,27947],{"class":188,"line":189},[186,27942,27943],{"class":198},"systemctl",[186,27945,27946],{"class":532}," status",[186,27948,27949],{"class":532}," docker\n",[23459,27951,27953,27930],{"id":27952},"_222启动-docker-服务",[54,27954,27955],{},"2.2.2.启动 Docker 服务",[169,27957,27958],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[176,27960,27962],{"className":25281,"code":27961,"language":25283,"meta":181,"style":181},"sudo systemctl start docker\n",[183,27963,27964],{"__ignoreMap":181},[186,27965,27966,27968,27971,27973],{"class":188,"line":189},[186,27967,26035],{"class":198},[186,27969,27970],{"class":532}," systemctl",[186,27972,5650],{"class":532},[186,27974,27949],{"class":532},[23459,27976,27978,27930],{"id":27977},"_223设置-docker-开机自启",[54,27979,27980],{},"2.2.3.设置 Docker 开机自启",[169,27982,27983],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[176,27985,27987],{"className":25281,"code":27986,"language":25283,"meta":181,"style":181},"sudo systemctl enable docker\n",[183,27988,27989],{"__ignoreMap":181},[186,27990,27991,27993,27995,27998],{"class":188,"line":189},[186,27992,26035],{"class":198},[186,27994,27970],{"class":532},[186,27996,27997],{"class":532}," enable",[186,27999,27949],{"class":532},[23459,28001,28003,15257,28006,15257,28011,27930],{"id":28002},"_224将用户添加到-docker-组",[54,28004,28005],{},"2.2.4.将用户添加到",[54,28007,28008],{},[183,28009,28010],{},"docker",[54,28012,28013],{},"组",[169,28015,28016,28017,28019],{},"使用以下命令将当前用户添加到 ",[183,28018,28010],{}," 组：",[176,28021,28023],{"className":25281,"code":28022,"language":25283,"meta":181,"style":181},"sudo usermod -aG docker $USER\n",[183,28024,28025],{"__ignoreMap":181},[186,28026,28027,28029,28032,28035,28037],{"class":188,"line":189},[186,28028,26035],{"class":198},[186,28030,28031],{"class":532}," usermod",[186,28033,28034],{"class":206}," -aG",[186,28036,27777],{"class":532},[186,28038,28039],{"class":202}," $USER\n",[23459,28041,28043,27930],{"id":28042},"_225退出并重新登录",[54,28044,28045],{},"2.2.5.退出并重新登录",[169,28047,28048],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[176,28050,28052],{"className":25281,"code":28051,"language":25283,"meta":181,"style":181},"newgrp docker\n",[183,28053,28054],{"__ignoreMap":181},[186,28055,28056,28059],{"class":188,"line":189},[186,28057,28058],{"class":198},"newgrp",[186,28060,27949],{"class":532},[23459,28062,28064,27930],{"id":28063},"_226重新启动-docker-服务如果需要",[54,28065,28066],{},"2.2.6.重新启动 Docker 服务（如果需要）",[169,28068,28069],{},"确保 Docker 服务正在运行，可以使用以下命令：",[176,28071,28072],{"className":25281,"code":27961,"language":25283,"meta":181,"style":181},[183,28073,28074],{"__ignoreMap":181},[186,28075,28076,28078,28080,28082],{"class":188,"line":189},[186,28077,26035],{"class":198},[186,28079,27970],{"class":532},[186,28081,5650],{"class":532},[186,28083,27949],{"class":532},[23459,28085,28087,27930],{"id":28086},"_227重启电脑后检查-docker-服务状态",[54,28088,28089],{},"2.2.7.重启电脑后检查 Docker 服务状态",[169,28091,28092],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[176,28094,28096],{"className":25281,"code":28095,"language":25283,"meta":181,"style":181},"sudo reboot\nsystemctl status docker\n",[183,28097,28098,28105],{"__ignoreMap":181},[186,28099,28100,28102],{"class":188,"line":189},[186,28101,26035],{"class":198},[186,28103,28104],{"class":532}," reboot\n",[186,28106,28107,28109,28111],{"class":188,"line":49},[186,28108,27943],{"class":198},[186,28110,27946],{"class":532},[186,28112,27949],{"class":532},[169,28114,28115],{},[164,28116],{"alt":181,"src":28117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[169,28119,28120],{},"第三行显示enabled说明开机自启动成功",[169,28122,28123],{},"按q退出",[29,28125,28127],{"id":28126},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[169,28129,28130],{},"优先使用linux来使用docker是比较好的",[169,28132,28133],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[169,28135,28136],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[169,28138,28139,28140],{},"官方下载安装:",[948,28141,28142],{"href":28142,"rel":28143},"https:\u002F\u002Fwww.docker.com\u002F",[952],[169,28145,28146],{},"Windows的Docker显卡直通与USB直通:",[169,28148,28149],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[169,28151,28152],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[169,28154,28155],{},[164,28156],{"alt":181,"src":28157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[169,28159,28160],{},[164,28161],{"alt":181,"src":28162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[169,28164,28165],{},[164,28166],{"alt":181,"src":28167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1524,28169,28170],{},"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":181,"searchDepth":49,"depth":49,"links":28172},[28173,28174,28175],{"id":27450,"depth":219,"text":27451},{"id":27922,"depth":219,"text":27923},{"id":28126,"depth":219,"text":28127},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27442,"description":181},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28182,"title":28183,"body":28184,"description":28191,"extension":1549,"meta":28884,"navigation":1551,"path":28885,"seo":28886,"stem":28887,"__hash__":28888},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28185,"toc":28878},[28186,28189,28192,28196,28201,28206,28209,28237,28242,28251,28254,28259,28263,28270,28275,28281,28285,28288,28292,28297,28389,28394,28412,28417,28438,28443,28459,28463,28468,28497,28502,28548,28553,28597,28605,28622,28627,28643,28648,28662,28665,28668,28671,28674,28703,28706,28711,28715,28718,28721,28727,28730,28733,28736,28798,28805,28810,28813,28831,28835,28838,28855,28858,28861,28875],[10,28187,28183],{"id":28188},"_3docker直通",[169,28190,28191],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[29,28193,28195],{"id":28194},"_31usb直通","3.1.USB直通",[169,28197,28198],{},[164,28199],{"alt":181,"src":28200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[34,28202,28203],{},[22,28204,28205],{},"方法一(不是很推荐新手)：",[169,28207,28208],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[176,28210,28212],{"className":25281,"code":28211,"language":25283,"meta":181,"style":181},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[183,28213,28214,28222,28227],{"__ignoreMap":181},[186,28215,28216,28219],{"class":188,"line":189},[186,28217,28218],{"class":198},"ls",[186,28220,28221],{"class":532}," \u002Fdev\n",[186,28223,28224],{"class":188,"line":49},[186,28225,28226],{"class":192},"#例如\n",[186,28228,28229,28232,28234],{"class":188,"line":219},[186,28230,28231],{"class":202},"--device",[186,28233,529],{"class":669},[186,28235,28236],{"class":532},"\u002Fdev\u002Ftty_USB0\n",[34,28238,28239],{"start":49},[22,28240,28241],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[176,28243,28245],{"className":25281,"code":28244,"language":25283,"meta":181,"style":181},"--privileged\n",[183,28246,28247],{"__ignoreMap":181},[186,28248,28249],{"class":188,"line":189},[186,28250,28244],{"class":198},[169,28252,28253],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[169,28255,28256],{},[164,28257],{"alt":181,"src":28258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[29,28260,28262],{"id":28261},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[169,28264,28265,28266,28269],{},"NVIDIA Container Toolkit使用户 ",[54,28267,28268],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[169,28271,28272],{},[164,28273],{"alt":181,"src":28274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[169,28276,28277],{},[948,28278,28279],{"href":28279,"rel":28280},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[952],[23459,28282,28284],{"id":28283},"_321安装","3.2.1.安装",[169,28286,28287],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24371,28289,28291],{"id":28290},"_3211ubuntu","3.2.1.1.Ubuntu",[34,28293,28294],{},[22,28295,28296],{},"配置存储库 并更新",[176,28298,28300],{"className":25281,"code":28299,"language":25283,"meta":181,"style":181},"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",[183,28301,28302,28331,28351,28363,28375,28381],{"__ignoreMap":181},[186,28303,28304,28307,28310,28313,28315,28317,28320,28323,28326,28329],{"class":188,"line":189},[186,28305,28306],{"class":198},"curl",[186,28308,28309],{"class":206}," -fsSL",[186,28311,28312],{"class":532}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[186,28314,26568],{"class":669},[186,28316,27530],{"class":198},[186,28318,28319],{"class":532}," gpg",[186,28321,28322],{"class":206}," --dearmor",[186,28324,28325],{"class":206}," -o",[186,28327,28328],{"class":532}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[186,28330,26137],{"class":206},[186,28332,28333,28336,28338,28341,28344,28347,28349],{"class":188,"line":49},[186,28334,28335],{"class":202},"  && ",[186,28337,28306],{"class":198},[186,28339,28340],{"class":206}," -s",[186,28342,28343],{"class":206}," -L",[186,28345,28346],{"class":532}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[186,28348,26568],{"class":669},[186,28350,26137],{"class":206},[186,28352,28353,28356,28359,28361],{"class":188,"line":219},[186,28354,28355],{"class":198},"    sed",[186,28357,28358],{"class":532}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[186,28360,26568],{"class":669},[186,28362,26137],{"class":206},[186,28364,28365,28368,28370,28373],{"class":188,"line":225},[186,28366,28367],{"class":198},"    sudo",[186,28369,27673],{"class":532},[186,28371,28372],{"class":532}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[186,28374,26137],{"class":206},[186,28376,28377,28379],{"class":188,"line":242},[186,28378,28335],{"class":202},[186,28380,27632],{"class":206},[186,28382,28383,28385,28387],{"class":188,"line":248},[186,28384,28367],{"class":198},[186,28386,27533],{"class":532},[186,28388,27699],{"class":532},[34,28390,28391],{"start":49},[22,28392,28393],{},"安装nvidia-docker2",[176,28395,28397],{"className":25281,"code":28396,"language":25283,"meta":181,"style":181},"sudo apt-get install -y nvidia-docker2\n",[183,28398,28399],{"__ignoreMap":181},[186,28400,28401,28403,28405,28407,28409],{"class":188,"line":189},[186,28402,26035],{"class":198},[186,28404,27533],{"class":532},[186,28406,25293],{"class":532},[186,28408,27857],{"class":206},[186,28410,28411],{"class":532}," nvidia-docker2\n",[34,28413,28414],{"start":219},[22,28415,28416],{},"使用nvidia-ctk命令配置container runtime",[176,28418,28420],{"className":25281,"code":28419,"language":25283,"meta":181,"style":181},"sudo nvidia-ctk runtime configure --runtime=docker\n",[183,28421,28422],{"__ignoreMap":181},[186,28423,28424,28426,28429,28432,28435],{"class":188,"line":189},[186,28425,26035],{"class":198},[186,28427,28428],{"class":532}," nvidia-ctk",[186,28430,28431],{"class":532}," runtime",[186,28433,28434],{"class":532}," configure",[186,28436,28437],{"class":206}," --runtime=docker\n",[34,28439,28440],{"start":225},[22,28441,28442],{},"重启docker服务:",[176,28444,28446],{"className":25281,"code":28445,"language":25283,"meta":181,"style":181},"sudo systemctl restart docker\n",[183,28447,28448],{"__ignoreMap":181},[186,28449,28450,28452,28454,28457],{"class":188,"line":189},[186,28451,26035],{"class":198},[186,28453,27970],{"class":532},[186,28455,28456],{"class":532}," restart",[186,28458,27949],{"class":532},[24371,28460,28462],{"id":28461},"_3212fedora","3.2.1.2.Fedora",[34,28464,28465],{},[22,28466,28467],{},"配置存储库",[176,28469,28471],{"className":25281,"code":28470,"language":25283,"meta":181,"style":181},"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",[183,28472,28473,28488],{"__ignoreMap":181},[186,28474,28475,28477,28479,28481,28484,28486],{"class":188,"line":189},[186,28476,28306],{"class":198},[186,28478,28340],{"class":206},[186,28480,28343],{"class":206},[186,28482,28483],{"class":532}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[186,28485,26568],{"class":669},[186,28487,26137],{"class":206},[186,28489,28490,28492,28494],{"class":188,"line":49},[186,28491,26035],{"class":198},[186,28493,27673],{"class":532},[186,28495,28496],{"class":532}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[34,28498,28499],{"start":49},[22,28500,28501],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[176,28503,28505],{"className":25281,"code":28504,"language":25283,"meta":181,"style":181},"# 如果是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",[183,28506,28507,28512,28526,28530,28535],{"__ignoreMap":181},[186,28508,28509],{"class":188,"line":189},[186,28510,28511],{"class":192},"# 如果是RHEL或者Rocky（DNF4）\n",[186,28513,28514,28516,28518,28520,28523],{"class":188,"line":49},[186,28515,26035],{"class":198},[186,28517,27772],{"class":532},[186,28519,27871],{"class":532},[186,28521,28522],{"class":206}," --add-repo",[186,28524,28525],{"class":532}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[186,28527,28528],{"class":188,"line":219},[186,28529,3867],{"emptyLinePlaceholder":1551},[186,28531,28532],{"class":188,"line":225},[186,28533,28534],{"class":192},"# 如果是Feodra41+（DNF5）\n",[186,28536,28537,28539,28541,28543,28545],{"class":188,"line":242},[186,28538,26035],{"class":198},[186,28540,27772],{"class":532},[186,28542,27871],{"class":532},[186,28544,27874],{"class":532},[186,28546,28547],{"class":206}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[34,28549,28550],{"start":219},[22,28551,28552],{},"安装NVIDIA Container Toolki包",[176,28554,28556],{"className":25281,"code":28555,"language":25283,"meta":181,"style":181},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[183,28557,28558,28563,28576,28580,28585],{"__ignoreMap":181},[186,28559,28560],{"class":188,"line":189},[186,28561,28562],{"class":192},"# 如果是RHEL或者Rocky\n",[186,28564,28565,28567,28569,28571,28573],{"class":188,"line":49},[186,28566,26035],{"class":198},[186,28568,27772],{"class":532},[186,28570,25293],{"class":532},[186,28572,27857],{"class":206},[186,28574,28575],{"class":532}," nvidia-container-toolkit\n",[186,28577,28578],{"class":188,"line":219},[186,28579,3867],{"emptyLinePlaceholder":1551},[186,28581,28582],{"class":188,"line":225},[186,28583,28584],{"class":192},"# 如果是Fedora\n",[186,28586,28587,28589,28591,28593,28595],{"class":188,"line":242},[186,28588,26035],{"class":198},[186,28590,27772],{"class":532},[186,28592,25293],{"class":532},[186,28594,27857],{"class":206},[186,28596,28575],{"class":532},[34,28598,28599],{"start":225},[22,28600,28601,28602,28604],{},"安装nvidia-docker2 ： 在Fedora上使用",[183,28603,27747],{},"进行安装",[176,28606,28608],{"className":25281,"code":28607,"language":25283,"meta":181,"style":181},"sudo dnf install -y nvidia-docker2\n",[183,28609,28610],{"__ignoreMap":181},[186,28611,28612,28614,28616,28618,28620],{"class":188,"line":189},[186,28613,26035],{"class":198},[186,28615,27772],{"class":532},[186,28617,25293],{"class":532},[186,28619,27857],{"class":206},[186,28621,28411],{"class":532},[34,28623,28624],{"start":242},[22,28625,28626],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[176,28628,28629],{"className":25281,"code":28419,"language":25283,"meta":181,"style":181},[183,28630,28631],{"__ignoreMap":181},[186,28632,28633,28635,28637,28639,28641],{"class":188,"line":189},[186,28634,26035],{"class":198},[186,28636,28428],{"class":532},[186,28638,28431],{"class":532},[186,28640,28434],{"class":532},[186,28642,28437],{"class":206},[34,28644,28645],{"start":248},[22,28646,28647],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[176,28649,28650],{"className":25281,"code":28445,"language":25283,"meta":181,"style":181},[183,28651,28652],{"__ignoreMap":181},[186,28653,28654,28656,28658,28660],{"class":188,"line":189},[186,28655,26035],{"class":198},[186,28657,27970],{"class":532},[186,28659,28456],{"class":532},[186,28661,27949],{"class":532},[169,28663,28664],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[169,28666,28667],{},"方法：",[169,28669,28670],{},"1️⃣nvidia-smi",[169,28672,28673],{},"2️⃣运行nvidia cuda 容器进行测试",[176,28675,28677],{"className":25281,"code":28676,"language":25283,"meta":181,"style":181},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[183,28678,28679],{"__ignoreMap":181},[186,28680,28681,28683,28685,28688,28691,28694,28697,28700],{"class":188,"line":189},[186,28682,26035],{"class":198},[186,28684,27777],{"class":532},[186,28686,28687],{"class":532}," run",[186,28689,28690],{"class":206}," --rm",[186,28692,28693],{"class":206}," --gpus",[186,28695,28696],{"class":532}," all",[186,28698,28699],{"class":532}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[186,28701,28702],{"class":532}," nvidia-smi\n",[169,28704,28705],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[169,28707,28708],{},[164,28709],{"alt":181,"src":28710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[29,28712,28714],{"id":28713},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[169,28716,28717],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[169,28719,28720],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[169,28722,28723],{},[948,28724,28725],{"href":28725,"rel":28726},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[952],[169,28728,28729],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[169,28731,28732],{},"我们只需要找到对应的Docker镜像当底包即可。",[169,28734,28735],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[99,28737,28738,28754],{},[102,28739,28740],{},[105,28741,28742,28745,28748,28751],{},[108,28743,28744],{"align":110},"镜像类型",[108,28746,28747],{"align":110},"适用场景",[108,28749,28750],{"align":110},"示例标签",[108,28752,28753],{"align":110},"大小",[116,28755,28756,28770,28784],{},[105,28757,28758,28761,28764,28767],{},[121,28759,28760],{"align":110},"base",[121,28762,28763],{"align":110},"仅需 CUDA 运行时库",[121,28765,28766],{"align":110},"12.4.0-base-ubuntu22.04",[121,28768,28769],{"align":110},"~240MB",[105,28771,28772,28775,28778,28781],{},[121,28773,28774],{"align":110},"runtime",[121,28776,28777],{"align":110},"部署编译后的应用（含数学库）",[121,28779,28780],{"align":110},"12.4.0-runtime-ubuntu22.04",[121,28782,28783],{"align":110},"~2GB",[105,28785,28786,28789,28792,28795],{},[121,28787,28788],{"align":110},"devel",[121,28790,28791],{"align":110},"开发环境（含编译工具）",[121,28793,28794],{"align":110},"12.4.0-devel-ubuntu22.04",[121,28796,28797],{"align":110},"~3GB",[169,28799,28800,28801,28804],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[183,28802,28803],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[169,28806,28807],{},[164,28808],{"alt":181,"src":28809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[169,28811,28812],{},"在dockerfile里就可以开头这么写：",[176,28814,28816],{"className":25281,"code":28815,"language":25283,"meta":181,"style":181},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[183,28817,28818,28823],{"__ignoreMap":181},[186,28819,28820],{"class":188,"line":189},[186,28821,28822],{"class":192},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[186,28824,28825,28828],{"class":188,"line":49},[186,28826,28827],{"class":198},"FROM",[186,28829,28830],{"class":532}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[29,28832,28834],{"id":28833},"_34配置以太网","3.4.配置以太网",[169,28836,28837],{},"指定网络模式",[176,28839,28841],{"className":25281,"code":28840,"language":25283,"meta":181,"style":181},"--net=host \\\n",[183,28842,28843],{"__ignoreMap":181},[186,28844,28845,28848,28850,28853],{"class":188,"line":189},[186,28846,28847],{"class":202},"--net",[186,28849,529],{"class":669},[186,28851,28852],{"class":532},"host",[186,28854,26137],{"class":198},[169,28856,28857],{},"启动参数里加上这行即可。具体在下方",[169,28859,28860],{},"--net选项：指定网络模式，该选项有以下参数可选：",[19,28862,28863,28866,28869,28872],{},[22,28864,28865],{},"--net=bridge:默认选项，表示连接到默认的网桥",[22,28867,28868],{},"--net=host:容器使用宿主机的网络",[22,28870,28871],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[22,28873,28874],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1524,28876,28877],{},"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":181,"searchDepth":49,"depth":49,"links":28879},[28880,28881,28882,28883],{"id":28194,"depth":219,"text":28195},{"id":28261,"depth":219,"text":28262},{"id":28713,"depth":219,"text":28714},{"id":28833,"depth":219,"text":28834},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28183,"description":28191},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28890,"title":28891,"body":28892,"description":28899,"extension":1549,"meta":28905,"navigation":1551,"path":28906,"seo":28907,"stem":28908,"__hash__":28909},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28893,"toc":28903},[28894,28897,28900],[10,28895,28891],{"id":28896},"_4dockerhub换源",[169,28898,28899],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[169,28901,28902],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":181,"searchDepth":49,"depth":49,"links":28904},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28891,"description":28899},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28911,"title":28912,"body":28913,"description":181,"extension":1549,"meta":29923,"navigation":1551,"path":29924,"seo":29925,"stem":29926,"__hash__":29927},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28914,"toc":29918},[28915,28918,28922,28928,28932,28935,29274,29277,29280,29283,29288,29293,29296,29299,29302,29305,29324,29327,29338,29344,29526,29536,29552,29815,29817,29841,29856,29865,29915],[10,28916,28912],{"id":28917},"_5docker命令学习",[29,28919,28921],{"id":28920},"_51参考文档","5.1.参考文档",[169,28923,28924],{},[948,28925,28926],{"href":28926,"rel":28927},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[952],[29,28929,28931],{"id":28930},"_52常用命令","5.2.常用命令",[169,28933,28934],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[99,28936,28937,28949],{},[102,28938,28939],{},[105,28940,28941,28944,28946],{},[108,28942,28943],{"align":110},"命令",[108,28945,114],{"align":110},[108,28947,28948],{"align":110},"示例",[116,28950,28951,28962,28973,28984,28995,29006,29017,29028,29038,29049,29060,29071,29081,29092,29103,29114,29124,29134,29144,29154,29165,29176,29187,29198,29209,29220,29230,29241,29252,29263],{},[105,28952,28953,28956,28959],{},[121,28954,28955],{"align":110},"docker run",[121,28957,28958],{"align":110},"创建并启动一个新的容器。",[121,28960,28961],{"align":110},"docker run -it ubuntu bash",[105,28963,28964,28967,28970],{},[121,28965,28966],{"align":110},"docker build",[121,28968,28969],{"align":110},"通过指定的 Dockerfile 创建一个新的镜像。",[121,28971,28972],{"align":110},"docker build -t myimage .",[105,28974,28975,28978,28981],{},[121,28976,28977],{"align":110},"docker pull",[121,28979,28980],{"align":110},"从 Docker 仓库拉取镜像。",[121,28982,28983],{"align":110},"docker pull ubuntu",[105,28985,28986,28989,28992],{},[121,28987,28988],{"align":110},"docker push",[121,28990,28991],{"align":110},"将本地镜像推送到 Docker 仓库。",[121,28993,28994],{"align":110},"docker push myimage",[105,28996,28997,29000,29003],{},[121,28998,28999],{"align":110},"docker stop",[121,29001,29002],{"align":110},"停止一个正在运行的容器。",[121,29004,29005],{"align":110},"docker stop container_id",[105,29007,29008,29011,29014],{},[121,29009,29010],{"align":110},"docker start",[121,29012,29013],{"align":110},"启动一个已经存在的容器。",[121,29015,29016],{"align":110},"docker start container_id",[105,29018,29019,29022,29025],{},[121,29020,29021],{"align":110},"docker restart",[121,29023,29024],{"align":110},"重新启动容器。",[121,29026,29027],{"align":110},"docker restart container_id",[105,29029,29030,29033,29036],{},[121,29031,29032],{"align":110},"docker ps",[121,29034,29035],{"align":110},"列出当前正在运行的容器。",[121,29037,29032],{"align":110},[105,29039,29040,29043,29046],{},[121,29041,29042],{"align":110},"docker rm",[121,29044,29045],{"align":110},"删除一个或多个停止的容器。",[121,29047,29048],{"align":110},"docker rm container_id",[105,29050,29051,29054,29057],{},[121,29052,29053],{"align":110},"docker exec",[121,29055,29056],{"align":110},"在一个正在运行的容器中执行命令。",[121,29058,29059],{"align":110},"docker exec -it container_id bash",[105,29061,29062,29065,29068],{},[121,29063,29064],{"align":110},"docker logs",[121,29066,29067],{"align":110},"查看容器的日志输出。",[121,29069,29070],{"align":110},"docker logs container_id",[105,29072,29073,29076,29079],{},[121,29074,29075],{"align":110},"docker images",[121,29077,29078],{"align":110},"列出本地所有镜像。",[121,29080,29075],{"align":110},[105,29082,29083,29086,29089],{},[121,29084,29085],{"align":110},"docker rmi",[121,29087,29088],{"align":110},"删除一个或多个镜像。",[121,29090,29091],{"align":110},"docker rmi myimage",[105,29093,29094,29097,29100],{},[121,29095,29096],{"align":110},"docker network",[121,29098,29099],{"align":110},"管理 Docker 网络。",[121,29101,29102],{"align":110},"docker network ls",[105,29104,29105,29108,29111],{},[121,29106,29107],{"align":110},"docker volume",[121,29109,29110],{"align":110},"管理 Docker 数据卷。",[121,29112,29113],{"align":110},"docker volume ls",[105,29115,29116,29119,29122],{},[121,29117,29118],{"align":110},"docker-compose up",[121,29120,29121],{"align":110},"启动 docker-compose.yml 中定义的所有服务。",[121,29123,29118],{"align":110},[105,29125,29126,29129,29132],{},[121,29127,29128],{"align":110},"docker-compose down",[121,29130,29131],{"align":110},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[121,29133,29128],{"align":110},[105,29135,29136,29139,29142],{},[121,29137,29138],{"align":110},"docker info",[121,29140,29141],{"align":110},"显示 Docker 系统的详细信息。",[121,29143,29138],{"align":110},[105,29145,29146,29149,29152],{},[121,29147,29148],{"align":110},"docker stats",[121,29150,29151],{"align":110},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[121,29153,29148],{"align":110},[105,29155,29156,29159,29162],{},[121,29157,29158],{"align":110},"docker inspect",[121,29160,29161],{"align":110},"查看容器或镜像的详细信息（JSON 格式）。",[121,29163,29164],{"align":110},"docker inspect container_id",[105,29166,29167,29170,29173],{},[121,29168,29169],{"align":110},"docker save",[121,29171,29172],{"align":110},"将一个镜像保存为 tar 文件。",[121,29174,29175],{"align":110},"docker save -o myimage.tar myimage",[105,29177,29178,29181,29184],{},[121,29179,29180],{"align":110},"docker load",[121,29182,29183],{"align":110},"从 tar 文件中加载镜像。",[121,29185,29186],{"align":110},"docker load -i myimage.tar",[105,29188,29189,29192,29195],{},[121,29190,29191],{"align":110},"docker tag",[121,29193,29194],{"align":110},"为镜像添加标签（tag）。",[121,29196,29197],{"align":110},"docker tag myimage myimage:v1",[105,29199,29200,29203,29206],{},[121,29201,29202],{"align":110},"docker buildx build",[121,29204,29205],{"align":110},"使用 Buildx 构建多架构镜像。",[121,29207,29208],{"align":110},"docker buildx build -t myimage .",[105,29210,29211,29214,29217],{},[121,29212,29213],{"align":110},"docker buildx create",[121,29215,29216],{"align":110},"创建一个新的 Buildx 构建实例。",[121,29218,29219],{"align":110},"docker buildx create –use",[105,29221,29222,29225,29228],{},[121,29223,29224],{"align":110},"docker buildx ls",[121,29226,29227],{"align":110},"列出所有可用的 Buildx 构建实例。",[121,29229,29224],{"align":110},[105,29231,29232,29235,29238],{},[121,29233,29234],{"align":110},"docker buildx use",[121,29236,29237],{"align":110},"设置当前的 Buildx 构建实例。",[121,29239,29240],{"align":110},"docker buildx use mybuilder",[105,29242,29243,29246,29249],{},[121,29244,29245],{"align":110},"docker buildx bake",[121,29247,29248],{"align":110},"使用 Bake 文件批量构建镜像。",[121,29250,29251],{"align":110},"docker buildx bake -f bake.hcl",[105,29253,29254,29257,29260],{},[121,29255,29256],{"align":110},"docker buildx build –push",[121,29258,29259],{"align":110},"构建镜像并推送到镜像仓库。",[121,29261,29262],{"align":110},"docker buildx build –push -t myimage .",[105,29264,29265,29268,29271],{},[121,29266,29267],{"align":110},"docker buildx build –platform",[121,29269,29270],{"align":110},"构建镜像并为多个平台生成支持。",[121,29272,29273],{"align":110},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[169,29275,29276],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[169,29278,29279],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[169,29281,29282],{},"docker images 可以查看已经下载的镜像",[169,29284,29285],{},[164,29286],{"alt":181,"src":29287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[169,29289,29290],{},[54,29291,29292],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[169,29294,29295],{},"docker rmi $(docker images -q) 删除所有的镜像",[169,29297,29298],{},"docker container logs 查看容器日志",[169,29300,29301],{},"docker top 查看容器里的进程",[169,29303,29304],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[176,29306,29308],{"className":25281,"code":29307,"language":25283,"meta":181,"style":181},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[183,29309,29310],{"__ignoreMap":181},[186,29311,29312,29315,29318,29321],{"class":188,"line":189},[186,29313,29314],{"class":198},"如：docker",[186,29316,29317],{"class":532}," cp",[186,29319,29320],{"class":532}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[186,29322,29323],{"class":532}," \u002Fmydata\u002Fnginx\n",[169,29325,29326],{},"docker run时在启动容器的时候会有几个常用的选项：",[19,29328,29329,29332,29335],{},[22,29330,29331],{},"-d选项：表示后台运行",[22,29333,29334],{},"-P选项：随机端口映射",[22,29336,29337],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[29,29339,29341],{"id":29340},"_53run命令的参数非常重要",[54,29342,29343],{},"5.3.run命令的参数（非常重要）",[99,29345,29346,29359],{},[102,29347,29348],{},[105,29349,29350,29353,29356],{},[108,29351,29352],{"align":110},"参数\u002F配置",[108,29354,29355],{"align":110},"功能说明",[108,29357,29358],{"align":110},"重要性与参考依据",[116,29360,29361,29372,29383,29394,29405,29416,29427,29438,29449,29460,29471,29482,29493,29504,29515],{},[105,29362,29363,29366,29369],{},[121,29364,29365],{"align":110},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[121,29367,29368],{"align":110},"指定容器名称，便于后续管理",[121,29370,29371],{"align":110},"替代随机生成的容器名。",[105,29373,29374,29377,29380],{},[121,29375,29376],{"align":110},"–gpus all",[121,29378,29379],{"align":110},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[121,29381,29382],{"align":110},"用于CUDA加速等GPU依赖任务。",[105,29384,29385,29388,29391],{},[121,29386,29387],{"align":110},"-e NVIDIA_DRIVER_CAPABILITIES=all",[121,29389,29390],{"align":110},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[121,29392,29393],{"align":110},"确保容器内GPU功能完整67。",[105,29395,29396,29399,29402],{},[121,29397,29398],{"align":110},"-dit",[121,29400,29401],{"align":110},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[121,29403,29404],{"align":110},"允许容器在后台运行并支持交互操作。",[105,29406,29407,29410,29413],{},[121,29408,29409],{"align":110},"–privileged",[121,29411,29412],{"align":110},"赋予容器完全主机权限（可访问设备、内核模块等）",[121,29414,29415],{"align":110},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[105,29417,29418,29421,29424],{},[121,29419,29420],{"align":110},"–net=host",[121,29422,29423],{"align":110},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[121,29425,29426],{"align":110},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[105,29428,29429,29432,29435],{},[121,29430,29431],{"align":110},"–group-add audio–group-add video–group-add dialout",[121,29433,29434],{"align":110},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[121,29436,29437],{"align":110},"避免权限问题（如避免无法调用摄像头、麦克风）。",[105,29439,29440,29443,29446],{},[121,29441,29442],{"align":110},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[121,29444,29445],{"align":110},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[121,29447,29448],{"align":110},"支持容器内运行图形界面应用（如OpenCV可视化）。",[105,29450,29451,29454,29457],{},[121,29452,29453],{"align":110},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[121,29455,29456],{"align":110},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[121,29458,29459],{"align":110},"实现容器内图形显示。",[105,29461,29462,29465,29468],{},[121,29463,29464],{"align":110},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[121,29466,29467],{"align":110},"挂载X11认证文件（只读）",[121,29469,29470],{"align":110},"确保容器有权连接宿主机显示服务。",[105,29472,29473,29476,29479],{},[121,29474,29475],{"align":110},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[121,29477,29478],{"align":110},"挂载Wayland显示协议相关目录",[121,29480,29481],{"align":110},"支持Wayland协议的图形显示。",[105,29483,29484,29487,29490],{},[121,29485,29486],{"align":110},"–ulimit nofile=1024:524288",[121,29488,29489],{"align":110},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[121,29491,29492],{"align":110},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[105,29494,29495,29498,29501],{},[121,29496,29497],{"align":110},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[121,29499,29500],{"align":110},"挂载宿主机用户目录到容器内同名路径",[121,29502,29503],{"align":110},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[105,29505,29506,29509,29512],{},[121,29507,29508],{"align":110},"-w \u002Fhome\u002Ftungchiahui",[121,29510,29511],{"align":110},"设置容器启动后的默认工作目录",[121,29513,29514],{"align":110},"直接进入项目路径，方便执行命令2324。",[105,29516,29517,29520,29523],{},[121,29518,29519],{"align":110},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[121,29521,29522],{"align":110},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[121,29524,29525],{"align":110},"提供预配置的深度学习与机器人开发环境。",[169,29527,29528,29529,29531,29532,29535],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[183,29530,26035],{},"加不加",[183,29533,29534],{},"sudo -E","都无所谓。",[169,29537,29538,29539,29541,29542,29544,29545,29548,29549,29551],{},"用户已经被加到docker组了，不用",[183,29540,26035],{},"也行跑，其次，",[183,29543,26035],{},"运行的话，你的",[183,29546,29547],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[183,29550,29547],{},"更不可能变了。",[176,29553,29555],{"className":25281,"code":29554,"language":25283,"meta":181,"style":181},"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",[183,29556,29557,29570,29580,29590,29602,29609,29616,29623,29633,29642,29651,29665,29677,29689,29698,29708,29717,29732,29765,29792,29803,29810],{"__ignoreMap":181},[186,29558,29559,29561,29563,29565,29568],{"class":188,"line":189},[186,29560,26035],{"class":198},[186,29562,27777],{"class":532},[186,29564,28687],{"class":532},[186,29566,29567],{"class":206}," --name=ros_opencv_cuda",[186,29569,26137],{"class":206},[186,29571,29572,29575,29578],{"class":188,"line":49},[186,29573,29574],{"class":202},"--gpus ",[186,29576,29577],{"class":532},"all",[186,29579,26137],{"class":206},[186,29581,29582,29585,29588],{"class":188,"line":219},[186,29583,29584],{"class":202},"-e ",[186,29586,29587],{"class":532},"NVIDIA_DRIVER_CAPABILITIES=all",[186,29589,26137],{"class":206},[186,29591,29592,29594,29597,29600],{"class":188,"line":225},[186,29593,29584],{"class":202},[186,29595,29596],{"class":532},"DISPLAY=",[186,29598,29599],{"class":202},"$DISPLAY ",[186,29601,27632],{"class":206},[186,29603,29604,29607],{"class":188,"line":242},[186,29605,29606],{"class":202},"-dit ",[186,29608,27632],{"class":206},[186,29610,29611,29614],{"class":188,"line":248},[186,29612,29613],{"class":202},"--privileged ",[186,29615,27632],{"class":206},[186,29617,29618,29621],{"class":188,"line":265},[186,29619,29620],{"class":202},"--net=host ",[186,29622,27632],{"class":206},[186,29624,29625,29628,29631],{"class":188,"line":271},[186,29626,29627],{"class":202},"--group-add ",[186,29629,29630],{"class":532},"audio",[186,29632,26137],{"class":206},[186,29634,29635,29637,29640],{"class":188,"line":288},[186,29636,29627],{"class":202},[186,29638,29639],{"class":532},"video",[186,29641,26137],{"class":206},[186,29643,29644,29646,29649],{"class":188,"line":294},[186,29645,29627],{"class":202},[186,29647,29648],{"class":532},"dialout",[186,29650,26137],{"class":206},[186,29652,29653,29655,29658,29660,29663],{"class":188,"line":1212},[186,29654,29584],{"class":202},[186,29656,29657],{"class":532},"XAUTHORITY=",[186,29659,29547],{"class":202},[186,29661,29662],{"class":532},"\u002F.Xauthority",[186,29664,26137],{"class":206},[186,29666,29667,29669,29672,29675],{"class":188,"line":1223},[186,29668,29584],{"class":202},[186,29670,29671],{"class":532},"WAYLAND_DISPLAY=",[186,29673,29674],{"class":202},"$WAYLAND_DISPLAY ",[186,29676,27632],{"class":206},[186,29678,29679,29681,29684,29687],{"class":188,"line":1236},[186,29680,29584],{"class":202},[186,29682,29683],{"class":532},"XDG_RUNTIME_DIR=",[186,29685,29686],{"class":202},"$XDG_RUNTIME_DIR ",[186,29688,27632],{"class":206},[186,29690,29691,29693,29696],{"class":188,"line":3096},[186,29692,29584],{"class":202},[186,29694,29695],{"class":532},"QT_QPA_PLATFORM=xcb",[186,29697,26137],{"class":206},[186,29699,29700,29703,29706],{"class":188,"line":3110},[186,29701,29702],{"class":202},"-v ",[186,29704,29705],{"class":532},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[186,29707,26137],{"class":206},[186,29709,29710,29712,29715],{"class":188,"line":3115},[186,29711,29702],{"class":202},[186,29713,29714],{"class":532},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[186,29716,26137],{"class":206},[186,29718,29719,29722,29725,29727,29730],{"class":188,"line":3121},[186,29720,29721],{"class":202},"-v $HOME",[186,29723,29724],{"class":532},"\u002F.Xauthority:",[186,29726,29547],{"class":202},[186,29728,29729],{"class":532},"\u002F.Xauthority:ro",[186,29731,26137],{"class":206},[186,29733,29734,29736,29739,29741,29744,29747,29749,29752,29754,29756,29758,29760,29763],{"class":188,"line":3142},[186,29735,29702],{"class":202},[186,29737,29738],{"class":532},"\u002Frun\u002Fuser\u002F",[186,29740,26558],{"class":202},[186,29742,29743],{"class":198},"id",[186,29745,29746],{"class":206}," -u",[186,29748,2039],{"class":202},[186,29750,29751],{"class":532},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[186,29753,26558],{"class":202},[186,29755,29743],{"class":198},[186,29757,29746],{"class":206},[186,29759,2039],{"class":202},[186,29761,29762],{"class":532},"\u002Fwayland-0",[186,29764,26137],{"class":206},[186,29766,29767,29769,29771,29773,29775,29777,29779,29782,29784,29786,29788,29790],{"class":188,"line":3147},[186,29768,29702],{"class":202},[186,29770,29738],{"class":532},[186,29772,26558],{"class":202},[186,29774,29743],{"class":198},[186,29776,29746],{"class":206},[186,29778,2039],{"class":202},[186,29780,29781],{"class":532},":\u002Frun\u002Fuser\u002F",[186,29783,26558],{"class":202},[186,29785,29743],{"class":198},[186,29787,29746],{"class":206},[186,29789,839],{"class":202},[186,29791,27632],{"class":206},[186,29793,29794,29796,29798,29801],{"class":188,"line":3161},[186,29795,29721],{"class":202},[186,29797,2467],{"class":532},[186,29799,29800],{"class":202},"$HOME ",[186,29802,27632],{"class":206},[186,29804,29805,29808],{"class":188,"line":3166},[186,29806,29807],{"class":202},"-w $HOME ",[186,29809,27632],{"class":206},[186,29811,29812],{"class":188,"line":3195},[186,29813,29814],{"class":202},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[169,29816,10488],{},[34,29818,29819,29827,29830,29833],{},[22,29820,29821,15257,29823,29826],{},[183,29822,29587],{},[183,29824,29825],{},"--gpus all","没有英伟达显卡请注释。",[22,29828,29829],{},"--name后面请自己为容器起名。",[22,29831,29832],{},"最后一行仓库名称请你自己找对应的镜像填上。",[22,29834,29835,29836,913],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25014,29837,29838],{},[54,29839,29840],{},"请不要加",[176,29842,29844],{"className":25281,"code":29843,"language":25283,"meta":181,"style":181},"--ulimit nofile=1024:524288 \\\n",[183,29845,29846],{"__ignoreMap":181},[186,29847,29848,29851,29854],{"class":188,"line":189},[186,29849,29850],{"class":198},"--ulimit",[186,29852,29853],{"class":532}," nofile=1024:524288",[186,29855,26137],{"class":206},[169,29857,29858,29859,29864],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25014,29860,29861],{},[54,29862,29863],{},"不建议","**.**",[176,29866,29868],{"className":25281,"code":29867,"language":25283,"meta":181,"style":181},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[183,29869,29870,29897,29906],{"__ignoreMap":181},[186,29871,29872,29875,29878,29880,29882,29884,29886,29888,29890,29893,29895],{"class":188,"line":189},[186,29873,29874],{"class":198},"--user",[186,29876,29877],{"class":202}," $(",[186,29879,29743],{"class":198},[186,29881,29746],{"class":206},[186,29883,2039],{"class":202},[186,29885,2467],{"class":532},[186,29887,26558],{"class":202},[186,29889,29743],{"class":198},[186,29891,29892],{"class":206}," -g",[186,29894,839],{"class":202},[186,29896,27632],{"class":206},[186,29898,29899,29901,29904],{"class":188,"line":49},[186,29900,29702],{"class":202},[186,29902,29903],{"class":532},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[186,29905,26137],{"class":206},[186,29907,29908,29910,29913],{"class":188,"line":219},[186,29909,29702],{"class":202},[186,29911,29912],{"class":532},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[186,29914,26137],{"class":206},[1524,29916,29917],{},"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":181,"searchDepth":49,"depth":49,"links":29919},[29920,29921,29922],{"id":28920,"depth":219,"text":28921},{"id":28930,"depth":219,"text":28931},{"id":29340,"depth":219,"text":29343},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28912,"description":181},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29929,"title":29930,"body":29931,"description":181,"extension":1549,"meta":31554,"navigation":1551,"path":31555,"seo":31556,"stem":31557,"__hash__":31558},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29932,"toc":31549},[29933,29936,29940,29943,30165,30169,30173,30176,30282,30287,30290,30295,30298,30303,30306,30311,30314,30326,30329,30334,30341,30369,30376,30452,30457,30460,30483,30485,30560,30565,30568,30572,30580,30585,30590,30594,30605,30611,30614,30617,30641,30644,30647,30675,30678,30681,31146,31149,31154,31159,31163,31186,31191,31195,31199,31202,31205,31208,31235,31238,31241,31259,31262,31265,31287,31295,31300,31305,31309,31312,31315,31318,31321,31366,31369,31387,31390,31395,31398,31419,31422,31478,31481,31486,31490,31493,31500,31503,31506,31511,31514,31530,31533,31546],[10,29934,29930],{"id":29935},"_6手动创建docker镜像",[29,29937,29939],{"id":29938},"_61dockerfile","6.1.DockerFile",[169,29941,29942],{},"常用命令：",[99,29944,29945,29956],{},[102,29946,29947],{},[105,29948,29949,29952,29954],{},[108,29950,29951],{"align":110},"指令",[108,29953,27327],{"align":110},[108,29955,28948],{"align":110},[116,29957,29958,29968,29984,29995,30006,30017,30028,30039,30050,30064,30078,30089,30103,30114,30125,30139,30154],{},[105,29959,29960,29962,29965],{},[121,29961,28827],{"align":110},[121,29963,29964],{"align":110},"指定基础镜像，是 Dockerfile 的起点",[121,29966,29967],{"align":110},"FROM ubuntu:22.04",[105,29969,29970,29973,29976],{},[121,29971,29972],{"align":110},"LABEL",[121,29974,29975],{"align":110},"添加元数据（如作者、版本等）",[121,29977,29978,29979,29983],{"align":110},"LABEL maintainer=”",[948,29980,29982],{"href":29981},"mailto:you@example.com","you@example.com","”",[105,29985,29986,29989,29992],{},[121,29987,29988],{"align":110},"ENV",[121,29990,29991],{"align":110},"设置环境变量",[121,29993,29994],{"align":110},"ENV PORT=8080",[105,29996,29997,30000,30003],{},[121,29998,29999],{"align":110},"ARG",[121,30001,30002],{"align":110},"构建参数，只在构建期间可用",[121,30004,30005],{"align":110},"ARG VERSION=1.0",[105,30007,30008,30011,30014],{},[121,30009,30010],{"align":110},"RUN",[121,30012,30013],{"align":110},"构建镜像时运行命令",[121,30015,30016],{"align":110},"RUN apt-get update && apt-get install -y curl",[105,30018,30019,30022,30025],{},[121,30020,30021],{"align":110},"COPY",[121,30023,30024],{"align":110},"复制文件到镜像中",[121,30026,30027],{"align":110},"COPY . \u002Fapp",[105,30029,30030,30033,30036],{},[121,30031,30032],{"align":110},"ADD",[121,30034,30035],{"align":110},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[121,30037,30038],{"align":110},"ADD archive.tar.gz \u002Fdata\u002F",[105,30040,30041,30044,30047],{},[121,30042,30043],{"align":110},"WORKDIR",[121,30045,30046],{"align":110},"设置工作目录",[121,30048,30049],{"align":110},"WORKDIR \u002Fopt",[105,30051,30052,30055,30058],{},[121,30053,30054],{"align":110},"CMD",[121,30056,30057],{"align":110},"设置容器启动时默认命令（可被 docker run 覆盖）",[121,30059,30060,30061],{"align":110},"CMD ",[186,30062,30063],{},"“node”, “index.js”",[105,30065,30066,30069,30072],{},[121,30067,30068],{"align":110},"ENTRYPOINT",[121,30070,30071],{"align":110},"设置容器启动时固定命令（通常用于 CLI 工具等）",[121,30073,30074,30075],{"align":110},"ENTRYPOINT ",[186,30076,30077],{},"“python3”",[105,30079,30080,30083,30086],{},[121,30081,30082],{"align":110},"EXPOSE",[121,30084,30085],{"align":110},"声明镜像内服务监听的端口（不会自动映射）",[121,30087,30088],{"align":110},"EXPOSE 80",[105,30090,30091,30094,30097],{},[121,30092,30093],{"align":110},"VOLUME",[121,30095,30096],{"align":110},"声明数据卷挂载点",[121,30098,30099,30100],{"align":110},"VOLUME ",[186,30101,30102],{},"“\u002Fdata”",[105,30104,30105,30108,30111],{},[121,30106,30107],{"align":110},"USER",[121,30109,30110],{"align":110},"设置后续命令执行的用户",[121,30112,30113],{"align":110},"USER appuser",[105,30115,30116,30119,30122],{},[121,30117,30118],{"align":110},"ONBUILD",[121,30120,30121],{"align":110},"当镜像作为其他镜像基础镜像时触发的构建指令",[121,30123,30124],{"align":110},"ONBUILD COPY . \u002Fsrc",[105,30126,30127,30130,30133],{},[121,30128,30129],{"align":110},"SHELL",[121,30131,30132],{"align":110},"更改默认 shell，比如将 sh -c 改为 bash -c",[121,30134,30135,30136],{"align":110},"SHELL ",[186,30137,30138],{},"“\u002Fbin\u002Fbash”, “-c”",[105,30140,30141,30144,30147],{},[121,30142,30143],{"align":110},"HEALTHCHECK",[121,30145,30146],{"align":110},"定义容器运行时的健康检查命令",[121,30148,30149,30150],{"align":110},"`HEALTHCHECK CMD curl –fail ",[948,30151,30152],{"href":30152,"rel":30153},"http:\u002F\u002Flocalhost:8080",[952],[105,30155,30156,30159,30162],{},[121,30157,30158],{"align":110},"STOPSIGNAL",[121,30160,30161],{"align":110},"容器停止时发送的信号",[121,30163,30164],{"align":110},"STOPSIGNAL SIGKILL",[29,30166,30168],{"id":30167},"_62自己创建容器","6.2.自己创建容器",[23459,30170,30172],{"id":30171},"_621手动创建","6.2.1.手动创建",[169,30174,30175],{},"在x86电脑上编译x86的：",[176,30177,30179],{"className":25281,"code":30178,"language":25283,"meta":181,"style":181},"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",[183,30180,30181,30197,30201,30214,30218,30231,30235,30248,30252,30265,30269],{"__ignoreMap":181},[186,30182,30183,30185,30188,30191,30194],{"class":188,"line":189},[186,30184,28010],{"class":198},[186,30186,30187],{"class":532}," build",[186,30189,30190],{"class":206}," -t",[186,30192,30193],{"class":532}," ros-melodic-cuda118-cudnn8-bionic:latest",[186,30195,30196],{"class":532}," .\n",[186,30198,30199],{"class":188,"line":49},[186,30200,3867],{"emptyLinePlaceholder":1551},[186,30202,30203,30205,30207,30209,30212],{"class":188,"line":219},[186,30204,28010],{"class":198},[186,30206,30187],{"class":532},[186,30208,30190],{"class":206},[186,30210,30211],{"class":532}," ros-noetic-focal:latest",[186,30213,30196],{"class":532},[186,30215,30216],{"class":188,"line":225},[186,30217,3867],{"emptyLinePlaceholder":1551},[186,30219,30220,30222,30224,30226,30229],{"class":188,"line":242},[186,30221,28010],{"class":198},[186,30223,30187],{"class":532},[186,30225,30190],{"class":206},[186,30227,30228],{"class":532}," ros-humble-jammy:latest",[186,30230,30196],{"class":532},[186,30232,30233],{"class":188,"line":248},[186,30234,3867],{"emptyLinePlaceholder":1551},[186,30236,30237,30239,30241,30243,30246],{"class":188,"line":265},[186,30238,28010],{"class":198},[186,30240,30187],{"class":532},[186,30242,30190],{"class":206},[186,30244,30245],{"class":532}," ros-jazzy-noble:latest",[186,30247,30196],{"class":532},[186,30249,30250],{"class":188,"line":271},[186,30251,3867],{"emptyLinePlaceholder":1551},[186,30253,30254,30256,30258,30260,30263],{"class":188,"line":288},[186,30255,28010],{"class":198},[186,30257,30187],{"class":532},[186,30259,30190],{"class":206},[186,30261,30262],{"class":532}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[186,30264,30196],{"class":532},[186,30266,30267],{"class":188,"line":294},[186,30268,3867],{"emptyLinePlaceholder":1551},[186,30270,30271,30273,30275,30277,30280],{"class":188,"line":1212},[186,30272,28010],{"class":198},[186,30274,30187],{"class":532},[186,30276,30190],{"class":206},[186,30278,30279],{"class":532}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[186,30281,30196],{"class":532},[169,30283,30284],{},[164,30285],{"alt":181,"src":30286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[169,30288,30289],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[169,30291,30292],{},[164,30293],{"alt":181,"src":30294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[169,30296,30297],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[34,30299,30300],{},[22,30301,30302],{},"创建 Docker Hub 账户",[169,30304,30305],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[34,30307,30308],{"start":49},[22,30309,30310],{},"登录 Docker Hub",[169,30312,30313],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[176,30315,30317],{"className":25281,"code":30316,"language":25283,"meta":181,"style":181},"docker login\n",[183,30318,30319],{"__ignoreMap":181},[186,30320,30321,30323],{"class":188,"line":189},[186,30322,28010],{"class":198},[186,30324,30325],{"class":532}," login\n",[169,30327,30328],{},"输入你的 Docker Hub 用户名和密码进行验证。",[34,30330,30331],{},[22,30332,30333],{},"为你的镜像打标签",[169,30335,30336,30337,30340],{},"Docker Hub 使用 ",[183,30338,30339],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[176,30342,30344],{"className":25281,"code":30343,"language":25283,"meta":181,"style":181},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[183,30345,30346],{"__ignoreMap":181},[186,30347,30348,30350,30353,30355,30358,30361,30364,30366],{"class":188,"line":189},[186,30349,28010],{"class":198},[186,30351,30352],{"class":532}," tag",[186,30354,30245],{"class":532},[186,30356,30357],{"class":669}," \u003C",[186,30359,30360],{"class":532},"你的用户",[186,30362,30363],{"class":202},"名",[186,30365,2567],{"class":669},[186,30367,30368],{"class":532},"\u002Fros-jazzy-noble:latest\n",[169,30370,30371,30372,30375],{},"例如，如果你的 Docker Hub 用户名是 ",[183,30373,30374],{},"tungchiahui","，你应该执行：",[176,30377,30379],{"className":25281,"code":30378,"language":25283,"meta":181,"style":181},"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",[183,30380,30381,30392,30396,30407,30411,30422,30426,30437,30441],{"__ignoreMap":181},[186,30382,30383,30385,30387,30389],{"class":188,"line":189},[186,30384,28010],{"class":198},[186,30386,30352],{"class":532},[186,30388,30211],{"class":532},[186,30390,30391],{"class":532}," tungchiahui\u002Fros-noetic-focal:latest\n",[186,30393,30394],{"class":188,"line":49},[186,30395,3867],{"emptyLinePlaceholder":1551},[186,30397,30398,30400,30402,30404],{"class":188,"line":219},[186,30399,28010],{"class":198},[186,30401,30352],{"class":532},[186,30403,30228],{"class":532},[186,30405,30406],{"class":532}," tungchiahui\u002Fros-humble-jammy:latest\n",[186,30408,30409],{"class":188,"line":225},[186,30410,3867],{"emptyLinePlaceholder":1551},[186,30412,30413,30415,30417,30419],{"class":188,"line":242},[186,30414,28010],{"class":198},[186,30416,30352],{"class":532},[186,30418,30245],{"class":532},[186,30420,30421],{"class":532}," tungchiahui\u002Fros-jazzy-noble:latest\n",[186,30423,30424],{"class":188,"line":248},[186,30425,3867],{"emptyLinePlaceholder":1551},[186,30427,30428,30430,30432,30434],{"class":188,"line":265},[186,30429,28010],{"class":198},[186,30431,30352],{"class":532},[186,30433,30262],{"class":532},[186,30435,30436],{"class":532}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[186,30438,30439],{"class":188,"line":271},[186,30440,3867],{"emptyLinePlaceholder":1551},[186,30442,30443,30445,30447,30449],{"class":188,"line":288},[186,30444,28010],{"class":198},[186,30446,30352],{"class":532},[186,30448,30279],{"class":532},[186,30450,30451],{"class":532}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[34,30453,30454],{"start":49},[22,30455,30456],{},"推送镜像到 Docker Hub",[169,30458,30459],{},"使用以下命令将镜像推送到 Docker Hub：",[176,30461,30463],{"className":25281,"code":30462,"language":25283,"meta":181,"style":181},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[183,30464,30465],{"__ignoreMap":181},[186,30466,30467,30469,30472,30474,30476,30478,30480],{"class":188,"line":189},[186,30468,28010],{"class":198},[186,30470,30471],{"class":532}," push",[186,30473,30357],{"class":669},[186,30475,30360],{"class":532},[186,30477,30363],{"class":202},[186,30479,2567],{"class":669},[186,30481,30482],{"class":532},"\u002Fros-noetic-jazzy-noble:latest\n",[169,30484,16095],{},[176,30486,30488],{"className":25281,"code":30487,"language":25283,"meta":181,"style":181},"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",[183,30489,30490,30498,30502,30510,30514,30522,30526,30535,30539,30547,30551],{"__ignoreMap":181},[186,30491,30492,30494,30496],{"class":188,"line":189},[186,30493,28010],{"class":198},[186,30495,30471],{"class":532},[186,30497,30391],{"class":532},[186,30499,30500],{"class":188,"line":49},[186,30501,3867],{"emptyLinePlaceholder":1551},[186,30503,30504,30506,30508],{"class":188,"line":219},[186,30505,28010],{"class":198},[186,30507,30471],{"class":532},[186,30509,30406],{"class":532},[186,30511,30512],{"class":188,"line":225},[186,30513,3867],{"emptyLinePlaceholder":1551},[186,30515,30516,30518,30520],{"class":188,"line":242},[186,30517,28010],{"class":198},[186,30519,30471],{"class":532},[186,30521,30421],{"class":532},[186,30523,30524],{"class":188,"line":248},[186,30525,3867],{"emptyLinePlaceholder":1551},[186,30527,30528,30530,30532],{"class":188,"line":265},[186,30529,28010],{"class":198},[186,30531,30471],{"class":532},[186,30533,30534],{"class":532}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[186,30536,30537],{"class":188,"line":271},[186,30538,3867],{"emptyLinePlaceholder":1551},[186,30540,30541,30543,30545],{"class":188,"line":288},[186,30542,28010],{"class":198},[186,30544,30471],{"class":532},[186,30546,30451],{"class":532},[186,30548,30549],{"class":188,"line":294},[186,30550,3867],{"emptyLinePlaceholder":1551},[186,30552,30553,30555,30557],{"class":188,"line":1212},[186,30554,28010],{"class":198},[186,30556,30471],{"class":532},[186,30558,30559],{"class":532}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[34,30561,30562],{"start":219},[22,30563,30564],{},"验证推送成功",[169,30566,30567],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[169,30569,30570],{},[54,30571,5250],{},[19,30573,30574,30577],{},[22,30575,30576],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[22,30578,30579],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[169,30581,30582],{},[164,30583],{"alt":181,"src":30584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[169,30586,30587],{},[164,30588],{"alt":181,"src":30589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23459,30591,30593],{"id":30592},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[169,30595,30596,30597,30600,30601,30604],{},"如果您想在 ",[54,30598,30599],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[54,30602,30603],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[169,30606,30607,30608],{},"1. ",[54,30609,30610],{},"启用 Docker 跨平台构建",[169,30612,30613],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[169,30615,30616],{},"第一步：启用 buildx（只需执行一次）",[176,30618,30620],{"className":25281,"code":30619,"language":25283,"meta":181,"style":181},"docker buildx create --name multiarch_builder --use\n",[183,30621,30622],{"__ignoreMap":181},[186,30623,30624,30626,30629,30632,30635,30638],{"class":188,"line":189},[186,30625,28010],{"class":198},[186,30627,30628],{"class":532}," buildx",[186,30630,30631],{"class":532}," create",[186,30633,30634],{"class":206}," --name",[186,30636,30637],{"class":532}," multiarch_builder",[186,30639,30640],{"class":206}," --use\n",[169,30642,30643],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[169,30645,30646],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[176,30648,30650],{"className":25281,"code":30649,"language":25283,"meta":181,"style":181},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[183,30651,30652],{"__ignoreMap":181},[186,30653,30654,30656,30658,30660,30663,30666,30669,30672],{"class":188,"line":189},[186,30655,28010],{"class":198},[186,30657,28687],{"class":532},[186,30659,28690],{"class":206},[186,30661,30662],{"class":206}," --privileged",[186,30664,30665],{"class":532}," multiarch\u002Fqemu-user-static",[186,30667,30668],{"class":206}," --reset",[186,30670,30671],{"class":206}," -p",[186,30673,30674],{"class":532}," yes\n",[169,30676,30677],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[169,30679,30680],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[176,30682,30684],{"className":25281,"code":30683,"language":25283,"meta":181,"style":181},"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",[183,30685,30686,30728,30732,30737,30747,30757,30766,30772,30776,30780,30790,30798,30807,30813,30817,30821,30831,30839,30848,30854,30858,30862,30872,30880,30889,30895,30899,30903,30913,30921,30930,30936,30940,30944,30954,30962,30971,30977,30981,30985,30995,31003,31012,31018,31022,31026,31036,31044,31053,31059,31063,31067,31077,31085,31094,31100,31104,31108,31119,31127,31136,31142],{"__ignoreMap":181},[186,30687,30688,30690,30692,30694,30697,30700,30702,30704,30707,30709,30711,30713,30715,30718,30721,30723,30726],{"class":188,"line":189},[186,30689,28010],{"class":198},[186,30691,30628],{"class":532},[186,30693,30187],{"class":532},[186,30695,30696],{"class":206}," --platform",[186,30698,30699],{"class":532}," linux\u002Famd64,linux\u002Farm64",[186,30701,30190],{"class":206},[186,30703,30357],{"class":669},[186,30705,30706],{"class":532},"你的镜像",[186,30708,30363],{"class":202},[186,30710,2567],{"class":669},[186,30712,2467],{"class":532},[186,30714,520],{"class":669},[186,30716,30717],{"class":532},"标",[186,30719,30720],{"class":202},"签",[186,30722,2567],{"class":669},[186,30724,30725],{"class":206}," --push",[186,30727,30196],{"class":532},[186,30729,30730],{"class":188,"line":49},[186,30731,3867],{"emptyLinePlaceholder":1551},[186,30733,30734],{"class":188,"line":219},[186,30735,30736],{"class":192},"# 例子：\n",[186,30738,30739,30741,30743,30745],{"class":188,"line":225},[186,30740,28010],{"class":198},[186,30742,30628],{"class":532},[186,30744,30187],{"class":532},[186,30746,26137],{"class":206},[186,30748,30749,30752,30755],{"class":188,"line":242},[186,30750,30751],{"class":202},"--platform ",[186,30753,30754],{"class":532},"linux\u002Famd64,linux\u002Farm64",[186,30756,26137],{"class":206},[186,30758,30759,30761,30764],{"class":188,"line":248},[186,30760,30190],{"class":206},[186,30762,30763],{"class":532}," tungchiahui\u002Fros:noetic-focal",[186,30765,26137],{"class":206},[186,30767,30768,30770],{"class":188,"line":265},[186,30769,30725],{"class":206},[186,30771,26137],{"class":206},[186,30773,30774],{"class":188,"line":271},[186,30775,30196],{"class":532},[186,30777,30778],{"class":188,"line":288},[186,30779,3867],{"emptyLinePlaceholder":1551},[186,30781,30782,30784,30786,30788],{"class":188,"line":294},[186,30783,28010],{"class":198},[186,30785,30628],{"class":532},[186,30787,30187],{"class":532},[186,30789,26137],{"class":206},[186,30791,30792,30794,30796],{"class":188,"line":1212},[186,30793,30751],{"class":202},[186,30795,30754],{"class":532},[186,30797,26137],{"class":206},[186,30799,30800,30802,30805],{"class":188,"line":1223},[186,30801,30190],{"class":206},[186,30803,30804],{"class":532}," tungchiahui\u002Fros:humble-jammy",[186,30806,26137],{"class":206},[186,30808,30809,30811],{"class":188,"line":1236},[186,30810,30725],{"class":206},[186,30812,26137],{"class":206},[186,30814,30815],{"class":188,"line":3096},[186,30816,30196],{"class":532},[186,30818,30819],{"class":188,"line":3110},[186,30820,3867],{"emptyLinePlaceholder":1551},[186,30822,30823,30825,30827,30829],{"class":188,"line":3115},[186,30824,28010],{"class":198},[186,30826,30628],{"class":532},[186,30828,30187],{"class":532},[186,30830,26137],{"class":206},[186,30832,30833,30835,30837],{"class":188,"line":3121},[186,30834,30751],{"class":202},[186,30836,30754],{"class":532},[186,30838,26137],{"class":206},[186,30840,30841,30843,30846],{"class":188,"line":3142},[186,30842,30190],{"class":206},[186,30844,30845],{"class":532}," tungchiahui\u002Fros:jazzy-noble",[186,30847,26137],{"class":206},[186,30849,30850,30852],{"class":188,"line":3147},[186,30851,30725],{"class":206},[186,30853,26137],{"class":206},[186,30855,30856],{"class":188,"line":3161},[186,30857,30196],{"class":532},[186,30859,30860],{"class":188,"line":3166},[186,30861,3867],{"emptyLinePlaceholder":1551},[186,30863,30864,30866,30868,30870],{"class":188,"line":3195},[186,30865,27777],{"class":198},[186,30867,30628],{"class":532},[186,30869,30187],{"class":532},[186,30871,26137],{"class":206},[186,30873,30874,30876,30878],{"class":188,"line":3200},[186,30875,30751],{"class":202},[186,30877,30754],{"class":532},[186,30879,26137],{"class":206},[186,30881,30882,30884,30887],{"class":188,"line":3217},[186,30883,30190],{"class":206},[186,30885,30886],{"class":532}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[186,30888,26137],{"class":206},[186,30890,30891,30893],{"class":188,"line":3222},[186,30892,30725],{"class":206},[186,30894,26137],{"class":206},[186,30896,30897],{"class":188,"line":3227},[186,30898,30196],{"class":532},[186,30900,30901],{"class":188,"line":3232},[186,30902,3867],{"emptyLinePlaceholder":1551},[186,30904,30905,30907,30909,30911],{"class":188,"line":3246},[186,30906,28010],{"class":198},[186,30908,30628],{"class":532},[186,30910,30187],{"class":532},[186,30912,26137],{"class":206},[186,30914,30915,30917,30919],{"class":188,"line":3251},[186,30916,30751],{"class":202},[186,30918,30754],{"class":532},[186,30920,26137],{"class":206},[186,30922,30923,30925,30928],{"class":188,"line":4044},[186,30924,30190],{"class":206},[186,30926,30927],{"class":532}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[186,30929,26137],{"class":206},[186,30931,30932,30934],{"class":188,"line":4058},[186,30933,30725],{"class":206},[186,30935,26137],{"class":206},[186,30937,30938],{"class":188,"line":4066},[186,30939,30196],{"class":532},[186,30941,30942],{"class":188,"line":4071},[186,30943,3867],{"emptyLinePlaceholder":1551},[186,30945,30946,30948,30950,30952],{"class":188,"line":4077},[186,30947,27777],{"class":198},[186,30949,30628],{"class":532},[186,30951,30187],{"class":532},[186,30953,26137],{"class":206},[186,30955,30956,30958,30960],{"class":188,"line":4083},[186,30957,30751],{"class":202},[186,30959,30754],{"class":532},[186,30961,26137],{"class":206},[186,30963,30964,30966,30969],{"class":188,"line":4088},[186,30965,30190],{"class":206},[186,30967,30968],{"class":532}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[186,30970,26137],{"class":206},[186,30972,30973,30975],{"class":188,"line":9411},[186,30974,30725],{"class":206},[186,30976,26137],{"class":206},[186,30978,30979],{"class":188,"line":9435},[186,30980,30196],{"class":532},[186,30982,30983],{"class":188,"line":9440},[186,30984,3867],{"emptyLinePlaceholder":1551},[186,30986,30987,30989,30991,30993],{"class":188,"line":9446},[186,30988,28010],{"class":198},[186,30990,30628],{"class":532},[186,30992,30187],{"class":532},[186,30994,26137],{"class":206},[186,30996,30997,30999,31001],{"class":188,"line":9473},[186,30998,30751],{"class":202},[186,31000,30754],{"class":532},[186,31002,26137],{"class":206},[186,31004,31005,31007,31010],{"class":188,"line":9478},[186,31006,30190],{"class":206},[186,31008,31009],{"class":532}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[186,31011,26137],{"class":206},[186,31013,31014,31016],{"class":188,"line":9484},[186,31015,30725],{"class":206},[186,31017,26137],{"class":206},[186,31019,31020],{"class":188,"line":9496},[186,31021,30196],{"class":532},[186,31023,31024],{"class":188,"line":9508},[186,31025,3867],{"emptyLinePlaceholder":1551},[186,31027,31028,31030,31032,31034],{"class":188,"line":9520},[186,31029,28010],{"class":198},[186,31031,30628],{"class":532},[186,31033,30187],{"class":532},[186,31035,26137],{"class":206},[186,31037,31038,31040,31042],{"class":188,"line":11179},[186,31039,30751],{"class":202},[186,31041,30754],{"class":532},[186,31043,26137],{"class":206},[186,31045,31046,31048,31051],{"class":188,"line":11204},[186,31047,30190],{"class":206},[186,31049,31050],{"class":532}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[186,31052,26137],{"class":206},[186,31054,31055,31057],{"class":188,"line":11227},[186,31056,30725],{"class":206},[186,31058,26137],{"class":206},[186,31060,31061],{"class":188,"line":11251},[186,31062,30196],{"class":532},[186,31064,31065],{"class":188,"line":11256},[186,31066,3867],{"emptyLinePlaceholder":1551},[186,31068,31069,31071,31073,31075],{"class":188,"line":11261},[186,31070,27777],{"class":198},[186,31072,30628],{"class":532},[186,31074,30187],{"class":532},[186,31076,26137],{"class":206},[186,31078,31079,31081,31083],{"class":188,"line":11266},[186,31080,30751],{"class":202},[186,31082,30754],{"class":532},[186,31084,26137],{"class":206},[186,31086,31087,31089,31092],{"class":188,"line":11275},[186,31088,30190],{"class":206},[186,31090,31091],{"class":532}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[186,31093,26137],{"class":206},[186,31095,31096,31098],{"class":188,"line":11280},[186,31097,30725],{"class":206},[186,31099,26137],{"class":206},[186,31101,31102],{"class":188,"line":11286},[186,31103,30196],{"class":532},[186,31105,31106],{"class":188,"line":11307},[186,31107,3867],{"emptyLinePlaceholder":1551},[186,31109,31110,31113,31115,31117],{"class":188,"line":11313},[186,31111,31112],{"class":198},"  docker",[186,31114,30628],{"class":532},[186,31116,30187],{"class":532},[186,31118,26137],{"class":206},[186,31120,31121,31123,31125],{"class":188,"line":11327},[186,31122,30751],{"class":202},[186,31124,30754],{"class":532},[186,31126,26137],{"class":206},[186,31128,31129,31131,31134],{"class":188,"line":11333},[186,31130,30190],{"class":206},[186,31132,31133],{"class":532}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[186,31135,26137],{"class":206},[186,31137,31138,31140],{"class":188,"line":11360},[186,31139,30725],{"class":206},[186,31141,26137],{"class":206},[186,31143,31144],{"class":188,"line":11369},[186,31145,30196],{"class":532},[169,31147,31148],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[169,31150,31151],{},[164,31152],{"alt":181,"src":31153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[169,31155,31156],{},[164,31157],{"alt":181,"src":31158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23459,31160,31162],{"id":31161},"_623清除构建缓存","6.2.3.清除构建缓存",[176,31164,31166],{"className":25281,"code":31165,"language":25283,"meta":181,"style":181},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[183,31167,31168,31173],{"__ignoreMap":181},[186,31169,31170],{"class":188,"line":189},[186,31171,31172],{"class":192},"# 清理BuildKit构建缓存\n",[186,31174,31175,31177,31180,31183],{"class":188,"line":49},[186,31176,28010],{"class":198},[186,31178,31179],{"class":532}," builder",[186,31181,31182],{"class":532}," prune",[186,31184,31185],{"class":206}," -f\n",[169,31187,31188],{},[164,31189],{"alt":181,"src":31190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[29,31192,31194],{"id":31193},"_63补充","6.3.补充",[23459,31196,31198],{"id":31197},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[169,31200,31201],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[169,31203,31204],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[169,31206,31207],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[176,31209,31211],{"className":25281,"code":31210,"language":25283,"meta":181,"style":181},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[183,31212,31213,31220],{"__ignoreMap":181},[186,31214,31215,31217],{"class":188,"line":189},[186,31216,28827],{"class":198},[186,31218,31219],{"class":532}," nginx\n",[186,31221,31222,31224,31227,31230,31232],{"class":188,"line":49},[186,31223,30010],{"class":198},[186,31225,31226],{"class":532}," echo",[186,31228,31229],{"class":532}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[186,31231,27679],{"class":669},[186,31233,31234],{"class":532}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[169,31236,31237],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[169,31239,31240],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[176,31242,31244],{"className":25281,"code":31243,"language":25283,"meta":181,"style":181},"docker build -t nginx:tuling .\n",[183,31245,31246],{"__ignoreMap":181},[186,31247,31248,31250,31252,31254,31257],{"class":188,"line":189},[186,31249,28010],{"class":198},[186,31251,30187],{"class":532},[186,31253,30190],{"class":206},[186,31255,31256],{"class":532}," nginx:tuling",[186,31258,30196],{"class":532},[169,31260,31261],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[169,31263,31264],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[176,31266,31268],{"className":25281,"code":31267,"language":25283,"meta":181,"style":181},"docker run -d -p 92:80 nginx:tuling\n",[183,31269,31270],{"__ignoreMap":181},[186,31271,31272,31274,31276,31279,31281,31284],{"class":188,"line":189},[186,31273,28010],{"class":198},[186,31275,28687],{"class":532},[186,31277,31278],{"class":206}," -d",[186,31280,30671],{"class":206},[186,31282,31283],{"class":532}," 92:80",[186,31285,31286],{"class":532}," nginx:tuling\n",[169,31288,31289,31290],{},"4、访问 ",[948,31291,31294],{"href":31292,"rel":31293},"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",[952],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[169,31296,31297],{},[164,31298],{"alt":181,"src":31299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[169,31301,31302],{},[164,31303],{"alt":181,"src":31304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23459,31306,31308],{"id":31307},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[169,31310,31311],{},"只需要知道大体流程即可",[169,31313,31314],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[169,31316,31317],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[169,31319,31320],{},"2、在Dockerfile中添加以下内容",[176,31322,31324],{"className":27548,"code":31323,"language":27550,"meta":181,"style":181},"# 基于哪个镜像\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",[183,31325,31326,31331,31336,31341,31346,31351,31356,31361],{"__ignoreMap":181},[186,31327,31328],{"class":188,"line":189},[186,31329,31330],{},"# 基于哪个镜像\n",[186,31332,31333],{"class":188,"line":49},[186,31334,31335],{},"From java:8\n",[186,31337,31338],{"class":188,"line":219},[186,31339,31340],{},"# 复制文件到容器\n",[186,31342,31343],{"class":188,"line":225},[186,31344,31345],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[186,31347,31348],{"class":188,"line":242},[186,31349,31350],{},"# 声明需要暴露的端口\n",[186,31352,31353],{"class":188,"line":248},[186,31354,31355],{},"EXPOSE 8877\n",[186,31357,31358],{"class":188,"line":265},[186,31359,31360],{},"# 配置容器启动后执行的命令\n",[186,31362,31363],{"class":188,"line":271},[186,31364,31365],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[169,31367,31368],{},"3、使用docker build命令构建镜像",[176,31370,31372],{"className":25281,"code":31371,"language":25283,"meta":181,"style":181},"docker build -t tulingmall-member:0.0.5 .\n",[183,31373,31374],{"__ignoreMap":181},[186,31375,31376,31378,31380,31382,31385],{"class":188,"line":189},[186,31377,28010],{"class":198},[186,31379,30187],{"class":532},[186,31381,30190],{"class":206},[186,31383,31384],{"class":532}," tulingmall-member:0.0.5",[186,31386,30196],{"class":532},[169,31388,31389],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[169,31391,31392],{},[164,31393],{"alt":181,"src":31394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[169,31396,31397],{},"4、启动镜像，加-d可在后台启动",[176,31399,31401],{"className":25281,"code":31400,"language":25283,"meta":181,"style":181},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[183,31402,31403],{"__ignoreMap":181},[186,31404,31405,31407,31409,31411,31413,31416],{"class":188,"line":189},[186,31406,28010],{"class":198},[186,31408,28687],{"class":532},[186,31410,31278],{"class":206},[186,31412,30671],{"class":206},[186,31414,31415],{"class":532}," 8877:8877",[186,31417,31418],{"class":532}," tulingmall-member:0.0.5\n",[169,31420,31421],{},"加上JVM参数：",[176,31423,31425],{"className":25281,"code":31424,"language":25283,"meta":181,"style":181},"# --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",[183,31426,31427,31432,31447,31457,31466,31473],{"__ignoreMap":181},[186,31428,31429],{"class":188,"line":189},[186,31430,31431],{"class":192},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[186,31433,31434,31436,31438,31441,31443,31445],{"class":188,"line":49},[186,31435,28010],{"class":198},[186,31437,28687],{"class":532},[186,31439,31440],{"class":206},"  -d",[186,31442,30671],{"class":206},[186,31444,31415],{"class":532},[186,31446,26137],{"class":206},[186,31448,31449,31451,31454],{"class":188,"line":219},[186,31450,29584],{"class":202},[186,31452,31453],{"class":532},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[186,31455,31456],{"class":206},"  \\\n",[186,31458,31459,31461,31464],{"class":188,"line":225},[186,31460,29584],{"class":202},[186,31462,31463],{"class":532},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[186,31465,31456],{"class":206},[186,31467,31468,31471],{"class":188,"line":242},[186,31469,31470],{"class":202},"--cap-add=SYS_PTRACE  ",[186,31472,27632],{"class":206},[186,31474,31475],{"class":188,"line":248},[186,31476,31477],{"class":202},"tulingmall-member:0.0.5\n",[169,31479,31480],{},"5、访问会员服务接口",[169,31482,31483],{},[164,31484],{"alt":181,"src":31485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23459,31487,31489],{"id":31488},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[169,31491,31492],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[169,31494,31495,31496],{},"阿里云docker镜像仓库：",[948,31497,31498],{"href":31498,"rel":31499},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[952],[169,31501,31502],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[169,31504,31505],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[169,31507,31508],{},[164,31509],{"alt":181,"src":31510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[169,31512,31513],{},"要把镜像推送到镜像仓库",[176,31515,31517],{"className":25281,"code":31516,"language":25283,"meta":181,"style":181},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[183,31518,31519],{"__ignoreMap":181},[186,31520,31521,31523,31525,31527],{"class":188,"line":189},[186,31522,28010],{"class":198},[186,31524,30352],{"class":532},[186,31526,31384],{"class":532},[186,31528,31529],{"class":532}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[169,31531,31532],{},"最后将镜像推送到远程仓库",[176,31534,31536],{"className":25281,"code":31535,"language":25283,"meta":181,"style":181},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[183,31537,31538],{"__ignoreMap":181},[186,31539,31540,31542,31544],{"class":188,"line":189},[186,31541,28010],{"class":198},[186,31543,30471],{"class":532},[186,31545,31529],{"class":532},[1524,31547,31548],{},"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":181,"searchDepth":49,"depth":49,"links":31550},[31551,31552,31553],{"id":29938,"depth":219,"text":29939},{"id":30167,"depth":219,"text":30168},{"id":31193,"depth":219,"text":31194},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29930,"description":181},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31560,"title":31561,"body":31562,"description":181,"extension":1549,"meta":31705,"navigation":1551,"path":31706,"seo":31707,"stem":31708,"__hash__":31709},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31563,"toc":31703},[31564,31567,31572,31577,31580,31585,31590,31593,31598,31603,31606,31611,31614,31617,31620,31623,31626,31629,31649,31671,31674,31677,31697,31700],[10,31565,31561],{"id":31566},"_7vscode远程开发",[34,31568,31569],{},[22,31570,31571],{},"插件1：微软Docker工具",[169,31573,31574],{},[164,31575],{"alt":181,"src":31576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[169,31578,31579],{},"docker扩展插件已经进化为container tools了，请安装container tools",[169,31581,31582],{},[164,31583],{"alt":181,"src":31584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[34,31586,31587],{"start":49},[22,31588,31589],{},"插件2：微软Docker远程开发工具",[169,31591,31592],{},"下面这是远程开发的插件。",[169,31594,31595],{},[164,31596],{"alt":181,"src":31597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[169,31599,31600],{},[164,31601],{"alt":181,"src":31602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[169,31604,31605],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[169,31607,31608],{},[164,31609],{"alt":181,"src":31610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[169,31612,31613],{},"安装完拓展之后，vscode进行链接：",[169,31615,31616],{},"1.按ctrl+shift+p",[169,31618,31619],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[169,31621,31622],{},"3.选择目前运行的容器",[169,31624,31625],{},"4.VS Code 会在新窗口中打开并连接到容器",[169,31627,31628],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[176,31630,31632],{"className":25281,"code":31631,"language":25283,"meta":181,"style":181},"docker run -v 主机目录:容器目录 image-name\n",[183,31633,31634],{"__ignoreMap":181},[186,31635,31636,31638,31640,31643,31646],{"class":188,"line":189},[186,31637,28010],{"class":198},[186,31639,28687],{"class":532},[186,31641,31642],{"class":206}," -v",[186,31644,31645],{"class":532}," 主机目录:容器目录",[186,31647,31648],{"class":532}," image-name\n",[176,31650,31652],{"className":25281,"code":31651,"language":25283,"meta":181,"style":181},"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",[183,31653,31654],{"__ignoreMap":181},[186,31655,31656,31658,31660,31663,31665,31668],{"class":188,"line":189},[186,31657,28010],{"class":198},[186,31659,28687],{"class":532},[186,31661,31662],{"class":206}," -it",[186,31664,31642],{"class":206},[186,31666,31667],{"class":532}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[186,31669,31670],{"class":532}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[169,31672,31673],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[169,31675,31676],{},"查看挂载情况：",[176,31678,31680],{"className":25281,"code":31679,"language":25283,"meta":181,"style":181},"mount | grep -i project\n",[183,31681,31682],{"__ignoreMap":181},[186,31683,31684,31687,31689,31692,31694],{"class":188,"line":189},[186,31685,31686],{"class":198},"mount",[186,31688,26568],{"class":669},[186,31690,31691],{"class":198}," grep",[186,31693,27887],{"class":206},[186,31695,31696],{"class":532}," project\n",[169,31698,31699],{},"也可以通过ls来进行查看",[1524,31701,31702],{},"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":181,"searchDepth":49,"depth":49,"links":31704},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31561,"description":181},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31711,"title":31712,"body":31713,"description":1548,"extension":1549,"meta":31717,"navigation":1551,"path":31719,"seo":31720,"stem":31721,"__hash__":31722},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31714,"toc":31715},[],{"title":181,"searchDepth":49,"depth":49,"links":31716},[],{"category":31718},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31712,"description":1548},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31724,"title":31725,"body":31726,"description":1548,"extension":1549,"meta":31730,"navigation":1551,"path":31731,"seo":31732,"stem":31733,"__hash__":31734},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31727,"toc":31728},[],{"title":181,"searchDepth":49,"depth":49,"links":31729},[],{"category":31718},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31725,"description":1548},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31736,"title":31737,"body":31738,"description":1548,"extension":1549,"meta":32031,"navigation":1551,"path":32032,"seo":32033,"stem":32034,"__hash__":32035},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31739,"toc":32029},[31740,31743,31751,31766,31771,31822,31825,31831,32018,32023,32026],[10,31741,31737],{"id":31742},"_1验证深度学习环境",[169,31744,31745,31746],{},"关于环境的安装，看",[948,31747,31750],{"href":31748,"rel":31749},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[952],"Pytorch-->深度学习",[169,31752,31753,31754,31757,31758,31761,31762,31765],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[183,31755,31756],{},"pytorch-cuda=12.4"," 是一个“ ",[54,31759,31760],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[54,31763,31764],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[169,31767,31768],{},[164,31769],{"alt":181,"src":31770},"\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",[176,31772,31774],{"className":25281,"code":31773,"language":25283,"meta":181,"style":181},"# 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",[183,31775,31776,31781],{"__ignoreMap":181},[186,31777,31778],{"class":188,"line":189},[186,31779,31780],{"class":192},"# CUDA 12.4\n",[186,31782,31783,31786,31788,31791,31794,31797,31800,31803,31805,31808,31811,31814,31817,31819],{"class":188,"line":49},[186,31784,31785],{"class":198},"conda",[186,31787,25293],{"class":532},[186,31789,31790],{"class":532}," pytorch==",[186,31792,31793],{"class":206},"2.5.1",[186,31795,31796],{"class":532}," torchvision==",[186,31798,31799],{"class":206},"0.20.1",[186,31801,31802],{"class":532}," torchaudio==",[186,31804,31793],{"class":206},[186,31806,31807],{"class":532}," pytorch-cuda=",[186,31809,31810],{"class":206},"12.4",[186,31812,31813],{"class":206}," -c",[186,31815,31816],{"class":532}," pytorch",[186,31818,31813],{"class":206},[186,31820,31821],{"class":532}," nvidia\n",[169,31823,31824],{},"）：",[169,31826,31827],{},[948,31828,31829],{"href":31829,"rel":31830},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[952],[176,31832,31836],{"className":31833,"code":31834,"language":31835,"meta":181,"style":181},"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",[183,31837,31838,31843,31851,31856,31866,31882,31887,31897,31934,31941,31953,31969,31974,31984,31996,32006],{"__ignoreMap":181},[186,31839,31840],{"class":188,"line":189},[186,31841,31842],{"class":192},"# 对深度学习环境进行测试\n",[186,31844,31845,31848],{"class":188,"line":49},[186,31846,31847],{"class":669},"import",[186,31849,31850],{"class":202}," torch\n",[186,31852,31853],{"class":188,"line":219},[186,31854,31855],{"class":192},"# 查看cuda是否被激活\n",[186,31857,31858,31861,31863],{"class":188,"line":225},[186,31859,31860],{"class":202},"flag",[186,31862,529],{"class":669},[186,31864,31865],{"class":202},"torch.cuda.is_available()\n",[186,31867,31868,31871,31873,31876,31879],{"class":188,"line":242},[186,31869,31870],{"class":206},"print",[186,31872,832],{"class":202},[186,31874,31875],{"class":532},"\"cuda:\"",[186,31877,31878],{"class":202},", flag)   ",[186,31880,31881],{"class":192},"#返回true的话说明被激活\n",[186,31883,31884],{"class":188,"line":248},[186,31885,31886],{"class":192},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[186,31888,31889,31892,31894],{"class":188,"line":265},[186,31890,31891],{"class":202},"ngpu",[186,31893,529],{"class":669},[186,31895,31896],{"class":206},"1\n",[186,31898,31899,31902,31904,31907,31910,31912,31915,31918,31921,31923,31925,31927,31929,31932],{"class":188,"line":271},[186,31900,31901],{"class":202},"device",[186,31903,529],{"class":669},[186,31905,31906],{"class":202},"torch.device(",[186,31908,31909],{"class":532},"\"cuda:0\"",[186,31911,3172],{"class":669},[186,31913,31914],{"class":202},"(torch.cuda.is_available() ",[186,31916,31917],{"class":669},"and",[186,31919,31920],{"class":202}," ngpu",[186,31922,2567],{"class":669},[186,31924,1803],{"class":206},[186,31926,839],{"class":202},[186,31928,3169],{"class":669},[186,31930,31931],{"class":532}," \"cpu\"",[186,31933,1629],{"class":202},[186,31935,31936,31938],{"class":188,"line":288},[186,31937,31870],{"class":206},[186,31939,31940],{"class":202},"(device)\n",[186,31942,31943,31945,31948,31950],{"class":188,"line":294},[186,31944,31870],{"class":206},[186,31946,31947],{"class":202},"(torch.cuda.get_device_name(",[186,31949,1803],{"class":206},[186,31951,31952],{"class":202},"))\n",[186,31954,31955,31957,31960,31962,31964,31966],{"class":188,"line":1212},[186,31956,31870],{"class":206},[186,31958,31959],{"class":202},"(torch.rand(",[186,31961,1691],{"class":206},[186,31963,1988],{"class":202},[186,31965,1691],{"class":206},[186,31967,31968],{"class":202},").cuda())\n",[186,31970,31971],{"class":188,"line":1223},[186,31972,31973],{"class":192},"# 查看cuda和cudnn的版本\n",[186,31975,31976,31979,31981],{"class":188,"line":1236},[186,31977,31978],{"class":202},"cuda_version",[186,31980,529],{"class":669},[186,31982,31983],{"class":202},"torch.version.cuda\n",[186,31985,31986,31988,31990,31993],{"class":188,"line":3096},[186,31987,31870],{"class":206},[186,31989,832],{"class":202},[186,31991,31992],{"class":532},"\"cuda version\"",[186,31994,31995],{"class":202},",cuda_version)\n",[186,31997,31998,32001,32003],{"class":188,"line":3110},[186,31999,32000],{"class":202},"cudnn_version",[186,32002,529],{"class":669},[186,32004,32005],{"class":202},"torch.backends.cudnn.version()\n",[186,32007,32008,32010,32012,32015],{"class":188,"line":3115},[186,32009,31870],{"class":206},[186,32011,832],{"class":202},[186,32013,32014],{"class":532},"\"cudnn version\"",[186,32016,32017],{"class":202},",cudnn_version)\n",[169,32019,32020],{},[164,32021],{"alt":181,"src":32022},"\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",[169,32024,32025],{},"cuda:0 指的是一块显卡",[1524,32027,32028],{},"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":181,"searchDepth":49,"depth":49,"links":32030},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31737,"description":1548},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32037,"title":32038,"body":32039,"description":1548,"extension":1549,"meta":51842,"navigation":1551,"path":51843,"seo":51844,"stem":51845,"__hash__":51846},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32040,"toc":51836},[32041,32044,32048,32052,32055,32060,32065,32068,32073,32078,32083,32086,32090,32095,32099,32104,32107,32112,32115,32118,32121,32124,32129,32132,32137,32142,32147,32152,32155,32159,32162,32167,32771,32776,32779,32784,32787,32790,33254,33257,33260,33263,33266,35317,35320,35325,35330,36125,36128,36133,36911,36915,38574,38578,39292,39296,39300,39305,39310,39315,39318,39323,39328,39333,39338,39343,39347,39352,40633,40638,40641,40644,40647,40802,40805,40808,42024,42029,42724,42728,42732,42737,42742,42745,42750,42755,42760,42765,42770,42775,42780,42785,42790,42795,42800,42805,42810,42815,42820,42825,42830,42835,42840,42845,42850,42855,42860,42865,42870,42875,42880,42885,42890,42895,42899,42903,42906,44384,44388,46035,46039,46733,46737,46740,46743,47287,47290,47294,47297,48694,48698,48701,49279,51066,51070,51073,51833],[10,32042,32038],{"id":32043},"_2经典神经网络",[29,32045,32047],{"id":32046},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23459,32049,32051],{"id":32050},"_211原理介绍","2.1.1.原理介绍",[169,32053,32054],{},"LeNet-5",[34,32056,32057],{},[22,32058,32059],{},"原理",[169,32061,32062],{},[164,32063],{"alt":181,"src":32064},"\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",[169,32066,32067],{},"B是batch批次；C是channel通道",[34,32069,32070],{"start":49},[22,32071,32072],{},"网络参数详细",[169,32074,32075],{},[164,32076],{"alt":181,"src":32077},"\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",[169,32079,32080],{},[164,32081],{"alt":181,"src":32082},"\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",[169,32084,32085],{},"AlexNet",[34,32087,32088],{},[22,32089,32059],{},[169,32091,32092],{},[164,32093],{"alt":181,"src":32094},"\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",[34,32096,32097],{"start":49},[22,32098,32072],{},[169,32100,32101],{},[164,32102],{"alt":181,"src":32103},"\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",[169,32105,32106],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[169,32108,32109],{},[164,32110],{"alt":181,"src":32111},"\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",[169,32113,32114],{},"数据处理中的图像增强操作:",[169,32116,32117],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[169,32119,32120],{},"①增加数据量，保证训练数据充足；②防止过拟合",[169,32122,32123],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[169,32125,32126],{},[164,32127],{"alt":181,"src":32128},"\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",[169,32130,32131],{},"提升网络精确度的方法：LRN正则化",[169,32133,32134],{},[164,32135],{"alt":181,"src":32136},"\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",[169,32138,32139],{},[164,32140],{"alt":181,"src":32141},"\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",[34,32143,32144],{"start":219},[22,32145,32146],{},"AlexNet的总结",[169,32148,32149],{},[164,32150],{"alt":181,"src":32151},"\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",[169,32153,32154],{},"比LeNet模型要深一丢丢",[23459,32156,32158],{"id":32157},"_212代码实现","2.1.2.代码实现",[169,32160,32161],{},"（1）LeNet",[34,32163,32164],{},[22,32165,32166],{},"模型搭建",[176,32168,32170],{"className":31833,"code":32169,"language":31835,"meta":181,"style":181},"# 导入库\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",[183,32171,32172,32177,32183,32188,32201,32206,32218,32222,32242,32247,32252,32263,32268,32287,32291,32296,32345,32357,32362,32391,32426,32453,32458,32470,32475,32495,32514,32533,32537,32542,32552,32569,32580,32595,32606,32617,32632,32647,32658,32665,32669,32683,32688,32711,32716,32721,32726,32730,32735,32740,32750],{"__ignoreMap":181},[186,32173,32174],{"class":188,"line":189},[186,32175,32176],{"class":192},"# 导入库\n",[186,32178,32179,32181],{"class":188,"line":49},[186,32180,31847],{"class":669},[186,32182,31850],{"class":202},[186,32184,32185],{"class":188,"line":219},[186,32186,32187],{"class":192},"# 导入神经网络层\n",[186,32189,32190,32193,32196,32198],{"class":188,"line":225},[186,32191,32192],{"class":669},"from",[186,32194,32195],{"class":202}," torch ",[186,32197,31847],{"class":669},[186,32199,32200],{"class":202}," nn\n",[186,32202,32203],{"class":188,"line":242},[186,32204,32205],{"class":192},"# 导入展示神经网络参数的包\n",[186,32207,32208,32210,32213,32215],{"class":188,"line":248},[186,32209,32192],{"class":669},[186,32211,32212],{"class":202}," torchsummary ",[186,32214,31847],{"class":669},[186,32216,32217],{"class":202}," summary\n",[186,32219,32220],{"class":188,"line":265},[186,32221,3867],{"emptyLinePlaceholder":1551},[186,32223,32224,32226,32229,32231,32234,32236,32239],{"class":188,"line":271},[186,32225,16156],{"class":669},[186,32227,32228],{"class":198}," LeNet",[186,32230,832],{"class":202},[186,32232,32233],{"class":198},"nn",[186,32235,2168],{"class":202},[186,32237,32238],{"class":198},"Module",[186,32240,32241],{"class":202},"):\n",[186,32243,32244],{"class":188,"line":288},[186,32245,32246],{"class":192},"    # 模型初始化:\n",[186,32248,32249],{"class":188,"line":294},[186,32250,32251],{"class":192},"    # 定义一些网络层和激活函数\n",[186,32253,32254,32257,32260],{"class":188,"line":1212},[186,32255,32256],{"class":669},"    def",[186,32258,32259],{"class":206}," __init__",[186,32261,32262],{"class":202},"(self):\n",[186,32264,32265],{"class":188,"line":1223},[186,32266,32267],{"class":192},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[186,32269,32270,32273,32276,32279,32282,32285],{"class":188,"line":1236},[186,32271,32272],{"class":206},"        super",[186,32274,32275],{"class":202},"(LeNet,",[186,32277,32278],{"class":206},"self",[186,32280,32281],{"class":202},").",[186,32283,32284],{"class":206},"__init__",[186,32286,3443],{"class":202},[186,32288,32289],{"class":188,"line":3096},[186,32290,3867],{"emptyLinePlaceholder":1551},[186,32292,32293],{"class":188,"line":3110},[186,32294,32295],{"class":192},"        # 定义网络层\n",[186,32297,32298,32301,32304,32306,32309,32312,32314,32316,32318,32321,32323,32325,32327,32330,32332,32334,32336,32339,32341,32343],{"class":188,"line":3115},[186,32299,32300],{"class":206},"        self",[186,32302,32303],{"class":202},".c1",[186,32305,529],{"class":669},[186,32307,32308],{"class":202},"nn.Conv2d(",[186,32310,32311],{"class":835},"in_channels",[186,32313,529],{"class":669},[186,32315,1829],{"class":206},[186,32317,1988],{"class":202},[186,32319,32320],{"class":835},"out_channels",[186,32322,529],{"class":669},[186,32324,1954],{"class":206},[186,32326,1988],{"class":202},[186,32328,32329],{"class":835},"kernel_size",[186,32331,529],{"class":669},[186,32333,1930],{"class":206},[186,32335,1988],{"class":202},[186,32337,32338],{"class":835},"padding",[186,32340,529],{"class":669},[186,32342,1697],{"class":206},[186,32344,1629],{"class":202},[186,32346,32347,32349,32352,32354],{"class":188,"line":3121},[186,32348,32300],{"class":206},[186,32350,32351],{"class":202},".sig",[186,32353,529],{"class":669},[186,32355,32356],{"class":202},"nn.Sigmoid()\n",[186,32358,32359],{"class":188,"line":3142},[186,32360,32361],{"class":192},"        # 定义池化\n",[186,32363,32364,32366,32369,32371,32374,32376,32378,32380,32382,32385,32387,32389],{"class":188,"line":3147},[186,32365,32300],{"class":206},[186,32367,32368],{"class":202},".s2",[186,32370,529],{"class":669},[186,32372,32373],{"class":202},"nn.AvgPool2d(",[186,32375,32329],{"class":835},[186,32377,529],{"class":669},[186,32379,1697],{"class":206},[186,32381,1988],{"class":202},[186,32383,32384],{"class":835},"stride",[186,32386,529],{"class":669},[186,32388,1697],{"class":206},[186,32390,1629],{"class":202},[186,32392,32393,32395,32398,32400,32402,32404,32406,32408,32410,32412,32414,32416,32418,32420,32422,32424],{"class":188,"line":3161},[186,32394,32300],{"class":206},[186,32396,32397],{"class":202},".c3",[186,32399,529],{"class":669},[186,32401,32308],{"class":202},[186,32403,32311],{"class":835},[186,32405,529],{"class":669},[186,32407,1954],{"class":206},[186,32409,1988],{"class":202},[186,32411,32320],{"class":835},[186,32413,529],{"class":669},[186,32415,2211],{"class":206},[186,32417,1988],{"class":202},[186,32419,32329],{"class":835},[186,32421,529],{"class":669},[186,32423,1930],{"class":206},[186,32425,1629],{"class":202},[186,32427,32428,32430,32433,32435,32437,32439,32441,32443,32445,32447,32449,32451],{"class":188,"line":3166},[186,32429,32300],{"class":206},[186,32431,32432],{"class":202},".s4",[186,32434,529],{"class":669},[186,32436,32373],{"class":202},[186,32438,32329],{"class":835},[186,32440,529],{"class":669},[186,32442,1697],{"class":206},[186,32444,1988],{"class":202},[186,32446,32384],{"class":835},[186,32448,529],{"class":669},[186,32450,1697],{"class":206},[186,32452,1629],{"class":202},[186,32454,32455],{"class":188,"line":3195},[186,32456,32457],{"class":192},"        # 定义平展层\n",[186,32459,32460,32462,32465,32467],{"class":188,"line":3200},[186,32461,32300],{"class":206},[186,32463,32464],{"class":202},".flatten",[186,32466,529],{"class":669},[186,32468,32469],{"class":202},"nn.Flatten()\n",[186,32471,32472],{"class":188,"line":3217},[186,32473,32474],{"class":192},"        # 定义全连接层\n",[186,32476,32477,32479,32482,32484,32487,32489,32491,32493],{"class":188,"line":3222},[186,32478,32300],{"class":206},[186,32480,32481],{"class":202},".f5",[186,32483,529],{"class":669},[186,32485,32486],{"class":202},"nn.Linear(",[186,32488,5453],{"class":206},[186,32490,1988],{"class":202},[186,32492,2425],{"class":206},[186,32494,1629],{"class":202},[186,32496,32497,32499,32502,32504,32506,32508,32510,32512],{"class":188,"line":3227},[186,32498,32300],{"class":206},[186,32500,32501],{"class":202},".f6",[186,32503,529],{"class":669},[186,32505,32486],{"class":202},[186,32507,2425],{"class":206},[186,32509,1988],{"class":202},[186,32511,2319],{"class":206},[186,32513,1629],{"class":202},[186,32515,32516,32518,32521,32523,32525,32527,32529,32531],{"class":188,"line":3232},[186,32517,32300],{"class":206},[186,32519,32520],{"class":202},".f7",[186,32522,529],{"class":669},[186,32524,32486],{"class":202},[186,32526,2319],{"class":206},[186,32528,1988],{"class":202},[186,32530,2056],{"class":206},[186,32532,1629],{"class":202},[186,32534,32535],{"class":188,"line":3246},[186,32536,3867],{"emptyLinePlaceholder":1551},[186,32538,32539],{"class":188,"line":3251},[186,32540,32541],{"class":192},"    # 写工具->写前向传播\n",[186,32543,32544,32546,32549],{"class":188,"line":4044},[186,32545,32256],{"class":669},[186,32547,32548],{"class":198}," forward",[186,32550,32551],{"class":202},"(self,x):\n",[186,32553,32554,32557,32559,32561,32564,32566],{"class":188,"line":4058},[186,32555,32556],{"class":202},"        x",[186,32558,529],{"class":669},[186,32560,32278],{"class":206},[186,32562,32563],{"class":202},".sig(",[186,32565,32278],{"class":206},[186,32567,32568],{"class":202},".c1(x))\n",[186,32570,32571,32573,32575,32577],{"class":188,"line":4066},[186,32572,32556],{"class":202},[186,32574,529],{"class":669},[186,32576,32278],{"class":206},[186,32578,32579],{"class":202},".s2(x)\n",[186,32581,32582,32584,32586,32588,32590,32592],{"class":188,"line":4071},[186,32583,32556],{"class":202},[186,32585,529],{"class":669},[186,32587,32278],{"class":206},[186,32589,32563],{"class":202},[186,32591,32278],{"class":206},[186,32593,32594],{"class":202},".c3(x))\n",[186,32596,32597,32599,32601,32603],{"class":188,"line":4077},[186,32598,32556],{"class":202},[186,32600,529],{"class":669},[186,32602,32278],{"class":206},[186,32604,32605],{"class":202},".s4(x)\n",[186,32607,32608,32610,32612,32614],{"class":188,"line":4083},[186,32609,32556],{"class":202},[186,32611,529],{"class":669},[186,32613,32278],{"class":206},[186,32615,32616],{"class":202},".flatten(x)\n",[186,32618,32619,32621,32623,32625,32627,32629],{"class":188,"line":4088},[186,32620,32556],{"class":202},[186,32622,529],{"class":669},[186,32624,32278],{"class":206},[186,32626,32563],{"class":202},[186,32628,32278],{"class":206},[186,32630,32631],{"class":202},".f5(x))\n",[186,32633,32634,32636,32638,32640,32642,32644],{"class":188,"line":9411},[186,32635,32556],{"class":202},[186,32637,529],{"class":669},[186,32639,32278],{"class":206},[186,32641,32563],{"class":202},[186,32643,32278],{"class":206},[186,32645,32646],{"class":202},".f6(x))\n",[186,32648,32649,32651,32653,32655],{"class":188,"line":9435},[186,32650,32556],{"class":202},[186,32652,529],{"class":669},[186,32654,32278],{"class":206},[186,32656,32657],{"class":202},".f7(x)\n",[186,32659,32660,32662],{"class":188,"line":9440},[186,32661,16214],{"class":669},[186,32663,32664],{"class":202}," x\n",[186,32666,32667],{"class":188,"line":9446},[186,32668,3867],{"emptyLinePlaceholder":1551},[186,32670,32671,32673,32676,32678,32681],{"class":188,"line":9473},[186,32672,3003],{"class":669},[186,32674,32675],{"class":206}," __name__",[186,32677,4415],{"class":669},[186,32679,32680],{"class":532},"\"__main__\"",[186,32682,5205],{"class":202},[186,32684,32685],{"class":188,"line":9478},[186,32686,32687],{"class":192},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[186,32689,32690,32693,32695,32697,32700,32702,32705,32707,32709],{"class":188,"line":9484},[186,32691,32692],{"class":202},"    device",[186,32694,529],{"class":669},[186,32696,31906],{"class":202},[186,32698,32699],{"class":532},"\"cuda\"",[186,32701,3172],{"class":669},[186,32703,32704],{"class":202}," torch.cuda.is_available() ",[186,32706,3169],{"class":669},[186,32708,31931],{"class":532},[186,32710,1629],{"class":202},[186,32712,32713],{"class":188,"line":9496},[186,32714,32715],{"class":192},"    # 如果就是想指定用cpu用下方代码:\n",[186,32717,32718],{"class":188,"line":9508},[186,32719,32720],{"class":192},"    # device=\"cpu\"\n",[186,32722,32723],{"class":188,"line":9520},[186,32724,32725],{"class":192},"    # print(device)\n",[186,32727,32728],{"class":188,"line":11179},[186,32729,3867],{"emptyLinePlaceholder":1551},[186,32731,32732],{"class":188,"line":11204},[186,32733,32734],{"class":192},"    # 实例化模型\n",[186,32736,32737],{"class":188,"line":11227},[186,32738,32739],{"class":192},"    # 将模型放到设备中去运行\n",[186,32741,32742,32745,32747],{"class":188,"line":11251},[186,32743,32744],{"class":202},"    model",[186,32746,529],{"class":669},[186,32748,32749],{"class":202},"LeNet().to(device)\n",[186,32751,32752,32755,32758,32760,32762,32764,32766,32768],{"class":188,"line":11256},[186,32753,32754],{"class":206},"    print",[186,32756,32757],{"class":202},"(summary(model,(",[186,32759,1829],{"class":206},[186,32761,1988],{"class":202},[186,32763,2509],{"class":206},[186,32765,1988],{"class":202},[186,32767,2509],{"class":206},[186,32769,32770],{"class":202},")))\n",[169,32772,32773],{},[164,32774],{"alt":181,"src":32775},"\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",[169,32777,32778],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[34,32780,32781],{"start":49},[22,32782,32783],{},"训练",[169,32785,32786],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[169,32788,32789],{},"在训练之前可以将数据展示看一下",[176,32791,32793],{"className":31833,"code":32792,"language":31835,"meta":181,"style":181},"# 建立画图的函数，用于展示数据\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",[183,32794,32795,32800,32805,32817,32829,32842,32847,32859,32864,32876,32881,32893,32897,32901,32922,32934,32939,32960,32971,32975,32980,32998,33009,33014,33025,33030,33041,33045,33050,33065,33078,33083,33088,33101,33114,33127,33132,33136,33141,33161,33178,33198,33211,33224,33234,33249],{"__ignoreMap":181},[186,32796,32797],{"class":188,"line":189},[186,32798,32799],{"class":192},"# 建立画图的函数，用于展示数据\n",[186,32801,32802],{"class":188,"line":49},[186,32803,32804],{"class":192},"# torchvision中包含很多内置的数据集\n",[186,32806,32807,32809,32812,32814],{"class":188,"line":219},[186,32808,32192],{"class":669},[186,32810,32811],{"class":202}," sklearn.externals.array_api_compat.torch ",[186,32813,31847],{"class":669},[186,32815,32816],{"class":202}," squeeze\n",[186,32818,32819,32821,32824,32826],{"class":188,"line":225},[186,32820,32192],{"class":669},[186,32822,32823],{"class":202}," torchvision.datasets ",[186,32825,31847],{"class":669},[186,32827,32828],{"class":202}," FashionMNIST\n",[186,32830,32831,32833,32836,32839],{"class":188,"line":242},[186,32832,31847],{"class":669},[186,32834,32835],{"class":202}," numpy ",[186,32837,32838],{"class":669},"as",[186,32840,32841],{"class":202}," np\n",[186,32843,32844],{"class":188,"line":248},[186,32845,32846],{"class":192},"# 引入处理数据集的包\n",[186,32848,32849,32851,32854,32856],{"class":188,"line":265},[186,32850,32192],{"class":669},[186,32852,32853],{"class":202}," torchvision ",[186,32855,31847],{"class":669},[186,32857,32858],{"class":202}," transforms\n",[186,32860,32861],{"class":188,"line":271},[186,32862,32863],{"class":192},"# 从torch库中引入数据处理的包\n",[186,32865,32866,32868,32871,32873],{"class":188,"line":288},[186,32867,31847],{"class":669},[186,32869,32870],{"class":202}," torch.utils.data ",[186,32872,32838],{"class":669},[186,32874,32875],{"class":202}," Data\n",[186,32877,32878],{"class":188,"line":294},[186,32879,32880],{"class":192},"# 导入画图的库\n",[186,32882,32883,32885,32888,32890],{"class":188,"line":1212},[186,32884,31847],{"class":669},[186,32886,32887],{"class":202}," matplotlib.pyplot ",[186,32889,32838],{"class":669},[186,32891,32892],{"class":202}," plt\n",[186,32894,32895],{"class":188,"line":1223},[186,32896,3867],{"emptyLinePlaceholder":1551},[186,32898,32899],{"class":188,"line":1236},[186,32900,3867],{"emptyLinePlaceholder":1551},[186,32902,32903,32906,32908,32911,32914,32916,32919],{"class":188,"line":3096},[186,32904,32905],{"class":202},"train_data",[186,32907,529],{"class":669},[186,32909,32910],{"class":202},"FashionMNIST(",[186,32912,32913],{"class":835},"root",[186,32915,529],{"class":669},[186,32917,32918],{"class":532},"'.\u002Fdata'",[186,32920,32921],{"class":202},",\n",[186,32923,32924,32927,32929,32932],{"class":188,"line":3110},[186,32925,32926],{"class":835},"                        train",[186,32928,529],{"class":669},[186,32930,32931],{"class":206},"True",[186,32933,32921],{"class":202},[186,32935,32936],{"class":188,"line":3115},[186,32937,32938],{"class":192},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[186,32940,32941,32944,32946,32949,32952,32954,32957],{"class":188,"line":3121},[186,32942,32943],{"class":835},"                        transform",[186,32945,529],{"class":669},[186,32947,32948],{"class":202},"transforms.Compose([transforms.Resize(",[186,32950,32951],{"class":835},"size",[186,32953,529],{"class":669},[186,32955,32956],{"class":206},"224",[186,32958,32959],{"class":202},"),transforms.ToTensor()]),\n",[186,32961,32962,32965,32967,32969],{"class":188,"line":3142},[186,32963,32964],{"class":835},"                        download",[186,32966,529],{"class":669},[186,32968,32931],{"class":206},[186,32970,1629],{"class":202},[186,32972,32973],{"class":188,"line":3147},[186,32974,3867],{"emptyLinePlaceholder":1551},[186,32976,32977],{"class":188,"line":3161},[186,32978,32979],{"class":192},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[186,32981,32982,32985,32987,32990,32993,32995],{"class":188,"line":3166},[186,32983,32984],{"class":202},"train_loader",[186,32986,529],{"class":669},[186,32988,32989],{"class":202},"Data.DataLoader(",[186,32991,32992],{"class":835},"dataset",[186,32994,529],{"class":669},[186,32996,32997],{"class":202},"train_data,\n",[186,32999,33000,33003,33005,33007],{"class":188,"line":3195},[186,33001,33002],{"class":835},"                             batch_size",[186,33004,529],{"class":669},[186,33006,1815],{"class":206},[186,33008,32921],{"class":202},[186,33010,33011],{"class":188,"line":3200},[186,33012,33013],{"class":192},"                             # 数据是否打乱\n",[186,33015,33016,33019,33021,33023],{"class":188,"line":3217},[186,33017,33018],{"class":835},"                             shuffle",[186,33020,529],{"class":669},[186,33022,32931],{"class":206},[186,33024,32921],{"class":202},[186,33026,33027],{"class":188,"line":3222},[186,33028,33029],{"class":192},"                             # 规定加载数据的进程\n",[186,33031,33032,33035,33037,33039],{"class":188,"line":3227},[186,33033,33034],{"class":835},"                             num_workers",[186,33036,529],{"class":669},[186,33038,1803],{"class":206},[186,33040,1629],{"class":202},[186,33042,33043],{"class":188,"line":3232},[186,33044,3867],{"emptyLinePlaceholder":1551},[186,33046,33047],{"class":188,"line":3246},[186,33048,33049],{"class":192},"# 获得一个batch的数据\n",[186,33051,33052,33054,33057,33059,33062],{"class":188,"line":3251},[186,33053,4491],{"class":669},[186,33055,33056],{"class":202}," step,(b_x,b_y) ",[186,33058,27500],{"class":669},[186,33060,33061],{"class":206}," enumerate",[186,33063,33064],{"class":202},"(train_loader):\n",[186,33066,33067,33069,33072,33074,33076],{"class":188,"line":4044},[186,33068,4567],{"class":669},[186,33070,33071],{"class":202}," step ",[186,33073,2567],{"class":669},[186,33075,5559],{"class":206},[186,33077,5205],{"class":202},[186,33079,33080],{"class":188,"line":4058},[186,33081,33082],{"class":669},"        break\n",[186,33084,33085],{"class":188,"line":4066},[186,33086,33087],{"class":192},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[186,33089,33090,33093,33095,33098],{"class":188,"line":4071},[186,33091,33092],{"class":202},"batch_x",[186,33094,529],{"class":669},[186,33096,33097],{"class":202},"b_x.squeeze().numpy()  ",[186,33099,33100],{"class":192},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[186,33102,33103,33106,33108,33111],{"class":188,"line":4077},[186,33104,33105],{"class":202},"batch_y",[186,33107,529],{"class":669},[186,33109,33110],{"class":202},"b_y.numpy()   ",[186,33112,33113],{"class":192},"#将张量转换成功numpy数组\n",[186,33115,33116,33119,33121,33124],{"class":188,"line":4083},[186,33117,33118],{"class":202},"class_label",[186,33120,529],{"class":669},[186,33122,33123],{"class":202},"train_data.classes  ",[186,33125,33126],{"class":192},"#训练集标签\n",[186,33128,33129],{"class":188,"line":4088},[186,33130,33131],{"class":192},"# print(class_label)\n",[186,33133,33134],{"class":188,"line":9411},[186,33135,3867],{"emptyLinePlaceholder":1551},[186,33137,33138],{"class":188,"line":9435},[186,33139,33140],{"class":192},"# 可视化一个batch的图像\n",[186,33142,33143,33146,33149,33151,33153,33155,33157,33159],{"class":188,"line":9440},[186,33144,33145],{"class":202},"plt.figure(",[186,33147,33148],{"class":835},"figsize",[186,33150,529],{"class":669},[186,33152,832],{"class":202},[186,33154,2108],{"class":206},[186,33156,1988],{"class":202},[186,33158,1930],{"class":206},[186,33160,31952],{"class":202},[186,33162,33163,33165,33168,33170,33173,33175],{"class":188,"line":9446},[186,33164,4491],{"class":669},[186,33166,33167],{"class":202}," ii ",[186,33169,27500],{"class":669},[186,33171,33172],{"class":202}," np.arange(",[186,33174,8821],{"class":206},[186,33176,33177],{"class":202},"(batch_y)):\n",[186,33179,33180,33183,33185,33187,33189,33192,33194,33196],{"class":188,"line":9473},[186,33181,33182],{"class":202},"    plt.subplot(",[186,33184,1904],{"class":206},[186,33186,1988],{"class":202},[186,33188,2211],{"class":206},[186,33190,33191],{"class":202},",ii ",[186,33193,2091],{"class":669},[186,33195,26577],{"class":206},[186,33197,1629],{"class":202},[186,33199,33200,33203,33206,33208],{"class":188,"line":9478},[186,33201,33202],{"class":202},"    plt.imshow(batch_x[ii,:,:],",[186,33204,33205],{"class":835},"cmap",[186,33207,529],{"class":669},[186,33209,33210],{"class":202},"plt.cm.gray)\n",[186,33212,33213,33216,33218,33220,33222],{"class":188,"line":9484},[186,33214,33215],{"class":202},"    plt.title(class_label[batch_y[ii]],",[186,33217,32951],{"class":835},[186,33219,529],{"class":669},[186,33221,2056],{"class":206},[186,33223,1629],{"class":202},[186,33225,33226,33229,33232],{"class":188,"line":9496},[186,33227,33228],{"class":202},"    plt.axis(",[186,33230,33231],{"class":532},"\"off\"",[186,33233,1629],{"class":202},[186,33235,33236,33239,33242,33244,33247],{"class":188,"line":9508},[186,33237,33238],{"class":202},"    plt.subplots_adjust(",[186,33240,33241],{"class":835},"wspace",[186,33243,529],{"class":669},[186,33245,33246],{"class":206},"0.05",[186,33248,1629],{"class":202},[186,33250,33251],{"class":188,"line":9520},[186,33252,33253],{"class":202},"plt.show()\n",[169,33255,33256],{},"用matplotlib进行展示的过程可以后续再补",[169,33258,33259],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[169,33261,33262],{},"训练次数就是按照批次过整个训练集数据的次数",[169,33264,33265],{},"模型训练：",[176,33267,33269],{"className":31833,"code":33268,"language":31835,"meta":181,"style":181},"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",[183,33270,33271,33278,33285,33289,33301,33307,33318,33328,33338,33348,33358,33363,33375,33385,33389,33393,33398,33409,33422,33433,33450,33461,33500,33516,33528,33539,33544,33555,33571,33582,33593,33604,33611,33615,33620,33625,33629,33634,33644,33665,33669,33673,33678,33683,33688,33708,33712,33717,33727,33731,33736,33745,33750,33755,33760,33770,33774,33778,33783,33788,33798,33803,33813,33818,33827,33832,33841,33846,33855,33859,33864,33874,33878,33882,33887,33902,33930,33945,33949,33954,33959,33968,33973,33982,33987,33996,34001,34010,34015,34024,34029,34038,34043,34056,34061,34071,34076,34086,34092,34098,34104,34110,34121,34127,34147,34153,34164,34170,34176,34182,34188,34194,34200,34206,34226,34232,34248,34254,34268,34274,34289,34295,34304,34310,34319,34325,34331,34340,34346,34357,34363,34382,34388,34399,34405,34425,34441,34447,34461,34467,34473,34484,34490,34496,34506,34512,34523,34529,34539,34544,34550,34599,34646,34651,34657,34676,34682,34702,34708,34714,34724,34729,34735,34751,34796,34802,34808,34814,34825,34831,34837,34843,34861,34875,34884,34893,34902,34911,34917,34923,34931,34936,34942,34953,34959,34979,34985,34991,34997,35014,35020,35026,35032,35038,35044,35071,35095,35101,35107,35113,35124,35135,35141,35158,35181,35204,35210,35215,35224,35234,35240,35245,35251,35264,35270,35281,35292,35311],{"__ignoreMap":181},[186,33272,33273,33275],{"class":188,"line":189},[186,33274,31847],{"class":669},[186,33276,33277],{"class":202}," copy\n",[186,33279,33280,33282],{"class":188,"line":49},[186,33281,31847],{"class":669},[186,33283,33284],{"class":202}," time\n",[186,33286,33287],{"class":188,"line":219},[186,33288,3867],{"emptyLinePlaceholder":1551},[186,33290,33291,33293,33296,33298],{"class":188,"line":225},[186,33292,31847],{"class":669},[186,33294,33295],{"class":202}," pandas ",[186,33297,32838],{"class":669},[186,33299,33300],{"class":202}," pd\n",[186,33302,33303,33305],{"class":188,"line":242},[186,33304,31847],{"class":669},[186,33306,31850],{"class":202},[186,33308,33309,33311,33313,33315],{"class":188,"line":248},[186,33310,32192],{"class":669},[186,33312,32870],{"class":202},[186,33314,31847],{"class":669},[186,33316,33317],{"class":202}," Dataset\n",[186,33319,33320,33322,33324,33326],{"class":188,"line":265},[186,33321,32192],{"class":669},[186,33323,32823],{"class":202},[186,33325,31847],{"class":669},[186,33327,32828],{"class":202},[186,33329,33330,33332,33334,33336],{"class":188,"line":271},[186,33331,32192],{"class":669},[186,33333,32853],{"class":202},[186,33335,31847],{"class":669},[186,33337,32858],{"class":202},[186,33339,33340,33342,33344,33346],{"class":188,"line":288},[186,33341,31847],{"class":669},[186,33343,32870],{"class":202},[186,33345,32838],{"class":669},[186,33347,32875],{"class":202},[186,33349,33350,33352,33354,33356],{"class":188,"line":294},[186,33351,31847],{"class":669},[186,33353,32887],{"class":202},[186,33355,32838],{"class":669},[186,33357,32892],{"class":202},[186,33359,33360],{"class":188,"line":1212},[186,33361,33362],{"class":192},"# 导入模型\n",[186,33364,33365,33367,33370,33372],{"class":188,"line":1223},[186,33366,32192],{"class":669},[186,33368,33369],{"class":202}," model ",[186,33371,31847],{"class":669},[186,33373,33374],{"class":202}," LeNet\n",[186,33376,33377,33379,33381,33383],{"class":188,"line":1236},[186,33378,32192],{"class":669},[186,33380,32195],{"class":202},[186,33382,31847],{"class":669},[186,33384,32200],{"class":202},[186,33386,33387],{"class":188,"line":3096},[186,33388,3867],{"emptyLinePlaceholder":1551},[186,33390,33391],{"class":188,"line":3110},[186,33392,3867],{"emptyLinePlaceholder":1551},[186,33394,33395],{"class":188,"line":3115},[186,33396,33397],{"class":192},"# 处理训练集与验证集函数--->划分数据集\n",[186,33399,33400,33403,33406],{"class":188,"line":3121},[186,33401,33402],{"class":669},"def",[186,33404,33405],{"class":198}," train_val_data_process",[186,33407,33408],{"class":202},"():\n",[186,33410,33411,33414,33416,33418,33420],{"class":188,"line":3142},[186,33412,33413],{"class":202},"    train_data",[186,33415,529],{"class":669},[186,33417,32910],{"class":202},[186,33419,32918],{"class":532},[186,33421,32921],{"class":202},[186,33423,33424,33427,33429,33431],{"class":188,"line":3147},[186,33425,33426],{"class":835},"                            train",[186,33428,529],{"class":669},[186,33430,32931],{"class":206},[186,33432,32921],{"class":202},[186,33434,33435,33438,33440,33442,33444,33446,33448],{"class":188,"line":3161},[186,33436,33437],{"class":835},"                            transform",[186,33439,529],{"class":669},[186,33441,32948],{"class":202},[186,33443,32951],{"class":835},[186,33445,529],{"class":669},[186,33447,2509],{"class":206},[186,33449,32959],{"class":202},[186,33451,33452,33455,33457,33459],{"class":188,"line":3166},[186,33453,33454],{"class":835},"                            download",[186,33456,529],{"class":669},[186,33458,32931],{"class":206},[186,33460,1629],{"class":202},[186,33462,33463,33466,33468,33471,33474,33476,33479,33481,33483,33486,33488,33490,33493,33495,33497],{"class":188,"line":3195},[186,33464,33465],{"class":202},"    train_data,val_data",[186,33467,529],{"class":669},[186,33469,33470],{"class":202},"Data.random_split(train_data,[",[186,33472,33473],{"class":206},"round",[186,33475,832],{"class":202},[186,33477,33478],{"class":206},"0.8",[186,33480,2065],{"class":669},[186,33482,8821],{"class":206},[186,33484,33485],{"class":202},"(train_data)),",[186,33487,33473],{"class":206},[186,33489,832],{"class":202},[186,33491,33492],{"class":206},"0.2",[186,33494,2065],{"class":669},[186,33496,8821],{"class":206},[186,33498,33499],{"class":202},"(train_data))])\n",[186,33501,33502,33505,33507,33510,33512,33514],{"class":188,"line":3200},[186,33503,33504],{"class":202},"    train_dataloader ",[186,33506,529],{"class":669},[186,33508,33509],{"class":202}," Data.DataLoader(",[186,33511,32992],{"class":835},[186,33513,529],{"class":669},[186,33515,32997],{"class":202},[186,33517,33518,33521,33523,33526],{"class":188,"line":3217},[186,33519,33520],{"class":835},"                                       batch_size",[186,33522,529],{"class":669},[186,33524,33525],{"class":206},"128",[186,33527,32921],{"class":202},[186,33529,33530,33533,33535,33537],{"class":188,"line":3222},[186,33531,33532],{"class":835},"                                       shuffle",[186,33534,529],{"class":669},[186,33536,32931],{"class":206},[186,33538,32921],{"class":202},[186,33540,33541],{"class":188,"line":3227},[186,33542,33543],{"class":192},"                                       # 规定8个进程\n",[186,33545,33546,33549,33551,33553],{"class":188,"line":3232},[186,33547,33548],{"class":835},"                                       num_workers",[186,33550,529],{"class":669},[186,33552,2005],{"class":206},[186,33554,1629],{"class":202},[186,33556,33557,33560,33562,33564,33566,33568],{"class":188,"line":3246},[186,33558,33559],{"class":202},"    val_dataloader",[186,33561,529],{"class":669},[186,33563,32989],{"class":202},[186,33565,32992],{"class":835},[186,33567,529],{"class":669},[186,33569,33570],{"class":202},"val_data,\n",[186,33572,33573,33576,33578,33580],{"class":188,"line":3251},[186,33574,33575],{"class":835},"                                   batch_size",[186,33577,529],{"class":669},[186,33579,33525],{"class":206},[186,33581,32921],{"class":202},[186,33583,33584,33587,33589,33591],{"class":188,"line":4044},[186,33585,33586],{"class":835},"                                   shuffle",[186,33588,529],{"class":669},[186,33590,32931],{"class":206},[186,33592,32921],{"class":202},[186,33594,33595,33598,33600,33602],{"class":188,"line":4058},[186,33596,33597],{"class":835},"                                   num_workers",[186,33599,529],{"class":669},[186,33601,2005],{"class":206},[186,33603,1629],{"class":202},[186,33605,33606,33608],{"class":188,"line":4066},[186,33607,5556],{"class":669},[186,33609,33610],{"class":202}," train_dataloader,val_dataloader\n",[186,33612,33613],{"class":188,"line":4071},[186,33614,3867],{"emptyLinePlaceholder":1551},[186,33616,33617],{"class":188,"line":4077},[186,33618,33619],{"class":192},"# 验证是否出错\n",[186,33621,33622],{"class":188,"line":4083},[186,33623,33624],{"class":192},"# train_val_data_process()\n",[186,33626,33627],{"class":188,"line":4088},[186,33628,3867],{"emptyLinePlaceholder":1551},[186,33630,33631],{"class":188,"line":9411},[186,33632,33633],{"class":192},"# 定义模型训练函数\n",[186,33635,33636,33638,33641],{"class":188,"line":9435},[186,33637,33402],{"class":669},[186,33639,33640],{"class":198}," train_model_process",[186,33642,33643],{"class":202},"(model,train_dataloader,val_dataloader,num_epochs):\n",[186,33645,33646,33648,33650,33652,33654,33656,33658,33660,33663],{"class":188,"line":9440},[186,33647,32692],{"class":202},[186,33649,529],{"class":669},[186,33651,31906],{"class":202},[186,33653,32699],{"class":532},[186,33655,3172],{"class":669},[186,33657,32704],{"class":202},[186,33659,3169],{"class":669},[186,33661,33662],{"class":532}," 'cpu'",[186,33664,1629],{"class":202},[186,33666,33667],{"class":188,"line":9446},[186,33668,3867],{"emptyLinePlaceholder":1551},[186,33670,33671],{"class":188,"line":9473},[186,33672,3867],{"emptyLinePlaceholder":1551},[186,33674,33675],{"class":188,"line":9478},[186,33676,33677],{"class":192},"    # 定义优化器\n",[186,33679,33680],{"class":188,"line":9484},[186,33681,33682],{"class":192},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[186,33684,33685],{"class":188,"line":9496},[186,33686,33687],{"class":192},"    # lr为学习率\n",[186,33689,33690,33693,33695,33698,33701,33703,33706],{"class":188,"line":9508},[186,33691,33692],{"class":202},"    optimizer",[186,33694,529],{"class":669},[186,33696,33697],{"class":202},"torch.optim.Adam(model.parameters(),",[186,33699,33700],{"class":835},"lr",[186,33702,529],{"class":669},[186,33704,33705],{"class":206},"0.001",[186,33707,1629],{"class":202},[186,33709,33710],{"class":188,"line":9520},[186,33711,3867],{"emptyLinePlaceholder":1551},[186,33713,33714],{"class":188,"line":11179},[186,33715,33716],{"class":192},"    # 定义损失函数使用交叉熵损失函数\n",[186,33718,33719,33722,33724],{"class":188,"line":11204},[186,33720,33721],{"class":202},"    criterion",[186,33723,529],{"class":669},[186,33725,33726],{"class":202},"nn.CrossEntropyLoss()\n",[186,33728,33729],{"class":188,"line":11227},[186,33730,3867],{"emptyLinePlaceholder":1551},[186,33732,33733],{"class":188,"line":11251},[186,33734,33735],{"class":192},"    # 将模型放到GPU中进行训练\n",[186,33737,33738,33740,33742],{"class":188,"line":11256},[186,33739,32744],{"class":202},[186,33741,529],{"class":669},[186,33743,33744],{"class":202},"model.to(device)\n",[186,33746,33747],{"class":188,"line":11261},[186,33748,33749],{"class":192},"    # 复制当前模型的参数\n",[186,33751,33752],{"class":188,"line":11266},[186,33753,33754],{"class":192},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[186,33756,33757],{"class":188,"line":11275},[186,33758,33759],{"class":192},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[186,33761,33762,33765,33767],{"class":188,"line":11280},[186,33763,33764],{"class":202},"    best_model_wts",[186,33766,529],{"class":669},[186,33768,33769],{"class":202},"copy.deepcopy(model.state_dict())\n",[186,33771,33772],{"class":188,"line":11286},[186,33773,3867],{"emptyLinePlaceholder":1551},[186,33775,33776],{"class":188,"line":11307},[186,33777,3867],{"emptyLinePlaceholder":1551},[186,33779,33780],{"class":188,"line":11313},[186,33781,33782],{"class":192},"    # 初始化参数\n",[186,33784,33785],{"class":188,"line":11327},[186,33786,33787],{"class":192},"    # 最高准确度\n",[186,33789,33790,33793,33795],{"class":188,"line":11333},[186,33791,33792],{"class":202},"    best_acc",[186,33794,529],{"class":669},[186,33796,33797],{"class":206},"0.0\n",[186,33799,33800],{"class":188,"line":11360},[186,33801,33802],{"class":192},"    # 训练集损失列表\n",[186,33804,33805,33808,33810],{"class":188,"line":11369},[186,33806,33807],{"class":202},"    train_loss_all",[186,33809,529],{"class":669},[186,33811,33812],{"class":202},"[]\n",[186,33814,33815],{"class":188,"line":11375},[186,33816,33817],{"class":192},"    # 验证集函数列表\n",[186,33819,33820,33823,33825],{"class":188,"line":11383},[186,33821,33822],{"class":202},"    val_loss_all",[186,33824,529],{"class":669},[186,33826,33812],{"class":202},[186,33828,33829],{"class":188,"line":11388},[186,33830,33831],{"class":192},"    # 训练集准确度列表\n",[186,33833,33834,33837,33839],{"class":188,"line":18065},[186,33835,33836],{"class":202},"    train_acc_all",[186,33838,529],{"class":669},[186,33840,33812],{"class":202},[186,33842,33843],{"class":188,"line":18071},[186,33844,33845],{"class":192},"    # 验证集准确度列表\n",[186,33847,33848,33851,33853],{"class":188,"line":18094},[186,33849,33850],{"class":202},"    val_acc_all",[186,33852,529],{"class":669},[186,33854,33812],{"class":202},[186,33856,33857],{"class":188,"line":18100},[186,33858,3867],{"emptyLinePlaceholder":1551},[186,33860,33861],{"class":188,"line":18123},[186,33862,33863],{"class":192},"    # 保存当前时间--->方便看每轮训练的时间\n",[186,33865,33866,33869,33871],{"class":188,"line":18137},[186,33867,33868],{"class":202},"    since",[186,33870,529],{"class":669},[186,33872,33873],{"class":202},"time.time()\n",[186,33875,33876],{"class":188,"line":18157},[186,33877,3867],{"emptyLinePlaceholder":1551},[186,33879,33880],{"class":188,"line":18163},[186,33881,3867],{"emptyLinePlaceholder":1551},[186,33883,33884],{"class":188,"line":18174},[186,33885,33886],{"class":192},"    # 准备工作完成--->开始训练模型\n",[186,33888,33889,33891,33894,33896,33899],{"class":188,"line":18197},[186,33890,4667],{"class":669},[186,33892,33893],{"class":202}," epoch ",[186,33895,27500],{"class":669},[186,33897,33898],{"class":206}," range",[186,33900,33901],{"class":202},"(num_epochs):\n",[186,33903,33904,33907,33909,33912,33915,33917,33919,33921,33924,33926,33928],{"class":188,"line":18219},[186,33905,33906],{"class":206},"        print",[186,33908,832],{"class":202},[186,33910,33911],{"class":532},"\"Epoch ",[186,33913,33914],{"class":206},"{}",[186,33916,2194],{"class":532},[186,33918,33914],{"class":206},[186,33920,1862],{"class":532},[186,33922,33923],{"class":202},".format(epoch,num_epochs",[186,33925,2142],{"class":669},[186,33927,1829],{"class":206},[186,33929,31952],{"class":202},[186,33931,33932,33934,33936,33939,33941,33943],{"class":188,"line":18224},[186,33933,33906],{"class":206},[186,33935,832],{"class":202},[186,33937,33938],{"class":532},"\"-\"",[186,33940,2065],{"class":669},[186,33942,2056],{"class":206},[186,33944,1629],{"class":202},[186,33946,33947],{"class":188,"line":18230},[186,33948,3867],{"emptyLinePlaceholder":1551},[186,33950,33951],{"class":188,"line":18244},[186,33952,33953],{"class":192},"        # 初始化参数\n",[186,33955,33956],{"class":188,"line":18257},[186,33957,33958],{"class":192},"        # 训练集损失函数\n",[186,33960,33961,33964,33966],{"class":188,"line":18262},[186,33962,33963],{"class":202},"        train_loss",[186,33965,529],{"class":669},[186,33967,33797],{"class":206},[186,33969,33970],{"class":188,"line":18276},[186,33971,33972],{"class":192},"        # 训练集准确度\n",[186,33974,33975,33978,33980],{"class":188,"line":18281},[186,33976,33977],{"class":202},"        train_corrects",[186,33979,529],{"class":669},[186,33981,4551],{"class":206},[186,33983,33984],{"class":188,"line":18287},[186,33985,33986],{"class":192},"        # 验证集损失函数\n",[186,33988,33989,33992,33994],{"class":188,"line":18292},[186,33990,33991],{"class":202},"        val_loss",[186,33993,529],{"class":669},[186,33995,33797],{"class":206},[186,33997,33998],{"class":188,"line":18306},[186,33999,34000],{"class":192},"        # 验证集准确度\n",[186,34002,34003,34006,34008],{"class":188,"line":18311},[186,34004,34005],{"class":202},"        val_corrects",[186,34007,529],{"class":669},[186,34009,4551],{"class":206},[186,34011,34012],{"class":188,"line":18316},[186,34013,34014],{"class":192},"        # 训练集样本数量\n",[186,34016,34017,34020,34022],{"class":188,"line":18330},[186,34018,34019],{"class":202},"        train_num",[186,34021,529],{"class":669},[186,34023,4551],{"class":206},[186,34025,34026],{"class":188,"line":18342},[186,34027,34028],{"class":192},"        # 验证集样本数量\n",[186,34030,34031,34034,34036],{"class":188,"line":18347},[186,34032,34033],{"class":202},"        val_num",[186,34035,529],{"class":669},[186,34037,4551],{"class":206},[186,34039,34040],{"class":188,"line":18360},[186,34041,34042],{"class":192},"        # 将数据放到设备,并开始训练\n",[186,34044,34045,34047,34049,34051,34053],{"class":188,"line":18365},[186,34046,4869],{"class":669},[186,34048,33056],{"class":202},[186,34050,27500],{"class":669},[186,34052,33061],{"class":206},[186,34054,34055],{"class":202},"(train_dataloader):\n",[186,34057,34058],{"class":188,"line":18370},[186,34059,34060],{"class":192},"            # 将特征放入到训练设备\n",[186,34062,34063,34066,34068],{"class":188,"line":18375},[186,34064,34065],{"class":202},"            b_x",[186,34067,529],{"class":669},[186,34069,34070],{"class":202},"b_x.to(device)\n",[186,34072,34073],{"class":188,"line":18388},[186,34074,34075],{"class":192},"            # 将标签放入到训练设备当中\n",[186,34077,34078,34081,34083],{"class":188,"line":18393},[186,34079,34080],{"class":202},"            b_y",[186,34082,529],{"class":669},[186,34084,34085],{"class":202},"b_y.to(device)\n",[186,34087,34089],{"class":188,"line":34088},98,[186,34090,34091],{"class":192},"            # 设置模型为训练模式\n",[186,34093,34095],{"class":188,"line":34094},99,[186,34096,34097],{"class":202},"            model.train()\n",[186,34099,34101],{"class":188,"line":34100},100,[186,34102,34103],{"class":192},"            # 将数据放到模型当中,开始前向传播\n",[186,34105,34107],{"class":188,"line":34106},101,[186,34108,34109],{"class":192},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[186,34111,34113,34116,34118],{"class":188,"line":34112},102,[186,34114,34115],{"class":202},"            output",[186,34117,529],{"class":669},[186,34119,34120],{"class":202},"model(b_x)\n",[186,34122,34124],{"class":188,"line":34123},103,[186,34125,34126],{"class":192},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[186,34128,34130,34133,34135,34138,34141,34143,34145],{"class":188,"line":34129},104,[186,34131,34132],{"class":202},"            pre_lab",[186,34134,529],{"class":669},[186,34136,34137],{"class":202},"torch.argmax(output,",[186,34139,34140],{"class":835},"dim",[186,34142,529],{"class":669},[186,34144,1829],{"class":206},[186,34146,1629],{"class":202},[186,34148,34150],{"class":188,"line":34149},105,[186,34151,34152],{"class":192},"            # 计算每一个batch的损失函数\n",[186,34154,34156,34159,34161],{"class":188,"line":34155},106,[186,34157,34158],{"class":202},"            loss",[186,34160,529],{"class":669},[186,34162,34163],{"class":202},"criterion(output,b_y)\n",[186,34165,34167],{"class":188,"line":34166},107,[186,34168,34169],{"class":192},"            # 将梯度初始化为0\n",[186,34171,34173],{"class":188,"line":34172},108,[186,34174,34175],{"class":202},"            optimizer.zero_grad()\n",[186,34177,34179],{"class":188,"line":34178},109,[186,34180,34181],{"class":192},"            # 梯度置为0后再进行反向传播\n",[186,34183,34185],{"class":188,"line":34184},110,[186,34186,34187],{"class":202},"            loss.backward()\n",[186,34189,34191],{"class":188,"line":34190},111,[186,34192,34193],{"class":192},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[186,34195,34197],{"class":188,"line":34196},112,[186,34198,34199],{"class":202},"            optimizer.step()\n",[186,34201,34203],{"class":188,"line":34202},113,[186,34204,34205],{"class":192},"            # loss.item()指的是batch的平均损失\n",[186,34207,34209,34212,34214,34217,34219,34222,34224],{"class":188,"line":34208},114,[186,34210,34211],{"class":202},"            train_loss",[186,34213,10940],{"class":669},[186,34215,34216],{"class":202},"loss.item()",[186,34218,2065],{"class":669},[186,34220,34221],{"class":202},"b_x.size(",[186,34223,1803],{"class":206},[186,34225,1629],{"class":202},[186,34227,34229],{"class":188,"line":34228},115,[186,34230,34231],{"class":192},"            # 计算每个批次中正确预测的数量\n",[186,34233,34235,34238,34240,34243,34245],{"class":188,"line":34234},116,[186,34236,34237],{"class":202},"            train_corrects",[186,34239,10940],{"class":669},[186,34241,34242],{"class":202},"torch.sum(pre_lab",[186,34244,4415],{"class":669},[186,34246,34247],{"class":202},"b_y.data)\n",[186,34249,34251],{"class":188,"line":34250},117,[186,34252,34253],{"class":192},"            # 计算目前为止一共处理了多少样本\n",[186,34255,34257,34260,34262,34264,34266],{"class":188,"line":34256},118,[186,34258,34259],{"class":202},"            train_num",[186,34261,10940],{"class":669},[186,34263,34221],{"class":202},[186,34265,1803],{"class":206},[186,34267,1629],{"class":202},[186,34269,34271],{"class":188,"line":34270},119,[186,34272,34273],{"class":192},"        # 验证数据\n",[186,34275,34277,34279,34282,34284,34286],{"class":188,"line":34276},120,[186,34278,4869],{"class":669},[186,34280,34281],{"class":202}," step ,(b_x,b_y) ",[186,34283,27500],{"class":669},[186,34285,33061],{"class":206},[186,34287,34288],{"class":202},"(val_dataloader):\n",[186,34290,34292],{"class":188,"line":34291},121,[186,34293,34294],{"class":192},"            # 将特征放到验证设备当中\n",[186,34296,34298,34300,34302],{"class":188,"line":34297},122,[186,34299,34065],{"class":202},[186,34301,529],{"class":669},[186,34303,34070],{"class":202},[186,34305,34307],{"class":188,"line":34306},123,[186,34308,34309],{"class":192},"            # 将标签放到放到训练设备当中\n",[186,34311,34313,34315,34317],{"class":188,"line":34312},124,[186,34314,34080],{"class":202},[186,34316,529],{"class":669},[186,34318,34085],{"class":202},[186,34320,34322],{"class":188,"line":34321},125,[186,34323,34324],{"class":192},"            # 开启验证模式，设置模型为评估模式\n",[186,34326,34328],{"class":188,"line":34327},126,[186,34329,34330],{"class":202},"            model.eval()\n",[186,34332,34334,34337],{"class":188,"line":34333},127,[186,34335,34336],{"class":669},"            with",[186,34338,34339],{"class":202}," torch.no_grad():\n",[186,34341,34343],{"class":188,"line":34342},128,[186,34344,34345],{"class":192},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[186,34347,34349,34352,34354],{"class":188,"line":34348},129,[186,34350,34351],{"class":202},"                output ",[186,34353,529],{"class":669},[186,34355,34356],{"class":202}," model(b_x)\n",[186,34358,34360],{"class":188,"line":34359},130,[186,34361,34362],{"class":192},"                # 查找每一行中最大值对应的下标\n",[186,34364,34366,34369,34371,34374,34376,34378,34380],{"class":188,"line":34365},131,[186,34367,34368],{"class":202},"                pre_lab ",[186,34370,529],{"class":669},[186,34372,34373],{"class":202}," torch.argmax(output, ",[186,34375,34140],{"class":835},[186,34377,529],{"class":669},[186,34379,1829],{"class":206},[186,34381,1629],{"class":202},[186,34383,34385],{"class":188,"line":34384},132,[186,34386,34387],{"class":192},"                # 计算验证集上的当前 batch 损失\n",[186,34389,34391,34394,34396],{"class":188,"line":34390},133,[186,34392,34393],{"class":202},"                val_batch_loss ",[186,34395,529],{"class":669},[186,34397,34398],{"class":202}," criterion(output, b_y)\n",[186,34400,34402],{"class":188,"line":34401},134,[186,34403,34404],{"class":192},"                # 对损失函数进行累加（按样本数加权）\n",[186,34406,34408,34411,34413,34416,34418,34421,34423],{"class":188,"line":34407},135,[186,34409,34410],{"class":202},"                val_loss ",[186,34412,10940],{"class":669},[186,34414,34415],{"class":202}," val_batch_loss.item() ",[186,34417,2065],{"class":669},[186,34419,34420],{"class":202}," b_x.size(",[186,34422,1803],{"class":206},[186,34424,1629],{"class":202},[186,34426,34428,34431,34433,34436,34438],{"class":188,"line":34427},136,[186,34429,34430],{"class":202},"                val_corrects ",[186,34432,10940],{"class":669},[186,34434,34435],{"class":202}," torch.sum(pre_lab ",[186,34437,4415],{"class":669},[186,34439,34440],{"class":202}," b_y.data)\n",[186,34442,34444],{"class":188,"line":34443},137,[186,34445,34446],{"class":192},"                # 当前用于验证的样本数量\n",[186,34448,34450,34453,34455,34457,34459],{"class":188,"line":34449},138,[186,34451,34452],{"class":202},"            val_num ",[186,34454,10940],{"class":669},[186,34456,34420],{"class":202},[186,34458,1803],{"class":206},[186,34460,1629],{"class":202},[186,34462,34464],{"class":188,"line":34463},139,[186,34465,34466],{"class":192},"        # 计算并保存每一次迭代的loss值和准确率\n",[186,34468,34470],{"class":188,"line":34469},140,[186,34471,34472],{"class":192},"        # 计算并保存训练集的loss值\n",[186,34474,34476,34479,34481],{"class":188,"line":34475},141,[186,34477,34478],{"class":202},"        train_loss_all.append(train_loss",[186,34480,2194],{"class":669},[186,34482,34483],{"class":202},"train_num)\n",[186,34485,34487],{"class":188,"line":34486},142,[186,34488,34489],{"class":192},"        # 取双精度\n",[186,34491,34493],{"class":188,"line":34492},143,[186,34494,34495],{"class":192},"        # 计算并保存训练集的准确率\n",[186,34497,34499,34502,34504],{"class":188,"line":34498},144,[186,34500,34501],{"class":202},"        train_acc_all.append(train_corrects.double().item()",[186,34503,2194],{"class":669},[186,34505,34483],{"class":202},[186,34507,34509],{"class":188,"line":34508},145,[186,34510,34511],{"class":192},"        # 计算并保存验证集的loss值\n",[186,34513,34515,34518,34520],{"class":188,"line":34514},146,[186,34516,34517],{"class":202},"        val_loss_all.append(val_loss",[186,34519,2194],{"class":669},[186,34521,34522],{"class":202},"val_num)\n",[186,34524,34526],{"class":188,"line":34525},147,[186,34527,34528],{"class":192},"        # 计算并保存验证集的准确率\n",[186,34530,34532,34535,34537],{"class":188,"line":34531},148,[186,34533,34534],{"class":202},"        val_acc_all.append(val_corrects.double().item()",[186,34536,2194],{"class":669},[186,34538,34522],{"class":202},[186,34540,34542],{"class":188,"line":34541},149,[186,34543,3867],{"emptyLinePlaceholder":1551},[186,34545,34547],{"class":188,"line":34546},150,[186,34548,34549],{"class":192},"        # 打印训练一轮的loss值和准确率\n",[186,34551,34553,34555,34557,34559,34561,34564,34566,34569,34571,34574,34576,34578,34580,34582,34585,34587,34589,34592,34594,34596],{"class":188,"line":34552},151,[186,34554,33906],{"class":206},[186,34556,832],{"class":202},[186,34558,5058],{"class":532},[186,34560,33914],{"class":206},[186,34562,34563],{"class":532},"train loss:",[186,34565,2504],{"class":206},[186,34567,34568],{"class":669},":.4f",[186,34570,2553],{"class":206},[186,34572,34573],{"class":532}," train acc:",[186,34575,2504],{"class":206},[186,34577,34568],{"class":669},[186,34579,2553],{"class":206},[186,34581,5058],{"class":532},[186,34583,34584],{"class":202},".format(epoch,train_loss_all[",[186,34586,2142],{"class":669},[186,34588,1829],{"class":206},[186,34590,34591],{"class":202},"],train_acc_all[",[186,34593,2142],{"class":669},[186,34595,1829],{"class":206},[186,34597,34598],{"class":202},"]))\n",[186,34600,34602,34604,34606,34608,34610,34613,34615,34617,34619,34622,34624,34626,34628,34630,34633,34635,34637,34640,34642,34644],{"class":188,"line":34601},152,[186,34603,33906],{"class":206},[186,34605,832],{"class":202},[186,34607,5058],{"class":532},[186,34609,33914],{"class":206},[186,34611,34612],{"class":532},"val loss:",[186,34614,2504],{"class":206},[186,34616,34568],{"class":669},[186,34618,2553],{"class":206},[186,34620,34621],{"class":532}," val acc:",[186,34623,2504],{"class":206},[186,34625,34568],{"class":669},[186,34627,2553],{"class":206},[186,34629,5058],{"class":532},[186,34631,34632],{"class":202},".format(epoch,val_loss_all[",[186,34634,2142],{"class":669},[186,34636,1829],{"class":206},[186,34638,34639],{"class":202},"],val_acc_all[",[186,34641,2142],{"class":669},[186,34643,1829],{"class":206},[186,34645,34598],{"class":202},[186,34647,34649],{"class":188,"line":34648},153,[186,34650,3867],{"emptyLinePlaceholder":1551},[186,34652,34654],{"class":188,"line":34653},154,[186,34655,34656],{"class":192},"        # 判断准确度--->保存最优模型\n",[186,34658,34660,34662,34665,34667,34669,34671,34673],{"class":188,"line":34659},155,[186,34661,3964],{"class":669},[186,34663,34664],{"class":202}," val_acc_all[",[186,34666,2142],{"class":669},[186,34668,1829],{"class":206},[186,34670,2547],{"class":202},[186,34672,2567],{"class":669},[186,34674,34675],{"class":202},"best_acc:\n",[186,34677,34679],{"class":188,"line":34678},156,[186,34680,34681],{"class":192},"            # 保存当前模型准确度\n",[186,34683,34685,34688,34690,34692,34695,34697,34699],{"class":188,"line":34684},157,[186,34686,34687],{"class":202},"            best_acc:",[186,34689,1662],{"class":206},[186,34691,529],{"class":669},[186,34693,34694],{"class":202},"val_acc_all[",[186,34696,2142],{"class":669},[186,34698,1829],{"class":206},[186,34700,34701],{"class":202},"]\n",[186,34703,34705],{"class":188,"line":34704},158,[186,34706,34707],{"class":192},"            # 保存当前的准确度\n",[186,34709,34711],{"class":188,"line":34710},159,[186,34712,34713],{"class":192},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[186,34715,34717,34720,34722],{"class":188,"line":34716},160,[186,34718,34719],{"class":202},"            best_model_wts",[186,34721,529],{"class":669},[186,34723,33769],{"class":202},[186,34725,34727],{"class":188,"line":34726},161,[186,34728,3867],{"emptyLinePlaceholder":1551},[186,34730,34732],{"class":188,"line":34731},162,[186,34733,34734],{"class":192},"        # 计算耗时\n",[186,34736,34738,34741,34743,34746,34748],{"class":188,"line":34737},163,[186,34739,34740],{"class":202},"        time_use",[186,34742,529],{"class":669},[186,34744,34745],{"class":202},"time.time()",[186,34747,2142],{"class":669},[186,34749,34750],{"class":202},"since\n",[186,34752,34754,34756,34758,34761,34763,34766,34768,34770,34772,34774,34776,34779,34782,34785,34787,34790,34792,34794],{"class":188,"line":34753},164,[186,34755,33906],{"class":206},[186,34757,832],{"class":202},[186,34759,34760],{"class":532},"'训练和验证耗费的时间",[186,34762,2504],{"class":206},[186,34764,34765],{"class":669},":.0f",[186,34767,2553],{"class":206},[186,34769,2154],{"class":532},[186,34771,2504],{"class":206},[186,34773,34765],{"class":669},[186,34775,2553],{"class":206},[186,34777,34778],{"class":532},"s'",[186,34780,34781],{"class":202},".format(time_use",[186,34783,34784],{"class":669},"\u002F\u002F",[186,34786,2515],{"class":206},[186,34788,34789],{"class":202},",time_use",[186,34791,670],{"class":669},[186,34793,2515],{"class":206},[186,34795,31952],{"class":202},[186,34797,34799],{"class":188,"line":34798},165,[186,34800,34801],{"class":192},"    # 选择最优参数\n",[186,34803,34805],{"class":188,"line":34804},166,[186,34806,34807],{"class":192},"    # 加载最高准确率下的模型参数\n",[186,34809,34811],{"class":188,"line":34810},167,[186,34812,34813],{"class":192},"    # model.load_state_dict(best_model_wts)\n",[186,34815,34817,34820,34823],{"class":188,"line":34816},168,[186,34818,34819],{"class":202},"    torch.save(model.state_dict(best_model_wts), ",[186,34821,34822],{"class":532},"'.\u002Fbest_model.pth'",[186,34824,1629],{"class":202},[186,34826,34828],{"class":188,"line":34827},169,[186,34829,34830],{"class":192},"    # 或者写成\n",[186,34832,34834],{"class":188,"line":34833},170,[186,34835,34836],{"class":192},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[186,34838,34840],{"class":188,"line":34839},171,[186,34841,34842],{"class":192},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[186,34844,34846,34849,34851,34854,34857,34859],{"class":188,"line":34845},172,[186,34847,34848],{"class":202},"    train_process",[186,34850,529],{"class":669},[186,34852,34853],{"class":202},"pd.DataFrame(",[186,34855,34856],{"class":835},"data",[186,34858,529],{"class":669},[186,34860,3018],{"class":202},[186,34862,34864,34867,34869,34872],{"class":188,"line":34863},173,[186,34865,34866],{"class":532},"        \"epoch\"",[186,34868,2467],{"class":202},[186,34870,34871],{"class":206},"range",[186,34873,34874],{"class":202},"(num_epochs),\n",[186,34876,34878,34881],{"class":188,"line":34877},174,[186,34879,34880],{"class":532},"        \"train_loss_all\"",[186,34882,34883],{"class":202},":train_loss_all,\n",[186,34885,34887,34890],{"class":188,"line":34886},175,[186,34888,34889],{"class":532},"        \"val_loss_all\"",[186,34891,34892],{"class":202},":val_loss_all,\n",[186,34894,34896,34899],{"class":188,"line":34895},176,[186,34897,34898],{"class":532},"        \"train_acc_all\"",[186,34900,34901],{"class":202},":train_acc_all,\n",[186,34903,34905,34908],{"class":188,"line":34904},177,[186,34906,34907],{"class":532},"        \"val_acc_all\"",[186,34909,34910],{"class":202},":val_acc_all\n",[186,34912,34914],{"class":188,"line":34913},178,[186,34915,34916],{"class":202},"    })\n",[186,34918,34920],{"class":188,"line":34919},179,[186,34921,34922],{"class":192},"    # 返回训练保存的过程\n",[186,34924,34926,34928],{"class":188,"line":34925},180,[186,34927,5556],{"class":669},[186,34929,34930],{"class":202}," train_process\n",[186,34932,34934],{"class":188,"line":34933},181,[186,34935,3867],{"emptyLinePlaceholder":1551},[186,34937,34939],{"class":188,"line":34938},182,[186,34940,34941],{"class":192},"# 将loss值和精度按照图片的形式展示出来\n",[186,34943,34945,34947,34950],{"class":188,"line":34944},183,[186,34946,33402],{"class":669},[186,34948,34949],{"class":198}," matplot_acc_loss",[186,34951,34952],{"class":202},"(train_process):\n",[186,34954,34956],{"class":188,"line":34955},184,[186,34957,34958],{"class":192},"    # 设置图的大小\n",[186,34960,34962,34965,34967,34969,34971,34973,34975,34977],{"class":188,"line":34961},185,[186,34963,34964],{"class":202},"    plt.figure(",[186,34966,33148],{"class":835},[186,34968,529],{"class":669},[186,34970,832],{"class":202},[186,34972,2108],{"class":206},[186,34974,1988],{"class":202},[186,34976,1904],{"class":206},[186,34978,31952],{"class":202},[186,34980,34982],{"class":188,"line":34981},186,[186,34983,34984],{"class":192},"    # 设置图中有几张图\n",[186,34986,34988],{"class":188,"line":34987},187,[186,34989,34990],{"class":192},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[186,34992,34994],{"class":188,"line":34993},188,[186,34995,34996],{"class":192},"    # ①loss图\n",[186,34998,35000,35002,35004,35006,35008,35010,35012],{"class":188,"line":34999},189,[186,35001,33182],{"class":202},[186,35003,1829],{"class":206},[186,35005,1988],{"class":202},[186,35007,1697],{"class":206},[186,35009,1988],{"class":202},[186,35011,1829],{"class":206},[186,35013,1629],{"class":202},[186,35015,35017],{"class":188,"line":35016},190,[186,35018,35019],{"class":192},"    # 补充:\n",[186,35021,35023],{"class":188,"line":35022},191,[186,35024,35025],{"class":192},"    # plt.subplot(nrows, ncols, index)\n",[186,35027,35029],{"class":188,"line":35028},192,[186,35030,35031],{"class":192},"    # nrows：行数\n",[186,35033,35035],{"class":188,"line":35034},193,[186,35036,35037],{"class":192},"    # ncols：列数\n",[186,35039,35041],{"class":188,"line":35040},194,[186,35042,35043],{"class":192},"    # index：目前选中第几个子图（从1开始）\n",[186,35045,35047,35050,35053,35056,35059,35061,35064,35066,35069],{"class":188,"line":35046},195,[186,35048,35049],{"class":202},"    plt.plot(train_process[",[186,35051,35052],{"class":532},"\"epoch\"",[186,35054,35055],{"class":202},"],train_process.train_loss_all,",[186,35057,35058],{"class":532},"'ro-'",[186,35060,1988],{"class":202},[186,35062,35063],{"class":835},"label",[186,35065,529],{"class":669},[186,35067,35068],{"class":532},"'train loss'",[186,35070,1629],{"class":202},[186,35072,35074,35076,35078,35081,35084,35086,35088,35090,35093],{"class":188,"line":35073},196,[186,35075,35049],{"class":202},[186,35077,35052],{"class":532},[186,35079,35080],{"class":202},"],train_process.val_loss_all,",[186,35082,35083],{"class":532},"'bs--'",[186,35085,1988],{"class":202},[186,35087,35063],{"class":835},[186,35089,529],{"class":669},[186,35091,35092],{"class":532},"'val loss'",[186,35094,1629],{"class":202},[186,35096,35098],{"class":188,"line":35097},197,[186,35099,35100],{"class":192},"    # 添加一个图例\n",[186,35102,35104],{"class":188,"line":35103},198,[186,35105,35106],{"class":202},"    plt.legend()\n",[186,35108,35110],{"class":188,"line":35109},199,[186,35111,35112],{"class":192},"    # 给轴添加标签\n",[186,35114,35116,35119,35122],{"class":188,"line":35115},200,[186,35117,35118],{"class":202},"    plt.xlabel(",[186,35120,35121],{"class":532},"'epoch'",[186,35123,1629],{"class":202},[186,35125,35127,35130,35133],{"class":188,"line":35126},201,[186,35128,35129],{"class":202},"    plt.ylabel(",[186,35131,35132],{"class":532},"'loss'",[186,35134,1629],{"class":202},[186,35136,35138],{"class":188,"line":35137},202,[186,35139,35140],{"class":192},"    # ②准确度图\n",[186,35142,35144,35146,35148,35150,35152,35154,35156],{"class":188,"line":35143},203,[186,35145,33182],{"class":202},[186,35147,1829],{"class":206},[186,35149,1988],{"class":202},[186,35151,1697],{"class":206},[186,35153,1988],{"class":202},[186,35155,1697],{"class":206},[186,35157,1629],{"class":202},[186,35159,35161,35163,35165,35168,35170,35172,35174,35176,35179],{"class":188,"line":35160},204,[186,35162,35049],{"class":202},[186,35164,35052],{"class":532},[186,35166,35167],{"class":202},"],train_process.train_acc_all,",[186,35169,35058],{"class":532},[186,35171,1988],{"class":202},[186,35173,35063],{"class":835},[186,35175,529],{"class":669},[186,35177,35178],{"class":532},"'train acc'",[186,35180,1629],{"class":202},[186,35182,35184,35186,35188,35191,35193,35195,35197,35199,35202],{"class":188,"line":35183},205,[186,35185,35049],{"class":202},[186,35187,35052],{"class":532},[186,35189,35190],{"class":202},"],train_process.val_acc_all,",[186,35192,35083],{"class":532},[186,35194,1988],{"class":202},[186,35196,35063],{"class":835},[186,35198,529],{"class":669},[186,35200,35201],{"class":532},"'val acc'",[186,35203,1629],{"class":202},[186,35205,35207],{"class":188,"line":35206},206,[186,35208,35209],{"class":192},"    # 添加图例\n",[186,35211,35213],{"class":188,"line":35212},207,[186,35214,35106],{"class":202},[186,35216,35218,35220,35222],{"class":188,"line":35217},208,[186,35219,35118],{"class":202},[186,35221,35052],{"class":532},[186,35223,1629],{"class":202},[186,35225,35227,35229,35232],{"class":188,"line":35226},209,[186,35228,35129],{"class":202},[186,35230,35231],{"class":532},"\"acc\"",[186,35233,1629],{"class":202},[186,35235,35237],{"class":188,"line":35236},210,[186,35238,35239],{"class":202},"    plt.show()\n",[186,35241,35243],{"class":188,"line":35242},211,[186,35244,3867],{"emptyLinePlaceholder":1551},[186,35246,35248],{"class":188,"line":35247},212,[186,35249,35250],{"class":192},"# 正式开始训练:\n",[186,35252,35254,35256,35258,35260,35262],{"class":188,"line":35253},213,[186,35255,3003],{"class":669},[186,35257,32675],{"class":206},[186,35259,4415],{"class":669},[186,35261,32680],{"class":532},[186,35263,5205],{"class":202},[186,35265,35267],{"class":188,"line":35266},214,[186,35268,35269],{"class":192},"    # 将模型实例化\n",[186,35271,35273,35276,35278],{"class":188,"line":35272},215,[186,35274,35275],{"class":202},"    LeNet",[186,35277,529],{"class":669},[186,35279,35280],{"class":202},"LeNet()\n",[186,35282,35284,35287,35289],{"class":188,"line":35283},216,[186,35285,35286],{"class":202},"    train_dataloader,val_dataloader",[186,35288,529],{"class":669},[186,35290,35291],{"class":202},"train_val_data_process()\n",[186,35293,35295,35297,35299,35302,35305,35307,35309],{"class":188,"line":35294},217,[186,35296,34848],{"class":202},[186,35298,529],{"class":669},[186,35300,35301],{"class":202},"train_model_process(LeNet,train_dataloader,val_dataloader,",[186,35303,35304],{"class":835},"num_epochs",[186,35306,529],{"class":669},[186,35308,801],{"class":206},[186,35310,1629],{"class":202},[186,35312,35314],{"class":188,"line":35313},218,[186,35315,35316],{"class":202},"    matplot_acc_loss(train_process)\n",[169,35318,35319],{},"画图的补充点学习：",[169,35321,35322],{},[164,35323],{"alt":181,"src":35324},"\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",[34,35326,35327],{"start":219},[22,35328,35329],{},"测试",[176,35331,35333],{"className":31833,"code":35332,"language":31835,"meta":181,"style":181},"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",[183,35334,35335,35341,35351,35363,35373,35378,35388,35398,35402,35407,35416,35433,35445,35462,35473,35489,35494,35505,35516,35527,35534,35538,35543,35553,35558,35575,35583,35587,35592,35601,35610,35614,35619,35624,35629,35636,35641,35653,35663,35673,35678,35682,35687,35696,35701,35717,35722,35727,35732,35746,35751,35765,35769,35774,35789,35794,35806,35810,35815,35827,35832,35840,35845,35850,35860,35865,35874,35879,35884,35888,35893,35898,35914,35922,35927,35932,35991,35997,36002,36013,36021,36029,36033,36038,36042,36047,36055,36060,36076,36081,36091,36101],{"__ignoreMap":181},[186,35336,35337,35339],{"class":188,"line":189},[186,35338,31847],{"class":669},[186,35340,31850],{"class":202},[186,35342,35343,35345,35347,35349],{"class":188,"line":49},[186,35344,31847],{"class":669},[186,35346,32870],{"class":202},[186,35348,32838],{"class":669},[186,35350,32875],{"class":202},[186,35352,35353,35355,35358,35360],{"class":188,"line":219},[186,35354,32192],{"class":669},[186,35356,35357],{"class":202}," jupyter_client.consoleapp ",[186,35359,31847],{"class":669},[186,35361,35362],{"class":202}," classes\n",[186,35364,35365,35367,35369,35371],{"class":188,"line":225},[186,35366,32192],{"class":669},[186,35368,32853],{"class":202},[186,35370,31847],{"class":669},[186,35372,32858],{"class":202},[186,35374,35375],{"class":188,"line":242},[186,35376,35377],{"class":192},"# 导入数据集\n",[186,35379,35380,35382,35384,35386],{"class":188,"line":248},[186,35381,32192],{"class":669},[186,35383,32823],{"class":202},[186,35385,31847],{"class":669},[186,35387,32828],{"class":202},[186,35389,35390,35392,35394,35396],{"class":188,"line":265},[186,35391,32192],{"class":669},[186,35393,33369],{"class":202},[186,35395,31847],{"class":669},[186,35397,33374],{"class":202},[186,35399,35400],{"class":188,"line":271},[186,35401,3867],{"emptyLinePlaceholder":1551},[186,35403,35404],{"class":188,"line":288},[186,35405,35406],{"class":192},"# 测试数据处理\n",[186,35408,35409,35411,35414],{"class":188,"line":294},[186,35410,33402],{"class":669},[186,35412,35413],{"class":198}," test_data_process",[186,35415,33408],{"class":202},[186,35417,35418,35421,35423,35425,35427,35429,35431],{"class":188,"line":1212},[186,35419,35420],{"class":202},"    test_data",[186,35422,529],{"class":669},[186,35424,32910],{"class":202},[186,35426,32913],{"class":835},[186,35428,529],{"class":669},[186,35430,32918],{"class":532},[186,35432,32921],{"class":202},[186,35434,35435,35438,35440,35443],{"class":188,"line":1223},[186,35436,35437],{"class":835},"                           train",[186,35439,529],{"class":669},[186,35441,35442],{"class":206},"False",[186,35444,32921],{"class":202},[186,35446,35447,35450,35452,35454,35456,35458,35460],{"class":188,"line":1236},[186,35448,35449],{"class":835},"                           transform",[186,35451,529],{"class":669},[186,35453,32948],{"class":202},[186,35455,32951],{"class":835},[186,35457,529],{"class":669},[186,35459,2509],{"class":206},[186,35461,32959],{"class":202},[186,35463,35464,35467,35469,35471],{"class":188,"line":3096},[186,35465,35466],{"class":835},"                           download",[186,35468,529],{"class":669},[186,35470,32931],{"class":206},[186,35472,1629],{"class":202},[186,35474,35475,35478,35480,35482,35484,35486],{"class":188,"line":3110},[186,35476,35477],{"class":202},"    test_dataloader",[186,35479,529],{"class":669},[186,35481,32989],{"class":202},[186,35483,32992],{"class":835},[186,35485,529],{"class":669},[186,35487,35488],{"class":202},"test_data,\n",[186,35490,35491],{"class":188,"line":3115},[186,35492,35493],{"class":192},"                                    # 这里是一张一张进行测试\n",[186,35495,35496,35499,35501,35503],{"class":188,"line":3121},[186,35497,35498],{"class":835},"                                    batch_size",[186,35500,529],{"class":669},[186,35502,1829],{"class":206},[186,35504,32921],{"class":202},[186,35506,35507,35510,35512,35514],{"class":188,"line":3142},[186,35508,35509],{"class":835},"                                    shuffle",[186,35511,529],{"class":669},[186,35513,32931],{"class":206},[186,35515,32921],{"class":202},[186,35517,35518,35521,35523,35525],{"class":188,"line":3147},[186,35519,35520],{"class":835},"                                    num_workers",[186,35522,529],{"class":669},[186,35524,1803],{"class":206},[186,35526,1629],{"class":202},[186,35528,35529,35531],{"class":188,"line":3161},[186,35530,5556],{"class":669},[186,35532,35533],{"class":202}," test_dataloader\n",[186,35535,35536],{"class":188,"line":3166},[186,35537,3867],{"emptyLinePlaceholder":1551},[186,35539,35540],{"class":188,"line":3195},[186,35541,35542],{"class":192},"# 定义模型测试函数\n",[186,35544,35545,35547,35550],{"class":188,"line":3200},[186,35546,33402],{"class":669},[186,35548,35549],{"class":198}," test_model_process",[186,35551,35552],{"class":202},"(model,test_dataloader):\n",[186,35554,35555],{"class":188,"line":3217},[186,35556,35557],{"class":192},"    # 将模型放到设备当中，先进行判断\n",[186,35559,35560,35562,35564,35566,35568,35570,35572],{"class":188,"line":3222},[186,35561,32692],{"class":202},[186,35563,529],{"class":669},[186,35565,32699],{"class":532},[186,35567,3172],{"class":669},[186,35569,32704],{"class":202},[186,35571,3169],{"class":669},[186,35573,35574],{"class":532}," \"cpu\"\n",[186,35576,35577,35579,35581],{"class":188,"line":3227},[186,35578,32744],{"class":202},[186,35580,529],{"class":669},[186,35582,33744],{"class":202},[186,35584,35585],{"class":188,"line":3232},[186,35586,3867],{"emptyLinePlaceholder":1551},[186,35588,35589],{"class":188,"line":3246},[186,35590,35591],{"class":192},"    # 设置初始化参数\n",[186,35593,35594,35597,35599],{"class":188,"line":3251},[186,35595,35596],{"class":202},"    test_corrects",[186,35598,529],{"class":669},[186,35600,33797],{"class":206},[186,35602,35603,35606,35608],{"class":188,"line":4044},[186,35604,35605],{"class":202},"    test_num",[186,35607,529],{"class":669},[186,35609,4551],{"class":206},[186,35611,35612],{"class":188,"line":4058},[186,35613,3867],{"emptyLinePlaceholder":1551},[186,35615,35616],{"class":188,"line":4066},[186,35617,35618],{"class":192},"    # 进行模型测试\n",[186,35620,35621],{"class":188,"line":4071},[186,35622,35623],{"class":192},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[186,35625,35626],{"class":188,"line":4077},[186,35627,35628],{"class":192},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[186,35630,35631,35634],{"class":188,"line":4083},[186,35632,35633],{"class":669},"    with",[186,35635,34339],{"class":202},[186,35637,35638],{"class":188,"line":4088},[186,35639,35640],{"class":192},"        # 从数据中进行\n",[186,35642,35643,35645,35648,35650],{"class":188,"line":9411},[186,35644,4869],{"class":669},[186,35646,35647],{"class":202}," test_data_x,test_data_y ",[186,35649,27500],{"class":669},[186,35651,35652],{"class":202}," test_dataloader:\n",[186,35654,35655,35658,35660],{"class":188,"line":9435},[186,35656,35657],{"class":202},"            test_data_x",[186,35659,529],{"class":669},[186,35661,35662],{"class":202},"test_data_x.to(device)\n",[186,35664,35665,35668,35670],{"class":188,"line":9440},[186,35666,35667],{"class":202},"            test_data_y",[186,35669,529],{"class":669},[186,35671,35672],{"class":202},"test_data_y.to(device)\n",[186,35674,35675],{"class":188,"line":9446},[186,35676,35677],{"class":192},"            # 设置为验证模式\n",[186,35679,35680],{"class":188,"line":9473},[186,35681,34330],{"class":202},[186,35683,35684],{"class":188,"line":9478},[186,35685,35686],{"class":192},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[186,35688,35689,35691,35693],{"class":188,"line":9484},[186,35690,34115],{"class":202},[186,35692,529],{"class":669},[186,35694,35695],{"class":202},"model(test_data_x)\n",[186,35697,35698],{"class":188,"line":9496},[186,35699,35700],{"class":192},"            # 查找每一行中最大值对应的下标\n",[186,35702,35703,35705,35707,35709,35711,35713,35715],{"class":188,"line":9508},[186,35704,34132],{"class":202},[186,35706,529],{"class":669},[186,35708,34137],{"class":202},[186,35710,34140],{"class":835},[186,35712,529],{"class":669},[186,35714,1829],{"class":206},[186,35716,1629],{"class":202},[186,35718,35719],{"class":188,"line":9520},[186,35720,35721],{"class":192},"            # 计算正确率\n",[186,35723,35724],{"class":188,"line":11179},[186,35725,35726],{"class":192},"            # .data表示是一个不带梯度信息的tensor\n",[186,35728,35729],{"class":188,"line":11204},[186,35730,35731],{"class":192},"            # 如果预测正确，则准确度test_corrects加1\n",[186,35733,35734,35737,35739,35741,35743],{"class":188,"line":11227},[186,35735,35736],{"class":202},"            test_corrects",[186,35738,10940],{"class":669},[186,35740,34242],{"class":202},[186,35742,4415],{"class":669},[186,35744,35745],{"class":202},"test_data_y.data)\n",[186,35747,35748],{"class":188,"line":11251},[186,35749,35750],{"class":192},"            # 将所有的测试样本进行累计\n",[186,35752,35753,35756,35758,35761,35763],{"class":188,"line":11256},[186,35754,35755],{"class":202},"            test_num",[186,35757,10940],{"class":669},[186,35759,35760],{"class":202},"test_data_x.size(",[186,35762,1803],{"class":206},[186,35764,1629],{"class":202},[186,35766,35767],{"class":188,"line":11261},[186,35768,3867],{"emptyLinePlaceholder":1551},[186,35770,35771],{"class":188,"line":11266},[186,35772,35773],{"class":192},"        # 计算准确度\n",[186,35775,35776,35779,35781,35784,35786],{"class":188,"line":11275},[186,35777,35778],{"class":202},"        test_acc",[186,35780,529],{"class":669},[186,35782,35783],{"class":202},"test_corrects.double().item()",[186,35785,2194],{"class":669},[186,35787,35788],{"class":202},"test_num\n",[186,35790,35791],{"class":188,"line":11280},[186,35792,35793],{"class":192},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[186,35795,35796,35798,35800,35803],{"class":188,"line":11286},[186,35797,33906],{"class":206},[186,35799,832],{"class":202},[186,35801,35802],{"class":532},"\"测试的准确率：\"",[186,35804,35805],{"class":202},",test_acc)\n",[186,35807,35808],{"class":188,"line":11307},[186,35809,3867],{"emptyLinePlaceholder":1551},[186,35811,35812],{"class":188,"line":11313},[186,35813,35814],{"class":192},"# 实现模型的测试功能\n",[186,35816,35817,35819,35821,35823,35825],{"class":188,"line":11327},[186,35818,3003],{"class":669},[186,35820,32675],{"class":206},[186,35822,4415],{"class":669},[186,35824,32680],{"class":532},[186,35826,5205],{"class":202},[186,35828,35829],{"class":188,"line":11333},[186,35830,35831],{"class":192},"    # 加载模型\n",[186,35833,35834,35836,35838],{"class":188,"line":11360},[186,35835,32744],{"class":202},[186,35837,529],{"class":669},[186,35839,35280],{"class":202},[186,35841,35842],{"class":188,"line":11369},[186,35843,35844],{"class":192},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[186,35846,35847],{"class":188,"line":11375},[186,35848,35849],{"class":192},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[186,35851,35852,35855,35858],{"class":188,"line":11383},[186,35853,35854],{"class":202},"    model.load_state_dict(torch.load(",[186,35856,35857],{"class":532},"'best_model.pth'",[186,35859,31952],{"class":202},[186,35861,35862],{"class":188,"line":11388},[186,35863,35864],{"class":192},"    # 数据加载\n",[186,35866,35867,35869,35871],{"class":188,"line":18065},[186,35868,35477],{"class":202},[186,35870,529],{"class":669},[186,35872,35873],{"class":202},"test_data_process()\n",[186,35875,35876],{"class":188,"line":18071},[186,35877,35878],{"class":192},"    # 加载模型测试的函数\n",[186,35880,35881],{"class":188,"line":18094},[186,35882,35883],{"class":202},"    test_model_process(model,test_dataloader)\n",[186,35885,35886],{"class":188,"line":18100},[186,35887,3867],{"emptyLinePlaceholder":1551},[186,35889,35890],{"class":188,"line":18123},[186,35891,35892],{"class":192},"    # 验证集推理实现：\n",[186,35894,35895],{"class":188,"line":18137},[186,35896,35897],{"class":192},"    # 加载数据加载的更详细一些\n",[186,35899,35900,35902,35904,35906,35908,35910,35912],{"class":188,"line":18157},[186,35901,32692],{"class":202},[186,35903,529],{"class":669},[186,35905,32699],{"class":532},[186,35907,3172],{"class":669},[186,35909,32704],{"class":202},[186,35911,3169],{"class":669},[186,35913,35574],{"class":532},[186,35915,35916,35918,35920],{"class":188,"line":18163},[186,35917,32744],{"class":202},[186,35919,529],{"class":669},[186,35921,33744],{"class":202},[186,35923,35924],{"class":188,"line":18174},[186,35925,35926],{"class":192},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[186,35928,35929],{"class":188,"line":18197},[186,35930,35931],{"class":192},"    # 顺序不可改变\n",[186,35933,35934,35937,35939,35941,35944,35946,35949,35951,35954,35956,35959,35961,35964,35966,35969,35971,35974,35976,35979,35981,35984,35986,35989],{"class":188,"line":18219},[186,35935,35936],{"class":202},"    classes",[186,35938,529],{"class":669},[186,35940,2498],{"class":202},[186,35942,35943],{"class":532},"'T-shirt\u002Ftop'",[186,35945,1988],{"class":202},[186,35947,35948],{"class":532},"'Trouser'",[186,35950,1988],{"class":202},[186,35952,35953],{"class":532},"'Pullover'",[186,35955,1988],{"class":202},[186,35957,35958],{"class":532},"'Dress'",[186,35960,1988],{"class":202},[186,35962,35963],{"class":532},"'Coat'",[186,35965,1988],{"class":202},[186,35967,35968],{"class":532},"'Sandal'",[186,35970,1988],{"class":202},[186,35972,35973],{"class":532},"'Shirt'",[186,35975,1988],{"class":202},[186,35977,35978],{"class":532},"'Sneaker'",[186,35980,1988],{"class":202},[186,35982,35983],{"class":532},"'Bag'",[186,35985,1988],{"class":202},[186,35987,35988],{"class":532},"'Ankle boot'",[186,35990,34701],{"class":202},[186,35992,35993,35995],{"class":188,"line":18224},[186,35994,35633],{"class":669},[186,35996,34339],{"class":202},[186,35998,35999],{"class":188,"line":18230},[186,36000,36001],{"class":192},"        # 将数据和标签都放到设备当中\n",[186,36003,36004,36006,36009,36011],{"class":188,"line":18244},[186,36005,4869],{"class":669},[186,36007,36008],{"class":202}," b_x,b_y ",[186,36010,27500],{"class":669},[186,36012,35652],{"class":202},[186,36014,36015,36017,36019],{"class":188,"line":18257},[186,36016,34065],{"class":202},[186,36018,529],{"class":669},[186,36020,34070],{"class":202},[186,36022,36023,36025,36027],{"class":188,"line":18262},[186,36024,34080],{"class":202},[186,36026,529],{"class":669},[186,36028,34085],{"class":202},[186,36030,36031],{"class":188,"line":18276},[186,36032,3867],{"emptyLinePlaceholder":1551},[186,36034,36035],{"class":188,"line":18281},[186,36036,36037],{"class":192},"            # 设置模型为验证模式\n",[186,36039,36040],{"class":188,"line":18287},[186,36041,34330],{"class":202},[186,36043,36044],{"class":188,"line":18292},[186,36045,36046],{"class":192},"            # 模型推理结果\n",[186,36048,36049,36051,36053],{"class":188,"line":18306},[186,36050,34115],{"class":202},[186,36052,529],{"class":669},[186,36054,34120],{"class":202},[186,36056,36057],{"class":188,"line":18311},[186,36058,36059],{"class":192},"            # 获取最大下标，最大下标就是类别号\n",[186,36061,36062,36064,36066,36068,36070,36072,36074],{"class":188,"line":18316},[186,36063,34132],{"class":202},[186,36065,529],{"class":669},[186,36067,34137],{"class":202},[186,36069,34140],{"class":835},[186,36071,529],{"class":669},[186,36073,1829],{"class":206},[186,36075,1629],{"class":202},[186,36077,36078],{"class":188,"line":18330},[186,36079,36080],{"class":192},"            # 取出张量中的数值\n",[186,36082,36083,36086,36088],{"class":188,"line":18342},[186,36084,36085],{"class":202},"            result",[186,36087,529],{"class":669},[186,36089,36090],{"class":202},"pre_lab.item()\n",[186,36092,36093,36096,36098],{"class":188,"line":18347},[186,36094,36095],{"class":202},"            label",[186,36097,529],{"class":669},[186,36099,36100],{"class":202},"b_y.item()\n",[186,36102,36103,36106,36108,36111,36114,36117,36119,36122],{"class":188,"line":18360},[186,36104,36105],{"class":206},"            print",[186,36107,832],{"class":202},[186,36109,36110],{"class":532},"\"预测值：\"",[186,36112,36113],{"class":202},",classes[result],",[186,36115,36116],{"class":532},"\"------\"",[186,36118,1988],{"class":202},[186,36120,36121],{"class":532},"\"真实值：\"",[186,36123,36124],{"class":202},",classes[label])\n",[169,36126,36127],{},"（2）AlexNet",[34,36129,36130],{},[22,36131,36132],{},"神经网络构建",[176,36134,36136],{"className":31833,"code":36135,"language":31835,"meta":181,"style":181},"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",[183,36137,36138,36144,36154,36164,36176,36180,36197,36205,36220,36232,36274,36301,36344,36370,36414,36457,36500,36527,36531,36541,36546,36574,36593,36612,36616,36621,36629,36644,36654,36668,36678,36693,36708,36723,36734,36738,36743,36753,36768,36773,36787,36802,36814,36819,36830,36835,36841,36846,36858,36878,36883,36892],{"__ignoreMap":181},[186,36139,36140,36142],{"class":188,"line":189},[186,36141,31847],{"class":669},[186,36143,31850],{"class":202},[186,36145,36146,36148,36150,36152],{"class":188,"line":49},[186,36147,32192],{"class":669},[186,36149,32195],{"class":202},[186,36151,31847],{"class":669},[186,36153,32200],{"class":202},[186,36155,36156,36158,36160,36162],{"class":188,"line":219},[186,36157,32192],{"class":669},[186,36159,32212],{"class":202},[186,36161,31847],{"class":669},[186,36163,32217],{"class":202},[186,36165,36166,36168,36171,36173],{"class":188,"line":225},[186,36167,31847],{"class":669},[186,36169,36170],{"class":202}," torch.nn.functional ",[186,36172,32838],{"class":669},[186,36174,36175],{"class":202}," F\n",[186,36177,36178],{"class":188,"line":242},[186,36179,3867],{"emptyLinePlaceholder":1551},[186,36181,36182,36184,36187,36189,36191,36193,36195],{"class":188,"line":248},[186,36183,16156],{"class":669},[186,36185,36186],{"class":198}," AlexNet",[186,36188,832],{"class":202},[186,36190,32233],{"class":198},[186,36192,2168],{"class":202},[186,36194,32238],{"class":198},[186,36196,32241],{"class":202},[186,36198,36199,36201,36203],{"class":188,"line":265},[186,36200,32256],{"class":669},[186,36202,32259],{"class":206},[186,36204,32262],{"class":202},[186,36206,36207,36209,36212,36214,36216,36218],{"class":188,"line":271},[186,36208,32272],{"class":206},[186,36210,36211],{"class":202},"(AlexNet,",[186,36213,32278],{"class":206},[186,36215,32281],{"class":202},[186,36217,32284],{"class":206},[186,36219,3443],{"class":202},[186,36221,36222,36224,36227,36229],{"class":188,"line":288},[186,36223,32300],{"class":206},[186,36225,36226],{"class":202},".ReLu",[186,36228,529],{"class":669},[186,36230,36231],{"class":202},"nn.ReLU()\n",[186,36233,36234,36236,36238,36240,36242,36244,36246,36248,36250,36252,36254,36256,36258,36260,36262,36264,36266,36268,36270,36272],{"class":188,"line":294},[186,36235,32300],{"class":206},[186,36237,32303],{"class":202},[186,36239,529],{"class":669},[186,36241,32308],{"class":202},[186,36243,32311],{"class":835},[186,36245,529],{"class":669},[186,36247,1829],{"class":206},[186,36249,1988],{"class":202},[186,36251,32320],{"class":835},[186,36253,529],{"class":669},[186,36255,1821],{"class":206},[186,36257,1988],{"class":202},[186,36259,32329],{"class":835},[186,36261,529],{"class":669},[186,36263,2082],{"class":206},[186,36265,1988],{"class":202},[186,36267,32384],{"class":835},[186,36269,529],{"class":669},[186,36271,1904],{"class":206},[186,36273,1629],{"class":202},[186,36275,36276,36278,36280,36282,36285,36287,36289,36291,36293,36295,36297,36299],{"class":188,"line":1212},[186,36277,32300],{"class":206},[186,36279,32368],{"class":202},[186,36281,529],{"class":669},[186,36283,36284],{"class":202},"nn.MaxPool2d(",[186,36286,32329],{"class":835},[186,36288,529],{"class":669},[186,36290,1691],{"class":206},[186,36292,1988],{"class":202},[186,36294,32384],{"class":835},[186,36296,529],{"class":669},[186,36298,1697],{"class":206},[186,36300,1629],{"class":202},[186,36302,36303,36305,36307,36309,36311,36313,36315,36317,36319,36321,36323,36326,36328,36330,36332,36334,36336,36338,36340,36342],{"class":188,"line":1223},[186,36304,32300],{"class":206},[186,36306,32397],{"class":202},[186,36308,529],{"class":669},[186,36310,32308],{"class":202},[186,36312,32311],{"class":835},[186,36314,529],{"class":669},[186,36316,1821],{"class":206},[186,36318,1988],{"class":202},[186,36320,32320],{"class":835},[186,36322,529],{"class":669},[186,36324,36325],{"class":206},"256",[186,36327,1988],{"class":202},[186,36329,32329],{"class":835},[186,36331,529],{"class":669},[186,36333,1930],{"class":206},[186,36335,1988],{"class":202},[186,36337,32338],{"class":835},[186,36339,529],{"class":669},[186,36341,1697],{"class":206},[186,36343,1629],{"class":202},[186,36345,36346,36348,36350,36352,36354,36356,36358,36360,36362,36364,36366,36368],{"class":188,"line":1236},[186,36347,32300],{"class":206},[186,36349,32432],{"class":202},[186,36351,529],{"class":669},[186,36353,36284],{"class":202},[186,36355,32329],{"class":835},[186,36357,529],{"class":669},[186,36359,1691],{"class":206},[186,36361,1988],{"class":202},[186,36363,32384],{"class":835},[186,36365,529],{"class":669},[186,36367,1697],{"class":206},[186,36369,1629],{"class":202},[186,36371,36372,36374,36377,36379,36381,36383,36385,36387,36389,36391,36393,36396,36398,36400,36402,36404,36406,36408,36410,36412],{"class":188,"line":3096},[186,36373,32300],{"class":206},[186,36375,36376],{"class":202},".c5",[186,36378,529],{"class":669},[186,36380,32308],{"class":202},[186,36382,32311],{"class":835},[186,36384,529],{"class":669},[186,36386,36325],{"class":206},[186,36388,1988],{"class":202},[186,36390,32320],{"class":835},[186,36392,529],{"class":669},[186,36394,36395],{"class":206},"384",[186,36397,1988],{"class":202},[186,36399,32329],{"class":835},[186,36401,529],{"class":669},[186,36403,1691],{"class":206},[186,36405,1988],{"class":202},[186,36407,32338],{"class":835},[186,36409,529],{"class":669},[186,36411,1829],{"class":206},[186,36413,1629],{"class":202},[186,36415,36416,36418,36421,36423,36425,36427,36429,36431,36433,36435,36437,36439,36441,36443,36445,36447,36449,36451,36453,36455],{"class":188,"line":3110},[186,36417,32300],{"class":206},[186,36419,36420],{"class":202},".c6",[186,36422,529],{"class":669},[186,36424,32308],{"class":202},[186,36426,32311],{"class":835},[186,36428,529],{"class":669},[186,36430,36395],{"class":206},[186,36432,1988],{"class":202},[186,36434,32320],{"class":835},[186,36436,529],{"class":669},[186,36438,36395],{"class":206},[186,36440,1988],{"class":202},[186,36442,32329],{"class":835},[186,36444,529],{"class":669},[186,36446,1691],{"class":206},[186,36448,1988],{"class":202},[186,36450,32338],{"class":835},[186,36452,529],{"class":669},[186,36454,1829],{"class":206},[186,36456,1629],{"class":202},[186,36458,36459,36461,36464,36466,36468,36470,36472,36474,36476,36478,36480,36482,36484,36486,36488,36490,36492,36494,36496,36498],{"class":188,"line":3115},[186,36460,32300],{"class":206},[186,36462,36463],{"class":202},".c7",[186,36465,529],{"class":669},[186,36467,32308],{"class":202},[186,36469,32311],{"class":835},[186,36471,529],{"class":669},[186,36473,36395],{"class":206},[186,36475,1988],{"class":202},[186,36477,32320],{"class":835},[186,36479,529],{"class":669},[186,36481,36325],{"class":206},[186,36483,1988],{"class":202},[186,36485,32329],{"class":835},[186,36487,529],{"class":669},[186,36489,1691],{"class":206},[186,36491,1988],{"class":202},[186,36493,32338],{"class":835},[186,36495,529],{"class":669},[186,36497,1829],{"class":206},[186,36499,1629],{"class":202},[186,36501,36502,36504,36507,36509,36511,36513,36515,36517,36519,36521,36523,36525],{"class":188,"line":3121},[186,36503,32300],{"class":206},[186,36505,36506],{"class":202},".s8",[186,36508,529],{"class":669},[186,36510,36284],{"class":202},[186,36512,32329],{"class":835},[186,36514,529],{"class":669},[186,36516,1691],{"class":206},[186,36518,1988],{"class":202},[186,36520,32384],{"class":835},[186,36522,529],{"class":669},[186,36524,1697],{"class":206},[186,36526,1629],{"class":202},[186,36528,36529],{"class":188,"line":3142},[186,36530,32457],{"class":192},[186,36532,36533,36535,36537,36539],{"class":188,"line":3147},[186,36534,32300],{"class":206},[186,36536,32464],{"class":202},[186,36538,529],{"class":669},[186,36540,32469],{"class":202},[186,36542,36543],{"class":188,"line":3161},[186,36544,36545],{"class":192},"       # 定义全连接层\n",[186,36547,36548,36550,36553,36555,36557,36559,36561,36563,36565,36567,36569,36572],{"class":188,"line":3166},[186,36549,32300],{"class":206},[186,36551,36552],{"class":202},".f1",[186,36554,529],{"class":669},[186,36556,32486],{"class":202},[186,36558,1954],{"class":206},[186,36560,2065],{"class":669},[186,36562,1954],{"class":206},[186,36564,2065],{"class":669},[186,36566,36325],{"class":206},[186,36568,1988],{"class":202},[186,36570,36571],{"class":206},"4096",[186,36573,1629],{"class":202},[186,36575,36576,36578,36581,36583,36585,36587,36589,36591],{"class":188,"line":3195},[186,36577,32300],{"class":206},[186,36579,36580],{"class":202},".f2",[186,36582,529],{"class":669},[186,36584,32486],{"class":202},[186,36586,36571],{"class":206},[186,36588,1988],{"class":202},[186,36590,36571],{"class":206},[186,36592,1629],{"class":202},[186,36594,36595,36597,36600,36602,36604,36606,36608,36610],{"class":188,"line":3200},[186,36596,32300],{"class":206},[186,36598,36599],{"class":202},".f3",[186,36601,529],{"class":669},[186,36603,32486],{"class":202},[186,36605,36571],{"class":206},[186,36607,1988],{"class":202},[186,36609,2056],{"class":206},[186,36611,1629],{"class":202},[186,36613,36614],{"class":188,"line":3217},[186,36615,3867],{"emptyLinePlaceholder":1551},[186,36617,36618],{"class":188,"line":3222},[186,36619,36620],{"class":192},"    # 定义前向传播\n",[186,36622,36623,36625,36627],{"class":188,"line":3227},[186,36624,32256],{"class":669},[186,36626,32548],{"class":198},[186,36628,32551],{"class":202},[186,36630,36631,36633,36635,36637,36640,36642],{"class":188,"line":3232},[186,36632,32556],{"class":202},[186,36634,529],{"class":669},[186,36636,32278],{"class":206},[186,36638,36639],{"class":202},".ReLu(",[186,36641,32278],{"class":206},[186,36643,32568],{"class":202},[186,36645,36646,36648,36650,36652],{"class":188,"line":3246},[186,36647,32556],{"class":202},[186,36649,529],{"class":669},[186,36651,32278],{"class":206},[186,36653,32579],{"class":202},[186,36655,36656,36658,36660,36662,36664,36666],{"class":188,"line":3251},[186,36657,32556],{"class":202},[186,36659,529],{"class":669},[186,36661,32278],{"class":206},[186,36663,36639],{"class":202},[186,36665,32278],{"class":206},[186,36667,32594],{"class":202},[186,36669,36670,36672,36674,36676],{"class":188,"line":4044},[186,36671,32556],{"class":202},[186,36673,529],{"class":669},[186,36675,32278],{"class":206},[186,36677,32605],{"class":202},[186,36679,36680,36682,36684,36686,36688,36690],{"class":188,"line":4058},[186,36681,32556],{"class":202},[186,36683,529],{"class":669},[186,36685,32278],{"class":206},[186,36687,36639],{"class":202},[186,36689,32278],{"class":206},[186,36691,36692],{"class":202},".c5(x))\n",[186,36694,36695,36697,36699,36701,36703,36705],{"class":188,"line":4066},[186,36696,32556],{"class":202},[186,36698,529],{"class":669},[186,36700,32278],{"class":206},[186,36702,36639],{"class":202},[186,36704,32278],{"class":206},[186,36706,36707],{"class":202},".c6(x))\n",[186,36709,36710,36712,36714,36716,36718,36720],{"class":188,"line":4071},[186,36711,32556],{"class":202},[186,36713,529],{"class":669},[186,36715,32278],{"class":206},[186,36717,36639],{"class":202},[186,36719,32278],{"class":206},[186,36721,36722],{"class":202},".c7(x))\n",[186,36724,36725,36727,36729,36731],{"class":188,"line":4077},[186,36726,32556],{"class":202},[186,36728,529],{"class":669},[186,36730,32278],{"class":206},[186,36732,36733],{"class":202},".s8(x)\n",[186,36735,36736],{"class":188,"line":4083},[186,36737,3867],{"emptyLinePlaceholder":1551},[186,36739,36740],{"class":188,"line":4088},[186,36741,36742],{"class":192},"        # 展平加线性全连接层\n",[186,36744,36745,36747,36749,36751],{"class":188,"line":9411},[186,36746,32556],{"class":202},[186,36748,529],{"class":669},[186,36750,32278],{"class":206},[186,36752,32616],{"class":202},[186,36754,36755,36757,36759,36761,36763,36765],{"class":188,"line":9435},[186,36756,32556],{"class":202},[186,36758,529],{"class":669},[186,36760,32278],{"class":206},[186,36762,36639],{"class":202},[186,36764,32278],{"class":206},[186,36766,36767],{"class":202},".f1(x))\n",[186,36769,36770],{"class":188,"line":9440},[186,36771,36772],{"class":192},"        # 还需要dropout对神经元随机进行失活\n",[186,36774,36775,36777,36779,36782,36785],{"class":188,"line":9446},[186,36776,32556],{"class":202},[186,36778,529],{"class":669},[186,36780,36781],{"class":202},"F.dropout(x,",[186,36783,36784],{"class":206},"0.5",[186,36786,1629],{"class":202},[186,36788,36789,36791,36793,36795,36797,36799],{"class":188,"line":9473},[186,36790,32556],{"class":202},[186,36792,529],{"class":669},[186,36794,32278],{"class":206},[186,36796,36639],{"class":202},[186,36798,32278],{"class":206},[186,36800,36801],{"class":202},".f2(x))\n",[186,36803,36804,36806,36808,36810,36812],{"class":188,"line":9478},[186,36805,32556],{"class":202},[186,36807,529],{"class":669},[186,36809,36781],{"class":202},[186,36811,36784],{"class":206},[186,36813,1629],{"class":202},[186,36815,36816],{"class":188,"line":9484},[186,36817,36818],{"class":192},"        # 直接输出\n",[186,36820,36821,36823,36825,36827],{"class":188,"line":9496},[186,36822,32556],{"class":202},[186,36824,529],{"class":669},[186,36826,32278],{"class":206},[186,36828,36829],{"class":202},".f3(x)\n",[186,36831,36832],{"class":188,"line":9508},[186,36833,36834],{"class":192},"        # 前向传播输出\n",[186,36836,36837,36839],{"class":188,"line":9520},[186,36838,16214],{"class":669},[186,36840,32664],{"class":202},[186,36842,36843],{"class":188,"line":11179},[186,36844,36845],{"class":192},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[186,36847,36848,36850,36852,36854,36856],{"class":188,"line":11204},[186,36849,3003],{"class":669},[186,36851,32675],{"class":206},[186,36853,4415],{"class":669},[186,36855,32680],{"class":532},[186,36857,5205],{"class":202},[186,36859,36860,36862,36864,36866,36868,36870,36872,36874,36876],{"class":188,"line":11227},[186,36861,32692],{"class":202},[186,36863,529],{"class":669},[186,36865,31906],{"class":202},[186,36867,32699],{"class":532},[186,36869,3172],{"class":669},[186,36871,32704],{"class":202},[186,36873,3169],{"class":669},[186,36875,31931],{"class":532},[186,36877,1629],{"class":202},[186,36879,36880],{"class":188,"line":11251},[186,36881,36882],{"class":192},"    # 模型实例化，然后将实例化的模型放到设备中\n",[186,36884,36885,36887,36889],{"class":188,"line":11256},[186,36886,32744],{"class":202},[186,36888,529],{"class":669},[186,36890,36891],{"class":202},"AlexNet().to(device)\n",[186,36893,36894,36896,36898,36900,36902,36905,36907,36909],{"class":188,"line":11261},[186,36895,32754],{"class":206},[186,36897,32757],{"class":202},[186,36899,1829],{"class":206},[186,36901,1988],{"class":202},[186,36903,36904],{"class":206},"227",[186,36906,1988],{"class":202},[186,36908,36904],{"class":206},[186,36910,32770],{"class":202},[34,36912,36913],{"start":49},[22,36914,32783],{},[176,36916,36918],{"className":31833,"code":36917,"language":31835,"meta":181,"style":181},"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",[183,36919,36920,36926,36932,36942,36948,36958,36968,36978,36988,36998,37002,37013,37023,37027,37031,37035,37043,37055,37065,37081,37091,37123,37137,37147,37157,37161,37171,37185,37195,37205,37215,37221,37225,37229,37233,37237,37241,37249,37269,37273,37277,37281,37285,37289,37305,37309,37313,37321,37325,37329,37337,37341,37345,37349,37357,37361,37365,37369,37373,37381,37385,37393,37397,37405,37409,37417,37421,37429,37433,37437,37445,37449,37453,37457,37469,37493,37507,37511,37515,37519,37527,37531,37539,37543,37551,37555,37563,37567,37575,37579,37587,37591,37603,37607,37615,37619,37627,37631,37635,37639,37643,37651,37655,37671,37675,37683,37687,37691,37695,37699,37703,37707,37711,37727,37731,37743,37747,37759,37763,37775,37779,37787,37791,37799,37803,37807,37812,37818,37822,37831,37835,37852,37856,37865,37869,37887,37900,37905,37918,37922,37926,37934,37938,37942,37950,37954,37962,37966,37974,37978,37982,38024,38066,38070,38074,38090,38094,38110,38114,38118,38126,38130,38134,38146,38184,38189,38194,38203,38207,38221,38231,38237,38243,38249,38255,38259,38263,38269,38273,38277,38285,38289,38307,38311,38315,38319,38335,38339,38343,38347,38351,38355,38375,38395,38399,38403,38407,38415,38423,38427,38443,38463,38483,38487,38491,38499,38507,38511,38515,38519,38531,38535,38545,38553,38570],{"__ignoreMap":181},[186,36921,36922,36924],{"class":188,"line":189},[186,36923,31847],{"class":669},[186,36925,33277],{"class":202},[186,36927,36928,36930],{"class":188,"line":49},[186,36929,31847],{"class":669},[186,36931,33284],{"class":202},[186,36933,36934,36936,36938,36940],{"class":188,"line":219},[186,36935,31847],{"class":669},[186,36937,33295],{"class":202},[186,36939,32838],{"class":669},[186,36941,33300],{"class":202},[186,36943,36944,36946],{"class":188,"line":225},[186,36945,31847],{"class":669},[186,36947,31850],{"class":202},[186,36949,36950,36952,36954,36956],{"class":188,"line":242},[186,36951,32192],{"class":669},[186,36953,32870],{"class":202},[186,36955,31847],{"class":669},[186,36957,33317],{"class":202},[186,36959,36960,36962,36964,36966],{"class":188,"line":248},[186,36961,32192],{"class":669},[186,36963,32823],{"class":202},[186,36965,31847],{"class":669},[186,36967,32828],{"class":202},[186,36969,36970,36972,36974,36976],{"class":188,"line":265},[186,36971,32192],{"class":669},[186,36973,32853],{"class":202},[186,36975,31847],{"class":669},[186,36977,32858],{"class":202},[186,36979,36980,36982,36984,36986],{"class":188,"line":271},[186,36981,31847],{"class":669},[186,36983,32870],{"class":202},[186,36985,32838],{"class":669},[186,36987,32875],{"class":202},[186,36989,36990,36992,36994,36996],{"class":188,"line":288},[186,36991,31847],{"class":669},[186,36993,32887],{"class":202},[186,36995,32838],{"class":669},[186,36997,32892],{"class":202},[186,36999,37000],{"class":188,"line":294},[186,37001,33362],{"class":192},[186,37003,37004,37006,37008,37010],{"class":188,"line":1212},[186,37005,32192],{"class":669},[186,37007,33369],{"class":202},[186,37009,31847],{"class":669},[186,37011,37012],{"class":202}," AlexNet\n",[186,37014,37015,37017,37019,37021],{"class":188,"line":1223},[186,37016,32192],{"class":669},[186,37018,32195],{"class":202},[186,37020,31847],{"class":669},[186,37022,32200],{"class":202},[186,37024,37025],{"class":188,"line":1236},[186,37026,3867],{"emptyLinePlaceholder":1551},[186,37028,37029],{"class":188,"line":3096},[186,37030,3867],{"emptyLinePlaceholder":1551},[186,37032,37033],{"class":188,"line":3110},[186,37034,33397],{"class":192},[186,37036,37037,37039,37041],{"class":188,"line":3115},[186,37038,33402],{"class":669},[186,37040,33405],{"class":198},[186,37042,33408],{"class":202},[186,37044,37045,37047,37049,37051,37053],{"class":188,"line":3121},[186,37046,33413],{"class":202},[186,37048,529],{"class":669},[186,37050,32910],{"class":202},[186,37052,32918],{"class":532},[186,37054,32921],{"class":202},[186,37056,37057,37059,37061,37063],{"class":188,"line":3142},[186,37058,33426],{"class":835},[186,37060,529],{"class":669},[186,37062,32931],{"class":206},[186,37064,32921],{"class":202},[186,37066,37067,37069,37071,37073,37075,37077,37079],{"class":188,"line":3147},[186,37068,33437],{"class":835},[186,37070,529],{"class":669},[186,37072,32948],{"class":202},[186,37074,32951],{"class":835},[186,37076,529],{"class":669},[186,37078,36904],{"class":206},[186,37080,32959],{"class":202},[186,37082,37083,37085,37087,37089],{"class":188,"line":3161},[186,37084,33454],{"class":835},[186,37086,529],{"class":669},[186,37088,32931],{"class":206},[186,37090,1629],{"class":202},[186,37092,37093,37095,37097,37099,37101,37103,37105,37107,37109,37111,37113,37115,37117,37119,37121],{"class":188,"line":3166},[186,37094,33465],{"class":202},[186,37096,529],{"class":669},[186,37098,33470],{"class":202},[186,37100,33473],{"class":206},[186,37102,832],{"class":202},[186,37104,33478],{"class":206},[186,37106,2065],{"class":669},[186,37108,8821],{"class":206},[186,37110,33485],{"class":202},[186,37112,33473],{"class":206},[186,37114,832],{"class":202},[186,37116,33492],{"class":206},[186,37118,2065],{"class":669},[186,37120,8821],{"class":206},[186,37122,33499],{"class":202},[186,37124,37125,37127,37129,37131,37133,37135],{"class":188,"line":3195},[186,37126,33504],{"class":202},[186,37128,529],{"class":669},[186,37130,33509],{"class":202},[186,37132,32992],{"class":835},[186,37134,529],{"class":669},[186,37136,32997],{"class":202},[186,37138,37139,37141,37143,37145],{"class":188,"line":3200},[186,37140,33520],{"class":835},[186,37142,529],{"class":669},[186,37144,33525],{"class":206},[186,37146,32921],{"class":202},[186,37148,37149,37151,37153,37155],{"class":188,"line":3217},[186,37150,33532],{"class":835},[186,37152,529],{"class":669},[186,37154,32931],{"class":206},[186,37156,32921],{"class":202},[186,37158,37159],{"class":188,"line":3222},[186,37160,33543],{"class":192},[186,37162,37163,37165,37167,37169],{"class":188,"line":3227},[186,37164,33548],{"class":835},[186,37166,529],{"class":669},[186,37168,2005],{"class":206},[186,37170,1629],{"class":202},[186,37172,37173,37175,37177,37179,37181,37183],{"class":188,"line":3232},[186,37174,33559],{"class":202},[186,37176,529],{"class":669},[186,37178,32989],{"class":202},[186,37180,32992],{"class":835},[186,37182,529],{"class":669},[186,37184,33570],{"class":202},[186,37186,37187,37189,37191,37193],{"class":188,"line":3246},[186,37188,33575],{"class":835},[186,37190,529],{"class":669},[186,37192,33525],{"class":206},[186,37194,32921],{"class":202},[186,37196,37197,37199,37201,37203],{"class":188,"line":3251},[186,37198,33586],{"class":835},[186,37200,529],{"class":669},[186,37202,32931],{"class":206},[186,37204,32921],{"class":202},[186,37206,37207,37209,37211,37213],{"class":188,"line":4044},[186,37208,33597],{"class":835},[186,37210,529],{"class":669},[186,37212,2005],{"class":206},[186,37214,1629],{"class":202},[186,37216,37217,37219],{"class":188,"line":4058},[186,37218,5556],{"class":669},[186,37220,33610],{"class":202},[186,37222,37223],{"class":188,"line":4066},[186,37224,3867],{"emptyLinePlaceholder":1551},[186,37226,37227],{"class":188,"line":4071},[186,37228,33619],{"class":192},[186,37230,37231],{"class":188,"line":4077},[186,37232,33624],{"class":192},[186,37234,37235],{"class":188,"line":4083},[186,37236,3867],{"emptyLinePlaceholder":1551},[186,37238,37239],{"class":188,"line":4088},[186,37240,33633],{"class":192},[186,37242,37243,37245,37247],{"class":188,"line":9411},[186,37244,33402],{"class":669},[186,37246,33640],{"class":198},[186,37248,33643],{"class":202},[186,37250,37251,37253,37255,37257,37259,37261,37263,37265,37267],{"class":188,"line":9435},[186,37252,32692],{"class":202},[186,37254,529],{"class":669},[186,37256,31906],{"class":202},[186,37258,32699],{"class":532},[186,37260,3172],{"class":669},[186,37262,32704],{"class":202},[186,37264,3169],{"class":669},[186,37266,33662],{"class":532},[186,37268,1629],{"class":202},[186,37270,37271],{"class":188,"line":9440},[186,37272,3867],{"emptyLinePlaceholder":1551},[186,37274,37275],{"class":188,"line":9446},[186,37276,3867],{"emptyLinePlaceholder":1551},[186,37278,37279],{"class":188,"line":9473},[186,37280,33677],{"class":192},[186,37282,37283],{"class":188,"line":9478},[186,37284,33682],{"class":192},[186,37286,37287],{"class":188,"line":9484},[186,37288,33687],{"class":192},[186,37290,37291,37293,37295,37297,37299,37301,37303],{"class":188,"line":9496},[186,37292,33692],{"class":202},[186,37294,529],{"class":669},[186,37296,33697],{"class":202},[186,37298,33700],{"class":835},[186,37300,529],{"class":669},[186,37302,33705],{"class":206},[186,37304,1629],{"class":202},[186,37306,37307],{"class":188,"line":9508},[186,37308,3867],{"emptyLinePlaceholder":1551},[186,37310,37311],{"class":188,"line":9520},[186,37312,33716],{"class":192},[186,37314,37315,37317,37319],{"class":188,"line":11179},[186,37316,33721],{"class":202},[186,37318,529],{"class":669},[186,37320,33726],{"class":202},[186,37322,37323],{"class":188,"line":11204},[186,37324,3867],{"emptyLinePlaceholder":1551},[186,37326,37327],{"class":188,"line":11227},[186,37328,33735],{"class":192},[186,37330,37331,37333,37335],{"class":188,"line":11251},[186,37332,32744],{"class":202},[186,37334,529],{"class":669},[186,37336,33744],{"class":202},[186,37338,37339],{"class":188,"line":11256},[186,37340,33749],{"class":192},[186,37342,37343],{"class":188,"line":11261},[186,37344,33754],{"class":192},[186,37346,37347],{"class":188,"line":11266},[186,37348,33759],{"class":192},[186,37350,37351,37353,37355],{"class":188,"line":11275},[186,37352,33764],{"class":202},[186,37354,529],{"class":669},[186,37356,33769],{"class":202},[186,37358,37359],{"class":188,"line":11280},[186,37360,3867],{"emptyLinePlaceholder":1551},[186,37362,37363],{"class":188,"line":11286},[186,37364,3867],{"emptyLinePlaceholder":1551},[186,37366,37367],{"class":188,"line":11307},[186,37368,33782],{"class":192},[186,37370,37371],{"class":188,"line":11313},[186,37372,33787],{"class":192},[186,37374,37375,37377,37379],{"class":188,"line":11327},[186,37376,33792],{"class":202},[186,37378,529],{"class":669},[186,37380,33797],{"class":206},[186,37382,37383],{"class":188,"line":11333},[186,37384,33802],{"class":192},[186,37386,37387,37389,37391],{"class":188,"line":11360},[186,37388,33807],{"class":202},[186,37390,529],{"class":669},[186,37392,33812],{"class":202},[186,37394,37395],{"class":188,"line":11369},[186,37396,33817],{"class":192},[186,37398,37399,37401,37403],{"class":188,"line":11375},[186,37400,33822],{"class":202},[186,37402,529],{"class":669},[186,37404,33812],{"class":202},[186,37406,37407],{"class":188,"line":11383},[186,37408,33831],{"class":192},[186,37410,37411,37413,37415],{"class":188,"line":11388},[186,37412,33836],{"class":202},[186,37414,529],{"class":669},[186,37416,33812],{"class":202},[186,37418,37419],{"class":188,"line":18065},[186,37420,33845],{"class":192},[186,37422,37423,37425,37427],{"class":188,"line":18071},[186,37424,33850],{"class":202},[186,37426,529],{"class":669},[186,37428,33812],{"class":202},[186,37430,37431],{"class":188,"line":18094},[186,37432,3867],{"emptyLinePlaceholder":1551},[186,37434,37435],{"class":188,"line":18100},[186,37436,33863],{"class":192},[186,37438,37439,37441,37443],{"class":188,"line":18123},[186,37440,33868],{"class":202},[186,37442,529],{"class":669},[186,37444,33873],{"class":202},[186,37446,37447],{"class":188,"line":18137},[186,37448,3867],{"emptyLinePlaceholder":1551},[186,37450,37451],{"class":188,"line":18157},[186,37452,3867],{"emptyLinePlaceholder":1551},[186,37454,37455],{"class":188,"line":18163},[186,37456,33886],{"class":192},[186,37458,37459,37461,37463,37465,37467],{"class":188,"line":18174},[186,37460,4667],{"class":669},[186,37462,33893],{"class":202},[186,37464,27500],{"class":669},[186,37466,33898],{"class":206},[186,37468,33901],{"class":202},[186,37470,37471,37473,37475,37477,37479,37481,37483,37485,37487,37489,37491],{"class":188,"line":18197},[186,37472,33906],{"class":206},[186,37474,832],{"class":202},[186,37476,33911],{"class":532},[186,37478,33914],{"class":206},[186,37480,2194],{"class":532},[186,37482,33914],{"class":206},[186,37484,1862],{"class":532},[186,37486,33923],{"class":202},[186,37488,2142],{"class":669},[186,37490,1829],{"class":206},[186,37492,31952],{"class":202},[186,37494,37495,37497,37499,37501,37503,37505],{"class":188,"line":18219},[186,37496,33906],{"class":206},[186,37498,832],{"class":202},[186,37500,33938],{"class":532},[186,37502,2065],{"class":669},[186,37504,2056],{"class":206},[186,37506,1629],{"class":202},[186,37508,37509],{"class":188,"line":18224},[186,37510,3867],{"emptyLinePlaceholder":1551},[186,37512,37513],{"class":188,"line":18230},[186,37514,33953],{"class":192},[186,37516,37517],{"class":188,"line":18244},[186,37518,33958],{"class":192},[186,37520,37521,37523,37525],{"class":188,"line":18257},[186,37522,33963],{"class":202},[186,37524,529],{"class":669},[186,37526,33797],{"class":206},[186,37528,37529],{"class":188,"line":18262},[186,37530,33972],{"class":192},[186,37532,37533,37535,37537],{"class":188,"line":18276},[186,37534,33977],{"class":202},[186,37536,529],{"class":669},[186,37538,4551],{"class":206},[186,37540,37541],{"class":188,"line":18281},[186,37542,33986],{"class":192},[186,37544,37545,37547,37549],{"class":188,"line":18287},[186,37546,33991],{"class":202},[186,37548,529],{"class":669},[186,37550,33797],{"class":206},[186,37552,37553],{"class":188,"line":18292},[186,37554,34000],{"class":192},[186,37556,37557,37559,37561],{"class":188,"line":18306},[186,37558,34005],{"class":202},[186,37560,529],{"class":669},[186,37562,4551],{"class":206},[186,37564,37565],{"class":188,"line":18311},[186,37566,34014],{"class":192},[186,37568,37569,37571,37573],{"class":188,"line":18316},[186,37570,34019],{"class":202},[186,37572,529],{"class":669},[186,37574,4551],{"class":206},[186,37576,37577],{"class":188,"line":18330},[186,37578,34028],{"class":192},[186,37580,37581,37583,37585],{"class":188,"line":18342},[186,37582,34033],{"class":202},[186,37584,529],{"class":669},[186,37586,4551],{"class":206},[186,37588,37589],{"class":188,"line":18347},[186,37590,34042],{"class":192},[186,37592,37593,37595,37597,37599,37601],{"class":188,"line":18360},[186,37594,4869],{"class":669},[186,37596,33056],{"class":202},[186,37598,27500],{"class":669},[186,37600,33061],{"class":206},[186,37602,34055],{"class":202},[186,37604,37605],{"class":188,"line":18365},[186,37606,34060],{"class":192},[186,37608,37609,37611,37613],{"class":188,"line":18370},[186,37610,34065],{"class":202},[186,37612,529],{"class":669},[186,37614,34070],{"class":202},[186,37616,37617],{"class":188,"line":18375},[186,37618,34075],{"class":192},[186,37620,37621,37623,37625],{"class":188,"line":18388},[186,37622,34080],{"class":202},[186,37624,529],{"class":669},[186,37626,34085],{"class":202},[186,37628,37629],{"class":188,"line":18393},[186,37630,34091],{"class":192},[186,37632,37633],{"class":188,"line":34088},[186,37634,34097],{"class":202},[186,37636,37637],{"class":188,"line":34094},[186,37638,34103],{"class":192},[186,37640,37641],{"class":188,"line":34100},[186,37642,34109],{"class":192},[186,37644,37645,37647,37649],{"class":188,"line":34106},[186,37646,34115],{"class":202},[186,37648,529],{"class":669},[186,37650,34120],{"class":202},[186,37652,37653],{"class":188,"line":34112},[186,37654,34126],{"class":192},[186,37656,37657,37659,37661,37663,37665,37667,37669],{"class":188,"line":34123},[186,37658,34132],{"class":202},[186,37660,529],{"class":669},[186,37662,34137],{"class":202},[186,37664,34140],{"class":835},[186,37666,529],{"class":669},[186,37668,1829],{"class":206},[186,37670,1629],{"class":202},[186,37672,37673],{"class":188,"line":34129},[186,37674,34152],{"class":192},[186,37676,37677,37679,37681],{"class":188,"line":34149},[186,37678,34158],{"class":202},[186,37680,529],{"class":669},[186,37682,34163],{"class":202},[186,37684,37685],{"class":188,"line":34155},[186,37686,34169],{"class":192},[186,37688,37689],{"class":188,"line":34166},[186,37690,34175],{"class":202},[186,37692,37693],{"class":188,"line":34172},[186,37694,34181],{"class":192},[186,37696,37697],{"class":188,"line":34178},[186,37698,34187],{"class":202},[186,37700,37701],{"class":188,"line":34184},[186,37702,34193],{"class":192},[186,37704,37705],{"class":188,"line":34190},[186,37706,34199],{"class":202},[186,37708,37709],{"class":188,"line":34196},[186,37710,34205],{"class":192},[186,37712,37713,37715,37717,37719,37721,37723,37725],{"class":188,"line":34202},[186,37714,34211],{"class":202},[186,37716,10940],{"class":669},[186,37718,34216],{"class":202},[186,37720,2065],{"class":669},[186,37722,34221],{"class":202},[186,37724,1803],{"class":206},[186,37726,1629],{"class":202},[186,37728,37729],{"class":188,"line":34208},[186,37730,34231],{"class":192},[186,37732,37733,37735,37737,37739,37741],{"class":188,"line":34228},[186,37734,34237],{"class":202},[186,37736,10940],{"class":669},[186,37738,34242],{"class":202},[186,37740,4415],{"class":669},[186,37742,34247],{"class":202},[186,37744,37745],{"class":188,"line":34234},[186,37746,34253],{"class":192},[186,37748,37749,37751,37753,37755,37757],{"class":188,"line":34250},[186,37750,34259],{"class":202},[186,37752,10940],{"class":669},[186,37754,34221],{"class":202},[186,37756,1803],{"class":206},[186,37758,1629],{"class":202},[186,37760,37761],{"class":188,"line":34256},[186,37762,34273],{"class":192},[186,37764,37765,37767,37769,37771,37773],{"class":188,"line":34270},[186,37766,4869],{"class":669},[186,37768,34281],{"class":202},[186,37770,27500],{"class":669},[186,37772,33061],{"class":206},[186,37774,34288],{"class":202},[186,37776,37777],{"class":188,"line":34276},[186,37778,34294],{"class":192},[186,37780,37781,37783,37785],{"class":188,"line":34291},[186,37782,34065],{"class":202},[186,37784,529],{"class":669},[186,37786,34070],{"class":202},[186,37788,37789],{"class":188,"line":34297},[186,37790,34309],{"class":192},[186,37792,37793,37795,37797],{"class":188,"line":34306},[186,37794,34080],{"class":202},[186,37796,529],{"class":669},[186,37798,34085],{"class":202},[186,37800,37801],{"class":188,"line":34312},[186,37802,34324],{"class":192},[186,37804,37805],{"class":188,"line":34321},[186,37806,34330],{"class":202},[186,37808,37809],{"class":188,"line":34327},[186,37810,37811],{"class":192},"            # 验证时不计算梯度以节省内存\u002F计算\n",[186,37813,37814,37816],{"class":188,"line":34333},[186,37815,34336],{"class":669},[186,37817,34339],{"class":202},[186,37819,37820],{"class":188,"line":34342},[186,37821,34345],{"class":192},[186,37823,37824,37827,37829],{"class":188,"line":34348},[186,37825,37826],{"class":202},"                output",[186,37828,529],{"class":669},[186,37830,34120],{"class":202},[186,37832,37833],{"class":188,"line":34359},[186,37834,34362],{"class":192},[186,37836,37837,37840,37842,37844,37846,37848,37850],{"class":188,"line":34365},[186,37838,37839],{"class":202},"                pre_lab",[186,37841,529],{"class":669},[186,37843,34137],{"class":202},[186,37845,34140],{"class":835},[186,37847,529],{"class":669},[186,37849,1829],{"class":206},[186,37851,1629],{"class":202},[186,37853,37854],{"class":188,"line":34384},[186,37855,34387],{"class":192},[186,37857,37858,37861,37863],{"class":188,"line":34390},[186,37859,37860],{"class":202},"                val_batch_loss",[186,37862,529],{"class":669},[186,37864,34163],{"class":202},[186,37866,37867],{"class":188,"line":34401},[186,37868,34404],{"class":192},[186,37870,37871,37874,37876,37879,37881,37883,37885],{"class":188,"line":34407},[186,37872,37873],{"class":202},"                val_loss",[186,37875,10940],{"class":669},[186,37877,37878],{"class":202},"val_batch_loss.item()",[186,37880,2065],{"class":669},[186,37882,34221],{"class":202},[186,37884,1803],{"class":206},[186,37886,1629],{"class":202},[186,37888,37889,37892,37894,37896,37898],{"class":188,"line":34427},[186,37890,37891],{"class":202},"                val_corrects",[186,37893,10940],{"class":669},[186,37895,34242],{"class":202},[186,37897,4415],{"class":669},[186,37899,34247],{"class":202},[186,37901,37902],{"class":188,"line":34443},[186,37903,37904],{"class":192},"            # 当前用于验证的样本数量\n",[186,37906,37907,37910,37912,37914,37916],{"class":188,"line":34449},[186,37908,37909],{"class":202},"            val_num",[186,37911,10940],{"class":669},[186,37913,34221],{"class":202},[186,37915,1803],{"class":206},[186,37917,1629],{"class":202},[186,37919,37920],{"class":188,"line":34463},[186,37921,34466],{"class":192},[186,37923,37924],{"class":188,"line":34469},[186,37925,34472],{"class":192},[186,37927,37928,37930,37932],{"class":188,"line":34475},[186,37929,34478],{"class":202},[186,37931,2194],{"class":669},[186,37933,34483],{"class":202},[186,37935,37936],{"class":188,"line":34486},[186,37937,34489],{"class":192},[186,37939,37940],{"class":188,"line":34492},[186,37941,34495],{"class":192},[186,37943,37944,37946,37948],{"class":188,"line":34498},[186,37945,34501],{"class":202},[186,37947,2194],{"class":669},[186,37949,34483],{"class":202},[186,37951,37952],{"class":188,"line":34508},[186,37953,34511],{"class":192},[186,37955,37956,37958,37960],{"class":188,"line":34514},[186,37957,34517],{"class":202},[186,37959,2194],{"class":669},[186,37961,34522],{"class":202},[186,37963,37964],{"class":188,"line":34525},[186,37965,34528],{"class":192},[186,37967,37968,37970,37972],{"class":188,"line":34531},[186,37969,34534],{"class":202},[186,37971,2194],{"class":669},[186,37973,34522],{"class":202},[186,37975,37976],{"class":188,"line":34541},[186,37977,3867],{"emptyLinePlaceholder":1551},[186,37979,37980],{"class":188,"line":34546},[186,37981,34549],{"class":192},[186,37983,37984,37986,37988,37990,37992,37994,37996,37998,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022],{"class":188,"line":34552},[186,37985,33906],{"class":206},[186,37987,832],{"class":202},[186,37989,5058],{"class":532},[186,37991,33914],{"class":206},[186,37993,34563],{"class":532},[186,37995,2504],{"class":206},[186,37997,34568],{"class":669},[186,37999,2553],{"class":206},[186,38001,34573],{"class":532},[186,38003,2504],{"class":206},[186,38005,34568],{"class":669},[186,38007,2553],{"class":206},[186,38009,5058],{"class":532},[186,38011,34584],{"class":202},[186,38013,2142],{"class":669},[186,38015,1829],{"class":206},[186,38017,34591],{"class":202},[186,38019,2142],{"class":669},[186,38021,1829],{"class":206},[186,38023,34598],{"class":202},[186,38025,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064],{"class":188,"line":34601},[186,38027,33906],{"class":206},[186,38029,832],{"class":202},[186,38031,5058],{"class":532},[186,38033,33914],{"class":206},[186,38035,34612],{"class":532},[186,38037,2504],{"class":206},[186,38039,34568],{"class":669},[186,38041,2553],{"class":206},[186,38043,34621],{"class":532},[186,38045,2504],{"class":206},[186,38047,34568],{"class":669},[186,38049,2553],{"class":206},[186,38051,5058],{"class":532},[186,38053,34632],{"class":202},[186,38055,2142],{"class":669},[186,38057,1829],{"class":206},[186,38059,34639],{"class":202},[186,38061,2142],{"class":669},[186,38063,1829],{"class":206},[186,38065,34598],{"class":202},[186,38067,38068],{"class":188,"line":34648},[186,38069,3867],{"emptyLinePlaceholder":1551},[186,38071,38072],{"class":188,"line":34653},[186,38073,34656],{"class":192},[186,38075,38076,38078,38080,38082,38084,38086,38088],{"class":188,"line":34659},[186,38077,3964],{"class":669},[186,38079,34664],{"class":202},[186,38081,2142],{"class":669},[186,38083,1829],{"class":206},[186,38085,2547],{"class":202},[186,38087,2567],{"class":669},[186,38089,34675],{"class":202},[186,38091,38092],{"class":188,"line":34678},[186,38093,34681],{"class":192},[186,38095,38096,38098,38100,38102,38104,38106,38108],{"class":188,"line":34684},[186,38097,34687],{"class":202},[186,38099,1662],{"class":206},[186,38101,529],{"class":669},[186,38103,34694],{"class":202},[186,38105,2142],{"class":669},[186,38107,1829],{"class":206},[186,38109,34701],{"class":202},[186,38111,38112],{"class":188,"line":34704},[186,38113,34707],{"class":192},[186,38115,38116],{"class":188,"line":34710},[186,38117,34713],{"class":192},[186,38119,38120,38122,38124],{"class":188,"line":34716},[186,38121,34719],{"class":202},[186,38123,529],{"class":669},[186,38125,33769],{"class":202},[186,38127,38128],{"class":188,"line":34726},[186,38129,3867],{"emptyLinePlaceholder":1551},[186,38131,38132],{"class":188,"line":34731},[186,38133,34734],{"class":192},[186,38135,38136,38138,38140,38142,38144],{"class":188,"line":34737},[186,38137,34740],{"class":202},[186,38139,529],{"class":669},[186,38141,34745],{"class":202},[186,38143,2142],{"class":669},[186,38145,34750],{"class":202},[186,38147,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182],{"class":188,"line":34753},[186,38149,33906],{"class":206},[186,38151,832],{"class":202},[186,38153,34760],{"class":532},[186,38155,2504],{"class":206},[186,38157,34765],{"class":669},[186,38159,2553],{"class":206},[186,38161,2154],{"class":532},[186,38163,2504],{"class":206},[186,38165,34765],{"class":669},[186,38167,2553],{"class":206},[186,38169,34778],{"class":532},[186,38171,34781],{"class":202},[186,38173,34784],{"class":669},[186,38175,2515],{"class":206},[186,38177,34789],{"class":202},[186,38179,670],{"class":669},[186,38181,2515],{"class":206},[186,38183,31952],{"class":202},[186,38185,38186],{"class":188,"line":34798},[186,38187,38188],{"class":192},"    # 选择最优参数并保存\n",[186,38190,38191],{"class":188,"line":34804},[186,38192,38193],{"class":192},"    # 保存最佳模型权重字典\n",[186,38195,38196,38199,38201],{"class":188,"line":34810},[186,38197,38198],{"class":202},"    torch.save(best_model_wts,",[186,38200,34822],{"class":532},[186,38202,1629],{"class":202},[186,38204,38205],{"class":188,"line":34816},[186,38206,34842],{"class":192},[186,38208,38209,38211,38213,38215,38217,38219],{"class":188,"line":34827},[186,38210,34848],{"class":202},[186,38212,529],{"class":669},[186,38214,34853],{"class":202},[186,38216,34856],{"class":835},[186,38218,529],{"class":669},[186,38220,3018],{"class":202},[186,38222,38223,38225,38227,38229],{"class":188,"line":34833},[186,38224,34866],{"class":532},[186,38226,2467],{"class":202},[186,38228,34871],{"class":206},[186,38230,34874],{"class":202},[186,38232,38233,38235],{"class":188,"line":34839},[186,38234,34880],{"class":532},[186,38236,34883],{"class":202},[186,38238,38239,38241],{"class":188,"line":34845},[186,38240,34889],{"class":532},[186,38242,34892],{"class":202},[186,38244,38245,38247],{"class":188,"line":34863},[186,38246,34898],{"class":532},[186,38248,34901],{"class":202},[186,38250,38251,38253],{"class":188,"line":34877},[186,38252,34907],{"class":532},[186,38254,34910],{"class":202},[186,38256,38257],{"class":188,"line":34886},[186,38258,34916],{"class":202},[186,38260,38261],{"class":188,"line":34895},[186,38262,34922],{"class":192},[186,38264,38265,38267],{"class":188,"line":34904},[186,38266,5556],{"class":669},[186,38268,34930],{"class":202},[186,38270,38271],{"class":188,"line":34913},[186,38272,3867],{"emptyLinePlaceholder":1551},[186,38274,38275],{"class":188,"line":34919},[186,38276,34941],{"class":192},[186,38278,38279,38281,38283],{"class":188,"line":34925},[186,38280,33402],{"class":669},[186,38282,34949],{"class":198},[186,38284,34952],{"class":202},[186,38286,38287],{"class":188,"line":34933},[186,38288,34958],{"class":192},[186,38290,38291,38293,38295,38297,38299,38301,38303,38305],{"class":188,"line":34938},[186,38292,34964],{"class":202},[186,38294,33148],{"class":835},[186,38296,529],{"class":669},[186,38298,832],{"class":202},[186,38300,2108],{"class":206},[186,38302,1988],{"class":202},[186,38304,1904],{"class":206},[186,38306,31952],{"class":202},[186,38308,38309],{"class":188,"line":34944},[186,38310,34984],{"class":192},[186,38312,38313],{"class":188,"line":34955},[186,38314,34990],{"class":192},[186,38316,38317],{"class":188,"line":34961},[186,38318,34996],{"class":192},[186,38320,38321,38323,38325,38327,38329,38331,38333],{"class":188,"line":34981},[186,38322,33182],{"class":202},[186,38324,1829],{"class":206},[186,38326,1988],{"class":202},[186,38328,1697],{"class":206},[186,38330,1988],{"class":202},[186,38332,1829],{"class":206},[186,38334,1629],{"class":202},[186,38336,38337],{"class":188,"line":34987},[186,38338,35019],{"class":192},[186,38340,38341],{"class":188,"line":34993},[186,38342,35025],{"class":192},[186,38344,38345],{"class":188,"line":34999},[186,38346,35031],{"class":192},[186,38348,38349],{"class":188,"line":35016},[186,38350,35037],{"class":192},[186,38352,38353],{"class":188,"line":35022},[186,38354,35043],{"class":192},[186,38356,38357,38359,38361,38363,38365,38367,38369,38371,38373],{"class":188,"line":35028},[186,38358,35049],{"class":202},[186,38360,35052],{"class":532},[186,38362,35055],{"class":202},[186,38364,35058],{"class":532},[186,38366,1988],{"class":202},[186,38368,35063],{"class":835},[186,38370,529],{"class":669},[186,38372,35068],{"class":532},[186,38374,1629],{"class":202},[186,38376,38377,38379,38381,38383,38385,38387,38389,38391,38393],{"class":188,"line":35034},[186,38378,35049],{"class":202},[186,38380,35052],{"class":532},[186,38382,35080],{"class":202},[186,38384,35083],{"class":532},[186,38386,1988],{"class":202},[186,38388,35063],{"class":835},[186,38390,529],{"class":669},[186,38392,35092],{"class":532},[186,38394,1629],{"class":202},[186,38396,38397],{"class":188,"line":35040},[186,38398,35100],{"class":192},[186,38400,38401],{"class":188,"line":35046},[186,38402,35106],{"class":202},[186,38404,38405],{"class":188,"line":35073},[186,38406,35112],{"class":192},[186,38408,38409,38411,38413],{"class":188,"line":35097},[186,38410,35118],{"class":202},[186,38412,35121],{"class":532},[186,38414,1629],{"class":202},[186,38416,38417,38419,38421],{"class":188,"line":35103},[186,38418,35129],{"class":202},[186,38420,35132],{"class":532},[186,38422,1629],{"class":202},[186,38424,38425],{"class":188,"line":35109},[186,38426,35140],{"class":192},[186,38428,38429,38431,38433,38435,38437,38439,38441],{"class":188,"line":35115},[186,38430,33182],{"class":202},[186,38432,1829],{"class":206},[186,38434,1988],{"class":202},[186,38436,1697],{"class":206},[186,38438,1988],{"class":202},[186,38440,1697],{"class":206},[186,38442,1629],{"class":202},[186,38444,38445,38447,38449,38451,38453,38455,38457,38459,38461],{"class":188,"line":35126},[186,38446,35049],{"class":202},[186,38448,35052],{"class":532},[186,38450,35167],{"class":202},[186,38452,35058],{"class":532},[186,38454,1988],{"class":202},[186,38456,35063],{"class":835},[186,38458,529],{"class":669},[186,38460,35178],{"class":532},[186,38462,1629],{"class":202},[186,38464,38465,38467,38469,38471,38473,38475,38477,38479,38481],{"class":188,"line":35137},[186,38466,35049],{"class":202},[186,38468,35052],{"class":532},[186,38470,35190],{"class":202},[186,38472,35083],{"class":532},[186,38474,1988],{"class":202},[186,38476,35063],{"class":835},[186,38478,529],{"class":669},[186,38480,35201],{"class":532},[186,38482,1629],{"class":202},[186,38484,38485],{"class":188,"line":35143},[186,38486,35209],{"class":192},[186,38488,38489],{"class":188,"line":35160},[186,38490,35106],{"class":202},[186,38492,38493,38495,38497],{"class":188,"line":35183},[186,38494,35118],{"class":202},[186,38496,35052],{"class":532},[186,38498,1629],{"class":202},[186,38500,38501,38503,38505],{"class":188,"line":35206},[186,38502,35129],{"class":202},[186,38504,35231],{"class":532},[186,38506,1629],{"class":202},[186,38508,38509],{"class":188,"line":35212},[186,38510,35239],{"class":202},[186,38512,38513],{"class":188,"line":35217},[186,38514,3867],{"emptyLinePlaceholder":1551},[186,38516,38517],{"class":188,"line":35226},[186,38518,35250],{"class":192},[186,38520,38521,38523,38525,38527,38529],{"class":188,"line":35236},[186,38522,3003],{"class":669},[186,38524,32675],{"class":206},[186,38526,4415],{"class":669},[186,38528,32680],{"class":532},[186,38530,5205],{"class":202},[186,38532,38533],{"class":188,"line":35242},[186,38534,35269],{"class":192},[186,38536,38537,38540,38542],{"class":188,"line":35247},[186,38538,38539],{"class":202},"    AlexNet",[186,38541,529],{"class":669},[186,38543,38544],{"class":202},"AlexNet()\n",[186,38546,38547,38549,38551],{"class":188,"line":35253},[186,38548,35286],{"class":202},[186,38550,529],{"class":669},[186,38552,35291],{"class":202},[186,38554,38555,38557,38559,38562,38564,38566,38568],{"class":188,"line":35266},[186,38556,34848],{"class":202},[186,38558,529],{"class":669},[186,38560,38561],{"class":202},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[186,38563,35304],{"class":835},[186,38565,529],{"class":669},[186,38567,801],{"class":206},[186,38569,1629],{"class":202},[186,38571,38572],{"class":188,"line":35272},[186,38573,35316],{"class":202},[34,38575,38576],{"start":219},[22,38577,35329],{},[176,38579,38581],{"className":31833,"code":38580,"language":31835,"meta":181,"style":181},"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",[183,38582,38583,38589,38599,38609,38619,38623,38633,38643,38654,38658,38662,38666,38674,38690,38700,38716,38726,38740,38744,38754,38764,38774,38780,38784,38788,38796,38800,38816,38824,38828,38832,38840,38848,38852,38856,38860,38864,38870,38874,38884,38892,38900,38904,38908,38912,38920,38924,38940,38944,38948,38952,38964,38968,38980,38984,38988,39000,39004,39014,39018,39022,39034,39038,39046,39050,39054,39062,39066,39074,39078,39082,39086,39090,39094,39110,39118,39122,39126,39174,39180,39184,39194,39202,39210,39214,39218,39222,39226,39234,39238,39254,39258,39266,39274],{"__ignoreMap":181},[186,38584,38585,38587],{"class":188,"line":189},[186,38586,31847],{"class":669},[186,38588,31850],{"class":202},[186,38590,38591,38593,38595,38597],{"class":188,"line":49},[186,38592,31847],{"class":669},[186,38594,32870],{"class":202},[186,38596,32838],{"class":669},[186,38598,32875],{"class":202},[186,38600,38601,38603,38605,38607],{"class":188,"line":219},[186,38602,32192],{"class":669},[186,38604,35357],{"class":202},[186,38606,31847],{"class":669},[186,38608,35362],{"class":202},[186,38610,38611,38613,38615,38617],{"class":188,"line":225},[186,38612,32192],{"class":669},[186,38614,32853],{"class":202},[186,38616,31847],{"class":669},[186,38618,32858],{"class":202},[186,38620,38621],{"class":188,"line":242},[186,38622,35377],{"class":192},[186,38624,38625,38627,38629,38631],{"class":188,"line":248},[186,38626,32192],{"class":669},[186,38628,32823],{"class":202},[186,38630,31847],{"class":669},[186,38632,32828],{"class":202},[186,38634,38635,38637,38639,38641],{"class":188,"line":265},[186,38636,32192],{"class":669},[186,38638,33369],{"class":202},[186,38640,31847],{"class":669},[186,38642,37012],{"class":202},[186,38644,38645,38647,38650,38652],{"class":188,"line":271},[186,38646,32192],{"class":669},[186,38648,38649],{"class":202}," 练习.AlexNet.model ",[186,38651,31847],{"class":669},[186,38653,37012],{"class":202},[186,38655,38656],{"class":188,"line":288},[186,38657,3867],{"emptyLinePlaceholder":1551},[186,38659,38660],{"class":188,"line":294},[186,38661,3867],{"emptyLinePlaceholder":1551},[186,38663,38664],{"class":188,"line":1212},[186,38665,35406],{"class":192},[186,38667,38668,38670,38672],{"class":188,"line":1223},[186,38669,33402],{"class":669},[186,38671,35413],{"class":198},[186,38673,33408],{"class":202},[186,38675,38676,38678,38680,38682,38684,38686,38688],{"class":188,"line":1236},[186,38677,35420],{"class":202},[186,38679,529],{"class":669},[186,38681,32910],{"class":202},[186,38683,32913],{"class":835},[186,38685,529],{"class":669},[186,38687,32918],{"class":532},[186,38689,32921],{"class":202},[186,38691,38692,38694,38696,38698],{"class":188,"line":3096},[186,38693,35437],{"class":835},[186,38695,529],{"class":669},[186,38697,35442],{"class":206},[186,38699,32921],{"class":202},[186,38701,38702,38704,38706,38708,38710,38712,38714],{"class":188,"line":3110},[186,38703,35449],{"class":835},[186,38705,529],{"class":669},[186,38707,32948],{"class":202},[186,38709,32951],{"class":835},[186,38711,529],{"class":669},[186,38713,36904],{"class":206},[186,38715,32959],{"class":202},[186,38717,38718,38720,38722,38724],{"class":188,"line":3115},[186,38719,35466],{"class":835},[186,38721,529],{"class":669},[186,38723,32931],{"class":206},[186,38725,1629],{"class":202},[186,38727,38728,38730,38732,38734,38736,38738],{"class":188,"line":3121},[186,38729,35477],{"class":202},[186,38731,529],{"class":669},[186,38733,32989],{"class":202},[186,38735,32992],{"class":835},[186,38737,529],{"class":669},[186,38739,35488],{"class":202},[186,38741,38742],{"class":188,"line":3142},[186,38743,35493],{"class":192},[186,38745,38746,38748,38750,38752],{"class":188,"line":3147},[186,38747,35498],{"class":835},[186,38749,529],{"class":669},[186,38751,1829],{"class":206},[186,38753,32921],{"class":202},[186,38755,38756,38758,38760,38762],{"class":188,"line":3161},[186,38757,35509],{"class":835},[186,38759,529],{"class":669},[186,38761,32931],{"class":206},[186,38763,32921],{"class":202},[186,38765,38766,38768,38770,38772],{"class":188,"line":3166},[186,38767,35520],{"class":835},[186,38769,529],{"class":669},[186,38771,1803],{"class":206},[186,38773,1629],{"class":202},[186,38775,38776,38778],{"class":188,"line":3195},[186,38777,5556],{"class":669},[186,38779,35533],{"class":202},[186,38781,38782],{"class":188,"line":3200},[186,38783,3867],{"emptyLinePlaceholder":1551},[186,38785,38786],{"class":188,"line":3217},[186,38787,35542],{"class":192},[186,38789,38790,38792,38794],{"class":188,"line":3222},[186,38791,33402],{"class":669},[186,38793,35549],{"class":198},[186,38795,35552],{"class":202},[186,38797,38798],{"class":188,"line":3227},[186,38799,35557],{"class":192},[186,38801,38802,38804,38806,38808,38810,38812,38814],{"class":188,"line":3232},[186,38803,32692],{"class":202},[186,38805,529],{"class":669},[186,38807,32699],{"class":532},[186,38809,3172],{"class":669},[186,38811,32704],{"class":202},[186,38813,3169],{"class":669},[186,38815,35574],{"class":532},[186,38817,38818,38820,38822],{"class":188,"line":3246},[186,38819,32744],{"class":202},[186,38821,529],{"class":669},[186,38823,33744],{"class":202},[186,38825,38826],{"class":188,"line":3251},[186,38827,3867],{"emptyLinePlaceholder":1551},[186,38829,38830],{"class":188,"line":4044},[186,38831,35591],{"class":192},[186,38833,38834,38836,38838],{"class":188,"line":4058},[186,38835,35596],{"class":202},[186,38837,529],{"class":669},[186,38839,33797],{"class":206},[186,38841,38842,38844,38846],{"class":188,"line":4066},[186,38843,35605],{"class":202},[186,38845,529],{"class":669},[186,38847,4551],{"class":206},[186,38849,38850],{"class":188,"line":4071},[186,38851,3867],{"emptyLinePlaceholder":1551},[186,38853,38854],{"class":188,"line":4077},[186,38855,35618],{"class":192},[186,38857,38858],{"class":188,"line":4083},[186,38859,35623],{"class":192},[186,38861,38862],{"class":188,"line":4088},[186,38863,35628],{"class":192},[186,38865,38866,38868],{"class":188,"line":9411},[186,38867,35633],{"class":669},[186,38869,34339],{"class":202},[186,38871,38872],{"class":188,"line":9435},[186,38873,35640],{"class":192},[186,38875,38876,38878,38880,38882],{"class":188,"line":9440},[186,38877,4869],{"class":669},[186,38879,35647],{"class":202},[186,38881,27500],{"class":669},[186,38883,35652],{"class":202},[186,38885,38886,38888,38890],{"class":188,"line":9446},[186,38887,35657],{"class":202},[186,38889,529],{"class":669},[186,38891,35662],{"class":202},[186,38893,38894,38896,38898],{"class":188,"line":9473},[186,38895,35667],{"class":202},[186,38897,529],{"class":669},[186,38899,35672],{"class":202},[186,38901,38902],{"class":188,"line":9478},[186,38903,35677],{"class":192},[186,38905,38906],{"class":188,"line":9484},[186,38907,34330],{"class":202},[186,38909,38910],{"class":188,"line":9496},[186,38911,35686],{"class":192},[186,38913,38914,38916,38918],{"class":188,"line":9508},[186,38915,34115],{"class":202},[186,38917,529],{"class":669},[186,38919,35695],{"class":202},[186,38921,38922],{"class":188,"line":9520},[186,38923,35700],{"class":192},[186,38925,38926,38928,38930,38932,38934,38936,38938],{"class":188,"line":11179},[186,38927,34132],{"class":202},[186,38929,529],{"class":669},[186,38931,34137],{"class":202},[186,38933,34140],{"class":835},[186,38935,529],{"class":669},[186,38937,1829],{"class":206},[186,38939,1629],{"class":202},[186,38941,38942],{"class":188,"line":11204},[186,38943,35721],{"class":192},[186,38945,38946],{"class":188,"line":11227},[186,38947,35726],{"class":192},[186,38949,38950],{"class":188,"line":11251},[186,38951,35731],{"class":192},[186,38953,38954,38956,38958,38960,38962],{"class":188,"line":11256},[186,38955,35736],{"class":202},[186,38957,10940],{"class":669},[186,38959,34242],{"class":202},[186,38961,4415],{"class":669},[186,38963,35745],{"class":202},[186,38965,38966],{"class":188,"line":11261},[186,38967,35750],{"class":192},[186,38969,38970,38972,38974,38976,38978],{"class":188,"line":11266},[186,38971,35755],{"class":202},[186,38973,10940],{"class":669},[186,38975,35760],{"class":202},[186,38977,1803],{"class":206},[186,38979,1629],{"class":202},[186,38981,38982],{"class":188,"line":11275},[186,38983,3867],{"emptyLinePlaceholder":1551},[186,38985,38986],{"class":188,"line":11280},[186,38987,35773],{"class":192},[186,38989,38990,38992,38994,38996,38998],{"class":188,"line":11286},[186,38991,35778],{"class":202},[186,38993,529],{"class":669},[186,38995,35783],{"class":202},[186,38997,2194],{"class":669},[186,38999,35788],{"class":202},[186,39001,39002],{"class":188,"line":11307},[186,39003,35793],{"class":192},[186,39005,39006,39008,39010,39012],{"class":188,"line":11313},[186,39007,33906],{"class":206},[186,39009,832],{"class":202},[186,39011,35802],{"class":532},[186,39013,35805],{"class":202},[186,39015,39016],{"class":188,"line":11327},[186,39017,3867],{"emptyLinePlaceholder":1551},[186,39019,39020],{"class":188,"line":11333},[186,39021,35814],{"class":192},[186,39023,39024,39026,39028,39030,39032],{"class":188,"line":11360},[186,39025,3003],{"class":669},[186,39027,32675],{"class":206},[186,39029,4415],{"class":669},[186,39031,32680],{"class":532},[186,39033,5205],{"class":202},[186,39035,39036],{"class":188,"line":11369},[186,39037,35831],{"class":192},[186,39039,39040,39042,39044],{"class":188,"line":11375},[186,39041,32744],{"class":202},[186,39043,529],{"class":669},[186,39045,38544],{"class":202},[186,39047,39048],{"class":188,"line":11383},[186,39049,35844],{"class":192},[186,39051,39052],{"class":188,"line":11388},[186,39053,35849],{"class":192},[186,39055,39056,39058,39060],{"class":188,"line":18065},[186,39057,35854],{"class":202},[186,39059,35857],{"class":532},[186,39061,31952],{"class":202},[186,39063,39064],{"class":188,"line":18071},[186,39065,35864],{"class":192},[186,39067,39068,39070,39072],{"class":188,"line":18094},[186,39069,35477],{"class":202},[186,39071,529],{"class":669},[186,39073,35873],{"class":202},[186,39075,39076],{"class":188,"line":18100},[186,39077,35878],{"class":192},[186,39079,39080],{"class":188,"line":18123},[186,39081,35883],{"class":202},[186,39083,39084],{"class":188,"line":18137},[186,39085,3867],{"emptyLinePlaceholder":1551},[186,39087,39088],{"class":188,"line":18157},[186,39089,35892],{"class":192},[186,39091,39092],{"class":188,"line":18163},[186,39093,35897],{"class":192},[186,39095,39096,39098,39100,39102,39104,39106,39108],{"class":188,"line":18174},[186,39097,32692],{"class":202},[186,39099,529],{"class":669},[186,39101,32699],{"class":532},[186,39103,3172],{"class":669},[186,39105,32704],{"class":202},[186,39107,3169],{"class":669},[186,39109,35574],{"class":532},[186,39111,39112,39114,39116],{"class":188,"line":18197},[186,39113,32744],{"class":202},[186,39115,529],{"class":669},[186,39117,33744],{"class":202},[186,39119,39120],{"class":188,"line":18219},[186,39121,35926],{"class":192},[186,39123,39124],{"class":188,"line":18224},[186,39125,35931],{"class":192},[186,39127,39128,39130,39132,39134,39136,39138,39140,39142,39144,39146,39148,39150,39152,39154,39156,39158,39160,39162,39164,39166,39168,39170,39172],{"class":188,"line":18230},[186,39129,35936],{"class":202},[186,39131,529],{"class":669},[186,39133,2498],{"class":202},[186,39135,35943],{"class":532},[186,39137,1988],{"class":202},[186,39139,35948],{"class":532},[186,39141,1988],{"class":202},[186,39143,35953],{"class":532},[186,39145,1988],{"class":202},[186,39147,35958],{"class":532},[186,39149,1988],{"class":202},[186,39151,35963],{"class":532},[186,39153,1988],{"class":202},[186,39155,35968],{"class":532},[186,39157,1988],{"class":202},[186,39159,35973],{"class":532},[186,39161,1988],{"class":202},[186,39163,35978],{"class":532},[186,39165,1988],{"class":202},[186,39167,35983],{"class":532},[186,39169,1988],{"class":202},[186,39171,35988],{"class":532},[186,39173,34701],{"class":202},[186,39175,39176,39178],{"class":188,"line":18244},[186,39177,35633],{"class":669},[186,39179,34339],{"class":202},[186,39181,39182],{"class":188,"line":18257},[186,39183,36001],{"class":192},[186,39185,39186,39188,39190,39192],{"class":188,"line":18262},[186,39187,4869],{"class":669},[186,39189,36008],{"class":202},[186,39191,27500],{"class":669},[186,39193,35652],{"class":202},[186,39195,39196,39198,39200],{"class":188,"line":18276},[186,39197,34065],{"class":202},[186,39199,529],{"class":669},[186,39201,34070],{"class":202},[186,39203,39204,39206,39208],{"class":188,"line":18281},[186,39205,34080],{"class":202},[186,39207,529],{"class":669},[186,39209,34085],{"class":202},[186,39211,39212],{"class":188,"line":18287},[186,39213,3867],{"emptyLinePlaceholder":1551},[186,39215,39216],{"class":188,"line":18292},[186,39217,36037],{"class":192},[186,39219,39220],{"class":188,"line":18306},[186,39221,34330],{"class":202},[186,39223,39224],{"class":188,"line":18311},[186,39225,36046],{"class":192},[186,39227,39228,39230,39232],{"class":188,"line":18316},[186,39229,34115],{"class":202},[186,39231,529],{"class":669},[186,39233,34120],{"class":202},[186,39235,39236],{"class":188,"line":18330},[186,39237,36059],{"class":192},[186,39239,39240,39242,39244,39246,39248,39250,39252],{"class":188,"line":18342},[186,39241,34132],{"class":202},[186,39243,529],{"class":669},[186,39245,34137],{"class":202},[186,39247,34140],{"class":835},[186,39249,529],{"class":669},[186,39251,1829],{"class":206},[186,39253,1629],{"class":202},[186,39255,39256],{"class":188,"line":18347},[186,39257,36080],{"class":192},[186,39259,39260,39262,39264],{"class":188,"line":18360},[186,39261,36085],{"class":202},[186,39263,529],{"class":669},[186,39265,36090],{"class":202},[186,39267,39268,39270,39272],{"class":188,"line":18365},[186,39269,36095],{"class":202},[186,39271,529],{"class":669},[186,39273,36100],{"class":202},[186,39275,39276,39278,39280,39282,39284,39286,39288,39290],{"class":188,"line":18370},[186,39277,36105],{"class":206},[186,39279,832],{"class":202},[186,39281,36110],{"class":532},[186,39283,36113],{"class":202},[186,39285,36116],{"class":532},[186,39287,1988],{"class":202},[186,39289,36121],{"class":532},[186,39291,36124],{"class":202},[29,39293,39295],{"id":39294},"_22vgg","2.2.VGG",[23459,39297,39299],{"id":39298},"_221原理","2.2.1.原理",[169,39301,39302],{},[164,39303],{"alt":181,"src":39304},"\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",[169,39306,39307],{},[164,39308],{"alt":181,"src":39309},"\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",[169,39311,39312],{},[164,39313],{"alt":181,"src":39314},"\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",[169,39316,39317],{},"参数详细描述：",[169,39319,39320],{},[164,39321],{"alt":181,"src":39322},"\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",[169,39324,39325],{},[164,39326],{"alt":181,"src":39327},"\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",[169,39329,39330],{},[164,39331],{"alt":181,"src":39332},"\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",[169,39334,39335],{},[164,39336],{"alt":181,"src":39337},"\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",[169,39339,39340],{},[164,39341],{"alt":181,"src":39342},"\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",[23459,39344,39346],{"id":39345},"_222代码实现","2.2.2.代码实现",[34,39348,39349],{},[22,39350,39351],{},"网络搭建",[176,39353,39355],{"className":31833,"code":39354,"language":31835,"meta":181,"style":181},"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",[183,39356,39357,39363,39375,39385,39395,39399,39416,39424,39443,39448,39453,39465,39502,39507,39543,39547,39576,39581,39586,39597,39633,39637,39673,39677,39705,39709,39714,39725,39761,39765,39801,39805,39841,39845,39873,39877,39882,39893,39930,39934,39970,39974,40010,40014,40042,40046,40051,40062,40098,40102,40138,40142,40178,40182,40210,40214,40219,40230,40235,40240,40245,40266,40270,40282,40286,40298,40302,40306,40311,40316,40331,40336,40346,40351,40366,40371,40390,40395,40404,40409,40419,40424,40429,40443,40448,40462,40470,40474,40478,40486,40497,40508,40519,40530,40541,40552,40558,40562,40567,40580,40600,40606,40615],{"__ignoreMap":181},[186,39358,39359,39361],{"class":188,"line":189},[186,39360,31847],{"class":669},[186,39362,31850],{"class":202},[186,39364,39365,39367,39370,39372],{"class":188,"line":49},[186,39366,32192],{"class":669},[186,39368,39369],{"class":202}," sympy.core.sympify ",[186,39371,31847],{"class":669},[186,39373,39374],{"class":202}," kernS\n",[186,39376,39377,39379,39381,39383],{"class":188,"line":219},[186,39378,32192],{"class":669},[186,39380,32195],{"class":202},[186,39382,31847],{"class":669},[186,39384,32200],{"class":202},[186,39386,39387,39389,39391,39393],{"class":188,"line":225},[186,39388,32192],{"class":669},[186,39390,32212],{"class":202},[186,39392,31847],{"class":669},[186,39394,32217],{"class":202},[186,39396,39397],{"class":188,"line":242},[186,39398,3867],{"emptyLinePlaceholder":1551},[186,39400,39401,39403,39406,39408,39410,39412,39414],{"class":188,"line":248},[186,39402,16156],{"class":669},[186,39404,39405],{"class":198}," VGG16",[186,39407,832],{"class":202},[186,39409,32233],{"class":198},[186,39411,2168],{"class":202},[186,39413,32238],{"class":198},[186,39415,32241],{"class":202},[186,39417,39418,39420,39422],{"class":188,"line":265},[186,39419,32256],{"class":669},[186,39421,32259],{"class":206},[186,39423,32262],{"class":202},[186,39425,39426,39428,39430,39433,39435,39437,39439,39441],{"class":188,"line":271},[186,39427,32272],{"class":206},[186,39429,832],{"class":202},[186,39431,39432],{"class":206},"VGG16",[186,39434,13898],{"class":202},[186,39436,32278],{"class":206},[186,39438,32281],{"class":202},[186,39440,32284],{"class":206},[186,39442,3443],{"class":202},[186,39444,39445],{"class":188,"line":288},[186,39446,39447],{"class":192},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[186,39449,39450],{"class":188,"line":294},[186,39451,39452],{"class":192},"        # 这里用的是灰度图\n",[186,39454,39455,39457,39460,39462],{"class":188,"line":1212},[186,39456,32300],{"class":206},[186,39458,39459],{"class":202},".block1",[186,39461,529],{"class":669},[186,39463,39464],{"class":202},"nn.Sequential(\n",[186,39466,39467,39470,39472,39474,39476,39478,39480,39482,39484,39486,39488,39490,39492,39494,39496,39498,39500],{"class":188,"line":1223},[186,39468,39469],{"class":202},"            nn.Conv2d(",[186,39471,32311],{"class":835},[186,39473,529],{"class":669},[186,39475,1829],{"class":206},[186,39477,1988],{"class":202},[186,39479,32320],{"class":835},[186,39481,529],{"class":669},[186,39483,1815],{"class":206},[186,39485,1988],{"class":202},[186,39487,32329],{"class":835},[186,39489,529],{"class":669},[186,39491,1691],{"class":206},[186,39493,1988],{"class":202},[186,39495,32338],{"class":835},[186,39497,529],{"class":669},[186,39499,1829],{"class":206},[186,39501,1138],{"class":202},[186,39503,39504],{"class":188,"line":1236},[186,39505,39506],{"class":202},"            nn.ReLU(),\n",[186,39508,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541],{"class":188,"line":3096},[186,39510,39469],{"class":202},[186,39512,32311],{"class":835},[186,39514,529],{"class":669},[186,39516,1815],{"class":206},[186,39518,1988],{"class":202},[186,39520,32320],{"class":835},[186,39522,529],{"class":669},[186,39524,1815],{"class":206},[186,39526,1988],{"class":202},[186,39528,32329],{"class":835},[186,39530,529],{"class":669},[186,39532,1691],{"class":206},[186,39534,1988],{"class":202},[186,39536,32338],{"class":835},[186,39538,529],{"class":669},[186,39540,1829],{"class":206},[186,39542,1138],{"class":202},[186,39544,39545],{"class":188,"line":3110},[186,39546,39506],{"class":202},[186,39548,39549,39552,39554,39556,39558,39560,39562,39564,39566,39568,39570,39572,39574],{"class":188,"line":3115},[186,39550,39551],{"class":202},"            nn.MaxPool2d(",[186,39553,32329],{"class":835},[186,39555,529],{"class":669},[186,39557,1697],{"class":206},[186,39559,1988],{"class":202},[186,39561,32384],{"class":835},[186,39563,529],{"class":669},[186,39565,1697],{"class":206},[186,39567,1988],{"class":202},[186,39569,32338],{"class":835},[186,39571,529],{"class":669},[186,39573,1803],{"class":206},[186,39575,1629],{"class":202},[186,39577,39578],{"class":188,"line":3121},[186,39579,39580],{"class":202},"        )\n",[186,39582,39583],{"class":188,"line":3142},[186,39584,39585],{"class":192},"        # 第二层\n",[186,39587,39588,39590,39593,39595],{"class":188,"line":3147},[186,39589,32300],{"class":206},[186,39591,39592],{"class":202},".block2",[186,39594,529],{"class":669},[186,39596,39464],{"class":202},[186,39598,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631],{"class":188,"line":3161},[186,39600,39469],{"class":202},[186,39602,32311],{"class":835},[186,39604,529],{"class":669},[186,39606,1815],{"class":206},[186,39608,1988],{"class":202},[186,39610,32320],{"class":835},[186,39612,529],{"class":669},[186,39614,33525],{"class":206},[186,39616,1988],{"class":202},[186,39618,32329],{"class":835},[186,39620,529],{"class":669},[186,39622,1691],{"class":206},[186,39624,1988],{"class":202},[186,39626,32338],{"class":835},[186,39628,529],{"class":669},[186,39630,1829],{"class":206},[186,39632,1138],{"class":202},[186,39634,39635],{"class":188,"line":3166},[186,39636,39506],{"class":202},[186,39638,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671],{"class":188,"line":3195},[186,39640,39469],{"class":202},[186,39642,32311],{"class":835},[186,39644,529],{"class":669},[186,39646,33525],{"class":206},[186,39648,1988],{"class":202},[186,39650,32320],{"class":835},[186,39652,529],{"class":669},[186,39654,33525],{"class":206},[186,39656,1988],{"class":202},[186,39658,32329],{"class":835},[186,39660,529],{"class":669},[186,39662,1691],{"class":206},[186,39664,1988],{"class":202},[186,39666,32338],{"class":835},[186,39668,529],{"class":669},[186,39670,1829],{"class":206},[186,39672,1138],{"class":202},[186,39674,39675],{"class":188,"line":3200},[186,39676,39506],{"class":202},[186,39678,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703],{"class":188,"line":3217},[186,39680,39551],{"class":202},[186,39682,32329],{"class":835},[186,39684,529],{"class":669},[186,39686,1697],{"class":206},[186,39688,1988],{"class":202},[186,39690,32384],{"class":835},[186,39692,529],{"class":669},[186,39694,1697],{"class":206},[186,39696,1988],{"class":202},[186,39698,32338],{"class":835},[186,39700,529],{"class":669},[186,39702,1803],{"class":206},[186,39704,1629],{"class":202},[186,39706,39707],{"class":188,"line":3222},[186,39708,39580],{"class":202},[186,39710,39711],{"class":188,"line":3227},[186,39712,39713],{"class":192},"        # 第三层\n",[186,39715,39716,39718,39721,39723],{"class":188,"line":3232},[186,39717,32300],{"class":206},[186,39719,39720],{"class":202},".block3",[186,39722,529],{"class":669},[186,39724,39464],{"class":202},[186,39726,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759],{"class":188,"line":3246},[186,39728,39469],{"class":202},[186,39730,32311],{"class":835},[186,39732,529],{"class":669},[186,39734,33525],{"class":206},[186,39736,1988],{"class":202},[186,39738,32320],{"class":835},[186,39740,529],{"class":669},[186,39742,36325],{"class":206},[186,39744,1988],{"class":202},[186,39746,32329],{"class":835},[186,39748,529],{"class":669},[186,39750,1691],{"class":206},[186,39752,1988],{"class":202},[186,39754,32338],{"class":835},[186,39756,529],{"class":669},[186,39758,1829],{"class":206},[186,39760,1138],{"class":202},[186,39762,39763],{"class":188,"line":3251},[186,39764,39506],{"class":202},[186,39766,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799],{"class":188,"line":4044},[186,39768,39469],{"class":202},[186,39770,32311],{"class":835},[186,39772,529],{"class":669},[186,39774,36325],{"class":206},[186,39776,1988],{"class":202},[186,39778,32320],{"class":835},[186,39780,529],{"class":669},[186,39782,36325],{"class":206},[186,39784,1988],{"class":202},[186,39786,32329],{"class":835},[186,39788,529],{"class":669},[186,39790,1691],{"class":206},[186,39792,1988],{"class":202},[186,39794,32338],{"class":835},[186,39796,529],{"class":669},[186,39798,1829],{"class":206},[186,39800,1138],{"class":202},[186,39802,39803],{"class":188,"line":4058},[186,39804,39506],{"class":202},[186,39806,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839],{"class":188,"line":4066},[186,39808,39469],{"class":202},[186,39810,32311],{"class":835},[186,39812,529],{"class":669},[186,39814,36325],{"class":206},[186,39816,1988],{"class":202},[186,39818,32320],{"class":835},[186,39820,529],{"class":669},[186,39822,36325],{"class":206},[186,39824,1988],{"class":202},[186,39826,32329],{"class":835},[186,39828,529],{"class":669},[186,39830,1691],{"class":206},[186,39832,1988],{"class":202},[186,39834,32338],{"class":835},[186,39836,529],{"class":669},[186,39838,1829],{"class":206},[186,39840,1138],{"class":202},[186,39842,39843],{"class":188,"line":4071},[186,39844,39506],{"class":202},[186,39846,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871],{"class":188,"line":4077},[186,39848,39551],{"class":202},[186,39850,32329],{"class":835},[186,39852,529],{"class":669},[186,39854,1697],{"class":206},[186,39856,1988],{"class":202},[186,39858,32384],{"class":835},[186,39860,529],{"class":669},[186,39862,1697],{"class":206},[186,39864,1988],{"class":202},[186,39866,32338],{"class":835},[186,39868,529],{"class":669},[186,39870,1803],{"class":206},[186,39872,1629],{"class":202},[186,39874,39875],{"class":188,"line":4083},[186,39876,39580],{"class":202},[186,39878,39879],{"class":188,"line":4088},[186,39880,39881],{"class":192},"        # 第四层\n",[186,39883,39884,39886,39889,39891],{"class":188,"line":9411},[186,39885,32300],{"class":206},[186,39887,39888],{"class":202},".block4",[186,39890,529],{"class":669},[186,39892,39464],{"class":202},[186,39894,39895,39897,39899,39901,39903,39905,39907,39909,39912,39914,39916,39918,39920,39922,39924,39926,39928],{"class":188,"line":9435},[186,39896,39469],{"class":202},[186,39898,32311],{"class":835},[186,39900,529],{"class":669},[186,39902,36325],{"class":206},[186,39904,1988],{"class":202},[186,39906,32320],{"class":835},[186,39908,529],{"class":669},[186,39910,39911],{"class":206},"512",[186,39913,1988],{"class":202},[186,39915,32329],{"class":835},[186,39917,529],{"class":669},[186,39919,1691],{"class":206},[186,39921,1988],{"class":202},[186,39923,32338],{"class":835},[186,39925,529],{"class":669},[186,39927,1829],{"class":206},[186,39929,1138],{"class":202},[186,39931,39932],{"class":188,"line":9440},[186,39933,39506],{"class":202},[186,39935,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968],{"class":188,"line":9446},[186,39937,39469],{"class":202},[186,39939,32311],{"class":835},[186,39941,529],{"class":669},[186,39943,39911],{"class":206},[186,39945,1988],{"class":202},[186,39947,32320],{"class":835},[186,39949,529],{"class":669},[186,39951,39911],{"class":206},[186,39953,1988],{"class":202},[186,39955,32329],{"class":835},[186,39957,529],{"class":669},[186,39959,1691],{"class":206},[186,39961,1988],{"class":202},[186,39963,32338],{"class":835},[186,39965,529],{"class":669},[186,39967,1829],{"class":206},[186,39969,1138],{"class":202},[186,39971,39972],{"class":188,"line":9473},[186,39973,39506],{"class":202},[186,39975,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008],{"class":188,"line":9478},[186,39977,39469],{"class":202},[186,39979,32311],{"class":835},[186,39981,529],{"class":669},[186,39983,39911],{"class":206},[186,39985,1988],{"class":202},[186,39987,32320],{"class":835},[186,39989,529],{"class":669},[186,39991,39911],{"class":206},[186,39993,1988],{"class":202},[186,39995,32329],{"class":835},[186,39997,529],{"class":669},[186,39999,1691],{"class":206},[186,40001,1988],{"class":202},[186,40003,32338],{"class":835},[186,40005,529],{"class":669},[186,40007,1829],{"class":206},[186,40009,1138],{"class":202},[186,40011,40012],{"class":188,"line":9484},[186,40013,39506],{"class":202},[186,40015,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040],{"class":188,"line":9496},[186,40017,39551],{"class":202},[186,40019,32329],{"class":835},[186,40021,529],{"class":669},[186,40023,1697],{"class":206},[186,40025,1988],{"class":202},[186,40027,32384],{"class":835},[186,40029,529],{"class":669},[186,40031,1697],{"class":206},[186,40033,1988],{"class":202},[186,40035,32338],{"class":835},[186,40037,529],{"class":669},[186,40039,1803],{"class":206},[186,40041,1629],{"class":202},[186,40043,40044],{"class":188,"line":9508},[186,40045,39580],{"class":202},[186,40047,40048],{"class":188,"line":9520},[186,40049,40050],{"class":192},"        # 第五层\n",[186,40052,40053,40055,40058,40060],{"class":188,"line":11179},[186,40054,32300],{"class":206},[186,40056,40057],{"class":202},".block5",[186,40059,529],{"class":669},[186,40061,39464],{"class":202},[186,40063,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096],{"class":188,"line":11204},[186,40065,39469],{"class":202},[186,40067,32311],{"class":835},[186,40069,529],{"class":669},[186,40071,39911],{"class":206},[186,40073,1988],{"class":202},[186,40075,32320],{"class":835},[186,40077,529],{"class":669},[186,40079,39911],{"class":206},[186,40081,1988],{"class":202},[186,40083,32329],{"class":835},[186,40085,529],{"class":669},[186,40087,1691],{"class":206},[186,40089,1988],{"class":202},[186,40091,32338],{"class":835},[186,40093,529],{"class":669},[186,40095,1829],{"class":206},[186,40097,1138],{"class":202},[186,40099,40100],{"class":188,"line":11227},[186,40101,39506],{"class":202},[186,40103,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136],{"class":188,"line":11251},[186,40105,39469],{"class":202},[186,40107,32311],{"class":835},[186,40109,529],{"class":669},[186,40111,39911],{"class":206},[186,40113,1988],{"class":202},[186,40115,32320],{"class":835},[186,40117,529],{"class":669},[186,40119,39911],{"class":206},[186,40121,1988],{"class":202},[186,40123,32329],{"class":835},[186,40125,529],{"class":669},[186,40127,1691],{"class":206},[186,40129,1988],{"class":202},[186,40131,32338],{"class":835},[186,40133,529],{"class":669},[186,40135,1829],{"class":206},[186,40137,1138],{"class":202},[186,40139,40140],{"class":188,"line":11256},[186,40141,39506],{"class":202},[186,40143,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176],{"class":188,"line":11261},[186,40145,39469],{"class":202},[186,40147,32311],{"class":835},[186,40149,529],{"class":669},[186,40151,39911],{"class":206},[186,40153,1988],{"class":202},[186,40155,32320],{"class":835},[186,40157,529],{"class":669},[186,40159,39911],{"class":206},[186,40161,1988],{"class":202},[186,40163,32329],{"class":835},[186,40165,529],{"class":669},[186,40167,1691],{"class":206},[186,40169,1988],{"class":202},[186,40171,32338],{"class":835},[186,40173,529],{"class":669},[186,40175,1829],{"class":206},[186,40177,1138],{"class":202},[186,40179,40180],{"class":188,"line":11266},[186,40181,39506],{"class":202},[186,40183,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208],{"class":188,"line":11275},[186,40185,39551],{"class":202},[186,40187,32329],{"class":835},[186,40189,529],{"class":669},[186,40191,1697],{"class":206},[186,40193,1988],{"class":202},[186,40195,32384],{"class":835},[186,40197,529],{"class":669},[186,40199,1697],{"class":206},[186,40201,1988],{"class":202},[186,40203,32338],{"class":835},[186,40205,529],{"class":669},[186,40207,1803],{"class":206},[186,40209,1629],{"class":202},[186,40211,40212],{"class":188,"line":11280},[186,40213,39580],{"class":202},[186,40215,40216],{"class":188,"line":11286},[186,40217,40218],{"class":192},"        # 全连接层\n",[186,40220,40221,40223,40226,40228],{"class":188,"line":11307},[186,40222,32300],{"class":206},[186,40224,40225],{"class":202},".block6",[186,40227,529],{"class":669},[186,40229,39464],{"class":202},[186,40231,40232],{"class":188,"line":11313},[186,40233,40234],{"class":192},"            # 平展操作\n",[186,40236,40237],{"class":188,"line":11327},[186,40238,40239],{"class":192},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[186,40241,40242],{"class":188,"line":11333},[186,40243,40244],{"class":202},"            nn.Flatten(),\n",[186,40246,40247,40250,40252,40254,40256,40258,40260,40262,40264],{"class":188,"line":11360},[186,40248,40249],{"class":202},"            nn.Linear(",[186,40251,1979],{"class":206},[186,40253,2065],{"class":669},[186,40255,1979],{"class":206},[186,40257,2065],{"class":669},[186,40259,39911],{"class":206},[186,40261,1988],{"class":202},[186,40263,36325],{"class":206},[186,40265,1138],{"class":202},[186,40267,40268],{"class":188,"line":11369},[186,40269,39506],{"class":202},[186,40271,40272,40274,40276,40278,40280],{"class":188,"line":11375},[186,40273,40249],{"class":202},[186,40275,36325],{"class":206},[186,40277,1988],{"class":202},[186,40279,33525],{"class":206},[186,40281,1138],{"class":202},[186,40283,40284],{"class":188,"line":11383},[186,40285,39506],{"class":202},[186,40287,40288,40290,40292,40294,40296],{"class":188,"line":11388},[186,40289,40249],{"class":202},[186,40291,33525],{"class":206},[186,40293,1988],{"class":202},[186,40295,2056],{"class":206},[186,40297,1629],{"class":202},[186,40299,40300],{"class":188,"line":18065},[186,40301,39580],{"class":202},[186,40303,40304],{"class":188,"line":18071},[186,40305,3867],{"emptyLinePlaceholder":1551},[186,40307,40308],{"class":188,"line":18094},[186,40309,40310],{"class":192},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[186,40312,40313],{"class":188,"line":18100},[186,40314,40315],{"class":192},"        # 循环遍历模型\n",[186,40317,40318,40320,40323,40325,40328],{"class":188,"line":18123},[186,40319,4869],{"class":669},[186,40321,40322],{"class":202}," m ",[186,40324,27500],{"class":669},[186,40326,40327],{"class":206}," self",[186,40329,40330],{"class":202},".modules():\n",[186,40332,40333],{"class":188,"line":18137},[186,40334,40335],{"class":192},"            # print(m)\n",[186,40337,40338,40340,40343],{"class":188,"line":18157},[186,40339,6108],{"class":669},[186,40341,40342],{"class":206}," isinstance",[186,40344,40345],{"class":202},"(m,nn.Conv2d):\n",[186,40347,40348],{"class":188,"line":18163},[186,40349,40350],{"class":192},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[186,40352,40353,40356,40359,40361,40364],{"class":188,"line":18174},[186,40354,40355],{"class":202},"                nn.init.kaiming_normal_(m.weight,",[186,40357,40358],{"class":835},"nonlinearity",[186,40360,529],{"class":669},[186,40362,40363],{"class":532},"'relu'",[186,40365,1629],{"class":202},[186,40367,40368],{"class":188,"line":18197},[186,40369,40370],{"class":192},"                # 判断b参数是否存在\n",[186,40372,40373,40376,40379,40382,40385,40388],{"class":188,"line":18219},[186,40374,40375],{"class":669},"                if",[186,40377,40378],{"class":202}," m.bias ",[186,40380,40381],{"class":669},"is",[186,40383,40384],{"class":669}," not",[186,40386,40387],{"class":206}," None",[186,40389,5205],{"class":202},[186,40391,40392],{"class":188,"line":18224},[186,40393,40394],{"class":192},"                    # 如果参数不存在的化初始化b=0\n",[186,40396,40397,40400,40402],{"class":188,"line":18230},[186,40398,40399],{"class":202},"                    nn.init.constant_(m.bias,",[186,40401,1803],{"class":206},[186,40403,1629],{"class":202},[186,40405,40406],{"class":188,"line":18244},[186,40407,40408],{"class":192},"            # 全连接层初始化\n",[186,40410,40411,40414,40416],{"class":188,"line":18257},[186,40412,40413],{"class":669},"            elif",[186,40415,40342],{"class":206},[186,40417,40418],{"class":202},"(m,nn.Linear):\n",[186,40420,40421],{"class":188,"line":18262},[186,40422,40423],{"class":192},"                # 这个初始化方法是利用的是正太分布的方式\n",[186,40425,40426],{"class":188,"line":18276},[186,40427,40428],{"class":192},"                # 均值为0，方差为0.01\n",[186,40430,40431,40434,40436,40438,40441],{"class":188,"line":18281},[186,40432,40433],{"class":202},"                nn.init.normal_(m.weight,",[186,40435,1803],{"class":206},[186,40437,1988],{"class":202},[186,40439,40440],{"class":206},"0.01",[186,40442,1629],{"class":202},[186,40444,40445],{"class":188,"line":18287},[186,40446,40447],{"class":192},"                # 初始化b参数\n",[186,40449,40450,40452,40454,40456,40458,40460],{"class":188,"line":18292},[186,40451,40375],{"class":669},[186,40453,40378],{"class":202},[186,40455,40381],{"class":669},[186,40457,40384],{"class":669},[186,40459,40387],{"class":206},[186,40461,5205],{"class":202},[186,40463,40464,40466,40468],{"class":188,"line":18306},[186,40465,40399],{"class":202},[186,40467,1803],{"class":206},[186,40469,1629],{"class":202},[186,40471,40472],{"class":188,"line":18311},[186,40473,3867],{"emptyLinePlaceholder":1551},[186,40475,40476],{"class":188,"line":18316},[186,40477,36620],{"class":192},[186,40479,40480,40482,40484],{"class":188,"line":18330},[186,40481,32256],{"class":669},[186,40483,32548],{"class":198},[186,40485,32551],{"class":202},[186,40487,40488,40490,40492,40494],{"class":188,"line":18342},[186,40489,32556],{"class":202},[186,40491,529],{"class":669},[186,40493,32278],{"class":206},[186,40495,40496],{"class":202},".block1(x)\n",[186,40498,40499,40501,40503,40505],{"class":188,"line":18347},[186,40500,32556],{"class":202},[186,40502,529],{"class":669},[186,40504,32278],{"class":206},[186,40506,40507],{"class":202},".block2(x)\n",[186,40509,40510,40512,40514,40516],{"class":188,"line":18360},[186,40511,32556],{"class":202},[186,40513,529],{"class":669},[186,40515,32278],{"class":206},[186,40517,40518],{"class":202},".block3(x)\n",[186,40520,40521,40523,40525,40527],{"class":188,"line":18365},[186,40522,32556],{"class":202},[186,40524,529],{"class":669},[186,40526,32278],{"class":206},[186,40528,40529],{"class":202},".block4(x)\n",[186,40531,40532,40534,40536,40538],{"class":188,"line":18370},[186,40533,32556],{"class":202},[186,40535,529],{"class":669},[186,40537,32278],{"class":206},[186,40539,40540],{"class":202},".block5(x)\n",[186,40542,40543,40545,40547,40549],{"class":188,"line":18375},[186,40544,32556],{"class":202},[186,40546,529],{"class":669},[186,40548,32278],{"class":206},[186,40550,40551],{"class":202},".block6(x)\n",[186,40553,40554,40556],{"class":188,"line":18388},[186,40555,16214],{"class":669},[186,40557,32664],{"class":202},[186,40559,40560],{"class":188,"line":18393},[186,40561,3867],{"emptyLinePlaceholder":1551},[186,40563,40564],{"class":188,"line":34088},[186,40565,40566],{"class":192},"# 验证模型\n",[186,40568,40569,40571,40573,40575,40578],{"class":188,"line":34094},[186,40570,3003],{"class":669},[186,40572,32675],{"class":206},[186,40574,4415],{"class":669},[186,40576,40577],{"class":532},"'__main__'",[186,40579,5205],{"class":202},[186,40581,40582,40584,40586,40588,40590,40592,40594,40596,40598],{"class":188,"line":34100},[186,40583,32692],{"class":202},[186,40585,529],{"class":669},[186,40587,31906],{"class":202},[186,40589,32699],{"class":532},[186,40591,3172],{"class":669},[186,40593,32704],{"class":202},[186,40595,3169],{"class":669},[186,40597,31931],{"class":532},[186,40599,1629],{"class":202},[186,40601,40602,40604],{"class":188,"line":34106},[186,40603,32754],{"class":206},[186,40605,31940],{"class":202},[186,40607,40608,40610,40612],{"class":188,"line":34112},[186,40609,32744],{"class":202},[186,40611,529],{"class":669},[186,40613,40614],{"class":202},"VGG16().to(device)\n",[186,40616,40617,40619,40621,40623,40625,40627,40629,40631],{"class":188,"line":34123},[186,40618,32754],{"class":206},[186,40620,32757],{"class":202},[186,40622,1829],{"class":206},[186,40624,1988],{"class":202},[186,40626,32956],{"class":206},[186,40628,1988],{"class":202},[186,40630,32956],{"class":206},[186,40632,32770],{"class":202},[34,40634,40635],{"start":49},[22,40636,40637],{},"训练代码",[169,40639,40640],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[169,40642,40643],{},"解决方式:",[169,40645,40646],{},"①权重初始化",[176,40648,40650],{"className":31833,"code":40649,"language":31835,"meta":181,"style":181},"# 权重初始化,保证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",[183,40651,40652,40657,40662,40674,40679,40687,40692,40705,40710,40724,40729,40738,40743,40752,40757,40762,40775,40780,40794],{"__ignoreMap":181},[186,40653,40654],{"class":188,"line":189},[186,40655,40656],{"class":192},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[186,40658,40659],{"class":188,"line":49},[186,40660,40661],{"class":192},"# 循环遍历模型\n",[186,40663,40664,40666,40668,40670,40672],{"class":188,"line":219},[186,40665,4491],{"class":669},[186,40667,40322],{"class":202},[186,40669,27500],{"class":669},[186,40671,40327],{"class":206},[186,40673,40330],{"class":202},[186,40675,40676],{"class":188,"line":225},[186,40677,40678],{"class":192},"    # print(m)\n",[186,40680,40681,40683,40685],{"class":188,"line":242},[186,40682,4567],{"class":669},[186,40684,40342],{"class":206},[186,40686,40345],{"class":202},[186,40688,40689],{"class":188,"line":248},[186,40690,40691],{"class":192},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[186,40693,40694,40697,40699,40701,40703],{"class":188,"line":265},[186,40695,40696],{"class":202},"        nn.init.kaiming_normal_(m.weight,",[186,40698,40358],{"class":835},[186,40700,529],{"class":669},[186,40702,40363],{"class":532},[186,40704,1629],{"class":202},[186,40706,40707],{"class":188,"line":271},[186,40708,40709],{"class":192},"        # 判断b参数是否存在\n",[186,40711,40712,40714,40716,40718,40720,40722],{"class":188,"line":288},[186,40713,3964],{"class":669},[186,40715,40378],{"class":202},[186,40717,40381],{"class":669},[186,40719,40384],{"class":669},[186,40721,40387],{"class":206},[186,40723,5205],{"class":202},[186,40725,40726],{"class":188,"line":294},[186,40727,40728],{"class":192},"            # 如果参数不存在的化初始化b=0\n",[186,40730,40731,40734,40736],{"class":188,"line":1212},[186,40732,40733],{"class":202},"            nn.init.constant_(m.bias,",[186,40735,1803],{"class":206},[186,40737,1629],{"class":202},[186,40739,40740],{"class":188,"line":1223},[186,40741,40742],{"class":192},"    # 全连接层初始化\n",[186,40744,40745,40748,40750],{"class":188,"line":1236},[186,40746,40747],{"class":669},"    elif",[186,40749,40342],{"class":206},[186,40751,40418],{"class":202},[186,40753,40754],{"class":188,"line":3096},[186,40755,40756],{"class":192},"        # 这个初始化方法是利用的是正太分布的方式\n",[186,40758,40759],{"class":188,"line":3110},[186,40760,40761],{"class":192},"        # 均值为0，方差为0.01\n",[186,40763,40764,40767,40769,40771,40773],{"class":188,"line":3115},[186,40765,40766],{"class":202},"        nn.init.normal_(m.weight,",[186,40768,1803],{"class":206},[186,40770,1988],{"class":202},[186,40772,40440],{"class":206},[186,40774,1629],{"class":202},[186,40776,40777],{"class":188,"line":3121},[186,40778,40779],{"class":192},"        # 初始化b参数\n",[186,40781,40782,40784,40786,40788,40790,40792],{"class":188,"line":3142},[186,40783,3964],{"class":669},[186,40785,40378],{"class":202},[186,40787,40381],{"class":669},[186,40789,40384],{"class":669},[186,40791,40387],{"class":206},[186,40793,5205],{"class":202},[186,40795,40796,40798,40800],{"class":188,"line":3147},[186,40797,40733],{"class":202},[186,40799,1803],{"class":206},[186,40801,1629],{"class":202},[169,40803,40804],{},"②尽可能地增加批次",[169,40806,40807],{},"训练完整代码：",[176,40809,40810],{"className":31833,"code":39354,"language":31835,"meta":181,"style":181},[183,40811,40812,40818,40828,40838,40848,40852,40868,40876,40894,40898,40902,40912,40948,40952,40988,40992,41020,41024,41028,41038,41074,41078,41114,41118,41146,41150,41154,41164,41200,41204,41240,41244,41280,41284,41312,41316,41320,41330,41366,41370,41406,41410,41446,41450,41478,41482,41486,41496,41532,41536,41572,41576,41612,41616,41644,41648,41652,41662,41666,41670,41674,41694,41698,41710,41714,41726,41730,41734,41738,41742,41754,41758,41766,41770,41782,41786,41800,41804,41812,41816,41824,41828,41832,41844,41848,41862,41870,41874,41878,41886,41896,41906,41916,41926,41936,41946,41952,41956,41960,41972,41992,41998,42006],{"__ignoreMap":181},[186,40813,40814,40816],{"class":188,"line":189},[186,40815,31847],{"class":669},[186,40817,31850],{"class":202},[186,40819,40820,40822,40824,40826],{"class":188,"line":49},[186,40821,32192],{"class":669},[186,40823,39369],{"class":202},[186,40825,31847],{"class":669},[186,40827,39374],{"class":202},[186,40829,40830,40832,40834,40836],{"class":188,"line":219},[186,40831,32192],{"class":669},[186,40833,32195],{"class":202},[186,40835,31847],{"class":669},[186,40837,32200],{"class":202},[186,40839,40840,40842,40844,40846],{"class":188,"line":225},[186,40841,32192],{"class":669},[186,40843,32212],{"class":202},[186,40845,31847],{"class":669},[186,40847,32217],{"class":202},[186,40849,40850],{"class":188,"line":242},[186,40851,3867],{"emptyLinePlaceholder":1551},[186,40853,40854,40856,40858,40860,40862,40864,40866],{"class":188,"line":248},[186,40855,16156],{"class":669},[186,40857,39405],{"class":198},[186,40859,832],{"class":202},[186,40861,32233],{"class":198},[186,40863,2168],{"class":202},[186,40865,32238],{"class":198},[186,40867,32241],{"class":202},[186,40869,40870,40872,40874],{"class":188,"line":265},[186,40871,32256],{"class":669},[186,40873,32259],{"class":206},[186,40875,32262],{"class":202},[186,40877,40878,40880,40882,40884,40886,40888,40890,40892],{"class":188,"line":271},[186,40879,32272],{"class":206},[186,40881,832],{"class":202},[186,40883,39432],{"class":206},[186,40885,13898],{"class":202},[186,40887,32278],{"class":206},[186,40889,32281],{"class":202},[186,40891,32284],{"class":206},[186,40893,3443],{"class":202},[186,40895,40896],{"class":188,"line":288},[186,40897,39447],{"class":192},[186,40899,40900],{"class":188,"line":294},[186,40901,39452],{"class":192},[186,40903,40904,40906,40908,40910],{"class":188,"line":1212},[186,40905,32300],{"class":206},[186,40907,39459],{"class":202},[186,40909,529],{"class":669},[186,40911,39464],{"class":202},[186,40913,40914,40916,40918,40920,40922,40924,40926,40928,40930,40932,40934,40936,40938,40940,40942,40944,40946],{"class":188,"line":1223},[186,40915,39469],{"class":202},[186,40917,32311],{"class":835},[186,40919,529],{"class":669},[186,40921,1829],{"class":206},[186,40923,1988],{"class":202},[186,40925,32320],{"class":835},[186,40927,529],{"class":669},[186,40929,1815],{"class":206},[186,40931,1988],{"class":202},[186,40933,32329],{"class":835},[186,40935,529],{"class":669},[186,40937,1691],{"class":206},[186,40939,1988],{"class":202},[186,40941,32338],{"class":835},[186,40943,529],{"class":669},[186,40945,1829],{"class":206},[186,40947,1138],{"class":202},[186,40949,40950],{"class":188,"line":1236},[186,40951,39506],{"class":202},[186,40953,40954,40956,40958,40960,40962,40964,40966,40968,40970,40972,40974,40976,40978,40980,40982,40984,40986],{"class":188,"line":3096},[186,40955,39469],{"class":202},[186,40957,32311],{"class":835},[186,40959,529],{"class":669},[186,40961,1815],{"class":206},[186,40963,1988],{"class":202},[186,40965,32320],{"class":835},[186,40967,529],{"class":669},[186,40969,1815],{"class":206},[186,40971,1988],{"class":202},[186,40973,32329],{"class":835},[186,40975,529],{"class":669},[186,40977,1691],{"class":206},[186,40979,1988],{"class":202},[186,40981,32338],{"class":835},[186,40983,529],{"class":669},[186,40985,1829],{"class":206},[186,40987,1138],{"class":202},[186,40989,40990],{"class":188,"line":3110},[186,40991,39506],{"class":202},[186,40993,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014,41016,41018],{"class":188,"line":3115},[186,40995,39551],{"class":202},[186,40997,32329],{"class":835},[186,40999,529],{"class":669},[186,41001,1697],{"class":206},[186,41003,1988],{"class":202},[186,41005,32384],{"class":835},[186,41007,529],{"class":669},[186,41009,1697],{"class":206},[186,41011,1988],{"class":202},[186,41013,32338],{"class":835},[186,41015,529],{"class":669},[186,41017,1803],{"class":206},[186,41019,1629],{"class":202},[186,41021,41022],{"class":188,"line":3121},[186,41023,39580],{"class":202},[186,41025,41026],{"class":188,"line":3142},[186,41027,39585],{"class":192},[186,41029,41030,41032,41034,41036],{"class":188,"line":3147},[186,41031,32300],{"class":206},[186,41033,39592],{"class":202},[186,41035,529],{"class":669},[186,41037,39464],{"class":202},[186,41039,41040,41042,41044,41046,41048,41050,41052,41054,41056,41058,41060,41062,41064,41066,41068,41070,41072],{"class":188,"line":3161},[186,41041,39469],{"class":202},[186,41043,32311],{"class":835},[186,41045,529],{"class":669},[186,41047,1815],{"class":206},[186,41049,1988],{"class":202},[186,41051,32320],{"class":835},[186,41053,529],{"class":669},[186,41055,33525],{"class":206},[186,41057,1988],{"class":202},[186,41059,32329],{"class":835},[186,41061,529],{"class":669},[186,41063,1691],{"class":206},[186,41065,1988],{"class":202},[186,41067,32338],{"class":835},[186,41069,529],{"class":669},[186,41071,1829],{"class":206},[186,41073,1138],{"class":202},[186,41075,41076],{"class":188,"line":3166},[186,41077,39506],{"class":202},[186,41079,41080,41082,41084,41086,41088,41090,41092,41094,41096,41098,41100,41102,41104,41106,41108,41110,41112],{"class":188,"line":3195},[186,41081,39469],{"class":202},[186,41083,32311],{"class":835},[186,41085,529],{"class":669},[186,41087,33525],{"class":206},[186,41089,1988],{"class":202},[186,41091,32320],{"class":835},[186,41093,529],{"class":669},[186,41095,33525],{"class":206},[186,41097,1988],{"class":202},[186,41099,32329],{"class":835},[186,41101,529],{"class":669},[186,41103,1691],{"class":206},[186,41105,1988],{"class":202},[186,41107,32338],{"class":835},[186,41109,529],{"class":669},[186,41111,1829],{"class":206},[186,41113,1138],{"class":202},[186,41115,41116],{"class":188,"line":3200},[186,41117,39506],{"class":202},[186,41119,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142,41144],{"class":188,"line":3217},[186,41121,39551],{"class":202},[186,41123,32329],{"class":835},[186,41125,529],{"class":669},[186,41127,1697],{"class":206},[186,41129,1988],{"class":202},[186,41131,32384],{"class":835},[186,41133,529],{"class":669},[186,41135,1697],{"class":206},[186,41137,1988],{"class":202},[186,41139,32338],{"class":835},[186,41141,529],{"class":669},[186,41143,1803],{"class":206},[186,41145,1629],{"class":202},[186,41147,41148],{"class":188,"line":3222},[186,41149,39580],{"class":202},[186,41151,41152],{"class":188,"line":3227},[186,41153,39713],{"class":192},[186,41155,41156,41158,41160,41162],{"class":188,"line":3232},[186,41157,32300],{"class":206},[186,41159,39720],{"class":202},[186,41161,529],{"class":669},[186,41163,39464],{"class":202},[186,41165,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198],{"class":188,"line":3246},[186,41167,39469],{"class":202},[186,41169,32311],{"class":835},[186,41171,529],{"class":669},[186,41173,33525],{"class":206},[186,41175,1988],{"class":202},[186,41177,32320],{"class":835},[186,41179,529],{"class":669},[186,41181,36325],{"class":206},[186,41183,1988],{"class":202},[186,41185,32329],{"class":835},[186,41187,529],{"class":669},[186,41189,1691],{"class":206},[186,41191,1988],{"class":202},[186,41193,32338],{"class":835},[186,41195,529],{"class":669},[186,41197,1829],{"class":206},[186,41199,1138],{"class":202},[186,41201,41202],{"class":188,"line":3251},[186,41203,39506],{"class":202},[186,41205,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238],{"class":188,"line":4044},[186,41207,39469],{"class":202},[186,41209,32311],{"class":835},[186,41211,529],{"class":669},[186,41213,36325],{"class":206},[186,41215,1988],{"class":202},[186,41217,32320],{"class":835},[186,41219,529],{"class":669},[186,41221,36325],{"class":206},[186,41223,1988],{"class":202},[186,41225,32329],{"class":835},[186,41227,529],{"class":669},[186,41229,1691],{"class":206},[186,41231,1988],{"class":202},[186,41233,32338],{"class":835},[186,41235,529],{"class":669},[186,41237,1829],{"class":206},[186,41239,1138],{"class":202},[186,41241,41242],{"class":188,"line":4058},[186,41243,39506],{"class":202},[186,41245,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278],{"class":188,"line":4066},[186,41247,39469],{"class":202},[186,41249,32311],{"class":835},[186,41251,529],{"class":669},[186,41253,36325],{"class":206},[186,41255,1988],{"class":202},[186,41257,32320],{"class":835},[186,41259,529],{"class":669},[186,41261,36325],{"class":206},[186,41263,1988],{"class":202},[186,41265,32329],{"class":835},[186,41267,529],{"class":669},[186,41269,1691],{"class":206},[186,41271,1988],{"class":202},[186,41273,32338],{"class":835},[186,41275,529],{"class":669},[186,41277,1829],{"class":206},[186,41279,1138],{"class":202},[186,41281,41282],{"class":188,"line":4071},[186,41283,39506],{"class":202},[186,41285,41286,41288,41290,41292,41294,41296,41298,41300,41302,41304,41306,41308,41310],{"class":188,"line":4077},[186,41287,39551],{"class":202},[186,41289,32329],{"class":835},[186,41291,529],{"class":669},[186,41293,1697],{"class":206},[186,41295,1988],{"class":202},[186,41297,32384],{"class":835},[186,41299,529],{"class":669},[186,41301,1697],{"class":206},[186,41303,1988],{"class":202},[186,41305,32338],{"class":835},[186,41307,529],{"class":669},[186,41309,1803],{"class":206},[186,41311,1629],{"class":202},[186,41313,41314],{"class":188,"line":4083},[186,41315,39580],{"class":202},[186,41317,41318],{"class":188,"line":4088},[186,41319,39881],{"class":192},[186,41321,41322,41324,41326,41328],{"class":188,"line":9411},[186,41323,32300],{"class":206},[186,41325,39888],{"class":202},[186,41327,529],{"class":669},[186,41329,39464],{"class":202},[186,41331,41332,41334,41336,41338,41340,41342,41344,41346,41348,41350,41352,41354,41356,41358,41360,41362,41364],{"class":188,"line":9435},[186,41333,39469],{"class":202},[186,41335,32311],{"class":835},[186,41337,529],{"class":669},[186,41339,36325],{"class":206},[186,41341,1988],{"class":202},[186,41343,32320],{"class":835},[186,41345,529],{"class":669},[186,41347,39911],{"class":206},[186,41349,1988],{"class":202},[186,41351,32329],{"class":835},[186,41353,529],{"class":669},[186,41355,1691],{"class":206},[186,41357,1988],{"class":202},[186,41359,32338],{"class":835},[186,41361,529],{"class":669},[186,41363,1829],{"class":206},[186,41365,1138],{"class":202},[186,41367,41368],{"class":188,"line":9440},[186,41369,39506],{"class":202},[186,41371,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390,41392,41394,41396,41398,41400,41402,41404],{"class":188,"line":9446},[186,41373,39469],{"class":202},[186,41375,32311],{"class":835},[186,41377,529],{"class":669},[186,41379,39911],{"class":206},[186,41381,1988],{"class":202},[186,41383,32320],{"class":835},[186,41385,529],{"class":669},[186,41387,39911],{"class":206},[186,41389,1988],{"class":202},[186,41391,32329],{"class":835},[186,41393,529],{"class":669},[186,41395,1691],{"class":206},[186,41397,1988],{"class":202},[186,41399,32338],{"class":835},[186,41401,529],{"class":669},[186,41403,1829],{"class":206},[186,41405,1138],{"class":202},[186,41407,41408],{"class":188,"line":9473},[186,41409,39506],{"class":202},[186,41411,41412,41414,41416,41418,41420,41422,41424,41426,41428,41430,41432,41434,41436,41438,41440,41442,41444],{"class":188,"line":9478},[186,41413,39469],{"class":202},[186,41415,32311],{"class":835},[186,41417,529],{"class":669},[186,41419,39911],{"class":206},[186,41421,1988],{"class":202},[186,41423,32320],{"class":835},[186,41425,529],{"class":669},[186,41427,39911],{"class":206},[186,41429,1988],{"class":202},[186,41431,32329],{"class":835},[186,41433,529],{"class":669},[186,41435,1691],{"class":206},[186,41437,1988],{"class":202},[186,41439,32338],{"class":835},[186,41441,529],{"class":669},[186,41443,1829],{"class":206},[186,41445,1138],{"class":202},[186,41447,41448],{"class":188,"line":9484},[186,41449,39506],{"class":202},[186,41451,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476],{"class":188,"line":9496},[186,41453,39551],{"class":202},[186,41455,32329],{"class":835},[186,41457,529],{"class":669},[186,41459,1697],{"class":206},[186,41461,1988],{"class":202},[186,41463,32384],{"class":835},[186,41465,529],{"class":669},[186,41467,1697],{"class":206},[186,41469,1988],{"class":202},[186,41471,32338],{"class":835},[186,41473,529],{"class":669},[186,41475,1803],{"class":206},[186,41477,1629],{"class":202},[186,41479,41480],{"class":188,"line":9508},[186,41481,39580],{"class":202},[186,41483,41484],{"class":188,"line":9520},[186,41485,40050],{"class":192},[186,41487,41488,41490,41492,41494],{"class":188,"line":11179},[186,41489,32300],{"class":206},[186,41491,40057],{"class":202},[186,41493,529],{"class":669},[186,41495,39464],{"class":202},[186,41497,41498,41500,41502,41504,41506,41508,41510,41512,41514,41516,41518,41520,41522,41524,41526,41528,41530],{"class":188,"line":11204},[186,41499,39469],{"class":202},[186,41501,32311],{"class":835},[186,41503,529],{"class":669},[186,41505,39911],{"class":206},[186,41507,1988],{"class":202},[186,41509,32320],{"class":835},[186,41511,529],{"class":669},[186,41513,39911],{"class":206},[186,41515,1988],{"class":202},[186,41517,32329],{"class":835},[186,41519,529],{"class":669},[186,41521,1691],{"class":206},[186,41523,1988],{"class":202},[186,41525,32338],{"class":835},[186,41527,529],{"class":669},[186,41529,1829],{"class":206},[186,41531,1138],{"class":202},[186,41533,41534],{"class":188,"line":11227},[186,41535,39506],{"class":202},[186,41537,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560,41562,41564,41566,41568,41570],{"class":188,"line":11251},[186,41539,39469],{"class":202},[186,41541,32311],{"class":835},[186,41543,529],{"class":669},[186,41545,39911],{"class":206},[186,41547,1988],{"class":202},[186,41549,32320],{"class":835},[186,41551,529],{"class":669},[186,41553,39911],{"class":206},[186,41555,1988],{"class":202},[186,41557,32329],{"class":835},[186,41559,529],{"class":669},[186,41561,1691],{"class":206},[186,41563,1988],{"class":202},[186,41565,32338],{"class":835},[186,41567,529],{"class":669},[186,41569,1829],{"class":206},[186,41571,1138],{"class":202},[186,41573,41574],{"class":188,"line":11256},[186,41575,39506],{"class":202},[186,41577,41578,41580,41582,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604,41606,41608,41610],{"class":188,"line":11261},[186,41579,39469],{"class":202},[186,41581,32311],{"class":835},[186,41583,529],{"class":669},[186,41585,39911],{"class":206},[186,41587,1988],{"class":202},[186,41589,32320],{"class":835},[186,41591,529],{"class":669},[186,41593,39911],{"class":206},[186,41595,1988],{"class":202},[186,41597,32329],{"class":835},[186,41599,529],{"class":669},[186,41601,1691],{"class":206},[186,41603,1988],{"class":202},[186,41605,32338],{"class":835},[186,41607,529],{"class":669},[186,41609,1829],{"class":206},[186,41611,1138],{"class":202},[186,41613,41614],{"class":188,"line":11266},[186,41615,39506],{"class":202},[186,41617,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642],{"class":188,"line":11275},[186,41619,39551],{"class":202},[186,41621,32329],{"class":835},[186,41623,529],{"class":669},[186,41625,1697],{"class":206},[186,41627,1988],{"class":202},[186,41629,32384],{"class":835},[186,41631,529],{"class":669},[186,41633,1697],{"class":206},[186,41635,1988],{"class":202},[186,41637,32338],{"class":835},[186,41639,529],{"class":669},[186,41641,1803],{"class":206},[186,41643,1629],{"class":202},[186,41645,41646],{"class":188,"line":11280},[186,41647,39580],{"class":202},[186,41649,41650],{"class":188,"line":11286},[186,41651,40218],{"class":192},[186,41653,41654,41656,41658,41660],{"class":188,"line":11307},[186,41655,32300],{"class":206},[186,41657,40225],{"class":202},[186,41659,529],{"class":669},[186,41661,39464],{"class":202},[186,41663,41664],{"class":188,"line":11313},[186,41665,40234],{"class":192},[186,41667,41668],{"class":188,"line":11327},[186,41669,40239],{"class":192},[186,41671,41672],{"class":188,"line":11333},[186,41673,40244],{"class":202},[186,41675,41676,41678,41680,41682,41684,41686,41688,41690,41692],{"class":188,"line":11360},[186,41677,40249],{"class":202},[186,41679,1979],{"class":206},[186,41681,2065],{"class":669},[186,41683,1979],{"class":206},[186,41685,2065],{"class":669},[186,41687,39911],{"class":206},[186,41689,1988],{"class":202},[186,41691,36325],{"class":206},[186,41693,1138],{"class":202},[186,41695,41696],{"class":188,"line":11369},[186,41697,39506],{"class":202},[186,41699,41700,41702,41704,41706,41708],{"class":188,"line":11375},[186,41701,40249],{"class":202},[186,41703,36325],{"class":206},[186,41705,1988],{"class":202},[186,41707,33525],{"class":206},[186,41709,1138],{"class":202},[186,41711,41712],{"class":188,"line":11383},[186,41713,39506],{"class":202},[186,41715,41716,41718,41720,41722,41724],{"class":188,"line":11388},[186,41717,40249],{"class":202},[186,41719,33525],{"class":206},[186,41721,1988],{"class":202},[186,41723,2056],{"class":206},[186,41725,1629],{"class":202},[186,41727,41728],{"class":188,"line":18065},[186,41729,39580],{"class":202},[186,41731,41732],{"class":188,"line":18071},[186,41733,3867],{"emptyLinePlaceholder":1551},[186,41735,41736],{"class":188,"line":18094},[186,41737,40310],{"class":192},[186,41739,41740],{"class":188,"line":18100},[186,41741,40315],{"class":192},[186,41743,41744,41746,41748,41750,41752],{"class":188,"line":18123},[186,41745,4869],{"class":669},[186,41747,40322],{"class":202},[186,41749,27500],{"class":669},[186,41751,40327],{"class":206},[186,41753,40330],{"class":202},[186,41755,41756],{"class":188,"line":18137},[186,41757,40335],{"class":192},[186,41759,41760,41762,41764],{"class":188,"line":18157},[186,41761,6108],{"class":669},[186,41763,40342],{"class":206},[186,41765,40345],{"class":202},[186,41767,41768],{"class":188,"line":18163},[186,41769,40350],{"class":192},[186,41771,41772,41774,41776,41778,41780],{"class":188,"line":18174},[186,41773,40355],{"class":202},[186,41775,40358],{"class":835},[186,41777,529],{"class":669},[186,41779,40363],{"class":532},[186,41781,1629],{"class":202},[186,41783,41784],{"class":188,"line":18197},[186,41785,40370],{"class":192},[186,41787,41788,41790,41792,41794,41796,41798],{"class":188,"line":18219},[186,41789,40375],{"class":669},[186,41791,40378],{"class":202},[186,41793,40381],{"class":669},[186,41795,40384],{"class":669},[186,41797,40387],{"class":206},[186,41799,5205],{"class":202},[186,41801,41802],{"class":188,"line":18224},[186,41803,40394],{"class":192},[186,41805,41806,41808,41810],{"class":188,"line":18230},[186,41807,40399],{"class":202},[186,41809,1803],{"class":206},[186,41811,1629],{"class":202},[186,41813,41814],{"class":188,"line":18244},[186,41815,40408],{"class":192},[186,41817,41818,41820,41822],{"class":188,"line":18257},[186,41819,40413],{"class":669},[186,41821,40342],{"class":206},[186,41823,40418],{"class":202},[186,41825,41826],{"class":188,"line":18262},[186,41827,40423],{"class":192},[186,41829,41830],{"class":188,"line":18276},[186,41831,40428],{"class":192},[186,41833,41834,41836,41838,41840,41842],{"class":188,"line":18281},[186,41835,40433],{"class":202},[186,41837,1803],{"class":206},[186,41839,1988],{"class":202},[186,41841,40440],{"class":206},[186,41843,1629],{"class":202},[186,41845,41846],{"class":188,"line":18287},[186,41847,40447],{"class":192},[186,41849,41850,41852,41854,41856,41858,41860],{"class":188,"line":18292},[186,41851,40375],{"class":669},[186,41853,40378],{"class":202},[186,41855,40381],{"class":669},[186,41857,40384],{"class":669},[186,41859,40387],{"class":206},[186,41861,5205],{"class":202},[186,41863,41864,41866,41868],{"class":188,"line":18306},[186,41865,40399],{"class":202},[186,41867,1803],{"class":206},[186,41869,1629],{"class":202},[186,41871,41872],{"class":188,"line":18311},[186,41873,3867],{"emptyLinePlaceholder":1551},[186,41875,41876],{"class":188,"line":18316},[186,41877,36620],{"class":192},[186,41879,41880,41882,41884],{"class":188,"line":18330},[186,41881,32256],{"class":669},[186,41883,32548],{"class":198},[186,41885,32551],{"class":202},[186,41887,41888,41890,41892,41894],{"class":188,"line":18342},[186,41889,32556],{"class":202},[186,41891,529],{"class":669},[186,41893,32278],{"class":206},[186,41895,40496],{"class":202},[186,41897,41898,41900,41902,41904],{"class":188,"line":18347},[186,41899,32556],{"class":202},[186,41901,529],{"class":669},[186,41903,32278],{"class":206},[186,41905,40507],{"class":202},[186,41907,41908,41910,41912,41914],{"class":188,"line":18360},[186,41909,32556],{"class":202},[186,41911,529],{"class":669},[186,41913,32278],{"class":206},[186,41915,40518],{"class":202},[186,41917,41918,41920,41922,41924],{"class":188,"line":18365},[186,41919,32556],{"class":202},[186,41921,529],{"class":669},[186,41923,32278],{"class":206},[186,41925,40529],{"class":202},[186,41927,41928,41930,41932,41934],{"class":188,"line":18370},[186,41929,32556],{"class":202},[186,41931,529],{"class":669},[186,41933,32278],{"class":206},[186,41935,40540],{"class":202},[186,41937,41938,41940,41942,41944],{"class":188,"line":18375},[186,41939,32556],{"class":202},[186,41941,529],{"class":669},[186,41943,32278],{"class":206},[186,41945,40551],{"class":202},[186,41947,41948,41950],{"class":188,"line":18388},[186,41949,16214],{"class":669},[186,41951,32664],{"class":202},[186,41953,41954],{"class":188,"line":18393},[186,41955,3867],{"emptyLinePlaceholder":1551},[186,41957,41958],{"class":188,"line":34088},[186,41959,40566],{"class":192},[186,41961,41962,41964,41966,41968,41970],{"class":188,"line":34094},[186,41963,3003],{"class":669},[186,41965,32675],{"class":206},[186,41967,4415],{"class":669},[186,41969,40577],{"class":532},[186,41971,5205],{"class":202},[186,41973,41974,41976,41978,41980,41982,41984,41986,41988,41990],{"class":188,"line":34100},[186,41975,32692],{"class":202},[186,41977,529],{"class":669},[186,41979,31906],{"class":202},[186,41981,32699],{"class":532},[186,41983,3172],{"class":669},[186,41985,32704],{"class":202},[186,41987,3169],{"class":669},[186,41989,31931],{"class":532},[186,41991,1629],{"class":202},[186,41993,41994,41996],{"class":188,"line":34106},[186,41995,32754],{"class":206},[186,41997,31940],{"class":202},[186,41999,42000,42002,42004],{"class":188,"line":34112},[186,42001,32744],{"class":202},[186,42003,529],{"class":669},[186,42005,40614],{"class":202},[186,42007,42008,42010,42012,42014,42016,42018,42020,42022],{"class":188,"line":34123},[186,42009,32754],{"class":206},[186,42011,32757],{"class":202},[186,42013,1829],{"class":206},[186,42015,1988],{"class":202},[186,42017,32956],{"class":206},[186,42019,1988],{"class":202},[186,42021,32956],{"class":206},[186,42023,32770],{"class":202},[34,42025,42026],{"start":219},[22,42027,42028],{},"测试代码",[176,42030,42032],{"className":31833,"code":42031,"language":31835,"meta":181,"style":181},"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",[183,42033,42034,42040,42050,42060,42064,42074,42085,42089,42093,42097,42105,42121,42131,42147,42157,42171,42175,42185,42195,42205,42211,42215,42219,42227,42231,42247,42255,42259,42263,42271,42279,42283,42287,42291,42295,42301,42305,42315,42323,42331,42335,42339,42343,42351,42355,42371,42375,42379,42383,42395,42399,42411,42415,42419,42431,42435,42445,42449,42453,42465,42469,42478,42482,42486,42494,42498,42506,42510,42514,42518,42522,42526,42542,42550,42554,42558,42606,42612,42616,42626,42634,42642,42646,42650,42654,42658,42666,42670,42686,42690,42698,42706],{"__ignoreMap":181},[186,42035,42036,42038],{"class":188,"line":189},[186,42037,31847],{"class":669},[186,42039,31850],{"class":202},[186,42041,42042,42044,42046,42048],{"class":188,"line":49},[186,42043,31847],{"class":669},[186,42045,32870],{"class":202},[186,42047,32838],{"class":669},[186,42049,32875],{"class":202},[186,42051,42052,42054,42056,42058],{"class":188,"line":219},[186,42053,32192],{"class":669},[186,42055,32853],{"class":202},[186,42057,31847],{"class":669},[186,42059,32858],{"class":202},[186,42061,42062],{"class":188,"line":225},[186,42063,35377],{"class":192},[186,42065,42066,42068,42070,42072],{"class":188,"line":242},[186,42067,32192],{"class":669},[186,42069,32823],{"class":202},[186,42071,31847],{"class":669},[186,42073,32828],{"class":202},[186,42075,42076,42078,42080,42082],{"class":188,"line":248},[186,42077,32192],{"class":669},[186,42079,33369],{"class":202},[186,42081,31847],{"class":669},[186,42083,42084],{"class":206}," VGG16\n",[186,42086,42087],{"class":188,"line":265},[186,42088,3867],{"emptyLinePlaceholder":1551},[186,42090,42091],{"class":188,"line":271},[186,42092,3867],{"emptyLinePlaceholder":1551},[186,42094,42095],{"class":188,"line":288},[186,42096,35406],{"class":192},[186,42098,42099,42101,42103],{"class":188,"line":294},[186,42100,33402],{"class":669},[186,42102,35413],{"class":198},[186,42104,33408],{"class":202},[186,42106,42107,42109,42111,42113,42115,42117,42119],{"class":188,"line":1212},[186,42108,35420],{"class":202},[186,42110,529],{"class":669},[186,42112,32910],{"class":202},[186,42114,32913],{"class":835},[186,42116,529],{"class":669},[186,42118,32918],{"class":532},[186,42120,32921],{"class":202},[186,42122,42123,42125,42127,42129],{"class":188,"line":1223},[186,42124,35437],{"class":835},[186,42126,529],{"class":669},[186,42128,35442],{"class":206},[186,42130,32921],{"class":202},[186,42132,42133,42135,42137,42139,42141,42143,42145],{"class":188,"line":1236},[186,42134,35449],{"class":835},[186,42136,529],{"class":669},[186,42138,32948],{"class":202},[186,42140,32951],{"class":835},[186,42142,529],{"class":669},[186,42144,32956],{"class":206},[186,42146,32959],{"class":202},[186,42148,42149,42151,42153,42155],{"class":188,"line":3096},[186,42150,35466],{"class":835},[186,42152,529],{"class":669},[186,42154,32931],{"class":206},[186,42156,1629],{"class":202},[186,42158,42159,42161,42163,42165,42167,42169],{"class":188,"line":3110},[186,42160,35477],{"class":202},[186,42162,529],{"class":669},[186,42164,32989],{"class":202},[186,42166,32992],{"class":835},[186,42168,529],{"class":669},[186,42170,35488],{"class":202},[186,42172,42173],{"class":188,"line":3115},[186,42174,35493],{"class":192},[186,42176,42177,42179,42181,42183],{"class":188,"line":3121},[186,42178,35498],{"class":835},[186,42180,529],{"class":669},[186,42182,1829],{"class":206},[186,42184,32921],{"class":202},[186,42186,42187,42189,42191,42193],{"class":188,"line":3142},[186,42188,35509],{"class":835},[186,42190,529],{"class":669},[186,42192,32931],{"class":206},[186,42194,32921],{"class":202},[186,42196,42197,42199,42201,42203],{"class":188,"line":3147},[186,42198,35520],{"class":835},[186,42200,529],{"class":669},[186,42202,1803],{"class":206},[186,42204,1629],{"class":202},[186,42206,42207,42209],{"class":188,"line":3161},[186,42208,5556],{"class":669},[186,42210,35533],{"class":202},[186,42212,42213],{"class":188,"line":3166},[186,42214,3867],{"emptyLinePlaceholder":1551},[186,42216,42217],{"class":188,"line":3195},[186,42218,35542],{"class":192},[186,42220,42221,42223,42225],{"class":188,"line":3200},[186,42222,33402],{"class":669},[186,42224,35549],{"class":198},[186,42226,35552],{"class":202},[186,42228,42229],{"class":188,"line":3217},[186,42230,35557],{"class":192},[186,42232,42233,42235,42237,42239,42241,42243,42245],{"class":188,"line":3222},[186,42234,32692],{"class":202},[186,42236,529],{"class":669},[186,42238,32699],{"class":532},[186,42240,3172],{"class":669},[186,42242,32704],{"class":202},[186,42244,3169],{"class":669},[186,42246,35574],{"class":532},[186,42248,42249,42251,42253],{"class":188,"line":3227},[186,42250,32744],{"class":202},[186,42252,529],{"class":669},[186,42254,33744],{"class":202},[186,42256,42257],{"class":188,"line":3232},[186,42258,3867],{"emptyLinePlaceholder":1551},[186,42260,42261],{"class":188,"line":3246},[186,42262,35591],{"class":192},[186,42264,42265,42267,42269],{"class":188,"line":3251},[186,42266,35596],{"class":202},[186,42268,529],{"class":669},[186,42270,33797],{"class":206},[186,42272,42273,42275,42277],{"class":188,"line":4044},[186,42274,35605],{"class":202},[186,42276,529],{"class":669},[186,42278,4551],{"class":206},[186,42280,42281],{"class":188,"line":4058},[186,42282,3867],{"emptyLinePlaceholder":1551},[186,42284,42285],{"class":188,"line":4066},[186,42286,35618],{"class":192},[186,42288,42289],{"class":188,"line":4071},[186,42290,35623],{"class":192},[186,42292,42293],{"class":188,"line":4077},[186,42294,35628],{"class":192},[186,42296,42297,42299],{"class":188,"line":4083},[186,42298,35633],{"class":669},[186,42300,34339],{"class":202},[186,42302,42303],{"class":188,"line":4088},[186,42304,35640],{"class":192},[186,42306,42307,42309,42311,42313],{"class":188,"line":9411},[186,42308,4869],{"class":669},[186,42310,35647],{"class":202},[186,42312,27500],{"class":669},[186,42314,35652],{"class":202},[186,42316,42317,42319,42321],{"class":188,"line":9435},[186,42318,35657],{"class":202},[186,42320,529],{"class":669},[186,42322,35662],{"class":202},[186,42324,42325,42327,42329],{"class":188,"line":9440},[186,42326,35667],{"class":202},[186,42328,529],{"class":669},[186,42330,35672],{"class":202},[186,42332,42333],{"class":188,"line":9446},[186,42334,35677],{"class":192},[186,42336,42337],{"class":188,"line":9473},[186,42338,34330],{"class":202},[186,42340,42341],{"class":188,"line":9478},[186,42342,35686],{"class":192},[186,42344,42345,42347,42349],{"class":188,"line":9484},[186,42346,34115],{"class":202},[186,42348,529],{"class":669},[186,42350,35695],{"class":202},[186,42352,42353],{"class":188,"line":9496},[186,42354,35700],{"class":192},[186,42356,42357,42359,42361,42363,42365,42367,42369],{"class":188,"line":9508},[186,42358,34132],{"class":202},[186,42360,529],{"class":669},[186,42362,34137],{"class":202},[186,42364,34140],{"class":835},[186,42366,529],{"class":669},[186,42368,1829],{"class":206},[186,42370,1629],{"class":202},[186,42372,42373],{"class":188,"line":9520},[186,42374,35721],{"class":192},[186,42376,42377],{"class":188,"line":11179},[186,42378,35726],{"class":192},[186,42380,42381],{"class":188,"line":11204},[186,42382,35731],{"class":192},[186,42384,42385,42387,42389,42391,42393],{"class":188,"line":11227},[186,42386,35736],{"class":202},[186,42388,10940],{"class":669},[186,42390,34242],{"class":202},[186,42392,4415],{"class":669},[186,42394,35745],{"class":202},[186,42396,42397],{"class":188,"line":11251},[186,42398,35750],{"class":192},[186,42400,42401,42403,42405,42407,42409],{"class":188,"line":11256},[186,42402,35755],{"class":202},[186,42404,10940],{"class":669},[186,42406,35760],{"class":202},[186,42408,1803],{"class":206},[186,42410,1629],{"class":202},[186,42412,42413],{"class":188,"line":11261},[186,42414,3867],{"emptyLinePlaceholder":1551},[186,42416,42417],{"class":188,"line":11266},[186,42418,35773],{"class":192},[186,42420,42421,42423,42425,42427,42429],{"class":188,"line":11275},[186,42422,35778],{"class":202},[186,42424,529],{"class":669},[186,42426,35783],{"class":202},[186,42428,2194],{"class":669},[186,42430,35788],{"class":202},[186,42432,42433],{"class":188,"line":11280},[186,42434,35793],{"class":192},[186,42436,42437,42439,42441,42443],{"class":188,"line":11286},[186,42438,33906],{"class":206},[186,42440,832],{"class":202},[186,42442,35802],{"class":532},[186,42444,35805],{"class":202},[186,42446,42447],{"class":188,"line":11307},[186,42448,3867],{"emptyLinePlaceholder":1551},[186,42450,42451],{"class":188,"line":11313},[186,42452,35814],{"class":192},[186,42454,42455,42457,42459,42461,42463],{"class":188,"line":11327},[186,42456,3003],{"class":669},[186,42458,32675],{"class":206},[186,42460,4415],{"class":669},[186,42462,32680],{"class":532},[186,42464,5205],{"class":202},[186,42466,42467],{"class":188,"line":11333},[186,42468,35831],{"class":192},[186,42470,42471,42473,42475],{"class":188,"line":11360},[186,42472,32744],{"class":202},[186,42474,529],{"class":669},[186,42476,42477],{"class":202},"VGG16()\n",[186,42479,42480],{"class":188,"line":11369},[186,42481,35844],{"class":192},[186,42483,42484],{"class":188,"line":11375},[186,42485,35849],{"class":192},[186,42487,42488,42490,42492],{"class":188,"line":11383},[186,42489,35854],{"class":202},[186,42491,35857],{"class":532},[186,42493,31952],{"class":202},[186,42495,42496],{"class":188,"line":11388},[186,42497,35864],{"class":192},[186,42499,42500,42502,42504],{"class":188,"line":18065},[186,42501,35477],{"class":202},[186,42503,529],{"class":669},[186,42505,35873],{"class":202},[186,42507,42508],{"class":188,"line":18071},[186,42509,35878],{"class":192},[186,42511,42512],{"class":188,"line":18094},[186,42513,35883],{"class":202},[186,42515,42516],{"class":188,"line":18100},[186,42517,3867],{"emptyLinePlaceholder":1551},[186,42519,42520],{"class":188,"line":18123},[186,42521,35892],{"class":192},[186,42523,42524],{"class":188,"line":18137},[186,42525,35897],{"class":192},[186,42527,42528,42530,42532,42534,42536,42538,42540],{"class":188,"line":18157},[186,42529,32692],{"class":202},[186,42531,529],{"class":669},[186,42533,32699],{"class":532},[186,42535,3172],{"class":669},[186,42537,32704],{"class":202},[186,42539,3169],{"class":669},[186,42541,35574],{"class":532},[186,42543,42544,42546,42548],{"class":188,"line":18163},[186,42545,32744],{"class":202},[186,42547,529],{"class":669},[186,42549,33744],{"class":202},[186,42551,42552],{"class":188,"line":18174},[186,42553,35926],{"class":192},[186,42555,42556],{"class":188,"line":18197},[186,42557,35931],{"class":192},[186,42559,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604],{"class":188,"line":18219},[186,42561,35936],{"class":202},[186,42563,529],{"class":669},[186,42565,2498],{"class":202},[186,42567,35943],{"class":532},[186,42569,1988],{"class":202},[186,42571,35948],{"class":532},[186,42573,1988],{"class":202},[186,42575,35953],{"class":532},[186,42577,1988],{"class":202},[186,42579,35958],{"class":532},[186,42581,1988],{"class":202},[186,42583,35963],{"class":532},[186,42585,1988],{"class":202},[186,42587,35968],{"class":532},[186,42589,1988],{"class":202},[186,42591,35973],{"class":532},[186,42593,1988],{"class":202},[186,42595,35978],{"class":532},[186,42597,1988],{"class":202},[186,42599,35983],{"class":532},[186,42601,1988],{"class":202},[186,42603,35988],{"class":532},[186,42605,34701],{"class":202},[186,42607,42608,42610],{"class":188,"line":18224},[186,42609,35633],{"class":669},[186,42611,34339],{"class":202},[186,42613,42614],{"class":188,"line":18230},[186,42615,36001],{"class":192},[186,42617,42618,42620,42622,42624],{"class":188,"line":18244},[186,42619,4869],{"class":669},[186,42621,36008],{"class":202},[186,42623,27500],{"class":669},[186,42625,35652],{"class":202},[186,42627,42628,42630,42632],{"class":188,"line":18257},[186,42629,34065],{"class":202},[186,42631,529],{"class":669},[186,42633,34070],{"class":202},[186,42635,42636,42638,42640],{"class":188,"line":18262},[186,42637,34080],{"class":202},[186,42639,529],{"class":669},[186,42641,34085],{"class":202},[186,42643,42644],{"class":188,"line":18276},[186,42645,3867],{"emptyLinePlaceholder":1551},[186,42647,42648],{"class":188,"line":18281},[186,42649,36037],{"class":192},[186,42651,42652],{"class":188,"line":18287},[186,42653,34330],{"class":202},[186,42655,42656],{"class":188,"line":18292},[186,42657,36046],{"class":192},[186,42659,42660,42662,42664],{"class":188,"line":18306},[186,42661,34115],{"class":202},[186,42663,529],{"class":669},[186,42665,34120],{"class":202},[186,42667,42668],{"class":188,"line":18311},[186,42669,36059],{"class":192},[186,42671,42672,42674,42676,42678,42680,42682,42684],{"class":188,"line":18316},[186,42673,34132],{"class":202},[186,42675,529],{"class":669},[186,42677,34137],{"class":202},[186,42679,34140],{"class":835},[186,42681,529],{"class":669},[186,42683,1829],{"class":206},[186,42685,1629],{"class":202},[186,42687,42688],{"class":188,"line":18330},[186,42689,36080],{"class":192},[186,42691,42692,42694,42696],{"class":188,"line":18342},[186,42693,36085],{"class":202},[186,42695,529],{"class":669},[186,42697,36090],{"class":202},[186,42699,42700,42702,42704],{"class":188,"line":18347},[186,42701,36095],{"class":202},[186,42703,529],{"class":669},[186,42705,36100],{"class":202},[186,42707,42708,42710,42712,42714,42716,42718,42720,42722],{"class":188,"line":18360},[186,42709,36105],{"class":206},[186,42711,832],{"class":202},[186,42713,36110],{"class":532},[186,42715,36113],{"class":202},[186,42717,36116],{"class":532},[186,42719,1988],{"class":202},[186,42721,36121],{"class":532},[186,42723,36124],{"class":202},[29,42725,42727],{"id":42726},"_23googlenet","2.3.GoogLeNet",[23459,42729,42731],{"id":42730},"_231原理","2.3.1.原理",[34,42733,42734],{},[22,42735,42736],{},"网络结构",[169,42738,42739],{},[164,42740],{"alt":181,"src":42741},"\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",[169,42743,42744],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[169,42746,42747],{},[164,42748],{"alt":181,"src":42749},"\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",[169,42751,42752],{},[164,42753],{"alt":181,"src":42754},"\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",[169,42756,42757],{},[164,42758],{"alt":181,"src":42759},"\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",[34,42761,42762],{"start":49},[22,42763,42764],{},"1x1卷积的优点",[169,42766,42767],{},[164,42768],{"alt":181,"src":42769},"\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",[34,42771,42772],{"start":219},[22,42773,42774],{},"全局平均池化层优点",[169,42776,42777],{},[164,42778],{"alt":181,"src":42779},"\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",[169,42781,42782],{},[164,42783],{"alt":181,"src":42784},"\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",[34,42786,42787],{"start":225},[22,42788,42789],{},"参数详细描述",[169,42791,42792],{},[164,42793],{"alt":181,"src":42794},"\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",[169,42796,42797],{},[164,42798],{"alt":181,"src":42799},"\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",[169,42801,42802],{},[164,42803],{"alt":181,"src":42804},"\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",[169,42806,42807],{},[164,42808],{"alt":181,"src":42809},"\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",[169,42811,42812],{},[164,42813],{"alt":181,"src":42814},"\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",[169,42816,42817],{},[164,42818],{"alt":181,"src":42819},"\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",[169,42821,42822],{},[164,42823],{"alt":181,"src":42824},"\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",[169,42826,42827],{},[164,42828],{"alt":181,"src":42829},"\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",[169,42831,42832],{},[164,42833],{"alt":181,"src":42834},"\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",[169,42836,42837],{},[164,42838],{"alt":181,"src":42839},"\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",[169,42841,42842],{},[164,42843],{"alt":181,"src":42844},"\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",[169,42846,42847],{},[164,42848],{"alt":181,"src":42849},"\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",[169,42851,42852],{},[164,42853],{"alt":181,"src":42854},"\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",[169,42856,42857],{},[164,42858],{"alt":181,"src":42859},"\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",[169,42861,42862],{},[164,42863],{"alt":181,"src":42864},"\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",[169,42866,42867],{},[164,42868],{"alt":181,"src":42869},"\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",[169,42871,42872],{},[164,42873],{"alt":181,"src":42874},"\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",[169,42876,42877],{},[164,42878],{"alt":181,"src":42879},"\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",[169,42881,42882],{},[164,42883],{"alt":181,"src":42884},"\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",[169,42886,42887],{},[164,42888],{"alt":181,"src":42889},"\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",[169,42891,42892],{},[164,42893],{"alt":181,"src":42894},"\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",[23459,42896,42898],{"id":42897},"_232代码实现","2.3.2.代码实现",[34,42900,42901],{},[22,42902,32166],{},[169,42904,42905],{},"根据原理一步一步搭建即可",[176,42907,42909],{"className":31833,"code":42908,"language":31835,"meta":181,"style":181},"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",[183,42910,42911,42917,42927,42937,42941,42958,42967,42982,42992,42997,43030,43035,43072,43119,43124,43160,43207,43212,43217,43252,43284,43288,43296,43312,43336,43361,43382,43387,43402,43406,43410,43415,43432,43437,43446,43461,43472,43516,43520,43548,43552,43563,43591,43595,43632,43636,43664,43668,43679,43715,43747,43775,43779,43790,43824,43856,43888,43921,43955,43983,43987,43998,44031,44063,44077,44081,44094,44098,44103,44115,44123,44145,44150,44155,44160,44165,44170,44175,44189,44197,44206,44219,44234,44243,44247,44255,44266,44277,44288,44299,44310,44316,44320,44325,44337,44357,44366],{"__ignoreMap":181},[186,42912,42913,42915],{"class":188,"line":189},[186,42914,31847],{"class":669},[186,42916,31850],{"class":202},[186,42918,42919,42921,42923,42925],{"class":188,"line":49},[186,42920,32192],{"class":669},[186,42922,32195],{"class":202},[186,42924,31847],{"class":669},[186,42926,32200],{"class":202},[186,42928,42929,42931,42933,42935],{"class":188,"line":219},[186,42930,32192],{"class":669},[186,42932,32212],{"class":202},[186,42934,31847],{"class":669},[186,42936,32217],{"class":202},[186,42938,42939],{"class":188,"line":225},[186,42940,3867],{"emptyLinePlaceholder":1551},[186,42942,42943,42945,42948,42950,42952,42954,42956],{"class":188,"line":242},[186,42944,16156],{"class":669},[186,42946,42947],{"class":198}," Inception",[186,42949,832],{"class":202},[186,42951,32233],{"class":198},[186,42953,2168],{"class":202},[186,42955,32238],{"class":198},[186,42957,32241],{"class":202},[186,42959,42960,42962,42964],{"class":188,"line":248},[186,42961,32256],{"class":669},[186,42963,32259],{"class":206},[186,42965,42966],{"class":202},"(self,in_channels,c1,c2,c3,c4):\n",[186,42968,42969,42971,42974,42976,42978,42980],{"class":188,"line":265},[186,42970,32272],{"class":206},[186,42972,42973],{"class":202},"(Inception,",[186,42975,32278],{"class":206},[186,42977,32281],{"class":202},[186,42979,32284],{"class":206},[186,42981,3443],{"class":202},[186,42983,42984,42986,42988,42990],{"class":188,"line":271},[186,42985,32300],{"class":206},[186,42987,36226],{"class":202},[186,42989,529],{"class":669},[186,42991,36231],{"class":202},[186,42993,42994],{"class":188,"line":288},[186,42995,42996],{"class":192},"        # 路线1：定义1*1卷积\n",[186,42998,42999,43001,43004,43006,43008,43010,43012,43015,43017,43019,43022,43024,43026,43028],{"class":188,"line":294},[186,43000,32300],{"class":206},[186,43002,43003],{"class":202},".p1_1",[186,43005,529],{"class":669},[186,43007,32308],{"class":202},[186,43009,32311],{"class":835},[186,43011,529],{"class":669},[186,43013,43014],{"class":202},"in_channels,",[186,43016,32320],{"class":835},[186,43018,529],{"class":669},[186,43020,43021],{"class":202},"c1,",[186,43023,32329],{"class":835},[186,43025,529],{"class":669},[186,43027,1829],{"class":206},[186,43029,1629],{"class":202},[186,43031,43032],{"class":188,"line":1212},[186,43033,43034],{"class":192},"        # 路线2：定义1*1卷积和3*3\n",[186,43036,43037,43039,43042,43044,43046,43048,43050,43052,43054,43056,43059,43061,43064,43066,43068,43070],{"class":188,"line":1223},[186,43038,32300],{"class":206},[186,43040,43041],{"class":202},".p2_1",[186,43043,529],{"class":669},[186,43045,32308],{"class":202},[186,43047,32311],{"class":835},[186,43049,529],{"class":669},[186,43051,43014],{"class":202},[186,43053,32320],{"class":835},[186,43055,529],{"class":669},[186,43057,43058],{"class":202},"c2[",[186,43060,1803],{"class":206},[186,43062,43063],{"class":202},"],",[186,43065,32329],{"class":835},[186,43067,529],{"class":669},[186,43069,1829],{"class":206},[186,43071,1629],{"class":202},[186,43073,43074,43076,43079,43081,43083,43085,43087,43089,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117],{"class":188,"line":1236},[186,43075,32300],{"class":206},[186,43077,43078],{"class":202},".p2_2",[186,43080,529],{"class":669},[186,43082,32308],{"class":202},[186,43084,32311],{"class":835},[186,43086,529],{"class":669},[186,43088,43058],{"class":202},[186,43090,1803],{"class":206},[186,43092,43063],{"class":202},[186,43094,32320],{"class":835},[186,43096,529],{"class":669},[186,43098,43058],{"class":202},[186,43100,1829],{"class":206},[186,43102,43063],{"class":202},[186,43104,32329],{"class":835},[186,43106,529],{"class":669},[186,43108,1691],{"class":206},[186,43110,1988],{"class":202},[186,43112,32338],{"class":835},[186,43114,529],{"class":669},[186,43116,1829],{"class":206},[186,43118,1629],{"class":202},[186,43120,43121],{"class":188,"line":3096},[186,43122,43123],{"class":192},"        # 路线3：定义1*1卷积和5*5\n",[186,43125,43126,43128,43131,43133,43135,43137,43139,43141,43143,43145,43148,43150,43152,43154,43156,43158],{"class":188,"line":3110},[186,43127,32300],{"class":206},[186,43129,43130],{"class":202},".p3_1",[186,43132,529],{"class":669},[186,43134,32308],{"class":202},[186,43136,32311],{"class":835},[186,43138,529],{"class":669},[186,43140,43014],{"class":202},[186,43142,32320],{"class":835},[186,43144,529],{"class":669},[186,43146,43147],{"class":202},"c3[",[186,43149,1803],{"class":206},[186,43151,43063],{"class":202},[186,43153,32329],{"class":835},[186,43155,529],{"class":669},[186,43157,1829],{"class":206},[186,43159,1629],{"class":202},[186,43161,43162,43164,43167,43169,43171,43173,43175,43177,43179,43181,43183,43185,43187,43189,43191,43193,43195,43197,43199,43201,43203,43205],{"class":188,"line":3115},[186,43163,32300],{"class":206},[186,43165,43166],{"class":202},".p3_2",[186,43168,529],{"class":669},[186,43170,32308],{"class":202},[186,43172,32311],{"class":835},[186,43174,529],{"class":669},[186,43176,43147],{"class":202},[186,43178,1803],{"class":206},[186,43180,43063],{"class":202},[186,43182,32320],{"class":835},[186,43184,529],{"class":669},[186,43186,43147],{"class":202},[186,43188,1829],{"class":206},[186,43190,43063],{"class":202},[186,43192,32329],{"class":835},[186,43194,529],{"class":669},[186,43196,1930],{"class":206},[186,43198,1988],{"class":202},[186,43200,32338],{"class":835},[186,43202,529],{"class":669},[186,43204,1697],{"class":206},[186,43206,1629],{"class":202},[186,43208,43209],{"class":188,"line":3121},[186,43210,43211],{"class":192},"        # 路线4：定义3*3最大池化和1*1卷积\n",[186,43213,43214],{"class":188,"line":3142},[186,43215,43216],{"class":192},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[186,43218,43219,43221,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244,43246,43248,43250],{"class":188,"line":3147},[186,43220,32300],{"class":206},[186,43222,43223],{"class":202},".p4_1",[186,43225,529],{"class":669},[186,43227,36284],{"class":202},[186,43229,32329],{"class":835},[186,43231,529],{"class":669},[186,43233,1691],{"class":206},[186,43235,1988],{"class":202},[186,43237,32384],{"class":835},[186,43239,529],{"class":669},[186,43241,1829],{"class":206},[186,43243,1988],{"class":202},[186,43245,32338],{"class":835},[186,43247,529],{"class":669},[186,43249,1829],{"class":206},[186,43251,1629],{"class":202},[186,43253,43254,43256,43259,43261,43263,43265,43267,43269,43271,43273,43276,43278,43280,43282],{"class":188,"line":3161},[186,43255,32300],{"class":206},[186,43257,43258],{"class":202},".p4_2",[186,43260,529],{"class":669},[186,43262,32308],{"class":202},[186,43264,32311],{"class":835},[186,43266,529],{"class":669},[186,43268,43014],{"class":202},[186,43270,32320],{"class":835},[186,43272,529],{"class":669},[186,43274,43275],{"class":202},"c4,",[186,43277,32329],{"class":835},[186,43279,529],{"class":669},[186,43281,1829],{"class":206},[186,43283,1629],{"class":202},[186,43285,43286],{"class":188,"line":3166},[186,43287,3867],{"emptyLinePlaceholder":1551},[186,43289,43290,43292,43294],{"class":188,"line":3195},[186,43291,32256],{"class":669},[186,43293,32548],{"class":198},[186,43295,32551],{"class":202},[186,43297,43298,43301,43303,43305,43307,43309],{"class":188,"line":3200},[186,43299,43300],{"class":202},"        p1",[186,43302,529],{"class":669},[186,43304,32278],{"class":206},[186,43306,36639],{"class":202},[186,43308,32278],{"class":206},[186,43310,43311],{"class":202},".p1_1(x))\n",[186,43313,43314,43316,43318,43320,43322,43324,43327,43329,43331,43333],{"class":188,"line":3217},[186,43315,8548],{"class":202},[186,43317,529],{"class":669},[186,43319,32278],{"class":206},[186,43321,36639],{"class":202},[186,43323,32278],{"class":206},[186,43325,43326],{"class":202},".p2_2(",[186,43328,32278],{"class":206},[186,43330,36639],{"class":202},[186,43332,32278],{"class":206},[186,43334,43335],{"class":202},".p2_1(x))))\n",[186,43337,43338,43341,43343,43345,43347,43349,43352,43354,43356,43358],{"class":188,"line":3222},[186,43339,43340],{"class":202},"        p3",[186,43342,529],{"class":669},[186,43344,32278],{"class":206},[186,43346,36639],{"class":202},[186,43348,32278],{"class":206},[186,43350,43351],{"class":202},".p3_2(",[186,43353,32278],{"class":206},[186,43355,36639],{"class":202},[186,43357,32278],{"class":206},[186,43359,43360],{"class":202},".p3_1(x))))\n",[186,43362,43363,43366,43368,43370,43372,43374,43377,43379],{"class":188,"line":3227},[186,43364,43365],{"class":202},"        p4",[186,43367,529],{"class":669},[186,43369,32278],{"class":206},[186,43371,36639],{"class":202},[186,43373,32278],{"class":206},[186,43375,43376],{"class":202},".p4_2(",[186,43378,32278],{"class":206},[186,43380,43381],{"class":202},".p4_1(x)))\n",[186,43383,43384],{"class":188,"line":3232},[186,43385,43386],{"class":192},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[186,43388,43389,43391,43394,43396,43398,43400],{"class":188,"line":3246},[186,43390,16214],{"class":669},[186,43392,43393],{"class":202}," torch.cat((p1,p2,p3,p4),",[186,43395,34140],{"class":835},[186,43397,529],{"class":669},[186,43399,1829],{"class":206},[186,43401,1629],{"class":202},[186,43403,43404],{"class":188,"line":3251},[186,43405,3867],{"emptyLinePlaceholder":1551},[186,43407,43408],{"class":188,"line":4044},[186,43409,3867],{"emptyLinePlaceholder":1551},[186,43411,43412],{"class":188,"line":4058},[186,43413,43414],{"class":192},"# 搭建GoogLeNet网络\n",[186,43416,43417,43419,43422,43424,43426,43428,43430],{"class":188,"line":4066},[186,43418,16156],{"class":669},[186,43420,43421],{"class":198}," GoogLeNet",[186,43423,832],{"class":202},[186,43425,32233],{"class":198},[186,43427,2168],{"class":202},[186,43429,32238],{"class":198},[186,43431,32241],{"class":202},[186,43433,43434],{"class":188,"line":4071},[186,43435,43436],{"class":192},"    # 必须把Inception导入到里边\n",[186,43438,43439,43441,43443],{"class":188,"line":4077},[186,43440,32256],{"class":669},[186,43442,32259],{"class":206},[186,43444,43445],{"class":202},"(self,Inception):\n",[186,43447,43448,43450,43453,43455,43457,43459],{"class":188,"line":4083},[186,43449,32272],{"class":206},[186,43451,43452],{"class":202},"(GoogLeNet,",[186,43454,32278],{"class":206},[186,43456,32281],{"class":202},[186,43458,32284],{"class":206},[186,43460,3443],{"class":202},[186,43462,43463,43465,43468,43470],{"class":188,"line":4088},[186,43464,32300],{"class":206},[186,43466,43467],{"class":202},".b1",[186,43469,529],{"class":669},[186,43471,39464],{"class":202},[186,43473,43474,43476,43478,43480,43482,43484,43486,43488,43490,43492,43494,43496,43498,43500,43502,43504,43506,43508,43510,43512,43514],{"class":188,"line":9411},[186,43475,39469],{"class":202},[186,43477,32311],{"class":835},[186,43479,529],{"class":669},[186,43481,1829],{"class":206},[186,43483,1988],{"class":202},[186,43485,32320],{"class":835},[186,43487,529],{"class":669},[186,43489,1815],{"class":206},[186,43491,1988],{"class":202},[186,43493,32329],{"class":835},[186,43495,529],{"class":669},[186,43497,1979],{"class":206},[186,43499,1988],{"class":202},[186,43501,32384],{"class":835},[186,43503,529],{"class":669},[186,43505,1697],{"class":206},[186,43507,1988],{"class":202},[186,43509,32338],{"class":835},[186,43511,529],{"class":669},[186,43513,1691],{"class":206},[186,43515,1138],{"class":202},[186,43517,43518],{"class":188,"line":9435},[186,43519,39506],{"class":202},[186,43521,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546],{"class":188,"line":9440},[186,43523,39551],{"class":202},[186,43525,32329],{"class":835},[186,43527,529],{"class":669},[186,43529,1691],{"class":206},[186,43531,1988],{"class":202},[186,43533,32384],{"class":835},[186,43535,529],{"class":669},[186,43537,1697],{"class":206},[186,43539,1988],{"class":202},[186,43541,32338],{"class":835},[186,43543,529],{"class":669},[186,43545,1829],{"class":206},[186,43547,1629],{"class":202},[186,43549,43550],{"class":188,"line":9446},[186,43551,39580],{"class":202},[186,43553,43554,43556,43559,43561],{"class":188,"line":9473},[186,43555,32300],{"class":206},[186,43557,43558],{"class":202},".b2",[186,43560,529],{"class":669},[186,43562,39464],{"class":202},[186,43564,43565,43567,43569,43571,43573,43575,43577,43579,43581,43583,43585,43587,43589],{"class":188,"line":9478},[186,43566,39469],{"class":202},[186,43568,32311],{"class":835},[186,43570,529],{"class":669},[186,43572,1815],{"class":206},[186,43574,1988],{"class":202},[186,43576,32320],{"class":835},[186,43578,529],{"class":669},[186,43580,1815],{"class":206},[186,43582,1988],{"class":202},[186,43584,32329],{"class":835},[186,43586,529],{"class":669},[186,43588,1829],{"class":206},[186,43590,1138],{"class":202},[186,43592,43593],{"class":188,"line":9484},[186,43594,39506],{"class":202},[186,43596,43597,43599,43601,43603,43605,43607,43609,43611,43614,43616,43618,43620,43622,43624,43626,43628,43630],{"class":188,"line":9496},[186,43598,39469],{"class":202},[186,43600,32311],{"class":835},[186,43602,529],{"class":669},[186,43604,1815],{"class":206},[186,43606,1988],{"class":202},[186,43608,32320],{"class":835},[186,43610,529],{"class":669},[186,43612,43613],{"class":206},"192",[186,43615,1988],{"class":202},[186,43617,32329],{"class":835},[186,43619,529],{"class":669},[186,43621,1691],{"class":206},[186,43623,1988],{"class":202},[186,43625,32338],{"class":835},[186,43627,529],{"class":669},[186,43629,1829],{"class":206},[186,43631,1138],{"class":202},[186,43633,43634],{"class":188,"line":9508},[186,43635,39506],{"class":202},[186,43637,43638,43640,43642,43644,43646,43648,43650,43652,43654,43656,43658,43660,43662],{"class":188,"line":9520},[186,43639,39551],{"class":202},[186,43641,32329],{"class":835},[186,43643,529],{"class":669},[186,43645,1691],{"class":206},[186,43647,1988],{"class":202},[186,43649,32384],{"class":835},[186,43651,529],{"class":669},[186,43653,1697],{"class":206},[186,43655,1988],{"class":202},[186,43657,32338],{"class":835},[186,43659,529],{"class":669},[186,43661,1829],{"class":206},[186,43663,1629],{"class":202},[186,43665,43666],{"class":188,"line":11179},[186,43667,39580],{"class":202},[186,43669,43670,43672,43675,43677],{"class":188,"line":11204},[186,43671,32300],{"class":206},[186,43673,43674],{"class":202},".b3",[186,43676,529],{"class":669},[186,43678,39464],{"class":202},[186,43680,43681,43684,43686,43688,43690,43693,43695,43697,43699,43702,43704,43706,43708,43711,43713],{"class":188,"line":11227},[186,43682,43683],{"class":202},"            Inception(",[186,43685,43613],{"class":206},[186,43687,1988],{"class":202},[186,43689,1815],{"class":206},[186,43691,43692],{"class":202},",(",[186,43694,1821],{"class":206},[186,43696,1988],{"class":202},[186,43698,33525],{"class":206},[186,43700,43701],{"class":202},"),(",[186,43703,2211],{"class":206},[186,43705,1988],{"class":202},[186,43707,1809],{"class":206},[186,43709,43710],{"class":202},"),",[186,43712,1809],{"class":206},[186,43714,1138],{"class":202},[186,43716,43717,43719,43721,43723,43725,43727,43729,43731,43733,43735,43737,43739,43741,43743,43745],{"class":188,"line":11251},[186,43718,43683],{"class":202},[186,43720,36325],{"class":206},[186,43722,1988],{"class":202},[186,43724,33525],{"class":206},[186,43726,43692],{"class":202},[186,43728,33525],{"class":206},[186,43730,1988],{"class":202},[186,43732,43613],{"class":206},[186,43734,43701],{"class":202},[186,43736,1809],{"class":206},[186,43738,1988],{"class":202},[186,43740,1821],{"class":206},[186,43742,43710],{"class":202},[186,43744,1815],{"class":206},[186,43746,1138],{"class":202},[186,43748,43749,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773],{"class":188,"line":11256},[186,43750,39551],{"class":202},[186,43752,32329],{"class":835},[186,43754,529],{"class":669},[186,43756,1691],{"class":206},[186,43758,1988],{"class":202},[186,43760,32384],{"class":835},[186,43762,529],{"class":669},[186,43764,1697],{"class":206},[186,43766,1988],{"class":202},[186,43768,32338],{"class":835},[186,43770,529],{"class":669},[186,43772,1829],{"class":206},[186,43774,1629],{"class":202},[186,43776,43777],{"class":188,"line":11261},[186,43778,39580],{"class":202},[186,43780,43781,43783,43786,43788],{"class":188,"line":11266},[186,43782,32300],{"class":206},[186,43784,43785],{"class":202},".b4",[186,43787,529],{"class":669},[186,43789,39464],{"class":202},[186,43791,43792,43794,43797,43799,43801,43803,43805,43807,43810,43812,43814,43816,43818,43820,43822],{"class":188,"line":11275},[186,43793,43683],{"class":202},[186,43795,43796],{"class":206},"480",[186,43798,1988],{"class":202},[186,43800,43613],{"class":206},[186,43802,43692],{"class":202},[186,43804,1821],{"class":206},[186,43806,1988],{"class":202},[186,43808,43809],{"class":206},"208",[186,43811,43701],{"class":202},[186,43813,2211],{"class":206},[186,43815,1988],{"class":202},[186,43817,2217],{"class":206},[186,43819,43710],{"class":202},[186,43821,1815],{"class":206},[186,43823,1138],{"class":202},[186,43825,43826,43828,43830,43832,43834,43836,43838,43840,43842,43844,43846,43848,43850,43852,43854],{"class":188,"line":11280},[186,43827,43683],{"class":202},[186,43829,39911],{"class":206},[186,43831,1988],{"class":202},[186,43833,22509],{"class":206},[186,43835,43692],{"class":202},[186,43837,2228],{"class":206},[186,43839,1988],{"class":202},[186,43841,32956],{"class":206},[186,43843,43701],{"class":202},[186,43845,2408],{"class":206},[186,43847,1988],{"class":202},[186,43849,1815],{"class":206},[186,43851,43710],{"class":202},[186,43853,1815],{"class":206},[186,43855,1138],{"class":202},[186,43857,43858,43860,43862,43864,43866,43868,43870,43872,43874,43876,43878,43880,43882,43884,43886],{"class":188,"line":11286},[186,43859,43683],{"class":202},[186,43861,39911],{"class":206},[186,43863,1988],{"class":202},[186,43865,33525],{"class":206},[186,43867,43692],{"class":202},[186,43869,33525],{"class":206},[186,43871,1988],{"class":202},[186,43873,36325],{"class":206},[186,43875,43701],{"class":202},[186,43877,2408],{"class":206},[186,43879,1988],{"class":202},[186,43881,1815],{"class":206},[186,43883,43710],{"class":202},[186,43885,1815],{"class":206},[186,43887,1138],{"class":202},[186,43889,43890,43892,43894,43896,43898,43900,43902,43904,43907,43909,43911,43913,43915,43917,43919],{"class":188,"line":11307},[186,43891,43683],{"class":202},[186,43893,39911],{"class":206},[186,43895,1988],{"class":202},[186,43897,2228],{"class":206},[186,43899,43692],{"class":202},[186,43901,33525],{"class":206},[186,43903,1988],{"class":202},[186,43905,43906],{"class":206},"288",[186,43908,43701],{"class":202},[186,43910,1809],{"class":206},[186,43912,1988],{"class":202},[186,43914,1815],{"class":206},[186,43916,43710],{"class":202},[186,43918,1815],{"class":206},[186,43920,1138],{"class":202},[186,43922,43923,43925,43928,43930,43932,43934,43936,43938,43941,43943,43945,43947,43949,43951,43953],{"class":188,"line":11313},[186,43924,43683],{"class":202},[186,43926,43927],{"class":206},"528",[186,43929,1988],{"class":202},[186,43931,36325],{"class":206},[186,43933,43692],{"class":202},[186,43935,22509],{"class":206},[186,43937,1988],{"class":202},[186,43939,43940],{"class":206},"320",[186,43942,43701],{"class":202},[186,43944,1809],{"class":206},[186,43946,1988],{"class":202},[186,43948,33525],{"class":206},[186,43950,43710],{"class":202},[186,43952,33525],{"class":206},[186,43954,1138],{"class":202},[186,43956,43957,43959,43961,43963,43965,43967,43969,43971,43973,43975,43977,43979,43981],{"class":188,"line":11327},[186,43958,39551],{"class":202},[186,43960,32329],{"class":835},[186,43962,529],{"class":669},[186,43964,1691],{"class":206},[186,43966,1988],{"class":202},[186,43968,32384],{"class":835},[186,43970,529],{"class":669},[186,43972,1697],{"class":206},[186,43974,1988],{"class":202},[186,43976,32338],{"class":835},[186,43978,529],{"class":669},[186,43980,1829],{"class":206},[186,43982,1629],{"class":202},[186,43984,43985],{"class":188,"line":11333},[186,43986,39580],{"class":202},[186,43988,43989,43991,43994,43996],{"class":188,"line":11360},[186,43990,32300],{"class":206},[186,43992,43993],{"class":202},".b5",[186,43995,529],{"class":669},[186,43997,39464],{"class":202},[186,43999,44000,44002,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029],{"class":188,"line":11369},[186,44001,43683],{"class":202},[186,44003,44004],{"class":206},"832",[186,44006,1988],{"class":202},[186,44008,36325],{"class":206},[186,44010,43692],{"class":202},[186,44012,22509],{"class":206},[186,44014,1988],{"class":202},[186,44016,43940],{"class":206},[186,44018,43701],{"class":202},[186,44020,1809],{"class":206},[186,44022,1988],{"class":202},[186,44024,33525],{"class":206},[186,44026,43710],{"class":202},[186,44028,33525],{"class":206},[186,44030,1138],{"class":202},[186,44032,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061],{"class":188,"line":11375},[186,44034,43683],{"class":202},[186,44036,44004],{"class":206},[186,44038,1988],{"class":202},[186,44040,36395],{"class":206},[186,44042,43692],{"class":202},[186,44044,43613],{"class":206},[186,44046,1988],{"class":202},[186,44048,36395],{"class":206},[186,44050,43701],{"class":202},[186,44052,2217],{"class":206},[186,44054,1988],{"class":202},[186,44056,33525],{"class":206},[186,44058,43710],{"class":202},[186,44060,33525],{"class":206},[186,44062,1138],{"class":202},[186,44064,44065,44068,44070,44072,44074],{"class":188,"line":11383},[186,44066,44067],{"class":202},"            nn.AdaptiveAvgPool2d((",[186,44069,1829],{"class":206},[186,44071,1988],{"class":202},[186,44073,1829],{"class":206},[186,44075,44076],{"class":202},")),\n",[186,44078,44079],{"class":188,"line":11388},[186,44080,40244],{"class":202},[186,44082,44083,44085,44088,44090,44092],{"class":188,"line":18065},[186,44084,40249],{"class":202},[186,44086,44087],{"class":206},"1024",[186,44089,1988],{"class":202},[186,44091,2056],{"class":206},[186,44093,1629],{"class":202},[186,44095,44096],{"class":188,"line":18071},[186,44097,39580],{"class":202},[186,44099,44100],{"class":188,"line":18094},[186,44101,44102],{"class":192},"        # 对模型参数初始化\n",[186,44104,44105,44107,44109,44111,44113],{"class":188,"line":18100},[186,44106,4869],{"class":669},[186,44108,40322],{"class":202},[186,44110,27500],{"class":669},[186,44112,40327],{"class":206},[186,44114,40330],{"class":202},[186,44116,44117,44119,44121],{"class":188,"line":18123},[186,44118,6108],{"class":669},[186,44120,40342],{"class":206},[186,44122,40345],{"class":202},[186,44124,44125,44127,44130,44132,44135,44137,44139,44141,44143],{"class":188,"line":18137},[186,44126,40355],{"class":202},[186,44128,44129],{"class":835},"mode",[186,44131,529],{"class":669},[186,44133,44134],{"class":532},"'fan_out'",[186,44136,1988],{"class":202},[186,44138,40358],{"class":835},[186,44140,529],{"class":669},[186,44142,40363],{"class":532},[186,44144,1629],{"class":202},[186,44146,44147],{"class":188,"line":18157},[186,44148,44149],{"class":192},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[186,44151,44152],{"class":188,"line":18163},[186,44153,44154],{"class":192},"                # ② mode = 'fan_out'决定使用的fan值：\n",[186,44156,44157],{"class":188,"line":18174},[186,44158,44159],{"class":192},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[186,44161,44162],{"class":188,"line":18197},[186,44163,44164],{"class":192},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[186,44166,44167],{"class":188,"line":18219},[186,44168,44169],{"class":192},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[186,44171,44172],{"class":188,"line":18224},[186,44173,44174],{"class":192},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[186,44176,44177,44179,44181,44183,44185,44187],{"class":188,"line":18230},[186,44178,40375],{"class":669},[186,44180,40378],{"class":202},[186,44182,40381],{"class":669},[186,44184,40384],{"class":669},[186,44186,40387],{"class":206},[186,44188,5205],{"class":202},[186,44190,44191,44193,44195],{"class":188,"line":18244},[186,44192,40399],{"class":202},[186,44194,1803],{"class":206},[186,44196,1629],{"class":202},[186,44198,44199,44202,44204],{"class":188,"line":18257},[186,44200,44201],{"class":669},"                elif",[186,44203,40342],{"class":206},[186,44205,40418],{"class":202},[186,44207,44208,44211,44213,44215,44217],{"class":188,"line":18262},[186,44209,44210],{"class":202},"                    nn.init.normal_(m.weight,",[186,44212,1803],{"class":206},[186,44214,1988],{"class":202},[186,44216,40440],{"class":206},[186,44218,1629],{"class":202},[186,44220,44221,44224,44226,44228,44230,44232],{"class":188,"line":18276},[186,44222,44223],{"class":669},"                    if",[186,44225,40378],{"class":202},[186,44227,40381],{"class":669},[186,44229,40384],{"class":669},[186,44231,40387],{"class":206},[186,44233,5205],{"class":202},[186,44235,44236,44239,44241],{"class":188,"line":18281},[186,44237,44238],{"class":202},"                        nn.init.constant_(m.bias,",[186,44240,1803],{"class":206},[186,44242,1629],{"class":202},[186,44244,44245],{"class":188,"line":18287},[186,44246,36620],{"class":192},[186,44248,44249,44251,44253],{"class":188,"line":18292},[186,44250,32256],{"class":669},[186,44252,32548],{"class":198},[186,44254,32551],{"class":202},[186,44256,44257,44259,44261,44263],{"class":188,"line":18306},[186,44258,32556],{"class":202},[186,44260,529],{"class":669},[186,44262,32278],{"class":206},[186,44264,44265],{"class":202},".b1(x)\n",[186,44267,44268,44270,44272,44274],{"class":188,"line":18311},[186,44269,32556],{"class":202},[186,44271,529],{"class":669},[186,44273,32278],{"class":206},[186,44275,44276],{"class":202},".b2(x)\n",[186,44278,44279,44281,44283,44285],{"class":188,"line":18316},[186,44280,32556],{"class":202},[186,44282,529],{"class":669},[186,44284,32278],{"class":206},[186,44286,44287],{"class":202},".b3(x)\n",[186,44289,44290,44292,44294,44296],{"class":188,"line":18330},[186,44291,32556],{"class":202},[186,44293,529],{"class":669},[186,44295,32278],{"class":206},[186,44297,44298],{"class":202},".b4(x)\n",[186,44300,44301,44303,44305,44307],{"class":188,"line":18342},[186,44302,32556],{"class":202},[186,44304,529],{"class":669},[186,44306,32278],{"class":206},[186,44308,44309],{"class":202},".b5(x)\n",[186,44311,44312,44314],{"class":188,"line":18347},[186,44313,16214],{"class":669},[186,44315,32664],{"class":202},[186,44317,44318],{"class":188,"line":18360},[186,44319,3867],{"emptyLinePlaceholder":1551},[186,44321,44322],{"class":188,"line":18365},[186,44323,44324],{"class":192},"# 模型展示\n",[186,44326,44327,44329,44331,44333,44335],{"class":188,"line":18370},[186,44328,3003],{"class":669},[186,44330,32675],{"class":206},[186,44332,4415],{"class":669},[186,44334,32680],{"class":532},[186,44336,5205],{"class":202},[186,44338,44339,44341,44343,44345,44347,44349,44351,44353,44355],{"class":188,"line":18375},[186,44340,32692],{"class":202},[186,44342,529],{"class":669},[186,44344,31906],{"class":202},[186,44346,32699],{"class":532},[186,44348,3172],{"class":669},[186,44350,32704],{"class":202},[186,44352,3169],{"class":669},[186,44354,31931],{"class":532},[186,44356,1629],{"class":202},[186,44358,44359,44361,44363],{"class":188,"line":18388},[186,44360,32744],{"class":202},[186,44362,529],{"class":669},[186,44364,44365],{"class":202},"GoogLeNet(Inception).to(device)\n",[186,44367,44368,44370,44372,44374,44376,44378,44380,44382],{"class":188,"line":18393},[186,44369,32754],{"class":206},[186,44371,32757],{"class":202},[186,44373,1829],{"class":206},[186,44375,1988],{"class":202},[186,44377,32956],{"class":206},[186,44379,1988],{"class":202},[186,44381,32956],{"class":206},[186,44383,32770],{"class":202},[34,44385,44386],{"start":49},[22,44387,40637],{},[176,44389,44391],{"className":31833,"code":44390,"language":31835,"meta":181,"style":181},"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",[183,44392,44393,44399,44405,44415,44421,44431,44441,44451,44461,44471,44475,44486,44496,44500,44504,44508,44516,44528,44538,44554,44564,44596,44610,44620,44630,44634,44644,44658,44668,44678,44688,44694,44698,44702,44706,44710,44714,44722,44742,44746,44750,44754,44758,44762,44778,44782,44786,44794,44798,44802,44810,44814,44818,44822,44830,44834,44838,44842,44846,44854,44858,44866,44870,44878,44882,44890,44894,44902,44906,44910,44918,44922,44926,44930,44942,44966,44980,44984,44988,44992,45000,45004,45012,45016,45024,45028,45036,45040,45048,45052,45060,45064,45076,45080,45088,45092,45100,45104,45108,45112,45116,45124,45128,45144,45148,45156,45160,45164,45168,45172,45176,45180,45184,45200,45204,45216,45220,45232,45236,45248,45252,45260,45264,45272,45276,45280,45284,45290,45294,45302,45306,45322,45326,45334,45338,45354,45366,45370,45382,45386,45390,45398,45402,45406,45414,45418,45426,45430,45438,45442,45446,45488,45530,45534,45538,45554,45558,45574,45578,45582,45590,45594,45598,45610,45648,45652,45656,45664,45668,45682,45692,45698,45704,45710,45716,45720,45724,45730,45734,45738,45746,45750,45768,45772,45776,45780,45796,45800,45804,45808,45812,45816,45836,45856,45860,45864,45868,45876,45884,45888,45904,45924,45944,45948,45952,45960,45968,45972,45976,45980,45992,45996,46006,46014,46031],{"__ignoreMap":181},[186,44394,44395,44397],{"class":188,"line":189},[186,44396,31847],{"class":669},[186,44398,33277],{"class":202},[186,44400,44401,44403],{"class":188,"line":49},[186,44402,31847],{"class":669},[186,44404,33284],{"class":202},[186,44406,44407,44409,44411,44413],{"class":188,"line":219},[186,44408,31847],{"class":669},[186,44410,33295],{"class":202},[186,44412,32838],{"class":669},[186,44414,33300],{"class":202},[186,44416,44417,44419],{"class":188,"line":225},[186,44418,31847],{"class":669},[186,44420,31850],{"class":202},[186,44422,44423,44425,44427,44429],{"class":188,"line":242},[186,44424,32192],{"class":669},[186,44426,32870],{"class":202},[186,44428,31847],{"class":669},[186,44430,33317],{"class":202},[186,44432,44433,44435,44437,44439],{"class":188,"line":248},[186,44434,32192],{"class":669},[186,44436,32823],{"class":202},[186,44438,31847],{"class":669},[186,44440,32828],{"class":202},[186,44442,44443,44445,44447,44449],{"class":188,"line":265},[186,44444,32192],{"class":669},[186,44446,32853],{"class":202},[186,44448,31847],{"class":669},[186,44450,32858],{"class":202},[186,44452,44453,44455,44457,44459],{"class":188,"line":271},[186,44454,31847],{"class":669},[186,44456,32870],{"class":202},[186,44458,32838],{"class":669},[186,44460,32875],{"class":202},[186,44462,44463,44465,44467,44469],{"class":188,"line":288},[186,44464,31847],{"class":669},[186,44466,32887],{"class":202},[186,44468,32838],{"class":669},[186,44470,32892],{"class":202},[186,44472,44473],{"class":188,"line":294},[186,44474,33362],{"class":192},[186,44476,44477,44479,44481,44483],{"class":188,"line":1212},[186,44478,32192],{"class":669},[186,44480,33369],{"class":202},[186,44482,31847],{"class":669},[186,44484,44485],{"class":202}," GoogLeNet, Inception\n",[186,44487,44488,44490,44492,44494],{"class":188,"line":1223},[186,44489,32192],{"class":669},[186,44491,32195],{"class":202},[186,44493,31847],{"class":669},[186,44495,32200],{"class":202},[186,44497,44498],{"class":188,"line":1236},[186,44499,3867],{"emptyLinePlaceholder":1551},[186,44501,44502],{"class":188,"line":3096},[186,44503,3867],{"emptyLinePlaceholder":1551},[186,44505,44506],{"class":188,"line":3110},[186,44507,33397],{"class":192},[186,44509,44510,44512,44514],{"class":188,"line":3115},[186,44511,33402],{"class":669},[186,44513,33405],{"class":198},[186,44515,33408],{"class":202},[186,44517,44518,44520,44522,44524,44526],{"class":188,"line":3121},[186,44519,33413],{"class":202},[186,44521,529],{"class":669},[186,44523,32910],{"class":202},[186,44525,32918],{"class":532},[186,44527,32921],{"class":202},[186,44529,44530,44532,44534,44536],{"class":188,"line":3142},[186,44531,33426],{"class":835},[186,44533,529],{"class":669},[186,44535,32931],{"class":206},[186,44537,32921],{"class":202},[186,44539,44540,44542,44544,44546,44548,44550,44552],{"class":188,"line":3147},[186,44541,33437],{"class":835},[186,44543,529],{"class":669},[186,44545,32948],{"class":202},[186,44547,32951],{"class":835},[186,44549,529],{"class":669},[186,44551,36904],{"class":206},[186,44553,32959],{"class":202},[186,44555,44556,44558,44560,44562],{"class":188,"line":3161},[186,44557,33454],{"class":835},[186,44559,529],{"class":669},[186,44561,32931],{"class":206},[186,44563,1629],{"class":202},[186,44565,44566,44568,44570,44572,44574,44576,44578,44580,44582,44584,44586,44588,44590,44592,44594],{"class":188,"line":3166},[186,44567,33465],{"class":202},[186,44569,529],{"class":669},[186,44571,33470],{"class":202},[186,44573,33473],{"class":206},[186,44575,832],{"class":202},[186,44577,33478],{"class":206},[186,44579,2065],{"class":669},[186,44581,8821],{"class":206},[186,44583,33485],{"class":202},[186,44585,33473],{"class":206},[186,44587,832],{"class":202},[186,44589,33492],{"class":206},[186,44591,2065],{"class":669},[186,44593,8821],{"class":206},[186,44595,33499],{"class":202},[186,44597,44598,44600,44602,44604,44606,44608],{"class":188,"line":3195},[186,44599,33504],{"class":202},[186,44601,529],{"class":669},[186,44603,33509],{"class":202},[186,44605,32992],{"class":835},[186,44607,529],{"class":669},[186,44609,32997],{"class":202},[186,44611,44612,44614,44616,44618],{"class":188,"line":3200},[186,44613,33520],{"class":835},[186,44615,529],{"class":669},[186,44617,1809],{"class":206},[186,44619,32921],{"class":202},[186,44621,44622,44624,44626,44628],{"class":188,"line":3217},[186,44623,33532],{"class":835},[186,44625,529],{"class":669},[186,44627,32931],{"class":206},[186,44629,32921],{"class":202},[186,44631,44632],{"class":188,"line":3222},[186,44633,33543],{"class":192},[186,44635,44636,44638,44640,44642],{"class":188,"line":3227},[186,44637,33548],{"class":835},[186,44639,529],{"class":669},[186,44641,2005],{"class":206},[186,44643,1629],{"class":202},[186,44645,44646,44648,44650,44652,44654,44656],{"class":188,"line":3232},[186,44647,33559],{"class":202},[186,44649,529],{"class":669},[186,44651,32989],{"class":202},[186,44653,32992],{"class":835},[186,44655,529],{"class":669},[186,44657,33570],{"class":202},[186,44659,44660,44662,44664,44666],{"class":188,"line":3246},[186,44661,33575],{"class":835},[186,44663,529],{"class":669},[186,44665,1809],{"class":206},[186,44667,32921],{"class":202},[186,44669,44670,44672,44674,44676],{"class":188,"line":3251},[186,44671,33586],{"class":835},[186,44673,529],{"class":669},[186,44675,32931],{"class":206},[186,44677,32921],{"class":202},[186,44679,44680,44682,44684,44686],{"class":188,"line":4044},[186,44681,33597],{"class":835},[186,44683,529],{"class":669},[186,44685,2005],{"class":206},[186,44687,1629],{"class":202},[186,44689,44690,44692],{"class":188,"line":4058},[186,44691,5556],{"class":669},[186,44693,33610],{"class":202},[186,44695,44696],{"class":188,"line":4066},[186,44697,3867],{"emptyLinePlaceholder":1551},[186,44699,44700],{"class":188,"line":4071},[186,44701,33619],{"class":192},[186,44703,44704],{"class":188,"line":4077},[186,44705,33624],{"class":192},[186,44707,44708],{"class":188,"line":4083},[186,44709,3867],{"emptyLinePlaceholder":1551},[186,44711,44712],{"class":188,"line":4088},[186,44713,33633],{"class":192},[186,44715,44716,44718,44720],{"class":188,"line":9411},[186,44717,33402],{"class":669},[186,44719,33640],{"class":198},[186,44721,33643],{"class":202},[186,44723,44724,44726,44728,44730,44732,44734,44736,44738,44740],{"class":188,"line":9435},[186,44725,32692],{"class":202},[186,44727,529],{"class":669},[186,44729,31906],{"class":202},[186,44731,32699],{"class":532},[186,44733,3172],{"class":669},[186,44735,32704],{"class":202},[186,44737,3169],{"class":669},[186,44739,33662],{"class":532},[186,44741,1629],{"class":202},[186,44743,44744],{"class":188,"line":9440},[186,44745,3867],{"emptyLinePlaceholder":1551},[186,44747,44748],{"class":188,"line":9446},[186,44749,3867],{"emptyLinePlaceholder":1551},[186,44751,44752],{"class":188,"line":9473},[186,44753,33677],{"class":192},[186,44755,44756],{"class":188,"line":9478},[186,44757,33682],{"class":192},[186,44759,44760],{"class":188,"line":9484},[186,44761,33687],{"class":192},[186,44763,44764,44766,44768,44770,44772,44774,44776],{"class":188,"line":9496},[186,44765,33692],{"class":202},[186,44767,529],{"class":669},[186,44769,33697],{"class":202},[186,44771,33700],{"class":835},[186,44773,529],{"class":669},[186,44775,33705],{"class":206},[186,44777,1629],{"class":202},[186,44779,44780],{"class":188,"line":9508},[186,44781,3867],{"emptyLinePlaceholder":1551},[186,44783,44784],{"class":188,"line":9520},[186,44785,33716],{"class":192},[186,44787,44788,44790,44792],{"class":188,"line":11179},[186,44789,33721],{"class":202},[186,44791,529],{"class":669},[186,44793,33726],{"class":202},[186,44795,44796],{"class":188,"line":11204},[186,44797,3867],{"emptyLinePlaceholder":1551},[186,44799,44800],{"class":188,"line":11227},[186,44801,33735],{"class":192},[186,44803,44804,44806,44808],{"class":188,"line":11251},[186,44805,32744],{"class":202},[186,44807,529],{"class":669},[186,44809,33744],{"class":202},[186,44811,44812],{"class":188,"line":11256},[186,44813,33749],{"class":192},[186,44815,44816],{"class":188,"line":11261},[186,44817,33754],{"class":192},[186,44819,44820],{"class":188,"line":11266},[186,44821,33759],{"class":192},[186,44823,44824,44826,44828],{"class":188,"line":11275},[186,44825,33764],{"class":202},[186,44827,529],{"class":669},[186,44829,33769],{"class":202},[186,44831,44832],{"class":188,"line":11280},[186,44833,3867],{"emptyLinePlaceholder":1551},[186,44835,44836],{"class":188,"line":11286},[186,44837,3867],{"emptyLinePlaceholder":1551},[186,44839,44840],{"class":188,"line":11307},[186,44841,33782],{"class":192},[186,44843,44844],{"class":188,"line":11313},[186,44845,33787],{"class":192},[186,44847,44848,44850,44852],{"class":188,"line":11327},[186,44849,33792],{"class":202},[186,44851,529],{"class":669},[186,44853,33797],{"class":206},[186,44855,44856],{"class":188,"line":11333},[186,44857,33802],{"class":192},[186,44859,44860,44862,44864],{"class":188,"line":11360},[186,44861,33807],{"class":202},[186,44863,529],{"class":669},[186,44865,33812],{"class":202},[186,44867,44868],{"class":188,"line":11369},[186,44869,33817],{"class":192},[186,44871,44872,44874,44876],{"class":188,"line":11375},[186,44873,33822],{"class":202},[186,44875,529],{"class":669},[186,44877,33812],{"class":202},[186,44879,44880],{"class":188,"line":11383},[186,44881,33831],{"class":192},[186,44883,44884,44886,44888],{"class":188,"line":11388},[186,44885,33836],{"class":202},[186,44887,529],{"class":669},[186,44889,33812],{"class":202},[186,44891,44892],{"class":188,"line":18065},[186,44893,33845],{"class":192},[186,44895,44896,44898,44900],{"class":188,"line":18071},[186,44897,33850],{"class":202},[186,44899,529],{"class":669},[186,44901,33812],{"class":202},[186,44903,44904],{"class":188,"line":18094},[186,44905,3867],{"emptyLinePlaceholder":1551},[186,44907,44908],{"class":188,"line":18100},[186,44909,33863],{"class":192},[186,44911,44912,44914,44916],{"class":188,"line":18123},[186,44913,33868],{"class":202},[186,44915,529],{"class":669},[186,44917,33873],{"class":202},[186,44919,44920],{"class":188,"line":18137},[186,44921,3867],{"emptyLinePlaceholder":1551},[186,44923,44924],{"class":188,"line":18157},[186,44925,3867],{"emptyLinePlaceholder":1551},[186,44927,44928],{"class":188,"line":18163},[186,44929,33886],{"class":192},[186,44931,44932,44934,44936,44938,44940],{"class":188,"line":18174},[186,44933,4667],{"class":669},[186,44935,33893],{"class":202},[186,44937,27500],{"class":669},[186,44939,33898],{"class":206},[186,44941,33901],{"class":202},[186,44943,44944,44946,44948,44950,44952,44954,44956,44958,44960,44962,44964],{"class":188,"line":18197},[186,44945,33906],{"class":206},[186,44947,832],{"class":202},[186,44949,33911],{"class":532},[186,44951,33914],{"class":206},[186,44953,2194],{"class":532},[186,44955,33914],{"class":206},[186,44957,1862],{"class":532},[186,44959,33923],{"class":202},[186,44961,2142],{"class":669},[186,44963,1829],{"class":206},[186,44965,31952],{"class":202},[186,44967,44968,44970,44972,44974,44976,44978],{"class":188,"line":18219},[186,44969,33906],{"class":206},[186,44971,832],{"class":202},[186,44973,33938],{"class":532},[186,44975,2065],{"class":669},[186,44977,2056],{"class":206},[186,44979,1629],{"class":202},[186,44981,44982],{"class":188,"line":18224},[186,44983,3867],{"emptyLinePlaceholder":1551},[186,44985,44986],{"class":188,"line":18230},[186,44987,33953],{"class":192},[186,44989,44990],{"class":188,"line":18244},[186,44991,33958],{"class":192},[186,44993,44994,44996,44998],{"class":188,"line":18257},[186,44995,33963],{"class":202},[186,44997,529],{"class":669},[186,44999,33797],{"class":206},[186,45001,45002],{"class":188,"line":18262},[186,45003,33972],{"class":192},[186,45005,45006,45008,45010],{"class":188,"line":18276},[186,45007,33977],{"class":202},[186,45009,529],{"class":669},[186,45011,4551],{"class":206},[186,45013,45014],{"class":188,"line":18281},[186,45015,33986],{"class":192},[186,45017,45018,45020,45022],{"class":188,"line":18287},[186,45019,33991],{"class":202},[186,45021,529],{"class":669},[186,45023,33797],{"class":206},[186,45025,45026],{"class":188,"line":18292},[186,45027,34000],{"class":192},[186,45029,45030,45032,45034],{"class":188,"line":18306},[186,45031,34005],{"class":202},[186,45033,529],{"class":669},[186,45035,4551],{"class":206},[186,45037,45038],{"class":188,"line":18311},[186,45039,34014],{"class":192},[186,45041,45042,45044,45046],{"class":188,"line":18316},[186,45043,34019],{"class":202},[186,45045,529],{"class":669},[186,45047,4551],{"class":206},[186,45049,45050],{"class":188,"line":18330},[186,45051,34028],{"class":192},[186,45053,45054,45056,45058],{"class":188,"line":18342},[186,45055,34033],{"class":202},[186,45057,529],{"class":669},[186,45059,4551],{"class":206},[186,45061,45062],{"class":188,"line":18347},[186,45063,34042],{"class":192},[186,45065,45066,45068,45070,45072,45074],{"class":188,"line":18360},[186,45067,4869],{"class":669},[186,45069,33056],{"class":202},[186,45071,27500],{"class":669},[186,45073,33061],{"class":206},[186,45075,34055],{"class":202},[186,45077,45078],{"class":188,"line":18365},[186,45079,34060],{"class":192},[186,45081,45082,45084,45086],{"class":188,"line":18370},[186,45083,34065],{"class":202},[186,45085,529],{"class":669},[186,45087,34070],{"class":202},[186,45089,45090],{"class":188,"line":18375},[186,45091,34075],{"class":192},[186,45093,45094,45096,45098],{"class":188,"line":18388},[186,45095,34080],{"class":202},[186,45097,529],{"class":669},[186,45099,34085],{"class":202},[186,45101,45102],{"class":188,"line":18393},[186,45103,34091],{"class":192},[186,45105,45106],{"class":188,"line":34088},[186,45107,34097],{"class":202},[186,45109,45110],{"class":188,"line":34094},[186,45111,34103],{"class":192},[186,45113,45114],{"class":188,"line":34100},[186,45115,34109],{"class":192},[186,45117,45118,45120,45122],{"class":188,"line":34106},[186,45119,34115],{"class":202},[186,45121,529],{"class":669},[186,45123,34120],{"class":202},[186,45125,45126],{"class":188,"line":34112},[186,45127,34126],{"class":192},[186,45129,45130,45132,45134,45136,45138,45140,45142],{"class":188,"line":34123},[186,45131,34132],{"class":202},[186,45133,529],{"class":669},[186,45135,34137],{"class":202},[186,45137,34140],{"class":835},[186,45139,529],{"class":669},[186,45141,1829],{"class":206},[186,45143,1629],{"class":202},[186,45145,45146],{"class":188,"line":34129},[186,45147,34152],{"class":192},[186,45149,45150,45152,45154],{"class":188,"line":34149},[186,45151,34158],{"class":202},[186,45153,529],{"class":669},[186,45155,34163],{"class":202},[186,45157,45158],{"class":188,"line":34155},[186,45159,34169],{"class":192},[186,45161,45162],{"class":188,"line":34166},[186,45163,34175],{"class":202},[186,45165,45166],{"class":188,"line":34172},[186,45167,34181],{"class":192},[186,45169,45170],{"class":188,"line":34178},[186,45171,34187],{"class":202},[186,45173,45174],{"class":188,"line":34184},[186,45175,34193],{"class":192},[186,45177,45178],{"class":188,"line":34190},[186,45179,34199],{"class":202},[186,45181,45182],{"class":188,"line":34196},[186,45183,34205],{"class":192},[186,45185,45186,45188,45190,45192,45194,45196,45198],{"class":188,"line":34202},[186,45187,34211],{"class":202},[186,45189,10940],{"class":669},[186,45191,34216],{"class":202},[186,45193,2065],{"class":669},[186,45195,34221],{"class":202},[186,45197,1803],{"class":206},[186,45199,1629],{"class":202},[186,45201,45202],{"class":188,"line":34208},[186,45203,34231],{"class":192},[186,45205,45206,45208,45210,45212,45214],{"class":188,"line":34228},[186,45207,34237],{"class":202},[186,45209,10940],{"class":669},[186,45211,34242],{"class":202},[186,45213,4415],{"class":669},[186,45215,34247],{"class":202},[186,45217,45218],{"class":188,"line":34234},[186,45219,34253],{"class":192},[186,45221,45222,45224,45226,45228,45230],{"class":188,"line":34250},[186,45223,34259],{"class":202},[186,45225,10940],{"class":669},[186,45227,34221],{"class":202},[186,45229,1803],{"class":206},[186,45231,1629],{"class":202},[186,45233,45234],{"class":188,"line":34256},[186,45235,34273],{"class":192},[186,45237,45238,45240,45242,45244,45246],{"class":188,"line":34270},[186,45239,4869],{"class":669},[186,45241,34281],{"class":202},[186,45243,27500],{"class":669},[186,45245,33061],{"class":206},[186,45247,34288],{"class":202},[186,45249,45250],{"class":188,"line":34276},[186,45251,34294],{"class":192},[186,45253,45254,45256,45258],{"class":188,"line":34291},[186,45255,34065],{"class":202},[186,45257,529],{"class":669},[186,45259,34070],{"class":202},[186,45261,45262],{"class":188,"line":34297},[186,45263,34309],{"class":192},[186,45265,45266,45268,45270],{"class":188,"line":34306},[186,45267,34080],{"class":202},[186,45269,529],{"class":669},[186,45271,34085],{"class":202},[186,45273,45274],{"class":188,"line":34312},[186,45275,34324],{"class":192},[186,45277,45278],{"class":188,"line":34321},[186,45279,34330],{"class":202},[186,45281,45282],{"class":188,"line":34327},[186,45283,37811],{"class":192},[186,45285,45286,45288],{"class":188,"line":34333},[186,45287,34336],{"class":669},[186,45289,34339],{"class":202},[186,45291,45292],{"class":188,"line":34342},[186,45293,34345],{"class":192},[186,45295,45296,45298,45300],{"class":188,"line":34348},[186,45297,37826],{"class":202},[186,45299,529],{"class":669},[186,45301,34120],{"class":202},[186,45303,45304],{"class":188,"line":34359},[186,45305,34362],{"class":192},[186,45307,45308,45310,45312,45314,45316,45318,45320],{"class":188,"line":34365},[186,45309,37839],{"class":202},[186,45311,529],{"class":669},[186,45313,34137],{"class":202},[186,45315,34140],{"class":835},[186,45317,529],{"class":669},[186,45319,1829],{"class":206},[186,45321,1629],{"class":202},[186,45323,45324],{"class":188,"line":34384},[186,45325,34387],{"class":192},[186,45327,45328,45330,45332],{"class":188,"line":34390},[186,45329,37860],{"class":202},[186,45331,529],{"class":669},[186,45333,34163],{"class":202},[186,45335,45336],{"class":188,"line":34401},[186,45337,34404],{"class":192},[186,45339,45340,45342,45344,45346,45348,45350,45352],{"class":188,"line":34407},[186,45341,37873],{"class":202},[186,45343,10940],{"class":669},[186,45345,37878],{"class":202},[186,45347,2065],{"class":669},[186,45349,34221],{"class":202},[186,45351,1803],{"class":206},[186,45353,1629],{"class":202},[186,45355,45356,45358,45360,45362,45364],{"class":188,"line":34427},[186,45357,37891],{"class":202},[186,45359,10940],{"class":669},[186,45361,34242],{"class":202},[186,45363,4415],{"class":669},[186,45365,34247],{"class":202},[186,45367,45368],{"class":188,"line":34443},[186,45369,37904],{"class":192},[186,45371,45372,45374,45376,45378,45380],{"class":188,"line":34449},[186,45373,37909],{"class":202},[186,45375,10940],{"class":669},[186,45377,34221],{"class":202},[186,45379,1803],{"class":206},[186,45381,1629],{"class":202},[186,45383,45384],{"class":188,"line":34463},[186,45385,34466],{"class":192},[186,45387,45388],{"class":188,"line":34469},[186,45389,34472],{"class":192},[186,45391,45392,45394,45396],{"class":188,"line":34475},[186,45393,34478],{"class":202},[186,45395,2194],{"class":669},[186,45397,34483],{"class":202},[186,45399,45400],{"class":188,"line":34486},[186,45401,34489],{"class":192},[186,45403,45404],{"class":188,"line":34492},[186,45405,34495],{"class":192},[186,45407,45408,45410,45412],{"class":188,"line":34498},[186,45409,34501],{"class":202},[186,45411,2194],{"class":669},[186,45413,34483],{"class":202},[186,45415,45416],{"class":188,"line":34508},[186,45417,34511],{"class":192},[186,45419,45420,45422,45424],{"class":188,"line":34514},[186,45421,34517],{"class":202},[186,45423,2194],{"class":669},[186,45425,34522],{"class":202},[186,45427,45428],{"class":188,"line":34525},[186,45429,34528],{"class":192},[186,45431,45432,45434,45436],{"class":188,"line":34531},[186,45433,34534],{"class":202},[186,45435,2194],{"class":669},[186,45437,34522],{"class":202},[186,45439,45440],{"class":188,"line":34541},[186,45441,3867],{"emptyLinePlaceholder":1551},[186,45443,45444],{"class":188,"line":34546},[186,45445,34549],{"class":192},[186,45447,45448,45450,45452,45454,45456,45458,45460,45462,45464,45466,45468,45470,45472,45474,45476,45478,45480,45482,45484,45486],{"class":188,"line":34552},[186,45449,33906],{"class":206},[186,45451,832],{"class":202},[186,45453,5058],{"class":532},[186,45455,33914],{"class":206},[186,45457,34563],{"class":532},[186,45459,2504],{"class":206},[186,45461,34568],{"class":669},[186,45463,2553],{"class":206},[186,45465,34573],{"class":532},[186,45467,2504],{"class":206},[186,45469,34568],{"class":669},[186,45471,2553],{"class":206},[186,45473,5058],{"class":532},[186,45475,34584],{"class":202},[186,45477,2142],{"class":669},[186,45479,1829],{"class":206},[186,45481,34591],{"class":202},[186,45483,2142],{"class":669},[186,45485,1829],{"class":206},[186,45487,34598],{"class":202},[186,45489,45490,45492,45494,45496,45498,45500,45502,45504,45506,45508,45510,45512,45514,45516,45518,45520,45522,45524,45526,45528],{"class":188,"line":34601},[186,45491,33906],{"class":206},[186,45493,832],{"class":202},[186,45495,5058],{"class":532},[186,45497,33914],{"class":206},[186,45499,34612],{"class":532},[186,45501,2504],{"class":206},[186,45503,34568],{"class":669},[186,45505,2553],{"class":206},[186,45507,34621],{"class":532},[186,45509,2504],{"class":206},[186,45511,34568],{"class":669},[186,45513,2553],{"class":206},[186,45515,5058],{"class":532},[186,45517,34632],{"class":202},[186,45519,2142],{"class":669},[186,45521,1829],{"class":206},[186,45523,34639],{"class":202},[186,45525,2142],{"class":669},[186,45527,1829],{"class":206},[186,45529,34598],{"class":202},[186,45531,45532],{"class":188,"line":34648},[186,45533,3867],{"emptyLinePlaceholder":1551},[186,45535,45536],{"class":188,"line":34653},[186,45537,34656],{"class":192},[186,45539,45540,45542,45544,45546,45548,45550,45552],{"class":188,"line":34659},[186,45541,3964],{"class":669},[186,45543,34664],{"class":202},[186,45545,2142],{"class":669},[186,45547,1829],{"class":206},[186,45549,2547],{"class":202},[186,45551,2567],{"class":669},[186,45553,34675],{"class":202},[186,45555,45556],{"class":188,"line":34678},[186,45557,34681],{"class":192},[186,45559,45560,45562,45564,45566,45568,45570,45572],{"class":188,"line":34684},[186,45561,34687],{"class":202},[186,45563,1662],{"class":206},[186,45565,529],{"class":669},[186,45567,34694],{"class":202},[186,45569,2142],{"class":669},[186,45571,1829],{"class":206},[186,45573,34701],{"class":202},[186,45575,45576],{"class":188,"line":34704},[186,45577,34707],{"class":192},[186,45579,45580],{"class":188,"line":34710},[186,45581,34713],{"class":192},[186,45583,45584,45586,45588],{"class":188,"line":34716},[186,45585,34719],{"class":202},[186,45587,529],{"class":669},[186,45589,33769],{"class":202},[186,45591,45592],{"class":188,"line":34726},[186,45593,3867],{"emptyLinePlaceholder":1551},[186,45595,45596],{"class":188,"line":34731},[186,45597,34734],{"class":192},[186,45599,45600,45602,45604,45606,45608],{"class":188,"line":34737},[186,45601,34740],{"class":202},[186,45603,529],{"class":669},[186,45605,34745],{"class":202},[186,45607,2142],{"class":669},[186,45609,34750],{"class":202},[186,45611,45612,45614,45616,45618,45620,45622,45624,45626,45628,45630,45632,45634,45636,45638,45640,45642,45644,45646],{"class":188,"line":34753},[186,45613,33906],{"class":206},[186,45615,832],{"class":202},[186,45617,34760],{"class":532},[186,45619,2504],{"class":206},[186,45621,34765],{"class":669},[186,45623,2553],{"class":206},[186,45625,2154],{"class":532},[186,45627,2504],{"class":206},[186,45629,34765],{"class":669},[186,45631,2553],{"class":206},[186,45633,34778],{"class":532},[186,45635,34781],{"class":202},[186,45637,34784],{"class":669},[186,45639,2515],{"class":206},[186,45641,34789],{"class":202},[186,45643,670],{"class":669},[186,45645,2515],{"class":206},[186,45647,31952],{"class":202},[186,45649,45650],{"class":188,"line":34798},[186,45651,38188],{"class":192},[186,45653,45654],{"class":188,"line":34804},[186,45655,38193],{"class":192},[186,45657,45658,45660,45662],{"class":188,"line":34810},[186,45659,38198],{"class":202},[186,45661,34822],{"class":532},[186,45663,1629],{"class":202},[186,45665,45666],{"class":188,"line":34816},[186,45667,34842],{"class":192},[186,45669,45670,45672,45674,45676,45678,45680],{"class":188,"line":34827},[186,45671,34848],{"class":202},[186,45673,529],{"class":669},[186,45675,34853],{"class":202},[186,45677,34856],{"class":835},[186,45679,529],{"class":669},[186,45681,3018],{"class":202},[186,45683,45684,45686,45688,45690],{"class":188,"line":34833},[186,45685,34866],{"class":532},[186,45687,2467],{"class":202},[186,45689,34871],{"class":206},[186,45691,34874],{"class":202},[186,45693,45694,45696],{"class":188,"line":34839},[186,45695,34880],{"class":532},[186,45697,34883],{"class":202},[186,45699,45700,45702],{"class":188,"line":34845},[186,45701,34889],{"class":532},[186,45703,34892],{"class":202},[186,45705,45706,45708],{"class":188,"line":34863},[186,45707,34898],{"class":532},[186,45709,34901],{"class":202},[186,45711,45712,45714],{"class":188,"line":34877},[186,45713,34907],{"class":532},[186,45715,34910],{"class":202},[186,45717,45718],{"class":188,"line":34886},[186,45719,34916],{"class":202},[186,45721,45722],{"class":188,"line":34895},[186,45723,34922],{"class":192},[186,45725,45726,45728],{"class":188,"line":34904},[186,45727,5556],{"class":669},[186,45729,34930],{"class":202},[186,45731,45732],{"class":188,"line":34913},[186,45733,3867],{"emptyLinePlaceholder":1551},[186,45735,45736],{"class":188,"line":34919},[186,45737,34941],{"class":192},[186,45739,45740,45742,45744],{"class":188,"line":34925},[186,45741,33402],{"class":669},[186,45743,34949],{"class":198},[186,45745,34952],{"class":202},[186,45747,45748],{"class":188,"line":34933},[186,45749,34958],{"class":192},[186,45751,45752,45754,45756,45758,45760,45762,45764,45766],{"class":188,"line":34938},[186,45753,34964],{"class":202},[186,45755,33148],{"class":835},[186,45757,529],{"class":669},[186,45759,832],{"class":202},[186,45761,2108],{"class":206},[186,45763,1988],{"class":202},[186,45765,1904],{"class":206},[186,45767,31952],{"class":202},[186,45769,45770],{"class":188,"line":34944},[186,45771,34984],{"class":192},[186,45773,45774],{"class":188,"line":34955},[186,45775,34990],{"class":192},[186,45777,45778],{"class":188,"line":34961},[186,45779,34996],{"class":192},[186,45781,45782,45784,45786,45788,45790,45792,45794],{"class":188,"line":34981},[186,45783,33182],{"class":202},[186,45785,1829],{"class":206},[186,45787,1988],{"class":202},[186,45789,1697],{"class":206},[186,45791,1988],{"class":202},[186,45793,1829],{"class":206},[186,45795,1629],{"class":202},[186,45797,45798],{"class":188,"line":34987},[186,45799,35019],{"class":192},[186,45801,45802],{"class":188,"line":34993},[186,45803,35025],{"class":192},[186,45805,45806],{"class":188,"line":34999},[186,45807,35031],{"class":192},[186,45809,45810],{"class":188,"line":35016},[186,45811,35037],{"class":192},[186,45813,45814],{"class":188,"line":35022},[186,45815,35043],{"class":192},[186,45817,45818,45820,45822,45824,45826,45828,45830,45832,45834],{"class":188,"line":35028},[186,45819,35049],{"class":202},[186,45821,35052],{"class":532},[186,45823,35055],{"class":202},[186,45825,35058],{"class":532},[186,45827,1988],{"class":202},[186,45829,35063],{"class":835},[186,45831,529],{"class":669},[186,45833,35068],{"class":532},[186,45835,1629],{"class":202},[186,45837,45838,45840,45842,45844,45846,45848,45850,45852,45854],{"class":188,"line":35034},[186,45839,35049],{"class":202},[186,45841,35052],{"class":532},[186,45843,35080],{"class":202},[186,45845,35083],{"class":532},[186,45847,1988],{"class":202},[186,45849,35063],{"class":835},[186,45851,529],{"class":669},[186,45853,35092],{"class":532},[186,45855,1629],{"class":202},[186,45857,45858],{"class":188,"line":35040},[186,45859,35100],{"class":192},[186,45861,45862],{"class":188,"line":35046},[186,45863,35106],{"class":202},[186,45865,45866],{"class":188,"line":35073},[186,45867,35112],{"class":192},[186,45869,45870,45872,45874],{"class":188,"line":35097},[186,45871,35118],{"class":202},[186,45873,35121],{"class":532},[186,45875,1629],{"class":202},[186,45877,45878,45880,45882],{"class":188,"line":35103},[186,45879,35129],{"class":202},[186,45881,35132],{"class":532},[186,45883,1629],{"class":202},[186,45885,45886],{"class":188,"line":35109},[186,45887,35140],{"class":192},[186,45889,45890,45892,45894,45896,45898,45900,45902],{"class":188,"line":35115},[186,45891,33182],{"class":202},[186,45893,1829],{"class":206},[186,45895,1988],{"class":202},[186,45897,1697],{"class":206},[186,45899,1988],{"class":202},[186,45901,1697],{"class":206},[186,45903,1629],{"class":202},[186,45905,45906,45908,45910,45912,45914,45916,45918,45920,45922],{"class":188,"line":35126},[186,45907,35049],{"class":202},[186,45909,35052],{"class":532},[186,45911,35167],{"class":202},[186,45913,35058],{"class":532},[186,45915,1988],{"class":202},[186,45917,35063],{"class":835},[186,45919,529],{"class":669},[186,45921,35178],{"class":532},[186,45923,1629],{"class":202},[186,45925,45926,45928,45930,45932,45934,45936,45938,45940,45942],{"class":188,"line":35137},[186,45927,35049],{"class":202},[186,45929,35052],{"class":532},[186,45931,35190],{"class":202},[186,45933,35083],{"class":532},[186,45935,1988],{"class":202},[186,45937,35063],{"class":835},[186,45939,529],{"class":669},[186,45941,35201],{"class":532},[186,45943,1629],{"class":202},[186,45945,45946],{"class":188,"line":35143},[186,45947,35209],{"class":192},[186,45949,45950],{"class":188,"line":35160},[186,45951,35106],{"class":202},[186,45953,45954,45956,45958],{"class":188,"line":35183},[186,45955,35118],{"class":202},[186,45957,35052],{"class":532},[186,45959,1629],{"class":202},[186,45961,45962,45964,45966],{"class":188,"line":35206},[186,45963,35129],{"class":202},[186,45965,35231],{"class":532},[186,45967,1629],{"class":202},[186,45969,45970],{"class":188,"line":35212},[186,45971,35239],{"class":202},[186,45973,45974],{"class":188,"line":35217},[186,45975,3867],{"emptyLinePlaceholder":1551},[186,45977,45978],{"class":188,"line":35226},[186,45979,35250],{"class":192},[186,45981,45982,45984,45986,45988,45990],{"class":188,"line":35236},[186,45983,3003],{"class":669},[186,45985,32675],{"class":206},[186,45987,4415],{"class":669},[186,45989,32680],{"class":532},[186,45991,5205],{"class":202},[186,45993,45994],{"class":188,"line":35242},[186,45995,35269],{"class":192},[186,45997,45998,46001,46003],{"class":188,"line":35247},[186,45999,46000],{"class":202},"    GoogLeNet",[186,46002,529],{"class":669},[186,46004,46005],{"class":202},"GoogLeNet(Inception)\n",[186,46007,46008,46010,46012],{"class":188,"line":35253},[186,46009,35286],{"class":202},[186,46011,529],{"class":669},[186,46013,35291],{"class":202},[186,46015,46016,46018,46020,46023,46025,46027,46029],{"class":188,"line":35266},[186,46017,34848],{"class":202},[186,46019,529],{"class":669},[186,46021,46022],{"class":202},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[186,46024,35304],{"class":835},[186,46026,529],{"class":669},[186,46028,2558],{"class":206},[186,46030,1629],{"class":202},[186,46032,46033],{"class":188,"line":35272},[186,46034,35316],{"class":202},[34,46036,46037],{"start":219},[22,46038,42028],{},[176,46040,46042],{"className":31833,"code":46041,"language":31835,"meta":181,"style":181},"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",[183,46043,46044,46050,46060,46070,46074,46084,46095,46099,46103,46107,46115,46131,46141,46157,46167,46181,46185,46195,46205,46215,46221,46225,46229,46237,46241,46257,46265,46269,46273,46281,46289,46293,46297,46301,46305,46311,46315,46325,46333,46341,46345,46349,46353,46361,46365,46381,46385,46389,46393,46405,46409,46421,46425,46429,46441,46445,46455,46459,46463,46475,46479,46487,46491,46495,46503,46507,46515,46519,46523,46527,46531,46535,46551,46559,46563,46567,46615,46621,46625,46635,46643,46651,46655,46659,46663,46667,46675,46679,46695,46699,46707,46715],{"__ignoreMap":181},[186,46045,46046,46048],{"class":188,"line":189},[186,46047,31847],{"class":669},[186,46049,31850],{"class":202},[186,46051,46052,46054,46056,46058],{"class":188,"line":49},[186,46053,31847],{"class":669},[186,46055,32870],{"class":202},[186,46057,32838],{"class":669},[186,46059,32875],{"class":202},[186,46061,46062,46064,46066,46068],{"class":188,"line":219},[186,46063,32192],{"class":669},[186,46065,32853],{"class":202},[186,46067,31847],{"class":669},[186,46069,32858],{"class":202},[186,46071,46072],{"class":188,"line":225},[186,46073,35377],{"class":192},[186,46075,46076,46078,46080,46082],{"class":188,"line":242},[186,46077,32192],{"class":669},[186,46079,32823],{"class":202},[186,46081,31847],{"class":669},[186,46083,32828],{"class":202},[186,46085,46086,46088,46090,46092],{"class":188,"line":248},[186,46087,32192],{"class":669},[186,46089,33369],{"class":202},[186,46091,31847],{"class":669},[186,46093,46094],{"class":202}," GoogLeNet,Inception\n",[186,46096,46097],{"class":188,"line":265},[186,46098,3867],{"emptyLinePlaceholder":1551},[186,46100,46101],{"class":188,"line":271},[186,46102,3867],{"emptyLinePlaceholder":1551},[186,46104,46105],{"class":188,"line":288},[186,46106,35406],{"class":192},[186,46108,46109,46111,46113],{"class":188,"line":294},[186,46110,33402],{"class":669},[186,46112,35413],{"class":198},[186,46114,33408],{"class":202},[186,46116,46117,46119,46121,46123,46125,46127,46129],{"class":188,"line":1212},[186,46118,35420],{"class":202},[186,46120,529],{"class":669},[186,46122,32910],{"class":202},[186,46124,32913],{"class":835},[186,46126,529],{"class":669},[186,46128,32918],{"class":532},[186,46130,32921],{"class":202},[186,46132,46133,46135,46137,46139],{"class":188,"line":1223},[186,46134,35437],{"class":835},[186,46136,529],{"class":669},[186,46138,35442],{"class":206},[186,46140,32921],{"class":202},[186,46142,46143,46145,46147,46149,46151,46153,46155],{"class":188,"line":1236},[186,46144,35449],{"class":835},[186,46146,529],{"class":669},[186,46148,32948],{"class":202},[186,46150,32951],{"class":835},[186,46152,529],{"class":669},[186,46154,36904],{"class":206},[186,46156,32959],{"class":202},[186,46158,46159,46161,46163,46165],{"class":188,"line":3096},[186,46160,35466],{"class":835},[186,46162,529],{"class":669},[186,46164,32931],{"class":206},[186,46166,1629],{"class":202},[186,46168,46169,46171,46173,46175,46177,46179],{"class":188,"line":3110},[186,46170,35477],{"class":202},[186,46172,529],{"class":669},[186,46174,32989],{"class":202},[186,46176,32992],{"class":835},[186,46178,529],{"class":669},[186,46180,35488],{"class":202},[186,46182,46183],{"class":188,"line":3115},[186,46184,35493],{"class":192},[186,46186,46187,46189,46191,46193],{"class":188,"line":3121},[186,46188,35498],{"class":835},[186,46190,529],{"class":669},[186,46192,1829],{"class":206},[186,46194,32921],{"class":202},[186,46196,46197,46199,46201,46203],{"class":188,"line":3142},[186,46198,35509],{"class":835},[186,46200,529],{"class":669},[186,46202,32931],{"class":206},[186,46204,32921],{"class":202},[186,46206,46207,46209,46211,46213],{"class":188,"line":3147},[186,46208,35520],{"class":835},[186,46210,529],{"class":669},[186,46212,1803],{"class":206},[186,46214,1629],{"class":202},[186,46216,46217,46219],{"class":188,"line":3161},[186,46218,5556],{"class":669},[186,46220,35533],{"class":202},[186,46222,46223],{"class":188,"line":3166},[186,46224,3867],{"emptyLinePlaceholder":1551},[186,46226,46227],{"class":188,"line":3195},[186,46228,35542],{"class":192},[186,46230,46231,46233,46235],{"class":188,"line":3200},[186,46232,33402],{"class":669},[186,46234,35549],{"class":198},[186,46236,35552],{"class":202},[186,46238,46239],{"class":188,"line":3217},[186,46240,35557],{"class":192},[186,46242,46243,46245,46247,46249,46251,46253,46255],{"class":188,"line":3222},[186,46244,32692],{"class":202},[186,46246,529],{"class":669},[186,46248,32699],{"class":532},[186,46250,3172],{"class":669},[186,46252,32704],{"class":202},[186,46254,3169],{"class":669},[186,46256,35574],{"class":532},[186,46258,46259,46261,46263],{"class":188,"line":3227},[186,46260,32744],{"class":202},[186,46262,529],{"class":669},[186,46264,33744],{"class":202},[186,46266,46267],{"class":188,"line":3232},[186,46268,3867],{"emptyLinePlaceholder":1551},[186,46270,46271],{"class":188,"line":3246},[186,46272,35591],{"class":192},[186,46274,46275,46277,46279],{"class":188,"line":3251},[186,46276,35596],{"class":202},[186,46278,529],{"class":669},[186,46280,33797],{"class":206},[186,46282,46283,46285,46287],{"class":188,"line":4044},[186,46284,35605],{"class":202},[186,46286,529],{"class":669},[186,46288,4551],{"class":206},[186,46290,46291],{"class":188,"line":4058},[186,46292,3867],{"emptyLinePlaceholder":1551},[186,46294,46295],{"class":188,"line":4066},[186,46296,35618],{"class":192},[186,46298,46299],{"class":188,"line":4071},[186,46300,35623],{"class":192},[186,46302,46303],{"class":188,"line":4077},[186,46304,35628],{"class":192},[186,46306,46307,46309],{"class":188,"line":4083},[186,46308,35633],{"class":669},[186,46310,34339],{"class":202},[186,46312,46313],{"class":188,"line":4088},[186,46314,35640],{"class":192},[186,46316,46317,46319,46321,46323],{"class":188,"line":9411},[186,46318,4869],{"class":669},[186,46320,35647],{"class":202},[186,46322,27500],{"class":669},[186,46324,35652],{"class":202},[186,46326,46327,46329,46331],{"class":188,"line":9435},[186,46328,35657],{"class":202},[186,46330,529],{"class":669},[186,46332,35662],{"class":202},[186,46334,46335,46337,46339],{"class":188,"line":9440},[186,46336,35667],{"class":202},[186,46338,529],{"class":669},[186,46340,35672],{"class":202},[186,46342,46343],{"class":188,"line":9446},[186,46344,35677],{"class":192},[186,46346,46347],{"class":188,"line":9473},[186,46348,34330],{"class":202},[186,46350,46351],{"class":188,"line":9478},[186,46352,35686],{"class":192},[186,46354,46355,46357,46359],{"class":188,"line":9484},[186,46356,34115],{"class":202},[186,46358,529],{"class":669},[186,46360,35695],{"class":202},[186,46362,46363],{"class":188,"line":9496},[186,46364,35700],{"class":192},[186,46366,46367,46369,46371,46373,46375,46377,46379],{"class":188,"line":9508},[186,46368,34132],{"class":202},[186,46370,529],{"class":669},[186,46372,34137],{"class":202},[186,46374,34140],{"class":835},[186,46376,529],{"class":669},[186,46378,1829],{"class":206},[186,46380,1629],{"class":202},[186,46382,46383],{"class":188,"line":9520},[186,46384,35721],{"class":192},[186,46386,46387],{"class":188,"line":11179},[186,46388,35726],{"class":192},[186,46390,46391],{"class":188,"line":11204},[186,46392,35731],{"class":192},[186,46394,46395,46397,46399,46401,46403],{"class":188,"line":11227},[186,46396,35736],{"class":202},[186,46398,10940],{"class":669},[186,46400,34242],{"class":202},[186,46402,4415],{"class":669},[186,46404,35745],{"class":202},[186,46406,46407],{"class":188,"line":11251},[186,46408,35750],{"class":192},[186,46410,46411,46413,46415,46417,46419],{"class":188,"line":11256},[186,46412,35755],{"class":202},[186,46414,10940],{"class":669},[186,46416,35760],{"class":202},[186,46418,1803],{"class":206},[186,46420,1629],{"class":202},[186,46422,46423],{"class":188,"line":11261},[186,46424,3867],{"emptyLinePlaceholder":1551},[186,46426,46427],{"class":188,"line":11266},[186,46428,35773],{"class":192},[186,46430,46431,46433,46435,46437,46439],{"class":188,"line":11275},[186,46432,35778],{"class":202},[186,46434,529],{"class":669},[186,46436,35783],{"class":202},[186,46438,2194],{"class":669},[186,46440,35788],{"class":202},[186,46442,46443],{"class":188,"line":11280},[186,46444,35793],{"class":192},[186,46446,46447,46449,46451,46453],{"class":188,"line":11286},[186,46448,33906],{"class":206},[186,46450,832],{"class":202},[186,46452,35802],{"class":532},[186,46454,35805],{"class":202},[186,46456,46457],{"class":188,"line":11307},[186,46458,3867],{"emptyLinePlaceholder":1551},[186,46460,46461],{"class":188,"line":11313},[186,46462,35814],{"class":192},[186,46464,46465,46467,46469,46471,46473],{"class":188,"line":11327},[186,46466,3003],{"class":669},[186,46468,32675],{"class":206},[186,46470,4415],{"class":669},[186,46472,32680],{"class":532},[186,46474,5205],{"class":202},[186,46476,46477],{"class":188,"line":11333},[186,46478,35831],{"class":192},[186,46480,46481,46483,46485],{"class":188,"line":11360},[186,46482,32744],{"class":202},[186,46484,529],{"class":669},[186,46486,46005],{"class":202},[186,46488,46489],{"class":188,"line":11369},[186,46490,35844],{"class":192},[186,46492,46493],{"class":188,"line":11375},[186,46494,35849],{"class":192},[186,46496,46497,46499,46501],{"class":188,"line":11383},[186,46498,35854],{"class":202},[186,46500,35857],{"class":532},[186,46502,31952],{"class":202},[186,46504,46505],{"class":188,"line":11388},[186,46506,35864],{"class":192},[186,46508,46509,46511,46513],{"class":188,"line":18065},[186,46510,35477],{"class":202},[186,46512,529],{"class":669},[186,46514,35873],{"class":202},[186,46516,46517],{"class":188,"line":18071},[186,46518,35878],{"class":192},[186,46520,46521],{"class":188,"line":18094},[186,46522,35883],{"class":202},[186,46524,46525],{"class":188,"line":18100},[186,46526,3867],{"emptyLinePlaceholder":1551},[186,46528,46529],{"class":188,"line":18123},[186,46530,35892],{"class":192},[186,46532,46533],{"class":188,"line":18137},[186,46534,35897],{"class":192},[186,46536,46537,46539,46541,46543,46545,46547,46549],{"class":188,"line":18157},[186,46538,32692],{"class":202},[186,46540,529],{"class":669},[186,46542,32699],{"class":532},[186,46544,3172],{"class":669},[186,46546,32704],{"class":202},[186,46548,3169],{"class":669},[186,46550,35574],{"class":532},[186,46552,46553,46555,46557],{"class":188,"line":18163},[186,46554,32744],{"class":202},[186,46556,529],{"class":669},[186,46558,33744],{"class":202},[186,46560,46561],{"class":188,"line":18174},[186,46562,35926],{"class":192},[186,46564,46565],{"class":188,"line":18197},[186,46566,35931],{"class":192},[186,46568,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613],{"class":188,"line":18219},[186,46570,35936],{"class":202},[186,46572,529],{"class":669},[186,46574,2498],{"class":202},[186,46576,35943],{"class":532},[186,46578,1988],{"class":202},[186,46580,35948],{"class":532},[186,46582,1988],{"class":202},[186,46584,35953],{"class":532},[186,46586,1988],{"class":202},[186,46588,35958],{"class":532},[186,46590,1988],{"class":202},[186,46592,35963],{"class":532},[186,46594,1988],{"class":202},[186,46596,35968],{"class":532},[186,46598,1988],{"class":202},[186,46600,35973],{"class":532},[186,46602,1988],{"class":202},[186,46604,35978],{"class":532},[186,46606,1988],{"class":202},[186,46608,35983],{"class":532},[186,46610,1988],{"class":202},[186,46612,35988],{"class":532},[186,46614,34701],{"class":202},[186,46616,46617,46619],{"class":188,"line":18224},[186,46618,35633],{"class":669},[186,46620,34339],{"class":202},[186,46622,46623],{"class":188,"line":18230},[186,46624,36001],{"class":192},[186,46626,46627,46629,46631,46633],{"class":188,"line":18244},[186,46628,4869],{"class":669},[186,46630,36008],{"class":202},[186,46632,27500],{"class":669},[186,46634,35652],{"class":202},[186,46636,46637,46639,46641],{"class":188,"line":18257},[186,46638,34065],{"class":202},[186,46640,529],{"class":669},[186,46642,34070],{"class":202},[186,46644,46645,46647,46649],{"class":188,"line":18262},[186,46646,34080],{"class":202},[186,46648,529],{"class":669},[186,46650,34085],{"class":202},[186,46652,46653],{"class":188,"line":18276},[186,46654,3867],{"emptyLinePlaceholder":1551},[186,46656,46657],{"class":188,"line":18281},[186,46658,36037],{"class":192},[186,46660,46661],{"class":188,"line":18287},[186,46662,34330],{"class":202},[186,46664,46665],{"class":188,"line":18292},[186,46666,36046],{"class":192},[186,46668,46669,46671,46673],{"class":188,"line":18306},[186,46670,34115],{"class":202},[186,46672,529],{"class":669},[186,46674,34120],{"class":202},[186,46676,46677],{"class":188,"line":18311},[186,46678,36059],{"class":192},[186,46680,46681,46683,46685,46687,46689,46691,46693],{"class":188,"line":18316},[186,46682,34132],{"class":202},[186,46684,529],{"class":669},[186,46686,34137],{"class":202},[186,46688,34140],{"class":835},[186,46690,529],{"class":669},[186,46692,1829],{"class":206},[186,46694,1629],{"class":202},[186,46696,46697],{"class":188,"line":18330},[186,46698,36080],{"class":192},[186,46700,46701,46703,46705],{"class":188,"line":18342},[186,46702,36085],{"class":202},[186,46704,529],{"class":669},[186,46706,36090],{"class":202},[186,46708,46709,46711,46713],{"class":188,"line":18347},[186,46710,36095],{"class":202},[186,46712,529],{"class":669},[186,46714,36100],{"class":202},[186,46716,46717,46719,46721,46723,46725,46727,46729,46731],{"class":188,"line":18360},[186,46718,36105],{"class":206},[186,46720,832],{"class":202},[186,46722,36110],{"class":532},[186,46724,36113],{"class":202},[186,46726,36116],{"class":532},[186,46728,1988],{"class":202},[186,46730,36121],{"class":532},[186,46732,36124],{"class":202},[29,46734,46736],{"id":46735},"_24训练自己的数据集","2.4.训练自己的数据集",[169,46738,46739],{},"猫狗分类任务",[169,46741,46742],{},"划分数据集和验证集",[176,46744,46746],{"className":31833,"code":46745,"language":31835,"meta":181,"style":181},"# 创建脚本，用于划分数据集和验证集\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",[183,46747,46748,46753,46760,46765,46776,46783,46787,46797,46811,46820,46824,46829,46839,46859,46863,46868,46878,46889,46902,46906,46911,46920,46930,46941,46945,46950,46960,46964,46969,46974,46979,46984,46989,46993,47003,47030,47043,47055,47082,47087,47092,47106,47111,47123,47138,47153,47161,47165,47170,47176,47188,47201,47206,47211,47216,47266,47272,47276],{"__ignoreMap":181},[186,46749,46750],{"class":188,"line":189},[186,46751,46752],{"class":192},"# 创建脚本，用于划分数据集和验证集\n",[186,46754,46755,46757],{"class":188,"line":49},[186,46756,31847],{"class":669},[186,46758,46759],{"class":202}," os\n",[186,46761,46762],{"class":188,"line":219},[186,46763,46764],{"class":192},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[186,46766,46767,46769,46772,46774],{"class":188,"line":225},[186,46768,32192],{"class":669},[186,46770,46771],{"class":202}," shutil ",[186,46773,31847],{"class":669},[186,46775,33277],{"class":202},[186,46777,46778,46780],{"class":188,"line":242},[186,46779,31847],{"class":669},[186,46781,46782],{"class":202}," random\n",[186,46784,46785],{"class":188,"line":248},[186,46786,3867],{"emptyLinePlaceholder":1551},[186,46788,46789,46791,46794],{"class":188,"line":265},[186,46790,33402],{"class":669},[186,46792,46793],{"class":198}," mkfile",[186,46795,46796],{"class":202},"(file):\n",[186,46798,46799,46801,46803,46806,46809],{"class":188,"line":271},[186,46800,4567],{"class":669},[186,46802,40384],{"class":669},[186,46804,46805],{"class":202}," os.path.exists(",[186,46807,46808],{"class":835},"file",[186,46810,32241],{"class":202},[186,46812,46813,46816,46818],{"class":188,"line":288},[186,46814,46815],{"class":202},"        os.makedirs(",[186,46817,46808],{"class":835},[186,46819,1629],{"class":202},[186,46821,46822],{"class":188,"line":294},[186,46823,3867],{"emptyLinePlaceholder":1551},[186,46825,46826],{"class":188,"line":1212},[186,46827,46828],{"class":192},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[186,46830,46831,46834,46836],{"class":188,"line":1223},[186,46832,46833],{"class":202},"file_path",[186,46835,529],{"class":669},[186,46837,46838],{"class":532},"'data_cat_dog'\n",[186,46840,46841,46844,46846,46849,46851,46854,46856],{"class":188,"line":1236},[186,46842,46843],{"class":202},"flower_class",[186,46845,529],{"class":669},[186,46847,46848],{"class":202},"[cla ",[186,46850,4491],{"class":669},[186,46852,46853],{"class":202}," cla ",[186,46855,27500],{"class":669},[186,46857,46858],{"class":202}," os.listdir(file_path)]\n",[186,46860,46861],{"class":188,"line":3096},[186,46862,3867],{"emptyLinePlaceholder":1551},[186,46864,46865],{"class":188,"line":3110},[186,46866,46867],{"class":192},"# 创建训练集train文件夹\n",[186,46869,46870,46873,46876],{"class":188,"line":3115},[186,46871,46872],{"class":202},"mkfile(",[186,46874,46875],{"class":532},"'data\u002Ftrain'",[186,46877,1629],{"class":202},[186,46879,46880,46882,46884,46886],{"class":188,"line":3121},[186,46881,4491],{"class":669},[186,46883,46853],{"class":202},[186,46885,27500],{"class":669},[186,46887,46888],{"class":202}," flower_class:\n",[186,46890,46891,46894,46897,46899],{"class":188,"line":3142},[186,46892,46893],{"class":202},"    mkfile(",[186,46895,46896],{"class":532},"'data\u002Ftrain\u002F'",[186,46898,2091],{"class":669},[186,46900,46901],{"class":202},"cla)\n",[186,46903,46904],{"class":188,"line":3147},[186,46905,3867],{"emptyLinePlaceholder":1551},[186,46907,46908],{"class":188,"line":3161},[186,46909,46910],{"class":192},"# 创建验证集val文件夹\n",[186,46912,46913,46915,46918],{"class":188,"line":3166},[186,46914,46872],{"class":202},[186,46916,46917],{"class":532},"'data\u002Ftest'",[186,46919,1629],{"class":202},[186,46921,46922,46924,46926,46928],{"class":188,"line":3195},[186,46923,4491],{"class":669},[186,46925,46853],{"class":202},[186,46927,27500],{"class":669},[186,46929,46888],{"class":202},[186,46931,46932,46934,46937,46939],{"class":188,"line":3200},[186,46933,46893],{"class":202},[186,46935,46936],{"class":532},"'data\u002Ftest\u002F'",[186,46938,2091],{"class":669},[186,46940,46901],{"class":202},[186,46942,46943],{"class":188,"line":3217},[186,46944,3867],{"emptyLinePlaceholder":1551},[186,46946,46947],{"class":188,"line":3222},[186,46948,46949],{"class":192},"# 划分比例，训练集：测试集=9：1\n",[186,46951,46952,46955,46957],{"class":188,"line":3227},[186,46953,46954],{"class":202},"split_rate",[186,46956,529],{"class":669},[186,46958,46959],{"class":206},"0.1\n",[186,46961,46962],{"class":188,"line":3232},[186,46963,3867],{"emptyLinePlaceholder":1551},[186,46965,46966],{"class":188,"line":3246},[186,46967,46968],{"class":192},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[186,46970,46971],{"class":188,"line":3251},[186,46972,46973],{"class":192},"# cla_path：当前类别的原始图片路径\n",[186,46975,46976],{"class":188,"line":4044},[186,46977,46978],{"class":192},"# images：当前类别下所有图片的文件名列表\n",[186,46980,46981],{"class":188,"line":4058},[186,46982,46983],{"class":192},"# num：该类别图片总数\n",[186,46985,46986],{"class":188,"line":4066},[186,46987,46988],{"class":192},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[186,46990,46991],{"class":188,"line":4071},[186,46992,3867],{"emptyLinePlaceholder":1551},[186,46994,46995,46997,46999,47001],{"class":188,"line":4077},[186,46996,4491],{"class":669},[186,46998,46853],{"class":202},[186,47000,27500],{"class":669},[186,47002,46888],{"class":202},[186,47004,47005,47008,47010,47013,47015,47018,47021,47023,47025,47027],{"class":188,"line":4083},[186,47006,47007],{"class":202},"    cla_path ",[186,47009,529],{"class":669},[186,47011,47012],{"class":202}," file_path ",[186,47014,2091],{"class":669},[186,47016,47017],{"class":532}," '\u002F'",[186,47019,47020],{"class":669}," +",[186,47022,46853],{"class":202},[186,47024,2091],{"class":669},[186,47026,47017],{"class":532},[186,47028,47029],{"class":192},"  # 某一类别的子目录\n",[186,47031,47032,47035,47037,47040],{"class":188,"line":4088},[186,47033,47034],{"class":202},"    images ",[186,47036,529],{"class":669},[186,47038,47039],{"class":202}," os.listdir(cla_path)  ",[186,47041,47042],{"class":192},"# iamges 列表存储了该目录下所有图像的名称\n",[186,47044,47045,47048,47050,47052],{"class":188,"line":9411},[186,47046,47047],{"class":202},"    num ",[186,47049,529],{"class":669},[186,47051,8794],{"class":206},[186,47053,47054],{"class":202},"(images)\n",[186,47056,47057,47060,47062,47065,47067,47069,47071,47074,47076,47079],{"class":188,"line":9435},[186,47058,47059],{"class":202},"    eval_index ",[186,47061,529],{"class":669},[186,47063,47064],{"class":202}," random.sample(images, ",[186,47066,2103],{"class":835},[186,47068,529],{"class":669},[186,47070,1626],{"class":206},[186,47072,47073],{"class":202},"(num ",[186,47075,2065],{"class":669},[186,47077,47078],{"class":202}," split_rate))  ",[186,47080,47081],{"class":192},"# 从images列表中随机抽取 k 个图像名称\n",[186,47083,47084],{"class":188,"line":9440},[186,47085,47086],{"class":192},"    # 遍历该类别下的所有图片\n",[186,47088,47089],{"class":188,"line":9446},[186,47090,47091],{"class":192},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[186,47093,47094,47096,47099,47101,47103],{"class":188,"line":9473},[186,47095,4667],{"class":669},[186,47097,47098],{"class":202}," index, image ",[186,47100,27500],{"class":669},[186,47102,33061],{"class":206},[186,47104,47105],{"class":202},"(images):\n",[186,47107,47108],{"class":188,"line":9478},[186,47109,47110],{"class":192},"        # eval_index 中保存验证集val的图像名称\n",[186,47112,47113,47115,47118,47120],{"class":188,"line":9484},[186,47114,3964],{"class":669},[186,47116,47117],{"class":202}," image ",[186,47119,27500],{"class":669},[186,47121,47122],{"class":202}," eval_index:\n",[186,47124,47125,47128,47130,47133,47135],{"class":188,"line":9496},[186,47126,47127],{"class":202},"            image_path ",[186,47129,529],{"class":669},[186,47131,47132],{"class":202}," cla_path ",[186,47134,2091],{"class":669},[186,47136,47137],{"class":202}," image\n",[186,47139,47140,47143,47145,47148,47150],{"class":188,"line":9508},[186,47141,47142],{"class":202},"            new_path ",[186,47144,529],{"class":669},[186,47146,47147],{"class":532}," 'data\u002Ftest\u002F'",[186,47149,47020],{"class":669},[186,47151,47152],{"class":202}," cla\n",[186,47154,47155,47158],{"class":188,"line":9520},[186,47156,47157],{"class":202},"            copy(image_path, new_path)  ",[186,47159,47160],{"class":192},"# 将选中的图像复制到新路径\n",[186,47162,47163],{"class":188,"line":11179},[186,47164,3867],{"emptyLinePlaceholder":1551},[186,47166,47167],{"class":188,"line":11204},[186,47168,47169],{"class":192},"        # 其余的图像保存在训练集train中\n",[186,47171,47172,47174],{"class":188,"line":11227},[186,47173,4001],{"class":669},[186,47175,5205],{"class":202},[186,47177,47178,47180,47182,47184,47186],{"class":188,"line":11251},[186,47179,47127],{"class":202},[186,47181,529],{"class":669},[186,47183,47132],{"class":202},[186,47185,2091],{"class":669},[186,47187,47137],{"class":202},[186,47189,47190,47192,47194,47197,47199],{"class":188,"line":11256},[186,47191,47142],{"class":202},[186,47193,529],{"class":669},[186,47195,47196],{"class":532}," 'data\u002Ftrain\u002F'",[186,47198,47020],{"class":669},[186,47200,47152],{"class":202},[186,47202,47203],{"class":188,"line":11261},[186,47204,47205],{"class":202},"            copy(image_path, new_path)\n",[186,47207,47208],{"class":188,"line":11266},[186,47209,47210],{"class":192},"            # 打印进度条信息\n",[186,47212,47213],{"class":188,"line":11275},[186,47214,47215],{"class":192},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[186,47217,47218,47220,47222,47224,47227,47229,47231,47234,47236,47238,47240,47243,47246,47248,47250,47253,47256,47258,47260,47263],{"class":188,"line":11280},[186,47219,33906],{"class":206},[186,47221,832],{"class":202},[186,47223,1862],{"class":532},[186,47225,47226],{"class":206},"\\r",[186,47228,2498],{"class":532},[186,47230,33914],{"class":206},[186,47232,47233],{"class":532},"] processing [",[186,47235,33914],{"class":206},[186,47237,2194],{"class":532},[186,47239,33914],{"class":206},[186,47241,47242],{"class":532},"]\"",[186,47244,47245],{"class":202},".format(cla, index ",[186,47247,2091],{"class":669},[186,47249,26577],{"class":206},[186,47251,47252],{"class":202},", num), ",[186,47254,47255],{"class":835},"end",[186,47257,529],{"class":669},[186,47259,9115],{"class":532},[186,47261,47262],{"class":202},")  ",[186,47264,47265],{"class":192},"# processing bar\n",[186,47267,47268,47270],{"class":188,"line":11286},[186,47269,32754],{"class":206},[186,47271,3443],{"class":202},[186,47273,47274],{"class":188,"line":11307},[186,47275,3867],{"emptyLinePlaceholder":1551},[186,47277,47278,47280,47282,47285],{"class":188,"line":11313},[186,47279,31870],{"class":206},[186,47281,832],{"class":202},[186,47283,47284],{"class":532},"\"processing done!\"",[186,47286,1629],{"class":202},[169,47288,47289],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23459,47291,47293],{"id":47292},"_242模型代码","2.4.2.模型代码",[169,47295,47296],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[176,47298,47300],{"className":31833,"code":47299,"language":31835,"meta":181,"style":181},"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",[183,47301,47302,47308,47318,47328,47332,47348,47356,47370,47380,47384,47414,47418,47452,47498,47502,47536,47582,47586,47590,47624,47654,47658,47666,47680,47702,47724,47742,47746,47760,47764,47768,47784,47788,47796,47810,47820,47864,47868,47896,47900,47910,47938,47942,47978,47982,48010,48014,48024,48056,48088,48116,48120,48130,48162,48194,48226,48258,48290,48318,48322,48332,48364,48396,48408,48412,48424,48428,48432,48444,48452,48472,48476,48480,48484,48488,48492,48496,48510,48518,48526,48538,48552,48560,48564,48572,48582,48592,48602,48612,48622,48628,48632,48636,48648,48668,48676],{"__ignoreMap":181},[186,47303,47304,47306],{"class":188,"line":189},[186,47305,31847],{"class":669},[186,47307,31850],{"class":202},[186,47309,47310,47312,47314,47316],{"class":188,"line":49},[186,47311,32192],{"class":669},[186,47313,32195],{"class":202},[186,47315,31847],{"class":669},[186,47317,32200],{"class":202},[186,47319,47320,47322,47324,47326],{"class":188,"line":219},[186,47321,32192],{"class":669},[186,47323,32212],{"class":202},[186,47325,31847],{"class":669},[186,47327,32217],{"class":202},[186,47329,47330],{"class":188,"line":225},[186,47331,3867],{"emptyLinePlaceholder":1551},[186,47333,47334,47336,47338,47340,47342,47344,47346],{"class":188,"line":242},[186,47335,16156],{"class":669},[186,47337,42947],{"class":198},[186,47339,832],{"class":202},[186,47341,32233],{"class":198},[186,47343,2168],{"class":202},[186,47345,32238],{"class":198},[186,47347,32241],{"class":202},[186,47349,47350,47352,47354],{"class":188,"line":248},[186,47351,32256],{"class":669},[186,47353,32259],{"class":206},[186,47355,42966],{"class":202},[186,47357,47358,47360,47362,47364,47366,47368],{"class":188,"line":265},[186,47359,32272],{"class":206},[186,47361,42973],{"class":202},[186,47363,32278],{"class":206},[186,47365,32281],{"class":202},[186,47367,32284],{"class":206},[186,47369,3443],{"class":202},[186,47371,47372,47374,47376,47378],{"class":188,"line":271},[186,47373,32300],{"class":206},[186,47375,36226],{"class":202},[186,47377,529],{"class":669},[186,47379,36231],{"class":202},[186,47381,47382],{"class":188,"line":288},[186,47383,42996],{"class":192},[186,47385,47386,47388,47390,47392,47394,47396,47398,47400,47402,47404,47406,47408,47410,47412],{"class":188,"line":294},[186,47387,32300],{"class":206},[186,47389,43003],{"class":202},[186,47391,529],{"class":669},[186,47393,32308],{"class":202},[186,47395,32311],{"class":835},[186,47397,529],{"class":669},[186,47399,43014],{"class":202},[186,47401,32320],{"class":835},[186,47403,529],{"class":669},[186,47405,43021],{"class":202},[186,47407,32329],{"class":835},[186,47409,529],{"class":669},[186,47411,1829],{"class":206},[186,47413,1629],{"class":202},[186,47415,47416],{"class":188,"line":1212},[186,47417,43034],{"class":192},[186,47419,47420,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446,47448,47450],{"class":188,"line":1223},[186,47421,32300],{"class":206},[186,47423,43041],{"class":202},[186,47425,529],{"class":669},[186,47427,32308],{"class":202},[186,47429,32311],{"class":835},[186,47431,529],{"class":669},[186,47433,43014],{"class":202},[186,47435,32320],{"class":835},[186,47437,529],{"class":669},[186,47439,43058],{"class":202},[186,47441,1803],{"class":206},[186,47443,43063],{"class":202},[186,47445,32329],{"class":835},[186,47447,529],{"class":669},[186,47449,1829],{"class":206},[186,47451,1629],{"class":202},[186,47453,47454,47456,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478,47480,47482,47484,47486,47488,47490,47492,47494,47496],{"class":188,"line":1236},[186,47455,32300],{"class":206},[186,47457,43078],{"class":202},[186,47459,529],{"class":669},[186,47461,32308],{"class":202},[186,47463,32311],{"class":835},[186,47465,529],{"class":669},[186,47467,43058],{"class":202},[186,47469,1803],{"class":206},[186,47471,43063],{"class":202},[186,47473,32320],{"class":835},[186,47475,529],{"class":669},[186,47477,43058],{"class":202},[186,47479,1829],{"class":206},[186,47481,43063],{"class":202},[186,47483,32329],{"class":835},[186,47485,529],{"class":669},[186,47487,1691],{"class":206},[186,47489,1988],{"class":202},[186,47491,32338],{"class":835},[186,47493,529],{"class":669},[186,47495,1829],{"class":206},[186,47497,1629],{"class":202},[186,47499,47500],{"class":188,"line":3096},[186,47501,43123],{"class":192},[186,47503,47504,47506,47508,47510,47512,47514,47516,47518,47520,47522,47524,47526,47528,47530,47532,47534],{"class":188,"line":3110},[186,47505,32300],{"class":206},[186,47507,43130],{"class":202},[186,47509,529],{"class":669},[186,47511,32308],{"class":202},[186,47513,32311],{"class":835},[186,47515,529],{"class":669},[186,47517,43014],{"class":202},[186,47519,32320],{"class":835},[186,47521,529],{"class":669},[186,47523,43147],{"class":202},[186,47525,1803],{"class":206},[186,47527,43063],{"class":202},[186,47529,32329],{"class":835},[186,47531,529],{"class":669},[186,47533,1829],{"class":206},[186,47535,1629],{"class":202},[186,47537,47538,47540,47542,47544,47546,47548,47550,47552,47554,47556,47558,47560,47562,47564,47566,47568,47570,47572,47574,47576,47578,47580],{"class":188,"line":3115},[186,47539,32300],{"class":206},[186,47541,43166],{"class":202},[186,47543,529],{"class":669},[186,47545,32308],{"class":202},[186,47547,32311],{"class":835},[186,47549,529],{"class":669},[186,47551,43147],{"class":202},[186,47553,1803],{"class":206},[186,47555,43063],{"class":202},[186,47557,32320],{"class":835},[186,47559,529],{"class":669},[186,47561,43147],{"class":202},[186,47563,1829],{"class":206},[186,47565,43063],{"class":202},[186,47567,32329],{"class":835},[186,47569,529],{"class":669},[186,47571,1930],{"class":206},[186,47573,1988],{"class":202},[186,47575,32338],{"class":835},[186,47577,529],{"class":669},[186,47579,1697],{"class":206},[186,47581,1629],{"class":202},[186,47583,47584],{"class":188,"line":3121},[186,47585,43211],{"class":192},[186,47587,47588],{"class":188,"line":3142},[186,47589,43216],{"class":192},[186,47591,47592,47594,47596,47598,47600,47602,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622],{"class":188,"line":3147},[186,47593,32300],{"class":206},[186,47595,43223],{"class":202},[186,47597,529],{"class":669},[186,47599,36284],{"class":202},[186,47601,32329],{"class":835},[186,47603,529],{"class":669},[186,47605,1691],{"class":206},[186,47607,1988],{"class":202},[186,47609,32384],{"class":835},[186,47611,529],{"class":669},[186,47613,1829],{"class":206},[186,47615,1988],{"class":202},[186,47617,32338],{"class":835},[186,47619,529],{"class":669},[186,47621,1829],{"class":206},[186,47623,1629],{"class":202},[186,47625,47626,47628,47630,47632,47634,47636,47638,47640,47642,47644,47646,47648,47650,47652],{"class":188,"line":3161},[186,47627,32300],{"class":206},[186,47629,43258],{"class":202},[186,47631,529],{"class":669},[186,47633,32308],{"class":202},[186,47635,32311],{"class":835},[186,47637,529],{"class":669},[186,47639,43014],{"class":202},[186,47641,32320],{"class":835},[186,47643,529],{"class":669},[186,47645,43275],{"class":202},[186,47647,32329],{"class":835},[186,47649,529],{"class":669},[186,47651,1829],{"class":206},[186,47653,1629],{"class":202},[186,47655,47656],{"class":188,"line":3166},[186,47657,3867],{"emptyLinePlaceholder":1551},[186,47659,47660,47662,47664],{"class":188,"line":3195},[186,47661,32256],{"class":669},[186,47663,32548],{"class":198},[186,47665,32551],{"class":202},[186,47667,47668,47670,47672,47674,47676,47678],{"class":188,"line":3200},[186,47669,43300],{"class":202},[186,47671,529],{"class":669},[186,47673,32278],{"class":206},[186,47675,36639],{"class":202},[186,47677,32278],{"class":206},[186,47679,43311],{"class":202},[186,47681,47682,47684,47686,47688,47690,47692,47694,47696,47698,47700],{"class":188,"line":3217},[186,47683,8548],{"class":202},[186,47685,529],{"class":669},[186,47687,32278],{"class":206},[186,47689,36639],{"class":202},[186,47691,32278],{"class":206},[186,47693,43326],{"class":202},[186,47695,32278],{"class":206},[186,47697,36639],{"class":202},[186,47699,32278],{"class":206},[186,47701,43335],{"class":202},[186,47703,47704,47706,47708,47710,47712,47714,47716,47718,47720,47722],{"class":188,"line":3222},[186,47705,43340],{"class":202},[186,47707,529],{"class":669},[186,47709,32278],{"class":206},[186,47711,36639],{"class":202},[186,47713,32278],{"class":206},[186,47715,43351],{"class":202},[186,47717,32278],{"class":206},[186,47719,36639],{"class":202},[186,47721,32278],{"class":206},[186,47723,43360],{"class":202},[186,47725,47726,47728,47730,47732,47734,47736,47738,47740],{"class":188,"line":3227},[186,47727,43365],{"class":202},[186,47729,529],{"class":669},[186,47731,32278],{"class":206},[186,47733,36639],{"class":202},[186,47735,32278],{"class":206},[186,47737,43376],{"class":202},[186,47739,32278],{"class":206},[186,47741,43381],{"class":202},[186,47743,47744],{"class":188,"line":3232},[186,47745,43386],{"class":192},[186,47747,47748,47750,47752,47754,47756,47758],{"class":188,"line":3246},[186,47749,16214],{"class":669},[186,47751,43393],{"class":202},[186,47753,34140],{"class":835},[186,47755,529],{"class":669},[186,47757,1829],{"class":206},[186,47759,1629],{"class":202},[186,47761,47762],{"class":188,"line":3251},[186,47763,3867],{"emptyLinePlaceholder":1551},[186,47765,47766],{"class":188,"line":4044},[186,47767,43414],{"class":192},[186,47769,47770,47772,47774,47776,47778,47780,47782],{"class":188,"line":4058},[186,47771,16156],{"class":669},[186,47773,43421],{"class":198},[186,47775,832],{"class":202},[186,47777,32233],{"class":198},[186,47779,2168],{"class":202},[186,47781,32238],{"class":198},[186,47783,32241],{"class":202},[186,47785,47786],{"class":188,"line":4066},[186,47787,43436],{"class":192},[186,47789,47790,47792,47794],{"class":188,"line":4071},[186,47791,32256],{"class":669},[186,47793,32259],{"class":206},[186,47795,43445],{"class":202},[186,47797,47798,47800,47802,47804,47806,47808],{"class":188,"line":4077},[186,47799,32272],{"class":206},[186,47801,43452],{"class":202},[186,47803,32278],{"class":206},[186,47805,32281],{"class":202},[186,47807,32284],{"class":206},[186,47809,3443],{"class":202},[186,47811,47812,47814,47816,47818],{"class":188,"line":4083},[186,47813,32300],{"class":206},[186,47815,43467],{"class":202},[186,47817,529],{"class":669},[186,47819,39464],{"class":202},[186,47821,47822,47824,47826,47828,47830,47832,47834,47836,47838,47840,47842,47844,47846,47848,47850,47852,47854,47856,47858,47860,47862],{"class":188,"line":4088},[186,47823,39469],{"class":202},[186,47825,32311],{"class":835},[186,47827,529],{"class":669},[186,47829,1691],{"class":206},[186,47831,1988],{"class":202},[186,47833,32320],{"class":835},[186,47835,529],{"class":669},[186,47837,1815],{"class":206},[186,47839,1988],{"class":202},[186,47841,32329],{"class":835},[186,47843,529],{"class":669},[186,47845,1979],{"class":206},[186,47847,1988],{"class":202},[186,47849,32384],{"class":835},[186,47851,529],{"class":669},[186,47853,1697],{"class":206},[186,47855,1988],{"class":202},[186,47857,32338],{"class":835},[186,47859,529],{"class":669},[186,47861,1691],{"class":206},[186,47863,1138],{"class":202},[186,47865,47866],{"class":188,"line":9411},[186,47867,39506],{"class":202},[186,47869,47870,47872,47874,47876,47878,47880,47882,47884,47886,47888,47890,47892,47894],{"class":188,"line":9435},[186,47871,39551],{"class":202},[186,47873,32329],{"class":835},[186,47875,529],{"class":669},[186,47877,1691],{"class":206},[186,47879,1988],{"class":202},[186,47881,32384],{"class":835},[186,47883,529],{"class":669},[186,47885,1697],{"class":206},[186,47887,1988],{"class":202},[186,47889,32338],{"class":835},[186,47891,529],{"class":669},[186,47893,1829],{"class":206},[186,47895,1629],{"class":202},[186,47897,47898],{"class":188,"line":9440},[186,47899,39580],{"class":202},[186,47901,47902,47904,47906,47908],{"class":188,"line":9446},[186,47903,32300],{"class":206},[186,47905,43558],{"class":202},[186,47907,529],{"class":669},[186,47909,39464],{"class":202},[186,47911,47912,47914,47916,47918,47920,47922,47924,47926,47928,47930,47932,47934,47936],{"class":188,"line":9473},[186,47913,39469],{"class":202},[186,47915,32311],{"class":835},[186,47917,529],{"class":669},[186,47919,1815],{"class":206},[186,47921,1988],{"class":202},[186,47923,32320],{"class":835},[186,47925,529],{"class":669},[186,47927,1815],{"class":206},[186,47929,1988],{"class":202},[186,47931,32329],{"class":835},[186,47933,529],{"class":669},[186,47935,1829],{"class":206},[186,47937,1138],{"class":202},[186,47939,47940],{"class":188,"line":9478},[186,47941,39506],{"class":202},[186,47943,47944,47946,47948,47950,47952,47954,47956,47958,47960,47962,47964,47966,47968,47970,47972,47974,47976],{"class":188,"line":9484},[186,47945,39469],{"class":202},[186,47947,32311],{"class":835},[186,47949,529],{"class":669},[186,47951,1815],{"class":206},[186,47953,1988],{"class":202},[186,47955,32320],{"class":835},[186,47957,529],{"class":669},[186,47959,43613],{"class":206},[186,47961,1988],{"class":202},[186,47963,32329],{"class":835},[186,47965,529],{"class":669},[186,47967,1691],{"class":206},[186,47969,1988],{"class":202},[186,47971,32338],{"class":835},[186,47973,529],{"class":669},[186,47975,1829],{"class":206},[186,47977,1138],{"class":202},[186,47979,47980],{"class":188,"line":9496},[186,47981,39506],{"class":202},[186,47983,47984,47986,47988,47990,47992,47994,47996,47998,48000,48002,48004,48006,48008],{"class":188,"line":9508},[186,47985,39551],{"class":202},[186,47987,32329],{"class":835},[186,47989,529],{"class":669},[186,47991,1691],{"class":206},[186,47993,1988],{"class":202},[186,47995,32384],{"class":835},[186,47997,529],{"class":669},[186,47999,1697],{"class":206},[186,48001,1988],{"class":202},[186,48003,32338],{"class":835},[186,48005,529],{"class":669},[186,48007,1829],{"class":206},[186,48009,1629],{"class":202},[186,48011,48012],{"class":188,"line":9520},[186,48013,39580],{"class":202},[186,48015,48016,48018,48020,48022],{"class":188,"line":11179},[186,48017,32300],{"class":206},[186,48019,43674],{"class":202},[186,48021,529],{"class":669},[186,48023,39464],{"class":202},[186,48025,48026,48028,48030,48032,48034,48036,48038,48040,48042,48044,48046,48048,48050,48052,48054],{"class":188,"line":11204},[186,48027,43683],{"class":202},[186,48029,43613],{"class":206},[186,48031,1988],{"class":202},[186,48033,1815],{"class":206},[186,48035,43692],{"class":202},[186,48037,1821],{"class":206},[186,48039,1988],{"class":202},[186,48041,33525],{"class":206},[186,48043,43701],{"class":202},[186,48045,2211],{"class":206},[186,48047,1988],{"class":202},[186,48049,1809],{"class":206},[186,48051,43710],{"class":202},[186,48053,1809],{"class":206},[186,48055,1138],{"class":202},[186,48057,48058,48060,48062,48064,48066,48068,48070,48072,48074,48076,48078,48080,48082,48084,48086],{"class":188,"line":11227},[186,48059,43683],{"class":202},[186,48061,36325],{"class":206},[186,48063,1988],{"class":202},[186,48065,33525],{"class":206},[186,48067,43692],{"class":202},[186,48069,33525],{"class":206},[186,48071,1988],{"class":202},[186,48073,43613],{"class":206},[186,48075,43701],{"class":202},[186,48077,1809],{"class":206},[186,48079,1988],{"class":202},[186,48081,1821],{"class":206},[186,48083,43710],{"class":202},[186,48085,1815],{"class":206},[186,48087,1138],{"class":202},[186,48089,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114],{"class":188,"line":11251},[186,48091,39551],{"class":202},[186,48093,32329],{"class":835},[186,48095,529],{"class":669},[186,48097,1691],{"class":206},[186,48099,1988],{"class":202},[186,48101,32384],{"class":835},[186,48103,529],{"class":669},[186,48105,1697],{"class":206},[186,48107,1988],{"class":202},[186,48109,32338],{"class":835},[186,48111,529],{"class":669},[186,48113,1829],{"class":206},[186,48115,1629],{"class":202},[186,48117,48118],{"class":188,"line":11256},[186,48119,39580],{"class":202},[186,48121,48122,48124,48126,48128],{"class":188,"line":11261},[186,48123,32300],{"class":206},[186,48125,43785],{"class":202},[186,48127,529],{"class":669},[186,48129,39464],{"class":202},[186,48131,48132,48134,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156,48158,48160],{"class":188,"line":11266},[186,48133,43683],{"class":202},[186,48135,43796],{"class":206},[186,48137,1988],{"class":202},[186,48139,43613],{"class":206},[186,48141,43692],{"class":202},[186,48143,1821],{"class":206},[186,48145,1988],{"class":202},[186,48147,43809],{"class":206},[186,48149,43701],{"class":202},[186,48151,2211],{"class":206},[186,48153,1988],{"class":202},[186,48155,2217],{"class":206},[186,48157,43710],{"class":202},[186,48159,1815],{"class":206},[186,48161,1138],{"class":202},[186,48163,48164,48166,48168,48170,48172,48174,48176,48178,48180,48182,48184,48186,48188,48190,48192],{"class":188,"line":11275},[186,48165,43683],{"class":202},[186,48167,39911],{"class":206},[186,48169,1988],{"class":202},[186,48171,22509],{"class":206},[186,48173,43692],{"class":202},[186,48175,2228],{"class":206},[186,48177,1988],{"class":202},[186,48179,32956],{"class":206},[186,48181,43701],{"class":202},[186,48183,2408],{"class":206},[186,48185,1988],{"class":202},[186,48187,1815],{"class":206},[186,48189,43710],{"class":202},[186,48191,1815],{"class":206},[186,48193,1138],{"class":202},[186,48195,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224],{"class":188,"line":11280},[186,48197,43683],{"class":202},[186,48199,39911],{"class":206},[186,48201,1988],{"class":202},[186,48203,33525],{"class":206},[186,48205,43692],{"class":202},[186,48207,33525],{"class":206},[186,48209,1988],{"class":202},[186,48211,36325],{"class":206},[186,48213,43701],{"class":202},[186,48215,2408],{"class":206},[186,48217,1988],{"class":202},[186,48219,1815],{"class":206},[186,48221,43710],{"class":202},[186,48223,1815],{"class":206},[186,48225,1138],{"class":202},[186,48227,48228,48230,48232,48234,48236,48238,48240,48242,48244,48246,48248,48250,48252,48254,48256],{"class":188,"line":11286},[186,48229,43683],{"class":202},[186,48231,39911],{"class":206},[186,48233,1988],{"class":202},[186,48235,2228],{"class":206},[186,48237,43692],{"class":202},[186,48239,33525],{"class":206},[186,48241,1988],{"class":202},[186,48243,43906],{"class":206},[186,48245,43701],{"class":202},[186,48247,1809],{"class":206},[186,48249,1988],{"class":202},[186,48251,1815],{"class":206},[186,48253,43710],{"class":202},[186,48255,1815],{"class":206},[186,48257,1138],{"class":202},[186,48259,48260,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280,48282,48284,48286,48288],{"class":188,"line":11307},[186,48261,43683],{"class":202},[186,48263,43927],{"class":206},[186,48265,1988],{"class":202},[186,48267,36325],{"class":206},[186,48269,43692],{"class":202},[186,48271,22509],{"class":206},[186,48273,1988],{"class":202},[186,48275,43940],{"class":206},[186,48277,43701],{"class":202},[186,48279,1809],{"class":206},[186,48281,1988],{"class":202},[186,48283,33525],{"class":206},[186,48285,43710],{"class":202},[186,48287,33525],{"class":206},[186,48289,1138],{"class":202},[186,48291,48292,48294,48296,48298,48300,48302,48304,48306,48308,48310,48312,48314,48316],{"class":188,"line":11313},[186,48293,39551],{"class":202},[186,48295,32329],{"class":835},[186,48297,529],{"class":669},[186,48299,1691],{"class":206},[186,48301,1988],{"class":202},[186,48303,32384],{"class":835},[186,48305,529],{"class":669},[186,48307,1697],{"class":206},[186,48309,1988],{"class":202},[186,48311,32338],{"class":835},[186,48313,529],{"class":669},[186,48315,1829],{"class":206},[186,48317,1629],{"class":202},[186,48319,48320],{"class":188,"line":11327},[186,48321,39580],{"class":202},[186,48323,48324,48326,48328,48330],{"class":188,"line":11333},[186,48325,32300],{"class":206},[186,48327,43993],{"class":202},[186,48329,529],{"class":669},[186,48331,39464],{"class":202},[186,48333,48334,48336,48338,48340,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360,48362],{"class":188,"line":11360},[186,48335,43683],{"class":202},[186,48337,44004],{"class":206},[186,48339,1988],{"class":202},[186,48341,36325],{"class":206},[186,48343,43692],{"class":202},[186,48345,22509],{"class":206},[186,48347,1988],{"class":202},[186,48349,43940],{"class":206},[186,48351,43701],{"class":202},[186,48353,1809],{"class":206},[186,48355,1988],{"class":202},[186,48357,33525],{"class":206},[186,48359,43710],{"class":202},[186,48361,33525],{"class":206},[186,48363,1138],{"class":202},[186,48365,48366,48368,48370,48372,48374,48376,48378,48380,48382,48384,48386,48388,48390,48392,48394],{"class":188,"line":11369},[186,48367,43683],{"class":202},[186,48369,44004],{"class":206},[186,48371,1988],{"class":202},[186,48373,36395],{"class":206},[186,48375,43692],{"class":202},[186,48377,43613],{"class":206},[186,48379,1988],{"class":202},[186,48381,36395],{"class":206},[186,48383,43701],{"class":202},[186,48385,2217],{"class":206},[186,48387,1988],{"class":202},[186,48389,33525],{"class":206},[186,48391,43710],{"class":202},[186,48393,33525],{"class":206},[186,48395,1138],{"class":202},[186,48397,48398,48400,48402,48404,48406],{"class":188,"line":11375},[186,48399,44067],{"class":202},[186,48401,1829],{"class":206},[186,48403,1988],{"class":202},[186,48405,1829],{"class":206},[186,48407,44076],{"class":202},[186,48409,48410],{"class":188,"line":11383},[186,48411,40244],{"class":202},[186,48413,48414,48416,48418,48420,48422],{"class":188,"line":11388},[186,48415,40249],{"class":202},[186,48417,44087],{"class":206},[186,48419,1988],{"class":202},[186,48421,1697],{"class":206},[186,48423,1629],{"class":202},[186,48425,48426],{"class":188,"line":18065},[186,48427,39580],{"class":202},[186,48429,48430],{"class":188,"line":18071},[186,48431,44102],{"class":192},[186,48433,48434,48436,48438,48440,48442],{"class":188,"line":18094},[186,48435,4869],{"class":669},[186,48437,40322],{"class":202},[186,48439,27500],{"class":669},[186,48441,40327],{"class":206},[186,48443,40330],{"class":202},[186,48445,48446,48448,48450],{"class":188,"line":18100},[186,48447,6108],{"class":669},[186,48449,40342],{"class":206},[186,48451,40345],{"class":202},[186,48453,48454,48456,48458,48460,48462,48464,48466,48468,48470],{"class":188,"line":18123},[186,48455,40355],{"class":202},[186,48457,44129],{"class":835},[186,48459,529],{"class":669},[186,48461,44134],{"class":532},[186,48463,1988],{"class":202},[186,48465,40358],{"class":835},[186,48467,529],{"class":669},[186,48469,40363],{"class":532},[186,48471,1629],{"class":202},[186,48473,48474],{"class":188,"line":18137},[186,48475,44149],{"class":192},[186,48477,48478],{"class":188,"line":18157},[186,48479,44154],{"class":192},[186,48481,48482],{"class":188,"line":18163},[186,48483,44159],{"class":192},[186,48485,48486],{"class":188,"line":18174},[186,48487,44164],{"class":192},[186,48489,48490],{"class":188,"line":18197},[186,48491,44169],{"class":192},[186,48493,48494],{"class":188,"line":18219},[186,48495,44174],{"class":192},[186,48497,48498,48500,48502,48504,48506,48508],{"class":188,"line":18224},[186,48499,40375],{"class":669},[186,48501,40378],{"class":202},[186,48503,40381],{"class":669},[186,48505,40384],{"class":669},[186,48507,40387],{"class":206},[186,48509,5205],{"class":202},[186,48511,48512,48514,48516],{"class":188,"line":18230},[186,48513,40399],{"class":202},[186,48515,1803],{"class":206},[186,48517,1629],{"class":202},[186,48519,48520,48522,48524],{"class":188,"line":18244},[186,48521,44201],{"class":669},[186,48523,40342],{"class":206},[186,48525,40418],{"class":202},[186,48527,48528,48530,48532,48534,48536],{"class":188,"line":18257},[186,48529,44210],{"class":202},[186,48531,1803],{"class":206},[186,48533,1988],{"class":202},[186,48535,40440],{"class":206},[186,48537,1629],{"class":202},[186,48539,48540,48542,48544,48546,48548,48550],{"class":188,"line":18262},[186,48541,44223],{"class":669},[186,48543,40378],{"class":202},[186,48545,40381],{"class":669},[186,48547,40384],{"class":669},[186,48549,40387],{"class":206},[186,48551,5205],{"class":202},[186,48553,48554,48556,48558],{"class":188,"line":18276},[186,48555,44238],{"class":202},[186,48557,1803],{"class":206},[186,48559,1629],{"class":202},[186,48561,48562],{"class":188,"line":18281},[186,48563,36620],{"class":192},[186,48565,48566,48568,48570],{"class":188,"line":18287},[186,48567,32256],{"class":669},[186,48569,32548],{"class":198},[186,48571,32551],{"class":202},[186,48573,48574,48576,48578,48580],{"class":188,"line":18292},[186,48575,32556],{"class":202},[186,48577,529],{"class":669},[186,48579,32278],{"class":206},[186,48581,44265],{"class":202},[186,48583,48584,48586,48588,48590],{"class":188,"line":18306},[186,48585,32556],{"class":202},[186,48587,529],{"class":669},[186,48589,32278],{"class":206},[186,48591,44276],{"class":202},[186,48593,48594,48596,48598,48600],{"class":188,"line":18311},[186,48595,32556],{"class":202},[186,48597,529],{"class":669},[186,48599,32278],{"class":206},[186,48601,44287],{"class":202},[186,48603,48604,48606,48608,48610],{"class":188,"line":18316},[186,48605,32556],{"class":202},[186,48607,529],{"class":669},[186,48609,32278],{"class":206},[186,48611,44298],{"class":202},[186,48613,48614,48616,48618,48620],{"class":188,"line":18330},[186,48615,32556],{"class":202},[186,48617,529],{"class":669},[186,48619,32278],{"class":206},[186,48621,44309],{"class":202},[186,48623,48624,48626],{"class":188,"line":18342},[186,48625,16214],{"class":669},[186,48627,32664],{"class":202},[186,48629,48630],{"class":188,"line":18347},[186,48631,3867],{"emptyLinePlaceholder":1551},[186,48633,48634],{"class":188,"line":18360},[186,48635,44324],{"class":192},[186,48637,48638,48640,48642,48644,48646],{"class":188,"line":18365},[186,48639,3003],{"class":669},[186,48641,32675],{"class":206},[186,48643,4415],{"class":669},[186,48645,32680],{"class":532},[186,48647,5205],{"class":202},[186,48649,48650,48652,48654,48656,48658,48660,48662,48664,48666],{"class":188,"line":18370},[186,48651,32692],{"class":202},[186,48653,529],{"class":669},[186,48655,31906],{"class":202},[186,48657,32699],{"class":532},[186,48659,3172],{"class":669},[186,48661,32704],{"class":202},[186,48663,3169],{"class":669},[186,48665,31931],{"class":532},[186,48667,1629],{"class":202},[186,48669,48670,48672,48674],{"class":188,"line":18375},[186,48671,32744],{"class":202},[186,48673,529],{"class":669},[186,48675,44365],{"class":202},[186,48677,48678,48680,48682,48684,48686,48688,48690,48692],{"class":188,"line":18388},[186,48679,32754],{"class":206},[186,48681,32757],{"class":202},[186,48683,1829],{"class":206},[186,48685,1988],{"class":202},[186,48687,32956],{"class":206},[186,48689,1988],{"class":202},[186,48691,32956],{"class":206},[186,48693,32770],{"class":202},[23459,48695,48697],{"id":48696},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[169,48699,48700],{},"计算图片的均值与方差，用于训练中归一化处理操作",[176,48702,48704],{"className":31833,"code":48703,"language":31835,"meta":181,"style":181},"# 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",[183,48705,48706,48711,48724,48729,48735,48740,48750,48754,48759,48769,48773,48778,48788,48805,48809,48814,48826,48838,48869,48878,48888,48898,48902,48907,48922,48926,48931,48936,48941,48951,48956,48981,48985,48990,49005,49009,49022,49026,49031,49036,49041,49046,49051,49061,49071,49094,49102,49110,49118,49122,49134,49138,49143,49147,49151,49158,49178,49202,49209,49223,49228,49233,49237,49251,49255,49267],{"__ignoreMap":181},[186,48707,48708],{"class":188,"line":189},[186,48709,48710],{"class":192},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[186,48712,48713,48715,48718,48721],{"class":188,"line":49},[186,48714,32192],{"class":669},[186,48716,48717],{"class":206}," PIL",[186,48719,48720],{"class":669}," import",[186,48722,48723],{"class":202}," Image\n",[186,48725,48726],{"class":188,"line":219},[186,48727,48728],{"class":192},"# os 用来处理文件夹和文件路径\n",[186,48730,48731,48733],{"class":188,"line":225},[186,48732,31847],{"class":669},[186,48734,46759],{"class":202},[186,48736,48737],{"class":188,"line":242},[186,48738,48739],{"class":192},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[186,48741,48742,48744,48746,48748],{"class":188,"line":248},[186,48743,31847],{"class":669},[186,48745,32835],{"class":202},[186,48747,32838],{"class":669},[186,48749,32841],{"class":202},[186,48751,48752],{"class":188,"line":265},[186,48753,3867],{"emptyLinePlaceholder":1551},[186,48755,48756],{"class":188,"line":271},[186,48757,48758],{"class":192},"# 文件夹路径，包含所有图片文件\n",[186,48760,48761,48764,48766],{"class":188,"line":288},[186,48762,48763],{"class":202},"folder_path ",[186,48765,529],{"class":669},[186,48767,48768],{"class":532}," 'data_cat_dog'\n",[186,48770,48771],{"class":188,"line":294},[186,48772,3867],{"emptyLinePlaceholder":1551},[186,48774,48775],{"class":188,"line":1212},[186,48776,48777],{"class":192},"# 初始化累积变量\n",[186,48779,48780,48783,48785],{"class":188,"line":1223},[186,48781,48782],{"class":202},"total_pixels ",[186,48784,529],{"class":669},[186,48786,48787],{"class":206}," 0\n",[186,48789,48790,48793,48795,48798,48800,48802],{"class":188,"line":1236},[186,48791,48792],{"class":202},"sum_normalized_pixel_values ",[186,48794,529],{"class":669},[186,48796,48797],{"class":202}," np.zeros(",[186,48799,1691],{"class":206},[186,48801,47262],{"class":202},[186,48803,48804],{"class":192},"# 如果是RGB图像，需要三个通道的均值和方差\n",[186,48806,48807],{"class":188,"line":3096},[186,48808,3867],{"emptyLinePlaceholder":1551},[186,48810,48811],{"class":188,"line":3110},[186,48812,48813],{"class":192},"# 遍历文件夹中的图片文件\n",[186,48815,48816,48818,48821,48823],{"class":188,"line":3115},[186,48817,4491],{"class":669},[186,48819,48820],{"class":202}," root, dirs, files ",[186,48822,27500],{"class":669},[186,48824,48825],{"class":202}," os.walk(folder_path):\n",[186,48827,48828,48830,48833,48835],{"class":188,"line":3121},[186,48829,4667],{"class":669},[186,48831,48832],{"class":202}," filename ",[186,48834,27500],{"class":669},[186,48836,48837],{"class":202}," files:\n",[186,48839,48840,48842,48845,48848,48850,48853,48855,48858,48860,48863,48866],{"class":188,"line":3142},[186,48841,3964],{"class":669},[186,48843,48844],{"class":202}," filename.endswith((",[186,48846,48847],{"class":532},"'.jpg'",[186,48849,13898],{"class":202},[186,48851,48852],{"class":532},"'.jpeg'",[186,48854,13898],{"class":202},[186,48856,48857],{"class":532},"'.png'",[186,48859,13898],{"class":202},[186,48861,48862],{"class":532},"'.bmp'",[186,48864,48865],{"class":202},")):  ",[186,48867,48868],{"class":192},"# 可根据实际情况添加其他格式\n",[186,48870,48871,48873,48875],{"class":188,"line":3147},[186,48872,47127],{"class":202},[186,48874,529],{"class":669},[186,48876,48877],{"class":202}," os.path.join(root, filename)\n",[186,48879,48880,48883,48885],{"class":188,"line":3161},[186,48881,48882],{"class":202},"            image ",[186,48884,529],{"class":669},[186,48886,48887],{"class":202}," Image.open(image_path)\n",[186,48889,48890,48893,48895],{"class":188,"line":3166},[186,48891,48892],{"class":202},"            image_array ",[186,48894,529],{"class":669},[186,48896,48897],{"class":202}," np.array(image)\n",[186,48899,48900],{"class":188,"line":3195},[186,48901,3867],{"emptyLinePlaceholder":1551},[186,48903,48904],{"class":188,"line":3200},[186,48905,48906],{"class":192},"            # 归一化像素值到0-1之间\n",[186,48908,48909,48912,48914,48917,48919],{"class":188,"line":3217},[186,48910,48911],{"class":202},"            normalized_image_array ",[186,48913,529],{"class":669},[186,48915,48916],{"class":202}," image_array ",[186,48918,2194],{"class":669},[186,48920,48921],{"class":206}," 255.0\n",[186,48923,48924],{"class":188,"line":3222},[186,48925,3867],{"emptyLinePlaceholder":1551},[186,48927,48928],{"class":188,"line":3227},[186,48929,48930],{"class":192},"            # print(image_path)\n",[186,48932,48933],{"class":188,"line":3232},[186,48934,48935],{"class":192},"            # print(normalized_image_array.shape)\n",[186,48937,48938],{"class":188,"line":3246},[186,48939,48940],{"class":192},"            # 累积归一化后的像素值和像素数量\n",[186,48942,48943,48946,48948],{"class":188,"line":3251},[186,48944,48945],{"class":202},"            total_pixels ",[186,48947,10940],{"class":669},[186,48949,48950],{"class":202}," normalized_image_array.size\n",[186,48952,48953],{"class":188,"line":4044},[186,48954,48955],{"class":192},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[186,48957,48958,48961,48963,48966,48969,48971,48973,48975,48977,48979],{"class":188,"line":4058},[186,48959,48960],{"class":202},"            sum_normalized_pixel_values ",[186,48962,10940],{"class":669},[186,48964,48965],{"class":202}," np.sum(normalized_image_array, ",[186,48967,48968],{"class":835},"axis",[186,48970,529],{"class":669},[186,48972,832],{"class":202},[186,48974,1803],{"class":206},[186,48976,13898],{"class":202},[186,48978,1829],{"class":206},[186,48980,31952],{"class":202},[186,48982,48983],{"class":188,"line":4066},[186,48984,3867],{"emptyLinePlaceholder":1551},[186,48986,48987],{"class":188,"line":4071},[186,48988,48989],{"class":192},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[186,48991,48992,48995,48997,49000,49002],{"class":188,"line":4077},[186,48993,48994],{"class":202},"mean ",[186,48996,529],{"class":669},[186,48998,48999],{"class":202}," sum_normalized_pixel_values ",[186,49001,2194],{"class":669},[186,49003,49004],{"class":202}," total_pixels\n",[186,49006,49007],{"class":188,"line":4083},[186,49008,3867],{"emptyLinePlaceholder":1551},[186,49010,49011,49014,49016,49018,49020],{"class":188,"line":4088},[186,49012,49013],{"class":202},"sum_squared_diff ",[186,49015,529],{"class":669},[186,49017,48797],{"class":202},[186,49019,1691],{"class":206},[186,49021,1629],{"class":202},[186,49023,49024],{"class":188,"line":9411},[186,49025,3867],{"emptyLinePlaceholder":1551},[186,49027,49028],{"class":188,"line":9435},[186,49029,49030],{"class":192},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[186,49032,49033],{"class":188,"line":9440},[186,49034,49035],{"class":192},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[186,49037,49038],{"class":188,"line":9446},[186,49039,49040],{"class":192},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[186,49042,49043],{"class":188,"line":9473},[186,49044,49045],{"class":192},"# Image.open(image_path)：打开图片\n",[186,49047,49048],{"class":188,"line":9478},[186,49049,49050],{"class":192},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[186,49052,49053,49055,49057,49059],{"class":188,"line":9484},[186,49054,4491],{"class":669},[186,49056,48820],{"class":202},[186,49058,27500],{"class":669},[186,49060,48825],{"class":202},[186,49062,49063,49065,49067,49069],{"class":188,"line":9496},[186,49064,4667],{"class":669},[186,49066,48832],{"class":202},[186,49068,27500],{"class":669},[186,49070,48837],{"class":202},[186,49072,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091],{"class":188,"line":9508},[186,49074,3964],{"class":669},[186,49076,48844],{"class":202},[186,49078,48847],{"class":532},[186,49080,13898],{"class":202},[186,49082,48852],{"class":532},[186,49084,13898],{"class":202},[186,49086,48857],{"class":532},[186,49088,13898],{"class":202},[186,49090,48862],{"class":532},[186,49092,49093],{"class":202},")):\n",[186,49095,49096,49098,49100],{"class":188,"line":9520},[186,49097,47127],{"class":202},[186,49099,529],{"class":669},[186,49101,48877],{"class":202},[186,49103,49104,49106,49108],{"class":188,"line":11179},[186,49105,48882],{"class":202},[186,49107,529],{"class":669},[186,49109,48887],{"class":202},[186,49111,49112,49114,49116],{"class":188,"line":11204},[186,49113,48892],{"class":202},[186,49115,529],{"class":669},[186,49117,48897],{"class":202},[186,49119,49120],{"class":188,"line":11227},[186,49121,48906],{"class":192},[186,49123,49124,49126,49128,49130,49132],{"class":188,"line":11251},[186,49125,48911],{"class":202},[186,49127,529],{"class":669},[186,49129,48916],{"class":202},[186,49131,2194],{"class":669},[186,49133,48921],{"class":206},[186,49135,49136],{"class":188,"line":11256},[186,49137,48935],{"class":192},[186,49139,49140],{"class":188,"line":11261},[186,49141,49142],{"class":192},"            # print(mean.shape)\n",[186,49144,49145],{"class":188,"line":11266},[186,49146,48930],{"class":192},[186,49148,49149],{"class":188,"line":11275},[186,49150,3867],{"emptyLinePlaceholder":1551},[186,49152,49153,49156],{"class":188,"line":11280},[186,49154,49155],{"class":669},"            try",[186,49157,5205],{"class":202},[186,49159,49160,49163,49165,49168,49170,49173,49175],{"class":188,"line":11286},[186,49161,49162],{"class":202},"                diff ",[186,49164,529],{"class":669},[186,49166,49167],{"class":202}," (normalized_image_array ",[186,49169,2142],{"class":669},[186,49171,49172],{"class":202}," mean) ",[186,49174,12124],{"class":669},[186,49176,49177],{"class":206}," 2\n",[186,49179,49180,49183,49185,49188,49190,49192,49194,49196,49198,49200],{"class":188,"line":11307},[186,49181,49182],{"class":202},"                sum_squared_diff ",[186,49184,10940],{"class":669},[186,49186,49187],{"class":202}," np.sum(diff, ",[186,49189,48968],{"class":835},[186,49191,529],{"class":669},[186,49193,832],{"class":202},[186,49195,1803],{"class":206},[186,49197,13898],{"class":202},[186,49199,1829],{"class":206},[186,49201,31952],{"class":202},[186,49203,49204,49207],{"class":188,"line":11313},[186,49205,49206],{"class":669},"            except",[186,49208,5205],{"class":202},[186,49210,49211,49214,49216,49218,49221],{"class":188,"line":11327},[186,49212,49213],{"class":206},"                print",[186,49215,832],{"class":202},[186,49217,1673],{"class":669},[186,49219,49220],{"class":532},"\"捕获到自定义异常\"",[186,49222,1629],{"class":202},[186,49224,49225],{"class":188,"line":11333},[186,49226,49227],{"class":192},"            # diff = (normalized_image_array - mean) ** 2\n",[186,49229,49230],{"class":188,"line":11360},[186,49231,49232],{"class":192},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[186,49234,49235],{"class":188,"line":11369},[186,49236,3867],{"emptyLinePlaceholder":1551},[186,49238,49239,49242,49244,49247,49249],{"class":188,"line":11375},[186,49240,49241],{"class":202},"variance ",[186,49243,529],{"class":669},[186,49245,49246],{"class":202}," sum_squared_diff ",[186,49248,2194],{"class":669},[186,49250,49004],{"class":202},[186,49252,49253],{"class":188,"line":11383},[186,49254,3867],{"emptyLinePlaceholder":1551},[186,49256,49257,49259,49261,49264],{"class":188,"line":11388},[186,49258,31870],{"class":206},[186,49260,832],{"class":202},[186,49262,49263],{"class":532},"\"Mean:\"",[186,49265,49266],{"class":202},", mean)\n",[186,49268,49269,49271,49273,49276],{"class":188,"line":18065},[186,49270,31870],{"class":206},[186,49272,832],{"class":202},[186,49274,49275],{"class":532},"\"Variance:\"",[186,49277,49278],{"class":202},", variance)\n",[176,49280,49282],{"className":31833,"code":49281,"language":31835,"meta":181,"style":181},"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",[183,49283,49284,49290,49296,49306,49312,49322,49336,49346,49356,49366,49370,49380,49390,49394,49398,49406,49411,49416,49435,49439,49444,49449,49454,49459,49500,49505,49515,49520,49533,49538,49543,49548,49553,49558,49562,49567,49572,49594,49598,49630,49644,49654,49664,49668,49678,49692,49702,49712,49722,49728,49732,49736,49740,49744,49748,49756,49776,49780,49784,49788,49792,49808,49812,49816,49824,49828,49832,49840,49844,49848,49852,49860,49864,49868,49872,49880,49884,49892,49896,49904,49908,49916,49920,49928,49932,49936,49944,49948,49952,49964,49988,50002,50006,50010,50014,50022,50026,50034,50038,50046,50050,50058,50062,50070,50074,50082,50086,50098,50102,50110,50114,50122,50126,50130,50134,50138,50146,50150,50166,50170,50178,50182,50186,50190,50194,50198,50202,50206,50222,50226,50238,50242,50254,50258,50270,50274,50282,50286,50294,50298,50302,50306,50312,50316,50324,50328,50344,50348,50356,50360,50376,50388,50392,50404,50408,50412,50420,50424,50428,50436,50440,50448,50452,50460,50464,50468,50510,50552,50556,50560,50576,50580,50596,50600,50604,50612,50616,50620,50632,50670,50674,50678,50686,50690,50704,50714,50720,50726,50732,50738,50742,50746,50752,50756,50760,50768,50772,50790,50794,50798,50802,50818,50822,50826,50830,50834,50838,50858,50878,50882,50886,50890,50898,50906,50910,50926,50946,50966,50970,50975,50984,50993,50998,51003,51008,51021,51026,51035,51044,51061],{"__ignoreMap":181},[186,49285,49286,49288],{"class":188,"line":189},[186,49287,31847],{"class":669},[186,49289,33277],{"class":202},[186,49291,49292,49294],{"class":188,"line":49},[186,49293,31847],{"class":669},[186,49295,33284],{"class":202},[186,49297,49298,49300,49302,49304],{"class":188,"line":219},[186,49299,31847],{"class":669},[186,49301,33295],{"class":202},[186,49303,32838],{"class":669},[186,49305,33300],{"class":202},[186,49307,49308,49310],{"class":188,"line":225},[186,49309,31847],{"class":669},[186,49311,31850],{"class":202},[186,49313,49314,49316,49318,49320],{"class":188,"line":242},[186,49315,32192],{"class":669},[186,49317,32870],{"class":202},[186,49319,31847],{"class":669},[186,49321,33317],{"class":202},[186,49323,49324,49326,49328,49330,49333],{"class":188,"line":248},[186,49325,32192],{"class":669},[186,49327,32823],{"class":202},[186,49329,31847],{"class":669},[186,49331,49332],{"class":202}," ImageFolder ",[186,49334,49335],{"class":192},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[186,49337,49338,49340,49342,49344],{"class":188,"line":265},[186,49339,32192],{"class":669},[186,49341,32853],{"class":202},[186,49343,31847],{"class":669},[186,49345,32858],{"class":202},[186,49347,49348,49350,49352,49354],{"class":188,"line":271},[186,49349,31847],{"class":669},[186,49351,32870],{"class":202},[186,49353,32838],{"class":669},[186,49355,32875],{"class":202},[186,49357,49358,49360,49362,49364],{"class":188,"line":288},[186,49359,31847],{"class":669},[186,49361,32887],{"class":202},[186,49363,32838],{"class":669},[186,49365,32892],{"class":202},[186,49367,49368],{"class":188,"line":294},[186,49369,33362],{"class":192},[186,49371,49372,49374,49376,49378],{"class":188,"line":1212},[186,49373,32192],{"class":669},[186,49375,33369],{"class":202},[186,49377,31847],{"class":669},[186,49379,44485],{"class":202},[186,49381,49382,49384,49386,49388],{"class":188,"line":1223},[186,49383,32192],{"class":669},[186,49385,32195],{"class":202},[186,49387,31847],{"class":669},[186,49389,32200],{"class":202},[186,49391,49392],{"class":188,"line":1236},[186,49393,3867],{"emptyLinePlaceholder":1551},[186,49395,49396],{"class":188,"line":3096},[186,49397,33397],{"class":192},[186,49399,49400,49402,49404],{"class":188,"line":3110},[186,49401,33402],{"class":669},[186,49403,33405],{"class":198},[186,49405,33408],{"class":202},[186,49407,49408],{"class":188,"line":3115},[186,49409,49410],{"class":192},"    # 导入自己的数据集，并进行数据处理\n",[186,49412,49413],{"class":188,"line":3121},[186,49414,49415],{"class":192},"    # 定义数据集的路径\n",[186,49417,49418,49421,49423,49425,49427,49429,49433],{"class":188,"line":3142},[186,49419,49420],{"class":206},"    ROOT_PATH",[186,49422,529],{"class":669},[186,49424,2279],{"class":669},[186,49426,1862],{"class":532},[186,49428,2168],{"class":206},[186,49430,49432],{"class":49431},"sA_wV","\u002Fdata\u002Ftrain",[186,49434,26592],{"class":532},[186,49436,49437],{"class":188,"line":3147},[186,49438,3867],{"emptyLinePlaceholder":1551},[186,49440,49441],{"class":188,"line":3161},[186,49442,49443],{"class":192},"    # 定义归一化方法\n",[186,49445,49446],{"class":188,"line":3166},[186,49447,49448],{"class":192},"    # 这里需要先计算一下数据集的均值和方差\n",[186,49450,49451],{"class":188,"line":3195},[186,49452,49453],{"class":192},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[186,49455,49456],{"class":188,"line":3200},[186,49457,49458],{"class":192},"    # 第一个参数是均值，第二个参数是方差\n",[186,49460,49461,49464,49466,49469,49472,49474,49477,49479,49482,49485,49488,49490,49493,49495,49498],{"class":188,"line":3217},[186,49462,49463],{"class":202},"    normalize",[186,49465,529],{"class":669},[186,49467,49468],{"class":202},"transforms.Normalize([",[186,49470,49471],{"class":206},"0.162",[186,49473,1988],{"class":202},[186,49475,49476],{"class":206},"0.151",[186,49478,1988],{"class":202},[186,49480,49481],{"class":206},"0.138",[186,49483,49484],{"class":202},"],[",[186,49486,49487],{"class":206},"0.058",[186,49489,1988],{"class":202},[186,49491,49492],{"class":206},"0.052",[186,49494,1988],{"class":202},[186,49496,49497],{"class":206},"0.048",[186,49499,6123],{"class":202},[186,49501,49502],{"class":188,"line":3222},[186,49503,49504],{"class":192},"    # 定义数据集处理方法变量\n",[186,49506,49507,49510,49512],{"class":188,"line":3227},[186,49508,49509],{"class":202},"    train_transform",[186,49511,529],{"class":669},[186,49513,49514],{"class":202},"transforms.Compose([\n",[186,49516,49517],{"class":188,"line":3232},[186,49518,49519],{"class":192},"        # 调整图像大小为224*224\n",[186,49521,49522,49525,49527,49529,49531],{"class":188,"line":3246},[186,49523,49524],{"class":202},"        transforms.Resize((",[186,49526,32956],{"class":206},[186,49528,1988],{"class":202},[186,49530,32956],{"class":206},[186,49532,44076],{"class":202},[186,49534,49535],{"class":188,"line":3251},[186,49536,49537],{"class":192},"        # 将图像转换为张量\n",[186,49539,49540],{"class":188,"line":4044},[186,49541,49542],{"class":202},"        transforms.ToTensor(),\n",[186,49544,49545],{"class":188,"line":4058},[186,49546,49547],{"class":202},"        normalize])\n",[186,49549,49550],{"class":188,"line":4066},[186,49551,49552],{"class":192},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[186,49554,49555],{"class":188,"line":4071},[186,49556,49557],{"class":192},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[186,49559,49560],{"class":188,"line":4077},[186,49561,3867],{"emptyLinePlaceholder":1551},[186,49563,49564],{"class":188,"line":4083},[186,49565,49566],{"class":192},"    # 加载数据集\n",[186,49568,49569],{"class":188,"line":4088},[186,49570,49571],{"class":192},"    # 传入数据集路径与处理方法\n",[186,49573,49574,49576,49578,49581,49584,49586,49589,49591],{"class":188,"line":9411},[186,49575,33413],{"class":202},[186,49577,529],{"class":669},[186,49579,49580],{"class":202},"ImageFolder(",[186,49582,49583],{"class":206},"ROOT_PATH",[186,49585,1988],{"class":202},[186,49587,49588],{"class":835},"transform",[186,49590,529],{"class":669},[186,49592,49593],{"class":202},"train_transform)\n",[186,49595,49596],{"class":188,"line":9435},[186,49597,3867],{"emptyLinePlaceholder":1551},[186,49599,49600,49602,49604,49606,49608,49610,49612,49614,49616,49618,49620,49622,49624,49626,49628],{"class":188,"line":9440},[186,49601,33465],{"class":202},[186,49603,529],{"class":669},[186,49605,33470],{"class":202},[186,49607,33473],{"class":206},[186,49609,832],{"class":202},[186,49611,33478],{"class":206},[186,49613,2065],{"class":669},[186,49615,8821],{"class":206},[186,49617,33485],{"class":202},[186,49619,33473],{"class":206},[186,49621,832],{"class":202},[186,49623,33492],{"class":206},[186,49625,2065],{"class":669},[186,49627,8821],{"class":206},[186,49629,33499],{"class":202},[186,49631,49632,49634,49636,49638,49640,49642],{"class":188,"line":9446},[186,49633,33504],{"class":202},[186,49635,529],{"class":669},[186,49637,33509],{"class":202},[186,49639,32992],{"class":835},[186,49641,529],{"class":669},[186,49643,32997],{"class":202},[186,49645,49646,49648,49650,49652],{"class":188,"line":9473},[186,49647,33520],{"class":835},[186,49649,529],{"class":669},[186,49651,1809],{"class":206},[186,49653,32921],{"class":202},[186,49655,49656,49658,49660,49662],{"class":188,"line":9478},[186,49657,33532],{"class":835},[186,49659,529],{"class":669},[186,49661,32931],{"class":206},[186,49663,32921],{"class":202},[186,49665,49666],{"class":188,"line":9484},[186,49667,33543],{"class":192},[186,49669,49670,49672,49674,49676],{"class":188,"line":9496},[186,49671,33548],{"class":835},[186,49673,529],{"class":669},[186,49675,2005],{"class":206},[186,49677,1629],{"class":202},[186,49679,49680,49682,49684,49686,49688,49690],{"class":188,"line":9508},[186,49681,33559],{"class":202},[186,49683,529],{"class":669},[186,49685,32989],{"class":202},[186,49687,32992],{"class":835},[186,49689,529],{"class":669},[186,49691,33570],{"class":202},[186,49693,49694,49696,49698,49700],{"class":188,"line":9520},[186,49695,33575],{"class":835},[186,49697,529],{"class":669},[186,49699,1809],{"class":206},[186,49701,32921],{"class":202},[186,49703,49704,49706,49708,49710],{"class":188,"line":11179},[186,49705,33586],{"class":835},[186,49707,529],{"class":669},[186,49709,32931],{"class":206},[186,49711,32921],{"class":202},[186,49713,49714,49716,49718,49720],{"class":188,"line":11204},[186,49715,33597],{"class":835},[186,49717,529],{"class":669},[186,49719,2005],{"class":206},[186,49721,1629],{"class":202},[186,49723,49724,49726],{"class":188,"line":11227},[186,49725,5556],{"class":669},[186,49727,33610],{"class":202},[186,49729,49730],{"class":188,"line":11251},[186,49731,3867],{"emptyLinePlaceholder":1551},[186,49733,49734],{"class":188,"line":11256},[186,49735,33619],{"class":192},[186,49737,49738],{"class":188,"line":11261},[186,49739,33624],{"class":192},[186,49741,49742],{"class":188,"line":11266},[186,49743,3867],{"emptyLinePlaceholder":1551},[186,49745,49746],{"class":188,"line":11275},[186,49747,33633],{"class":192},[186,49749,49750,49752,49754],{"class":188,"line":11280},[186,49751,33402],{"class":669},[186,49753,33640],{"class":198},[186,49755,33643],{"class":202},[186,49757,49758,49760,49762,49764,49766,49768,49770,49772,49774],{"class":188,"line":11286},[186,49759,32692],{"class":202},[186,49761,529],{"class":669},[186,49763,31906],{"class":202},[186,49765,32699],{"class":532},[186,49767,3172],{"class":669},[186,49769,32704],{"class":202},[186,49771,3169],{"class":669},[186,49773,33662],{"class":532},[186,49775,1629],{"class":202},[186,49777,49778],{"class":188,"line":11307},[186,49779,3867],{"emptyLinePlaceholder":1551},[186,49781,49782],{"class":188,"line":11313},[186,49783,33677],{"class":192},[186,49785,49786],{"class":188,"line":11327},[186,49787,33682],{"class":192},[186,49789,49790],{"class":188,"line":11333},[186,49791,33687],{"class":192},[186,49793,49794,49796,49798,49800,49802,49804,49806],{"class":188,"line":11360},[186,49795,33692],{"class":202},[186,49797,529],{"class":669},[186,49799,33697],{"class":202},[186,49801,33700],{"class":835},[186,49803,529],{"class":669},[186,49805,33705],{"class":206},[186,49807,1629],{"class":202},[186,49809,49810],{"class":188,"line":11369},[186,49811,3867],{"emptyLinePlaceholder":1551},[186,49813,49814],{"class":188,"line":11375},[186,49815,33716],{"class":192},[186,49817,49818,49820,49822],{"class":188,"line":11383},[186,49819,33721],{"class":202},[186,49821,529],{"class":669},[186,49823,33726],{"class":202},[186,49825,49826],{"class":188,"line":11388},[186,49827,3867],{"emptyLinePlaceholder":1551},[186,49829,49830],{"class":188,"line":18065},[186,49831,33735],{"class":192},[186,49833,49834,49836,49838],{"class":188,"line":18071},[186,49835,32744],{"class":202},[186,49837,529],{"class":669},[186,49839,33744],{"class":202},[186,49841,49842],{"class":188,"line":18094},[186,49843,33749],{"class":192},[186,49845,49846],{"class":188,"line":18100},[186,49847,33754],{"class":192},[186,49849,49850],{"class":188,"line":18123},[186,49851,33759],{"class":192},[186,49853,49854,49856,49858],{"class":188,"line":18137},[186,49855,33764],{"class":202},[186,49857,529],{"class":669},[186,49859,33769],{"class":202},[186,49861,49862],{"class":188,"line":18157},[186,49863,3867],{"emptyLinePlaceholder":1551},[186,49865,49866],{"class":188,"line":18163},[186,49867,33782],{"class":192},[186,49869,49870],{"class":188,"line":18174},[186,49871,33787],{"class":192},[186,49873,49874,49876,49878],{"class":188,"line":18197},[186,49875,33792],{"class":202},[186,49877,529],{"class":669},[186,49879,33797],{"class":206},[186,49881,49882],{"class":188,"line":18219},[186,49883,33802],{"class":192},[186,49885,49886,49888,49890],{"class":188,"line":18224},[186,49887,33807],{"class":202},[186,49889,529],{"class":669},[186,49891,33812],{"class":202},[186,49893,49894],{"class":188,"line":18230},[186,49895,33817],{"class":192},[186,49897,49898,49900,49902],{"class":188,"line":18244},[186,49899,33822],{"class":202},[186,49901,529],{"class":669},[186,49903,33812],{"class":202},[186,49905,49906],{"class":188,"line":18257},[186,49907,33831],{"class":192},[186,49909,49910,49912,49914],{"class":188,"line":18262},[186,49911,33836],{"class":202},[186,49913,529],{"class":669},[186,49915,33812],{"class":202},[186,49917,49918],{"class":188,"line":18276},[186,49919,33845],{"class":192},[186,49921,49922,49924,49926],{"class":188,"line":18281},[186,49923,33850],{"class":202},[186,49925,529],{"class":669},[186,49927,33812],{"class":202},[186,49929,49930],{"class":188,"line":18287},[186,49931,3867],{"emptyLinePlaceholder":1551},[186,49933,49934],{"class":188,"line":18292},[186,49935,33863],{"class":192},[186,49937,49938,49940,49942],{"class":188,"line":18306},[186,49939,33868],{"class":202},[186,49941,529],{"class":669},[186,49943,33873],{"class":202},[186,49945,49946],{"class":188,"line":18311},[186,49947,3867],{"emptyLinePlaceholder":1551},[186,49949,49950],{"class":188,"line":18316},[186,49951,33886],{"class":192},[186,49953,49954,49956,49958,49960,49962],{"class":188,"line":18330},[186,49955,4667],{"class":669},[186,49957,33893],{"class":202},[186,49959,27500],{"class":669},[186,49961,33898],{"class":206},[186,49963,33901],{"class":202},[186,49965,49966,49968,49970,49972,49974,49976,49978,49980,49982,49984,49986],{"class":188,"line":18342},[186,49967,33906],{"class":206},[186,49969,832],{"class":202},[186,49971,33911],{"class":532},[186,49973,33914],{"class":206},[186,49975,2194],{"class":532},[186,49977,33914],{"class":206},[186,49979,1862],{"class":532},[186,49981,33923],{"class":202},[186,49983,2142],{"class":669},[186,49985,1829],{"class":206},[186,49987,31952],{"class":202},[186,49989,49990,49992,49994,49996,49998,50000],{"class":188,"line":18347},[186,49991,33906],{"class":206},[186,49993,832],{"class":202},[186,49995,33938],{"class":532},[186,49997,2065],{"class":669},[186,49999,2056],{"class":206},[186,50001,1629],{"class":202},[186,50003,50004],{"class":188,"line":18360},[186,50005,3867],{"emptyLinePlaceholder":1551},[186,50007,50008],{"class":188,"line":18365},[186,50009,33953],{"class":192},[186,50011,50012],{"class":188,"line":18370},[186,50013,33958],{"class":192},[186,50015,50016,50018,50020],{"class":188,"line":18375},[186,50017,33963],{"class":202},[186,50019,529],{"class":669},[186,50021,33797],{"class":206},[186,50023,50024],{"class":188,"line":18388},[186,50025,33972],{"class":192},[186,50027,50028,50030,50032],{"class":188,"line":18393},[186,50029,33977],{"class":202},[186,50031,529],{"class":669},[186,50033,4551],{"class":206},[186,50035,50036],{"class":188,"line":34088},[186,50037,33986],{"class":192},[186,50039,50040,50042,50044],{"class":188,"line":34094},[186,50041,33991],{"class":202},[186,50043,529],{"class":669},[186,50045,33797],{"class":206},[186,50047,50048],{"class":188,"line":34100},[186,50049,34000],{"class":192},[186,50051,50052,50054,50056],{"class":188,"line":34106},[186,50053,34005],{"class":202},[186,50055,529],{"class":669},[186,50057,4551],{"class":206},[186,50059,50060],{"class":188,"line":34112},[186,50061,34014],{"class":192},[186,50063,50064,50066,50068],{"class":188,"line":34123},[186,50065,34019],{"class":202},[186,50067,529],{"class":669},[186,50069,4551],{"class":206},[186,50071,50072],{"class":188,"line":34129},[186,50073,34028],{"class":192},[186,50075,50076,50078,50080],{"class":188,"line":34149},[186,50077,34033],{"class":202},[186,50079,529],{"class":669},[186,50081,4551],{"class":206},[186,50083,50084],{"class":188,"line":34155},[186,50085,34042],{"class":192},[186,50087,50088,50090,50092,50094,50096],{"class":188,"line":34166},[186,50089,4869],{"class":669},[186,50091,33056],{"class":202},[186,50093,27500],{"class":669},[186,50095,33061],{"class":206},[186,50097,34055],{"class":202},[186,50099,50100],{"class":188,"line":34172},[186,50101,34060],{"class":192},[186,50103,50104,50106,50108],{"class":188,"line":34178},[186,50105,34065],{"class":202},[186,50107,529],{"class":669},[186,50109,34070],{"class":202},[186,50111,50112],{"class":188,"line":34184},[186,50113,34075],{"class":192},[186,50115,50116,50118,50120],{"class":188,"line":34190},[186,50117,34080],{"class":202},[186,50119,529],{"class":669},[186,50121,34085],{"class":202},[186,50123,50124],{"class":188,"line":34196},[186,50125,34091],{"class":192},[186,50127,50128],{"class":188,"line":34202},[186,50129,34097],{"class":202},[186,50131,50132],{"class":188,"line":34208},[186,50133,34103],{"class":192},[186,50135,50136],{"class":188,"line":34228},[186,50137,34109],{"class":192},[186,50139,50140,50142,50144],{"class":188,"line":34234},[186,50141,34115],{"class":202},[186,50143,529],{"class":669},[186,50145,34120],{"class":202},[186,50147,50148],{"class":188,"line":34250},[186,50149,34126],{"class":192},[186,50151,50152,50154,50156,50158,50160,50162,50164],{"class":188,"line":34256},[186,50153,34132],{"class":202},[186,50155,529],{"class":669},[186,50157,34137],{"class":202},[186,50159,34140],{"class":835},[186,50161,529],{"class":669},[186,50163,1829],{"class":206},[186,50165,1629],{"class":202},[186,50167,50168],{"class":188,"line":34270},[186,50169,34152],{"class":192},[186,50171,50172,50174,50176],{"class":188,"line":34276},[186,50173,34158],{"class":202},[186,50175,529],{"class":669},[186,50177,34163],{"class":202},[186,50179,50180],{"class":188,"line":34291},[186,50181,34169],{"class":192},[186,50183,50184],{"class":188,"line":34297},[186,50185,34175],{"class":202},[186,50187,50188],{"class":188,"line":34306},[186,50189,34181],{"class":192},[186,50191,50192],{"class":188,"line":34312},[186,50193,34187],{"class":202},[186,50195,50196],{"class":188,"line":34321},[186,50197,34193],{"class":192},[186,50199,50200],{"class":188,"line":34327},[186,50201,34199],{"class":202},[186,50203,50204],{"class":188,"line":34333},[186,50205,34205],{"class":192},[186,50207,50208,50210,50212,50214,50216,50218,50220],{"class":188,"line":34342},[186,50209,34211],{"class":202},[186,50211,10940],{"class":669},[186,50213,34216],{"class":202},[186,50215,2065],{"class":669},[186,50217,34221],{"class":202},[186,50219,1803],{"class":206},[186,50221,1629],{"class":202},[186,50223,50224],{"class":188,"line":34348},[186,50225,34231],{"class":192},[186,50227,50228,50230,50232,50234,50236],{"class":188,"line":34359},[186,50229,34237],{"class":202},[186,50231,10940],{"class":669},[186,50233,34242],{"class":202},[186,50235,4415],{"class":669},[186,50237,34247],{"class":202},[186,50239,50240],{"class":188,"line":34365},[186,50241,34253],{"class":192},[186,50243,50244,50246,50248,50250,50252],{"class":188,"line":34384},[186,50245,34259],{"class":202},[186,50247,10940],{"class":669},[186,50249,34221],{"class":202},[186,50251,1803],{"class":206},[186,50253,1629],{"class":202},[186,50255,50256],{"class":188,"line":34390},[186,50257,34273],{"class":192},[186,50259,50260,50262,50264,50266,50268],{"class":188,"line":34401},[186,50261,4869],{"class":669},[186,50263,34281],{"class":202},[186,50265,27500],{"class":669},[186,50267,33061],{"class":206},[186,50269,34288],{"class":202},[186,50271,50272],{"class":188,"line":34407},[186,50273,34294],{"class":192},[186,50275,50276,50278,50280],{"class":188,"line":34427},[186,50277,34065],{"class":202},[186,50279,529],{"class":669},[186,50281,34070],{"class":202},[186,50283,50284],{"class":188,"line":34443},[186,50285,34309],{"class":192},[186,50287,50288,50290,50292],{"class":188,"line":34449},[186,50289,34080],{"class":202},[186,50291,529],{"class":669},[186,50293,34085],{"class":202},[186,50295,50296],{"class":188,"line":34463},[186,50297,34324],{"class":192},[186,50299,50300],{"class":188,"line":34469},[186,50301,34330],{"class":202},[186,50303,50304],{"class":188,"line":34475},[186,50305,37811],{"class":192},[186,50307,50308,50310],{"class":188,"line":34486},[186,50309,34336],{"class":669},[186,50311,34339],{"class":202},[186,50313,50314],{"class":188,"line":34492},[186,50315,34345],{"class":192},[186,50317,50318,50320,50322],{"class":188,"line":34498},[186,50319,37826],{"class":202},[186,50321,529],{"class":669},[186,50323,34120],{"class":202},[186,50325,50326],{"class":188,"line":34508},[186,50327,34362],{"class":192},[186,50329,50330,50332,50334,50336,50338,50340,50342],{"class":188,"line":34514},[186,50331,37839],{"class":202},[186,50333,529],{"class":669},[186,50335,34137],{"class":202},[186,50337,34140],{"class":835},[186,50339,529],{"class":669},[186,50341,1829],{"class":206},[186,50343,1629],{"class":202},[186,50345,50346],{"class":188,"line":34525},[186,50347,34387],{"class":192},[186,50349,50350,50352,50354],{"class":188,"line":34531},[186,50351,37860],{"class":202},[186,50353,529],{"class":669},[186,50355,34163],{"class":202},[186,50357,50358],{"class":188,"line":34541},[186,50359,34404],{"class":192},[186,50361,50362,50364,50366,50368,50370,50372,50374],{"class":188,"line":34546},[186,50363,37873],{"class":202},[186,50365,10940],{"class":669},[186,50367,37878],{"class":202},[186,50369,2065],{"class":669},[186,50371,34221],{"class":202},[186,50373,1803],{"class":206},[186,50375,1629],{"class":202},[186,50377,50378,50380,50382,50384,50386],{"class":188,"line":34552},[186,50379,37891],{"class":202},[186,50381,10940],{"class":669},[186,50383,34242],{"class":202},[186,50385,4415],{"class":669},[186,50387,34247],{"class":202},[186,50389,50390],{"class":188,"line":34601},[186,50391,37904],{"class":192},[186,50393,50394,50396,50398,50400,50402],{"class":188,"line":34648},[186,50395,37909],{"class":202},[186,50397,10940],{"class":669},[186,50399,34221],{"class":202},[186,50401,1803],{"class":206},[186,50403,1629],{"class":202},[186,50405,50406],{"class":188,"line":34653},[186,50407,34466],{"class":192},[186,50409,50410],{"class":188,"line":34659},[186,50411,34472],{"class":192},[186,50413,50414,50416,50418],{"class":188,"line":34678},[186,50415,34478],{"class":202},[186,50417,2194],{"class":669},[186,50419,34483],{"class":202},[186,50421,50422],{"class":188,"line":34684},[186,50423,34489],{"class":192},[186,50425,50426],{"class":188,"line":34704},[186,50427,34495],{"class":192},[186,50429,50430,50432,50434],{"class":188,"line":34710},[186,50431,34501],{"class":202},[186,50433,2194],{"class":669},[186,50435,34483],{"class":202},[186,50437,50438],{"class":188,"line":34716},[186,50439,34511],{"class":192},[186,50441,50442,50444,50446],{"class":188,"line":34726},[186,50443,34517],{"class":202},[186,50445,2194],{"class":669},[186,50447,34522],{"class":202},[186,50449,50450],{"class":188,"line":34731},[186,50451,34528],{"class":192},[186,50453,50454,50456,50458],{"class":188,"line":34737},[186,50455,34534],{"class":202},[186,50457,2194],{"class":669},[186,50459,34522],{"class":202},[186,50461,50462],{"class":188,"line":34753},[186,50463,3867],{"emptyLinePlaceholder":1551},[186,50465,50466],{"class":188,"line":34798},[186,50467,34549],{"class":192},[186,50469,50470,50472,50474,50476,50478,50480,50482,50484,50486,50488,50490,50492,50494,50496,50498,50500,50502,50504,50506,50508],{"class":188,"line":34804},[186,50471,33906],{"class":206},[186,50473,832],{"class":202},[186,50475,5058],{"class":532},[186,50477,33914],{"class":206},[186,50479,34563],{"class":532},[186,50481,2504],{"class":206},[186,50483,34568],{"class":669},[186,50485,2553],{"class":206},[186,50487,34573],{"class":532},[186,50489,2504],{"class":206},[186,50491,34568],{"class":669},[186,50493,2553],{"class":206},[186,50495,5058],{"class":532},[186,50497,34584],{"class":202},[186,50499,2142],{"class":669},[186,50501,1829],{"class":206},[186,50503,34591],{"class":202},[186,50505,2142],{"class":669},[186,50507,1829],{"class":206},[186,50509,34598],{"class":202},[186,50511,50512,50514,50516,50518,50520,50522,50524,50526,50528,50530,50532,50534,50536,50538,50540,50542,50544,50546,50548,50550],{"class":188,"line":34810},[186,50513,33906],{"class":206},[186,50515,832],{"class":202},[186,50517,5058],{"class":532},[186,50519,33914],{"class":206},[186,50521,34612],{"class":532},[186,50523,2504],{"class":206},[186,50525,34568],{"class":669},[186,50527,2553],{"class":206},[186,50529,34621],{"class":532},[186,50531,2504],{"class":206},[186,50533,34568],{"class":669},[186,50535,2553],{"class":206},[186,50537,5058],{"class":532},[186,50539,34632],{"class":202},[186,50541,2142],{"class":669},[186,50543,1829],{"class":206},[186,50545,34639],{"class":202},[186,50547,2142],{"class":669},[186,50549,1829],{"class":206},[186,50551,34598],{"class":202},[186,50553,50554],{"class":188,"line":34816},[186,50555,3867],{"emptyLinePlaceholder":1551},[186,50557,50558],{"class":188,"line":34827},[186,50559,34656],{"class":192},[186,50561,50562,50564,50566,50568,50570,50572,50574],{"class":188,"line":34833},[186,50563,3964],{"class":669},[186,50565,34664],{"class":202},[186,50567,2142],{"class":669},[186,50569,1829],{"class":206},[186,50571,2547],{"class":202},[186,50573,2567],{"class":669},[186,50575,34675],{"class":202},[186,50577,50578],{"class":188,"line":34839},[186,50579,34681],{"class":192},[186,50581,50582,50584,50586,50588,50590,50592,50594],{"class":188,"line":34845},[186,50583,34687],{"class":202},[186,50585,1662],{"class":206},[186,50587,529],{"class":669},[186,50589,34694],{"class":202},[186,50591,2142],{"class":669},[186,50593,1829],{"class":206},[186,50595,34701],{"class":202},[186,50597,50598],{"class":188,"line":34863},[186,50599,34707],{"class":192},[186,50601,50602],{"class":188,"line":34877},[186,50603,34713],{"class":192},[186,50605,50606,50608,50610],{"class":188,"line":34886},[186,50607,34719],{"class":202},[186,50609,529],{"class":669},[186,50611,33769],{"class":202},[186,50613,50614],{"class":188,"line":34895},[186,50615,3867],{"emptyLinePlaceholder":1551},[186,50617,50618],{"class":188,"line":34904},[186,50619,34734],{"class":192},[186,50621,50622,50624,50626,50628,50630],{"class":188,"line":34913},[186,50623,34740],{"class":202},[186,50625,529],{"class":669},[186,50627,34745],{"class":202},[186,50629,2142],{"class":669},[186,50631,34750],{"class":202},[186,50633,50634,50636,50638,50640,50642,50644,50646,50648,50650,50652,50654,50656,50658,50660,50662,50664,50666,50668],{"class":188,"line":34919},[186,50635,33906],{"class":206},[186,50637,832],{"class":202},[186,50639,34760],{"class":532},[186,50641,2504],{"class":206},[186,50643,34765],{"class":669},[186,50645,2553],{"class":206},[186,50647,2154],{"class":532},[186,50649,2504],{"class":206},[186,50651,34765],{"class":669},[186,50653,2553],{"class":206},[186,50655,34778],{"class":532},[186,50657,34781],{"class":202},[186,50659,34784],{"class":669},[186,50661,2515],{"class":206},[186,50663,34789],{"class":202},[186,50665,670],{"class":669},[186,50667,2515],{"class":206},[186,50669,31952],{"class":202},[186,50671,50672],{"class":188,"line":34925},[186,50673,38188],{"class":192},[186,50675,50676],{"class":188,"line":34933},[186,50677,38193],{"class":192},[186,50679,50680,50682,50684],{"class":188,"line":34938},[186,50681,38198],{"class":202},[186,50683,34822],{"class":532},[186,50685,1629],{"class":202},[186,50687,50688],{"class":188,"line":34944},[186,50689,34842],{"class":192},[186,50691,50692,50694,50696,50698,50700,50702],{"class":188,"line":34955},[186,50693,34848],{"class":202},[186,50695,529],{"class":669},[186,50697,34853],{"class":202},[186,50699,34856],{"class":835},[186,50701,529],{"class":669},[186,50703,3018],{"class":202},[186,50705,50706,50708,50710,50712],{"class":188,"line":34961},[186,50707,34866],{"class":532},[186,50709,2467],{"class":202},[186,50711,34871],{"class":206},[186,50713,34874],{"class":202},[186,50715,50716,50718],{"class":188,"line":34981},[186,50717,34880],{"class":532},[186,50719,34883],{"class":202},[186,50721,50722,50724],{"class":188,"line":34987},[186,50723,34889],{"class":532},[186,50725,34892],{"class":202},[186,50727,50728,50730],{"class":188,"line":34993},[186,50729,34898],{"class":532},[186,50731,34901],{"class":202},[186,50733,50734,50736],{"class":188,"line":34999},[186,50735,34907],{"class":532},[186,50737,34910],{"class":202},[186,50739,50740],{"class":188,"line":35016},[186,50741,34916],{"class":202},[186,50743,50744],{"class":188,"line":35022},[186,50745,34922],{"class":192},[186,50747,50748,50750],{"class":188,"line":35028},[186,50749,5556],{"class":669},[186,50751,34930],{"class":202},[186,50753,50754],{"class":188,"line":35034},[186,50755,3867],{"emptyLinePlaceholder":1551},[186,50757,50758],{"class":188,"line":35040},[186,50759,34941],{"class":192},[186,50761,50762,50764,50766],{"class":188,"line":35046},[186,50763,33402],{"class":669},[186,50765,34949],{"class":198},[186,50767,34952],{"class":202},[186,50769,50770],{"class":188,"line":35073},[186,50771,34958],{"class":192},[186,50773,50774,50776,50778,50780,50782,50784,50786,50788],{"class":188,"line":35097},[186,50775,34964],{"class":202},[186,50777,33148],{"class":835},[186,50779,529],{"class":669},[186,50781,832],{"class":202},[186,50783,2108],{"class":206},[186,50785,1988],{"class":202},[186,50787,1904],{"class":206},[186,50789,31952],{"class":202},[186,50791,50792],{"class":188,"line":35103},[186,50793,34984],{"class":192},[186,50795,50796],{"class":188,"line":35109},[186,50797,34990],{"class":192},[186,50799,50800],{"class":188,"line":35115},[186,50801,34996],{"class":192},[186,50803,50804,50806,50808,50810,50812,50814,50816],{"class":188,"line":35126},[186,50805,33182],{"class":202},[186,50807,1829],{"class":206},[186,50809,1988],{"class":202},[186,50811,1697],{"class":206},[186,50813,1988],{"class":202},[186,50815,1829],{"class":206},[186,50817,1629],{"class":202},[186,50819,50820],{"class":188,"line":35137},[186,50821,35019],{"class":192},[186,50823,50824],{"class":188,"line":35143},[186,50825,35025],{"class":192},[186,50827,50828],{"class":188,"line":35160},[186,50829,35031],{"class":192},[186,50831,50832],{"class":188,"line":35183},[186,50833,35037],{"class":192},[186,50835,50836],{"class":188,"line":35206},[186,50837,35043],{"class":192},[186,50839,50840,50842,50844,50846,50848,50850,50852,50854,50856],{"class":188,"line":35212},[186,50841,35049],{"class":202},[186,50843,35052],{"class":532},[186,50845,35055],{"class":202},[186,50847,35058],{"class":532},[186,50849,1988],{"class":202},[186,50851,35063],{"class":835},[186,50853,529],{"class":669},[186,50855,35068],{"class":532},[186,50857,1629],{"class":202},[186,50859,50860,50862,50864,50866,50868,50870,50872,50874,50876],{"class":188,"line":35217},[186,50861,35049],{"class":202},[186,50863,35052],{"class":532},[186,50865,35080],{"class":202},[186,50867,35083],{"class":532},[186,50869,1988],{"class":202},[186,50871,35063],{"class":835},[186,50873,529],{"class":669},[186,50875,35092],{"class":532},[186,50877,1629],{"class":202},[186,50879,50880],{"class":188,"line":35226},[186,50881,35100],{"class":192},[186,50883,50884],{"class":188,"line":35236},[186,50885,35106],{"class":202},[186,50887,50888],{"class":188,"line":35242},[186,50889,35112],{"class":192},[186,50891,50892,50894,50896],{"class":188,"line":35247},[186,50893,35118],{"class":202},[186,50895,35121],{"class":532},[186,50897,1629],{"class":202},[186,50899,50900,50902,50904],{"class":188,"line":35253},[186,50901,35129],{"class":202},[186,50903,35132],{"class":532},[186,50905,1629],{"class":202},[186,50907,50908],{"class":188,"line":35266},[186,50909,35140],{"class":192},[186,50911,50912,50914,50916,50918,50920,50922,50924],{"class":188,"line":35272},[186,50913,33182],{"class":202},[186,50915,1829],{"class":206},[186,50917,1988],{"class":202},[186,50919,1697],{"class":206},[186,50921,1988],{"class":202},[186,50923,1697],{"class":206},[186,50925,1629],{"class":202},[186,50927,50928,50930,50932,50934,50936,50938,50940,50942,50944],{"class":188,"line":35283},[186,50929,35049],{"class":202},[186,50931,35052],{"class":532},[186,50933,35167],{"class":202},[186,50935,35058],{"class":532},[186,50937,1988],{"class":202},[186,50939,35063],{"class":835},[186,50941,529],{"class":669},[186,50943,35178],{"class":532},[186,50945,1629],{"class":202},[186,50947,50948,50950,50952,50954,50956,50958,50960,50962,50964],{"class":188,"line":35294},[186,50949,35049],{"class":202},[186,50951,35052],{"class":532},[186,50953,35190],{"class":202},[186,50955,35083],{"class":532},[186,50957,1988],{"class":202},[186,50959,35063],{"class":835},[186,50961,529],{"class":669},[186,50963,35201],{"class":532},[186,50965,1629],{"class":202},[186,50967,50968],{"class":188,"line":35313},[186,50969,35209],{"class":192},[186,50971,50973],{"class":188,"line":50972},219,[186,50974,35106],{"class":202},[186,50976,50978,50980,50982],{"class":188,"line":50977},220,[186,50979,35118],{"class":202},[186,50981,35052],{"class":532},[186,50983,1629],{"class":202},[186,50985,50987,50989,50991],{"class":188,"line":50986},221,[186,50988,35129],{"class":202},[186,50990,35231],{"class":532},[186,50992,1629],{"class":202},[186,50994,50996],{"class":188,"line":50995},222,[186,50997,35239],{"class":202},[186,50999,51001],{"class":188,"line":51000},223,[186,51002,3867],{"emptyLinePlaceholder":1551},[186,51004,51006],{"class":188,"line":51005},224,[186,51007,35250],{"class":192},[186,51009,51011,51013,51015,51017,51019],{"class":188,"line":51010},225,[186,51012,3003],{"class":669},[186,51014,32675],{"class":206},[186,51016,4415],{"class":669},[186,51018,32680],{"class":532},[186,51020,5205],{"class":202},[186,51022,51024],{"class":188,"line":51023},226,[186,51025,35269],{"class":192},[186,51027,51029,51031,51033],{"class":188,"line":51028},227,[186,51030,46000],{"class":202},[186,51032,529],{"class":669},[186,51034,46005],{"class":202},[186,51036,51038,51040,51042],{"class":188,"line":51037},228,[186,51039,35286],{"class":202},[186,51041,529],{"class":669},[186,51043,35291],{"class":202},[186,51045,51047,51049,51051,51053,51055,51057,51059],{"class":188,"line":51046},229,[186,51048,34848],{"class":202},[186,51050,529],{"class":669},[186,51052,46022],{"class":202},[186,51054,35304],{"class":835},[186,51056,529],{"class":669},[186,51058,2515],{"class":206},[186,51060,1629],{"class":202},[186,51062,51064],{"class":188,"line":51063},230,[186,51065,35316],{"class":202},[23459,51067,51069],{"id":51068},"_242测试代码","2.4.2.测试代码",[169,51071,51072],{},"使用测试集进行测试与推理",[176,51074,51076],{"className":31833,"code":51075,"language":31835,"meta":181,"style":181},"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",[183,51077,51078,51084,51094,51104,51115,51125,51129,51133,51141,51146,51150,51167,51171,51175,51179,51183,51187,51219,51223,51231,51235,51247,51251,51255,51259,51263,51267,51271,51275,51279,51297,51311,51315,51325,51335,51345,51351,51355,51359,51367,51371,51387,51395,51399,51403,51411,51419,51423,51427,51431,51435,51441,51445,51455,51463,51471,51475,51479,51483,51491,51495,51511,51515,51519,51523,51535,51539,51551,51555,51559,51571,51575,51585,51589,51593,51605,51609,51617,51621,51625,51633,51637,51645,51649,51653,51657,51661,51665,51681,51689,51693,51697,51715,51721,51725,51735,51743,51751,51755,51759,51763,51767,51775,51779,51795,51799,51807,51815],{"__ignoreMap":181},[186,51079,51080,51082],{"class":188,"line":189},[186,51081,31847],{"class":669},[186,51083,31850],{"class":202},[186,51085,51086,51088,51090,51092],{"class":188,"line":49},[186,51087,31847],{"class":669},[186,51089,32870],{"class":202},[186,51091,32838],{"class":669},[186,51093,32875],{"class":202},[186,51095,51096,51098,51100,51102],{"class":188,"line":219},[186,51097,32192],{"class":669},[186,51099,32853],{"class":202},[186,51101,31847],{"class":669},[186,51103,32858],{"class":202},[186,51105,51106,51108,51110,51112],{"class":188,"line":225},[186,51107,32192],{"class":669},[186,51109,32823],{"class":202},[186,51111,31847],{"class":669},[186,51113,51114],{"class":202}," ImageFolder\n",[186,51116,51117,51119,51121,51123],{"class":188,"line":242},[186,51118,32192],{"class":669},[186,51120,33369],{"class":202},[186,51122,31847],{"class":669},[186,51124,46094],{"class":202},[186,51126,51127],{"class":188,"line":248},[186,51128,3867],{"emptyLinePlaceholder":1551},[186,51130,51131],{"class":188,"line":265},[186,51132,35406],{"class":192},[186,51134,51135,51137,51139],{"class":188,"line":271},[186,51136,33402],{"class":669},[186,51138,35413],{"class":198},[186,51140,33408],{"class":202},[186,51142,51143],{"class":188,"line":288},[186,51144,51145],{"class":192},"   # 导入自己的数据集，并进行数据处理\n",[186,51147,51148],{"class":188,"line":294},[186,51149,49415],{"class":192},[186,51151,51152,51154,51156,51158,51160,51162,51165],{"class":188,"line":1212},[186,51153,49420],{"class":206},[186,51155,529],{"class":669},[186,51157,2279],{"class":669},[186,51159,1862],{"class":532},[186,51161,2168],{"class":206},[186,51163,51164],{"class":49431},"\u002Fdata\u002Ftest",[186,51166,26592],{"class":532},[186,51168,51169],{"class":188,"line":1223},[186,51170,3867],{"emptyLinePlaceholder":1551},[186,51172,51173],{"class":188,"line":1236},[186,51174,49443],{"class":192},[186,51176,51177],{"class":188,"line":3096},[186,51178,49448],{"class":192},[186,51180,51181],{"class":188,"line":3110},[186,51182,49453],{"class":192},[186,51184,51185],{"class":188,"line":3115},[186,51186,49458],{"class":192},[186,51188,51189,51191,51193,51195,51197,51199,51201,51203,51205,51207,51209,51211,51213,51215,51217],{"class":188,"line":3121},[186,51190,49463],{"class":202},[186,51192,529],{"class":669},[186,51194,49468],{"class":202},[186,51196,49471],{"class":206},[186,51198,1988],{"class":202},[186,51200,49476],{"class":206},[186,51202,1988],{"class":202},[186,51204,49481],{"class":206},[186,51206,49484],{"class":202},[186,51208,49487],{"class":206},[186,51210,1988],{"class":202},[186,51212,49492],{"class":206},[186,51214,1988],{"class":202},[186,51216,49497],{"class":206},[186,51218,6123],{"class":202},[186,51220,51221],{"class":188,"line":3142},[186,51222,49504],{"class":192},[186,51224,51225,51227,51229],{"class":188,"line":3147},[186,51226,49509],{"class":202},[186,51228,529],{"class":669},[186,51230,49514],{"class":202},[186,51232,51233],{"class":188,"line":3161},[186,51234,49519],{"class":192},[186,51236,51237,51239,51241,51243,51245],{"class":188,"line":3166},[186,51238,49524],{"class":202},[186,51240,32956],{"class":206},[186,51242,1988],{"class":202},[186,51244,32956],{"class":206},[186,51246,44076],{"class":202},[186,51248,51249],{"class":188,"line":3195},[186,51250,49537],{"class":192},[186,51252,51253],{"class":188,"line":3200},[186,51254,49542],{"class":202},[186,51256,51257],{"class":188,"line":3217},[186,51258,49547],{"class":202},[186,51260,51261],{"class":188,"line":3222},[186,51262,49552],{"class":192},[186,51264,51265],{"class":188,"line":3227},[186,51266,49557],{"class":192},[186,51268,51269],{"class":188,"line":3232},[186,51270,3867],{"emptyLinePlaceholder":1551},[186,51272,51273],{"class":188,"line":3246},[186,51274,49566],{"class":192},[186,51276,51277],{"class":188,"line":3251},[186,51278,49571],{"class":192},[186,51280,51281,51283,51285,51287,51289,51291,51293,51295],{"class":188,"line":4044},[186,51282,35420],{"class":202},[186,51284,529],{"class":669},[186,51286,49580],{"class":202},[186,51288,49583],{"class":206},[186,51290,1988],{"class":202},[186,51292,49588],{"class":835},[186,51294,529],{"class":669},[186,51296,49593],{"class":202},[186,51298,51299,51301,51303,51305,51307,51309],{"class":188,"line":4058},[186,51300,35477],{"class":202},[186,51302,529],{"class":669},[186,51304,32989],{"class":202},[186,51306,32992],{"class":835},[186,51308,529],{"class":669},[186,51310,35488],{"class":202},[186,51312,51313],{"class":188,"line":4066},[186,51314,35493],{"class":192},[186,51316,51317,51319,51321,51323],{"class":188,"line":4071},[186,51318,35498],{"class":835},[186,51320,529],{"class":669},[186,51322,1829],{"class":206},[186,51324,32921],{"class":202},[186,51326,51327,51329,51331,51333],{"class":188,"line":4077},[186,51328,35509],{"class":835},[186,51330,529],{"class":669},[186,51332,32931],{"class":206},[186,51334,32921],{"class":202},[186,51336,51337,51339,51341,51343],{"class":188,"line":4083},[186,51338,35520],{"class":835},[186,51340,529],{"class":669},[186,51342,1803],{"class":206},[186,51344,1629],{"class":202},[186,51346,51347,51349],{"class":188,"line":4088},[186,51348,5556],{"class":669},[186,51350,35533],{"class":202},[186,51352,51353],{"class":188,"line":9411},[186,51354,3867],{"emptyLinePlaceholder":1551},[186,51356,51357],{"class":188,"line":9435},[186,51358,35542],{"class":192},[186,51360,51361,51363,51365],{"class":188,"line":9440},[186,51362,33402],{"class":669},[186,51364,35549],{"class":198},[186,51366,35552],{"class":202},[186,51368,51369],{"class":188,"line":9446},[186,51370,35557],{"class":192},[186,51372,51373,51375,51377,51379,51381,51383,51385],{"class":188,"line":9473},[186,51374,32692],{"class":202},[186,51376,529],{"class":669},[186,51378,32699],{"class":532},[186,51380,3172],{"class":669},[186,51382,32704],{"class":202},[186,51384,3169],{"class":669},[186,51386,35574],{"class":532},[186,51388,51389,51391,51393],{"class":188,"line":9478},[186,51390,32744],{"class":202},[186,51392,529],{"class":669},[186,51394,33744],{"class":202},[186,51396,51397],{"class":188,"line":9484},[186,51398,3867],{"emptyLinePlaceholder":1551},[186,51400,51401],{"class":188,"line":9496},[186,51402,35591],{"class":192},[186,51404,51405,51407,51409],{"class":188,"line":9508},[186,51406,35596],{"class":202},[186,51408,529],{"class":669},[186,51410,33797],{"class":206},[186,51412,51413,51415,51417],{"class":188,"line":9520},[186,51414,35605],{"class":202},[186,51416,529],{"class":669},[186,51418,4551],{"class":206},[186,51420,51421],{"class":188,"line":11179},[186,51422,3867],{"emptyLinePlaceholder":1551},[186,51424,51425],{"class":188,"line":11204},[186,51426,35618],{"class":192},[186,51428,51429],{"class":188,"line":11227},[186,51430,35623],{"class":192},[186,51432,51433],{"class":188,"line":11251},[186,51434,35628],{"class":192},[186,51436,51437,51439],{"class":188,"line":11256},[186,51438,35633],{"class":669},[186,51440,34339],{"class":202},[186,51442,51443],{"class":188,"line":11261},[186,51444,35640],{"class":192},[186,51446,51447,51449,51451,51453],{"class":188,"line":11266},[186,51448,4869],{"class":669},[186,51450,35647],{"class":202},[186,51452,27500],{"class":669},[186,51454,35652],{"class":202},[186,51456,51457,51459,51461],{"class":188,"line":11275},[186,51458,35657],{"class":202},[186,51460,529],{"class":669},[186,51462,35662],{"class":202},[186,51464,51465,51467,51469],{"class":188,"line":11280},[186,51466,35667],{"class":202},[186,51468,529],{"class":669},[186,51470,35672],{"class":202},[186,51472,51473],{"class":188,"line":11286},[186,51474,35677],{"class":192},[186,51476,51477],{"class":188,"line":11307},[186,51478,34330],{"class":202},[186,51480,51481],{"class":188,"line":11313},[186,51482,35686],{"class":192},[186,51484,51485,51487,51489],{"class":188,"line":11327},[186,51486,34115],{"class":202},[186,51488,529],{"class":669},[186,51490,35695],{"class":202},[186,51492,51493],{"class":188,"line":11333},[186,51494,35700],{"class":192},[186,51496,51497,51499,51501,51503,51505,51507,51509],{"class":188,"line":11360},[186,51498,34132],{"class":202},[186,51500,529],{"class":669},[186,51502,34137],{"class":202},[186,51504,34140],{"class":835},[186,51506,529],{"class":669},[186,51508,1829],{"class":206},[186,51510,1629],{"class":202},[186,51512,51513],{"class":188,"line":11369},[186,51514,35721],{"class":192},[186,51516,51517],{"class":188,"line":11375},[186,51518,35726],{"class":192},[186,51520,51521],{"class":188,"line":11383},[186,51522,35731],{"class":192},[186,51524,51525,51527,51529,51531,51533],{"class":188,"line":11388},[186,51526,35736],{"class":202},[186,51528,10940],{"class":669},[186,51530,34242],{"class":202},[186,51532,4415],{"class":669},[186,51534,35745],{"class":202},[186,51536,51537],{"class":188,"line":18065},[186,51538,35750],{"class":192},[186,51540,51541,51543,51545,51547,51549],{"class":188,"line":18071},[186,51542,35755],{"class":202},[186,51544,10940],{"class":669},[186,51546,35760],{"class":202},[186,51548,1803],{"class":206},[186,51550,1629],{"class":202},[186,51552,51553],{"class":188,"line":18094},[186,51554,3867],{"emptyLinePlaceholder":1551},[186,51556,51557],{"class":188,"line":18100},[186,51558,35773],{"class":192},[186,51560,51561,51563,51565,51567,51569],{"class":188,"line":18123},[186,51562,35778],{"class":202},[186,51564,529],{"class":669},[186,51566,35783],{"class":202},[186,51568,2194],{"class":669},[186,51570,35788],{"class":202},[186,51572,51573],{"class":188,"line":18137},[186,51574,35793],{"class":192},[186,51576,51577,51579,51581,51583],{"class":188,"line":18157},[186,51578,33906],{"class":206},[186,51580,832],{"class":202},[186,51582,35802],{"class":532},[186,51584,35805],{"class":202},[186,51586,51587],{"class":188,"line":18163},[186,51588,3867],{"emptyLinePlaceholder":1551},[186,51590,51591],{"class":188,"line":18174},[186,51592,35814],{"class":192},[186,51594,51595,51597,51599,51601,51603],{"class":188,"line":18197},[186,51596,3003],{"class":669},[186,51598,32675],{"class":206},[186,51600,4415],{"class":669},[186,51602,32680],{"class":532},[186,51604,5205],{"class":202},[186,51606,51607],{"class":188,"line":18219},[186,51608,35831],{"class":192},[186,51610,51611,51613,51615],{"class":188,"line":18224},[186,51612,32744],{"class":202},[186,51614,529],{"class":669},[186,51616,46005],{"class":202},[186,51618,51619],{"class":188,"line":18230},[186,51620,35844],{"class":192},[186,51622,51623],{"class":188,"line":18244},[186,51624,35849],{"class":192},[186,51626,51627,51629,51631],{"class":188,"line":18257},[186,51628,35854],{"class":202},[186,51630,35857],{"class":532},[186,51632,31952],{"class":202},[186,51634,51635],{"class":188,"line":18262},[186,51636,35864],{"class":192},[186,51638,51639,51641,51643],{"class":188,"line":18276},[186,51640,35477],{"class":202},[186,51642,529],{"class":669},[186,51644,35873],{"class":202},[186,51646,51647],{"class":188,"line":18281},[186,51648,35878],{"class":192},[186,51650,51651],{"class":188,"line":18287},[186,51652,35883],{"class":202},[186,51654,51655],{"class":188,"line":18292},[186,51656,3867],{"emptyLinePlaceholder":1551},[186,51658,51659],{"class":188,"line":18306},[186,51660,35892],{"class":192},[186,51662,51663],{"class":188,"line":18311},[186,51664,35897],{"class":192},[186,51666,51667,51669,51671,51673,51675,51677,51679],{"class":188,"line":18316},[186,51668,32692],{"class":202},[186,51670,529],{"class":669},[186,51672,32699],{"class":532},[186,51674,3172],{"class":669},[186,51676,32704],{"class":202},[186,51678,3169],{"class":669},[186,51680,35574],{"class":532},[186,51682,51683,51685,51687],{"class":188,"line":18330},[186,51684,32744],{"class":202},[186,51686,529],{"class":669},[186,51688,33744],{"class":202},[186,51690,51691],{"class":188,"line":18342},[186,51692,35926],{"class":192},[186,51694,51695],{"class":188,"line":18347},[186,51696,35931],{"class":192},[186,51698,51699,51701,51703,51705,51708,51710,51713],{"class":188,"line":18360},[186,51700,35936],{"class":202},[186,51702,529],{"class":669},[186,51704,2498],{"class":202},[186,51706,51707],{"class":532},"'猫'",[186,51709,1988],{"class":202},[186,51711,51712],{"class":532},"'狗'",[186,51714,34701],{"class":202},[186,51716,51717,51719],{"class":188,"line":18365},[186,51718,35633],{"class":669},[186,51720,34339],{"class":202},[186,51722,51723],{"class":188,"line":18370},[186,51724,36001],{"class":192},[186,51726,51727,51729,51731,51733],{"class":188,"line":18375},[186,51728,4869],{"class":669},[186,51730,36008],{"class":202},[186,51732,27500],{"class":669},[186,51734,35652],{"class":202},[186,51736,51737,51739,51741],{"class":188,"line":18388},[186,51738,34065],{"class":202},[186,51740,529],{"class":669},[186,51742,34070],{"class":202},[186,51744,51745,51747,51749],{"class":188,"line":18393},[186,51746,34080],{"class":202},[186,51748,529],{"class":669},[186,51750,34085],{"class":202},[186,51752,51753],{"class":188,"line":34088},[186,51754,3867],{"emptyLinePlaceholder":1551},[186,51756,51757],{"class":188,"line":34094},[186,51758,36037],{"class":192},[186,51760,51761],{"class":188,"line":34100},[186,51762,34330],{"class":202},[186,51764,51765],{"class":188,"line":34106},[186,51766,36046],{"class":192},[186,51768,51769,51771,51773],{"class":188,"line":34112},[186,51770,34115],{"class":202},[186,51772,529],{"class":669},[186,51774,34120],{"class":202},[186,51776,51777],{"class":188,"line":34123},[186,51778,36059],{"class":192},[186,51780,51781,51783,51785,51787,51789,51791,51793],{"class":188,"line":34129},[186,51782,34132],{"class":202},[186,51784,529],{"class":669},[186,51786,34137],{"class":202},[186,51788,34140],{"class":835},[186,51790,529],{"class":669},[186,51792,1829],{"class":206},[186,51794,1629],{"class":202},[186,51796,51797],{"class":188,"line":34149},[186,51798,36080],{"class":192},[186,51800,51801,51803,51805],{"class":188,"line":34155},[186,51802,36085],{"class":202},[186,51804,529],{"class":669},[186,51806,36090],{"class":202},[186,51808,51809,51811,51813],{"class":188,"line":34166},[186,51810,36095],{"class":202},[186,51812,529],{"class":669},[186,51814,36100],{"class":202},[186,51816,51817,51819,51821,51823,51825,51827,51829,51831],{"class":188,"line":34172},[186,51818,36105],{"class":206},[186,51820,832],{"class":202},[186,51822,36110],{"class":532},[186,51824,36113],{"class":202},[186,51826,36116],{"class":532},[186,51828,1988],{"class":202},[186,51830,36121],{"class":532},[186,51832,36124],{"class":202},[1524,51834,51835],{},"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":181,"searchDepth":49,"depth":49,"links":51837},[51838,51839,51840,51841],{"id":32046,"depth":219,"text":32047},{"id":39294,"depth":219,"text":39295},{"id":42726,"depth":219,"text":42727},{"id":46735,"depth":219,"text":46736},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32038,"description":1548},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51848,"title":51849,"body":51850,"description":1548,"extension":1549,"meta":51857,"navigation":1551,"path":51858,"seo":51859,"stem":51860,"__hash__":51861},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51851,"toc":51855},[51852],[10,51853,51849],{"id":51854},"_3yolo模型学习",{"title":181,"searchDepth":49,"depth":49,"links":51856},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51849,"description":1548},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51863,"title":51864,"body":51865,"description":51872,"extension":1549,"meta":51873,"navigation":1551,"path":51875,"seo":51876,"stem":51877,"__hash__":51878},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51866,"toc":51870},[51867],[169,51868,51869],{},"yolo模型还未补充",{"title":181,"searchDepth":49,"depth":49,"links":51871},[],"深度学习学习",{"category":51874},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51864,"description":51872},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51880,"title":51881,"body":51882,"description":1548,"extension":1549,"meta":51907,"navigation":1551,"path":51908,"seo":51909,"stem":51910,"__hash__":51911},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51883,"toc":51905},[51884,51887,51890,51895,51902],[10,51885,51881],{"id":51886},"_1工具",[169,51888,51889],{},"提示错误插件：有问题会提前报错",[169,51891,51892],{},[164,51893],{"alt":181,"src":51894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[169,51896,51897],{},[948,51898,51901],{"href":51899,"rel":51900},"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",[952],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[169,51903,51904],{},"alt键加上下箭头可以实现语句的移动",{"title":181,"searchDepth":49,"depth":49,"links":51906},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51881,"description":1548},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51913,"title":51914,"body":51915,"description":1548,"extension":1549,"meta":54772,"navigation":1551,"path":54773,"seo":54774,"stem":54775,"__hash__":54776},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51916,"toc":54723},[51917,51920,51924,51928,51933,51936,51941,51945,51952,51957,51964,51969,51976,51981,51985,51990,51993,51997,52002,52006,52011,52014,52017,52020,52023,52026,52029,52032,52035,52040,52045,52050,52054,52057,52060,52064,52069,52072,52080,52085,52102,52110,52115,52120,52125,52130,52135,52138,52143,52148,52152,52161,52166,52171,52175,52180,52183,52187,52192,52200,52205,52210,52213,52218,52223,52228,52231,52234,52237,52242,52247,52250,52255,52258,52263,52266,52269,52272,52277,52280,52283,52298,52303,52308,52313,52316,52319,52322,52336,52339,52344,52349,52352,52355,52358,52361,52364,52367,52370,52374,52378,52383,52387,52390,52395,52400,52403,52408,52411,52415,52420,52423,52426,52429,52432,52435,52438,52441,52444,52447,52451,52456,52461,52466,52469,52472,52476,52481,52484,52488,52491,52494,52499,52502,52505,52509,52513,52516,52521,52526,52529,52558,52563,52568,52573,52578,52582,52587,52591,52596,52599,52603,52607,52612,52616,52621,52626,52630,52635,52638,52640,52643,52648,52652,52657,52661,52665,52670,52675,52680,52685,52689,52694,52699,52704,52707,52710,52715,52718,52723,52728,52733,52738,52742,53542,53546,53889,53894,53897,53900,53903,53906,53909,53912,53915,53918,53920,53923,53925,53928,53932,53937,53940,53943,53946,53950,53955,53960,53980,53983,53987,53992,53997,54014,54018,54047,54051,54073,54075,54114,54122,54128,54132,54135,54138,54143,54148,54151,54154,54157,54162,54167,54170,54173,54176,54179,54182,54185,54188,54191,54194,54197,54200,54202,54205,54208,54211,54214,54217,54220,54223,54226,54230,54235,54238,54243,54246,54249,54252,54255,54258,54261,54264,54266,54269,54272,54275,54278,54281,54284,54288,54291,54300,54303,54308,54311,54316,54319,54322,54325,54328,54331,54334,54337,54341,54345,54348,54351,54356,54361,54366,54370,54375,54380,54383,54386,54389,54392,54395,54400,54403,54408,54410,54415,54418,54422,54427,54430,54433,54438,54442,54445,54450,54453,54456,54485,54490,54493,54496,54499,54502,54505,54509,54512,54598,54602,54605,54610,54615,54622,54625,54628,54631,54634,54637,54642,54647,54650,54653,54656,54659,54662,54665,54668,54671,54674,54676,54679,54683,54688,54693,54698,54701,54706,54711,54714,54717,54720],[10,51918,51914],{"id":51919},"_2基础语法",[14,51921,51923],{"id":51922},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[29,51925,51927],{"id":51926},"_211-js组成","2.1.1 js组成",[34,51929,51930],{},[22,51931,51932],{},"js是编程语言，html和css不是编程语言，是标记语言",[169,51934,51935],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[34,51937,51938],{"start":49},[22,51939,51940],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[29,51942,51944],{"id":51943},"_212-js书写位置","2.1.2 js书写位置",[34,51946,51947],{},[22,51948,51949],{},[54,51950,51951],{},"内部 JavaScript",[169,51953,51954],{},[164,51955],{"alt":181,"src":51956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[34,51958,51959],{"start":49},[22,51960,51961],{},[54,51962,51963],{},"外部 JavaScript",[169,51965,51966],{},[164,51967],{"alt":181,"src":51968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[34,51970,51971],{"start":219},[22,51972,51973],{},[54,51974,51975],{},"内联 JavaScript",[169,51977,51978],{},[164,51979],{"alt":181,"src":51980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[29,51982,51984],{"id":51983},"_213-javascript注释","2.1.3 JavaScript注释",[169,51986,51987],{},[164,51988],{"alt":181,"src":51989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[169,51991,51992],{},"alt+shift+a一定要记住！",[29,51994,51996],{"id":51995},"_214-javascript结束符","2.1.4 JavaScript结束符",[169,51998,51999],{},[164,52000],{"alt":181,"src":52001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[29,52003,52005],{"id":52004},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[34,52007,52008],{},[22,52009,52010],{},"输出语法：",[169,52012,52013],{},"①document.write('要出的内容')",[169,52015,52016],{},"向body内输出内容；",[169,52018,52019],{},"如果输出的内容写的是标签，也会被解析cheng",[169,52021,52022],{},"②alert('要出的内容')",[169,52024,52025],{},"页面弹出警告对话框",[169,52027,52028],{},"③console.log('控制台打印')",[169,52030,52031],{},"控制台输出语法，程序员调试使用",[169,52033,52034],{},"输入log就行，自动生成：",[169,52036,52037],{},[164,52038],{"alt":181,"src":52039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[34,52041,52042],{"start":49},[22,52043,52044],{},"输入语法：",[169,52046,52047],{},[164,52048],{"alt":181,"src":52049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[29,52051,52053],{"id":52052},"_2116-字面量","21.1.6 字面量",[169,52055,52056],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[169,52058,52059],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52061,52063],{"id":52062},"_22-变量","2.2 变量",[34,52065,52066],{},[22,52067,52068],{},"变量声明",[169,52070,52071],{},"let 变量名",[19,52073,52074,52077],{},[22,52075,52076],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[22,52078,52079],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[34,52081,52082],{"start":49},[22,52083,52084],{},"变量赋值",[176,52086,52090],{"className":52087,"code":52088,"language":52089,"meta":181,"style":181},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[183,52091,52092,52097],{"__ignoreMap":181},[186,52093,52094],{"class":188,"line":189},[186,52095,52096],{"class":202},"let age\n",[186,52098,52099],{"class":188,"line":49},[186,52100,52101],{"class":202},"age=18\n",[34,52103,52104,52107],{"start":219},[22,52105,52106],{},"连这些（变量的初始化）：let age=18",[22,52108,52109],{},"更新变量",[169,52111,52112],{},[164,52113],{"alt":181,"src":52114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[34,52116,52117],{"start":242},[22,52118,52119],{},"声明多个变量",[169,52121,52122],{},[164,52123],{"alt":181,"src":52124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[34,52126,52127],{"start":248},[22,52128,52129],{},"变量命名规则与规范",[169,52131,52132],{},[164,52133],{"alt":181,"src":52134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[169,52136,52137],{},"遵守小驼峰！",[34,52139,52140],{"start":265},[22,52141,52142],{},"变量拓展-let和var的区别",[169,52144,52145],{},[164,52146],{"alt":181,"src":52147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52149,52151],{"id":52150},"_23-数组","2.3 数组",[176,52153,52155],{"className":52087,"code":52154,"language":52089,"meta":181,"style":181},"let arr = []\n",[183,52156,52157],{"__ignoreMap":181},[186,52158,52159],{"class":188,"line":189},[186,52160,52154],{"class":202},[169,52162,52163],{},[164,52164],{"alt":181,"src":52165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[169,52167,52168],{},[164,52169],{"alt":181,"src":52170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52172,52174],{"id":52173},"_24-常量","2.4 常量",[169,52176,52177],{},[164,52178],{"alt":181,"src":52179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[169,52181,52182],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52184,52186],{"id":52185},"_25-数据类型","2.5 数据类型",[169,52188,52189],{},[164,52190],{"alt":181,"src":52191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[34,52193,52194,52197],{},[22,52195,52196],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[22,52198,52199],{},"算数运算符：",[169,52201,52202],{},[164,52203],{"alt":181,"src":52204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[34,52206,52207],{"start":219},[22,52208,52209],{},"数字类型（Number）",[169,52211,52212],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[169,52214,52215],{},[164,52216],{"alt":181,"src":52217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[34,52219,52220],{"start":225},[22,52221,52222],{},"字符串类型（string）",[169,52224,52225],{},[164,52226],{"alt":181,"src":52227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[169,52229,52230],{},"反引号也是可以使用的",[169,52232,52233],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[169,52235,52236],{},"例如：document.write(\"我今年\"+age+\"岁\")",[34,52238,52239],{"start":242},[22,52240,52241],{},"模板字符串",[169,52243,52244],{},[164,52245],{"alt":181,"src":52246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[169,52248,52249],{},"类似于python的字符串格式化",[34,52251,52252],{"start":248},[22,52253,52254],{},"布尔类型",[169,52256,52257],{},"true 和 false",[34,52259,52260],{"start":265},[22,52261,52262],{},"未定义类型（underfined）",[169,52264,52265],{},"表示没有赋值",[169,52267,52268],{},"未定义类型是比较特殊的类型，只有一个值undefined",[169,52270,52271],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[34,52273,52274],{"start":271},[22,52275,52276],{},"null（空类型）",[169,52278,52279],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[169,52281,52282],{},"赋值了，但是内容为空",[176,52284,52286],{"className":52087,"code":52285,"language":52089,"meta":181,"style":181},"typeof null\n输出的是'object'，是一个对象数据类型\n",[183,52287,52288,52293],{"__ignoreMap":181},[186,52289,52290],{"class":188,"line":189},[186,52291,52292],{"class":202},"typeof null\n",[186,52294,52295],{"class":188,"line":49},[186,52296,52297],{"class":202},"输出的是'object'，是一个对象数据类型\n",[34,52299,52300],{"start":288},[22,52301,52302],{},"控制台检测数据类型",[169,52304,52305],{},[164,52306],{"alt":181,"src":52307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[34,52309,52310],{"start":294},[22,52311,52312],{},"类型转换",[169,52314,52315],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[169,52317,52318],{},"转换方式：隐式转换和显示转换",[169,52320,52321],{},"①隐式转换",[19,52323,52324,52327,52330,52333],{},[22,52325,52326],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[22,52328,52329],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[22,52331,52332],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[22,52334,52335],{},"任何数据和字符串相加结果都是字符串",[169,52337,52338],{},"②显示转换",[169,52340,52341],{},[164,52342],{"alt":181,"src":52343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[169,52345,52346],{},[164,52347],{"alt":181,"src":52348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[169,52350,52351],{},"在输入的时候要用好隐式转换，简单写起来",[169,52353,52354],{},"let num = +prompt(’请输入数字：‘)",[169,52356,52357],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[169,52359,52360],{},"console.log(parseInt('12.333px'))",[169,52362,52363],{},"输出为：12",[169,52365,52366],{},"console.log(parseInt('a'a'a12.333px'))",[169,52368,52369],{},"输出：NaN",[14,52371,52373],{"id":52372},"_26-运算符","2.6 运算符",[29,52375,52377],{"id":52376},"_261-赋值运算符","2.6.1 赋值运算符",[169,52379,52380],{},[164,52381],{"alt":181,"src":52382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[29,52384,52386],{"id":52385},"_262-一元运算符","2.6.2 一元运算符",[169,52388,52389],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[169,52391,52392],{},[164,52393],{"alt":181,"src":52394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[169,52396,52397],{},[164,52398],{"alt":181,"src":52399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[169,52401,52402],{},"两者的区别：",[169,52404,52405],{},[164,52406],{"alt":181,"src":52407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[169,52409,52410],{},"前置先自加；后置后加，代码执行完之后再加",[29,52412,52414],{"id":52413},"_263-比较运算符","2.6.3 比较运算符",[169,52416,52417],{},[164,52418],{"alt":181,"src":52419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[169,52421,52422],{},"比较运算符也有隐式转换",[169,52424,52425],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[169,52427,52428],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[169,52430,52431],{},"要使用三等，开发的时候",[169,52433,52434],{},"NaN不等于任何人，包括它自己",[169,52436,52437],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[169,52439,52440],{},"7\u002F10=0.7",[169,52442,52443],{},"最后：0.5+0.2=0.7",[169,52445,52446],{},"字符串比较，比较的是字符对应的ASCII码",[29,52448,52450],{"id":52449},"_264-逻辑运算符","2.6.4 逻辑运算符",[169,52452,52453],{},[164,52454],{"alt":181,"src":52455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[169,52457,52458],{},[164,52459],{"alt":181,"src":52460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[169,52462,52463],{},[164,52464],{"alt":181,"src":52465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[169,52467,52468],{},"上述题目选D",[169,52470,52471],{},"与真2假1；或真1假2",[29,52473,52475],{"id":52474},"_265-运算符优先级","2.6.5 运算符优先级",[169,52477,52478],{},[164,52479],{"alt":181,"src":52480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[169,52482,52483],{},"先算逻辑与，后算逻辑或",[14,52485,52487],{"id":52486},"_27-语句","2.7 语句",[169,52489,52490],{},"表达式：是可以被求值的代码，会有结果给我们",[169,52492,52493],{},"语句：语句是可以被执行的代码，例如prompt()",[169,52495,52496],{},[164,52497],{"alt":181,"src":52498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[169,52500,52501],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[169,52503,52504],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[29,52506,52508],{"id":52507},"_271-分支语句","2.7.1 分支语句",[23459,52510,52512],{"id":52511},"_2711-if分支语句","2.7.1.1 if分支语句",[169,52514,52515],{},"if语句单行简单的话，可以不写{}，写在一行就行",[34,52517,52518],{},[22,52519,52520],{},"单分支语句",[169,52522,52523],{},[164,52524],{"alt":181,"src":52525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[169,52527,52528],{},"除了0，所有数字都为真",[176,52530,52532],{"className":52087,"code":52531,"language":52089,"meta":181,"style":181},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[183,52533,52534,52539,52544,52549,52553],{"__ignoreMap":181},[186,52535,52536],{"class":188,"line":189},[186,52537,52538],{"class":202},"if（0) {\n",[186,52540,52541],{"class":188,"line":49},[186,52542,52543],{"class":202},"    let a=1\n",[186,52545,52546],{"class":188,"line":219},[186,52547,52548],{"class":202},"    alert(typeof a)\n",[186,52550,52551],{"class":188,"line":225},[186,52552,639],{"class":202},[186,52554,52555],{"class":188,"line":242},[186,52556,52557],{"class":202},"不输出，括号为假\n",[34,52559,52560],{"start":49},[22,52561,52562],{},"双分支语句",[169,52564,52565],{},[164,52566],{"alt":181,"src":52567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[34,52569,52570],{"start":219},[22,52571,52572],{},"多分支语句",[169,52574,52575],{},[164,52576],{"alt":181,"src":52577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23459,52579,52581],{"id":52580},"_2712-三元运算符","2.7.1.2 三元运算符",[169,52583,52584],{},[164,52585],{"alt":181,"src":52586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23459,52588,52590],{"id":52589},"_2713-switch语句","2.7.1.3 switch语句",[169,52592,52593],{},[164,52594],{"alt":181,"src":52595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[169,52597,52598],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[29,52600,52602],{"id":52601},"_272-循环语句","2.7.2 循环语句",[23459,52604,52606],{"id":52605},"_2721-断点演示","2.7.2.1 断点演示",[169,52608,52609],{},[164,52610],{"alt":181,"src":52611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23459,52613,52615],{"id":52614},"_2722-while循环","2.7.2.2 while循环",[169,52617,52618],{},[164,52619],{"alt":181,"src":52620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[169,52622,52623],{},[164,52624],{"alt":181,"src":52625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23459,52627,52629],{"id":52628},"_2723-for循环","2.7.2.3 for循环",[169,52631,52632],{},[164,52633],{"alt":181,"src":52634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[169,52636,52637],{},"for(;;) {",[169,52639,2553],{},[169,52641,52642],{},"表示无限循环",[169,52644,52645],{},[164,52646],{"alt":181,"src":52647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23459,52649,52651],{"id":52650},"_2724-循环的退出","2.7.2.4 循环的退出",[169,52653,52654],{},[164,52655],{"alt":181,"src":52656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52658,52660],{"id":52659},"_28-数组","2.8 数组",[29,52662,52664],{"id":52663},"_281-基础认识","2.8.1 基础认识",[169,52666,52667],{},[164,52668],{"alt":181,"src":52669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[169,52671,52672],{},[164,52673],{"alt":181,"src":52674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[169,52676,52677],{},[164,52678],{"alt":181,"src":52679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[169,52681,52682],{},[164,52683],{"alt":181,"src":52684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[29,52686,52688],{"id":52687},"_282-操作数组","2.8.2 操作数组",[169,52690,52691],{},[164,52692],{"alt":181,"src":52693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[34,52695,52696],{},[22,52697,52698],{},"添加元素",[169,52700,52701],{},[164,52702],{"alt":181,"src":52703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[169,52705,52706],{},"console.log(arr.push('green'))",[169,52708,52709],{},"输出结果：为新数组的长度",[169,52711,52712],{},[164,52713],{"alt":181,"src":52714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[169,52716,52717],{},"push用的非常多，一定要记住",[34,52719,52720],{},[22,52721,52722],{},"删除元素",[169,52724,52725],{},[164,52726],{"alt":181,"src":52727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[169,52729,52730],{},[164,52731],{"alt":181,"src":52732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[169,52734,52735],{},[164,52736],{"alt":181,"src":52737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[29,52739,52741],{"id":52740},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[176,52743,52745],{"className":52087,"code":52744,"language":52089,"meta":181,"style":181},"\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",[183,52746,52747,52760,52776,52780,52789,52807,52831,52853,52867,52875,52882,52893,52904,52908,52912,52919,52931,52945,52958,52977,52994,53009,53021,53033,53045,53049,53053,53063,53073,53085,53097,53109,53120,53124,53128,53140,53144,53158,53162,53166,53177,53191,53203,53216,53220,53229,53237,53241,53250,53254,53263,53268,53273,53286,53314,53319,53324,53349,53354,53358,53363,53368,53383,53387,53392,53422,53434,53450,53466,53480,53485,53492,53496,53501,53514,53522,53530,53534],{"__ignoreMap":181},[186,52748,52749,52752,52755,52758],{"class":188,"line":189},[186,52750,52751],{"class":202},"\u003C!",[186,52753,52754],{"class":523},"DOCTYPE",[186,52756,52757],{"class":198}," html",[186,52759,552],{"class":202},[186,52761,52762,52764,52766,52769,52771,52774],{"class":188,"line":49},[186,52763,520],{"class":202},[186,52765,52089],{"class":523},[186,52767,52768],{"class":198}," lang",[186,52770,529],{"class":202},[186,52772,52773],{"class":532},"\"en\"",[186,52775,552],{"class":202},[186,52777,52778],{"class":188,"line":219},[186,52779,3867],{"emptyLinePlaceholder":1551},[186,52781,52782,52784,52787],{"class":188,"line":225},[186,52783,520],{"class":202},[186,52785,52786],{"class":523},"head",[186,52788,552],{"class":202},[186,52790,52791,52794,52797,52800,52802,52805],{"class":188,"line":242},[186,52792,52793],{"class":202},"    \u003C",[186,52795,52796],{"class":523},"meta",[186,52798,52799],{"class":198}," charset",[186,52801,529],{"class":202},[186,52803,52804],{"class":532},"\"UTF-8\"",[186,52806,552],{"class":202},[186,52808,52809,52811,52813,52816,52818,52821,52824,52826,52829],{"class":188,"line":248},[186,52810,52793],{"class":202},[186,52812,52796],{"class":523},[186,52814,52815],{"class":198}," http-equiv",[186,52817,529],{"class":202},[186,52819,52820],{"class":532},"\"X-UA-Compatible\"",[186,52822,52823],{"class":198}," content",[186,52825,529],{"class":202},[186,52827,52828],{"class":532},"\"IE=edge\"",[186,52830,552],{"class":202},[186,52832,52833,52835,52837,52839,52841,52844,52846,52848,52851],{"class":188,"line":265},[186,52834,52793],{"class":202},[186,52836,52796],{"class":523},[186,52838,16382],{"class":198},[186,52840,529],{"class":202},[186,52842,52843],{"class":532},"\"viewport\"",[186,52845,52823],{"class":198},[186,52847,529],{"class":202},[186,52849,52850],{"class":532},"\"width=device-width, initial-scale=1.0\"",[186,52852,552],{"class":202},[186,52854,52855,52857,52860,52863,52865],{"class":188,"line":271},[186,52856,52793],{"class":202},[186,52858,52859],{"class":523},"title",[186,52861,52862],{"class":202},">Document\u003C\u002F",[186,52864,52859],{"class":523},[186,52866,552],{"class":202},[186,52868,52869,52871,52873],{"class":188,"line":288},[186,52870,52793],{"class":202},[186,52872,1524],{"class":523},[186,52874,552],{"class":202},[186,52876,52877,52880],{"class":188,"line":294},[186,52878,52879],{"class":523},"        *",[186,52881,622],{"class":202},[186,52883,52884,52887,52889,52891],{"class":188,"line":1212},[186,52885,52886],{"class":206},"            margin",[186,52888,210],{"class":202},[186,52890,1803],{"class":206},[186,52892,634],{"class":202},[186,52894,52895,52898,52900,52902],{"class":188,"line":1223},[186,52896,52897],{"class":206},"            padding",[186,52899,210],{"class":202},[186,52901,1803],{"class":206},[186,52903,634],{"class":202},[186,52905,52906],{"class":188,"line":1236},[186,52907,3996],{"class":202},[186,52909,52910],{"class":188,"line":3096},[186,52911,3867],{"emptyLinePlaceholder":1551},[186,52913,52914,52917],{"class":188,"line":3110},[186,52915,52916],{"class":198},"        .box",[186,52918,622],{"class":202},[186,52920,52921,52924,52926,52929],{"class":188,"line":3115},[186,52922,52923],{"class":206},"            display",[186,52925,210],{"class":202},[186,52927,52928],{"class":206},"flex",[186,52930,634],{"class":202},[186,52932,52933,52936,52938,52941,52943],{"class":188,"line":3121},[186,52934,52935],{"class":206},"            width",[186,52937,210],{"class":202},[186,52939,52940],{"class":206},"700",[186,52942,804],{"class":669},[186,52944,634],{"class":202},[186,52946,52947,52950,52952,52954,52956],{"class":188,"line":3142},[186,52948,52949],{"class":206},"            height",[186,52951,210],{"class":202},[186,52953,5439],{"class":206},[186,52955,804],{"class":669},[186,52957,634],{"class":202},[186,52959,52960,52963,52965,52967,52969,52972,52975],{"class":188,"line":3147},[186,52961,52962],{"class":206},"            border-left",[186,52964,210],{"class":202},[186,52966,1829],{"class":206},[186,52968,804],{"class":669},[186,52970,52971],{"class":206}," solid",[186,52973,52974],{"class":206}," pink",[186,52976,634],{"class":202},[186,52978,52979,52982,52984,52986,52988,52990,52992],{"class":188,"line":3161},[186,52980,52981],{"class":206},"            border-bottom",[186,52983,210],{"class":202},[186,52985,1829],{"class":206},[186,52987,804],{"class":669},[186,52989,52971],{"class":206},[186,52991,52974],{"class":206},[186,52993,634],{"class":202},[186,52995,52996,52998,53000,53002,53004,53007],{"class":188,"line":3166},[186,52997,52886],{"class":206},[186,52999,210],{"class":202},[186,53001,666],{"class":206},[186,53003,804],{"class":669},[186,53005,53006],{"class":206}," auto",[186,53008,634],{"class":202},[186,53010,53011,53014,53016,53019],{"class":188,"line":3195},[186,53012,53013],{"class":206},"            justify-content",[186,53015,210],{"class":202},[186,53017,53018],{"class":206},"space-around",[186,53020,634],{"class":202},[186,53022,53023,53026,53028,53031],{"class":188,"line":3200},[186,53024,53025],{"class":206},"            align-items",[186,53027,210],{"class":202},[186,53029,53030],{"class":206},"flex-end",[186,53032,634],{"class":202},[186,53034,53035,53038,53040,53043],{"class":188,"line":3217},[186,53036,53037],{"class":206},"            text-align",[186,53039,210],{"class":202},[186,53041,53042],{"class":206},"center",[186,53044,634],{"class":202},[186,53046,53047],{"class":188,"line":3222},[186,53048,3996],{"class":202},[186,53050,53051],{"class":188,"line":3227},[186,53052,3867],{"emptyLinePlaceholder":1551},[186,53054,53055,53057,53059,53061],{"class":188,"line":3232},[186,53056,52916],{"class":198},[186,53058,2567],{"class":669},[186,53060,1450],{"class":523},[186,53062,622],{"class":202},[186,53064,53065,53067,53069,53071],{"class":188,"line":3246},[186,53066,52923],{"class":206},[186,53068,210],{"class":202},[186,53070,52928],{"class":206},[186,53072,634],{"class":202},[186,53074,53075,53077,53079,53081,53083],{"class":188,"line":3251},[186,53076,52935],{"class":206},[186,53078,210],{"class":202},[186,53080,666],{"class":206},[186,53082,804],{"class":669},[186,53084,634],{"class":202},[186,53086,53087,53090,53092,53095],{"class":188,"line":4044},[186,53088,53089],{"class":206},"            background-color",[186,53091,210],{"class":202},[186,53093,53094],{"class":206},"pink",[186,53096,634],{"class":202},[186,53098,53099,53102,53104,53107],{"class":188,"line":4058},[186,53100,53101],{"class":206},"            flex-direction",[186,53103,210],{"class":202},[186,53105,53106],{"class":206},"column",[186,53108,634],{"class":202},[186,53110,53111,53113,53115,53118],{"class":188,"line":4066},[186,53112,53013],{"class":206},[186,53114,210],{"class":202},[186,53116,53117],{"class":206},"space-between",[186,53119,634],{"class":202},[186,53121,53122],{"class":188,"line":4071},[186,53123,3996],{"class":202},[186,53125,53126],{"class":188,"line":4077},[186,53127,3867],{"emptyLinePlaceholder":1551},[186,53129,53130,53132,53135,53138],{"class":188,"line":4083},[186,53131,52916],{"class":198},[186,53133,53134],{"class":523}," div",[186,53136,53137],{"class":523}," span",[186,53139,622],{"class":202},[186,53141,53142],{"class":188,"line":4088},[186,53143,3867],{"emptyLinePlaceholder":1551},[186,53145,53146,53149,53151,53154,53156],{"class":188,"line":9411},[186,53147,53148],{"class":206},"            margin-top",[186,53150,210],{"class":202},[186,53152,53153],{"class":206},"-20",[186,53155,804],{"class":669},[186,53157,634],{"class":202},[186,53159,53160],{"class":188,"line":9435},[186,53161,3996],{"class":202},[186,53163,53164],{"class":188,"line":9440},[186,53165,3867],{"emptyLinePlaceholder":1551},[186,53167,53168,53170,53172,53175],{"class":188,"line":9446},[186,53169,52916],{"class":198},[186,53171,53134],{"class":523},[186,53173,53174],{"class":523}," h4",[186,53176,622],{"class":202},[186,53178,53179,53182,53184,53187,53189],{"class":188,"line":9473},[186,53180,53181],{"class":206},"            margin-bottom",[186,53183,210],{"class":202},[186,53185,53186],{"class":206},"-35",[186,53188,804],{"class":669},[186,53190,634],{"class":202},[186,53192,53193,53195,53197,53199,53201],{"class":188,"line":9478},[186,53194,52935],{"class":206},[186,53196,210],{"class":202},[186,53198,1966],{"class":206},[186,53200,804],{"class":669},[186,53202,634],{"class":202},[186,53204,53205,53208,53210,53212,53214],{"class":188,"line":9484},[186,53206,53207],{"class":206},"            margin-left",[186,53209,210],{"class":202},[186,53211,854],{"class":206},[186,53213,804],{"class":669},[186,53215,634],{"class":202},[186,53217,53218],{"class":188,"line":9496},[186,53219,3996],{"class":202},[186,53221,53222,53225,53227],{"class":188,"line":9508},[186,53223,53224],{"class":202},"    \u003C\u002F",[186,53226,1524],{"class":523},[186,53228,552],{"class":202},[186,53230,53231,53233,53235],{"class":188,"line":9520},[186,53232,1470],{"class":202},[186,53234,52786],{"class":523},[186,53236,552],{"class":202},[186,53238,53239],{"class":188,"line":11179},[186,53240,3867],{"emptyLinePlaceholder":1551},[186,53242,53243,53245,53248],{"class":188,"line":11204},[186,53244,520],{"class":202},[186,53246,53247],{"class":523},"body",[186,53249,552],{"class":202},[186,53251,53252],{"class":188,"line":11227},[186,53253,3867],{"emptyLinePlaceholder":1551},[186,53255,53256,53258,53261],{"class":188,"line":11251},[186,53257,52793],{"class":202},[186,53259,53260],{"class":523},"script",[186,53262,552],{"class":202},[186,53264,53265],{"class":188,"line":11256},[186,53266,53267],{"class":192},"        \u002F\u002F 1. 四次弹框效果\n",[186,53269,53270],{"class":188,"line":11261},[186,53271,53272],{"class":192},"        \u002F\u002F 声明一个新的数组\n",[186,53274,53275,53278,53281,53283],{"class":188,"line":11266},[186,53276,53277],{"class":669},"        let",[186,53279,53280],{"class":202}," arr ",[186,53282,529],{"class":669},[186,53284,53285],{"class":202}," []\n",[186,53287,53288,53290,53292,53295,53297,53299,53301,53303,53305,53308,53310,53312],{"class":188,"line":11275},[186,53289,4869],{"class":669},[186,53291,3126],{"class":202},[186,53293,53294],{"class":669},"let",[186,53296,10901],{"class":202},[186,53298,529],{"class":669},[186,53300,26577],{"class":206},[186,53302,10908],{"class":202},[186,53304,3059],{"class":669},[186,53306,53307],{"class":206}," 4",[186,53309,4680],{"class":202},[186,53311,3759],{"class":669},[186,53313,13905],{"class":202},[186,53315,53316],{"class":188,"line":11280},[186,53317,53318],{"class":192},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[186,53320,53321],{"class":188,"line":11286},[186,53322,53323],{"class":192},"            \u002F\u002F arr.push(num)\n",[186,53325,53326,53329,53332,53334,53337,53339,53342,53344,53347],{"class":188,"line":11307},[186,53327,53328],{"class":202},"            arr.",[186,53330,53331],{"class":198},"push",[186,53333,832],{"class":202},[186,53335,53336],{"class":198},"prompt",[186,53338,832],{"class":202},[186,53340,53341],{"class":532},"`请输入第${",[186,53343,2051],{"class":202},[186,53345,53346],{"class":532},"}季度的数据:`",[186,53348,31952],{"class":202},[186,53350,53351],{"class":188,"line":11313},[186,53352,53353],{"class":192},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[186,53355,53356],{"class":188,"line":11327},[186,53357,3996],{"class":202},[186,53359,53360],{"class":188,"line":11333},[186,53361,53362],{"class":192},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[186,53364,53365],{"class":188,"line":11360},[186,53366,53367],{"class":192},"        \u002F\u002F 盒子开头\n",[186,53369,53370,53373,53376,53378,53381],{"class":188,"line":11369},[186,53371,53372],{"class":202},"        document.",[186,53374,53375],{"class":198},"write",[186,53377,832],{"class":202},[186,53379,53380],{"class":532},"` \u003Cdiv class=\"box\">`",[186,53382,1629],{"class":202},[186,53384,53385],{"class":188,"line":11375},[186,53386,3867],{"emptyLinePlaceholder":1551},[186,53388,53389],{"class":188,"line":11383},[186,53390,53391],{"class":192},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[186,53393,53394,53396,53398,53400,53402,53404,53406,53408,53410,53413,53416,53418,53420],{"class":188,"line":11388},[186,53395,4869],{"class":669},[186,53397,3126],{"class":202},[186,53399,53294],{"class":669},[186,53401,10901],{"class":202},[186,53403,529],{"class":669},[186,53405,5559],{"class":206},[186,53407,10908],{"class":202},[186,53409,520],{"class":669},[186,53411,53412],{"class":202}," arr.",[186,53414,53415],{"class":206},"length",[186,53417,4680],{"class":202},[186,53419,3759],{"class":669},[186,53421,13905],{"class":202},[186,53423,53424,53427,53429,53431],{"class":188,"line":18065},[186,53425,53426],{"class":202},"            document.",[186,53428,53375],{"class":198},[186,53430,832],{"class":202},[186,53432,53433],{"class":532},"`\n",[186,53435,53436,53439,53441,53443,53445,53447],{"class":188,"line":18071},[186,53437,53438],{"class":532},"              \u003Cdiv style=\"height: ${",[186,53440,5346],{"class":202},[186,53442,2498],{"class":532},[186,53444,2051],{"class":202},[186,53446,2547],{"class":532},[186,53448,53449],{"class":532},"}px;\">\n",[186,53451,53452,53455,53457,53459,53461,53463],{"class":188,"line":18094},[186,53453,53454],{"class":532},"                \u003Cspan>${",[186,53456,5346],{"class":202},[186,53458,2498],{"class":532},[186,53460,2051],{"class":202},[186,53462,2547],{"class":532},[186,53464,53465],{"class":532},"}\u003C\u002Fspan>\n",[186,53467,53468,53471,53473,53475,53477],{"class":188,"line":18100},[186,53469,53470],{"class":532},"                \u003Ch4>第${",[186,53472,2051],{"class":202},[186,53474,47020],{"class":669},[186,53476,26577],{"class":206},[186,53478,53479],{"class":532},"}季度\u003C\u002Fh4>\n",[186,53481,53482],{"class":188,"line":18123},[186,53483,53484],{"class":532},"              \u003C\u002Fdiv>          \n",[186,53486,53487,53490],{"class":188,"line":18137},[186,53488,53489],{"class":532},"            `",[186,53491,1629],{"class":202},[186,53493,53494],{"class":188,"line":18157},[186,53495,3996],{"class":202},[186,53497,53498],{"class":188,"line":18163},[186,53499,53500],{"class":192},"        \u002F\u002F 盒子结尾\n",[186,53502,53503,53505,53507,53509,53512],{"class":188,"line":18174},[186,53504,53372],{"class":202},[186,53506,53375],{"class":198},[186,53508,832],{"class":202},[186,53510,53511],{"class":532},"` \u003C\u002Fdiv>`",[186,53513,1629],{"class":202},[186,53515,53516,53518,53520],{"class":188,"line":18197},[186,53517,53224],{"class":202},[186,53519,53260],{"class":523},[186,53521,552],{"class":202},[186,53523,53524,53526,53528],{"class":188,"line":18219},[186,53525,1470],{"class":202},[186,53527,53247],{"class":523},[186,53529,552],{"class":202},[186,53531,53532],{"class":188,"line":18224},[186,53533,3867],{"emptyLinePlaceholder":1551},[186,53535,53536,53538,53540],{"class":188,"line":18230},[186,53537,1470],{"class":202},[186,53539,52089],{"class":523},[186,53541,552],{"class":202},[29,53543,53545],{"id":53544},"_284-冒泡排序","2.8.4 冒泡排序",[176,53547,53549],{"className":52087,"code":53548,"language":52089,"meta":181,"style":181},"\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",[183,53550,53551,53561,53575,53579,53587,53602,53622,53634,53642,53646,53654,53662,53694,53727,53764,53769,53788,53793,53806,53821,53837,53841,53846,53850,53860,53869,53877,53881],{"__ignoreMap":181},[186,53552,53553,53555,53557,53559],{"class":188,"line":189},[186,53554,52751],{"class":202},[186,53556,52754],{"class":523},[186,53558,52757],{"class":198},[186,53560,552],{"class":202},[186,53562,53563,53565,53567,53569,53571,53573],{"class":188,"line":49},[186,53564,520],{"class":202},[186,53566,52089],{"class":523},[186,53568,52768],{"class":198},[186,53570,529],{"class":202},[186,53572,52773],{"class":532},[186,53574,552],{"class":202},[186,53576,53577],{"class":188,"line":219},[186,53578,3867],{"emptyLinePlaceholder":1551},[186,53580,53581,53583,53585],{"class":188,"line":225},[186,53582,520],{"class":202},[186,53584,52786],{"class":523},[186,53586,552],{"class":202},[186,53588,53589,53592,53594,53596,53598,53600],{"class":188,"line":242},[186,53590,53591],{"class":202},"  \u003C",[186,53593,52796],{"class":523},[186,53595,52799],{"class":198},[186,53597,529],{"class":202},[186,53599,52804],{"class":532},[186,53601,552],{"class":202},[186,53603,53604,53606,53608,53610,53612,53614,53616,53618,53620],{"class":188,"line":248},[186,53605,53591],{"class":202},[186,53607,52796],{"class":523},[186,53609,16382],{"class":198},[186,53611,529],{"class":202},[186,53613,52843],{"class":532},[186,53615,52823],{"class":198},[186,53617,529],{"class":202},[186,53619,52850],{"class":532},[186,53621,552],{"class":202},[186,53623,53624,53626,53628,53630,53632],{"class":188,"line":265},[186,53625,53591],{"class":202},[186,53627,52859],{"class":523},[186,53629,52862],{"class":202},[186,53631,52859],{"class":523},[186,53633,552],{"class":202},[186,53635,53636,53638,53640],{"class":188,"line":271},[186,53637,1470],{"class":202},[186,53639,52786],{"class":523},[186,53641,552],{"class":202},[186,53643,53644],{"class":188,"line":288},[186,53645,3867],{"emptyLinePlaceholder":1551},[186,53647,53648,53650,53652],{"class":188,"line":294},[186,53649,520],{"class":202},[186,53651,53247],{"class":523},[186,53653,552],{"class":202},[186,53655,53656,53658,53660],{"class":188,"line":1212},[186,53657,53591],{"class":202},[186,53659,53260],{"class":523},[186,53661,552],{"class":202},[186,53663,53664,53667,53669,53671,53674,53676,53678,53680,53682,53684,53686,53688,53690,53692],{"class":188,"line":1223},[186,53665,53666],{"class":669},"    let",[186,53668,53280],{"class":202},[186,53670,529],{"class":669},[186,53672,53673],{"class":202}," [",[186,53675,1930],{"class":206},[186,53677,13898],{"class":202},[186,53679,1904],{"class":206},[186,53681,13898],{"class":202},[186,53683,1691],{"class":206},[186,53685,13898],{"class":202},[186,53687,1697],{"class":206},[186,53689,13898],{"class":202},[186,53691,1829],{"class":206},[186,53693,34701],{"class":202},[186,53695,53696,53698,53700,53702,53704,53706,53708,53710,53712,53714,53716,53719,53721,53723,53725],{"class":188,"line":1236},[186,53697,4667],{"class":669},[186,53699,3126],{"class":202},[186,53701,53294],{"class":669},[186,53703,10901],{"class":202},[186,53705,529],{"class":669},[186,53707,5559],{"class":206},[186,53709,10908],{"class":202},[186,53711,520],{"class":669},[186,53713,53412],{"class":202},[186,53715,53415],{"class":206},[186,53717,53718],{"class":669}," -",[186,53720,26577],{"class":206},[186,53722,4680],{"class":202},[186,53724,3759],{"class":669},[186,53726,13905],{"class":202},[186,53728,53729,53732,53734,53736,53738,53740,53742,53744,53746,53748,53750,53752,53754,53756,53758,53760,53762],{"class":188,"line":3096},[186,53730,53731],{"class":669},"      for",[186,53733,3126],{"class":202},[186,53735,53294],{"class":669},[186,53737,10963],{"class":202},[186,53739,529],{"class":669},[186,53741,5559],{"class":206},[186,53743,10970],{"class":202},[186,53745,520],{"class":669},[186,53747,53412],{"class":202},[186,53749,53415],{"class":206},[186,53751,53718],{"class":669},[186,53753,10901],{"class":202},[186,53755,2142],{"class":669},[186,53757,26577],{"class":206},[186,53759,10977],{"class":202},[186,53761,3759],{"class":669},[186,53763,13905],{"class":202},[186,53765,53766],{"class":188,"line":3110},[186,53767,53768],{"class":192},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[186,53770,53771,53773,53776,53778,53781,53783,53785],{"class":188,"line":3115},[186,53772,3964],{"class":669},[186,53774,53775],{"class":202}," (arr[j] ",[186,53777,2567],{"class":669},[186,53779,53780],{"class":202}," arr[j ",[186,53782,2091],{"class":669},[186,53784,26577],{"class":206},[186,53786,53787],{"class":202},"]) {\n",[186,53789,53790],{"class":188,"line":3121},[186,53791,53792],{"class":192},"          \u002F\u002F 交换两个变量\n",[186,53794,53795,53798,53801,53803],{"class":188,"line":3142},[186,53796,53797],{"class":669},"          let",[186,53799,53800],{"class":202}," tmp ",[186,53802,529],{"class":669},[186,53804,53805],{"class":202}," arr[j]\n",[186,53807,53808,53811,53813,53815,53817,53819],{"class":188,"line":3147},[186,53809,53810],{"class":202},"          arr[j] ",[186,53812,529],{"class":669},[186,53814,53780],{"class":202},[186,53816,2091],{"class":669},[186,53818,26577],{"class":206},[186,53820,34701],{"class":202},[186,53822,53823,53826,53828,53830,53832,53834],{"class":188,"line":3161},[186,53824,53825],{"class":202},"          arr[j ",[186,53827,2091],{"class":669},[186,53829,26577],{"class":206},[186,53831,5909],{"class":202},[186,53833,529],{"class":669},[186,53835,53836],{"class":202}," tmp\n",[186,53838,53839],{"class":188,"line":3166},[186,53840,3996],{"class":202},[186,53842,53843],{"class":188,"line":3195},[186,53844,53845],{"class":202},"      }\n",[186,53847,53848],{"class":188,"line":3200},[186,53849,3654],{"class":202},[186,53851,53852,53855,53857],{"class":188,"line":3217},[186,53853,53854],{"class":202},"    document.",[186,53856,53375],{"class":198},[186,53858,53859],{"class":202},"(arr)\n",[186,53861,53862,53865,53867],{"class":188,"line":3222},[186,53863,53864],{"class":202},"  \u003C\u002F",[186,53866,53260],{"class":523},[186,53868,552],{"class":202},[186,53870,53871,53873,53875],{"class":188,"line":3227},[186,53872,1470],{"class":202},[186,53874,53247],{"class":523},[186,53876,552],{"class":202},[186,53878,53879],{"class":188,"line":3232},[186,53880,3867],{"emptyLinePlaceholder":1551},[186,53882,53883,53885,53887],{"class":188,"line":3246},[186,53884,1470],{"class":202},[186,53886,52089],{"class":523},[186,53888,552],{"class":202},[169,53890,53891],{},[164,53892],{"alt":181,"src":53893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[169,53895,53896],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[169,53898,53899],{},"let arr = [4, 2, 5, 1, 3]",[169,53901,53902],{},"\u002F\u002F 1.升序排列写法",[169,53904,53905],{},"arr.sort(function (a, b) {",[169,53907,53908],{},"return a - b",[169,53910,53911],{},"})",[169,53913,53914],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[169,53916,53917],{},"\u002F\u002F 降序排列写法",[169,53919,53905],{},[169,53921,53922],{},"return b - a",[169,53924,53911],{},[169,53926,53927],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53929,53931],{"id":53930},"_29-函数","2.9 函数",[169,53933,53934],{},[164,53935],{"alt":181,"src":53936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[169,53938,53939],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[169,53941,53942],{},"函数的声明用function",[169,53944,53945],{},"函数里边可以嵌套函数",[29,53947,53949],{"id":53948},"_291-函数传参","2.9.1 函数传参",[169,53951,53952],{},[164,53953],{"alt":181,"src":53954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[169,53956,53957],{},[164,53958],{"alt":181,"src":53959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[19,53961,53962,53965,53968,53971,53974,53977],{},[22,53963,53964],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[22,53966,53967],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[22,53969,53970],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[22,53972,53973],{},"开发中尽量保持形参和实参个数一致",[22,53975,53976],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[22,53978,53979],{},"形参只在函数中有用，所以不需要进行声明这个变量",[169,53981,53982],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[29,53984,53986],{"id":53985},"_292-函数的返回值","2.9.2 函数的返回值",[169,53988,53989],{},[164,53990],{"alt":181,"src":53991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[169,53993,53994],{},[164,53995],{"alt":181,"src":53996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[19,53998,53999,54002,54005,54008,54011],{},[22,54000,54001],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[22,54003,54004],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[22,54006,54007],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[22,54009,54010],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[22,54012,54013],{},"断点调试:进入函数内部看执行过程F11",[29,54015,54017],{"id":54016},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[176,54019,54021],{"className":52087,"code":54020,"language":52089,"meta":181,"style":181},"    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",[183,54022,54023,54028,54033,54037,54042],{"__ignoreMap":181},[186,54024,54025],{"class":188,"line":189},[186,54026,54027],{"class":202},"    function fn(a, b) {\n",[186,54029,54030],{"class":188,"line":49},[186,54031,54032],{"class":202},"      console.log(a + b);\n",[186,54034,54035],{"class":188,"line":219},[186,54036,3654],{"class":202},[186,54038,54039],{"class":188,"line":225},[186,54040,54041],{"class":202},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[186,54043,54044],{"class":188,"line":242},[186,54045,54046],{"class":202},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[29,54048,54050],{"id":54049},"_294-作用域","2.9.4 作用域",[19,54052,54053,54059,54064,54067,54070],{},[22,54054,54055,54056],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[54,54057,54058],{},"作用域",[22,54060,54061],{},[54,54062,54063],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[22,54065,54066],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[22,54068,54069],{},"函数内部可以直接所使用全局变量",[22,54071,54072],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[169,54074,16095],{},[176,54076,54078],{"className":52087,"code":54077,"language":52089,"meta":181,"style":181},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[183,54079,54080,54085,54090,54094,54099,54104,54109],{"__ignoreMap":181},[186,54081,54082],{"class":188,"line":189},[186,54083,54084],{"class":202},"    function fun() {\n",[186,54086,54087],{"class":188,"line":49},[186,54088,54089],{"class":202},"      num = 10\n",[186,54091,54092],{"class":188,"line":219},[186,54093,3654],{"class":202},[186,54095,54096],{"class":188,"line":225},[186,54097,54098],{"class":202},"    fun()\n",[186,54100,54101],{"class":188,"line":242},[186,54102,54103],{"class":202},"    console.log(num)\n",[186,54105,54106],{"class":188,"line":248},[186,54107,54108],{"class":202},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[186,54110,54111],{"class":188,"line":265},[186,54112,54113],{"class":202},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[19,54115,54116,54119],{},[22,54117,54118],{},"函数内部的形参可以看做是局部变量",[22,54120,54121],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[169,54123,54124,54125],{},"变量访问原则： ",[54,54126,54127],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[29,54129,54131],{"id":54130},"_295-匿名函数","2.9.5 匿名函数",[169,54133,54134],{},"函数可以分为具名函数和匿名函数",[169,54136,54137],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[34,54139,54140],{},[22,54141,54142],{},"函数表达式",[169,54144,54145],{},[164,54146],{"alt":181,"src":54147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[169,54149,54150],{},"里边也可以写参数",[169,54152,54153],{},"具名函数调用位置可以随意调整；",[169,54155,54156],{},"匿名函数函数表达式形式只能在声明后才可以使用",[34,54158,54159],{"start":49},[22,54160,54161],{},"立即执行函数",[169,54163,54164],{},[164,54165],{"alt":181,"src":54166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[169,54168,54169],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[169,54171,54172],{},"写法：两个小括号，然后在第一个小括号中写function",[169,54174,54175],{},"(function () {})();",[169,54177,54178],{},"不要落下最后的;",[169,54180,54181],{},"立即执行函数必须要加;",[169,54183,54184],{},"分号写前写后都没问题",[169,54186,54187],{},"写前：",[169,54189,54190],{},"(function() {})()",[169,54192,54193],{},";(function () {})();",[169,54195,54196],{},"写后:",[169,54198,54199],{},"(function() {})();",[169,54201,54175],{},[169,54203,54204],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[169,54206,54207],{},"还有一种写法：",[169,54209,54210],{},"(function(){}());",[169,54212,54213],{},"或者:",[169,54215,54216],{},"!function(){}();",[169,54218,54219],{},"立即执行函数有时候也是可以加名字的：",[169,54221,54222],{},"(function flexible(window,document) {}(window,document));",[169,54224,54225],{},"省一些调用方法",[29,54227,54229],{"id":54228},"_296-逻辑中断","2.9.6 逻辑中断!!!",[169,54231,54232],{},[164,54233],{"alt":181,"src":54234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[169,54236,54237],{},"这样就不用非得给x,y初始化了",[169,54239,54240],{},[164,54241],{"alt":181,"src":54242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[169,54244,54245],{},"代码执行时先看左边",[169,54247,54248],{},"例如：console.log(false && 3+5)",[169,54250,54251],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[169,54253,54254],{},"&&都是真时，就返回最后一个真值",[169,54256,54257],{},"console.log(11 && 22)",[169,54259,54260],{},"输出22",[169,54262,54263],{},"逻辑与：遇真则真",[169,54265,16095],{},[169,54267,54268],{},"let age=1",[169,54270,54271],{},"console.log(11 || age++)",[169,54273,54274],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[169,54276,54277],{},"console.log(11 || 22)",[169,54279,54280],{},"||逻辑或遇到真就直接输出，输出结果为11",[169,54282,54283],{},"||如果都是假的话，就取最后一个假的值了",[29,54285,54287],{"id":54286},"_297-转换为boolean型","2.9.7 转换为Boolean型",[169,54289,54290],{},"显示转换：",[169,54292,54293,54296,54297],{},[54,54294,54295],{},"记忆","： ",[54,54298,54299],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[169,54301,54302],{},"空字符串为假，其他字符串全为真",[169,54304,54305],{},[164,54306],{"alt":181,"src":54307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[169,54309,54310],{},"隐式转换：",[169,54312,54313],{},[164,54314],{"alt":181,"src":54315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[169,54317,54318],{},"隐式转换:",[169,54320,54321],{},"null+3=3",[169,54323,54324],{},"undefined+3=NaN",[169,54326,54327],{},"null==undefined 输出true,他两个都当0看",[169,54329,54330],{},"null===undefined 输出false",[169,54332,54333],{},"undefined做任何操作都是NaN",[169,54335,54336],{},"NaN不等于NaN，NaN表示计算错误",[14,54338,54340],{"id":54339},"_210-对象","2.10 对象",[29,54342,54344],{"id":54343},"_2101-对象的介绍","2.10.1 对象的介绍",[169,54346,54347],{},"对象也是一种数据类型，里边的数据是无序的",[169,54349,54350],{},"对象由属性和方法组成",[169,54352,54353],{},[164,54354],{"alt":181,"src":54355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[169,54357,54358],{},[164,54359],{"alt":181,"src":54360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[169,54362,54363],{},[164,54364],{"alt":181,"src":54365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[29,54367,54369],{"id":54368},"_2102-对象属性","2.10.2 对象属性",[169,54371,54372],{},[164,54373],{"alt":181,"src":54374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[34,54376,54377],{},[22,54378,54379],{},"查询对象",[169,54381,54382],{},"对象名.属性 goods.uname",[169,54384,54385],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[169,54387,54388],{},"不带字符串的属性名也可以使用 对象名['属性名']",[169,54390,54391],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[169,54393,54394],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[34,54396,54397],{"start":49},[22,54398,54399],{},"重新赋值",[169,54401,54402],{},"对象名.属性=新值",[34,54404,54405],{"start":219},[22,54406,54407],{},"增加新数据",[169,54409,54402],{},[34,54411,54412],{"start":225},[22,54413,54414],{},"删除对象中的属性",[169,54416,54417],{},"delete 对象名.属性",[29,54419,54421],{"id":54420},"_2103-对象方法","2.10.3 对象方法",[169,54423,54424],{},[164,54425],{"alt":181,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[169,54428,54429],{},"后边跟的是匿名函数",[169,54431,54432],{},"对象外面的叫函数；对象内部的叫方法",[169,54434,54435],{},[164,54436],{"alt":181,"src":54437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[29,54439,54441],{"id":54440},"_2104-遍历对象","2.10.4 遍历对象",[169,54443,54444],{},"理解为加括号的python字典遍历",[169,54446,54447],{},[164,54448],{"alt":181,"src":54449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[169,54451,54452],{},"k是字符串类型",[169,54454,54455],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[176,54457,54459],{"className":52087,"code":54458,"language":52089,"meta":181,"style":181},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[183,54460,54461,54466,54471,54476,54481],{"__ignoreMap":181},[186,54462,54463],{"class":188,"line":189},[186,54464,54465],{"class":202},"   let arr = [1, 2, 3]\n",[186,54467,54468],{"class":188,"line":49},[186,54469,54470],{"class":202},"    for (let k in arr) {\n",[186,54472,54473],{"class":188,"line":219},[186,54474,54475],{"class":202},"      console.log(k)\n",[186,54477,54478],{"class":188,"line":225},[186,54479,54480],{"class":202},"      console.log(arr[k])\n",[186,54482,54483],{"class":188,"line":242},[186,54484,3654],{"class":202},[169,54486,54487],{},[164,54488],{"alt":181,"src":54489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[169,54491,54492],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[169,54494,54495],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[169,54497,54498],{},"for in 得到的k是属性名",[53260,54500,54501],{},"\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",[169,54503,54504],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[29,54506,54508],{"id":54507},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[169,54510,54511],{},"数组中放对象信息",[176,54513,54517],{"className":54514,"code":54515,"language":54516,"meta":181,"style":181},"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",[183,54518,54519,54527,54532,54537,54542,54547,54552,54557,54562,54567,54572,54577,54582,54586,54590],{"__ignoreMap":181},[186,54520,54521,54523,54525],{"class":188,"line":189},[186,54522,520],{"class":202},[186,54524,53260],{"class":523},[186,54526,552],{"class":202},[186,54528,54529],{"class":188,"line":49},[186,54530,54531],{"class":202},"    let students = [\n",[186,54533,54534],{"class":188,"line":219},[186,54535,54536],{"class":202},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[186,54538,54539],{"class":188,"line":225},[186,54540,54541],{"class":202},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[186,54543,54544],{"class":188,"line":242},[186,54545,54546],{"class":202},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[186,54548,54549],{"class":188,"line":248},[186,54550,54551],{"class":202},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[186,54553,54554],{"class":188,"line":265},[186,54555,54556],{"class":202},"    ]\n",[186,54558,54559],{"class":188,"line":271},[186,54560,54561],{"class":202},"    for (let i = 0; i \u003C students.length; i++) {\n",[186,54563,54564],{"class":188,"line":288},[186,54565,54566],{"class":202},"      for (let k in students[i]) {\n",[186,54568,54569],{"class":188,"line":294},[186,54570,54571],{"class":202},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[186,54573,54574],{"class":188,"line":1212},[186,54575,54576],{"class":202},"        \u002F\u002F输出每个人的名字：\n",[186,54578,54579],{"class":188,"line":1223},[186,54580,54581],{"class":202},"        \u002F\u002Fconsole.log(students[i].name)\n",[186,54583,54584],{"class":188,"line":1236},[186,54585,53845],{"class":202},[186,54587,54588],{"class":188,"line":3096},[186,54589,3654],{"class":202},[186,54591,54592,54594,54596],{"class":188,"line":3110},[186,54593,53864],{"class":202},[186,54595,53260],{"class":523},[186,54597,552],{"class":202},[29,54599,54601],{"id":54600},"_2106-内置对象","2.10.6 内置对象",[169,54603,54604],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[34,54606,54607],{},[22,54608,54609],{},"数学对象Math",[169,54611,54612],{},[164,54613],{"alt":181,"src":54614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[169,54616,54617],{},[948,54618,54621],{"href":54619,"rel":54620},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[952],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[169,54623,54624],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[169,54626,54627],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[169,54629,54630],{},"数组不可以使用Math中的max,min来求最大值与最小值",[169,54632,54633],{},"null是一个空对象，可以认为：null类似于let obj={}",[169,54635,54636],{},"null属于对象数据类型",[34,54638,54639],{"start":49},[22,54640,54641],{},"生成任意范围随机数",[169,54643,54644],{},[164,54645],{"alt":181,"src":54646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[169,54648,54649],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[169,54651,54652],{},"乘以几就取不到几",[169,54654,54655],{},"取数组中的随机元素：",[169,54657,54658],{},"let arr = ['red', 'green', 'blue']",[169,54660,54661],{},"let random = Math.floor(Math.random() * arr.length)",[169,54663,54664],{},"console.log(arr[random])",[169,54666,54667],{},"这个函数得到的是全闭区间",[169,54669,54670],{},"function getRandom(N, M) {",[169,54672,54673],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[169,54675,2553],{},[169,54677,54678],{},"console.log(getRandom(4, 8))",[29,54680,54682],{"id":54681},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[169,54684,54685],{},[164,54686],{"alt":181,"src":54687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[169,54689,54690],{},[164,54691],{"alt":181,"src":54692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[169,54694,54695],{},[164,54696],{"alt":181,"src":54697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[169,54699,54700],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[169,54702,54703],{},[164,54704],{"alt":181,"src":54705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[169,54707,54708],{},[164,54709],{"alt":181,"src":54710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[169,54712,54713],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[169,54715,54716],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[169,54718,54719],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1524,54721,54722],{},"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":181,"searchDepth":49,"depth":49,"links":54724},[54725,54733,54734,54735,54736,54737,54744,54748,54754,54763],{"id":51922,"depth":49,"text":51923,"children":54726},[54727,54728,54729,54730,54731,54732],{"id":51926,"depth":219,"text":51927},{"id":51943,"depth":219,"text":51944},{"id":51983,"depth":219,"text":51984},{"id":51995,"depth":219,"text":51996},{"id":52004,"depth":219,"text":52005},{"id":52052,"depth":219,"text":52053},{"id":52062,"depth":49,"text":52063},{"id":52150,"depth":49,"text":52151},{"id":52173,"depth":49,"text":52174},{"id":52185,"depth":49,"text":52186},{"id":52372,"depth":49,"text":52373,"children":54738},[54739,54740,54741,54742,54743],{"id":52376,"depth":219,"text":52377},{"id":52385,"depth":219,"text":52386},{"id":52413,"depth":219,"text":52414},{"id":52449,"depth":219,"text":52450},{"id":52474,"depth":219,"text":52475},{"id":52486,"depth":49,"text":52487,"children":54745},[54746,54747],{"id":52507,"depth":219,"text":52508},{"id":52601,"depth":219,"text":52602},{"id":52659,"depth":49,"text":52660,"children":54749},[54750,54751,54752,54753],{"id":52663,"depth":219,"text":52664},{"id":52687,"depth":219,"text":52688},{"id":52740,"depth":219,"text":52741},{"id":53544,"depth":219,"text":53545},{"id":53930,"depth":49,"text":53931,"children":54755},[54756,54757,54758,54759,54760,54761,54762],{"id":53948,"depth":219,"text":53949},{"id":53985,"depth":219,"text":53986},{"id":54016,"depth":219,"text":54017},{"id":54049,"depth":219,"text":54050},{"id":54130,"depth":219,"text":54131},{"id":54228,"depth":219,"text":54229},{"id":54286,"depth":219,"text":54287},{"id":54339,"depth":49,"text":54340,"children":54764},[54765,54766,54767,54768,54769,54770,54771],{"id":54343,"depth":219,"text":54344},{"id":54368,"depth":219,"text":54369},{"id":54420,"depth":219,"text":54421},{"id":54440,"depth":219,"text":54441},{"id":54507,"depth":219,"text":54508},{"id":54600,"depth":219,"text":54601},{"id":54681,"depth":219,"text":54682},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51914,"description":1548},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54778,"title":54779,"body":54780,"description":1548,"extension":1549,"meta":78106,"navigation":1551,"path":78107,"seo":78108,"stem":78109,"__hash__":78110},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54781,"toc":78046},[54782,54785,54788,54791,54796,54799,54802,54805,54809,54813,54819,54824,54832,54839,54842,54846,54851,54856,54861,54864,54867,54878,54881,54885,54888,54891,54896,54901,54906,54909,54912,55003,55006,55011,55014,55019,55022,55025,55030,55033,55038,55042,55045,55059,55063,55068,55071,55074,55078,55083,55086,55090,55094,55099,55103,55108,55111,55114,55117,55120,55123,55126,55131,55136,55163,55166,55169,55172,55177,55180,55183,55186,55189,55193,55222,55226,55231,55236,55239,55242,55245,55250,55365,55370,55375,55536,55541,55544,55548,55553,55558,55561,55564,55567,55570,55573,55576,55579,55582,55585,55588,55591,55594,55597,55600,55602,55605,55608,55611,55616,55620,56017,56020,56026,56030,56035,57313,57318,57321,57324,57327,57332,58528,58532,58538,58543,58546,58551,58556,58560,58564,58569,58572,58577,58580,58583,58587,59495,59498,59502,59723,59726,59729,59732,59958,59961,60185,60188,60192,60197,60200,60203,60431,60434,60467,60470,60474,60479,60483,60486,60489,60492,60495,60498,60501,60504,60509,61789,61793,61796,62889,62893,62896,62899,62902,62905,62909,62912,62915,62917,62925,64403,64407,64410,64413,64416,64625,64628,64632,64636,64641,64646,64649,64652,64657,64661,64666,64669,64778,64782,64787,64792,64795,64798,64802,64807,64812,64817,64820,64823,64834,64837,64842,64847,64850,64853,64926,64930,64935,64938,64940,64951,64955,64960,66285,66288,66291,66294,66296,66299,66302,66305,66308,66311,66314,66317,66320,66323,66326,66329,66332,66334,66336,66339,66343,67437,67440,67443,67459,67473,67476,67481,67487,67492,67496,67500,67505,67509,67514,67956,67961,67964,67968,67973,67976,67979,67983,67988,67992,67997,68002,68006,68011,68016,68019,68024,68029,68033,68038,68043,68147,68150,68154,68159,68525,68528,68531,68534,68537,68540,68543,68546,68549,69845,69849,69854,69859,69862,69865,69868,69871,69873,69878,69883,69886,69890,69895,69900,69905,69908,69911,69914,69917,69920,69925,69928,69932,69937,69942,69946,69951,69954,69959,69962,69965,69968,69971,69974,69979,69982,69985,69988,69991,69995,70000,70003,70007,70012,70015,70018,70022,70051,70054,70058,70062,70067,70071,70076,70079,70082,70085,70088,70091,70094,70097,70100,70103,70106,70109,70112,70115,70118,70122,70127,70132,70135,70139,70143,70148,70151,70155,70158,70161,70166,70171,70176,70181,70186,70189,70192,70197,70202,70206,70211,70214,70219,70222,70225,70228,70231,70236,70239,70248,70252,70257,70260,70263,70267,70270,70275,70279,70282,70288,70294,70298,70324,70327,71888,71891,72384,72387,72392,72397,72402,72406,72411,72416,72421,72425,72430,72433,72436,72439,72442,72446,72449,72454,72457,72462,72466,72471,72474,72479,72484,72489,72492,72495,72500,72505,72508,72511,72515,72518,72523,72526,72531,72534,72539,72544,72549,72552,72557,72622,72625,72636,72640,72645,72817,72821,72826,72829,72832,72835,72839,72850,72854,72857,72862,72867,72870,72873,72876,72879,72882,72884,72887,72890,72893,72898,72901,72906,72909,72913,72916,72919,72933,72937,72940,72995,73000,73003,73006,73011,73014,73018,73023,73153,73157,73162,73167,73248,73253,73257,73260,73265,73270,73276,73279,73282,73285,73289,73294,73297,73308,73312,73329,76375,76379,76382,76385,76388,76409,76413,76416,76424,76427,76432,76435,76438,76443,76448,76452,76473,76477,76482,76485,76488,76491,76494,76498,76503,76506,76510,76515,76518,76523,76526,76531,76534,76539,77742,77746,77751,77754,77759,78043],[10,54783,54779],{"id":54784},"_3web-apis",[169,54786,54787],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[169,54789,54790],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[169,54792,54793],{},[164,54794],{"alt":181,"src":54795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[169,54797,54798],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[169,54800,54801],{},"建议数组和对象使用 const 来声明",[169,54803,54804],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54806,54808],{"id":54807},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[29,54810,54812],{"id":54811},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[169,54814,54815,54818],{},[183,54816,54817],{},"document"," = HTML 文件解析后的对象化表示；",[169,54820,54821,54823],{},[183,54822,54817],{}," ≠ HTML 文件本身",[169,54825,54826,54831],{},[54,54827,54828],{},[183,54829,54830],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[169,54833,54834,54838],{},[54,54835,54836],{},[183,54837,54817],{}," ：容器里的内容，代表当前加载的网页（DOM）",[169,54840,54841],{},"document实际上为window.document的简写",[29,54843,54845],{"id":54844},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[169,54847,54848],{},[164,54849],{"alt":181,"src":54850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[169,54852,54853],{},[164,54854],{"alt":181,"src":54855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[169,54857,54858],{},[164,54859],{"alt":181,"src":54860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[169,54862,54863],{},"console.dir()",[169,54865,54866],{},"dir用来打印对象",[19,54868,54869,54872,54875],{},[22,54870,54871],{},"任何一个标签，都是一个对象",[22,54873,54874],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[22,54876,54877],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[169,54879,54880],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[29,54882,54884],{"id":54883},"_312-获取dom对象","3.1.2 获取DoM对象",[169,54886,54887],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[169,54889,54890],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[169,54892,54893],{},[54,54894,54895],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[34,54897,54898],{},[22,54899,54900],{},"利用CSS选择器来获取标签元素",[169,54902,54903],{},[164,54904],{"alt":181,"src":54905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[169,54907,54908],{},"里边的选择器必须必须加引号！！！",[169,54910,54911],{},"只选择第一个元素",[176,54913,54915],{"className":54514,"code":54914,"language":54516,"meta":181,"style":181},"\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",[183,54916,54917,54925,54945,54964,54972,54977,54982,54987,54995],{"__ignoreMap":181},[186,54918,54919,54921,54923],{"class":188,"line":189},[186,54920,520],{"class":202},[186,54922,53247],{"class":523},[186,54924,552],{"class":202},[186,54926,54927,54929,54931,54933,54935,54938,54941,54943],{"class":188,"line":49},[186,54928,53591],{"class":202},[186,54930,1450],{"class":523},[186,54932,1453],{"class":198},[186,54934,529],{"class":202},[186,54936,54937],{"class":532},"\"box\"",[186,54939,54940],{"class":202},">123\u003C\u002F",[186,54942,1450],{"class":523},[186,54944,552],{"class":202},[186,54946,54947,54949,54951,54953,54955,54957,54960,54962],{"class":188,"line":219},[186,54948,53591],{"class":202},[186,54950,1450],{"class":523},[186,54952,1453],{"class":198},[186,54954,529],{"class":202},[186,54956,54937],{"class":532},[186,54958,54959],{"class":202},">456\u003C\u002F",[186,54961,1450],{"class":523},[186,54963,552],{"class":202},[186,54965,54966,54968,54970],{"class":188,"line":225},[186,54967,53591],{"class":202},[186,54969,53260],{"class":523},[186,54971,552],{"class":202},[186,54973,54974],{"class":188,"line":242},[186,54975,54976],{"class":202},"    \u002F\u002F 1.获取匹配的第一个元素\n",[186,54978,54979],{"class":188,"line":248},[186,54980,54981],{"class":202},"    const box = document.querySelector('div')\n",[186,54983,54984],{"class":188,"line":265},[186,54985,54986],{"class":202},"    console.dir(box)\n",[186,54988,54989,54991,54993],{"class":188,"line":271},[186,54990,53864],{"class":202},[186,54992,53260],{"class":523},[186,54994,552],{"class":202},[186,54996,54997,54999,55001],{"class":188,"line":288},[186,54998,1470],{"class":202},[186,55000,53247],{"class":523},[186,55002,552],{"class":202},[169,55004,55005],{},"只选123，不选456",[169,55007,55008],{},[164,55009],{"alt":181,"src":55010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[169,55012,55013],{},"返回的是一个数组的集合，不能对其进行直接修改",[169,55015,55016],{},[164,55017],{"alt":181,"src":55018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[169,55020,55021],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[169,55023,55024],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[34,55026,55027],{"start":49},[22,55028,55029],{},"其他方法来获取标签元素",[169,55031,55032],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[169,55034,55035],{},[164,55036],{"alt":181,"src":55037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[29,55039,55041],{"id":55040},"_313-操作元素的内容","3.1.3 操作元素的内容",[169,55043,55044],{},"设置修改DOM元素内容有两种方式：",[19,55046,55047,55050,55053,55056],{},[22,55048,55049],{},"元素.innerText=''",[22,55051,55052],{},"元素.innerHTML=''",[22,55054,55055],{},"不写字符串输出数字也是可以的",[22,55057,55058],{},"元素.innerHtml=1",[23459,55060,55062],{"id":55061},"_3131-innertext","3.1.3.1 innerText",[169,55064,55065],{},[164,55066],{"alt":181,"src":55067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[169,55069,55070],{},"思路：实现了修改盒子中的内容！",[169,55072,55073],{},"它只显示纯文本，不解析标签",[23459,55075,55077],{"id":55076},"_3132-innerhtml","3.1.3.2 innerHTML",[169,55079,55080],{},[164,55081],{"alt":181,"src":55082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[169,55084,55085],{},"相比于innerText，他的强大之处在于可以解析标签",[29,55087,55089],{"id":55088},"_314-操作元素属性","3.1.4 操作元素属性",[23459,55091,55093],{"id":55092},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[169,55095,55096],{},[164,55097],{"alt":181,"src":55098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23459,55100,55102],{"id":55101},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[169,55104,55105],{},[164,55106],{"alt":181,"src":55107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[169,55109,55110],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[169,55112,55113],{},"div.style.backgroundColor = 'hotpink'",[169,55115,55116],{},"如果按照css的写法，-表示减，就会出错",[169,55118,55119],{},"body元素不需要再获取，直接用就行！！！！！！",[169,55121,55122],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[169,55124,55125],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[169,55127,55128],{},[164,55129],{"alt":181,"src":55130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[169,55132,55133],{},[164,55134],{"alt":181,"src":55135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[34,55137,55138,55141,55144,55147,55150,55153],{},[22,55139,55140],{},"className这个方式就是修改很多样式的时候来使用的！",[22,55142,55143],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[22,55145,55146],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[22,55148,55149],{},"className为属性名，如果还用class的话就导致与关键字冲突",[22,55151,55152],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[22,55154,55155,55156,55161],{},"解析标签的时候就变为了",[1450,55157],{"className":55158},[55159,55160],"nav","box",[726,55162],{},[169,55164,55165],{},"例子：",[1450,55167],{"className":55168},[55159],[53260,55170,55171],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[169,55173,55174],{},[164,55175],{"alt":181,"src":55176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[169,55178,55179],{},"追加和删除类名用classList",[169,55181,55182],{},"常用于类似于开关的操作",[169,55184,55185],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[169,55187,55188],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23459,55190,55192],{"id":55191},"_3143-牢记点","3.1.4.3 牢记点",[34,55194,55195,55198,55201,55204,55207,55210,55213,55216,55219],{},[22,55196,55197],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[22,55199,55200],{},"使用style属性操作css时不要忘记引号",[22,55202,55203],{},"使用className或者classList时也不要忘记引号",[22,55205,55206],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[22,55208,55209],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[22,55211,55212],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[22,55214,55215],{},"若： let arr=['1','2',3] arr[0]=1",[22,55217,55218],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[22,55220,55221],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[29,55223,55225],{"id":55224},"_315-操作表单元素","3.1.5 操作表单元素",[34,55227,55228],{},[22,55229,55230],{},"天生的属性",[169,55232,55233],{},[164,55234],{"alt":181,"src":55235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[169,55237,55238],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[169,55240,55241],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[169,55243,55244],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[169,55246,55247],{},[164,55248],{"alt":181,"src":55249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[176,55251,55253],{"className":52087,"code":55252,"language":52089,"meta":181,"style":181},"在复选框中如果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",[183,55254,55255,55260,55292,55297,55302,55307,55312,55316,55321,55326,55343,55355,55360],{"__ignoreMap":181},[186,55256,55257],{"class":188,"line":189},[186,55258,55259],{"class":202},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[186,55261,55262,55264,55267,55270,55272,55275,55277,55279,55281,55283,55285,55287,55290],{"class":188,"line":49},[186,55263,520],{"class":202},[186,55265,55266],{"class":523},"input",[186,55268,55269],{"class":198}," type",[186,55271,529],{"class":202},[186,55273,55274],{"class":532},"\"checkbox\"",[186,55276,16382],{"class":198},[186,55278,529],{"class":202},[186,55280,9115],{"class":532},[186,55282,16421],{"class":198},[186,55284,529],{"class":202},[186,55286,9115],{"class":532},[186,55288,55289],{"class":198}," checked",[186,55291,552],{"class":202},[186,55293,55294],{"class":188,"line":219},[186,55295,55296],{"class":202},"不选的话：\n",[186,55298,55299],{"class":188,"line":225},[186,55300,55301],{"class":202},"const input = document.querySelector('input')\n",[186,55303,55304],{"class":188,"line":242},[186,55305,55306],{"class":202},"input.checked=false\n",[186,55308,55309],{"class":188,"line":248},[186,55310,55311],{"class":202},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[186,55313,55314],{"class":188,"line":265},[186,55315,3867],{"emptyLinePlaceholder":1551},[186,55317,55318],{"class":188,"line":271},[186,55319,55320],{"class":202},"禁用按钮：\n",[186,55322,55323],{"class":188,"line":288},[186,55324,55325],{"class":202},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[186,55327,55328,55330,55333,55336,55339,55341],{"class":188,"line":294},[186,55329,520],{"class":202},[186,55331,55332],{"class":523},"button",[186,55334,55335],{"class":198}," disabled",[186,55337,55338],{"class":202},">点击\u003C\u002F",[186,55340,55332],{"class":523},[186,55342,552],{"class":202},[186,55344,55345,55347,55349,55351,55353],{"class":188,"line":1212},[186,55346,520],{"class":202},[186,55348,55332],{"class":523},[186,55350,55338],{"class":202},[186,55352,55332],{"class":523},[186,55354,552],{"class":202},[186,55356,55357],{"class":188,"line":1223},[186,55358,55359],{"class":202},"const bt = document.querySelector('button')\n",[186,55361,55362],{"class":188,"line":1236},[186,55363,55364],{"class":202},"bt.disabled = false\n",[34,55366,55367],{"start":49},[22,55368,55369],{},"自定义属性",[169,55371,55372],{},[164,55373],{"alt":181,"src":55374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[176,55376,55378],{"className":54514,"code":55377,"language":54516,"meta":181,"style":181},"\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",[183,55379,55380,55388,55416,55435,55454,55473,55492,55500,55505,55510,55515,55520,55528],{"__ignoreMap":181},[186,55381,55382,55384,55386],{"class":188,"line":189},[186,55383,520],{"class":202},[186,55385,53247],{"class":523},[186,55387,552],{"class":202},[186,55389,55390,55392,55394,55397,55399,55401,55404,55406,55409,55412,55414],{"class":188,"line":49},[186,55391,53591],{"class":202},[186,55393,1450],{"class":523},[186,55395,55396],{"class":198}," data-id",[186,55398,529],{"class":202},[186,55400,5144],{"class":532},[186,55402,55403],{"class":198}," data-spm",[186,55405,529],{"class":202},[186,55407,55408],{"class":532},"\"我不知道\"",[186,55410,55411],{"class":202},">1\u003C\u002F",[186,55413,1450],{"class":523},[186,55415,552],{"class":202},[186,55417,55418,55420,55422,55424,55426,55428,55431,55433],{"class":188,"line":219},[186,55419,53591],{"class":202},[186,55421,1450],{"class":523},[186,55423,55396],{"class":198},[186,55425,529],{"class":202},[186,55427,5167],{"class":532},[186,55429,55430],{"class":202},">2\u003C\u002F",[186,55432,1450],{"class":523},[186,55434,552],{"class":202},[186,55436,55437,55439,55441,55443,55445,55447,55450,55452],{"class":188,"line":225},[186,55438,53591],{"class":202},[186,55440,1450],{"class":523},[186,55442,55396],{"class":198},[186,55444,529],{"class":202},[186,55446,5180],{"class":532},[186,55448,55449],{"class":202},">3\u003C\u002F",[186,55451,1450],{"class":523},[186,55453,552],{"class":202},[186,55455,55456,55458,55460,55462,55464,55466,55469,55471],{"class":188,"line":242},[186,55457,53591],{"class":202},[186,55459,1450],{"class":523},[186,55461,55396],{"class":198},[186,55463,529],{"class":202},[186,55465,5193],{"class":532},[186,55467,55468],{"class":202},">4\u003C\u002F",[186,55470,1450],{"class":523},[186,55472,552],{"class":202},[186,55474,55475,55477,55479,55481,55483,55485,55488,55490],{"class":188,"line":248},[186,55476,53591],{"class":202},[186,55478,1450],{"class":523},[186,55480,55396],{"class":198},[186,55482,529],{"class":202},[186,55484,5214],{"class":532},[186,55486,55487],{"class":202},">5\u003C\u002F",[186,55489,1450],{"class":523},[186,55491,552],{"class":202},[186,55493,55494,55496,55498],{"class":188,"line":265},[186,55495,53591],{"class":202},[186,55497,53260],{"class":523},[186,55499,552],{"class":202},[186,55501,55502],{"class":188,"line":271},[186,55503,55504],{"class":202},"    const one = document.querySelector('div')\n",[186,55506,55507],{"class":188,"line":288},[186,55508,55509],{"class":202},"    console.log(one.dataset)\n",[186,55511,55512],{"class":188,"line":294},[186,55513,55514],{"class":202},"    console.log(one.dataset.id)\n",[186,55516,55517],{"class":188,"line":1212},[186,55518,55519],{"class":202},"    console.log(one.dataset.spm)\n",[186,55521,55522,55524,55526],{"class":188,"line":1223},[186,55523,53864],{"class":202},[186,55525,53260],{"class":523},[186,55527,552],{"class":202},[186,55529,55530,55532,55534],{"class":188,"line":1236},[186,55531,1470],{"class":202},[186,55533,53247],{"class":523},[186,55535,552],{"class":202},[169,55537,55538],{},[164,55539],{"alt":181,"src":55540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[169,55542,55543],{},"document.querySelector选择的是第一个对象（元素）",[29,55545,55547],{"id":55546},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[169,55549,55550],{},[164,55551],{"alt":181,"src":55552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[169,55554,55555],{},[164,55556],{"alt":181,"src":55557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[169,55559,55560],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53260,55562,55563],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[169,55565,55566],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53260,55568,55569],{},"\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",[169,55571,55572],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[169,55574,55575],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[169,55577,55578],{},"单位为毫秒！！！",[169,55580,55581],{},"可以搭配匿名函数来用！！！",[169,55583,55584],{},"setInterval(function () {",[169,55586,55587],{},"alert('两秒执行一次')",[169,55589,55590],{},"}, 2000)",[169,55592,55593],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[169,55595,55596],{},"function fn() {",[169,55598,55599],{},"document.write(1)",[169,55601,2553],{},[169,55603,55604],{},"setInterval(fn, 1000)",[169,55606,55607],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[169,55609,55610],{},"setInterval('fn()', 1000)",[169,55612,55613],{},[164,55614],{"alt":181,"src":55615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23459,55617,55619],{"id":55618},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[176,55621,55623],{"className":52087,"code":55622,"language":52089,"meta":181,"style":181},"\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",[183,55624,55625,55635,55649,55653,55661,55675,55695,55707,55715,55719,55727,55764,55769,55774,55779,55787,55795,55817,55825,55830,55852,55857,55862,55873,55878,55898,55906,55921,55936,55947,55952,55962,55972,55976,55985,55989,55997,56005,56009],{"__ignoreMap":181},[186,55626,55627,55629,55631,55633],{"class":188,"line":189},[186,55628,52751],{"class":202},[186,55630,52754],{"class":523},[186,55632,52757],{"class":198},[186,55634,552],{"class":202},[186,55636,55637,55639,55641,55643,55645,55647],{"class":188,"line":49},[186,55638,520],{"class":202},[186,55640,52089],{"class":523},[186,55642,52768],{"class":198},[186,55644,529],{"class":202},[186,55646,52773],{"class":532},[186,55648,552],{"class":202},[186,55650,55651],{"class":188,"line":219},[186,55652,3867],{"emptyLinePlaceholder":1551},[186,55654,55655,55657,55659],{"class":188,"line":225},[186,55656,520],{"class":202},[186,55658,52786],{"class":523},[186,55660,552],{"class":202},[186,55662,55663,55665,55667,55669,55671,55673],{"class":188,"line":242},[186,55664,53591],{"class":202},[186,55666,52796],{"class":523},[186,55668,52799],{"class":198},[186,55670,529],{"class":202},[186,55672,52804],{"class":532},[186,55674,552],{"class":202},[186,55676,55677,55679,55681,55683,55685,55687,55689,55691,55693],{"class":188,"line":248},[186,55678,53591],{"class":202},[186,55680,52796],{"class":523},[186,55682,16382],{"class":198},[186,55684,529],{"class":202},[186,55686,52843],{"class":532},[186,55688,52823],{"class":198},[186,55690,529],{"class":202},[186,55692,52850],{"class":532},[186,55694,552],{"class":202},[186,55696,55697,55699,55701,55703,55705],{"class":188,"line":265},[186,55698,53591],{"class":202},[186,55700,52859],{"class":523},[186,55702,52862],{"class":202},[186,55704,52859],{"class":523},[186,55706,552],{"class":202},[186,55708,55709,55711,55713],{"class":188,"line":271},[186,55710,1470],{"class":202},[186,55712,52786],{"class":523},[186,55714,552],{"class":202},[186,55716,55717],{"class":188,"line":288},[186,55718,3867],{"emptyLinePlaceholder":1551},[186,55720,55721,55723,55725],{"class":188,"line":294},[186,55722,520],{"class":202},[186,55724,53247],{"class":523},[186,55726,552],{"class":202},[186,55728,55729,55731,55734,55736,55738,55740,55742,55744,55746,55749,55751,55754,55757,55759,55762],{"class":188,"line":1212},[186,55730,53591],{"class":202},[186,55732,55733],{"class":523},"textarea",[186,55735,16382],{"class":198},[186,55737,529],{"class":202},[186,55739,9115],{"class":532},[186,55741,16421],{"class":198},[186,55743,529],{"class":202},[186,55745,9115],{"class":532},[186,55747,55748],{"class":198}," cols",[186,55750,529],{"class":202},[186,55752,55753],{"class":532},"\"30\"",[186,55755,55756],{"class":198}," rows",[186,55758,529],{"class":202},[186,55760,55761],{"class":532},"\"10\"",[186,55763,552],{"class":202},[186,55765,55766],{"class":188,"line":1223},[186,55767,55768],{"class":202},"        用户注册协议\n",[186,55770,55771],{"class":188,"line":1236},[186,55772,55773],{"class":202},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[186,55775,55776],{"class":188,"line":3096},[186,55777,55778],{"class":202},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[186,55780,55781,55783,55785],{"class":188,"line":3110},[186,55782,53224],{"class":202},[186,55784,55733],{"class":523},[186,55786,552],{"class":202},[186,55788,55789,55791,55793],{"class":188,"line":3115},[186,55790,53591],{"class":202},[186,55792,726],{"class":523},[186,55794,552],{"class":202},[186,55796,55797,55799,55801,55803,55805,55808,55810,55813,55815],{"class":188,"line":3121},[186,55798,53591],{"class":202},[186,55800,55332],{"class":523},[186,55802,1453],{"class":198},[186,55804,529],{"class":202},[186,55806,55807],{"class":532},"\"btn\"",[186,55809,55335],{"class":198},[186,55811,55812],{"class":202},">我已经阅读用户协议(5)\u003C\u002F",[186,55814,55332],{"class":523},[186,55816,552],{"class":202},[186,55818,55819,55821,55823],{"class":188,"line":3142},[186,55820,53591],{"class":202},[186,55822,53260],{"class":523},[186,55824,552],{"class":202},[186,55826,55827],{"class":188,"line":3147},[186,55828,55829],{"class":192},"    \u002F\u002F 1. 获取元素\n",[186,55831,55832,55834,55837,55839,55842,55845,55847,55850],{"class":188,"line":3161},[186,55833,12684],{"class":669},[186,55835,55836],{"class":206}," btn",[186,55838,15027],{"class":669},[186,55840,55841],{"class":202}," document.",[186,55843,55844],{"class":198},"querySelector",[186,55846,832],{"class":202},[186,55848,55849],{"class":532},"'.btn'",[186,55851,1629],{"class":202},[186,55853,55854],{"class":188,"line":3166},[186,55855,55856],{"class":192},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[186,55858,55859],{"class":188,"line":3195},[186,55860,55861],{"class":192},"    \u002F\u002F 2. 倒计时\n",[186,55863,55864,55866,55868,55870],{"class":188,"line":3200},[186,55865,53666],{"class":669},[186,55867,10901],{"class":202},[186,55869,529],{"class":669},[186,55871,55872],{"class":206}," 5\n",[186,55874,55875],{"class":188,"line":3217},[186,55876,55877],{"class":192},"    \u002F\u002F 2.1 开启定时器\n",[186,55879,55880,55882,55885,55887,55890,55892,55895],{"class":188,"line":3222},[186,55881,53666],{"class":669},[186,55883,55884],{"class":202}," n ",[186,55886,529],{"class":669},[186,55888,55889],{"class":198}," setInterval",[186,55891,832],{"class":202},[186,55893,55894],{"class":669},"function",[186,55896,55897],{"class":202}," () {\n",[186,55899,55900,55903],{"class":188,"line":3227},[186,55901,55902],{"class":202},"      i",[186,55904,55905],{"class":669},"--\n",[186,55907,55908,55911,55913,55916,55918],{"class":188,"line":3232},[186,55909,55910],{"class":202},"      btn.innerHTML ",[186,55912,529],{"class":669},[186,55914,55915],{"class":532}," `我已经阅读用户协议(${",[186,55917,2051],{"class":202},[186,55919,55920],{"class":532},"})`\n",[186,55922,55923,55926,55929,55932,55934],{"class":188,"line":3246},[186,55924,55925],{"class":669},"      if",[186,55927,55928],{"class":202}," (i ",[186,55930,55931],{"class":669},"===",[186,55933,5559],{"class":206},[186,55935,13905],{"class":202},[186,55937,55938,55941,55944],{"class":188,"line":3251},[186,55939,55940],{"class":198},"        clearInterval",[186,55942,55943],{"class":202},"(n)  ",[186,55945,55946],{"class":192},"\u002F\u002F 关闭定时器\n",[186,55948,55949],{"class":188,"line":4044},[186,55950,55951],{"class":192},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[186,55953,55954,55957,55959],{"class":188,"line":4058},[186,55955,55956],{"class":202},"        btn.disabled ",[186,55958,529],{"class":669},[186,55960,55961],{"class":206}," false\n",[186,55963,55964,55967,55969],{"class":188,"line":4066},[186,55965,55966],{"class":202},"        btn.innerHTML ",[186,55968,529],{"class":669},[186,55970,55971],{"class":532}," '同意'\n",[186,55973,55974],{"class":188,"line":4071},[186,55975,53845],{"class":202},[186,55977,55978,55981,55983],{"class":188,"line":4077},[186,55979,55980],{"class":202},"    }, ",[186,55982,7873],{"class":206},[186,55984,1629],{"class":202},[186,55986,55987],{"class":188,"line":4083},[186,55988,3867],{"emptyLinePlaceholder":1551},[186,55990,55991,55993,55995],{"class":188,"line":4088},[186,55992,53864],{"class":202},[186,55994,53260],{"class":523},[186,55996,552],{"class":202},[186,55998,55999,56001,56003],{"class":188,"line":9411},[186,56000,1470],{"class":202},[186,56002,53247],{"class":523},[186,56004,552],{"class":202},[186,56006,56007],{"class":188,"line":9435},[186,56008,3867],{"emptyLinePlaceholder":1551},[186,56010,56011,56013,56015],{"class":188,"line":9440},[186,56012,1470],{"class":202},[186,56014,52089],{"class":523},[186,56016,552],{"class":202},[169,56018,56019],{},"不要一直想着用死循环,避免死循环",[169,56021,56022,56025],{},[183,56023,56024],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23459,56027,56029],{"id":56028},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[34,56031,56032],{},[22,56033,56034],{},"法1",[176,56036,56038],{"className":52087,"code":56037,"language":52089,"meta":181,"style":181},"\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",[183,56039,56040,56050,56064,56068,56076,56090,56110,56122,56130,56136,56147,56158,56162,56166,56173,56185,56189,56193,56200,56211,56225,56238,56252,56256,56260,56267,56277,56288,56299,56311,56323,56335,56339,56343,56351,56361,56374,56386,56399,56403,56407,56414,56424,56436,56448,56459,56470,56480,56492,56504,56508,56512,56521,56533,56545,56573,56586,56590,56594,56601,56612,56616,56624,56632,56636,56644,56658,56673,56695,56703,56718,56731,56739,56760,56772,56784,56796,56808,56820,56832,56844,56853,56861,56869,56877,56889,56912,56931,56950,56969,56988,57007,57026,57046,57050,57070,57089,57109,57130,57141,57158,57168,57178,57188,57193,57198,57203,57208,57233,57246,57250,57273,57277,57285,57293,57301,57305],{"__ignoreMap":181},[186,56041,56042,56044,56046,56048],{"class":188,"line":189},[186,56043,52751],{"class":202},[186,56045,52754],{"class":523},[186,56047,52757],{"class":198},[186,56049,552],{"class":202},[186,56051,56052,56054,56056,56058,56060,56062],{"class":188,"line":49},[186,56053,520],{"class":202},[186,56055,52089],{"class":523},[186,56057,52768],{"class":198},[186,56059,529],{"class":202},[186,56061,52773],{"class":532},[186,56063,552],{"class":202},[186,56065,56066],{"class":188,"line":219},[186,56067,3867],{"emptyLinePlaceholder":1551},[186,56069,56070,56072,56074],{"class":188,"line":225},[186,56071,520],{"class":202},[186,56073,52786],{"class":523},[186,56075,552],{"class":202},[186,56077,56078,56080,56082,56084,56086,56088],{"class":188,"line":242},[186,56079,53591],{"class":202},[186,56081,52796],{"class":523},[186,56083,52799],{"class":198},[186,56085,529],{"class":202},[186,56087,52804],{"class":532},[186,56089,552],{"class":202},[186,56091,56092,56094,56096,56098,56100,56102,56104,56106,56108],{"class":188,"line":248},[186,56093,53591],{"class":202},[186,56095,52796],{"class":523},[186,56097,16382],{"class":198},[186,56099,529],{"class":202},[186,56101,52843],{"class":532},[186,56103,52823],{"class":198},[186,56105,529],{"class":202},[186,56107,52850],{"class":532},[186,56109,552],{"class":202},[186,56111,56112,56114,56116,56118,56120],{"class":188,"line":265},[186,56113,53591],{"class":202},[186,56115,52859],{"class":523},[186,56117,52862],{"class":202},[186,56119,52859],{"class":523},[186,56121,552],{"class":202},[186,56123,56124,56126,56128],{"class":188,"line":271},[186,56125,53591],{"class":202},[186,56127,1524],{"class":523},[186,56129,552],{"class":202},[186,56131,56132,56134],{"class":188,"line":288},[186,56133,7866],{"class":523},[186,56135,622],{"class":202},[186,56137,56138,56141,56143,56145],{"class":188,"line":294},[186,56139,56140],{"class":206},"      padding",[186,56142,210],{"class":202},[186,56144,1803],{"class":206},[186,56146,634],{"class":202},[186,56148,56149,56152,56154,56156],{"class":188,"line":1212},[186,56150,56151],{"class":206},"      margin",[186,56153,210],{"class":202},[186,56155,1803],{"class":206},[186,56157,634],{"class":202},[186,56159,56160],{"class":188,"line":1223},[186,56161,3654],{"class":202},[186,56163,56164],{"class":188,"line":1236},[186,56165,3867],{"emptyLinePlaceholder":1551},[186,56167,56168,56171],{"class":188,"line":3096},[186,56169,56170],{"class":523},"    li",[186,56172,622],{"class":202},[186,56174,56175,56178,56180,56183],{"class":188,"line":3110},[186,56176,56177],{"class":206},"      list-style",[186,56179,210],{"class":202},[186,56181,56182],{"class":206},"none",[186,56184,634],{"class":202},[186,56186,56187],{"class":188,"line":3115},[186,56188,3654],{"class":202},[186,56190,56191],{"class":188,"line":3121},[186,56192,3867],{"emptyLinePlaceholder":1551},[186,56194,56195,56198],{"class":188,"line":3142},[186,56196,56197],{"class":198},"    .box",[186,56199,622],{"class":202},[186,56201,56202,56205,56207,56209],{"class":188,"line":3147},[186,56203,56204],{"class":206},"      position",[186,56206,210],{"class":202},[186,56208,237],{"class":206},[186,56210,634],{"class":202},[186,56212,56213,56216,56218,56221,56223],{"class":188,"line":3161},[186,56214,56215],{"class":206},"      width",[186,56217,210],{"class":202},[186,56219,56220],{"class":206},"976",[186,56222,804],{"class":669},[186,56224,634],{"class":202},[186,56226,56227,56230,56232,56234,56236],{"class":188,"line":3166},[186,56228,56229],{"class":206},"      height",[186,56231,210],{"class":202},[186,56233,3011],{"class":206},[186,56235,804],{"class":669},[186,56237,634],{"class":202},[186,56239,56240,56242,56244,56246,56248,56250],{"class":188,"line":3195},[186,56241,56151],{"class":206},[186,56243,210],{"class":202},[186,56245,1922],{"class":206},[186,56247,804],{"class":669},[186,56249,53006],{"class":206},[186,56251,634],{"class":202},[186,56253,56254],{"class":188,"line":3200},[186,56255,3654],{"class":202},[186,56257,56258],{"class":188,"line":3217},[186,56259,3867],{"emptyLinePlaceholder":1551},[186,56261,56262,56265],{"class":188,"line":3222},[186,56263,56264],{"class":198},"    .slider-footer",[186,56266,622],{"class":202},[186,56268,56269,56271,56273,56275],{"class":188,"line":3227},[186,56270,56204],{"class":206},[186,56272,210],{"class":202},[186,56274,260],{"class":206},[186,56276,634],{"class":202},[186,56278,56279,56282,56284,56286],{"class":188,"line":3232},[186,56280,56281],{"class":206},"      left",[186,56283,210],{"class":202},[186,56285,1803],{"class":206},[186,56287,634],{"class":202},[186,56289,56290,56293,56295,56297],{"class":188,"line":3246},[186,56291,56292],{"class":206},"      bottom",[186,56294,210],{"class":202},[186,56296,1803],{"class":206},[186,56298,634],{"class":202},[186,56300,56301,56303,56305,56307,56309],{"class":188,"line":3251},[186,56302,56215],{"class":206},[186,56304,210],{"class":202},[186,56306,1922],{"class":206},[186,56308,670],{"class":669},[186,56310,634],{"class":202},[186,56312,56313,56315,56317,56319,56321],{"class":188,"line":4044},[186,56314,56229],{"class":206},[186,56316,210],{"class":202},[186,56318,2185],{"class":206},[186,56320,670],{"class":669},[186,56322,634],{"class":202},[186,56324,56325,56328,56330,56333],{"class":188,"line":4058},[186,56326,56327],{"class":206},"      background-color",[186,56329,210],{"class":202},[186,56331,56332],{"class":206},"skyblue",[186,56334,634],{"class":202},[186,56336,56337],{"class":188,"line":4066},[186,56338,3654],{"class":202},[186,56340,56341],{"class":188,"line":4071},[186,56342,3867],{"emptyLinePlaceholder":1551},[186,56344,56345,56347,56349],{"class":188,"line":4077},[186,56346,56264],{"class":198},[186,56348,8288],{"class":523},[186,56350,622],{"class":202},[186,56352,56353,56355,56357,56359],{"class":188,"line":4083},[186,56354,56204],{"class":206},[186,56356,210],{"class":202},[186,56358,260],{"class":206},[186,56360,634],{"class":202},[186,56362,56363,56366,56368,56370,56372],{"class":188,"line":4088},[186,56364,56365],{"class":206},"      font-size",[186,56367,210],{"class":202},[186,56369,2509],{"class":206},[186,56371,804],{"class":669},[186,56373,634],{"class":202},[186,56375,56376,56378,56380,56382,56384],{"class":188,"line":9411},[186,56377,56281],{"class":206},[186,56379,210],{"class":202},[186,56381,801],{"class":206},[186,56383,804],{"class":669},[186,56385,634],{"class":202},[186,56387,56388,56391,56393,56395,56397],{"class":188,"line":9435},[186,56389,56390],{"class":206},"      top",[186,56392,210],{"class":202},[186,56394,1930],{"class":206},[186,56396,804],{"class":669},[186,56398,634],{"class":202},[186,56400,56401],{"class":188,"line":9440},[186,56402,3654],{"class":202},[186,56404,56405],{"class":188,"line":9446},[186,56406,3867],{"emptyLinePlaceholder":1551},[186,56408,56409,56412],{"class":188,"line":9473},[186,56410,56411],{"class":523},"    ul",[186,56413,622],{"class":202},[186,56415,56416,56418,56420,56422],{"class":188,"line":9478},[186,56417,56204],{"class":206},[186,56419,210],{"class":202},[186,56421,260],{"class":206},[186,56423,634],{"class":202},[186,56425,56426,56428,56430,56432,56434],{"class":188,"line":9484},[186,56427,56390],{"class":206},[186,56429,210],{"class":202},[186,56431,2389],{"class":206},[186,56433,804],{"class":669},[186,56435,634],{"class":202},[186,56437,56438,56440,56442,56444,56446],{"class":188,"line":9496},[186,56439,56281],{"class":206},[186,56441,210],{"class":202},[186,56443,801],{"class":206},[186,56445,804],{"class":669},[186,56447,634],{"class":202},[186,56449,56450,56453,56455,56457],{"class":188,"line":9508},[186,56451,56452],{"class":206},"      display",[186,56454,210],{"class":202},[186,56456,52928],{"class":206},[186,56458,634],{"class":202},[186,56460,56461,56464,56466,56468],{"class":188,"line":9520},[186,56462,56463],{"class":206},"      justify-content",[186,56465,210],{"class":202},[186,56467,53117],{"class":206},[186,56469,634],{"class":202},[186,56471,56472,56474,56476,56478],{"class":188,"line":11179},[186,56473,56204],{"class":206},[186,56475,210],{"class":202},[186,56477,260],{"class":206},[186,56479,634],{"class":202},[186,56481,56482,56484,56486,56488,56490],{"class":188,"line":11204},[186,56483,56215],{"class":206},[186,56485,210],{"class":202},[186,56487,5458],{"class":206},[186,56489,804],{"class":669},[186,56491,634],{"class":202},[186,56493,56494,56496,56498,56500,56502],{"class":188,"line":11227},[186,56495,56229],{"class":206},[186,56497,210],{"class":202},[186,56499,801],{"class":206},[186,56501,804],{"class":669},[186,56503,634],{"class":202},[186,56505,56506],{"class":188,"line":11251},[186,56507,3654],{"class":202},[186,56509,56510],{"class":188,"line":11256},[186,56511,3867],{"emptyLinePlaceholder":1551},[186,56513,56514,56516,56519],{"class":188,"line":11261},[186,56515,56411],{"class":523},[186,56517,56518],{"class":523}," li",[186,56520,622],{"class":202},[186,56522,56523,56525,56527,56529,56531],{"class":188,"line":11266},[186,56524,56215],{"class":206},[186,56526,210],{"class":202},[186,56528,801],{"class":206},[186,56530,804],{"class":669},[186,56532,634],{"class":202},[186,56534,56535,56537,56539,56541,56543],{"class":188,"line":11275},[186,56536,56229],{"class":206},[186,56538,210],{"class":202},[186,56540,801],{"class":206},[186,56542,804],{"class":669},[186,56544,634],{"class":202},[186,56546,56547,56549,56551,56554,56556,56558,56560,56562,56564,56566,56568,56571],{"class":188,"line":11280},[186,56548,56327],{"class":206},[186,56550,210],{"class":202},[186,56552,56553],{"class":206},"rgba",[186,56555,832],{"class":202},[186,56557,1803],{"class":206},[186,56559,13898],{"class":202},[186,56561,1803],{"class":206},[186,56563,13898],{"class":202},[186,56565,1803],{"class":206},[186,56567,13898],{"class":202},[186,56569,56570],{"class":206},".4",[186,56572,1112],{"class":202},[186,56574,56575,56578,56580,56582,56584],{"class":188,"line":11286},[186,56576,56577],{"class":206},"      border-radius",[186,56579,210],{"class":202},[186,56581,2056],{"class":206},[186,56583,804],{"class":669},[186,56585,634],{"class":202},[186,56587,56588],{"class":188,"line":11307},[186,56589,3654],{"class":202},[186,56591,56592],{"class":188,"line":11313},[186,56593,3867],{"emptyLinePlaceholder":1551},[186,56595,56596,56599],{"class":188,"line":11327},[186,56597,56598],{"class":198},"    .activate",[186,56600,622],{"class":202},[186,56602,56603,56605,56607,56610],{"class":188,"line":11333},[186,56604,56327],{"class":206},[186,56606,210],{"class":202},[186,56608,56609],{"class":206},"#f7f7f7",[186,56611,634],{"class":202},[186,56613,56614],{"class":188,"line":11360},[186,56615,3654],{"class":202},[186,56617,56618,56620,56622],{"class":188,"line":11369},[186,56619,53864],{"class":202},[186,56621,1524],{"class":523},[186,56623,552],{"class":202},[186,56625,56626,56628,56630],{"class":188,"line":11375},[186,56627,1470],{"class":202},[186,56629,52786],{"class":523},[186,56631,552],{"class":202},[186,56633,56634],{"class":188,"line":11383},[186,56635,3867],{"emptyLinePlaceholder":1551},[186,56637,56638,56640,56642],{"class":188,"line":11388},[186,56639,520],{"class":202},[186,56641,53247],{"class":523},[186,56643,552],{"class":202},[186,56645,56646,56648,56650,56652,56654,56656],{"class":188,"line":18065},[186,56647,53591],{"class":202},[186,56649,1450],{"class":523},[186,56651,1453],{"class":198},[186,56653,529],{"class":202},[186,56655,54937],{"class":532},[186,56657,552],{"class":202},[186,56659,56660,56662,56664,56666,56668,56671],{"class":188,"line":18071},[186,56661,52793],{"class":202},[186,56663,1450],{"class":523},[186,56665,1453],{"class":198},[186,56667,529],{"class":202},[186,56669,56670],{"class":532},"\"slider-wrapper\"",[186,56672,552],{"class":202},[186,56674,56675,56678,56680,56682,56684,56687,56689,56691,56693],{"class":188,"line":18094},[186,56676,56677],{"class":202},"      \u003C",[186,56679,164],{"class":523},[186,56681,526],{"class":198},[186,56683,529],{"class":202},[186,56685,56686],{"class":532},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[186,56688,536],{"class":198},[186,56690,529],{"class":202},[186,56692,9115],{"class":532},[186,56694,552],{"class":202},[186,56696,56697,56699,56701],{"class":188,"line":18100},[186,56698,53224],{"class":202},[186,56700,1450],{"class":523},[186,56702,552],{"class":202},[186,56704,56705,56707,56709,56711,56713,56716],{"class":188,"line":18123},[186,56706,52793],{"class":202},[186,56708,1450],{"class":523},[186,56710,1453],{"class":198},[186,56712,529],{"class":202},[186,56714,56715],{"class":532},"\"slider-footer\"",[186,56717,552],{"class":202},[186,56719,56720,56722,56724,56727,56729],{"class":188,"line":18137},[186,56721,56677],{"class":202},[186,56723,169],{"class":523},[186,56725,56726],{"class":202},">对人类来说会不会太超前了?\u003C\u002F",[186,56728,169],{"class":523},[186,56730,552],{"class":202},[186,56732,56733,56735,56737],{"class":188,"line":18157},[186,56734,56677],{"class":202},[186,56736,19],{"class":523},[186,56738,552],{"class":202},[186,56740,56741,56744,56746,56748,56750,56753,56756,56758],{"class":188,"line":18163},[186,56742,56743],{"class":202},"        \u003C",[186,56745,22],{"class":523},[186,56747,1453],{"class":198},[186,56749,529],{"class":202},[186,56751,56752],{"class":532},"\"activate\"",[186,56754,56755],{"class":202},">\u003C\u002F",[186,56757,22],{"class":523},[186,56759,552],{"class":202},[186,56761,56762,56764,56766,56768,56770],{"class":188,"line":18174},[186,56763,56743],{"class":202},[186,56765,22],{"class":523},[186,56767,56755],{"class":202},[186,56769,22],{"class":523},[186,56771,552],{"class":202},[186,56773,56774,56776,56778,56780,56782],{"class":188,"line":18197},[186,56775,56743],{"class":202},[186,56777,22],{"class":523},[186,56779,56755],{"class":202},[186,56781,22],{"class":523},[186,56783,552],{"class":202},[186,56785,56786,56788,56790,56792,56794],{"class":188,"line":18219},[186,56787,56743],{"class":202},[186,56789,22],{"class":523},[186,56791,56755],{"class":202},[186,56793,22],{"class":523},[186,56795,552],{"class":202},[186,56797,56798,56800,56802,56804,56806],{"class":188,"line":18224},[186,56799,56743],{"class":202},[186,56801,22],{"class":523},[186,56803,56755],{"class":202},[186,56805,22],{"class":523},[186,56807,552],{"class":202},[186,56809,56810,56812,56814,56816,56818],{"class":188,"line":18230},[186,56811,56743],{"class":202},[186,56813,22],{"class":523},[186,56815,56755],{"class":202},[186,56817,22],{"class":523},[186,56819,552],{"class":202},[186,56821,56822,56824,56826,56828,56830],{"class":188,"line":18244},[186,56823,56743],{"class":202},[186,56825,22],{"class":523},[186,56827,56755],{"class":202},[186,56829,22],{"class":523},[186,56831,552],{"class":202},[186,56833,56834,56836,56838,56840,56842],{"class":188,"line":18257},[186,56835,56743],{"class":202},[186,56837,22],{"class":523},[186,56839,56755],{"class":202},[186,56841,22],{"class":523},[186,56843,552],{"class":202},[186,56845,56846,56849,56851],{"class":188,"line":18262},[186,56847,56848],{"class":202},"      \u003C\u002F",[186,56850,19],{"class":523},[186,56852,552],{"class":202},[186,56854,56855,56857,56859],{"class":188,"line":18276},[186,56856,53224],{"class":202},[186,56858,1450],{"class":523},[186,56860,552],{"class":202},[186,56862,56863,56865,56867],{"class":188,"line":18281},[186,56864,53864],{"class":202},[186,56866,1450],{"class":523},[186,56868,552],{"class":202},[186,56870,56871,56873,56875],{"class":188,"line":18287},[186,56872,53591],{"class":202},[186,56874,53260],{"class":523},[186,56876,552],{"class":202},[186,56878,56879,56881,56884,56886],{"class":188,"line":18292},[186,56880,12684],{"class":669},[186,56882,56883],{"class":206}," arrImage",[186,56885,15027],{"class":669},[186,56887,56888],{"class":202}," [\n",[186,56890,56891,56894,56897,56900,56903,56906,56909],{"class":188,"line":18306},[186,56892,56893],{"class":202},"      { url: ",[186,56895,56896],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[186,56898,56899],{"class":202},", title: ",[186,56901,56902],{"class":532},"'对人类来说会不会太超前了?'",[186,56904,56905],{"class":202},", color: ",[186,56907,56908],{"class":532},"'rgba(100,67,68)'",[186,56910,56911],{"class":202}," },\n",[186,56913,56914,56916,56919,56921,56924,56926,56929],{"class":188,"line":18311},[186,56915,56893],{"class":202},[186,56917,56918],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[186,56920,56899],{"class":202},[186,56922,56923],{"class":532},"'开启剑与雪的黑暗传说!'",[186,56925,56905],{"class":202},[186,56927,56928],{"class":532},"'rgba(43,35,26)'",[186,56930,56911],{"class":202},[186,56932,56933,56935,56938,56940,56943,56945,56948],{"class":188,"line":18316},[186,56934,56893],{"class":202},[186,56936,56937],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[186,56939,56899],{"class":202},[186,56941,56942],{"class":532},"'真正的jo厨出现了!'",[186,56944,56905],{"class":202},[186,56946,56947],{"class":532},"'rgba(36,31,33)'",[186,56949,56911],{"class":202},[186,56951,56952,56954,56957,56959,56962,56964,56967],{"class":188,"line":18330},[186,56953,56893],{"class":202},[186,56955,56956],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[186,56958,56899],{"class":202},[186,56960,56961],{"class":532},"'李玉刚:让世界通过b站看到东方大国文化'",[186,56963,56905],{"class":202},[186,56965,56966],{"class":532},"'rgba(139,98,66)'",[186,56968,56911],{"class":202},[186,56970,56971,56973,56976,56978,56981,56983,56986],{"class":188,"line":18342},[186,56972,56893],{"class":202},[186,56974,56975],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[186,56977,56899],{"class":202},[186,56979,56980],{"class":532},"'快来分享你的寒假日常吧'",[186,56982,56905],{"class":202},[186,56984,56985],{"class":532},"'rgba(67,90,92)'",[186,56987,56911],{"class":202},[186,56989,56990,56992,56995,56997,57000,57002,57005],{"class":188,"line":18347},[186,56991,56893],{"class":202},[186,56993,56994],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[186,56996,56899],{"class":202},[186,56998,56999],{"class":532},"'哔哩哔哩小年YEAR'",[186,57001,56905],{"class":202},[186,57003,57004],{"class":532},"'rgba(166,131,143)'",[186,57006,56911],{"class":202},[186,57008,57009,57011,57014,57016,57019,57021,57024],{"class":188,"line":18360},[186,57010,56893],{"class":202},[186,57012,57013],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[186,57015,56899],{"class":202},[186,57017,57018],{"class":532},"'一站式解决你的电脑配置问题'",[186,57020,56905],{"class":202},[186,57022,57023],{"class":532},"'rgba(53,29,25)'",[186,57025,56911],{"class":202},[186,57027,57028,57030,57033,57035,57038,57040,57043],{"class":188,"line":18365},[186,57029,56893],{"class":202},[186,57031,57032],{"class":532},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[186,57034,56899],{"class":202},[186,57036,57037],{"class":532},"'谁不想和小猫咪贴贴呢?'",[186,57039,56905],{"class":202},[186,57041,57042],{"class":532},"'rgba(99,72,114)'",[186,57044,57045],{"class":202}," }\n",[186,57047,57048],{"class":188,"line":18370},[186,57049,54556],{"class":202},[186,57051,57052,57054,57057,57059,57061,57063,57065,57068],{"class":188,"line":18375},[186,57053,12684],{"class":669},[186,57055,57056],{"class":206}," img",[186,57058,15027],{"class":669},[186,57060,55841],{"class":202},[186,57062,55844],{"class":198},[186,57064,832],{"class":202},[186,57066,57067],{"class":532},"'.slider-wrapper img'",[186,57069,1629],{"class":202},[186,57071,57072,57074,57076,57078,57080,57082,57084,57087],{"class":188,"line":18388},[186,57073,12684],{"class":669},[186,57075,8288],{"class":206},[186,57077,15027],{"class":669},[186,57079,55841],{"class":202},[186,57081,55844],{"class":198},[186,57083,832],{"class":202},[186,57085,57086],{"class":532},"'.slider-footer p'",[186,57088,1629],{"class":202},[186,57090,57091,57093,57096,57098,57100,57102,57104,57107],{"class":188,"line":18393},[186,57092,12684],{"class":669},[186,57094,57095],{"class":206}," color",[186,57097,15027],{"class":669},[186,57099,55841],{"class":202},[186,57101,55844],{"class":198},[186,57103,832],{"class":202},[186,57105,57106],{"class":532},"'.slider-footer'",[186,57108,1629],{"class":202},[186,57110,57111,57113,57116,57118,57120,57123,57125,57128],{"class":188,"line":34088},[186,57112,12684],{"class":669},[186,57114,57115],{"class":206}," lis",[186,57117,15027],{"class":669},[186,57119,55841],{"class":202},[186,57121,57122],{"class":198},"querySelectorAll",[186,57124,832],{"class":202},[186,57126,57127],{"class":532},"'.slider-footer ul li'",[186,57129,1629],{"class":202},[186,57131,57132,57134,57136,57138],{"class":188,"line":34094},[186,57133,53666],{"class":669},[186,57135,10901],{"class":202},[186,57137,529],{"class":669},[186,57139,57140],{"class":206}," 1\n",[186,57142,57143,57145,57148,57150,57152,57154,57156],{"class":188,"line":34100},[186,57144,53666],{"class":669},[186,57146,57147],{"class":202}," timer ",[186,57149,529],{"class":669},[186,57151,55889],{"class":198},[186,57153,832],{"class":202},[186,57155,55894],{"class":669},[186,57157,55897],{"class":202},[186,57159,57160,57163,57165],{"class":188,"line":34106},[186,57161,57162],{"class":202},"      img.src ",[186,57164,529],{"class":669},[186,57166,57167],{"class":202}," arrImage[i].url\n",[186,57169,57170,57173,57175],{"class":188,"line":34112},[186,57171,57172],{"class":202},"      p.innerHTML ",[186,57174,529],{"class":669},[186,57176,57177],{"class":202}," arrImage[i].title\n",[186,57179,57180,57183,57185],{"class":188,"line":34123},[186,57181,57182],{"class":202},"      color.style.backgroundColor ",[186,57184,529],{"class":669},[186,57186,57187],{"class":202}," arrImage[i].color\n",[186,57189,57190],{"class":188,"line":34129},[186,57191,57192],{"class":192},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[186,57194,57195],{"class":188,"line":34149},[186,57196,57197],{"class":192},"      \u002F\u002F li.classList.add('activate')\n",[186,57199,57200],{"class":188,"line":34155},[186,57201,57202],{"class":192},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[186,57204,57205],{"class":188,"line":34166},[186,57206,57207],{"class":192},"      \u002F\u002F lis[i].classList.remove('activate')\n",[186,57209,57210,57213,57215,57217,57220,57223,57226,57228,57231],{"class":188,"line":34172},[186,57211,57212],{"class":202},"      document.",[186,57214,55844],{"class":198},[186,57216,832],{"class":202},[186,57218,57219],{"class":532},"'.activate'",[186,57221,57222],{"class":202},")?.classList.",[186,57224,57225],{"class":198},"toggle",[186,57227,832],{"class":202},[186,57229,57230],{"class":532},"'activate'",[186,57232,1629],{"class":202},[186,57234,57235,57238,57240,57242,57244],{"class":188,"line":34178},[186,57236,57237],{"class":202},"      lis[i].classList.",[186,57239,6797],{"class":198},[186,57241,832],{"class":202},[186,57243,57230],{"class":532},[186,57245,1629],{"class":202},[186,57247,57248],{"class":188,"line":34184},[186,57249,3867],{"emptyLinePlaceholder":1551},[186,57251,57252,57255,57257,57259,57261,57263,57265,57267,57270],{"class":188,"line":34190},[186,57253,57254],{"class":202},"      i ",[186,57256,529],{"class":669},[186,57258,55928],{"class":202},[186,57260,2091],{"class":669},[186,57262,26577],{"class":206},[186,57264,839],{"class":202},[186,57266,670],{"class":669},[186,57268,57269],{"class":202}," arrImage.",[186,57271,57272],{"class":206},"length\n",[186,57274,57275],{"class":188,"line":34196},[186,57276,3867],{"emptyLinePlaceholder":1551},[186,57278,57279,57281,57283],{"class":188,"line":34202},[186,57280,55980],{"class":202},[186,57282,7873],{"class":206},[186,57284,1629],{"class":202},[186,57286,57287,57289,57291],{"class":188,"line":34208},[186,57288,53864],{"class":202},[186,57290,53260],{"class":523},[186,57292,552],{"class":202},[186,57294,57295,57297,57299],{"class":188,"line":34228},[186,57296,1470],{"class":202},[186,57298,53247],{"class":523},[186,57300,552],{"class":202},[186,57302,57303],{"class":188,"line":34234},[186,57304,3867],{"emptyLinePlaceholder":1551},[186,57306,57307,57309,57311],{"class":188,"line":34250},[186,57308,1470],{"class":202},[186,57310,52089],{"class":523},[186,57312,552],{"class":202},[169,57314,57315],{},[164,57316],{"alt":181,"src":57317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[169,57319,57320],{},"?.就是短路保护,确保输出正常进行",[169,57322,57323],{},"不要忘记取余%,有时候可以用",[169,57325,57326],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[34,57328,57329],{"start":49},[22,57330,57331],{},"法2",[176,57333,57335],{"className":52087,"code":57334,"language":52089,"meta":181,"style":181},"\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",[183,57336,57337,57347,57361,57365,57373,57387,57407,57419,57427,57433,57443,57453,57457,57461,57467,57477,57481,57485,57491,57501,57513,57525,57539,57543,57547,57553,57563,57573,57583,57595,57607,57617,57621,57625,57633,57643,57655,57667,57679,57683,57687,57693,57703,57715,57727,57737,57747,57757,57769,57781,57785,57789,57797,57809,57821,57847,57859,57863,57867,57873,57883,57887,57895,57903,57907,57915,57929,57943,57963,57971,57985,57997,58005,58023,58035,58047,58059,58071,58083,58095,58107,58115,58123,58131,58139,58150,58166,58182,58198,58214,58230,58246,58262,58278,58282,58287,58305,58323,58333,58338,58343,58354,58360,58375,58384,58388,58393,58402,58407,58416,58421,58426,58431,58454,58484,58488,58496,58500,58508,58516,58520],{"__ignoreMap":181},[186,57338,57339,57341,57343,57345],{"class":188,"line":189},[186,57340,52751],{"class":202},[186,57342,52754],{"class":523},[186,57344,52757],{"class":198},[186,57346,552],{"class":202},[186,57348,57349,57351,57353,57355,57357,57359],{"class":188,"line":49},[186,57350,520],{"class":202},[186,57352,52089],{"class":523},[186,57354,52768],{"class":198},[186,57356,529],{"class":202},[186,57358,52773],{"class":532},[186,57360,552],{"class":202},[186,57362,57363],{"class":188,"line":219},[186,57364,3867],{"emptyLinePlaceholder":1551},[186,57366,57367,57369,57371],{"class":188,"line":225},[186,57368,520],{"class":202},[186,57370,52786],{"class":523},[186,57372,552],{"class":202},[186,57374,57375,57377,57379,57381,57383,57385],{"class":188,"line":242},[186,57376,53591],{"class":202},[186,57378,52796],{"class":523},[186,57380,52799],{"class":198},[186,57382,529],{"class":202},[186,57384,52804],{"class":532},[186,57386,552],{"class":202},[186,57388,57389,57391,57393,57395,57397,57399,57401,57403,57405],{"class":188,"line":248},[186,57390,53591],{"class":202},[186,57392,52796],{"class":523},[186,57394,16382],{"class":198},[186,57396,529],{"class":202},[186,57398,52843],{"class":532},[186,57400,52823],{"class":198},[186,57402,529],{"class":202},[186,57404,52850],{"class":532},[186,57406,552],{"class":202},[186,57408,57409,57411,57413,57415,57417],{"class":188,"line":265},[186,57410,53591],{"class":202},[186,57412,52859],{"class":523},[186,57414,52862],{"class":202},[186,57416,52859],{"class":523},[186,57418,552],{"class":202},[186,57420,57421,57423,57425],{"class":188,"line":271},[186,57422,53591],{"class":202},[186,57424,1524],{"class":523},[186,57426,552],{"class":202},[186,57428,57429,57431],{"class":188,"line":288},[186,57430,7866],{"class":523},[186,57432,622],{"class":202},[186,57434,57435,57437,57439,57441],{"class":188,"line":294},[186,57436,56140],{"class":206},[186,57438,210],{"class":202},[186,57440,1803],{"class":206},[186,57442,634],{"class":202},[186,57444,57445,57447,57449,57451],{"class":188,"line":1212},[186,57446,56151],{"class":206},[186,57448,210],{"class":202},[186,57450,1803],{"class":206},[186,57452,634],{"class":202},[186,57454,57455],{"class":188,"line":1223},[186,57456,3654],{"class":202},[186,57458,57459],{"class":188,"line":1236},[186,57460,3867],{"emptyLinePlaceholder":1551},[186,57462,57463,57465],{"class":188,"line":3096},[186,57464,56170],{"class":523},[186,57466,622],{"class":202},[186,57468,57469,57471,57473,57475],{"class":188,"line":3110},[186,57470,56177],{"class":206},[186,57472,210],{"class":202},[186,57474,56182],{"class":206},[186,57476,634],{"class":202},[186,57478,57479],{"class":188,"line":3115},[186,57480,3654],{"class":202},[186,57482,57483],{"class":188,"line":3121},[186,57484,3867],{"emptyLinePlaceholder":1551},[186,57486,57487,57489],{"class":188,"line":3142},[186,57488,56197],{"class":198},[186,57490,622],{"class":202},[186,57492,57493,57495,57497,57499],{"class":188,"line":3147},[186,57494,56204],{"class":206},[186,57496,210],{"class":202},[186,57498,237],{"class":206},[186,57500,634],{"class":202},[186,57502,57503,57505,57507,57509,57511],{"class":188,"line":3161},[186,57504,56215],{"class":206},[186,57506,210],{"class":202},[186,57508,56220],{"class":206},[186,57510,804],{"class":669},[186,57512,634],{"class":202},[186,57514,57515,57517,57519,57521,57523],{"class":188,"line":3166},[186,57516,56229],{"class":206},[186,57518,210],{"class":202},[186,57520,3011],{"class":206},[186,57522,804],{"class":669},[186,57524,634],{"class":202},[186,57526,57527,57529,57531,57533,57535,57537],{"class":188,"line":3195},[186,57528,56151],{"class":206},[186,57530,210],{"class":202},[186,57532,1922],{"class":206},[186,57534,804],{"class":669},[186,57536,53006],{"class":206},[186,57538,634],{"class":202},[186,57540,57541],{"class":188,"line":3200},[186,57542,3654],{"class":202},[186,57544,57545],{"class":188,"line":3217},[186,57546,3867],{"emptyLinePlaceholder":1551},[186,57548,57549,57551],{"class":188,"line":3222},[186,57550,56264],{"class":198},[186,57552,622],{"class":202},[186,57554,57555,57557,57559,57561],{"class":188,"line":3227},[186,57556,56204],{"class":206},[186,57558,210],{"class":202},[186,57560,260],{"class":206},[186,57562,634],{"class":202},[186,57564,57565,57567,57569,57571],{"class":188,"line":3232},[186,57566,56281],{"class":206},[186,57568,210],{"class":202},[186,57570,1803],{"class":206},[186,57572,634],{"class":202},[186,57574,57575,57577,57579,57581],{"class":188,"line":3246},[186,57576,56292],{"class":206},[186,57578,210],{"class":202},[186,57580,1803],{"class":206},[186,57582,634],{"class":202},[186,57584,57585,57587,57589,57591,57593],{"class":188,"line":3251},[186,57586,56215],{"class":206},[186,57588,210],{"class":202},[186,57590,1922],{"class":206},[186,57592,670],{"class":669},[186,57594,634],{"class":202},[186,57596,57597,57599,57601,57603,57605],{"class":188,"line":4044},[186,57598,56229],{"class":206},[186,57600,210],{"class":202},[186,57602,2185],{"class":206},[186,57604,670],{"class":669},[186,57606,634],{"class":202},[186,57608,57609,57611,57613,57615],{"class":188,"line":4058},[186,57610,56327],{"class":206},[186,57612,210],{"class":202},[186,57614,56332],{"class":206},[186,57616,634],{"class":202},[186,57618,57619],{"class":188,"line":4066},[186,57620,3654],{"class":202},[186,57622,57623],{"class":188,"line":4071},[186,57624,3867],{"emptyLinePlaceholder":1551},[186,57626,57627,57629,57631],{"class":188,"line":4077},[186,57628,56264],{"class":198},[186,57630,8288],{"class":523},[186,57632,622],{"class":202},[186,57634,57635,57637,57639,57641],{"class":188,"line":4083},[186,57636,56204],{"class":206},[186,57638,210],{"class":202},[186,57640,260],{"class":206},[186,57642,634],{"class":202},[186,57644,57645,57647,57649,57651,57653],{"class":188,"line":4088},[186,57646,56365],{"class":206},[186,57648,210],{"class":202},[186,57650,2509],{"class":206},[186,57652,804],{"class":669},[186,57654,634],{"class":202},[186,57656,57657,57659,57661,57663,57665],{"class":188,"line":9411},[186,57658,56281],{"class":206},[186,57660,210],{"class":202},[186,57662,801],{"class":206},[186,57664,804],{"class":669},[186,57666,634],{"class":202},[186,57668,57669,57671,57673,57675,57677],{"class":188,"line":9435},[186,57670,56390],{"class":206},[186,57672,210],{"class":202},[186,57674,1930],{"class":206},[186,57676,804],{"class":669},[186,57678,634],{"class":202},[186,57680,57681],{"class":188,"line":9440},[186,57682,3654],{"class":202},[186,57684,57685],{"class":188,"line":9446},[186,57686,3867],{"emptyLinePlaceholder":1551},[186,57688,57689,57691],{"class":188,"line":9473},[186,57690,56411],{"class":523},[186,57692,622],{"class":202},[186,57694,57695,57697,57699,57701],{"class":188,"line":9478},[186,57696,56204],{"class":206},[186,57698,210],{"class":202},[186,57700,260],{"class":206},[186,57702,634],{"class":202},[186,57704,57705,57707,57709,57711,57713],{"class":188,"line":9484},[186,57706,56390],{"class":206},[186,57708,210],{"class":202},[186,57710,2389],{"class":206},[186,57712,804],{"class":669},[186,57714,634],{"class":202},[186,57716,57717,57719,57721,57723,57725],{"class":188,"line":9496},[186,57718,56281],{"class":206},[186,57720,210],{"class":202},[186,57722,801],{"class":206},[186,57724,804],{"class":669},[186,57726,634],{"class":202},[186,57728,57729,57731,57733,57735],{"class":188,"line":9508},[186,57730,56452],{"class":206},[186,57732,210],{"class":202},[186,57734,52928],{"class":206},[186,57736,634],{"class":202},[186,57738,57739,57741,57743,57745],{"class":188,"line":9520},[186,57740,56463],{"class":206},[186,57742,210],{"class":202},[186,57744,53117],{"class":206},[186,57746,634],{"class":202},[186,57748,57749,57751,57753,57755],{"class":188,"line":11179},[186,57750,56204],{"class":206},[186,57752,210],{"class":202},[186,57754,260],{"class":206},[186,57756,634],{"class":202},[186,57758,57759,57761,57763,57765,57767],{"class":188,"line":11204},[186,57760,56215],{"class":206},[186,57762,210],{"class":202},[186,57764,5458],{"class":206},[186,57766,804],{"class":669},[186,57768,634],{"class":202},[186,57770,57771,57773,57775,57777,57779],{"class":188,"line":11227},[186,57772,56229],{"class":206},[186,57774,210],{"class":202},[186,57776,801],{"class":206},[186,57778,804],{"class":669},[186,57780,634],{"class":202},[186,57782,57783],{"class":188,"line":11251},[186,57784,3654],{"class":202},[186,57786,57787],{"class":188,"line":11256},[186,57788,3867],{"emptyLinePlaceholder":1551},[186,57790,57791,57793,57795],{"class":188,"line":11261},[186,57792,56411],{"class":523},[186,57794,56518],{"class":523},[186,57796,622],{"class":202},[186,57798,57799,57801,57803,57805,57807],{"class":188,"line":11266},[186,57800,56215],{"class":206},[186,57802,210],{"class":202},[186,57804,801],{"class":206},[186,57806,804],{"class":669},[186,57808,634],{"class":202},[186,57810,57811,57813,57815,57817,57819],{"class":188,"line":11275},[186,57812,56229],{"class":206},[186,57814,210],{"class":202},[186,57816,801],{"class":206},[186,57818,804],{"class":669},[186,57820,634],{"class":202},[186,57822,57823,57825,57827,57829,57831,57833,57835,57837,57839,57841,57843,57845],{"class":188,"line":11280},[186,57824,56327],{"class":206},[186,57826,210],{"class":202},[186,57828,56553],{"class":206},[186,57830,832],{"class":202},[186,57832,1803],{"class":206},[186,57834,13898],{"class":202},[186,57836,1803],{"class":206},[186,57838,13898],{"class":202},[186,57840,1803],{"class":206},[186,57842,13898],{"class":202},[186,57844,56570],{"class":206},[186,57846,1112],{"class":202},[186,57848,57849,57851,57853,57855,57857],{"class":188,"line":11286},[186,57850,56577],{"class":206},[186,57852,210],{"class":202},[186,57854,2056],{"class":206},[186,57856,804],{"class":669},[186,57858,634],{"class":202},[186,57860,57861],{"class":188,"line":11307},[186,57862,3654],{"class":202},[186,57864,57865],{"class":188,"line":11313},[186,57866,3867],{"emptyLinePlaceholder":1551},[186,57868,57869,57871],{"class":188,"line":11327},[186,57870,56598],{"class":198},[186,57872,622],{"class":202},[186,57874,57875,57877,57879,57881],{"class":188,"line":11333},[186,57876,56327],{"class":206},[186,57878,210],{"class":202},[186,57880,56609],{"class":206},[186,57882,634],{"class":202},[186,57884,57885],{"class":188,"line":11360},[186,57886,3654],{"class":202},[186,57888,57889,57891,57893],{"class":188,"line":11369},[186,57890,53864],{"class":202},[186,57892,1524],{"class":523},[186,57894,552],{"class":202},[186,57896,57897,57899,57901],{"class":188,"line":11375},[186,57898,1470],{"class":202},[186,57900,52786],{"class":523},[186,57902,552],{"class":202},[186,57904,57905],{"class":188,"line":11383},[186,57906,3867],{"emptyLinePlaceholder":1551},[186,57908,57909,57911,57913],{"class":188,"line":11388},[186,57910,520],{"class":202},[186,57912,53247],{"class":523},[186,57914,552],{"class":202},[186,57916,57917,57919,57921,57923,57925,57927],{"class":188,"line":18065},[186,57918,53591],{"class":202},[186,57920,1450],{"class":523},[186,57922,1453],{"class":198},[186,57924,529],{"class":202},[186,57926,54937],{"class":532},[186,57928,552],{"class":202},[186,57930,57931,57933,57935,57937,57939,57941],{"class":188,"line":18071},[186,57932,52793],{"class":202},[186,57934,1450],{"class":523},[186,57936,1453],{"class":198},[186,57938,529],{"class":202},[186,57940,56670],{"class":532},[186,57942,552],{"class":202},[186,57944,57945,57947,57949,57951,57953,57955,57957,57959,57961],{"class":188,"line":18094},[186,57946,56677],{"class":202},[186,57948,164],{"class":523},[186,57950,526],{"class":198},[186,57952,529],{"class":202},[186,57954,56686],{"class":532},[186,57956,536],{"class":198},[186,57958,529],{"class":202},[186,57960,9115],{"class":532},[186,57962,552],{"class":202},[186,57964,57965,57967,57969],{"class":188,"line":18100},[186,57966,53224],{"class":202},[186,57968,1450],{"class":523},[186,57970,552],{"class":202},[186,57972,57973,57975,57977,57979,57981,57983],{"class":188,"line":18123},[186,57974,52793],{"class":202},[186,57976,1450],{"class":523},[186,57978,1453],{"class":198},[186,57980,529],{"class":202},[186,57982,56715],{"class":532},[186,57984,552],{"class":202},[186,57986,57987,57989,57991,57993,57995],{"class":188,"line":18137},[186,57988,56677],{"class":202},[186,57990,169],{"class":523},[186,57992,56726],{"class":202},[186,57994,169],{"class":523},[186,57996,552],{"class":202},[186,57998,57999,58001,58003],{"class":188,"line":18157},[186,58000,56677],{"class":202},[186,58002,19],{"class":523},[186,58004,552],{"class":202},[186,58006,58007,58009,58011,58013,58015,58017,58019,58021],{"class":188,"line":18163},[186,58008,56743],{"class":202},[186,58010,22],{"class":523},[186,58012,1453],{"class":198},[186,58014,529],{"class":202},[186,58016,56752],{"class":532},[186,58018,56755],{"class":202},[186,58020,22],{"class":523},[186,58022,552],{"class":202},[186,58024,58025,58027,58029,58031,58033],{"class":188,"line":18174},[186,58026,56743],{"class":202},[186,58028,22],{"class":523},[186,58030,56755],{"class":202},[186,58032,22],{"class":523},[186,58034,552],{"class":202},[186,58036,58037,58039,58041,58043,58045],{"class":188,"line":18197},[186,58038,56743],{"class":202},[186,58040,22],{"class":523},[186,58042,56755],{"class":202},[186,58044,22],{"class":523},[186,58046,552],{"class":202},[186,58048,58049,58051,58053,58055,58057],{"class":188,"line":18219},[186,58050,56743],{"class":202},[186,58052,22],{"class":523},[186,58054,56755],{"class":202},[186,58056,22],{"class":523},[186,58058,552],{"class":202},[186,58060,58061,58063,58065,58067,58069],{"class":188,"line":18224},[186,58062,56743],{"class":202},[186,58064,22],{"class":523},[186,58066,56755],{"class":202},[186,58068,22],{"class":523},[186,58070,552],{"class":202},[186,58072,58073,58075,58077,58079,58081],{"class":188,"line":18230},[186,58074,56743],{"class":202},[186,58076,22],{"class":523},[186,58078,56755],{"class":202},[186,58080,22],{"class":523},[186,58082,552],{"class":202},[186,58084,58085,58087,58089,58091,58093],{"class":188,"line":18244},[186,58086,56743],{"class":202},[186,58088,22],{"class":523},[186,58090,56755],{"class":202},[186,58092,22],{"class":523},[186,58094,552],{"class":202},[186,58096,58097,58099,58101,58103,58105],{"class":188,"line":18257},[186,58098,56743],{"class":202},[186,58100,22],{"class":523},[186,58102,56755],{"class":202},[186,58104,22],{"class":523},[186,58106,552],{"class":202},[186,58108,58109,58111,58113],{"class":188,"line":18262},[186,58110,56848],{"class":202},[186,58112,19],{"class":523},[186,58114,552],{"class":202},[186,58116,58117,58119,58121],{"class":188,"line":18276},[186,58118,53224],{"class":202},[186,58120,1450],{"class":523},[186,58122,552],{"class":202},[186,58124,58125,58127,58129],{"class":188,"line":18281},[186,58126,53864],{"class":202},[186,58128,1450],{"class":523},[186,58130,552],{"class":202},[186,58132,58133,58135,58137],{"class":188,"line":18287},[186,58134,53591],{"class":202},[186,58136,53260],{"class":523},[186,58138,552],{"class":202},[186,58140,58141,58143,58146,58148],{"class":188,"line":18292},[186,58142,12684],{"class":669},[186,58144,58145],{"class":206}," sliderData",[186,58147,15027],{"class":669},[186,58149,56888],{"class":202},[186,58151,58152,58154,58156,58158,58160,58162,58164],{"class":188,"line":18306},[186,58153,56893],{"class":202},[186,58155,56896],{"class":532},[186,58157,56899],{"class":202},[186,58159,56902],{"class":532},[186,58161,56905],{"class":202},[186,58163,56908],{"class":532},[186,58165,56911],{"class":202},[186,58167,58168,58170,58172,58174,58176,58178,58180],{"class":188,"line":18311},[186,58169,56893],{"class":202},[186,58171,56918],{"class":532},[186,58173,56899],{"class":202},[186,58175,56923],{"class":532},[186,58177,56905],{"class":202},[186,58179,56928],{"class":532},[186,58181,56911],{"class":202},[186,58183,58184,58186,58188,58190,58192,58194,58196],{"class":188,"line":18316},[186,58185,56893],{"class":202},[186,58187,56937],{"class":532},[186,58189,56899],{"class":202},[186,58191,56942],{"class":532},[186,58193,56905],{"class":202},[186,58195,56947],{"class":532},[186,58197,56911],{"class":202},[186,58199,58200,58202,58204,58206,58208,58210,58212],{"class":188,"line":18330},[186,58201,56893],{"class":202},[186,58203,56956],{"class":532},[186,58205,56899],{"class":202},[186,58207,56961],{"class":532},[186,58209,56905],{"class":202},[186,58211,56966],{"class":532},[186,58213,56911],{"class":202},[186,58215,58216,58218,58220,58222,58224,58226,58228],{"class":188,"line":18342},[186,58217,56893],{"class":202},[186,58219,56975],{"class":532},[186,58221,56899],{"class":202},[186,58223,56980],{"class":532},[186,58225,56905],{"class":202},[186,58227,56985],{"class":532},[186,58229,56911],{"class":202},[186,58231,58232,58234,58236,58238,58240,58242,58244],{"class":188,"line":18347},[186,58233,56893],{"class":202},[186,58235,56994],{"class":532},[186,58237,56899],{"class":202},[186,58239,56999],{"class":532},[186,58241,56905],{"class":202},[186,58243,57004],{"class":532},[186,58245,56911],{"class":202},[186,58247,58248,58250,58252,58254,58256,58258,58260],{"class":188,"line":18360},[186,58249,56893],{"class":202},[186,58251,57013],{"class":532},[186,58253,56899],{"class":202},[186,58255,57018],{"class":532},[186,58257,56905],{"class":202},[186,58259,57023],{"class":532},[186,58261,56911],{"class":202},[186,58263,58264,58266,58268,58270,58272,58274,58276],{"class":188,"line":18365},[186,58265,56893],{"class":202},[186,58267,57032],{"class":532},[186,58269,56899],{"class":202},[186,58271,57037],{"class":532},[186,58273,56905],{"class":202},[186,58275,57042],{"class":532},[186,58277,57045],{"class":202},[186,58279,58280],{"class":188,"line":18370},[186,58281,54556],{"class":202},[186,58283,58284],{"class":188,"line":18375},[186,58285,58286],{"class":192},"    \u002F\u002F 1.获取元素\n",[186,58288,58289,58291,58293,58295,58297,58299,58301,58303],{"class":188,"line":18388},[186,58290,12684],{"class":669},[186,58292,57056],{"class":206},[186,58294,15027],{"class":669},[186,58296,55841],{"class":202},[186,58298,55844],{"class":198},[186,58300,832],{"class":202},[186,58302,57067],{"class":532},[186,58304,1629],{"class":202},[186,58306,58307,58309,58311,58313,58315,58317,58319,58321],{"class":188,"line":18393},[186,58308,12684],{"class":669},[186,58310,8288],{"class":206},[186,58312,15027],{"class":669},[186,58314,55841],{"class":202},[186,58316,55844],{"class":198},[186,58318,832],{"class":202},[186,58320,57086],{"class":532},[186,58322,1629],{"class":202},[186,58324,58325,58327,58329,58331],{"class":188,"line":34088},[186,58326,53666],{"class":669},[186,58328,10901],{"class":202},[186,58330,529],{"class":669},[186,58332,48787],{"class":206},[186,58334,58335],{"class":188,"line":34094},[186,58336,58337],{"class":192},"    \u002F\u002F 2.开启定时器\n",[186,58339,58340],{"class":188,"line":34100},[186,58341,58342],{"class":192},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[186,58344,58345,58348,58350,58352],{"class":188,"line":34106},[186,58346,58347],{"class":198},"    setInterval",[186,58349,832],{"class":202},[186,58351,55894],{"class":669},[186,58353,55897],{"class":202},[186,58355,58356,58358],{"class":188,"line":34112},[186,58357,55902],{"class":202},[186,58359,4169],{"class":669},[186,58361,58362,58364,58366,58368,58371,58373],{"class":188,"line":34123},[186,58363,55925],{"class":669},[186,58365,55928],{"class":202},[186,58367,3178],{"class":669},[186,58369,58370],{"class":202}," sliderData.",[186,58372,53415],{"class":206},[186,58374,13905],{"class":202},[186,58376,58377,58380,58382],{"class":188,"line":34129},[186,58378,58379],{"class":202},"        i ",[186,58381,529],{"class":669},[186,58383,48787],{"class":206},[186,58385,58386],{"class":188,"line":34149},[186,58387,53845],{"class":202},[186,58389,58390],{"class":188,"line":34155},[186,58391,58392],{"class":192},"      \u002F\u002F 更换图片路径\n",[186,58394,58395,58397,58399],{"class":188,"line":34166},[186,58396,57162],{"class":202},[186,58398,529],{"class":669},[186,58400,58401],{"class":202}," sliderData[i].url\n",[186,58403,58404],{"class":188,"line":34172},[186,58405,58406],{"class":192},"      \u002F\u002F 把文字写到p里面\n",[186,58408,58409,58411,58413],{"class":188,"line":34178},[186,58410,57172],{"class":202},[186,58412,529],{"class":669},[186,58414,58415],{"class":202}," sliderData[i].title\n",[186,58417,58418],{"class":188,"line":34184},[186,58419,58420],{"class":192},"      \u002F\u002F 小圆点\n",[186,58422,58423],{"class":188,"line":34190},[186,58424,58425],{"class":192},"      \u002F\u002F 先删除以前的active\n",[186,58427,58428],{"class":188,"line":34196},[186,58429,58430],{"class":192},"      \u002F\u002F 只让当前li添加active\n",[186,58432,58433,58435,58437,58439,58442,58445,58448,58450,58452],{"class":188,"line":34202},[186,58434,57212],{"class":202},[186,58436,55844],{"class":198},[186,58438,832],{"class":202},[186,58440,58441],{"class":532},"'.slider-footer .activate'",[186,58443,58444],{"class":202},").classList.",[186,58446,58447],{"class":198},"remove",[186,58449,832],{"class":202},[186,58451,57230],{"class":532},[186,58453,1629],{"class":202},[186,58455,58456,58458,58460,58462,58465,58467,58469,58471,58474,58476,58478,58480,58482],{"class":188,"line":34208},[186,58457,57212],{"class":202},[186,58459,55844],{"class":198},[186,58461,832],{"class":202},[186,58463,58464],{"class":532},"`.slider-footer ul li:nth-child(${",[186,58466,2051],{"class":202},[186,58468,47020],{"class":669},[186,58470,26577],{"class":206},[186,58472,58473],{"class":532},"})`",[186,58475,58444],{"class":202},[186,58477,6797],{"class":198},[186,58479,832],{"class":202},[186,58481,57230],{"class":532},[186,58483,1629],{"class":202},[186,58485,58486],{"class":188,"line":34228},[186,58487,3867],{"emptyLinePlaceholder":1551},[186,58489,58490,58492,58494],{"class":188,"line":34234},[186,58491,55980],{"class":202},[186,58493,7873],{"class":206},[186,58495,1629],{"class":202},[186,58497,58498],{"class":188,"line":34250},[186,58499,3867],{"emptyLinePlaceholder":1551},[186,58501,58502,58504,58506],{"class":188,"line":34256},[186,58503,53864],{"class":202},[186,58505,53260],{"class":523},[186,58507,552],{"class":202},[186,58509,58510,58512,58514],{"class":188,"line":34270},[186,58511,1470],{"class":202},[186,58513,53247],{"class":523},[186,58515,552],{"class":202},[186,58517,58518],{"class":188,"line":34276},[186,58519,3867],{"emptyLinePlaceholder":1551},[186,58521,58522,58524,58526],{"class":188,"line":34291},[186,58523,1470],{"class":202},[186,58525,52089],{"class":523},[186,58527,552],{"class":202},[29,58529,58531],{"id":58530},"_317-重要知识点","3.1.7 重要知识点",[169,58533,58534,58535],{},"浏览器在渲染文本时， ",[54,58536,58537],{},"没有空格或换行符就没有“断行点”",[169,58539,58540],{},[164,58541],{"alt":181,"src":58542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[169,58544,58545],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[169,58547,58548],{},[164,58549],{"alt":181,"src":58550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[169,58552,58553],{},[164,58554],{"alt":181,"src":58555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58557,58559],{"id":58558},"_32-dom事件基础","3.2 DOM事件基础",[29,58561,58563],{"id":58562},"_321-事件监听","3.2.1 事件监听",[169,58565,58566],{},[164,58567],{"alt":181,"src":58568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[169,58570,58571],{},"事件监听有响应的发生",[169,58573,58574],{},[164,58575],{"alt":181,"src":58576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[169,58578,58579],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[169,58581,58582],{},"对于有名函数,要执行的函数名后边不要加()",[29,58584,58586],{"id":58585},"_322-随机点名案例","3.2.2 随机点名案例",[176,58588,58590],{"className":52087,"code":58589,"language":52089,"meta":181,"style":181},"\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",[183,58591,58592,58602,58616,58620,58628,58642,58662,58674,58682,58688,58698,58708,58712,58716,58723,58734,58738,58742,58748,58760,58774,58784,58796,58809,58813,58817,58824,58828,58841,58853,58865,58869,58873,58877,58884,58894,58898,58902,58911,58923,58935,58950,58954,58962,58970,58974,58982,58995,59009,59022,59042,59050,59065,59085,59105,59113,59117,59125,59130,59166,59186,59191,59210,59215,59226,59231,59242,59247,59266,59281,59286,59312,59322,59331,59336,59352,59357,59362,59367,59382,59386,59390,59395,59414,59431,59439,59444,59459,59463,59467,59475,59483,59487],{"__ignoreMap":181},[186,58593,58594,58596,58598,58600],{"class":188,"line":189},[186,58595,52751],{"class":202},[186,58597,52754],{"class":523},[186,58599,52757],{"class":198},[186,58601,552],{"class":202},[186,58603,58604,58606,58608,58610,58612,58614],{"class":188,"line":49},[186,58605,520],{"class":202},[186,58607,52089],{"class":523},[186,58609,52768],{"class":198},[186,58611,529],{"class":202},[186,58613,52773],{"class":532},[186,58615,552],{"class":202},[186,58617,58618],{"class":188,"line":219},[186,58619,3867],{"emptyLinePlaceholder":1551},[186,58621,58622,58624,58626],{"class":188,"line":225},[186,58623,520],{"class":202},[186,58625,52786],{"class":523},[186,58627,552],{"class":202},[186,58629,58630,58632,58634,58636,58638,58640],{"class":188,"line":242},[186,58631,53591],{"class":202},[186,58633,52796],{"class":523},[186,58635,52799],{"class":198},[186,58637,529],{"class":202},[186,58639,52804],{"class":532},[186,58641,552],{"class":202},[186,58643,58644,58646,58648,58650,58652,58654,58656,58658,58660],{"class":188,"line":248},[186,58645,53591],{"class":202},[186,58647,52796],{"class":523},[186,58649,16382],{"class":198},[186,58651,529],{"class":202},[186,58653,52843],{"class":532},[186,58655,52823],{"class":198},[186,58657,529],{"class":202},[186,58659,52850],{"class":532},[186,58661,552],{"class":202},[186,58663,58664,58666,58668,58670,58672],{"class":188,"line":265},[186,58665,53591],{"class":202},[186,58667,52859],{"class":523},[186,58669,52862],{"class":202},[186,58671,52859],{"class":523},[186,58673,552],{"class":202},[186,58675,58676,58678,58680],{"class":188,"line":271},[186,58677,53591],{"class":202},[186,58679,1524],{"class":523},[186,58681,552],{"class":202},[186,58683,58684,58686],{"class":188,"line":288},[186,58685,7866],{"class":523},[186,58687,622],{"class":202},[186,58689,58690,58692,58694,58696],{"class":188,"line":294},[186,58691,56151],{"class":206},[186,58693,210],{"class":202},[186,58695,1803],{"class":206},[186,58697,634],{"class":202},[186,58699,58700,58702,58704,58706],{"class":188,"line":1212},[186,58701,56140],{"class":206},[186,58703,210],{"class":202},[186,58705,1803],{"class":206},[186,58707,634],{"class":202},[186,58709,58710],{"class":188,"line":1223},[186,58711,3654],{"class":202},[186,58713,58714],{"class":188,"line":1236},[186,58715,3867],{"emptyLinePlaceholder":1551},[186,58717,58718,58721],{"class":188,"line":3096},[186,58719,58720],{"class":523},"    h2",[186,58722,622],{"class":202},[186,58724,58725,58728,58730,58732],{"class":188,"line":3110},[186,58726,58727],{"class":206},"      text-align",[186,58729,210],{"class":202},[186,58731,53042],{"class":206},[186,58733,634],{"class":202},[186,58735,58736],{"class":188,"line":3115},[186,58737,3654],{"class":202},[186,58739,58740],{"class":188,"line":3121},[186,58741,3867],{"emptyLinePlaceholder":1551},[186,58743,58744,58746],{"class":188,"line":3142},[186,58745,56197],{"class":198},[186,58747,622],{"class":202},[186,58749,58750,58752,58754,58756,58758],{"class":188,"line":3147},[186,58751,56215],{"class":206},[186,58753,210],{"class":202},[186,58755,3011],{"class":206},[186,58757,804],{"class":669},[186,58759,634],{"class":202},[186,58761,58762,58764,58766,58768,58770,58772],{"class":188,"line":3161},[186,58763,56151],{"class":206},[186,58765,210],{"class":202},[186,58767,666],{"class":206},[186,58769,804],{"class":669},[186,58771,53006],{"class":206},[186,58773,634],{"class":202},[186,58775,58776,58778,58780,58782],{"class":188,"line":3166},[186,58777,56452],{"class":206},[186,58779,210],{"class":202},[186,58781,52928],{"class":206},[186,58783,634],{"class":202},[186,58785,58786,58788,58790,58792,58794],{"class":188,"line":3195},[186,58787,56365],{"class":206},[186,58789,210],{"class":202},[186,58791,2433],{"class":206},[186,58793,804],{"class":669},[186,58795,634],{"class":202},[186,58797,58798,58801,58803,58805,58807],{"class":188,"line":3200},[186,58799,58800],{"class":206},"      line-height",[186,58802,210],{"class":202},[186,58804,2011],{"class":206},[186,58806,804],{"class":669},[186,58808,634],{"class":202},[186,58810,58811],{"class":188,"line":3217},[186,58812,3654],{"class":202},[186,58814,58815],{"class":188,"line":3222},[186,58816,3867],{"emptyLinePlaceholder":1551},[186,58818,58819,58822],{"class":188,"line":3227},[186,58820,58821],{"class":198},"    .qs",[186,58823,622],{"class":202},[186,58825,58826],{"class":188,"line":3232},[186,58827,3867],{"emptyLinePlaceholder":1551},[186,58829,58830,58832,58834,58837,58839],{"class":188,"line":3246},[186,58831,56215],{"class":206},[186,58833,210],{"class":202},[186,58835,58836],{"class":206},"450",[186,58838,804],{"class":669},[186,58840,634],{"class":202},[186,58842,58843,58845,58847,58849,58851],{"class":188,"line":3251},[186,58844,56229],{"class":206},[186,58846,210],{"class":202},[186,58848,2011],{"class":206},[186,58850,804],{"class":669},[186,58852,634],{"class":202},[186,58854,58855,58858,58860,58863],{"class":188,"line":4044},[186,58856,58857],{"class":206},"      color",[186,58859,210],{"class":202},[186,58861,58862],{"class":206},"red",[186,58864,634],{"class":202},[186,58866,58867],{"class":188,"line":4058},[186,58868,3867],{"emptyLinePlaceholder":1551},[186,58870,58871],{"class":188,"line":4066},[186,58872,3654],{"class":202},[186,58874,58875],{"class":188,"line":4071},[186,58876,3867],{"emptyLinePlaceholder":1551},[186,58878,58879,58882],{"class":188,"line":4077},[186,58880,58881],{"class":198},"    .btns",[186,58883,622],{"class":202},[186,58885,58886,58888,58890,58892],{"class":188,"line":4083},[186,58887,58727],{"class":206},[186,58889,210],{"class":202},[186,58891,53042],{"class":206},[186,58893,634],{"class":202},[186,58895,58896],{"class":188,"line":4088},[186,58897,3654],{"class":202},[186,58899,58900],{"class":188,"line":9411},[186,58901,3867],{"emptyLinePlaceholder":1551},[186,58903,58904,58906,58909],{"class":188,"line":9435},[186,58905,58881],{"class":198},[186,58907,58908],{"class":523}," button",[186,58910,622],{"class":202},[186,58912,58913,58915,58917,58919,58921],{"class":188,"line":9440},[186,58914,56215],{"class":206},[186,58916,210],{"class":202},[186,58918,2425],{"class":206},[186,58920,804],{"class":669},[186,58922,634],{"class":202},[186,58924,58925,58927,58929,58931,58933],{"class":188,"line":9446},[186,58926,56229],{"class":206},[186,58928,210],{"class":202},[186,58930,1884],{"class":206},[186,58932,804],{"class":669},[186,58934,634],{"class":202},[186,58936,58937,58939,58941,58943,58946,58948],{"class":188,"line":9473},[186,58938,56151],{"class":206},[186,58940,210],{"class":202},[186,58942,1803],{"class":206},[186,58944,58945],{"class":206}," 50",[186,58947,804],{"class":669},[186,58949,634],{"class":202},[186,58951,58952],{"class":188,"line":9478},[186,58953,3654],{"class":202},[186,58955,58956,58958,58960],{"class":188,"line":9484},[186,58957,53864],{"class":202},[186,58959,1524],{"class":523},[186,58961,552],{"class":202},[186,58963,58964,58966,58968],{"class":188,"line":9496},[186,58965,1470],{"class":202},[186,58967,52786],{"class":523},[186,58969,552],{"class":202},[186,58971,58972],{"class":188,"line":9508},[186,58973,3867],{"emptyLinePlaceholder":1551},[186,58975,58976,58978,58980],{"class":188,"line":9520},[186,58977,520],{"class":202},[186,58979,53247],{"class":523},[186,58981,552],{"class":202},[186,58983,58984,58986,58988,58991,58993],{"class":188,"line":11179},[186,58985,53591],{"class":202},[186,58987,14],{"class":523},[186,58989,58990],{"class":202},">随机点名\u003C\u002F",[186,58992,14],{"class":523},[186,58994,552],{"class":202},[186,58996,58997,58999,59001,59003,59005,59007],{"class":188,"line":11204},[186,58998,53591],{"class":202},[186,59000,1450],{"class":523},[186,59002,1453],{"class":198},[186,59004,529],{"class":202},[186,59006,54937],{"class":532},[186,59008,552],{"class":202},[186,59010,59011,59013,59015,59018,59020],{"class":188,"line":11227},[186,59012,52793],{"class":202},[186,59014,186],{"class":523},[186,59016,59017],{"class":202},">名字是：\u003C\u002F",[186,59019,186],{"class":523},[186,59021,552],{"class":202},[186,59023,59024,59026,59028,59030,59032,59035,59038,59040],{"class":188,"line":11251},[186,59025,52793],{"class":202},[186,59027,1450],{"class":523},[186,59029,1453],{"class":198},[186,59031,529],{"class":202},[186,59033,59034],{"class":532},"\"qs\"",[186,59036,59037],{"class":202},">这里显示姓名\u003C\u002F",[186,59039,1450],{"class":523},[186,59041,552],{"class":202},[186,59043,59044,59046,59048],{"class":188,"line":11256},[186,59045,53864],{"class":202},[186,59047,1450],{"class":523},[186,59049,552],{"class":202},[186,59051,59052,59054,59056,59058,59060,59063],{"class":188,"line":11261},[186,59053,53591],{"class":202},[186,59055,1450],{"class":523},[186,59057,1453],{"class":198},[186,59059,529],{"class":202},[186,59061,59062],{"class":532},"\"btns\"",[186,59064,552],{"class":202},[186,59066,59067,59069,59071,59073,59075,59078,59081,59083],{"class":188,"line":11266},[186,59068,52793],{"class":202},[186,59070,55332],{"class":523},[186,59072,1453],{"class":198},[186,59074,529],{"class":202},[186,59076,59077],{"class":532},"\"start\"",[186,59079,59080],{"class":202},">开始\u003C\u002F",[186,59082,55332],{"class":523},[186,59084,552],{"class":202},[186,59086,59087,59089,59091,59093,59095,59098,59101,59103],{"class":188,"line":11275},[186,59088,52793],{"class":202},[186,59090,55332],{"class":523},[186,59092,1453],{"class":198},[186,59094,529],{"class":202},[186,59096,59097],{"class":532},"\"end\"",[186,59099,59100],{"class":202},">结束\u003C\u002F",[186,59102,55332],{"class":523},[186,59104,552],{"class":202},[186,59106,59107,59109,59111],{"class":188,"line":11280},[186,59108,53864],{"class":202},[186,59110,1450],{"class":523},[186,59112,552],{"class":202},[186,59114,59115],{"class":188,"line":11286},[186,59116,3867],{"emptyLinePlaceholder":1551},[186,59118,59119,59121,59123],{"class":188,"line":11307},[186,59120,53591],{"class":202},[186,59122,53260],{"class":523},[186,59124,552],{"class":202},[186,59126,59127],{"class":188,"line":11313},[186,59128,59129],{"class":192},"    \u002F\u002F 数据数组\n",[186,59131,59132,59134,59137,59139,59141,59144,59146,59149,59151,59154,59156,59159,59161,59164],{"class":188,"line":11327},[186,59133,12684],{"class":669},[186,59135,59136],{"class":206}," arr",[186,59138,15027],{"class":669},[186,59140,53673],{"class":202},[186,59142,59143],{"class":532},"'马超'",[186,59145,13898],{"class":202},[186,59147,59148],{"class":532},"'黄忠'",[186,59150,13898],{"class":202},[186,59152,59153],{"class":532},"'赵云'",[186,59155,13898],{"class":202},[186,59157,59158],{"class":532},"'关羽'",[186,59160,13898],{"class":202},[186,59162,59163],{"class":532},"'张飞'",[186,59165,34701],{"class":202},[186,59167,59168,59170,59173,59175,59177,59179,59181,59184],{"class":188,"line":11333},[186,59169,12684],{"class":669},[186,59171,59172],{"class":206}," qs",[186,59174,15027],{"class":669},[186,59176,55841],{"class":202},[186,59178,55844],{"class":198},[186,59180,832],{"class":202},[186,59182,59183],{"class":532},"'.qs'",[186,59185,1629],{"class":202},[186,59187,59188],{"class":188,"line":11360},[186,59189,59190],{"class":192},"    \u002F\u002F 1.业务1.开始按钮模块\n",[186,59192,59193,59195,59197,59199,59201,59203,59205,59208],{"class":188,"line":11369},[186,59194,12684],{"class":669},[186,59196,5650],{"class":206},[186,59198,15027],{"class":669},[186,59200,55841],{"class":202},[186,59202,55844],{"class":198},[186,59204,832],{"class":202},[186,59206,59207],{"class":532},"'.start'",[186,59209,1629],{"class":202},[186,59211,59212],{"class":188,"line":11375},[186,59213,59214],{"class":192},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[186,59216,59217,59219,59222,59224],{"class":188,"line":11383},[186,59218,53666],{"class":669},[186,59220,59221],{"class":202}," timerId ",[186,59223,529],{"class":669},[186,59225,48787],{"class":206},[186,59227,59228],{"class":188,"line":11388},[186,59229,59230],{"class":192},"    \u002F\u002F 随机号要全局变量\n",[186,59232,59233,59235,59238,59240],{"class":188,"line":18065},[186,59234,53666],{"class":669},[186,59236,59237],{"class":202}," random ",[186,59239,529],{"class":669},[186,59241,48787],{"class":206},[186,59243,59244],{"class":188,"line":18071},[186,59245,59246],{"class":192},"    \u002F\u002F 1.1 添加点击事件\n",[186,59248,59249,59252,59255,59257,59260,59262,59264],{"class":188,"line":18094},[186,59250,59251],{"class":202},"    start.",[186,59253,59254],{"class":198},"addEventListener",[186,59256,832],{"class":202},[186,59258,59259],{"class":532},"'click'",[186,59261,13898],{"class":202},[186,59263,55894],{"class":669},[186,59265,55897],{"class":202},[186,59267,59268,59271,59273,59275,59277,59279],{"class":188,"line":18100},[186,59269,59270],{"class":202},"      timerId ",[186,59272,529],{"class":669},[186,59274,55889],{"class":198},[186,59276,832],{"class":202},[186,59278,55894],{"class":669},[186,59280,55897],{"class":202},[186,59282,59283],{"class":188,"line":18123},[186,59284,59285],{"class":192},"        \u002F\u002F 随机数\n",[186,59287,59288,59291,59293,59296,59299,59302,59304,59306,59308,59310],{"class":188,"line":18137},[186,59289,59290],{"class":202},"        random ",[186,59292,529],{"class":669},[186,59294,59295],{"class":198}," parseInt",[186,59297,59298],{"class":202},"(Math.",[186,59300,59301],{"class":198},"random",[186,59303,14513],{"class":202},[186,59305,2065],{"class":669},[186,59307,53412],{"class":202},[186,59309,53415],{"class":206},[186,59311,1629],{"class":202},[186,59313,59314,59317,59319],{"class":188,"line":18157},[186,59315,59316],{"class":202},"        qs.innerHTML ",[186,59318,529],{"class":669},[186,59320,59321],{"class":202}," arr[random]\n",[186,59323,59324,59327,59329],{"class":188,"line":18163},[186,59325,59326],{"class":202},"      }, ",[186,59328,1884],{"class":206},[186,59330,1629],{"class":202},[186,59332,59333],{"class":188,"line":18174},[186,59334,59335],{"class":192},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[186,59337,59338,59340,59343,59345,59348,59350],{"class":188,"line":18197},[186,59339,55925],{"class":669},[186,59341,59342],{"class":202}," (arr.",[186,59344,53415],{"class":206},[186,59346,59347],{"class":669}," ===",[186,59349,26577],{"class":206},[186,59351,13905],{"class":202},[186,59353,59354],{"class":188,"line":18219},[186,59355,59356],{"class":192},"        \u002F\u002F start.disabled = true\n",[186,59358,59359],{"class":188,"line":18224},[186,59360,59361],{"class":192},"        \u002F\u002F end.disabled = true\n",[186,59363,59364],{"class":188,"line":18230},[186,59365,59366],{"class":192},"        \u002F\u002F 可以合起来写\n",[186,59368,59369,59372,59374,59377,59379],{"class":188,"line":18244},[186,59370,59371],{"class":202},"        start.disabled ",[186,59373,529],{"class":669},[186,59375,59376],{"class":202}," end.disabled ",[186,59378,529],{"class":669},[186,59380,59381],{"class":206}," true\n",[186,59383,59384],{"class":188,"line":18257},[186,59385,53845],{"class":202},[186,59387,59388],{"class":188,"line":18262},[186,59389,34916],{"class":202},[186,59391,59392],{"class":188,"line":18276},[186,59393,59394],{"class":192},"    \u002F\u002F 1.2 关闭按钮模块\n",[186,59396,59397,59399,59401,59403,59405,59407,59409,59412],{"class":188,"line":18281},[186,59398,12684],{"class":669},[186,59400,5666],{"class":206},[186,59402,15027],{"class":669},[186,59404,55841],{"class":202},[186,59406,55844],{"class":198},[186,59408,832],{"class":202},[186,59410,59411],{"class":532},"'.end'",[186,59413,1629],{"class":202},[186,59415,59416,59419,59421,59423,59425,59427,59429],{"class":188,"line":18287},[186,59417,59418],{"class":202},"    end.",[186,59420,59254],{"class":198},[186,59422,832],{"class":202},[186,59424,59259],{"class":532},[186,59426,13898],{"class":202},[186,59428,55894],{"class":669},[186,59430,55897],{"class":202},[186,59432,59433,59436],{"class":188,"line":18292},[186,59434,59435],{"class":198},"      clearInterval",[186,59437,59438],{"class":202},"(timerId)\n",[186,59440,59441],{"class":188,"line":18306},[186,59442,59443],{"class":192},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[186,59445,59446,59449,59452,59455,59457],{"class":188,"line":18311},[186,59447,59448],{"class":202},"      arr.",[186,59450,59451],{"class":198},"splice",[186,59453,59454],{"class":202},"(random, ",[186,59456,1829],{"class":206},[186,59458,1629],{"class":202},[186,59460,59461],{"class":188,"line":18316},[186,59462,34916],{"class":202},[186,59464,59465],{"class":188,"line":18330},[186,59466,3867],{"emptyLinePlaceholder":1551},[186,59468,59469,59471,59473],{"class":188,"line":18342},[186,59470,53864],{"class":202},[186,59472,53260],{"class":523},[186,59474,552],{"class":202},[186,59476,59477,59479,59481],{"class":188,"line":18347},[186,59478,1470],{"class":202},[186,59480,53247],{"class":523},[186,59482,552],{"class":202},[186,59484,59485],{"class":188,"line":18360},[186,59486,3867],{"emptyLinePlaceholder":1551},[186,59488,59489,59491,59493],{"class":188,"line":18365},[186,59490,1470],{"class":202},[186,59492,52089],{"class":523},[186,59494,552],{"class":202},[169,59496,59497],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[29,59499,59501],{"id":59500},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[176,59503,59505],{"className":52087,"code":59504,"language":52089,"meta":181,"style":181},"\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",[183,59506,59507,59517,59531,59535,59543,59557,59577,59589,59597,59601,59609,59621,59629,59648,59665,59681,59691,59695,59703,59711,59715],{"__ignoreMap":181},[186,59508,59509,59511,59513,59515],{"class":188,"line":189},[186,59510,52751],{"class":202},[186,59512,52754],{"class":523},[186,59514,52757],{"class":198},[186,59516,552],{"class":202},[186,59518,59519,59521,59523,59525,59527,59529],{"class":188,"line":49},[186,59520,520],{"class":202},[186,59522,52089],{"class":523},[186,59524,52768],{"class":198},[186,59526,529],{"class":202},[186,59528,52773],{"class":532},[186,59530,552],{"class":202},[186,59532,59533],{"class":188,"line":219},[186,59534,3867],{"emptyLinePlaceholder":1551},[186,59536,59537,59539,59541],{"class":188,"line":225},[186,59538,520],{"class":202},[186,59540,52786],{"class":523},[186,59542,552],{"class":202},[186,59544,59545,59547,59549,59551,59553,59555],{"class":188,"line":242},[186,59546,53591],{"class":202},[186,59548,52796],{"class":523},[186,59550,52799],{"class":198},[186,59552,529],{"class":202},[186,59554,52804],{"class":532},[186,59556,552],{"class":202},[186,59558,59559,59561,59563,59565,59567,59569,59571,59573,59575],{"class":188,"line":248},[186,59560,53591],{"class":202},[186,59562,52796],{"class":523},[186,59564,16382],{"class":198},[186,59566,529],{"class":202},[186,59568,52843],{"class":532},[186,59570,52823],{"class":198},[186,59572,529],{"class":202},[186,59574,52850],{"class":532},[186,59576,552],{"class":202},[186,59578,59579,59581,59583,59585,59587],{"class":188,"line":265},[186,59580,53591],{"class":202},[186,59582,52859],{"class":523},[186,59584,52862],{"class":202},[186,59586,52859],{"class":523},[186,59588,552],{"class":202},[186,59590,59591,59593,59595],{"class":188,"line":271},[186,59592,1470],{"class":202},[186,59594,52786],{"class":523},[186,59596,552],{"class":202},[186,59598,59599],{"class":188,"line":288},[186,59600,3867],{"emptyLinePlaceholder":1551},[186,59602,59603,59605,59607],{"class":188,"line":294},[186,59604,520],{"class":202},[186,59606,53247],{"class":523},[186,59608,552],{"class":202},[186,59610,59611,59613,59615,59617,59619],{"class":188,"line":1212},[186,59612,53591],{"class":202},[186,59614,55332],{"class":523},[186,59616,55338],{"class":202},[186,59618,55332],{"class":523},[186,59620,552],{"class":202},[186,59622,59623,59625,59627],{"class":188,"line":1223},[186,59624,53591],{"class":202},[186,59626,53260],{"class":523},[186,59628,552],{"class":202},[186,59630,59631,59633,59635,59637,59639,59641,59643,59646],{"class":188,"line":1236},[186,59632,12684],{"class":669},[186,59634,55836],{"class":206},[186,59636,15027],{"class":669},[186,59638,55841],{"class":202},[186,59640,55844],{"class":198},[186,59642,832],{"class":202},[186,59644,59645],{"class":532},"'button'",[186,59647,1629],{"class":202},[186,59649,59650,59653,59655,59657,59659,59661,59663],{"class":188,"line":3096},[186,59651,59652],{"class":202},"    btn.",[186,59654,59254],{"class":198},[186,59656,832],{"class":202},[186,59658,59259],{"class":532},[186,59660,13898],{"class":202},[186,59662,55894],{"class":669},[186,59664,55897],{"class":202},[186,59666,59667,59670,59672,59674,59677,59679],{"class":188,"line":3110},[186,59668,59669],{"class":669},"      const",[186,59671,3707],{"class":206},[186,59673,15027],{"class":669},[186,59675,59676],{"class":202}," Math.",[186,59678,59301],{"class":198},[186,59680,3443],{"class":202},[186,59682,59683,59686,59689],{"class":188,"line":3115},[186,59684,59685],{"class":202},"      console.",[186,59687,59688],{"class":198},"log",[186,59690,1636],{"class":202},[186,59692,59693],{"class":188,"line":3121},[186,59694,34916],{"class":202},[186,59696,59697,59699,59701],{"class":188,"line":3142},[186,59698,53864],{"class":202},[186,59700,53260],{"class":523},[186,59702,552],{"class":202},[186,59704,59705,59707,59709],{"class":188,"line":3147},[186,59706,1470],{"class":202},[186,59708,53247],{"class":523},[186,59710,552],{"class":202},[186,59712,59713],{"class":188,"line":3161},[186,59714,3867],{"emptyLinePlaceholder":1551},[186,59716,59717,59719,59721],{"class":188,"line":3166},[186,59718,1470],{"class":202},[186,59720,52089],{"class":523},[186,59722,552],{"class":202},[169,59724,59725],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[169,59727,59728],{},"常量不可以重新赋值",[169,59730,59731],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[176,59733,59735],{"className":52087,"code":59734,"language":52089,"meta":181,"style":181},"\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",[183,59736,59737,59747,59761,59765,59773,59787,59807,59819,59827,59831,59839,59851,59859,59870,59888,59904,59918,59926,59930,59938,59946,59950],{"__ignoreMap":181},[186,59738,59739,59741,59743,59745],{"class":188,"line":189},[186,59740,52751],{"class":202},[186,59742,52754],{"class":523},[186,59744,52757],{"class":198},[186,59746,552],{"class":202},[186,59748,59749,59751,59753,59755,59757,59759],{"class":188,"line":49},[186,59750,520],{"class":202},[186,59752,52089],{"class":523},[186,59754,52768],{"class":198},[186,59756,529],{"class":202},[186,59758,52773],{"class":532},[186,59760,552],{"class":202},[186,59762,59763],{"class":188,"line":219},[186,59764,3867],{"emptyLinePlaceholder":1551},[186,59766,59767,59769,59771],{"class":188,"line":225},[186,59768,520],{"class":202},[186,59770,52786],{"class":523},[186,59772,552],{"class":202},[186,59774,59775,59777,59779,59781,59783,59785],{"class":188,"line":242},[186,59776,53591],{"class":202},[186,59778,52796],{"class":523},[186,59780,52799],{"class":198},[186,59782,529],{"class":202},[186,59784,52804],{"class":532},[186,59786,552],{"class":202},[186,59788,59789,59791,59793,59795,59797,59799,59801,59803,59805],{"class":188,"line":248},[186,59790,53591],{"class":202},[186,59792,52796],{"class":523},[186,59794,16382],{"class":198},[186,59796,529],{"class":202},[186,59798,52843],{"class":532},[186,59800,52823],{"class":198},[186,59802,529],{"class":202},[186,59804,52850],{"class":532},[186,59806,552],{"class":202},[186,59808,59809,59811,59813,59815,59817],{"class":188,"line":265},[186,59810,53591],{"class":202},[186,59812,52859],{"class":523},[186,59814,52862],{"class":202},[186,59816,52859],{"class":523},[186,59818,552],{"class":202},[186,59820,59821,59823,59825],{"class":188,"line":271},[186,59822,1470],{"class":202},[186,59824,52786],{"class":523},[186,59826,552],{"class":202},[186,59828,59829],{"class":188,"line":288},[186,59830,3867],{"emptyLinePlaceholder":1551},[186,59832,59833,59835,59837],{"class":188,"line":294},[186,59834,520],{"class":202},[186,59836,53247],{"class":523},[186,59838,552],{"class":202},[186,59840,59841,59843,59845,59847,59849],{"class":188,"line":1212},[186,59842,53591],{"class":202},[186,59844,55332],{"class":523},[186,59846,55338],{"class":202},[186,59848,55332],{"class":523},[186,59850,552],{"class":202},[186,59852,59853,59855,59857],{"class":188,"line":1223},[186,59854,53591],{"class":202},[186,59856,53260],{"class":523},[186,59858,552],{"class":202},[186,59860,59861,59863,59865,59867],{"class":188,"line":1236},[186,59862,12684],{"class":669},[186,59864,3707],{"class":206},[186,59866,15027],{"class":669},[186,59868,59869],{"class":206}," 10\n",[186,59871,59872,59874,59876,59878,59880,59882,59884,59886],{"class":188,"line":3096},[186,59873,12684],{"class":669},[186,59875,55836],{"class":206},[186,59877,15027],{"class":669},[186,59879,55841],{"class":202},[186,59881,55844],{"class":198},[186,59883,832],{"class":202},[186,59885,59645],{"class":532},[186,59887,1629],{"class":202},[186,59889,59890,59892,59894,59896,59898,59900,59902],{"class":188,"line":3110},[186,59891,59652],{"class":202},[186,59893,59254],{"class":198},[186,59895,832],{"class":202},[186,59897,59259],{"class":532},[186,59899,13898],{"class":202},[186,59901,55894],{"class":669},[186,59903,55897],{"class":202},[186,59905,59906,59908,59910,59912,59914,59916],{"class":188,"line":3115},[186,59907,59669],{"class":669},[186,59909,3707],{"class":206},[186,59911,15027],{"class":669},[186,59913,59676],{"class":202},[186,59915,59301],{"class":198},[186,59917,3443],{"class":202},[186,59919,59920,59922,59924],{"class":188,"line":3121},[186,59921,59685],{"class":202},[186,59923,59688],{"class":198},[186,59925,1636],{"class":202},[186,59927,59928],{"class":188,"line":3142},[186,59929,34916],{"class":202},[186,59931,59932,59934,59936],{"class":188,"line":3147},[186,59933,53864],{"class":202},[186,59935,53260],{"class":523},[186,59937,552],{"class":202},[186,59939,59940,59942,59944],{"class":188,"line":3161},[186,59941,1470],{"class":202},[186,59943,53247],{"class":523},[186,59945,552],{"class":202},[186,59947,59948],{"class":188,"line":3166},[186,59949,3867],{"emptyLinePlaceholder":1551},[186,59951,59952,59954,59956],{"class":188,"line":3195},[186,59953,1470],{"class":202},[186,59955,52089],{"class":523},[186,59957,552],{"class":202},[169,59959,59960],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[176,59962,59964],{"className":52087,"code":59963,"language":52089,"meta":181,"style":181},"\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",[183,59965,59966,59976,59990,59994,60002,60016,60036,60048,60056,60060,60068,60080,60088,60098,60116,60132,60145,60153,60157,60165,60173,60177],{"__ignoreMap":181},[186,59967,59968,59970,59972,59974],{"class":188,"line":189},[186,59969,52751],{"class":202},[186,59971,52754],{"class":523},[186,59973,52757],{"class":198},[186,59975,552],{"class":202},[186,59977,59978,59980,59982,59984,59986,59988],{"class":188,"line":49},[186,59979,520],{"class":202},[186,59981,52089],{"class":523},[186,59983,52768],{"class":198},[186,59985,529],{"class":202},[186,59987,52773],{"class":532},[186,59989,552],{"class":202},[186,59991,59992],{"class":188,"line":219},[186,59993,3867],{"emptyLinePlaceholder":1551},[186,59995,59996,59998,60000],{"class":188,"line":225},[186,59997,520],{"class":202},[186,59999,52786],{"class":523},[186,60001,552],{"class":202},[186,60003,60004,60006,60008,60010,60012,60014],{"class":188,"line":242},[186,60005,53591],{"class":202},[186,60007,52796],{"class":523},[186,60009,52799],{"class":198},[186,60011,529],{"class":202},[186,60013,52804],{"class":532},[186,60015,552],{"class":202},[186,60017,60018,60020,60022,60024,60026,60028,60030,60032,60034],{"class":188,"line":248},[186,60019,53591],{"class":202},[186,60021,52796],{"class":523},[186,60023,16382],{"class":198},[186,60025,529],{"class":202},[186,60027,52843],{"class":532},[186,60029,52823],{"class":198},[186,60031,529],{"class":202},[186,60033,52850],{"class":532},[186,60035,552],{"class":202},[186,60037,60038,60040,60042,60044,60046],{"class":188,"line":265},[186,60039,53591],{"class":202},[186,60041,52859],{"class":523},[186,60043,52862],{"class":202},[186,60045,52859],{"class":523},[186,60047,552],{"class":202},[186,60049,60050,60052,60054],{"class":188,"line":271},[186,60051,1470],{"class":202},[186,60053,52786],{"class":523},[186,60055,552],{"class":202},[186,60057,60058],{"class":188,"line":288},[186,60059,3867],{"emptyLinePlaceholder":1551},[186,60061,60062,60064,60066],{"class":188,"line":294},[186,60063,520],{"class":202},[186,60065,53247],{"class":523},[186,60067,552],{"class":202},[186,60069,60070,60072,60074,60076,60078],{"class":188,"line":1212},[186,60071,53591],{"class":202},[186,60073,55332],{"class":523},[186,60075,55338],{"class":202},[186,60077,55332],{"class":523},[186,60079,552],{"class":202},[186,60081,60082,60084,60086],{"class":188,"line":1223},[186,60083,53591],{"class":202},[186,60085,53260],{"class":523},[186,60087,552],{"class":202},[186,60089,60090,60092,60094,60096],{"class":188,"line":1236},[186,60091,12684],{"class":669},[186,60093,3707],{"class":206},[186,60095,15027],{"class":669},[186,60097,59869],{"class":206},[186,60099,60100,60102,60104,60106,60108,60110,60112,60114],{"class":188,"line":3096},[186,60101,12684],{"class":669},[186,60103,55836],{"class":206},[186,60105,15027],{"class":669},[186,60107,55841],{"class":202},[186,60109,55844],{"class":198},[186,60111,832],{"class":202},[186,60113,59645],{"class":532},[186,60115,1629],{"class":202},[186,60117,60118,60120,60122,60124,60126,60128,60130],{"class":188,"line":3110},[186,60119,59652],{"class":202},[186,60121,59254],{"class":198},[186,60123,832],{"class":202},[186,60125,59259],{"class":532},[186,60127,13898],{"class":202},[186,60129,55894],{"class":669},[186,60131,55897],{"class":202},[186,60133,60134,60137,60139,60141,60143],{"class":188,"line":3115},[186,60135,60136],{"class":202},"      num ",[186,60138,529],{"class":669},[186,60140,59676],{"class":202},[186,60142,59301],{"class":198},[186,60144,3443],{"class":202},[186,60146,60147,60149,60151],{"class":188,"line":3121},[186,60148,59685],{"class":202},[186,60150,59688],{"class":198},[186,60152,1636],{"class":202},[186,60154,60155],{"class":188,"line":3142},[186,60156,34916],{"class":202},[186,60158,60159,60161,60163],{"class":188,"line":3147},[186,60160,53864],{"class":202},[186,60162,53260],{"class":523},[186,60164,552],{"class":202},[186,60166,60167,60169,60171],{"class":188,"line":3161},[186,60168,1470],{"class":202},[186,60170,53247],{"class":523},[186,60172,552],{"class":202},[186,60174,60175],{"class":188,"line":3166},[186,60176,3867],{"emptyLinePlaceholder":1551},[186,60178,60179,60181,60183],{"class":188,"line":3195},[186,60180,1470],{"class":202},[186,60182,52089],{"class":523},[186,60184,552],{"class":202},[169,60186,60187],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[29,60189,60191],{"id":60190},"_324-事件监听版本","3.2.4 事件监听版本",[169,60193,60194],{},[164,60195],{"alt":181,"src":60196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[169,60198,60199],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[169,60201,60202],{},"这种方式会覆盖前边的事件监听:",[176,60204,60206],{"className":52087,"code":60205,"language":52089,"meta":181,"style":181},"\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",[183,60207,60208,60218,60232,60236,60244,60258,60278,60290,60298,60302,60310,60322,60330,60348,60362,60373,60377,60389,60399,60403,60411,60419,60423],{"__ignoreMap":181},[186,60209,60210,60212,60214,60216],{"class":188,"line":189},[186,60211,52751],{"class":202},[186,60213,52754],{"class":523},[186,60215,52757],{"class":198},[186,60217,552],{"class":202},[186,60219,60220,60222,60224,60226,60228,60230],{"class":188,"line":49},[186,60221,520],{"class":202},[186,60223,52089],{"class":523},[186,60225,52768],{"class":198},[186,60227,529],{"class":202},[186,60229,52773],{"class":532},[186,60231,552],{"class":202},[186,60233,60234],{"class":188,"line":219},[186,60235,3867],{"emptyLinePlaceholder":1551},[186,60237,60238,60240,60242],{"class":188,"line":225},[186,60239,520],{"class":202},[186,60241,52786],{"class":523},[186,60243,552],{"class":202},[186,60245,60246,60248,60250,60252,60254,60256],{"class":188,"line":242},[186,60247,53591],{"class":202},[186,60249,52796],{"class":523},[186,60251,52799],{"class":198},[186,60253,529],{"class":202},[186,60255,52804],{"class":532},[186,60257,552],{"class":202},[186,60259,60260,60262,60264,60266,60268,60270,60272,60274,60276],{"class":188,"line":248},[186,60261,53591],{"class":202},[186,60263,52796],{"class":523},[186,60265,16382],{"class":198},[186,60267,529],{"class":202},[186,60269,52843],{"class":532},[186,60271,52823],{"class":198},[186,60273,529],{"class":202},[186,60275,52850],{"class":532},[186,60277,552],{"class":202},[186,60279,60280,60282,60284,60286,60288],{"class":188,"line":265},[186,60281,53591],{"class":202},[186,60283,52859],{"class":523},[186,60285,52862],{"class":202},[186,60287,52859],{"class":523},[186,60289,552],{"class":202},[186,60291,60292,60294,60296],{"class":188,"line":271},[186,60293,1470],{"class":202},[186,60295,52786],{"class":523},[186,60297,552],{"class":202},[186,60299,60300],{"class":188,"line":288},[186,60301,3867],{"emptyLinePlaceholder":1551},[186,60303,60304,60306,60308],{"class":188,"line":294},[186,60305,520],{"class":202},[186,60307,53247],{"class":523},[186,60309,552],{"class":202},[186,60311,60312,60314,60316,60318,60320],{"class":188,"line":1212},[186,60313,53591],{"class":202},[186,60315,55332],{"class":523},[186,60317,55338],{"class":202},[186,60319,55332],{"class":523},[186,60321,552],{"class":202},[186,60323,60324,60326,60328],{"class":188,"line":1223},[186,60325,53591],{"class":202},[186,60327,53260],{"class":523},[186,60329,552],{"class":202},[186,60331,60332,60334,60336,60338,60340,60342,60344,60346],{"class":188,"line":1236},[186,60333,12684],{"class":669},[186,60335,55836],{"class":206},[186,60337,15027],{"class":669},[186,60339,55841],{"class":202},[186,60341,55844],{"class":198},[186,60343,832],{"class":202},[186,60345,59645],{"class":532},[186,60347,1629],{"class":202},[186,60349,60350,60352,60355,60357,60360],{"class":188,"line":3096},[186,60351,59652],{"class":202},[186,60353,60354],{"class":198},"onclick",[186,60356,15027],{"class":669},[186,60358,60359],{"class":669}," function",[186,60361,55897],{"class":202},[186,60363,60364,60367,60369,60371],{"class":188,"line":3110},[186,60365,60366],{"class":198},"      alert",[186,60368,832],{"class":202},[186,60370,2082],{"class":206},[186,60372,1629],{"class":202},[186,60374,60375],{"class":188,"line":3115},[186,60376,3654],{"class":202},[186,60378,60379,60381,60383,60385,60387],{"class":188,"line":3121},[186,60380,59652],{"class":202},[186,60382,60354],{"class":198},[186,60384,15027],{"class":669},[186,60386,60359],{"class":669},[186,60388,55897],{"class":202},[186,60390,60391,60393,60395,60397],{"class":188,"line":3142},[186,60392,60366],{"class":198},[186,60394,832],{"class":202},[186,60396,2358],{"class":206},[186,60398,1629],{"class":202},[186,60400,60401],{"class":188,"line":3147},[186,60402,3654],{"class":202},[186,60404,60405,60407,60409],{"class":188,"line":3161},[186,60406,53864],{"class":202},[186,60408,53260],{"class":523},[186,60410,552],{"class":202},[186,60412,60413,60415,60417],{"class":188,"line":3166},[186,60414,1470],{"class":202},[186,60416,53247],{"class":523},[186,60418,552],{"class":202},[186,60420,60421],{"class":188,"line":3195},[186,60422,3867],{"emptyLinePlaceholder":1551},[186,60424,60425,60427,60429],{"class":188,"line":3200},[186,60426,1470],{"class":202},[186,60428,52089],{"class":523},[186,60430,552],{"class":202},[169,60432,60433],{},"只要点击就输出结果为22,前边11被覆盖了",[176,60435,60437],{"className":52087,"code":60436,"language":52089,"meta":181,"style":181},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[183,60438,60439,60444,60449,60453,60458,60463],{"__ignoreMap":181},[186,60440,60441],{"class":188,"line":189},[186,60442,60443],{"class":202},"  btn.addEventListener('click', function () {\n",[186,60445,60446],{"class":188,"line":49},[186,60447,60448],{"class":202},"      alert(11)\n",[186,60450,60451],{"class":188,"line":219},[186,60452,34916],{"class":202},[186,60454,60455],{"class":188,"line":225},[186,60456,60457],{"class":202},"    btn.addEventListener('click', function () {\n",[186,60459,60460],{"class":188,"line":242},[186,60461,60462],{"class":202},"      alert(22)\n",[186,60464,60465],{"class":188,"line":248},[186,60466,34916],{"class":202},[169,60468,60469],{},"点击第一次输出11,第二次点击为22",[29,60471,60473],{"id":60472},"_325-事件类型","3.2.5 事件类型",[169,60475,60476],{},[164,60477],{"alt":181,"src":60478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23459,60480,60482],{"id":60481},"_3251-鼠标事件","3.2.5.1 鼠标事件",[169,60484,60485],{},"补充知识:",[169,60487,60488],{},"轮播图自动播放模块,可以使用",[169,60490,60491],{},"let timerId = setInterval(function () {",[169,60493,60494],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[169,60496,60497],{},"用js方法模拟进行点击事件,click必须加()",[169,60499,60500],{},"next.click()",[169,60502,60503],{},"}, 1000)",[169,60505,60506],{},[164,60507],{"alt":181,"src":60508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[176,60510,60512],{"className":54514,"code":60511,"language":54516,"meta":181,"style":181},"\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",[183,60513,60514,60518,60528,60542,60546,60554,60569,60589,60609,60622,60630,60635,60640,60644,60648,60653,60658,60663,60668,60672,60676,60681,60686,60691,60695,60699,60704,60708,60713,60718,60722,60726,60731,60736,60741,60746,60751,60755,60759,60764,60769,60774,60779,60784,60788,60792,60797,60802,60807,60812,60817,60822,60827,60832,60837,60842,60846,60850,60855,60860,60864,60868,60873,60878,60882,60887,60892,60896,60900,60905,60909,60914,60919,60923,60928,60932,60936,60941,60946,60951,60956,60961,60966,60971,60975,60979,60983,60988,60993,60998,61003,61007,61015,61023,61027,61035,61050,61064,61085,61093,61107,61120,61135,61154,61166,61178,61190,61202,61214,61226,61238,61246,61261,61285,61309,61317,61325,61333,61341,61346,61351,61356,61361,61366,61371,61376,61381,61386,61391,61395,61400,61405,61410,61415,61420,61425,61430,61435,61440,61444,61449,61454,61459,61464,61469,61474,61479,61484,61489,61494,61499,61504,61508,61512,61517,61522,61527,61531,61536,61541,61546,61551,61556,61560,61565,61569,61573,61577,61581,61585,61589,61594,61599,61604,61609,61614,61619,61624,61629,61634,61638,61642,61647,61652,61657,61662,61667,61671,61676,61681,61686,61691,61696,61701,61705,61709,61714,61718,61723,61727,61732,61737,61742,61747,61752,61757,61761,61769,61777,61781],{"__ignoreMap":181},[186,60515,60516],{"class":188,"line":189},[186,60517,3867],{"emptyLinePlaceholder":1551},[186,60519,60520,60522,60524,60526],{"class":188,"line":49},[186,60521,52751],{"class":202},[186,60523,52754],{"class":669},[186,60525,52757],{"class":206},[186,60527,552],{"class":202},[186,60529,60530,60532,60534,60536,60538,60540],{"class":188,"line":219},[186,60531,520],{"class":202},[186,60533,52089],{"class":523},[186,60535,52768],{"class":198},[186,60537,529],{"class":202},[186,60539,52773],{"class":532},[186,60541,552],{"class":202},[186,60543,60544],{"class":188,"line":225},[186,60545,3867],{"emptyLinePlaceholder":1551},[186,60547,60548,60550,60552],{"class":188,"line":242},[186,60549,520],{"class":202},[186,60551,52786],{"class":523},[186,60553,552],{"class":202},[186,60555,60556,60558,60560,60562,60564,60566],{"class":188,"line":248},[186,60557,53591],{"class":202},[186,60559,52796],{"class":523},[186,60561,52799],{"class":198},[186,60563,529],{"class":202},[186,60565,52804],{"class":532},[186,60567,60568],{"class":202}," \u002F>\n",[186,60570,60571,60573,60575,60577,60579,60581,60583,60585,60587],{"class":188,"line":265},[186,60572,53591],{"class":202},[186,60574,52796],{"class":523},[186,60576,52815],{"class":198},[186,60578,529],{"class":202},[186,60580,52820],{"class":532},[186,60582,52823],{"class":198},[186,60584,529],{"class":202},[186,60586,52828],{"class":532},[186,60588,60568],{"class":202},[186,60590,60591,60593,60595,60597,60599,60601,60603,60605,60607],{"class":188,"line":271},[186,60592,53591],{"class":202},[186,60594,52796],{"class":523},[186,60596,16382],{"class":198},[186,60598,529],{"class":202},[186,60600,52843],{"class":532},[186,60602,52823],{"class":198},[186,60604,529],{"class":202},[186,60606,52850],{"class":532},[186,60608,60568],{"class":202},[186,60610,60611,60613,60615,60618,60620],{"class":188,"line":288},[186,60612,53591],{"class":202},[186,60614,52859],{"class":523},[186,60616,60617],{"class":202},">轮播图点击切换\u003C\u002F",[186,60619,52859],{"class":523},[186,60621,552],{"class":202},[186,60623,60624,60626,60628],{"class":188,"line":294},[186,60625,53591],{"class":202},[186,60627,1524],{"class":523},[186,60629,552],{"class":202},[186,60631,60632],{"class":188,"line":1212},[186,60633,60634],{"class":202},"    * {\n",[186,60636,60637],{"class":188,"line":1223},[186,60638,60639],{"class":202},"      box-sizing: border-box;\n",[186,60641,60642],{"class":188,"line":1236},[186,60643,3654],{"class":202},[186,60645,60646],{"class":188,"line":3096},[186,60647,3867],{"emptyLinePlaceholder":1551},[186,60649,60650],{"class":188,"line":3110},[186,60651,60652],{"class":202},"    .slider {\n",[186,60654,60655],{"class":188,"line":3115},[186,60656,60657],{"class":202},"      width: 560px;\n",[186,60659,60660],{"class":188,"line":3121},[186,60661,60662],{"class":202},"      height: 400px;\n",[186,60664,60665],{"class":188,"line":3142},[186,60666,60667],{"class":202},"      overflow: hidden;\n",[186,60669,60670],{"class":188,"line":3147},[186,60671,3654],{"class":202},[186,60673,60674],{"class":188,"line":3161},[186,60675,3867],{"emptyLinePlaceholder":1551},[186,60677,60678],{"class":188,"line":3166},[186,60679,60680],{"class":202},"    .slider-wrapper {\n",[186,60682,60683],{"class":188,"line":3195},[186,60684,60685],{"class":202},"      width: 100%;\n",[186,60687,60688],{"class":188,"line":3200},[186,60689,60690],{"class":202},"      height: 320px;\n",[186,60692,60693],{"class":188,"line":3217},[186,60694,3654],{"class":202},[186,60696,60697],{"class":188,"line":3222},[186,60698,3867],{"emptyLinePlaceholder":1551},[186,60700,60701],{"class":188,"line":3227},[186,60702,60703],{"class":202},"    .slider-wrapper img {\n",[186,60705,60706],{"class":188,"line":3232},[186,60707,60685],{"class":202},[186,60709,60710],{"class":188,"line":3246},[186,60711,60712],{"class":202},"      height: 100%;\n",[186,60714,60715],{"class":188,"line":3251},[186,60716,60717],{"class":202},"      display: block;\n",[186,60719,60720],{"class":188,"line":4044},[186,60721,3654],{"class":202},[186,60723,60724],{"class":188,"line":4058},[186,60725,3867],{"emptyLinePlaceholder":1551},[186,60727,60728],{"class":188,"line":4066},[186,60729,60730],{"class":202},"    .slider-footer {\n",[186,60732,60733],{"class":188,"line":4071},[186,60734,60735],{"class":202},"      height: 80px;\n",[186,60737,60738],{"class":188,"line":4077},[186,60739,60740],{"class":202},"      background-color: rgb(100, 67, 68);\n",[186,60742,60743],{"class":188,"line":4083},[186,60744,60745],{"class":202},"      padding: 12px 12px 0 12px;\n",[186,60747,60748],{"class":188,"line":4088},[186,60749,60750],{"class":202},"      position: relative;\n",[186,60752,60753],{"class":188,"line":9411},[186,60754,3654],{"class":202},[186,60756,60757],{"class":188,"line":9435},[186,60758,3867],{"emptyLinePlaceholder":1551},[186,60760,60761],{"class":188,"line":9440},[186,60762,60763],{"class":202},"    .slider-footer .toggle {\n",[186,60765,60766],{"class":188,"line":9446},[186,60767,60768],{"class":202},"      position: absolute;\n",[186,60770,60771],{"class":188,"line":9473},[186,60772,60773],{"class":202},"      right: 0;\n",[186,60775,60776],{"class":188,"line":9478},[186,60777,60778],{"class":202},"      top: 12px;\n",[186,60780,60781],{"class":188,"line":9484},[186,60782,60783],{"class":202},"      display: flex;\n",[186,60785,60786],{"class":188,"line":9496},[186,60787,3654],{"class":202},[186,60789,60790],{"class":188,"line":9508},[186,60791,3867],{"emptyLinePlaceholder":1551},[186,60793,60794],{"class":188,"line":9520},[186,60795,60796],{"class":202},"    .slider-footer .toggle button {\n",[186,60798,60799],{"class":188,"line":11179},[186,60800,60801],{"class":202},"      margin-right: 12px;\n",[186,60803,60804],{"class":188,"line":11204},[186,60805,60806],{"class":202},"      width: 28px;\n",[186,60808,60809],{"class":188,"line":11227},[186,60810,60811],{"class":202},"      height: 28px;\n",[186,60813,60814],{"class":188,"line":11251},[186,60815,60816],{"class":202},"      appearance: none;\n",[186,60818,60819],{"class":188,"line":11256},[186,60820,60821],{"class":202},"      border: none;\n",[186,60823,60824],{"class":188,"line":11261},[186,60825,60826],{"class":202},"      background: rgba(255, 255, 255, 0.1);\n",[186,60828,60829],{"class":188,"line":11266},[186,60830,60831],{"class":202},"      color: #fff;\n",[186,60833,60834],{"class":188,"line":11275},[186,60835,60836],{"class":202},"      border-radius: 4px;\n",[186,60838,60839],{"class":188,"line":11280},[186,60840,60841],{"class":202},"      cursor: pointer;\n",[186,60843,60844],{"class":188,"line":11286},[186,60845,3654],{"class":202},[186,60847,60848],{"class":188,"line":11307},[186,60849,3867],{"emptyLinePlaceholder":1551},[186,60851,60852],{"class":188,"line":11313},[186,60853,60854],{"class":202},"    .slider-footer .toggle button:hover {\n",[186,60856,60857],{"class":188,"line":11327},[186,60858,60859],{"class":202},"      background: rgba(255, 255, 255, 0.2);\n",[186,60861,60862],{"class":188,"line":11333},[186,60863,3654],{"class":202},[186,60865,60866],{"class":188,"line":11360},[186,60867,3867],{"emptyLinePlaceholder":1551},[186,60869,60870],{"class":188,"line":11369},[186,60871,60872],{"class":202},"    .slider-footer p {\n",[186,60874,60875],{"class":188,"line":11375},[186,60876,60877],{"class":202},"      margin: 0;\n",[186,60879,60880],{"class":188,"line":11383},[186,60881,60831],{"class":202},[186,60883,60884],{"class":188,"line":11388},[186,60885,60886],{"class":202},"      font-size: 18px;\n",[186,60888,60889],{"class":188,"line":18065},[186,60890,60891],{"class":202},"      margin-bottom: 10px;\n",[186,60893,60894],{"class":188,"line":18071},[186,60895,3654],{"class":202},[186,60897,60898],{"class":188,"line":18094},[186,60899,3867],{"emptyLinePlaceholder":1551},[186,60901,60902],{"class":188,"line":18100},[186,60903,60904],{"class":202},"    .slider-indicator {\n",[186,60906,60907],{"class":188,"line":18123},[186,60908,60877],{"class":202},[186,60910,60911],{"class":188,"line":18137},[186,60912,60913],{"class":202},"      padding: 0;\n",[186,60915,60916],{"class":188,"line":18157},[186,60917,60918],{"class":202},"      list-style: none;\n",[186,60920,60921],{"class":188,"line":18163},[186,60922,60783],{"class":202},[186,60924,60925],{"class":188,"line":18174},[186,60926,60927],{"class":202},"      align-items: center;\n",[186,60929,60930],{"class":188,"line":18197},[186,60931,3654],{"class":202},[186,60933,60934],{"class":188,"line":18219},[186,60935,3867],{"emptyLinePlaceholder":1551},[186,60937,60938],{"class":188,"line":18224},[186,60939,60940],{"class":202},"    .slider-indicator li {\n",[186,60942,60943],{"class":188,"line":18230},[186,60944,60945],{"class":202},"      width: 8px;\n",[186,60947,60948],{"class":188,"line":18244},[186,60949,60950],{"class":202},"      height: 8px;\n",[186,60952,60953],{"class":188,"line":18257},[186,60954,60955],{"class":202},"      margin: 4px;\n",[186,60957,60958],{"class":188,"line":18262},[186,60959,60960],{"class":202},"      border-radius: 50%;\n",[186,60962,60963],{"class":188,"line":18276},[186,60964,60965],{"class":202},"      background: #fff;\n",[186,60967,60968],{"class":188,"line":18281},[186,60969,60970],{"class":202},"      opacity: 0.4;\n",[186,60972,60973],{"class":188,"line":18287},[186,60974,60841],{"class":202},[186,60976,60977],{"class":188,"line":18292},[186,60978,3654],{"class":202},[186,60980,60981],{"class":188,"line":18306},[186,60982,3867],{"emptyLinePlaceholder":1551},[186,60984,60985],{"class":188,"line":18311},[186,60986,60987],{"class":202},"    .slider-indicator li.active {\n",[186,60989,60990],{"class":188,"line":18316},[186,60991,60992],{"class":202},"      width: 12px;\n",[186,60994,60995],{"class":188,"line":18330},[186,60996,60997],{"class":202},"      height: 12px;\n",[186,60999,61000],{"class":188,"line":18342},[186,61001,61002],{"class":202},"      opacity: 1;\n",[186,61004,61005],{"class":188,"line":18347},[186,61006,3654],{"class":202},[186,61008,61009,61011,61013],{"class":188,"line":18360},[186,61010,53864],{"class":202},[186,61012,1524],{"class":523},[186,61014,552],{"class":202},[186,61016,61017,61019,61021],{"class":188,"line":18365},[186,61018,1470],{"class":202},[186,61020,52786],{"class":523},[186,61022,552],{"class":202},[186,61024,61025],{"class":188,"line":18370},[186,61026,3867],{"emptyLinePlaceholder":1551},[186,61028,61029,61031,61033],{"class":188,"line":18375},[186,61030,520],{"class":202},[186,61032,53247],{"class":523},[186,61034,552],{"class":202},[186,61036,61037,61039,61041,61043,61045,61048],{"class":188,"line":18388},[186,61038,53591],{"class":202},[186,61040,1450],{"class":523},[186,61042,1453],{"class":198},[186,61044,529],{"class":202},[186,61046,61047],{"class":532},"\"slider\"",[186,61049,552],{"class":202},[186,61051,61052,61054,61056,61058,61060,61062],{"class":188,"line":18393},[186,61053,52793],{"class":202},[186,61055,1450],{"class":523},[186,61057,1453],{"class":198},[186,61059,529],{"class":202},[186,61061,56670],{"class":532},[186,61063,552],{"class":202},[186,61065,61066,61068,61070,61072,61074,61077,61079,61081,61083],{"class":188,"line":34088},[186,61067,56677],{"class":202},[186,61069,164],{"class":523},[186,61071,526],{"class":198},[186,61073,529],{"class":202},[186,61075,61076],{"class":532},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[186,61078,536],{"class":198},[186,61080,529],{"class":202},[186,61082,9115],{"class":532},[186,61084,60568],{"class":202},[186,61086,61087,61089,61091],{"class":188,"line":34094},[186,61088,53224],{"class":202},[186,61090,1450],{"class":523},[186,61092,552],{"class":202},[186,61094,61095,61097,61099,61101,61103,61105],{"class":188,"line":34100},[186,61096,52793],{"class":202},[186,61098,1450],{"class":523},[186,61100,1453],{"class":198},[186,61102,529],{"class":202},[186,61104,56715],{"class":532},[186,61106,552],{"class":202},[186,61108,61109,61111,61113,61116,61118],{"class":188,"line":34106},[186,61110,56677],{"class":202},[186,61112,169],{"class":523},[186,61114,61115],{"class":202},">对人类来说会不会太超前了？\u003C\u002F",[186,61117,169],{"class":523},[186,61119,552],{"class":202},[186,61121,61122,61124,61126,61128,61130,61133],{"class":188,"line":34112},[186,61123,56677],{"class":202},[186,61125,19],{"class":523},[186,61127,1453],{"class":198},[186,61129,529],{"class":202},[186,61131,61132],{"class":532},"\"slider-indicator\"",[186,61134,552],{"class":202},[186,61136,61137,61139,61141,61143,61145,61148,61150,61152],{"class":188,"line":34123},[186,61138,56743],{"class":202},[186,61140,22],{"class":523},[186,61142,1453],{"class":198},[186,61144,529],{"class":202},[186,61146,61147],{"class":532},"\"active\"",[186,61149,56755],{"class":202},[186,61151,22],{"class":523},[186,61153,552],{"class":202},[186,61155,61156,61158,61160,61162,61164],{"class":188,"line":34129},[186,61157,56743],{"class":202},[186,61159,22],{"class":523},[186,61161,56755],{"class":202},[186,61163,22],{"class":523},[186,61165,552],{"class":202},[186,61167,61168,61170,61172,61174,61176],{"class":188,"line":34149},[186,61169,56743],{"class":202},[186,61171,22],{"class":523},[186,61173,56755],{"class":202},[186,61175,22],{"class":523},[186,61177,552],{"class":202},[186,61179,61180,61182,61184,61186,61188],{"class":188,"line":34155},[186,61181,56743],{"class":202},[186,61183,22],{"class":523},[186,61185,56755],{"class":202},[186,61187,22],{"class":523},[186,61189,552],{"class":202},[186,61191,61192,61194,61196,61198,61200],{"class":188,"line":34166},[186,61193,56743],{"class":202},[186,61195,22],{"class":523},[186,61197,56755],{"class":202},[186,61199,22],{"class":523},[186,61201,552],{"class":202},[186,61203,61204,61206,61208,61210,61212],{"class":188,"line":34172},[186,61205,56743],{"class":202},[186,61207,22],{"class":523},[186,61209,56755],{"class":202},[186,61211,22],{"class":523},[186,61213,552],{"class":202},[186,61215,61216,61218,61220,61222,61224],{"class":188,"line":34178},[186,61217,56743],{"class":202},[186,61219,22],{"class":523},[186,61221,56755],{"class":202},[186,61223,22],{"class":523},[186,61225,552],{"class":202},[186,61227,61228,61230,61232,61234,61236],{"class":188,"line":34184},[186,61229,56743],{"class":202},[186,61231,22],{"class":523},[186,61233,56755],{"class":202},[186,61235,22],{"class":523},[186,61237,552],{"class":202},[186,61239,61240,61242,61244],{"class":188,"line":34190},[186,61241,56848],{"class":202},[186,61243,19],{"class":523},[186,61245,552],{"class":202},[186,61247,61248,61250,61252,61254,61256,61259],{"class":188,"line":34196},[186,61249,56677],{"class":202},[186,61251,1450],{"class":523},[186,61253,1453],{"class":198},[186,61255,529],{"class":202},[186,61257,61258],{"class":532},"\"toggle\"",[186,61260,552],{"class":202},[186,61262,61263,61265,61267,61269,61271,61274,61276,61279,61281,61283],{"class":188,"line":34202},[186,61264,56743],{"class":202},[186,61266,55332],{"class":523},[186,61268,1453],{"class":198},[186,61270,529],{"class":202},[186,61272,61273],{"class":532},"\"prev\"",[186,61275,2567],{"class":202},[186,61277,61278],{"class":206},"&lt;",[186,61280,1470],{"class":202},[186,61282,55332],{"class":523},[186,61284,552],{"class":202},[186,61286,61287,61289,61291,61293,61295,61298,61300,61303,61305,61307],{"class":188,"line":34208},[186,61288,56743],{"class":202},[186,61290,55332],{"class":523},[186,61292,1453],{"class":198},[186,61294,529],{"class":202},[186,61296,61297],{"class":532},"\"next\"",[186,61299,2567],{"class":202},[186,61301,61302],{"class":206},"&gt;",[186,61304,1470],{"class":202},[186,61306,55332],{"class":523},[186,61308,552],{"class":202},[186,61310,61311,61313,61315],{"class":188,"line":34228},[186,61312,56848],{"class":202},[186,61314,1450],{"class":523},[186,61316,552],{"class":202},[186,61318,61319,61321,61323],{"class":188,"line":34234},[186,61320,53224],{"class":202},[186,61322,1450],{"class":523},[186,61324,552],{"class":202},[186,61326,61327,61329,61331],{"class":188,"line":34250},[186,61328,53864],{"class":202},[186,61330,1450],{"class":523},[186,61332,552],{"class":202},[186,61334,61335,61337,61339],{"class":188,"line":34256},[186,61336,53591],{"class":202},[186,61338,53260],{"class":523},[186,61340,552],{"class":202},[186,61342,61343],{"class":188,"line":34270},[186,61344,61345],{"class":202},"    \u002F\u002F 1. 初始数据\n",[186,61347,61348],{"class":188,"line":34276},[186,61349,61350],{"class":202},"    const data = [\n",[186,61352,61353],{"class":188,"line":34291},[186,61354,61355],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[186,61357,61358],{"class":188,"line":34297},[186,61359,61360],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[186,61362,61363],{"class":188,"line":34306},[186,61364,61365],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[186,61367,61368],{"class":188,"line":34312},[186,61369,61370],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[186,61372,61373],{"class":188,"line":34321},[186,61374,61375],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[186,61377,61378],{"class":188,"line":34327},[186,61379,61380],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[186,61382,61383],{"class":188,"line":34333},[186,61384,61385],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[186,61387,61388],{"class":188,"line":34342},[186,61389,61390],{"class":202},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[186,61392,61393],{"class":188,"line":34348},[186,61394,54556],{"class":202},[186,61396,61397],{"class":188,"line":34359},[186,61398,61399],{"class":202},"    \u002F\u002F 获取元素\n",[186,61401,61402],{"class":188,"line":34365},[186,61403,61404],{"class":202},"    const img = document.querySelector('.slider-wrapper img')\n",[186,61406,61407],{"class":188,"line":34384},[186,61408,61409],{"class":202},"    const p = document.querySelector('.slider-footer p')\n",[186,61411,61412],{"class":188,"line":34390},[186,61413,61414],{"class":202},"    const footer = document.querySelector('.slider-footer')\n",[186,61416,61417],{"class":188,"line":34401},[186,61418,61419],{"class":202},"    \u002F\u002F 1. 右按钮业务\n",[186,61421,61422],{"class":188,"line":34407},[186,61423,61424],{"class":202},"    \u002F\u002F 1.1 获取右侧按钮 \n",[186,61426,61427],{"class":188,"line":34427},[186,61428,61429],{"class":202},"    const next = document.querySelector('.next')\n",[186,61431,61432],{"class":188,"line":34443},[186,61433,61434],{"class":202},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[186,61436,61437],{"class":188,"line":34449},[186,61438,61439],{"class":202},"    \u002F\u002F 1.2 注册点击事件\n",[186,61441,61442],{"class":188,"line":34463},[186,61443,3867],{"emptyLinePlaceholder":1551},[186,61445,61446],{"class":188,"line":34469},[186,61447,61448],{"class":202},"    next.addEventListener('click', function () {\n",[186,61450,61451],{"class":188,"line":34475},[186,61452,61453],{"class":202},"      \u002F\u002F console.log(11)\n",[186,61455,61456],{"class":188,"line":34486},[186,61457,61458],{"class":202},"      i++\n",[186,61460,61461],{"class":188,"line":34492},[186,61462,61463],{"class":202},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[186,61465,61466],{"class":188,"line":34498},[186,61467,61468],{"class":202},"      \u002F\u002F if (i >= 8) {\n",[186,61470,61471],{"class":188,"line":34508},[186,61472,61473],{"class":202},"      \u002F\u002F   i = 0\n",[186,61475,61476],{"class":188,"line":34514},[186,61477,61478],{"class":202},"      \u002F\u002F }\n",[186,61480,61481],{"class":188,"line":34525},[186,61482,61483],{"class":202},"      i = i >= data.length ? 0 : i\n",[186,61485,61486],{"class":188,"line":34531},[186,61487,61488],{"class":202},"      \u002F\u002F 1.3 得到对应的对象\n",[186,61490,61491],{"class":188,"line":34541},[186,61492,61493],{"class":202},"      \u002F\u002F console.log(data[i])\n",[186,61495,61496],{"class":188,"line":34546},[186,61497,61498],{"class":202},"      \u002F\u002F 调用函数\n",[186,61500,61501],{"class":188,"line":34552},[186,61502,61503],{"class":202},"      toggle()\n",[186,61505,61506],{"class":188,"line":34601},[186,61507,34916],{"class":202},[186,61509,61510],{"class":188,"line":34648},[186,61511,3867],{"emptyLinePlaceholder":1551},[186,61513,61514],{"class":188,"line":34653},[186,61515,61516],{"class":202},"    \u002F\u002F 2. 左侧按钮业务\n",[186,61518,61519],{"class":188,"line":34659},[186,61520,61521],{"class":202},"    \u002F\u002F 2.1 获取左侧按钮 \n",[186,61523,61524],{"class":188,"line":34678},[186,61525,61526],{"class":202},"    const prev = document.querySelector('.prev')\n",[186,61528,61529],{"class":188,"line":34684},[186,61530,61439],{"class":202},[186,61532,61533],{"class":188,"line":34704},[186,61534,61535],{"class":202},"    prev.addEventListener('click', function () {\n",[186,61537,61538],{"class":188,"line":34710},[186,61539,61540],{"class":202},"      i--\n",[186,61542,61543],{"class":188,"line":34716},[186,61544,61545],{"class":202},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[186,61547,61548],{"class":188,"line":34726},[186,61549,61550],{"class":202},"      \u002F\u002F if (i \u003C 0) {\n",[186,61552,61553],{"class":188,"line":34731},[186,61554,61555],{"class":202},"      \u002F\u002F   i = 7\n",[186,61557,61558],{"class":188,"line":34737},[186,61559,61478],{"class":202},[186,61561,61562],{"class":188,"line":34753},[186,61563,61564],{"class":202},"      i = i \u003C 0 ? data.length - 1 : i\n",[186,61566,61567],{"class":188,"line":34798},[186,61568,61488],{"class":202},[186,61570,61571],{"class":188,"line":34804},[186,61572,61493],{"class":202},[186,61574,61575],{"class":188,"line":34810},[186,61576,61498],{"class":202},[186,61578,61579],{"class":188,"line":34816},[186,61580,61503],{"class":202},[186,61582,61583],{"class":188,"line":34827},[186,61584,34916],{"class":202},[186,61586,61587],{"class":188,"line":34833},[186,61588,3867],{"emptyLinePlaceholder":1551},[186,61590,61591],{"class":188,"line":34839},[186,61592,61593],{"class":202},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[186,61595,61596],{"class":188,"line":34845},[186,61597,61598],{"class":202},"    function toggle() {\n",[186,61600,61601],{"class":188,"line":34863},[186,61602,61603],{"class":202},"      \u002F\u002F 1.4 渲染对应的数据\n",[186,61605,61606],{"class":188,"line":34877},[186,61607,61608],{"class":202},"      img.src = data[i].url\n",[186,61610,61611],{"class":188,"line":34886},[186,61612,61613],{"class":202},"      p.innerHTML = data[i].title\n",[186,61615,61616],{"class":188,"line":34895},[186,61617,61618],{"class":202},"      footer.style.backgroundColor = data[i].color\n",[186,61620,61621],{"class":188,"line":34904},[186,61622,61623],{"class":202},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[186,61625,61626],{"class":188,"line":34913},[186,61627,61628],{"class":202},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[186,61630,61631],{"class":188,"line":34919},[186,61632,61633],{"class":202},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[186,61635,61636],{"class":188,"line":34925},[186,61637,3654],{"class":202},[186,61639,61640],{"class":188,"line":34933},[186,61641,3867],{"emptyLinePlaceholder":1551},[186,61643,61644],{"class":188,"line":34938},[186,61645,61646],{"class":202},"    \u002F\u002F 3. 自动播放模块\n",[186,61648,61649],{"class":188,"line":34944},[186,61650,61651],{"class":202},"    let timerId = setInterval(function () {\n",[186,61653,61654],{"class":188,"line":34955},[186,61655,61656],{"class":202},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[186,61658,61659],{"class":188,"line":34961},[186,61660,61661],{"class":202},"      next.click()\n",[186,61663,61664],{"class":188,"line":34981},[186,61665,61666],{"class":202},"    }, 1000)\n",[186,61668,61669],{"class":188,"line":34987},[186,61670,3867],{"emptyLinePlaceholder":1551},[186,61672,61673],{"class":188,"line":34993},[186,61674,61675],{"class":202},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[186,61677,61678],{"class":188,"line":34999},[186,61679,61680],{"class":202},"    const slider = document.querySelector('.slider')\n",[186,61682,61683],{"class":188,"line":35016},[186,61684,61685],{"class":202},"    \u002F\u002F 注册事件\n",[186,61687,61688],{"class":188,"line":35022},[186,61689,61690],{"class":202},"    slider.addEventListener('mouseenter', function () {\n",[186,61692,61693],{"class":188,"line":35028},[186,61694,61695],{"class":202},"      \u002F\u002F 停止定时器\n",[186,61697,61698],{"class":188,"line":35034},[186,61699,61700],{"class":202},"      clearInterval(timerId)\n",[186,61702,61703],{"class":188,"line":35040},[186,61704,34916],{"class":202},[186,61706,61707],{"class":188,"line":35046},[186,61708,3867],{"emptyLinePlaceholder":1551},[186,61710,61711],{"class":188,"line":35073},[186,61712,61713],{"class":202},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[186,61715,61716],{"class":188,"line":35097},[186,61717,61685],{"class":202},[186,61719,61720],{"class":188,"line":35103},[186,61721,61722],{"class":202},"    slider.addEventListener('mouseleave', function () {\n",[186,61724,61725],{"class":188,"line":35109},[186,61726,61695],{"class":202},[186,61728,61729],{"class":188,"line":35115},[186,61730,61731],{"class":202},"      if (timerId) clearInterval(timerId)\n",[186,61733,61734],{"class":188,"line":35126},[186,61735,61736],{"class":202},"      \u002F\u002F 开启定时器\n",[186,61738,61739],{"class":188,"line":35137},[186,61740,61741],{"class":202},"      timerId = setInterval(function () {\n",[186,61743,61744],{"class":188,"line":35143},[186,61745,61746],{"class":202},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[186,61748,61749],{"class":188,"line":35160},[186,61750,61751],{"class":202},"        next.click()\n",[186,61753,61754],{"class":188,"line":35183},[186,61755,61756],{"class":202},"      }, 1000)\n",[186,61758,61759],{"class":188,"line":35206},[186,61760,34916],{"class":202},[186,61762,61763,61765,61767],{"class":188,"line":35212},[186,61764,53864],{"class":202},[186,61766,53260],{"class":523},[186,61768,552],{"class":202},[186,61770,61771,61773,61775],{"class":188,"line":35217},[186,61772,1470],{"class":202},[186,61774,53247],{"class":523},[186,61776,552],{"class":202},[186,61778,61779],{"class":188,"line":35226},[186,61780,3867],{"emptyLinePlaceholder":1551},[186,61782,61783,61785,61787],{"class":188,"line":35236},[186,61784,1470],{"class":202},[186,61786,52089],{"class":523},[186,61788,552],{"class":202},[23459,61790,61792],{"id":61791},"_3252-焦点事件","3.2.5.2 焦点事件",[169,61794,61795],{},"小米搜索框案例：",[176,61797,61799],{"className":52087,"code":61798,"language":52089,"meta":181,"style":181},"\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",[183,61800,61801,61811,61825,61829,61837,61851,61871,61891,61903,61911,61917,61927,61937,61949,61953,61957,61964,61968,61979,61983,61987,61994,62005,62018,62032,62036,62040,62049,62061,62073,62087,62100,62113,62131,62142,62146,62150,62159,62176,62180,62184,62191,62201,62211,62222,62235,62247,62263,62274,62286,62290,62294,62302,62313,62330,62342,62354,62365,62369,62373,62384,62395,62399,62407,62411,62419,62423,62431,62446,62469,62484,62515,62542,62569,62596,62623,62650,62677,62686,62694,62702,62707,62727,62747,62752,62757,62775,62780,62790,62795,62809,62814,62819,62836,62845,62857,62861,62869,62877,62881],{"__ignoreMap":181},[186,61802,61803,61805,61807,61809],{"class":188,"line":189},[186,61804,52751],{"class":202},[186,61806,52754],{"class":523},[186,61808,52757],{"class":198},[186,61810,552],{"class":202},[186,61812,61813,61815,61817,61819,61821,61823],{"class":188,"line":49},[186,61814,520],{"class":202},[186,61816,52089],{"class":523},[186,61818,52768],{"class":198},[186,61820,529],{"class":202},[186,61822,52773],{"class":532},[186,61824,552],{"class":202},[186,61826,61827],{"class":188,"line":219},[186,61828,3867],{"emptyLinePlaceholder":1551},[186,61830,61831,61833,61835],{"class":188,"line":225},[186,61832,520],{"class":202},[186,61834,52786],{"class":523},[186,61836,552],{"class":202},[186,61838,61839,61841,61843,61845,61847,61849],{"class":188,"line":242},[186,61840,52793],{"class":202},[186,61842,52796],{"class":523},[186,61844,52799],{"class":198},[186,61846,529],{"class":202},[186,61848,52804],{"class":532},[186,61850,552],{"class":202},[186,61852,61853,61855,61857,61859,61861,61863,61865,61867,61869],{"class":188,"line":248},[186,61854,52793],{"class":202},[186,61856,52796],{"class":523},[186,61858,52815],{"class":198},[186,61860,529],{"class":202},[186,61862,52820],{"class":532},[186,61864,52823],{"class":198},[186,61866,529],{"class":202},[186,61868,52828],{"class":532},[186,61870,552],{"class":202},[186,61872,61873,61875,61877,61879,61881,61883,61885,61887,61889],{"class":188,"line":265},[186,61874,52793],{"class":202},[186,61876,52796],{"class":523},[186,61878,16382],{"class":198},[186,61880,529],{"class":202},[186,61882,52843],{"class":532},[186,61884,52823],{"class":198},[186,61886,529],{"class":202},[186,61888,52850],{"class":532},[186,61890,552],{"class":202},[186,61892,61893,61895,61897,61899,61901],{"class":188,"line":271},[186,61894,52793],{"class":202},[186,61896,52859],{"class":523},[186,61898,52862],{"class":202},[186,61900,52859],{"class":523},[186,61902,552],{"class":202},[186,61904,61905,61907,61909],{"class":188,"line":288},[186,61906,52793],{"class":202},[186,61908,1524],{"class":523},[186,61910,552],{"class":202},[186,61912,61913,61915],{"class":188,"line":294},[186,61914,52879],{"class":523},[186,61916,622],{"class":202},[186,61918,61919,61921,61923,61925],{"class":188,"line":1212},[186,61920,52886],{"class":206},[186,61922,210],{"class":202},[186,61924,1803],{"class":206},[186,61926,634],{"class":202},[186,61928,61929,61931,61933,61935],{"class":188,"line":1223},[186,61930,52897],{"class":206},[186,61932,210],{"class":202},[186,61934,1803],{"class":206},[186,61936,634],{"class":202},[186,61938,61939,61942,61944,61947],{"class":188,"line":1236},[186,61940,61941],{"class":206},"            box-sizing",[186,61943,210],{"class":202},[186,61945,61946],{"class":206},"border-box",[186,61948,634],{"class":202},[186,61950,61951],{"class":188,"line":3096},[186,61952,3996],{"class":202},[186,61954,61955],{"class":188,"line":3110},[186,61956,3867],{"emptyLinePlaceholder":1551},[186,61958,61959,61962],{"class":188,"line":3115},[186,61960,61961],{"class":523},"        ul",[186,61963,622],{"class":202},[186,61965,61966],{"class":188,"line":3121},[186,61967,3867],{"emptyLinePlaceholder":1551},[186,61969,61970,61973,61975,61977],{"class":188,"line":3142},[186,61971,61972],{"class":206},"            list-style",[186,61974,210],{"class":202},[186,61976,56182],{"class":206},[186,61978,634],{"class":202},[186,61980,61981],{"class":188,"line":3147},[186,61982,3996],{"class":202},[186,61984,61985],{"class":188,"line":3161},[186,61986,3867],{"emptyLinePlaceholder":1551},[186,61988,61989,61992],{"class":188,"line":3166},[186,61990,61991],{"class":198},"        .mi",[186,61993,622],{"class":202},[186,61995,61996,61999,62001,62003],{"class":188,"line":3195},[186,61997,61998],{"class":206},"            position",[186,62000,210],{"class":202},[186,62002,237],{"class":206},[186,62004,634],{"class":202},[186,62006,62007,62009,62011,62014,62016],{"class":188,"line":3200},[186,62008,52935],{"class":206},[186,62010,210],{"class":202},[186,62012,62013],{"class":206},"223",[186,62015,804],{"class":669},[186,62017,634],{"class":202},[186,62019,62020,62022,62024,62026,62028,62030],{"class":188,"line":3217},[186,62021,52886],{"class":206},[186,62023,210],{"class":202},[186,62025,1922],{"class":206},[186,62027,804],{"class":669},[186,62029,53006],{"class":206},[186,62031,634],{"class":202},[186,62033,62034],{"class":188,"line":3222},[186,62035,3996],{"class":202},[186,62037,62038],{"class":188,"line":3227},[186,62039,3867],{"emptyLinePlaceholder":1551},[186,62041,62042,62044,62047],{"class":188,"line":3232},[186,62043,61991],{"class":198},[186,62045,62046],{"class":523}," input",[186,62048,622],{"class":202},[186,62050,62051,62053,62055,62057,62059],{"class":188,"line":3246},[186,62052,52935],{"class":206},[186,62054,210],{"class":202},[186,62056,62013],{"class":206},[186,62058,804],{"class":669},[186,62060,634],{"class":202},[186,62062,62063,62065,62067,62069,62071],{"class":188,"line":3251},[186,62064,52949],{"class":206},[186,62066,210],{"class":202},[186,62068,2217],{"class":206},[186,62070,804],{"class":669},[186,62072,634],{"class":202},[186,62074,62075,62077,62079,62081,62083,62085],{"class":188,"line":4044},[186,62076,52897],{"class":206},[186,62078,210],{"class":202},[186,62080,1803],{"class":206},[186,62082,3505],{"class":206},[186,62084,804],{"class":669},[186,62086,634],{"class":202},[186,62088,62089,62092,62094,62096,62098],{"class":188,"line":4058},[186,62090,62091],{"class":206},"            font-size",[186,62093,210],{"class":202},[186,62095,2159],{"class":206},[186,62097,804],{"class":669},[186,62099,634],{"class":202},[186,62101,62102,62105,62107,62109,62111],{"class":188,"line":4066},[186,62103,62104],{"class":206},"            line-height",[186,62106,210],{"class":202},[186,62108,2217],{"class":206},[186,62110,804],{"class":669},[186,62112,634],{"class":202},[186,62114,62115,62118,62120,62122,62124,62126,62129],{"class":188,"line":4071},[186,62116,62117],{"class":206},"            border",[186,62119,210],{"class":202},[186,62121,1829],{"class":206},[186,62123,804],{"class":669},[186,62125,52971],{"class":206},[186,62127,62128],{"class":206}," #e0e0e0",[186,62130,634],{"class":202},[186,62132,62133,62136,62138,62140],{"class":188,"line":4077},[186,62134,62135],{"class":206},"            outline",[186,62137,210],{"class":202},[186,62139,56182],{"class":206},[186,62141,634],{"class":202},[186,62143,62144],{"class":188,"line":4083},[186,62145,3996],{"class":202},[186,62147,62148],{"class":188,"line":4088},[186,62149,3867],{"emptyLinePlaceholder":1551},[186,62151,62152,62154,62157],{"class":188,"line":9411},[186,62153,61991],{"class":198},[186,62155,62156],{"class":198}," .search",[186,62158,622],{"class":202},[186,62160,62161,62163,62165,62167,62169,62171,62174],{"class":188,"line":9435},[186,62162,62117],{"class":206},[186,62164,210],{"class":202},[186,62166,1829],{"class":206},[186,62168,804],{"class":669},[186,62170,52971],{"class":206},[186,62172,62173],{"class":206}," #ff6700",[186,62175,634],{"class":202},[186,62177,62178],{"class":188,"line":9440},[186,62179,3996],{"class":202},[186,62181,62182],{"class":188,"line":9446},[186,62183,3867],{"emptyLinePlaceholder":1551},[186,62185,62186,62189],{"class":188,"line":9473},[186,62187,62188],{"class":198},"        .result-list",[186,62190,622],{"class":202},[186,62192,62193,62195,62197,62199],{"class":188,"line":9478},[186,62194,52923],{"class":206},[186,62196,210],{"class":202},[186,62198,56182],{"class":206},[186,62200,634],{"class":202},[186,62202,62203,62205,62207,62209],{"class":188,"line":9484},[186,62204,61998],{"class":206},[186,62206,210],{"class":202},[186,62208,260],{"class":206},[186,62210,634],{"class":202},[186,62212,62213,62216,62218,62220],{"class":188,"line":9496},[186,62214,62215],{"class":206},"            left",[186,62217,210],{"class":202},[186,62219,1803],{"class":206},[186,62221,634],{"class":202},[186,62223,62224,62227,62229,62231,62233],{"class":188,"line":9508},[186,62225,62226],{"class":206},"            top",[186,62228,210],{"class":202},[186,62230,2217],{"class":206},[186,62232,804],{"class":669},[186,62234,634],{"class":202},[186,62236,62237,62239,62241,62243,62245],{"class":188,"line":9520},[186,62238,52935],{"class":206},[186,62240,210],{"class":202},[186,62242,62013],{"class":206},[186,62244,804],{"class":669},[186,62246,634],{"class":202},[186,62248,62249,62251,62253,62255,62257,62259,62261],{"class":188,"line":11179},[186,62250,62117],{"class":206},[186,62252,210],{"class":202},[186,62254,1829],{"class":206},[186,62256,804],{"class":669},[186,62258,52971],{"class":206},[186,62260,62173],{"class":206},[186,62262,634],{"class":202},[186,62264,62265,62268,62270,62272],{"class":188,"line":11204},[186,62266,62267],{"class":206},"            border-top",[186,62269,210],{"class":202},[186,62271,1803],{"class":206},[186,62273,634],{"class":202},[186,62275,62276,62279,62281,62284],{"class":188,"line":11227},[186,62277,62278],{"class":206},"            background",[186,62280,210],{"class":202},[186,62282,62283],{"class":206},"#fff",[186,62285,634],{"class":202},[186,62287,62288],{"class":188,"line":11251},[186,62289,3996],{"class":202},[186,62291,62292],{"class":188,"line":11256},[186,62293,3867],{"emptyLinePlaceholder":1551},[186,62295,62296,62298,62300],{"class":188,"line":11261},[186,62297,62188],{"class":198},[186,62299,2871],{"class":523},[186,62301,622],{"class":202},[186,62303,62304,62306,62308,62311],{"class":188,"line":11266},[186,62305,52923],{"class":206},[186,62307,210],{"class":202},[186,62309,62310],{"class":206},"block",[186,62312,634],{"class":202},[186,62314,62315,62317,62319,62321,62323,62326,62328],{"class":188,"line":11275},[186,62316,52897],{"class":206},[186,62318,210],{"class":202},[186,62320,1954],{"class":206},[186,62322,804],{"class":669},[186,62324,62325],{"class":206}," 15",[186,62327,804],{"class":669},[186,62329,634],{"class":202},[186,62331,62332,62334,62336,62338,62340],{"class":188,"line":11280},[186,62333,62091],{"class":206},[186,62335,210],{"class":202},[186,62337,2108],{"class":206},[186,62339,804],{"class":669},[186,62341,634],{"class":202},[186,62343,62344,62347,62349,62352],{"class":188,"line":11286},[186,62345,62346],{"class":206},"            color",[186,62348,210],{"class":202},[186,62350,62351],{"class":206},"#424242",[186,62353,634],{"class":202},[186,62355,62356,62359,62361,62363],{"class":188,"line":11307},[186,62357,62358],{"class":206},"            text-decoration",[186,62360,210],{"class":202},[186,62362,56182],{"class":206},[186,62364,634],{"class":202},[186,62366,62367],{"class":188,"line":11313},[186,62368,3996],{"class":202},[186,62370,62371],{"class":188,"line":11327},[186,62372,3867],{"emptyLinePlaceholder":1551},[186,62374,62375,62377,62379,62382],{"class":188,"line":11333},[186,62376,62188],{"class":198},[186,62378,2871],{"class":523},[186,62380,62381],{"class":198},":hover",[186,62383,622],{"class":202},[186,62385,62386,62388,62390,62393],{"class":188,"line":11360},[186,62387,53089],{"class":206},[186,62389,210],{"class":202},[186,62391,62392],{"class":206},"#eee",[186,62394,634],{"class":202},[186,62396,62397],{"class":188,"line":11369},[186,62398,3996],{"class":202},[186,62400,62401,62403,62405],{"class":188,"line":11375},[186,62402,53224],{"class":202},[186,62404,1524],{"class":523},[186,62406,552],{"class":202},[186,62408,62409],{"class":188,"line":11383},[186,62410,3867],{"emptyLinePlaceholder":1551},[186,62412,62413,62415,62417],{"class":188,"line":11388},[186,62414,1470],{"class":202},[186,62416,52786],{"class":523},[186,62418,552],{"class":202},[186,62420,62421],{"class":188,"line":18065},[186,62422,3867],{"emptyLinePlaceholder":1551},[186,62424,62425,62427,62429],{"class":188,"line":18071},[186,62426,520],{"class":202},[186,62428,53247],{"class":523},[186,62430,552],{"class":202},[186,62432,62433,62435,62437,62439,62441,62444],{"class":188,"line":18094},[186,62434,52793],{"class":202},[186,62436,1450],{"class":523},[186,62438,1453],{"class":198},[186,62440,529],{"class":202},[186,62442,62443],{"class":532},"\"mi\"",[186,62445,552],{"class":202},[186,62447,62448,62450,62452,62454,62456,62459,62462,62464,62467],{"class":188,"line":18100},[186,62449,56743],{"class":202},[186,62451,55266],{"class":523},[186,62453,55269],{"class":198},[186,62455,529],{"class":202},[186,62457,62458],{"class":532},"\"search\"",[186,62460,62461],{"class":198}," placeholder",[186,62463,529],{"class":202},[186,62465,62466],{"class":532},"\"小米笔记本\"",[186,62468,552],{"class":202},[186,62470,62471,62473,62475,62477,62479,62482],{"class":188,"line":18123},[186,62472,56743],{"class":202},[186,62474,19],{"class":523},[186,62476,1453],{"class":198},[186,62478,529],{"class":202},[186,62480,62481],{"class":532},"\"result-list\"",[186,62483,552],{"class":202},[186,62485,62486,62489,62491,62494,62496,62499,62501,62504,62507,62509,62511,62513],{"class":188,"line":18137},[186,62487,62488],{"class":202},"            \u003C",[186,62490,22],{"class":523},[186,62492,62493],{"class":202},">\u003C",[186,62495,948],{"class":523},[186,62497,62498],{"class":198}," href",[186,62500,529],{"class":202},[186,62502,62503],{"class":532},"\"#\"",[186,62505,62506],{"class":202},">全部商品\u003C\u002F",[186,62508,948],{"class":523},[186,62510,56755],{"class":202},[186,62512,22],{"class":523},[186,62514,552],{"class":202},[186,62516,62517,62519,62521,62523,62525,62527,62529,62531,62534,62536,62538,62540],{"class":188,"line":18157},[186,62518,62488],{"class":202},[186,62520,22],{"class":523},[186,62522,62493],{"class":202},[186,62524,948],{"class":523},[186,62526,62498],{"class":198},[186,62528,529],{"class":202},[186,62530,62503],{"class":532},[186,62532,62533],{"class":202},">小米11\u003C\u002F",[186,62535,948],{"class":523},[186,62537,56755],{"class":202},[186,62539,22],{"class":523},[186,62541,552],{"class":202},[186,62543,62544,62546,62548,62550,62552,62554,62556,62558,62561,62563,62565,62567],{"class":188,"line":18163},[186,62545,62488],{"class":202},[186,62547,22],{"class":523},[186,62549,62493],{"class":202},[186,62551,948],{"class":523},[186,62553,62498],{"class":198},[186,62555,529],{"class":202},[186,62557,62503],{"class":532},[186,62559,62560],{"class":202},">小米10S\u003C\u002F",[186,62562,948],{"class":523},[186,62564,56755],{"class":202},[186,62566,22],{"class":523},[186,62568,552],{"class":202},[186,62570,62571,62573,62575,62577,62579,62581,62583,62585,62588,62590,62592,62594],{"class":188,"line":18174},[186,62572,62488],{"class":202},[186,62574,22],{"class":523},[186,62576,62493],{"class":202},[186,62578,948],{"class":523},[186,62580,62498],{"class":198},[186,62582,529],{"class":202},[186,62584,62503],{"class":532},[186,62586,62587],{"class":202},">小米笔记本\u003C\u002F",[186,62589,948],{"class":523},[186,62591,56755],{"class":202},[186,62593,22],{"class":523},[186,62595,552],{"class":202},[186,62597,62598,62600,62602,62604,62606,62608,62610,62612,62615,62617,62619,62621],{"class":188,"line":18197},[186,62599,62488],{"class":202},[186,62601,22],{"class":523},[186,62603,62493],{"class":202},[186,62605,948],{"class":523},[186,62607,62498],{"class":198},[186,62609,529],{"class":202},[186,62611,62503],{"class":532},[186,62613,62614],{"class":202},">小米手机\u003C\u002F",[186,62616,948],{"class":523},[186,62618,56755],{"class":202},[186,62620,22],{"class":523},[186,62622,552],{"class":202},[186,62624,62625,62627,62629,62631,62633,62635,62637,62639,62642,62644,62646,62648],{"class":188,"line":18219},[186,62626,62488],{"class":202},[186,62628,22],{"class":523},[186,62630,62493],{"class":202},[186,62632,948],{"class":523},[186,62634,62498],{"class":198},[186,62636,529],{"class":202},[186,62638,62503],{"class":532},[186,62640,62641],{"class":202},">黑鲨4\u003C\u002F",[186,62643,948],{"class":523},[186,62645,56755],{"class":202},[186,62647,22],{"class":523},[186,62649,552],{"class":202},[186,62651,62652,62654,62656,62658,62660,62662,62664,62666,62669,62671,62673,62675],{"class":188,"line":18224},[186,62653,62488],{"class":202},[186,62655,22],{"class":523},[186,62657,62493],{"class":202},[186,62659,948],{"class":523},[186,62661,62498],{"class":198},[186,62663,529],{"class":202},[186,62665,62503],{"class":532},[186,62667,62668],{"class":202},">空调\u003C\u002F",[186,62670,948],{"class":523},[186,62672,56755],{"class":202},[186,62674,22],{"class":523},[186,62676,552],{"class":202},[186,62678,62679,62682,62684],{"class":188,"line":18230},[186,62680,62681],{"class":202},"        \u003C\u002F",[186,62683,19],{"class":523},[186,62685,552],{"class":202},[186,62687,62688,62690,62692],{"class":188,"line":18244},[186,62689,53224],{"class":202},[186,62691,1450],{"class":523},[186,62693,552],{"class":202},[186,62695,62696,62698,62700],{"class":188,"line":18257},[186,62697,52793],{"class":202},[186,62699,53260],{"class":523},[186,62701,552],{"class":202},[186,62703,62704],{"class":188,"line":18262},[186,62705,62706],{"class":192},"        \u002F\u002F 1. 获取元素\n",[186,62708,62709,62712,62714,62716,62718,62720,62722,62725],{"class":188,"line":18276},[186,62710,62711],{"class":669},"        const",[186,62713,62046],{"class":206},[186,62715,15027],{"class":669},[186,62717,55841],{"class":202},[186,62719,55844],{"class":198},[186,62721,832],{"class":202},[186,62723,62724],{"class":532},"'[type=search]'",[186,62726,1629],{"class":202},[186,62728,62729,62731,62734,62736,62738,62740,62742,62745],{"class":188,"line":18281},[186,62730,62711],{"class":669},[186,62732,62733],{"class":206}," ul",[186,62735,15027],{"class":669},[186,62737,55841],{"class":202},[186,62739,55844],{"class":198},[186,62741,832],{"class":202},[186,62743,62744],{"class":532},"'.result-list'",[186,62746,1629],{"class":202},[186,62748,62749],{"class":188,"line":18287},[186,62750,62751],{"class":192},"        \u002F\u002F console.log(input)\n",[186,62753,62754],{"class":188,"line":18292},[186,62755,62756],{"class":192},"        \u002F\u002F 2. 监听事件 获得焦点\n",[186,62758,62759,62762,62764,62766,62769,62771,62773],{"class":188,"line":18306},[186,62760,62761],{"class":202},"        input.",[186,62763,59254],{"class":198},[186,62765,832],{"class":202},[186,62767,62768],{"class":532},"'focus'",[186,62770,13898],{"class":202},[186,62772,55894],{"class":669},[186,62774,55897],{"class":202},[186,62776,62777],{"class":188,"line":18311},[186,62778,62779],{"class":192},"            \u002F\u002F ul显示\n",[186,62781,62782,62785,62787],{"class":188,"line":18316},[186,62783,62784],{"class":202},"            ul.style.display ",[186,62786,529],{"class":669},[186,62788,62789],{"class":532}," 'block'\n",[186,62791,62792],{"class":188,"line":18330},[186,62793,62794],{"class":192},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[186,62796,62797,62800,62802,62804,62807],{"class":188,"line":18342},[186,62798,62799],{"class":202},"            input.classList.",[186,62801,6797],{"class":198},[186,62803,832],{"class":202},[186,62805,62806],{"class":532},"'search'",[186,62808,1629],{"class":202},[186,62810,62811],{"class":188,"line":18347},[186,62812,62813],{"class":202},"        })\n",[186,62815,62816],{"class":188,"line":18360},[186,62817,62818],{"class":192},"        \u002F\u002F 3. 监听事件 失去焦点\n",[186,62820,62821,62823,62825,62827,62830,62832,62834],{"class":188,"line":18365},[186,62822,62761],{"class":202},[186,62824,59254],{"class":198},[186,62826,832],{"class":202},[186,62828,62829],{"class":532},"'blur'",[186,62831,13898],{"class":202},[186,62833,55894],{"class":669},[186,62835,55897],{"class":202},[186,62837,62838,62840,62842],{"class":188,"line":18370},[186,62839,62784],{"class":202},[186,62841,529],{"class":669},[186,62843,62844],{"class":532}," 'none'\n",[186,62846,62847,62849,62851,62853,62855],{"class":188,"line":18375},[186,62848,62799],{"class":202},[186,62850,58447],{"class":198},[186,62852,832],{"class":202},[186,62854,62806],{"class":532},[186,62856,1629],{"class":202},[186,62858,62859],{"class":188,"line":18388},[186,62860,62813],{"class":202},[186,62862,62863,62865,62867],{"class":188,"line":18393},[186,62864,53224],{"class":202},[186,62866,53260],{"class":523},[186,62868,552],{"class":202},[186,62870,62871,62873,62875],{"class":188,"line":34088},[186,62872,1470],{"class":202},[186,62874,53247],{"class":523},[186,62876,552],{"class":202},[186,62878,62879],{"class":188,"line":34094},[186,62880,3867],{"emptyLinePlaceholder":1551},[186,62882,62883,62885,62887],{"class":188,"line":34100},[186,62884,1470],{"class":202},[186,62886,52089],{"class":523},[186,62888,552],{"class":202},[23459,62890,62892],{"id":62891},"_3253-键盘事件","3.2.5.3 键盘事件",[169,62894,62895],{},"评论字数统计案例",[169,62897,62898],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[169,62900,62901],{},"牢记focus伪类选择器",[52796,62903],{"charSet":62904},"UTF-8",[52796,62906],{"name":62907,"content":62908},"viewport","width=device-width, initial-scale=1.0",[52859,62910,62911],{},"Document",[1524,62913,62914],{},"\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",[55266,62916],{"type":753},[19,62918,62919,62922],{},[22,62920,62921],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[22,62923,62924],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[176,62926,62928],{"className":52087,"code":62927,"language":52089,"meta":181,"style":181},"\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",[183,62929,62930,62940,62954,62958,62966,62980,63000,63020,63033,63041,63048,63061,63075,63085,63095,63099,63103,63110,63122,63134,63146,63157,63184,63197,63201,63205,63214,63225,63237,63248,63259,63271,63282,63294,63310,63322,63326,63330,63341,63352,63362,63374,63378,63382,63390,63401,63411,63422,63434,63447,63459,63471,63475,63479,63488,63500,63511,63524,63535,63549,63553,63557,63564,63576,63588,63598,63602,63606,63615,63627,63637,63641,63645,63656,63666,63685,63698,63702,63706,63716,63726,63730,63734,63745,63756,63768,63780,63784,63788,63799,63810,63824,63828,63832,63843,63853,63865,63869,63877,63885,63889,63897,63912,63931,63971,63984,63992,64006,64026,64034,64049,64072,64090,64105,64125,64145,64165,64173,64181,64189,64197,64217,64237,64242,64259,64268,64272,64277,64293,64301,64305,64310,64327,64332,64357,64361,64365,64370,64375,64383,64391,64395],{"__ignoreMap":181},[186,62931,62932,62934,62936,62938],{"class":188,"line":189},[186,62933,52751],{"class":202},[186,62935,52754],{"class":523},[186,62937,52757],{"class":198},[186,62939,552],{"class":202},[186,62941,62942,62944,62946,62948,62950,62952],{"class":188,"line":49},[186,62943,520],{"class":202},[186,62945,52089],{"class":523},[186,62947,52768],{"class":198},[186,62949,529],{"class":202},[186,62951,52773],{"class":532},[186,62953,552],{"class":202},[186,62955,62956],{"class":188,"line":219},[186,62957,3867],{"emptyLinePlaceholder":1551},[186,62959,62960,62962,62964],{"class":188,"line":225},[186,62961,520],{"class":202},[186,62963,52786],{"class":523},[186,62965,552],{"class":202},[186,62967,62968,62970,62972,62974,62976,62978],{"class":188,"line":242},[186,62969,53591],{"class":202},[186,62971,52796],{"class":523},[186,62973,52799],{"class":198},[186,62975,529],{"class":202},[186,62977,52804],{"class":532},[186,62979,552],{"class":202},[186,62981,62982,62984,62986,62988,62990,62992,62994,62996,62998],{"class":188,"line":248},[186,62983,53591],{"class":202},[186,62985,52796],{"class":523},[186,62987,52815],{"class":198},[186,62989,529],{"class":202},[186,62991,52820],{"class":532},[186,62993,52823],{"class":198},[186,62995,529],{"class":202},[186,62997,52828],{"class":532},[186,62999,552],{"class":202},[186,63001,63002,63004,63006,63008,63010,63012,63014,63016,63018],{"class":188,"line":265},[186,63003,53591],{"class":202},[186,63005,52796],{"class":523},[186,63007,16382],{"class":198},[186,63009,529],{"class":202},[186,63011,52843],{"class":532},[186,63013,52823],{"class":198},[186,63015,529],{"class":202},[186,63017,52850],{"class":532},[186,63019,552],{"class":202},[186,63021,63022,63024,63026,63029,63031],{"class":188,"line":271},[186,63023,53591],{"class":202},[186,63025,52859],{"class":523},[186,63027,63028],{"class":202},">评论回车发布\u003C\u002F",[186,63030,52859],{"class":523},[186,63032,552],{"class":202},[186,63034,63035,63037,63039],{"class":188,"line":288},[186,63036,53591],{"class":202},[186,63038,1524],{"class":523},[186,63040,552],{"class":202},[186,63042,63043,63046],{"class":188,"line":294},[186,63044,63045],{"class":198},"    .wrapper",[186,63047,622],{"class":202},[186,63049,63050,63053,63055,63057,63059],{"class":188,"line":1212},[186,63051,63052],{"class":206},"      min-width",[186,63054,210],{"class":202},[186,63056,5453],{"class":206},[186,63058,804],{"class":669},[186,63060,634],{"class":202},[186,63062,63063,63066,63068,63071,63073],{"class":188,"line":1223},[186,63064,63065],{"class":206},"      max-width",[186,63067,210],{"class":202},[186,63069,63070],{"class":206},"800",[186,63072,804],{"class":669},[186,63074,634],{"class":202},[186,63076,63077,63079,63081,63083],{"class":188,"line":1236},[186,63078,56452],{"class":206},[186,63080,210],{"class":202},[186,63082,52928],{"class":206},[186,63084,634],{"class":202},[186,63086,63087,63089,63091,63093],{"class":188,"line":3096},[186,63088,56463],{"class":206},[186,63090,210],{"class":202},[186,63092,53030],{"class":206},[186,63094,634],{"class":202},[186,63096,63097],{"class":188,"line":3110},[186,63098,3654],{"class":202},[186,63100,63101],{"class":188,"line":3115},[186,63102,3867],{"emptyLinePlaceholder":1551},[186,63104,63105,63108],{"class":188,"line":3121},[186,63106,63107],{"class":198},"    .avatar",[186,63109,622],{"class":202},[186,63111,63112,63114,63116,63118,63120],{"class":188,"line":3142},[186,63113,56215],{"class":206},[186,63115,210],{"class":202},[186,63117,2217],{"class":206},[186,63119,804],{"class":669},[186,63121,634],{"class":202},[186,63123,63124,63126,63128,63130,63132],{"class":188,"line":3147},[186,63125,56229],{"class":206},[186,63127,210],{"class":202},[186,63129,2217],{"class":206},[186,63131,804],{"class":669},[186,63133,634],{"class":202},[186,63135,63136,63138,63140,63142,63144],{"class":188,"line":3161},[186,63137,56577],{"class":206},[186,63139,210],{"class":202},[186,63141,666],{"class":206},[186,63143,670],{"class":669},[186,63145,634],{"class":202},[186,63147,63148,63151,63153,63155],{"class":188,"line":3166},[186,63149,63150],{"class":206},"      overflow",[186,63152,210],{"class":202},[186,63154,131],{"class":206},[186,63156,634],{"class":202},[186,63158,63159,63162,63164,63166,63168,63171,63173,63175,63177,63179,63182],{"class":188,"line":3195},[186,63160,63161],{"class":206},"      background",[186,63163,210],{"class":202},[186,63165,829],{"class":206},[186,63167,832],{"class":202},[186,63169,63170],{"class":835},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[186,63172,839],{"class":202},[186,63174,842],{"class":206},[186,63176,18605],{"class":206},[186,63178,26437],{"class":202},[186,63180,63181],{"class":206},"cover",[186,63183,634],{"class":202},[186,63185,63186,63189,63191,63193,63195],{"class":188,"line":3200},[186,63187,63188],{"class":206},"      margin-right",[186,63190,210],{"class":202},[186,63192,801],{"class":206},[186,63194,804],{"class":669},[186,63196,634],{"class":202},[186,63198,63199],{"class":188,"line":3217},[186,63200,3654],{"class":202},[186,63202,63203],{"class":188,"line":3222},[186,63204,3867],{"emptyLinePlaceholder":1551},[186,63206,63207,63209,63212],{"class":188,"line":3227},[186,63208,63045],{"class":198},[186,63210,63211],{"class":523}," textarea",[186,63213,622],{"class":202},[186,63215,63216,63219,63221,63223],{"class":188,"line":3232},[186,63217,63218],{"class":206},"      outline",[186,63220,210],{"class":202},[186,63222,56182],{"class":206},[186,63224,634],{"class":202},[186,63226,63227,63230,63232,63235],{"class":188,"line":3246},[186,63228,63229],{"class":206},"      border-color",[186,63231,210],{"class":202},[186,63233,63234],{"class":206},"transparent",[186,63236,634],{"class":202},[186,63238,63239,63242,63244,63246],{"class":188,"line":3251},[186,63240,63241],{"class":206},"      resize",[186,63243,210],{"class":202},[186,63245,56182],{"class":206},[186,63247,634],{"class":202},[186,63249,63250,63252,63254,63257],{"class":188,"line":4044},[186,63251,63161],{"class":206},[186,63253,210],{"class":202},[186,63255,63256],{"class":206},"#f5f5f5",[186,63258,634],{"class":202},[186,63260,63261,63263,63265,63267,63269],{"class":188,"line":4058},[186,63262,56577],{"class":206},[186,63264,210],{"class":202},[186,63266,1904],{"class":206},[186,63268,804],{"class":669},[186,63270,634],{"class":202},[186,63272,63273,63276,63278,63280],{"class":188,"line":4066},[186,63274,63275],{"class":206},"      flex",[186,63277,210],{"class":202},[186,63279,1829],{"class":206},[186,63281,634],{"class":202},[186,63283,63284,63286,63288,63290,63292],{"class":188,"line":4071},[186,63285,56140],{"class":206},[186,63287,210],{"class":202},[186,63289,2056],{"class":206},[186,63291,804],{"class":669},[186,63293,634],{"class":202},[186,63295,63296,63299,63301,63303,63306,63308],{"class":188,"line":4077},[186,63297,63298],{"class":206},"      transition",[186,63300,210],{"class":202},[186,63302,29577],{"class":206},[186,63304,63305],{"class":206}," 0.5",[186,63307,2304],{"class":669},[186,63309,634],{"class":202},[186,63311,63312,63314,63316,63318,63320],{"class":188,"line":4083},[186,63313,56229],{"class":206},[186,63315,210],{"class":202},[186,63317,2558],{"class":206},[186,63319,804],{"class":669},[186,63321,634],{"class":202},[186,63323,63324],{"class":188,"line":4088},[186,63325,3654],{"class":202},[186,63327,63328],{"class":188,"line":9411},[186,63329,3867],{"emptyLinePlaceholder":1551},[186,63331,63332,63334,63336,63339],{"class":188,"line":9435},[186,63333,63045],{"class":198},[186,63335,63211],{"class":523},[186,63337,63338],{"class":198},":focus",[186,63340,622],{"class":202},[186,63342,63343,63345,63347,63350],{"class":188,"line":9440},[186,63344,63229],{"class":206},[186,63346,210],{"class":202},[186,63348,63349],{"class":206},"#e4e4e4",[186,63351,634],{"class":202},[186,63353,63354,63356,63358,63360],{"class":188,"line":9446},[186,63355,63161],{"class":206},[186,63357,210],{"class":202},[186,63359,62283],{"class":206},[186,63361,634],{"class":202},[186,63363,63364,63366,63368,63370,63372],{"class":188,"line":9473},[186,63365,56229],{"class":206},[186,63367,210],{"class":202},[186,63369,666],{"class":206},[186,63371,804],{"class":669},[186,63373,634],{"class":202},[186,63375,63376],{"class":188,"line":9478},[186,63377,3654],{"class":202},[186,63379,63380],{"class":188,"line":9484},[186,63381,3867],{"emptyLinePlaceholder":1551},[186,63383,63384,63386,63388],{"class":188,"line":9496},[186,63385,63045],{"class":198},[186,63387,58908],{"class":523},[186,63389,622],{"class":202},[186,63391,63392,63394,63396,63399],{"class":188,"line":9508},[186,63393,63161],{"class":206},[186,63395,210],{"class":202},[186,63397,63398],{"class":206},"#00aeec",[186,63400,634],{"class":202},[186,63402,63403,63405,63407,63409],{"class":188,"line":9520},[186,63404,58857],{"class":206},[186,63406,210],{"class":202},[186,63408,62283],{"class":206},[186,63410,634],{"class":202},[186,63412,63413,63416,63418,63420],{"class":188,"line":11179},[186,63414,63415],{"class":206},"      border",[186,63417,210],{"class":202},[186,63419,56182],{"class":206},[186,63421,634],{"class":202},[186,63423,63424,63426,63428,63430,63432],{"class":188,"line":11204},[186,63425,56577],{"class":206},[186,63427,210],{"class":202},[186,63429,1904],{"class":206},[186,63431,804],{"class":669},[186,63433,634],{"class":202},[186,63435,63436,63439,63441,63443,63445],{"class":188,"line":11227},[186,63437,63438],{"class":206},"      margin-left",[186,63440,210],{"class":202},[186,63442,2056],{"class":206},[186,63444,804],{"class":669},[186,63446,634],{"class":202},[186,63448,63449,63451,63453,63455,63457],{"class":188,"line":11251},[186,63450,56215],{"class":206},[186,63452,210],{"class":202},[186,63454,1966],{"class":206},[186,63456,804],{"class":669},[186,63458,634],{"class":202},[186,63460,63461,63464,63466,63469],{"class":188,"line":11256},[186,63462,63463],{"class":206},"      cursor",[186,63465,210],{"class":202},[186,63467,63468],{"class":206},"pointer",[186,63470,634],{"class":202},[186,63472,63473],{"class":188,"line":11261},[186,63474,3654],{"class":202},[186,63476,63477],{"class":188,"line":11266},[186,63478,3867],{"emptyLinePlaceholder":1551},[186,63480,63481,63483,63486],{"class":188,"line":11275},[186,63482,63045],{"class":198},[186,63484,63485],{"class":198}," .total",[186,63487,622],{"class":202},[186,63489,63490,63492,63494,63496,63498],{"class":188,"line":11280},[186,63491,63188],{"class":206},[186,63493,210],{"class":202},[186,63495,2222],{"class":206},[186,63497,804],{"class":669},[186,63499,634],{"class":202},[186,63501,63502,63504,63506,63509],{"class":188,"line":11286},[186,63503,58857],{"class":206},[186,63505,210],{"class":202},[186,63507,63508],{"class":206},"#999",[186,63510,634],{"class":202},[186,63512,63513,63516,63518,63520,63522],{"class":188,"line":11307},[186,63514,63515],{"class":206},"      margin-top",[186,63517,210],{"class":202},[186,63519,1930],{"class":206},[186,63521,804],{"class":669},[186,63523,634],{"class":202},[186,63525,63526,63529,63531,63533],{"class":188,"line":11313},[186,63527,63528],{"class":206},"      opacity",[186,63530,210],{"class":202},[186,63532,1803],{"class":206},[186,63534,634],{"class":202},[186,63536,63537,63539,63541,63543,63545,63547],{"class":188,"line":11327},[186,63538,63298],{"class":206},[186,63540,210],{"class":202},[186,63542,29577],{"class":206},[186,63544,63305],{"class":206},[186,63546,2304],{"class":669},[186,63548,634],{"class":202},[186,63550,63551],{"class":188,"line":11333},[186,63552,3654],{"class":202},[186,63554,63555],{"class":188,"line":11360},[186,63556,3867],{"emptyLinePlaceholder":1551},[186,63558,63559,63562],{"class":188,"line":11369},[186,63560,63561],{"class":198},"    .list",[186,63563,622],{"class":202},[186,63565,63566,63568,63570,63572,63574],{"class":188,"line":11375},[186,63567,63052],{"class":206},[186,63569,210],{"class":202},[186,63571,5453],{"class":206},[186,63573,804],{"class":669},[186,63575,634],{"class":202},[186,63577,63578,63580,63582,63584,63586],{"class":188,"line":11383},[186,63579,63065],{"class":206},[186,63581,210],{"class":202},[186,63583,63070],{"class":206},[186,63585,804],{"class":669},[186,63587,634],{"class":202},[186,63589,63590,63592,63594,63596],{"class":188,"line":11388},[186,63591,56452],{"class":206},[186,63593,210],{"class":202},[186,63595,52928],{"class":206},[186,63597,634],{"class":202},[186,63599,63600],{"class":188,"line":18065},[186,63601,3654],{"class":202},[186,63603,63604],{"class":188,"line":18071},[186,63605,3867],{"emptyLinePlaceholder":1551},[186,63607,63608,63610,63613],{"class":188,"line":18094},[186,63609,63561],{"class":198},[186,63611,63612],{"class":198}," .item",[186,63614,622],{"class":202},[186,63616,63617,63619,63621,63623,63625],{"class":188,"line":18100},[186,63618,56215],{"class":206},[186,63620,210],{"class":202},[186,63622,1922],{"class":206},[186,63624,670],{"class":669},[186,63626,634],{"class":202},[186,63628,63629,63631,63633,63635],{"class":188,"line":18123},[186,63630,56452],{"class":206},[186,63632,210],{"class":202},[186,63634,52928],{"class":206},[186,63636,634],{"class":202},[186,63638,63639],{"class":188,"line":18137},[186,63640,3654],{"class":202},[186,63642,63643],{"class":188,"line":18157},[186,63644,3867],{"emptyLinePlaceholder":1551},[186,63646,63647,63649,63651,63654],{"class":188,"line":18163},[186,63648,63561],{"class":198},[186,63650,63612],{"class":198},[186,63652,63653],{"class":198}," .info",[186,63655,622],{"class":202},[186,63657,63658,63660,63662,63664],{"class":188,"line":18174},[186,63659,63275],{"class":206},[186,63661,210],{"class":202},[186,63663,1829],{"class":206},[186,63665,634],{"class":202},[186,63667,63668,63671,63673,63675,63677,63680,63683],{"class":188,"line":18197},[186,63669,63670],{"class":206},"      border-bottom",[186,63672,210],{"class":202},[186,63674,1829],{"class":206},[186,63676,804],{"class":669},[186,63678,63679],{"class":206}," dashed",[186,63681,63682],{"class":206}," #e4e4e4",[186,63684,634],{"class":202},[186,63686,63687,63690,63692,63694,63696],{"class":188,"line":18219},[186,63688,63689],{"class":206},"      padding-bottom",[186,63691,210],{"class":202},[186,63693,2056],{"class":206},[186,63695,804],{"class":669},[186,63697,634],{"class":202},[186,63699,63700],{"class":188,"line":18224},[186,63701,3654],{"class":202},[186,63703,63704],{"class":188,"line":18230},[186,63705,3867],{"emptyLinePlaceholder":1551},[186,63707,63708,63710,63712,63714],{"class":188,"line":18244},[186,63709,63561],{"class":198},[186,63711,63612],{"class":198},[186,63713,8288],{"class":523},[186,63715,622],{"class":202},[186,63717,63718,63720,63722,63724],{"class":188,"line":18257},[186,63719,56151],{"class":206},[186,63721,210],{"class":202},[186,63723,1803],{"class":206},[186,63725,634],{"class":202},[186,63727,63728],{"class":188,"line":18262},[186,63729,3654],{"class":202},[186,63731,63732],{"class":188,"line":18276},[186,63733,3867],{"emptyLinePlaceholder":1551},[186,63735,63736,63738,63740,63743],{"class":188,"line":18281},[186,63737,63561],{"class":198},[186,63739,63612],{"class":198},[186,63741,63742],{"class":198}," .name",[186,63744,622],{"class":202},[186,63746,63747,63749,63751,63754],{"class":188,"line":18287},[186,63748,58857],{"class":206},[186,63750,210],{"class":202},[186,63752,63753],{"class":206},"#FB7299",[186,63755,634],{"class":202},[186,63757,63758,63760,63762,63764,63766],{"class":188,"line":18292},[186,63759,56365],{"class":206},[186,63761,210],{"class":202},[186,63763,2159],{"class":206},[186,63765,804],{"class":669},[186,63767,634],{"class":202},[186,63769,63770,63773,63775,63778],{"class":188,"line":18306},[186,63771,63772],{"class":206},"      font-weight",[186,63774,210],{"class":202},[186,63776,63777],{"class":206},"bold",[186,63779,634],{"class":202},[186,63781,63782],{"class":188,"line":18311},[186,63783,3654],{"class":202},[186,63785,63786],{"class":188,"line":18316},[186,63787,3867],{"emptyLinePlaceholder":1551},[186,63789,63790,63792,63794,63797],{"class":188,"line":18330},[186,63791,63561],{"class":198},[186,63793,63612],{"class":198},[186,63795,63796],{"class":198}," .text",[186,63798,622],{"class":202},[186,63800,63801,63803,63805,63808],{"class":188,"line":18342},[186,63802,58857],{"class":206},[186,63804,210],{"class":202},[186,63806,63807],{"class":206},"#333",[186,63809,634],{"class":202},[186,63811,63812,63814,63816,63818,63820,63822],{"class":188,"line":18347},[186,63813,56140],{"class":206},[186,63815,210],{"class":202},[186,63817,2056],{"class":206},[186,63819,804],{"class":669},[186,63821,5559],{"class":206},[186,63823,634],{"class":202},[186,63825,63826],{"class":188,"line":18360},[186,63827,3654],{"class":202},[186,63829,63830],{"class":188,"line":18365},[186,63831,3867],{"emptyLinePlaceholder":1551},[186,63833,63834,63836,63838,63841],{"class":188,"line":18370},[186,63835,63561],{"class":198},[186,63837,63612],{"class":198},[186,63839,63840],{"class":198}," .time",[186,63842,622],{"class":202},[186,63844,63845,63847,63849,63851],{"class":188,"line":18375},[186,63846,58857],{"class":206},[186,63848,210],{"class":202},[186,63850,63508],{"class":206},[186,63852,634],{"class":202},[186,63854,63855,63857,63859,63861,63863],{"class":188,"line":18388},[186,63856,56365],{"class":206},[186,63858,210],{"class":202},[186,63860,2108],{"class":206},[186,63862,804],{"class":669},[186,63864,634],{"class":202},[186,63866,63867],{"class":188,"line":18393},[186,63868,3654],{"class":202},[186,63870,63871,63873,63875],{"class":188,"line":34088},[186,63872,53864],{"class":202},[186,63874,1524],{"class":523},[186,63876,552],{"class":202},[186,63878,63879,63881,63883],{"class":188,"line":34094},[186,63880,1470],{"class":202},[186,63882,52786],{"class":523},[186,63884,552],{"class":202},[186,63886,63887],{"class":188,"line":34100},[186,63888,3867],{"emptyLinePlaceholder":1551},[186,63890,63891,63893,63895],{"class":188,"line":34106},[186,63892,520],{"class":202},[186,63894,53247],{"class":523},[186,63896,552],{"class":202},[186,63898,63899,63901,63903,63905,63907,63910],{"class":188,"line":34112},[186,63900,53591],{"class":202},[186,63902,1450],{"class":523},[186,63904,1453],{"class":198},[186,63906,529],{"class":202},[186,63908,63909],{"class":532},"\"wrapper\"",[186,63911,552],{"class":202},[186,63913,63914,63916,63918,63920,63922,63925,63927,63929],{"class":188,"line":34123},[186,63915,52793],{"class":202},[186,63917,2051],{"class":523},[186,63919,1453],{"class":198},[186,63921,529],{"class":202},[186,63923,63924],{"class":532},"\"avatar\"",[186,63926,56755],{"class":202},[186,63928,2051],{"class":523},[186,63930,552],{"class":202},[186,63932,63933,63935,63937,63939,63941,63944,63946,63948,63951,63953,63955,63957,63960,63962,63965,63967,63969],{"class":188,"line":34129},[186,63934,52793],{"class":202},[186,63936,55733],{"class":523},[186,63938,16421],{"class":198},[186,63940,529],{"class":202},[186,63942,63943],{"class":532},"\"tx\"",[186,63945,62461],{"class":198},[186,63947,529],{"class":202},[186,63949,63950],{"class":532},"\"发一条友善的评论\"",[186,63952,55756],{"class":198},[186,63954,529],{"class":202},[186,63956,5167],{"class":532},[186,63958,63959],{"class":198}," maxlength",[186,63961,529],{"class":202},[186,63963,63964],{"class":532},"\"200\"",[186,63966,56755],{"class":202},[186,63968,55733],{"class":523},[186,63970,552],{"class":202},[186,63972,63973,63975,63977,63980,63982],{"class":188,"line":34149},[186,63974,52793],{"class":202},[186,63976,55332],{"class":523},[186,63978,63979],{"class":202},">发布\u003C\u002F",[186,63981,55332],{"class":523},[186,63983,552],{"class":202},[186,63985,63986,63988,63990],{"class":188,"line":34155},[186,63987,53864],{"class":202},[186,63989,1450],{"class":523},[186,63991,552],{"class":202},[186,63993,63994,63996,63998,64000,64002,64004],{"class":188,"line":34166},[186,63995,53591],{"class":202},[186,63997,1450],{"class":523},[186,63999,1453],{"class":198},[186,64001,529],{"class":202},[186,64003,63909],{"class":532},[186,64005,552],{"class":202},[186,64007,64008,64010,64012,64014,64016,64019,64022,64024],{"class":188,"line":34172},[186,64009,52793],{"class":202},[186,64011,186],{"class":523},[186,64013,1453],{"class":198},[186,64015,529],{"class":202},[186,64017,64018],{"class":532},"\"total\"",[186,64020,64021],{"class":202},">0\u002F200字\u003C\u002F",[186,64023,186],{"class":523},[186,64025,552],{"class":202},[186,64027,64028,64030,64032],{"class":188,"line":34178},[186,64029,53864],{"class":202},[186,64031,1450],{"class":523},[186,64033,552],{"class":202},[186,64035,64036,64038,64040,64042,64044,64047],{"class":188,"line":34184},[186,64037,53591],{"class":202},[186,64039,1450],{"class":523},[186,64041,1453],{"class":198},[186,64043,529],{"class":202},[186,64045,64046],{"class":532},"\"list\"",[186,64048,552],{"class":202},[186,64050,64051,64053,64055,64057,64059,64062,64065,64067,64070],{"class":188,"line":34190},[186,64052,52793],{"class":202},[186,64054,1450],{"class":523},[186,64056,1453],{"class":198},[186,64058,529],{"class":202},[186,64060,64061],{"class":532},"\"item\"",[186,64063,64064],{"class":198}," style",[186,64066,529],{"class":202},[186,64068,64069],{"class":532},"\"display: none;\"",[186,64071,552],{"class":202},[186,64073,64074,64076,64078,64080,64082,64084,64086,64088],{"class":188,"line":34196},[186,64075,56677],{"class":202},[186,64077,2051],{"class":523},[186,64079,1453],{"class":198},[186,64081,529],{"class":202},[186,64083,63924],{"class":532},[186,64085,56755],{"class":202},[186,64087,2051],{"class":523},[186,64089,552],{"class":202},[186,64091,64092,64094,64096,64098,64100,64103],{"class":188,"line":34202},[186,64093,56677],{"class":202},[186,64095,1450],{"class":523},[186,64097,1453],{"class":198},[186,64099,529],{"class":202},[186,64101,64102],{"class":532},"\"info\"",[186,64104,552],{"class":202},[186,64106,64107,64109,64111,64113,64115,64118,64121,64123],{"class":188,"line":34208},[186,64108,56743],{"class":202},[186,64110,169],{"class":523},[186,64112,1453],{"class":198},[186,64114,529],{"class":202},[186,64116,64117],{"class":532},"\"name\"",[186,64119,64120],{"class":202},">清风徐来\u003C\u002F",[186,64122,169],{"class":523},[186,64124,552],{"class":202},[186,64126,64127,64129,64131,64133,64135,64138,64141,64143],{"class":188,"line":34228},[186,64128,56743],{"class":202},[186,64130,169],{"class":523},[186,64132,1453],{"class":198},[186,64134,529],{"class":202},[186,64136,64137],{"class":532},"\"text\"",[186,64139,64140],{"class":202},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[186,64142,169],{"class":523},[186,64144,552],{"class":202},[186,64146,64147,64149,64151,64153,64155,64158,64161,64163],{"class":188,"line":34234},[186,64148,56743],{"class":202},[186,64150,169],{"class":523},[186,64152,1453],{"class":198},[186,64154,529],{"class":202},[186,64156,64157],{"class":532},"\"time\"",[186,64159,64160],{"class":202},">2022-10-10 20:29:21\u003C\u002F",[186,64162,169],{"class":523},[186,64164,552],{"class":202},[186,64166,64167,64169,64171],{"class":188,"line":34250},[186,64168,56848],{"class":202},[186,64170,1450],{"class":523},[186,64172,552],{"class":202},[186,64174,64175,64177,64179],{"class":188,"line":34256},[186,64176,53224],{"class":202},[186,64178,1450],{"class":523},[186,64180,552],{"class":202},[186,64182,64183,64185,64187],{"class":188,"line":34270},[186,64184,53864],{"class":202},[186,64186,1450],{"class":523},[186,64188,552],{"class":202},[186,64190,64191,64193,64195],{"class":188,"line":34276},[186,64192,53591],{"class":202},[186,64194,53260],{"class":523},[186,64196,552],{"class":202},[186,64198,64199,64201,64204,64206,64208,64210,64212,64215],{"class":188,"line":34291},[186,64200,12684],{"class":669},[186,64202,64203],{"class":206}," tx",[186,64205,15027],{"class":669},[186,64207,55841],{"class":202},[186,64209,55844],{"class":198},[186,64211,832],{"class":202},[186,64213,64214],{"class":532},"'#tx'",[186,64216,1629],{"class":202},[186,64218,64219,64221,64224,64226,64228,64230,64232,64235],{"class":188,"line":34297},[186,64220,12684],{"class":669},[186,64222,64223],{"class":206}," total",[186,64225,15027],{"class":669},[186,64227,55841],{"class":202},[186,64229,55844],{"class":198},[186,64231,832],{"class":202},[186,64233,64234],{"class":532},"'.total'",[186,64236,1629],{"class":202},[186,64238,64239],{"class":188,"line":34306},[186,64240,64241],{"class":192},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[186,64243,64244,64247,64249,64251,64253,64255,64257],{"class":188,"line":34312},[186,64245,64246],{"class":202},"    tx.",[186,64248,59254],{"class":198},[186,64250,832],{"class":202},[186,64252,62768],{"class":532},[186,64254,13898],{"class":202},[186,64256,55894],{"class":669},[186,64258,55897],{"class":202},[186,64260,64261,64264,64266],{"class":188,"line":34321},[186,64262,64263],{"class":202},"      total.style.opacity ",[186,64265,529],{"class":669},[186,64267,57140],{"class":206},[186,64269,64270],{"class":188,"line":34327},[186,64271,34916],{"class":202},[186,64273,64274],{"class":188,"line":34333},[186,64275,64276],{"class":192},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[186,64278,64279,64281,64283,64285,64287,64289,64291],{"class":188,"line":34342},[186,64280,64246],{"class":202},[186,64282,59254],{"class":198},[186,64284,832],{"class":202},[186,64286,62829],{"class":532},[186,64288,13898],{"class":202},[186,64290,55894],{"class":669},[186,64292,55897],{"class":202},[186,64294,64295,64297,64299],{"class":188,"line":34348},[186,64296,64263],{"class":202},[186,64298,529],{"class":669},[186,64300,48787],{"class":206},[186,64302,64303],{"class":188,"line":34359},[186,64304,34916],{"class":202},[186,64306,64307],{"class":188,"line":34365},[186,64308,64309],{"class":192},"    \u002F\u002F 3. 检测用户输入\n",[186,64311,64312,64314,64316,64318,64321,64323,64325],{"class":188,"line":34384},[186,64313,64246],{"class":202},[186,64315,59254],{"class":198},[186,64317,832],{"class":202},[186,64319,64320],{"class":532},"'input'",[186,64322,13898],{"class":202},[186,64324,55894],{"class":669},[186,64326,55897],{"class":202},[186,64328,64329],{"class":188,"line":34390},[186,64330,64331],{"class":192},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[186,64333,64334,64337,64339,64342,64345,64347,64350,64352,64354],{"class":188,"line":34401},[186,64335,64336],{"class":202},"      total.innerHTML ",[186,64338,529],{"class":669},[186,64340,64341],{"class":532}," `${",[186,64343,64344],{"class":202},"tx",[186,64346,2168],{"class":532},[186,64348,64349],{"class":202},"value",[186,64351,2168],{"class":532},[186,64353,53415],{"class":206},[186,64355,64356],{"class":532},"}\u002F200字`\n",[186,64358,64359],{"class":188,"line":34407},[186,64360,34916],{"class":202},[186,64362,64363],{"class":188,"line":34427},[186,64364,3867],{"emptyLinePlaceholder":1551},[186,64366,64367],{"class":188,"line":34443},[186,64368,64369],{"class":192},"    \u002F\u002F const str = 'andy'\n",[186,64371,64372],{"class":188,"line":34449},[186,64373,64374],{"class":192},"    \u002F\u002F console.log(str.length)\n",[186,64376,64377,64379,64381],{"class":188,"line":34463},[186,64378,53864],{"class":202},[186,64380,53260],{"class":523},[186,64382,552],{"class":202},[186,64384,64385,64387,64389],{"class":188,"line":34469},[186,64386,1470],{"class":202},[186,64388,53247],{"class":523},[186,64390,552],{"class":202},[186,64392,64393],{"class":188,"line":34475},[186,64394,3867],{"emptyLinePlaceholder":1551},[186,64396,64397,64399,64401],{"class":188,"line":34486},[186,64398,1470],{"class":202},[186,64400,52089],{"class":523},[186,64402,552],{"class":202},[23459,64404,64406],{"id":64405},"_3254-change事件","3.2.5.4 change事件",[169,64408,64409],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[169,64411,64412],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[169,64414,64415],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[176,64417,64419],{"className":52087,"code":64418,"language":52089,"meta":181,"style":181},"\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",[183,64420,64421,64431,64445,64449,64457,64471,64491,64503,64511,64515,64523,64537,64545,64563,64581,64593,64597,64605,64613,64617],{"__ignoreMap":181},[186,64422,64423,64425,64427,64429],{"class":188,"line":189},[186,64424,52751],{"class":202},[186,64426,52754],{"class":523},[186,64428,52757],{"class":198},[186,64430,552],{"class":202},[186,64432,64433,64435,64437,64439,64441,64443],{"class":188,"line":49},[186,64434,520],{"class":202},[186,64436,52089],{"class":523},[186,64438,52768],{"class":198},[186,64440,529],{"class":202},[186,64442,52773],{"class":532},[186,64444,552],{"class":202},[186,64446,64447],{"class":188,"line":219},[186,64448,3867],{"emptyLinePlaceholder":1551},[186,64450,64451,64453,64455],{"class":188,"line":225},[186,64452,520],{"class":202},[186,64454,52786],{"class":523},[186,64456,552],{"class":202},[186,64458,64459,64461,64463,64465,64467,64469],{"class":188,"line":242},[186,64460,53591],{"class":202},[186,64462,52796],{"class":523},[186,64464,52799],{"class":198},[186,64466,529],{"class":202},[186,64468,52804],{"class":532},[186,64470,552],{"class":202},[186,64472,64473,64475,64477,64479,64481,64483,64485,64487,64489],{"class":188,"line":248},[186,64474,53591],{"class":202},[186,64476,52796],{"class":523},[186,64478,16382],{"class":198},[186,64480,529],{"class":202},[186,64482,52843],{"class":532},[186,64484,52823],{"class":198},[186,64486,529],{"class":202},[186,64488,52850],{"class":532},[186,64490,552],{"class":202},[186,64492,64493,64495,64497,64499,64501],{"class":188,"line":265},[186,64494,53591],{"class":202},[186,64496,52859],{"class":523},[186,64498,52862],{"class":202},[186,64500,52859],{"class":523},[186,64502,552],{"class":202},[186,64504,64505,64507,64509],{"class":188,"line":271},[186,64506,1470],{"class":202},[186,64508,52786],{"class":523},[186,64510,552],{"class":202},[186,64512,64513],{"class":188,"line":288},[186,64514,3867],{"emptyLinePlaceholder":1551},[186,64516,64517,64519,64521],{"class":188,"line":294},[186,64518,520],{"class":202},[186,64520,53247],{"class":523},[186,64522,552],{"class":202},[186,64524,64525,64527,64529,64531,64533,64535],{"class":188,"line":1212},[186,64526,53591],{"class":202},[186,64528,55266],{"class":523},[186,64530,55269],{"class":198},[186,64532,529],{"class":202},[186,64534,64137],{"class":532},[186,64536,552],{"class":202},[186,64538,64539,64541,64543],{"class":188,"line":1223},[186,64540,53591],{"class":202},[186,64542,53260],{"class":523},[186,64544,552],{"class":202},[186,64546,64547,64549,64551,64553,64555,64557,64559,64561],{"class":188,"line":1236},[186,64548,12684],{"class":669},[186,64550,62046],{"class":206},[186,64552,15027],{"class":669},[186,64554,55841],{"class":202},[186,64556,55844],{"class":198},[186,64558,832],{"class":202},[186,64560,64320],{"class":532},[186,64562,1629],{"class":202},[186,64564,64565,64568,64570,64572,64575,64577,64579],{"class":188,"line":3096},[186,64566,64567],{"class":202},"    input.",[186,64569,59254],{"class":198},[186,64571,832],{"class":202},[186,64573,64574],{"class":532},"'change'",[186,64576,13898],{"class":202},[186,64578,55894],{"class":669},[186,64580,55897],{"class":202},[186,64582,64583,64585,64587,64589,64591],{"class":188,"line":3110},[186,64584,59685],{"class":202},[186,64586,59688],{"class":198},[186,64588,832],{"class":202},[186,64590,2203],{"class":206},[186,64592,1629],{"class":202},[186,64594,64595],{"class":188,"line":3115},[186,64596,34916],{"class":202},[186,64598,64599,64601,64603],{"class":188,"line":3121},[186,64600,53864],{"class":202},[186,64602,53260],{"class":523},[186,64604,552],{"class":202},[186,64606,64607,64609,64611],{"class":188,"line":3142},[186,64608,1470],{"class":202},[186,64610,53247],{"class":523},[186,64612,552],{"class":202},[186,64614,64615],{"class":188,"line":3147},[186,64616,3867],{"emptyLinePlaceholder":1551},[186,64618,64619,64621,64623],{"class":188,"line":3161},[186,64620,1470],{"class":202},[186,64622,52089],{"class":523},[186,64624,552],{"class":202},[169,64626,64627],{},"总结：内容发生改变才回去触发",[29,64629,64631],{"id":64630},"_326-事件对象","3.2.6 事件对象",[23459,64633,64635],{"id":64634},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[169,64637,64638],{},[164,64639],{"alt":181,"src":64640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[169,64642,64643],{},[164,64644],{"alt":181,"src":64645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[169,64647,64648],{},"点击一次，就输出了事件对象，它是个对象",[169,64650,64651],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[169,64653,64654],{},[164,64655],{"alt":181,"src":64656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23459,64658,64660],{"id":64659},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[169,64662,64663],{},[164,64664],{"alt":181,"src":64665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[169,64667,64668],{},"实现按特殊字符才是实现打印输出效果：",[176,64670,64672],{"className":54514,"code":64671,"language":54516,"meta":181,"style":181},"\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",[183,64673,64674,64682,64687,64701,64709,64714,64719,64724,64729,64734,64739,64744,64749,64754,64758,64762,64770],{"__ignoreMap":181},[186,64675,64676,64678,64680],{"class":188,"line":189},[186,64677,520],{"class":202},[186,64679,53247],{"class":523},[186,64681,552],{"class":202},[186,64683,64684],{"class":188,"line":49},[186,64685,64686],{"class":192},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[186,64688,64689,64691,64693,64695,64697,64699],{"class":188,"line":219},[186,64690,53591],{"class":202},[186,64692,55266],{"class":523},[186,64694,55269],{"class":198},[186,64696,529],{"class":202},[186,64698,64137],{"class":532},[186,64700,552],{"class":202},[186,64702,64703,64705,64707],{"class":188,"line":225},[186,64704,53591],{"class":202},[186,64706,53260],{"class":523},[186,64708,552],{"class":202},[186,64710,64711],{"class":188,"line":242},[186,64712,64713],{"class":202},"    \u002F\u002F const btn = document.querySelector('button')\n",[186,64715,64716],{"class":188,"line":248},[186,64717,64718],{"class":202},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[186,64720,64721],{"class":188,"line":265},[186,64722,64723],{"class":202},"    \u002F\u002F   console.log(e);\n",[186,64725,64726],{"class":188,"line":271},[186,64727,64728],{"class":202},"    \u002F\u002F })\n",[186,64730,64731],{"class":188,"line":288},[186,64732,64733],{"class":202},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[186,64735,64736],{"class":188,"line":294},[186,64737,64738],{"class":202},"    const input = document.querySelector('input')\n",[186,64740,64741],{"class":188,"line":1212},[186,64742,64743],{"class":202},"    input.addEventListener('keyup', function (e) {\n",[186,64745,64746],{"class":188,"line":1223},[186,64747,64748],{"class":202},"      if (e.key === 'Enter') {\n",[186,64750,64751],{"class":188,"line":1236},[186,64752,64753],{"class":202},"        console.log('我按下了回车键')\n",[186,64755,64756],{"class":188,"line":3096},[186,64757,53845],{"class":202},[186,64759,64760],{"class":188,"line":3110},[186,64761,34916],{"class":202},[186,64763,64764,64766,64768],{"class":188,"line":3115},[186,64765,53864],{"class":202},[186,64767,53260],{"class":523},[186,64769,552],{"class":202},[186,64771,64772,64774,64776],{"class":188,"line":3121},[186,64773,1470],{"class":202},[186,64775,53247],{"class":523},[186,64777,552],{"class":202},[23459,64779,64781],{"id":64780},"_3263-trim方法","3.2.6.3 trim方法",[169,64783,64784],{},[164,64785],{"alt":181,"src":64786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[169,64788,64789],{},[164,64790],{"alt":181,"src":64791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[169,64793,64794],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[169,64796,64797],{},"str.trim()",[29,64799,64801],{"id":64800},"_327-环境对象","3.2.7 环境对象",[169,64803,64804],{},[164,64805],{"alt":181,"src":64806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[169,64808,64809],{},[164,64810],{"alt":181,"src":64811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[169,64813,64814],{},[164,64815],{"alt":181,"src":64816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[169,64818,64819],{},"实际函数调用是window.fn()",[169,64821,64822],{},"普通函数里面this指向的是window",[19,64824,64825,64828,64831],{},[22,64826,64827],{},"在普通函数下，this指向的是window",[22,64829,64830],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[22,64832,64833],{},"箭头函数没有this",[169,64835,64836],{},"粗略记法就是：谁调用，this就指向谁",[169,64838,64839],{},[164,64840],{"alt":181,"src":64841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[169,64843,64844],{},[164,64845],{"alt":181,"src":64846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[169,64848,64849],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[169,64851,64852],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[176,64854,64856],{"className":54514,"code":64855,"language":54516,"meta":181,"style":181},"\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",[183,64857,64858,64866,64878,64886,64891,64896,64901,64906,64910,64918],{"__ignoreMap":181},[186,64859,64860,64862,64864],{"class":188,"line":189},[186,64861,520],{"class":202},[186,64863,53247],{"class":523},[186,64865,552],{"class":202},[186,64867,64868,64870,64872,64874,64876],{"class":188,"line":49},[186,64869,53591],{"class":202},[186,64871,55332],{"class":523},[186,64873,55338],{"class":202},[186,64875,55332],{"class":523},[186,64877,552],{"class":202},[186,64879,64880,64882,64884],{"class":188,"line":219},[186,64881,53591],{"class":202},[186,64883,53260],{"class":523},[186,64885,552],{"class":202},[186,64887,64888],{"class":188,"line":225},[186,64889,64890],{"class":202},"    const button = document.querySelector('button')\n",[186,64892,64893],{"class":188,"line":242},[186,64894,64895],{"class":202},"    button.addEventListener('click', function () {\n",[186,64897,64898],{"class":188,"line":248},[186,64899,64900],{"class":202},"      \u002F\u002F console.log(this);\n",[186,64902,64903],{"class":188,"line":265},[186,64904,64905],{"class":202},"      this.style.color = 'pink'\n",[186,64907,64908],{"class":188,"line":271},[186,64909,34916],{"class":202},[186,64911,64912,64914,64916],{"class":188,"line":288},[186,64913,53864],{"class":202},[186,64915,53260],{"class":523},[186,64917,552],{"class":202},[186,64919,64920,64922,64924],{"class":188,"line":294},[186,64921,1470],{"class":202},[186,64923,53247],{"class":523},[186,64925,552],{"class":202},[29,64927,64929],{"id":64928},"_328-回调函数","3.2.8 回调函数",[169,64931,64932],{},[164,64933],{"alt":181,"src":64934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[169,64936,64937],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[169,64939,12795],{},[19,64941,64942,64945,64948],{},[22,64943,64944],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[22,64946,64947],{},"回调函数本质还是函数，只不过把它当成参数使用",[22,64949,64950],{},"使用匿名函数做为回调函数比较常见",[29,64952,64954],{"id":64953},"_329-tab栏切换","3.2.9 tab栏切换",[169,64956,64957],{},[164,64958],{"alt":181,"src":64959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[176,64961,64963],{"className":52087,"code":64962,"language":52089,"meta":181,"style":181},"\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",[183,64964,64965,64975,64989,64993,65001,65015,65035,65055,65068,65076,65082,65092,65102,65106,65110,65117,65130,65143,65155,65171,65175,65179,65186,65198,65210,65222,65232,65242,65246,65250,65259,65271,65281,65293,65297,65301,65309,65319,65329,65339,65343,65347,65357,65371,65383,65387,65391,65403,65414,65431,65441,65445,65449,65464,65475,65485,65489,65493,65500,65515,65519,65523,65531,65541,65545,65549,65558,65568,65572,65580,65588,65592,65600,65615,65630,65643,65651,65685,65712,65739,65766,65793,65801,65809,65824,65861,65896,65931,65966,66001,66009,66017,66025,66030,66035,66055,66060,66089,66094,66099,66117,66122,66127,66132,66154,66159,66175,66179,66184,66189,66210,66215,66244,66248,66253,66257,66265,66273,66277],{"__ignoreMap":181},[186,64966,64967,64969,64971,64973],{"class":188,"line":189},[186,64968,52751],{"class":202},[186,64970,52754],{"class":523},[186,64972,52757],{"class":198},[186,64974,552],{"class":202},[186,64976,64977,64979,64981,64983,64985,64987],{"class":188,"line":49},[186,64978,520],{"class":202},[186,64980,52089],{"class":523},[186,64982,52768],{"class":198},[186,64984,529],{"class":202},[186,64986,52773],{"class":532},[186,64988,552],{"class":202},[186,64990,64991],{"class":188,"line":219},[186,64992,3867],{"emptyLinePlaceholder":1551},[186,64994,64995,64997,64999],{"class":188,"line":225},[186,64996,520],{"class":202},[186,64998,52786],{"class":523},[186,65000,552],{"class":202},[186,65002,65003,65005,65007,65009,65011,65013],{"class":188,"line":242},[186,65004,53591],{"class":202},[186,65006,52796],{"class":523},[186,65008,52799],{"class":198},[186,65010,529],{"class":202},[186,65012,52804],{"class":532},[186,65014,60568],{"class":202},[186,65016,65017,65019,65021,65023,65025,65027,65029,65031,65033],{"class":188,"line":248},[186,65018,53591],{"class":202},[186,65020,52796],{"class":523},[186,65022,52815],{"class":198},[186,65024,529],{"class":202},[186,65026,52820],{"class":532},[186,65028,52823],{"class":198},[186,65030,529],{"class":202},[186,65032,52828],{"class":532},[186,65034,60568],{"class":202},[186,65036,65037,65039,65041,65043,65045,65047,65049,65051,65053],{"class":188,"line":265},[186,65038,53591],{"class":202},[186,65040,52796],{"class":523},[186,65042,16382],{"class":198},[186,65044,529],{"class":202},[186,65046,52843],{"class":532},[186,65048,52823],{"class":198},[186,65050,529],{"class":202},[186,65052,52850],{"class":532},[186,65054,60568],{"class":202},[186,65056,65057,65059,65061,65064,65066],{"class":188,"line":271},[186,65058,53591],{"class":202},[186,65060,52859],{"class":523},[186,65062,65063],{"class":202},">tab栏切换\u003C\u002F",[186,65065,52859],{"class":523},[186,65067,552],{"class":202},[186,65069,65070,65072,65074],{"class":188,"line":288},[186,65071,53591],{"class":202},[186,65073,1524],{"class":523},[186,65075,552],{"class":202},[186,65077,65078,65080],{"class":188,"line":294},[186,65079,7866],{"class":523},[186,65081,622],{"class":202},[186,65083,65084,65086,65088,65090],{"class":188,"line":1212},[186,65085,56151],{"class":206},[186,65087,210],{"class":202},[186,65089,1803],{"class":206},[186,65091,634],{"class":202},[186,65093,65094,65096,65098,65100],{"class":188,"line":1223},[186,65095,56140],{"class":206},[186,65097,210],{"class":202},[186,65099,1803],{"class":206},[186,65101,634],{"class":202},[186,65103,65104],{"class":188,"line":1236},[186,65105,3654],{"class":202},[186,65107,65108],{"class":188,"line":3096},[186,65109,3867],{"emptyLinePlaceholder":1551},[186,65111,65112,65115],{"class":188,"line":3110},[186,65113,65114],{"class":198},"    .tab",[186,65116,622],{"class":202},[186,65118,65119,65121,65123,65126,65128],{"class":188,"line":3115},[186,65120,56215],{"class":206},[186,65122,210],{"class":202},[186,65124,65125],{"class":206},"590",[186,65127,804],{"class":669},[186,65129,634],{"class":202},[186,65131,65132,65134,65136,65139,65141],{"class":188,"line":3121},[186,65133,56229],{"class":206},[186,65135,210],{"class":202},[186,65137,65138],{"class":206},"340",[186,65140,804],{"class":669},[186,65142,634],{"class":202},[186,65144,65145,65147,65149,65151,65153],{"class":188,"line":3142},[186,65146,56151],{"class":206},[186,65148,210],{"class":202},[186,65150,801],{"class":206},[186,65152,804],{"class":669},[186,65154,634],{"class":202},[186,65156,65157,65159,65161,65163,65165,65167,65169],{"class":188,"line":3147},[186,65158,63415],{"class":206},[186,65160,210],{"class":202},[186,65162,1829],{"class":206},[186,65164,804],{"class":669},[186,65166,52971],{"class":206},[186,65168,63682],{"class":206},[186,65170,634],{"class":202},[186,65172,65173],{"class":188,"line":3161},[186,65174,3654],{"class":202},[186,65176,65177],{"class":188,"line":3166},[186,65178,3867],{"emptyLinePlaceholder":1551},[186,65180,65181,65184],{"class":188,"line":3195},[186,65182,65183],{"class":198},"    .tab-nav",[186,65185,622],{"class":202},[186,65187,65188,65190,65192,65194,65196],{"class":188,"line":3200},[186,65189,56215],{"class":206},[186,65191,210],{"class":202},[186,65193,1922],{"class":206},[186,65195,670],{"class":669},[186,65197,634],{"class":202},[186,65199,65200,65202,65204,65206,65208],{"class":188,"line":3217},[186,65201,56229],{"class":206},[186,65203,210],{"class":202},[186,65205,2515],{"class":206},[186,65207,804],{"class":669},[186,65209,634],{"class":202},[186,65211,65212,65214,65216,65218,65220],{"class":188,"line":3222},[186,65213,58800],{"class":206},[186,65215,210],{"class":202},[186,65217,2515],{"class":206},[186,65219,804],{"class":669},[186,65221,634],{"class":202},[186,65223,65224,65226,65228,65230],{"class":188,"line":3227},[186,65225,56452],{"class":206},[186,65227,210],{"class":202},[186,65229,52928],{"class":206},[186,65231,634],{"class":202},[186,65233,65234,65236,65238,65240],{"class":188,"line":3232},[186,65235,56463],{"class":206},[186,65237,210],{"class":202},[186,65239,53117],{"class":206},[186,65241,634],{"class":202},[186,65243,65244],{"class":188,"line":3246},[186,65245,3654],{"class":202},[186,65247,65248],{"class":188,"line":3251},[186,65249,3867],{"emptyLinePlaceholder":1551},[186,65251,65252,65254,65257],{"class":188,"line":4044},[186,65253,65183],{"class":198},[186,65255,65256],{"class":523}," h3",[186,65258,622],{"class":202},[186,65260,65261,65263,65265,65267,65269],{"class":188,"line":4058},[186,65262,56365],{"class":206},[186,65264,210],{"class":202},[186,65266,2408],{"class":206},[186,65268,804],{"class":669},[186,65270,634],{"class":202},[186,65272,65273,65275,65277,65279],{"class":188,"line":4066},[186,65274,63772],{"class":206},[186,65276,210],{"class":202},[186,65278,1231],{"class":206},[186,65280,634],{"class":202},[186,65282,65283,65285,65287,65289,65291],{"class":188,"line":4071},[186,65284,63438],{"class":206},[186,65286,210],{"class":202},[186,65288,801],{"class":206},[186,65290,804],{"class":669},[186,65292,634],{"class":202},[186,65294,65295],{"class":188,"line":4077},[186,65296,3654],{"class":202},[186,65298,65299],{"class":188,"line":4083},[186,65300,3867],{"emptyLinePlaceholder":1551},[186,65302,65303,65305,65307],{"class":188,"line":4088},[186,65304,65183],{"class":198},[186,65306,62733],{"class":523},[186,65308,622],{"class":202},[186,65310,65311,65313,65315,65317],{"class":188,"line":9411},[186,65312,56177],{"class":206},[186,65314,210],{"class":202},[186,65316,56182],{"class":206},[186,65318,634],{"class":202},[186,65320,65321,65323,65325,65327],{"class":188,"line":9435},[186,65322,56452],{"class":206},[186,65324,210],{"class":202},[186,65326,52928],{"class":206},[186,65328,634],{"class":202},[186,65330,65331,65333,65335,65337],{"class":188,"line":9440},[186,65332,56463],{"class":206},[186,65334,210],{"class":202},[186,65336,53030],{"class":206},[186,65338,634],{"class":202},[186,65340,65341],{"class":188,"line":9446},[186,65342,3654],{"class":202},[186,65344,65345],{"class":188,"line":9473},[186,65346,3867],{"emptyLinePlaceholder":1551},[186,65348,65349,65351,65353,65355],{"class":188,"line":9478},[186,65350,65183],{"class":198},[186,65352,62733],{"class":523},[186,65354,56518],{"class":523},[186,65356,622],{"class":202},[186,65358,65359,65361,65363,65365,65367,65369],{"class":188,"line":9484},[186,65360,56151],{"class":206},[186,65362,210],{"class":202},[186,65364,1803],{"class":206},[186,65366,10413],{"class":206},[186,65368,804],{"class":669},[186,65370,634],{"class":202},[186,65372,65373,65375,65377,65379,65381],{"class":188,"line":9496},[186,65374,56365],{"class":206},[186,65376,210],{"class":202},[186,65378,2159],{"class":206},[186,65380,804],{"class":669},[186,65382,634],{"class":202},[186,65384,65385],{"class":188,"line":9508},[186,65386,3654],{"class":202},[186,65388,65389],{"class":188,"line":9520},[186,65390,3867],{"emptyLinePlaceholder":1551},[186,65392,65393,65395,65397,65399,65401],{"class":188,"line":11179},[186,65394,65183],{"class":198},[186,65396,62733],{"class":523},[186,65398,56518],{"class":523},[186,65400,2871],{"class":523},[186,65402,622],{"class":202},[186,65404,65405,65408,65410,65412],{"class":188,"line":11204},[186,65406,65407],{"class":206},"      text-decoration",[186,65409,210],{"class":202},[186,65411,56182],{"class":206},[186,65413,634],{"class":202},[186,65415,65416,65418,65420,65422,65424,65426,65429],{"class":188,"line":11227},[186,65417,63670],{"class":206},[186,65419,210],{"class":202},[186,65421,1697],{"class":206},[186,65423,804],{"class":669},[186,65425,52971],{"class":206},[186,65427,65428],{"class":206}," transparent",[186,65430,634],{"class":202},[186,65432,65433,65435,65437,65439],{"class":188,"line":11251},[186,65434,58857],{"class":206},[186,65436,210],{"class":202},[186,65438,63807],{"class":206},[186,65440,634],{"class":202},[186,65442,65443],{"class":188,"line":11256},[186,65444,3654],{"class":202},[186,65446,65447],{"class":188,"line":11261},[186,65448,3867],{"emptyLinePlaceholder":1551},[186,65450,65451,65453,65455,65457,65459,65462],{"class":188,"line":11266},[186,65452,65183],{"class":198},[186,65454,62733],{"class":523},[186,65456,56518],{"class":523},[186,65458,2871],{"class":523},[186,65460,65461],{"class":198},".active",[186,65463,622],{"class":202},[186,65465,65466,65468,65470,65473],{"class":188,"line":11275},[186,65467,63229],{"class":206},[186,65469,210],{"class":202},[186,65471,65472],{"class":206},"#e1251b",[186,65474,634],{"class":202},[186,65476,65477,65479,65481,65483],{"class":188,"line":11280},[186,65478,58857],{"class":206},[186,65480,210],{"class":202},[186,65482,65472],{"class":206},[186,65484,634],{"class":202},[186,65486,65487],{"class":188,"line":11286},[186,65488,3654],{"class":202},[186,65490,65491],{"class":188,"line":11307},[186,65492,3867],{"emptyLinePlaceholder":1551},[186,65494,65495,65498],{"class":188,"line":11313},[186,65496,65497],{"class":198},"    .tab-content",[186,65499,622],{"class":202},[186,65501,65502,65504,65506,65508,65511,65513],{"class":188,"line":11327},[186,65503,56140],{"class":206},[186,65505,210],{"class":202},[186,65507,1803],{"class":206},[186,65509,65510],{"class":206}," 16",[186,65512,804],{"class":669},[186,65514,634],{"class":202},[186,65516,65517],{"class":188,"line":11333},[186,65518,3654],{"class":202},[186,65520,65521],{"class":188,"line":11360},[186,65522,3867],{"emptyLinePlaceholder":1551},[186,65524,65525,65527,65529],{"class":188,"line":11369},[186,65526,65497],{"class":198},[186,65528,63612],{"class":198},[186,65530,622],{"class":202},[186,65532,65533,65535,65537,65539],{"class":188,"line":11375},[186,65534,56452],{"class":206},[186,65536,210],{"class":202},[186,65538,56182],{"class":206},[186,65540,634],{"class":202},[186,65542,65543],{"class":188,"line":11383},[186,65544,3654],{"class":202},[186,65546,65547],{"class":188,"line":11388},[186,65548,3867],{"emptyLinePlaceholder":1551},[186,65550,65551,65553,65556],{"class":188,"line":18065},[186,65552,65497],{"class":198},[186,65554,65555],{"class":198}," .item.active",[186,65557,622],{"class":202},[186,65559,65560,65562,65564,65566],{"class":188,"line":18071},[186,65561,56452],{"class":206},[186,65563,210],{"class":202},[186,65565,62310],{"class":206},[186,65567,634],{"class":202},[186,65569,65570],{"class":188,"line":18094},[186,65571,3654],{"class":202},[186,65573,65574,65576,65578],{"class":188,"line":18100},[186,65575,53864],{"class":202},[186,65577,1524],{"class":523},[186,65579,552],{"class":202},[186,65581,65582,65584,65586],{"class":188,"line":18123},[186,65583,1470],{"class":202},[186,65585,52786],{"class":523},[186,65587,552],{"class":202},[186,65589,65590],{"class":188,"line":18137},[186,65591,3867],{"emptyLinePlaceholder":1551},[186,65593,65594,65596,65598],{"class":188,"line":18157},[186,65595,520],{"class":202},[186,65597,53247],{"class":523},[186,65599,552],{"class":202},[186,65601,65602,65604,65606,65608,65610,65613],{"class":188,"line":18163},[186,65603,53591],{"class":202},[186,65605,1450],{"class":523},[186,65607,1453],{"class":198},[186,65609,529],{"class":202},[186,65611,65612],{"class":532},"\"tab\"",[186,65614,552],{"class":202},[186,65616,65617,65619,65621,65623,65625,65628],{"class":188,"line":18174},[186,65618,52793],{"class":202},[186,65620,1450],{"class":523},[186,65622,1453],{"class":198},[186,65624,529],{"class":202},[186,65626,65627],{"class":532},"\"tab-nav\"",[186,65629,552],{"class":202},[186,65631,65632,65634,65636,65639,65641],{"class":188,"line":18197},[186,65633,56677],{"class":202},[186,65635,29],{"class":523},[186,65637,65638],{"class":202},">每日特价\u003C\u002F",[186,65640,29],{"class":523},[186,65642,552],{"class":202},[186,65644,65645,65647,65649],{"class":188,"line":18219},[186,65646,56677],{"class":202},[186,65648,19],{"class":523},[186,65650,552],{"class":202},[186,65652,65653,65655,65657,65659,65661,65663,65665,65667,65669,65671,65674,65677,65679,65681,65683],{"class":188,"line":18224},[186,65654,56743],{"class":202},[186,65656,22],{"class":523},[186,65658,62493],{"class":202},[186,65660,948],{"class":523},[186,65662,1453],{"class":198},[186,65664,529],{"class":202},[186,65666,61147],{"class":532},[186,65668,62498],{"class":198},[186,65670,529],{"class":202},[186,65672,65673],{"class":532},"\"javascript:;\"",[186,65675,65676],{"class":202},">精选\u003C\u002F",[186,65678,948],{"class":523},[186,65680,56755],{"class":202},[186,65682,22],{"class":523},[186,65684,552],{"class":202},[186,65686,65687,65689,65691,65693,65695,65697,65699,65701,65704,65706,65708,65710],{"class":188,"line":18230},[186,65688,56743],{"class":202},[186,65690,22],{"class":523},[186,65692,62493],{"class":202},[186,65694,948],{"class":523},[186,65696,62498],{"class":198},[186,65698,529],{"class":202},[186,65700,65673],{"class":532},[186,65702,65703],{"class":202},">美食\u003C\u002F",[186,65705,948],{"class":523},[186,65707,56755],{"class":202},[186,65709,22],{"class":523},[186,65711,552],{"class":202},[186,65713,65714,65716,65718,65720,65722,65724,65726,65728,65731,65733,65735,65737],{"class":188,"line":18244},[186,65715,56743],{"class":202},[186,65717,22],{"class":523},[186,65719,62493],{"class":202},[186,65721,948],{"class":523},[186,65723,62498],{"class":198},[186,65725,529],{"class":202},[186,65727,65673],{"class":532},[186,65729,65730],{"class":202},">百货\u003C\u002F",[186,65732,948],{"class":523},[186,65734,56755],{"class":202},[186,65736,22],{"class":523},[186,65738,552],{"class":202},[186,65740,65741,65743,65745,65747,65749,65751,65753,65755,65758,65760,65762,65764],{"class":188,"line":18257},[186,65742,56743],{"class":202},[186,65744,22],{"class":523},[186,65746,62493],{"class":202},[186,65748,948],{"class":523},[186,65750,62498],{"class":198},[186,65752,529],{"class":202},[186,65754,65673],{"class":532},[186,65756,65757],{"class":202},">个护\u003C\u002F",[186,65759,948],{"class":523},[186,65761,56755],{"class":202},[186,65763,22],{"class":523},[186,65765,552],{"class":202},[186,65767,65768,65770,65772,65774,65776,65778,65780,65782,65785,65787,65789,65791],{"class":188,"line":18262},[186,65769,56743],{"class":202},[186,65771,22],{"class":523},[186,65773,62493],{"class":202},[186,65775,948],{"class":523},[186,65777,62498],{"class":198},[186,65779,529],{"class":202},[186,65781,65673],{"class":532},[186,65783,65784],{"class":202},">预告\u003C\u002F",[186,65786,948],{"class":523},[186,65788,56755],{"class":202},[186,65790,22],{"class":523},[186,65792,552],{"class":202},[186,65794,65795,65797,65799],{"class":188,"line":18276},[186,65796,56848],{"class":202},[186,65798,19],{"class":523},[186,65800,552],{"class":202},[186,65802,65803,65805,65807],{"class":188,"line":18281},[186,65804,53224],{"class":202},[186,65806,1450],{"class":523},[186,65808,552],{"class":202},[186,65810,65811,65813,65815,65817,65819,65822],{"class":188,"line":18287},[186,65812,52793],{"class":202},[186,65814,1450],{"class":523},[186,65816,1453],{"class":198},[186,65818,529],{"class":202},[186,65820,65821],{"class":532},"\"tab-content\"",[186,65823,552],{"class":202},[186,65825,65826,65828,65830,65832,65834,65837,65839,65841,65843,65845,65848,65850,65852,65854,65857,65859],{"class":188,"line":18292},[186,65827,56677],{"class":202},[186,65829,1450],{"class":523},[186,65831,1453],{"class":198},[186,65833,529],{"class":202},[186,65835,65836],{"class":532},"\"item active\"",[186,65838,62493],{"class":202},[186,65840,164],{"class":523},[186,65842,526],{"class":198},[186,65844,529],{"class":202},[186,65846,65847],{"class":532},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[186,65849,536],{"class":198},[186,65851,529],{"class":202},[186,65853,9115],{"class":532},[186,65855,65856],{"class":202}," \u002F>\u003C\u002F",[186,65858,1450],{"class":523},[186,65860,552],{"class":202},[186,65862,65863,65865,65867,65869,65871,65873,65875,65877,65879,65881,65884,65886,65888,65890,65892,65894],{"class":188,"line":18306},[186,65864,56677],{"class":202},[186,65866,1450],{"class":523},[186,65868,1453],{"class":198},[186,65870,529],{"class":202},[186,65872,64061],{"class":532},[186,65874,62493],{"class":202},[186,65876,164],{"class":523},[186,65878,526],{"class":198},[186,65880,529],{"class":202},[186,65882,65883],{"class":532},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[186,65885,536],{"class":198},[186,65887,529],{"class":202},[186,65889,9115],{"class":532},[186,65891,65856],{"class":202},[186,65893,1450],{"class":523},[186,65895,552],{"class":202},[186,65897,65898,65900,65902,65904,65906,65908,65910,65912,65914,65916,65919,65921,65923,65925,65927,65929],{"class":188,"line":18311},[186,65899,56677],{"class":202},[186,65901,1450],{"class":523},[186,65903,1453],{"class":198},[186,65905,529],{"class":202},[186,65907,64061],{"class":532},[186,65909,62493],{"class":202},[186,65911,164],{"class":523},[186,65913,526],{"class":198},[186,65915,529],{"class":202},[186,65917,65918],{"class":532},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[186,65920,536],{"class":198},[186,65922,529],{"class":202},[186,65924,9115],{"class":532},[186,65926,65856],{"class":202},[186,65928,1450],{"class":523},[186,65930,552],{"class":202},[186,65932,65933,65935,65937,65939,65941,65943,65945,65947,65949,65951,65954,65956,65958,65960,65962,65964],{"class":188,"line":18316},[186,65934,56677],{"class":202},[186,65936,1450],{"class":523},[186,65938,1453],{"class":198},[186,65940,529],{"class":202},[186,65942,64061],{"class":532},[186,65944,62493],{"class":202},[186,65946,164],{"class":523},[186,65948,526],{"class":198},[186,65950,529],{"class":202},[186,65952,65953],{"class":532},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[186,65955,536],{"class":198},[186,65957,529],{"class":202},[186,65959,9115],{"class":532},[186,65961,65856],{"class":202},[186,65963,1450],{"class":523},[186,65965,552],{"class":202},[186,65967,65968,65970,65972,65974,65976,65978,65980,65982,65984,65986,65989,65991,65993,65995,65997,65999],{"class":188,"line":18330},[186,65969,56677],{"class":202},[186,65971,1450],{"class":523},[186,65973,1453],{"class":198},[186,65975,529],{"class":202},[186,65977,64061],{"class":532},[186,65979,62493],{"class":202},[186,65981,164],{"class":523},[186,65983,526],{"class":198},[186,65985,529],{"class":202},[186,65987,65988],{"class":532},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[186,65990,536],{"class":198},[186,65992,529],{"class":202},[186,65994,9115],{"class":532},[186,65996,65856],{"class":202},[186,65998,1450],{"class":523},[186,66000,552],{"class":202},[186,66002,66003,66005,66007],{"class":188,"line":18342},[186,66004,53224],{"class":202},[186,66006,1450],{"class":523},[186,66008,552],{"class":202},[186,66010,66011,66013,66015],{"class":188,"line":18347},[186,66012,53864],{"class":202},[186,66014,1450],{"class":523},[186,66016,552],{"class":202},[186,66018,66019,66021,66023],{"class":188,"line":18360},[186,66020,53591],{"class":202},[186,66022,53260],{"class":523},[186,66024,552],{"class":202},[186,66026,66027],{"class":188,"line":18365},[186,66028,66029],{"class":192},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[186,66031,66032],{"class":188,"line":18370},[186,66033,66034],{"class":192},"    \u002F\u002F 1.1 获取 a 元素 \n",[186,66036,66037,66039,66042,66044,66046,66048,66050,66053],{"class":188,"line":18375},[186,66038,12684],{"class":669},[186,66040,66041],{"class":206}," as",[186,66043,15027],{"class":669},[186,66045,55841],{"class":202},[186,66047,57122],{"class":198},[186,66049,832],{"class":202},[186,66051,66052],{"class":532},"'.tab-nav a'",[186,66054,1629],{"class":202},[186,66056,66057],{"class":188,"line":18388},[186,66058,66059],{"class":192},"    \u002F\u002F console.log(as) \n",[186,66061,66062,66064,66066,66068,66070,66072,66074,66076,66078,66081,66083,66085,66087],{"class":188,"line":18393},[186,66063,4667],{"class":669},[186,66065,3126],{"class":202},[186,66067,53294],{"class":669},[186,66069,10901],{"class":202},[186,66071,529],{"class":669},[186,66073,5559],{"class":206},[186,66075,10908],{"class":202},[186,66077,520],{"class":669},[186,66079,66080],{"class":202}," as.",[186,66082,53415],{"class":206},[186,66084,4680],{"class":202},[186,66086,3759],{"class":669},[186,66088,13905],{"class":202},[186,66090,66091],{"class":188,"line":34088},[186,66092,66093],{"class":192},"      \u002F\u002F console.log(as[i])\n",[186,66095,66096],{"class":188,"line":34094},[186,66097,66098],{"class":192},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[186,66100,66101,66104,66106,66108,66111,66113,66115],{"class":188,"line":34100},[186,66102,66103],{"class":202},"      as[i].",[186,66105,59254],{"class":198},[186,66107,832],{"class":202},[186,66109,66110],{"class":532},"'mouseenter'",[186,66112,13898],{"class":202},[186,66114,55894],{"class":669},[186,66116,55897],{"class":202},[186,66118,66119],{"class":188,"line":34106},[186,66120,66121],{"class":192},"        \u002F\u002F console.log('鼠标经过')\n",[186,66123,66124],{"class":188,"line":34112},[186,66125,66126],{"class":192},"        \u002F\u002F 排他思想  \n",[186,66128,66129],{"class":188,"line":34123},[186,66130,66131],{"class":192},"        \u002F\u002F 干掉别人 移除类active\n",[186,66133,66134,66136,66138,66140,66143,66145,66147,66149,66152],{"class":188,"line":34129},[186,66135,53372],{"class":202},[186,66137,55844],{"class":198},[186,66139,832],{"class":202},[186,66141,66142],{"class":532},"'.tab-nav .active'",[186,66144,58444],{"class":202},[186,66146,58447],{"class":198},[186,66148,832],{"class":202},[186,66150,66151],{"class":532},"'active'",[186,66153,1629],{"class":202},[186,66155,66156],{"class":188,"line":34149},[186,66157,66158],{"class":192},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[186,66160,66161,66164,66167,66169,66171,66173],{"class":188,"line":34155},[186,66162,66163],{"class":206},"        this",[186,66165,66166],{"class":202},".classList.",[186,66168,6797],{"class":198},[186,66170,832],{"class":202},[186,66172,66151],{"class":532},[186,66174,1629],{"class":202},[186,66176,66177],{"class":188,"line":34166},[186,66178,3867],{"emptyLinePlaceholder":1551},[186,66180,66181],{"class":188,"line":34172},[186,66182,66183],{"class":192},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[186,66185,66186],{"class":188,"line":34178},[186,66187,66188],{"class":192},"        \u002F\u002F 干掉别人\n",[186,66190,66191,66193,66195,66197,66200,66202,66204,66206,66208],{"class":188,"line":34184},[186,66192,53372],{"class":202},[186,66194,55844],{"class":198},[186,66196,832],{"class":202},[186,66198,66199],{"class":532},"'.tab-content .active'",[186,66201,58444],{"class":202},[186,66203,58447],{"class":198},[186,66205,832],{"class":202},[186,66207,66151],{"class":532},[186,66209,1629],{"class":202},[186,66211,66212],{"class":188,"line":34190},[186,66213,66214],{"class":192},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[186,66216,66217,66219,66221,66223,66226,66228,66230,66232,66234,66236,66238,66240,66242],{"class":188,"line":34196},[186,66218,53372],{"class":202},[186,66220,55844],{"class":198},[186,66222,832],{"class":202},[186,66224,66225],{"class":532},"`.tab-content .item:nth-child(${",[186,66227,2051],{"class":202},[186,66229,47020],{"class":669},[186,66231,26577],{"class":206},[186,66233,58473],{"class":532},[186,66235,58444],{"class":202},[186,66237,6797],{"class":198},[186,66239,832],{"class":202},[186,66241,66151],{"class":532},[186,66243,1629],{"class":202},[186,66245,66246],{"class":188,"line":34202},[186,66247,3867],{"emptyLinePlaceholder":1551},[186,66249,66250],{"class":188,"line":34208},[186,66251,66252],{"class":202},"      })\n",[186,66254,66255],{"class":188,"line":34228},[186,66256,3654],{"class":202},[186,66258,66259,66261,66263],{"class":188,"line":34234},[186,66260,53864],{"class":202},[186,66262,53260],{"class":523},[186,66264,552],{"class":202},[186,66266,66267,66269,66271],{"class":188,"line":34250},[186,66268,1470],{"class":202},[186,66270,53247],{"class":523},[186,66272,552],{"class":202},[186,66274,66275],{"class":188,"line":34256},[186,66276,3867],{"emptyLinePlaceholder":1551},[186,66278,66279,66281,66283],{"class":188,"line":34270},[186,66280,1470],{"class":202},[186,66282,52089],{"class":523},[186,66284,552],{"class":202},[169,66286,66287],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[169,66289,66290],{},"在监听事件中，this指向的就是他的调用者",[169,66292,66293],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[169,66295,55165],{},[169,66297,66298],{},"(function () {",[169,66300,66301],{},"const list = document.querySelector('.xtx-elevator-list')",[169,66303,66304],{},"list.addEventListener('click', function (e) {",[169,66306,66307],{},"if (e.target.tagName === 'A') {",[169,66309,66310],{},"\u002F\u002F 排他思想",[169,66312,66313],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[169,66315,66316],{},"const old = document.querySelector('.xtx-elevator-list .active')",[169,66318,66319],{},"\u002F\u002F console.log(old);",[169,66321,66322],{},"\u002F\u002F 判断",[169,66324,66325],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[169,66327,66328],{},"if (old) old.classList.remove('active')",[169,66330,66331],{},"e.target.classList.add('active')",[169,66333,2553],{},[169,66335,53911],{},[169,66337,66338],{},"})();",[29,66340,66342],{"id":66341},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[176,66344,66346],{"className":52087,"code":66345,"language":52089,"meta":181,"style":181},"\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",[183,66347,66348,66358,66362,66370,66374,66388,66402,66414,66422,66428,66438,66448,66452,66456,66463,66475,66486,66503,66516,66530,66540,66544,66548,66555,66566,66584,66594,66606,66610,66614,66621,66638,66649,66661,66665,66669,66676,66688,66692,66700,66708,66712,66720,66728,66736,66751,66795,66803,66816,66829,66842,66850,66858,66866,66894,66902,66914,66927,66940,66948,66956,66964,66990,66998,67011,67023,67036,67044,67052,67060,67086,67094,67107,67119,67132,67140,67148,67156,67161,67181,67186,67206,67211,67228,67233,67241,67246,67275,67288,67292,67296,67301,67305,67333,67338,67355,67360,67365,67370,67375,67401,67405,67409,67417,67425,67429],{"__ignoreMap":181},[186,66349,66350,66352,66354,66356],{"class":188,"line":189},[186,66351,52751],{"class":202},[186,66353,52754],{"class":523},[186,66355,52757],{"class":198},[186,66357,552],{"class":202},[186,66359,66360],{"class":188,"line":49},[186,66361,3867],{"emptyLinePlaceholder":1551},[186,66363,66364,66366,66368],{"class":188,"line":219},[186,66365,520],{"class":202},[186,66367,52089],{"class":523},[186,66369,552],{"class":202},[186,66371,66372],{"class":188,"line":225},[186,66373,3867],{"emptyLinePlaceholder":1551},[186,66375,66376,66378,66380,66382,66384,66386],{"class":188,"line":242},[186,66377,520],{"class":202},[186,66379,52786],{"class":523},[186,66381,52768],{"class":198},[186,66383,529],{"class":202},[186,66385,52773],{"class":532},[186,66387,552],{"class":202},[186,66389,66390,66392,66394,66396,66398,66400],{"class":188,"line":248},[186,66391,53591],{"class":202},[186,66393,52796],{"class":523},[186,66395,52799],{"class":198},[186,66397,529],{"class":202},[186,66399,52804],{"class":532},[186,66401,552],{"class":202},[186,66403,66404,66406,66408,66410,66412],{"class":188,"line":265},[186,66405,53591],{"class":202},[186,66407,52859],{"class":523},[186,66409,56755],{"class":202},[186,66411,52859],{"class":523},[186,66413,552],{"class":202},[186,66415,66416,66418,66420],{"class":188,"line":271},[186,66417,53591],{"class":202},[186,66419,1524],{"class":523},[186,66421,552],{"class":202},[186,66423,66424,66426],{"class":188,"line":288},[186,66425,7866],{"class":523},[186,66427,622],{"class":202},[186,66429,66430,66432,66434,66436],{"class":188,"line":294},[186,66431,56151],{"class":206},[186,66433,210],{"class":202},[186,66435,1803],{"class":206},[186,66437,634],{"class":202},[186,66439,66440,66442,66444,66446],{"class":188,"line":1212},[186,66441,56140],{"class":206},[186,66443,210],{"class":202},[186,66445,1803],{"class":206},[186,66447,634],{"class":202},[186,66449,66450],{"class":188,"line":1223},[186,66451,3654],{"class":202},[186,66453,66454],{"class":188,"line":1236},[186,66455,3867],{"emptyLinePlaceholder":1551},[186,66457,66458,66461],{"class":188,"line":3096},[186,66459,66460],{"class":523},"    table",[186,66462,622],{"class":202},[186,66464,66465,66468,66470,66473],{"class":188,"line":3110},[186,66466,66467],{"class":206},"      border-collapse",[186,66469,210],{"class":202},[186,66471,66472],{"class":206},"collapse",[186,66474,634],{"class":202},[186,66476,66477,66480,66482,66484],{"class":188,"line":3115},[186,66478,66479],{"class":206},"      border-spacing",[186,66481,210],{"class":202},[186,66483,1803],{"class":206},[186,66485,634],{"class":202},[186,66487,66488,66490,66492,66494,66496,66498,66501],{"class":188,"line":3121},[186,66489,63415],{"class":206},[186,66491,210],{"class":202},[186,66493,1829],{"class":206},[186,66495,804],{"class":669},[186,66497,52971],{"class":206},[186,66499,66500],{"class":206}," #c0c0c0",[186,66502,634],{"class":202},[186,66504,66505,66507,66509,66512,66514],{"class":188,"line":3142},[186,66506,56215],{"class":206},[186,66508,210],{"class":202},[186,66510,66511],{"class":206},"500",[186,66513,804],{"class":669},[186,66515,634],{"class":202},[186,66517,66518,66520,66522,66524,66526,66528],{"class":188,"line":3147},[186,66519,56151],{"class":206},[186,66521,210],{"class":202},[186,66523,1922],{"class":206},[186,66525,804],{"class":669},[186,66527,53006],{"class":206},[186,66529,634],{"class":202},[186,66531,66532,66534,66536,66538],{"class":188,"line":3161},[186,66533,58727],{"class":206},[186,66535,210],{"class":202},[186,66537,53042],{"class":206},[186,66539,634],{"class":202},[186,66541,66542],{"class":188,"line":3166},[186,66543,3654],{"class":202},[186,66545,66546],{"class":188,"line":3195},[186,66547,3867],{"emptyLinePlaceholder":1551},[186,66549,66550,66553],{"class":188,"line":3200},[186,66551,66552],{"class":523},"    th",[186,66554,622],{"class":202},[186,66556,66557,66559,66561,66564],{"class":188,"line":3217},[186,66558,56327],{"class":206},[186,66560,210],{"class":202},[186,66562,66563],{"class":206},"#09c",[186,66565,634],{"class":202},[186,66567,66568,66571,66573,66575,66577,66579,66582],{"class":188,"line":3222},[186,66569,66570],{"class":206},"      font",[186,66572,210],{"class":202},[186,66574,63777],{"class":206},[186,66576,65510],{"class":206},[186,66578,804],{"class":669},[186,66580,66581],{"class":532}," \"微软雅黑\"",[186,66583,634],{"class":202},[186,66585,66586,66588,66590,66592],{"class":188,"line":3227},[186,66587,58857],{"class":206},[186,66589,210],{"class":202},[186,66591,62283],{"class":206},[186,66593,634],{"class":202},[186,66595,66596,66598,66600,66602,66604],{"class":188,"line":3232},[186,66597,56229],{"class":206},[186,66599,210],{"class":202},[186,66601,2408],{"class":206},[186,66603,804],{"class":669},[186,66605,634],{"class":202},[186,66607,66608],{"class":188,"line":3246},[186,66609,3654],{"class":202},[186,66611,66612],{"class":188,"line":3251},[186,66613,3867],{"emptyLinePlaceholder":1551},[186,66615,66616,66619],{"class":188,"line":4044},[186,66617,66618],{"class":523},"    td",[186,66620,622],{"class":202},[186,66622,66623,66625,66627,66629,66631,66633,66636],{"class":188,"line":4058},[186,66624,63415],{"class":206},[186,66626,210],{"class":202},[186,66628,1829],{"class":206},[186,66630,804],{"class":669},[186,66632,52971],{"class":206},[186,66634,66635],{"class":206}," #d0d0d0",[186,66637,634],{"class":202},[186,66639,66640,66642,66644,66647],{"class":188,"line":4066},[186,66641,58857],{"class":206},[186,66643,210],{"class":202},[186,66645,66646],{"class":206},"#404060",[186,66648,634],{"class":202},[186,66650,66651,66653,66655,66657,66659],{"class":188,"line":4071},[186,66652,56140],{"class":206},[186,66654,210],{"class":202},[186,66656,2056],{"class":206},[186,66658,804],{"class":669},[186,66660,634],{"class":202},[186,66662,66663],{"class":188,"line":4077},[186,66664,3654],{"class":202},[186,66666,66667],{"class":188,"line":4083},[186,66668,3867],{"emptyLinePlaceholder":1551},[186,66670,66671,66674],{"class":188,"line":4088},[186,66672,66673],{"class":198},"    .allCheck",[186,66675,622],{"class":202},[186,66677,66678,66680,66682,66684,66686],{"class":188,"line":9411},[186,66679,56215],{"class":206},[186,66681,210],{"class":202},[186,66683,2222],{"class":206},[186,66685,804],{"class":669},[186,66687,634],{"class":202},[186,66689,66690],{"class":188,"line":9435},[186,66691,3654],{"class":202},[186,66693,66694,66696,66698],{"class":188,"line":9440},[186,66695,53864],{"class":202},[186,66697,1524],{"class":523},[186,66699,552],{"class":202},[186,66701,66702,66704,66706],{"class":188,"line":9446},[186,66703,1470],{"class":202},[186,66705,52786],{"class":523},[186,66707,552],{"class":202},[186,66709,66710],{"class":188,"line":9473},[186,66711,3867],{"emptyLinePlaceholder":1551},[186,66713,66714,66716,66718],{"class":188,"line":9478},[186,66715,520],{"class":202},[186,66717,53247],{"class":523},[186,66719,552],{"class":202},[186,66721,66722,66724,66726],{"class":188,"line":9484},[186,66723,53591],{"class":202},[186,66725,99],{"class":523},[186,66727,552],{"class":202},[186,66729,66730,66732,66734],{"class":188,"line":9496},[186,66731,52793],{"class":202},[186,66733,105],{"class":523},[186,66735,552],{"class":202},[186,66737,66738,66740,66742,66744,66746,66749],{"class":188,"line":9508},[186,66739,56677],{"class":202},[186,66741,108],{"class":523},[186,66743,1453],{"class":198},[186,66745,529],{"class":202},[186,66747,66748],{"class":532},"\"allCheck\"",[186,66750,552],{"class":202},[186,66752,66753,66755,66757,66759,66761,66763,66765,66767,66769,66771,66773,66776,66779,66781,66783,66785,66788,66791,66793],{"class":188,"line":9520},[186,66754,56743],{"class":202},[186,66756,55266],{"class":523},[186,66758,55269],{"class":198},[186,66760,529],{"class":202},[186,66762,55274],{"class":532},[186,66764,16382],{"class":198},[186,66766,529],{"class":202},[186,66768,9115],{"class":532},[186,66770,16421],{"class":198},[186,66772,529],{"class":202},[186,66774,66775],{"class":532},"\"checkAll\"",[186,66777,66778],{"class":202},"> \u003C",[186,66780,186],{"class":523},[186,66782,1453],{"class":198},[186,66784,529],{"class":202},[186,66786,66787],{"class":532},"\"all\"",[186,66789,66790],{"class":202},">全选\u003C\u002F",[186,66792,186],{"class":523},[186,66794,552],{"class":202},[186,66796,66797,66799,66801],{"class":188,"line":11179},[186,66798,56848],{"class":202},[186,66800,108],{"class":523},[186,66802,552],{"class":202},[186,66804,66805,66807,66809,66812,66814],{"class":188,"line":11204},[186,66806,56677],{"class":202},[186,66808,108],{"class":523},[186,66810,66811],{"class":202},">商品\u003C\u002F",[186,66813,108],{"class":523},[186,66815,552],{"class":202},[186,66817,66818,66820,66822,66825,66827],{"class":188,"line":11227},[186,66819,56677],{"class":202},[186,66821,108],{"class":523},[186,66823,66824],{"class":202},">商家\u003C\u002F",[186,66826,108],{"class":523},[186,66828,552],{"class":202},[186,66830,66831,66833,66835,66838,66840],{"class":188,"line":11251},[186,66832,56677],{"class":202},[186,66834,108],{"class":523},[186,66836,66837],{"class":202},">价格\u003C\u002F",[186,66839,108],{"class":523},[186,66841,552],{"class":202},[186,66843,66844,66846,66848],{"class":188,"line":11256},[186,66845,53224],{"class":202},[186,66847,105],{"class":523},[186,66849,552],{"class":202},[186,66851,66852,66854,66856],{"class":188,"line":11261},[186,66853,52793],{"class":202},[186,66855,105],{"class":523},[186,66857,552],{"class":202},[186,66859,66860,66862,66864],{"class":188,"line":11266},[186,66861,56677],{"class":202},[186,66863,121],{"class":523},[186,66865,552],{"class":202},[186,66867,66868,66870,66872,66874,66876,66878,66880,66882,66885,66887,66889,66892],{"class":188,"line":11275},[186,66869,56743],{"class":202},[186,66871,55266],{"class":523},[186,66873,55269],{"class":198},[186,66875,529],{"class":202},[186,66877,55274],{"class":532},[186,66879,16382],{"class":198},[186,66881,529],{"class":202},[186,66883,66884],{"class":532},"\"check\"",[186,66886,1453],{"class":198},[186,66888,529],{"class":202},[186,66890,66891],{"class":532},"\"ck\"",[186,66893,552],{"class":202},[186,66895,66896,66898,66900],{"class":188,"line":11280},[186,66897,56848],{"class":202},[186,66899,121],{"class":523},[186,66901,552],{"class":202},[186,66903,66904,66906,66908,66910,66912],{"class":188,"line":11286},[186,66905,56677],{"class":202},[186,66907,121],{"class":523},[186,66909,62614],{"class":202},[186,66911,121],{"class":523},[186,66913,552],{"class":202},[186,66915,66916,66918,66920,66923,66925],{"class":188,"line":11307},[186,66917,56677],{"class":202},[186,66919,121],{"class":523},[186,66921,66922],{"class":202},">小米\u003C\u002F",[186,66924,121],{"class":523},[186,66926,552],{"class":202},[186,66928,66929,66931,66933,66936,66938],{"class":188,"line":11313},[186,66930,56677],{"class":202},[186,66932,121],{"class":523},[186,66934,66935],{"class":202},">￥1999\u003C\u002F",[186,66937,121],{"class":523},[186,66939,552],{"class":202},[186,66941,66942,66944,66946],{"class":188,"line":11327},[186,66943,53224],{"class":202},[186,66945,105],{"class":523},[186,66947,552],{"class":202},[186,66949,66950,66952,66954],{"class":188,"line":11333},[186,66951,52793],{"class":202},[186,66953,105],{"class":523},[186,66955,552],{"class":202},[186,66957,66958,66960,66962],{"class":188,"line":11360},[186,66959,56677],{"class":202},[186,66961,121],{"class":523},[186,66963,552],{"class":202},[186,66965,66966,66968,66970,66972,66974,66976,66978,66980,66982,66984,66986,66988],{"class":188,"line":11369},[186,66967,56743],{"class":202},[186,66969,55266],{"class":523},[186,66971,55269],{"class":198},[186,66973,529],{"class":202},[186,66975,55274],{"class":532},[186,66977,16382],{"class":198},[186,66979,529],{"class":202},[186,66981,66884],{"class":532},[186,66983,1453],{"class":198},[186,66985,529],{"class":202},[186,66987,66891],{"class":532},[186,66989,552],{"class":202},[186,66991,66992,66994,66996],{"class":188,"line":11375},[186,66993,56848],{"class":202},[186,66995,121],{"class":523},[186,66997,552],{"class":202},[186,66999,67000,67002,67004,67007,67009],{"class":188,"line":11383},[186,67001,56677],{"class":202},[186,67003,121],{"class":523},[186,67005,67006],{"class":202},">小米净水器\u003C\u002F",[186,67008,121],{"class":523},[186,67010,552],{"class":202},[186,67012,67013,67015,67017,67019,67021],{"class":188,"line":11388},[186,67014,56677],{"class":202},[186,67016,121],{"class":523},[186,67018,66922],{"class":202},[186,67020,121],{"class":523},[186,67022,552],{"class":202},[186,67024,67025,67027,67029,67032,67034],{"class":188,"line":18065},[186,67026,56677],{"class":202},[186,67028,121],{"class":523},[186,67030,67031],{"class":202},">￥4999\u003C\u002F",[186,67033,121],{"class":523},[186,67035,552],{"class":202},[186,67037,67038,67040,67042],{"class":188,"line":18071},[186,67039,53224],{"class":202},[186,67041,105],{"class":523},[186,67043,552],{"class":202},[186,67045,67046,67048,67050],{"class":188,"line":18094},[186,67047,52793],{"class":202},[186,67049,105],{"class":523},[186,67051,552],{"class":202},[186,67053,67054,67056,67058],{"class":188,"line":18100},[186,67055,56677],{"class":202},[186,67057,121],{"class":523},[186,67059,552],{"class":202},[186,67061,67062,67064,67066,67068,67070,67072,67074,67076,67078,67080,67082,67084],{"class":188,"line":18123},[186,67063,56743],{"class":202},[186,67065,55266],{"class":523},[186,67067,55269],{"class":198},[186,67069,529],{"class":202},[186,67071,55274],{"class":532},[186,67073,16382],{"class":198},[186,67075,529],{"class":202},[186,67077,66884],{"class":532},[186,67079,1453],{"class":198},[186,67081,529],{"class":202},[186,67083,66891],{"class":532},[186,67085,552],{"class":202},[186,67087,67088,67090,67092],{"class":188,"line":18137},[186,67089,56848],{"class":202},[186,67091,121],{"class":523},[186,67093,552],{"class":202},[186,67095,67096,67098,67100,67103,67105],{"class":188,"line":18157},[186,67097,56677],{"class":202},[186,67099,121],{"class":523},[186,67101,67102],{"class":202},">小米电视\u003C\u002F",[186,67104,121],{"class":523},[186,67106,552],{"class":202},[186,67108,67109,67111,67113,67115,67117],{"class":188,"line":18163},[186,67110,56677],{"class":202},[186,67112,121],{"class":523},[186,67114,66922],{"class":202},[186,67116,121],{"class":523},[186,67118,552],{"class":202},[186,67120,67121,67123,67125,67128,67130],{"class":188,"line":18174},[186,67122,56677],{"class":202},[186,67124,121],{"class":523},[186,67126,67127],{"class":202},">￥5999\u003C\u002F",[186,67129,121],{"class":523},[186,67131,552],{"class":202},[186,67133,67134,67136,67138],{"class":188,"line":18197},[186,67135,53224],{"class":202},[186,67137,105],{"class":523},[186,67139,552],{"class":202},[186,67141,67142,67144,67146],{"class":188,"line":18219},[186,67143,53864],{"class":202},[186,67145,99],{"class":523},[186,67147,552],{"class":202},[186,67149,67150,67152,67154],{"class":188,"line":18224},[186,67151,53591],{"class":202},[186,67153,53260],{"class":523},[186,67155,552],{"class":202},[186,67157,67158],{"class":188,"line":18230},[186,67159,67160],{"class":192},"    \u002F\u002F 1. 获取大复选框\n",[186,67162,67163,67165,67168,67170,67172,67174,67176,67179],{"class":188,"line":18244},[186,67164,12684],{"class":669},[186,67166,67167],{"class":206}," checkAll",[186,67169,15027],{"class":669},[186,67171,55841],{"class":202},[186,67173,55844],{"class":198},[186,67175,832],{"class":202},[186,67177,67178],{"class":532},"'#checkAll'",[186,67180,1629],{"class":202},[186,67182,67183],{"class":188,"line":18257},[186,67184,67185],{"class":192},"    \u002F\u002F 2. 获取所有的小复选框\n",[186,67187,67188,67190,67193,67195,67197,67199,67201,67204],{"class":188,"line":18262},[186,67189,12684],{"class":669},[186,67191,67192],{"class":206}," cks",[186,67194,15027],{"class":669},[186,67196,55841],{"class":202},[186,67198,57122],{"class":198},[186,67200,832],{"class":202},[186,67202,67203],{"class":532},"'.ck'",[186,67205,1629],{"class":202},[186,67207,67208],{"class":188,"line":18276},[186,67209,67210],{"class":192},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[186,67212,67213,67216,67218,67220,67222,67224,67226],{"class":188,"line":18281},[186,67214,67215],{"class":202},"    checkAll.",[186,67217,59254],{"class":198},[186,67219,832],{"class":202},[186,67221,59259],{"class":532},[186,67223,13898],{"class":202},[186,67225,55894],{"class":669},[186,67227,55897],{"class":202},[186,67229,67230],{"class":188,"line":18287},[186,67231,67232],{"class":192},"      \u002F\u002F 得到当前大复选框的选中状态\n",[186,67234,67235,67238],{"class":188,"line":18292},[186,67236,67237],{"class":192},"      \u002F\u002F console.log(checkAll.checked)",[186,67239,67240],{"class":192},"  \u002F\u002F 得到 是 true 或者是 false\n",[186,67242,67243],{"class":188,"line":18306},[186,67244,67245],{"class":192},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[186,67247,67248,67250,67252,67254,67256,67258,67260,67262,67264,67267,67269,67271,67273],{"class":188,"line":18311},[186,67249,53731],{"class":669},[186,67251,3126],{"class":202},[186,67253,53294],{"class":669},[186,67255,10901],{"class":202},[186,67257,529],{"class":669},[186,67259,5559],{"class":206},[186,67261,10908],{"class":202},[186,67263,520],{"class":669},[186,67265,67266],{"class":202}," cks.",[186,67268,53415],{"class":206},[186,67270,4680],{"class":202},[186,67272,3759],{"class":669},[186,67274,13905],{"class":202},[186,67276,67277,67280,67282,67285],{"class":188,"line":18316},[186,67278,67279],{"class":202},"        cks[i].checked ",[186,67281,529],{"class":669},[186,67283,67284],{"class":206}," this",[186,67286,67287],{"class":202},".checked\n",[186,67289,67290],{"class":188,"line":18330},[186,67291,53845],{"class":202},[186,67293,67294],{"class":188,"line":18342},[186,67295,34916],{"class":202},[186,67297,67298],{"class":188,"line":18347},[186,67299,67300],{"class":192},"    \u002F\u002F 5. 小复选框控制大复选框\n",[186,67302,67303],{"class":188,"line":18360},[186,67304,3867],{"emptyLinePlaceholder":1551},[186,67306,67307,67309,67311,67313,67315,67317,67319,67321,67323,67325,67327,67329,67331],{"class":188,"line":18365},[186,67308,4667],{"class":669},[186,67310,3126],{"class":202},[186,67312,53294],{"class":669},[186,67314,10901],{"class":202},[186,67316,529],{"class":669},[186,67318,5559],{"class":206},[186,67320,10908],{"class":202},[186,67322,520],{"class":669},[186,67324,67266],{"class":202},[186,67326,53415],{"class":206},[186,67328,4680],{"class":202},[186,67330,3759],{"class":669},[186,67332,13905],{"class":202},[186,67334,67335],{"class":188,"line":18370},[186,67336,67337],{"class":192},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[186,67339,67340,67343,67345,67347,67349,67351,67353],{"class":188,"line":18375},[186,67341,67342],{"class":202},"      cks[i].",[186,67344,59254],{"class":198},[186,67346,832],{"class":202},[186,67348,59259],{"class":532},[186,67350,13898],{"class":202},[186,67352,55894],{"class":669},[186,67354,55897],{"class":202},[186,67356,67357],{"class":188,"line":18388},[186,67358,67359],{"class":192},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[186,67361,67362],{"class":188,"line":18393},[186,67363,67364],{"class":192},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[186,67366,67367],{"class":188,"line":34088},[186,67368,67369],{"class":192},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[186,67371,67372],{"class":188,"line":34094},[186,67373,67374],{"class":192},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[186,67376,67377,67380,67382,67384,67386,67388,67391,67393,67395,67397,67399],{"class":188,"line":34100},[186,67378,67379],{"class":202},"        checkAll.checked ",[186,67381,529],{"class":669},[186,67383,55841],{"class":202},[186,67385,57122],{"class":198},[186,67387,832],{"class":202},[186,67389,67390],{"class":532},"'.ck:checked'",[186,67392,32281],{"class":202},[186,67394,53415],{"class":206},[186,67396,59347],{"class":669},[186,67398,67266],{"class":202},[186,67400,57272],{"class":206},[186,67402,67403],{"class":188,"line":34106},[186,67404,66252],{"class":202},[186,67406,67407],{"class":188,"line":34112},[186,67408,3654],{"class":202},[186,67410,67411,67413,67415],{"class":188,"line":34123},[186,67412,53864],{"class":202},[186,67414,53260],{"class":523},[186,67416,552],{"class":202},[186,67418,67419,67421,67423],{"class":188,"line":34129},[186,67420,1470],{"class":202},[186,67422,53247],{"class":523},[186,67424,552],{"class":202},[186,67426,67427],{"class":188,"line":34149},[186,67428,3867],{"emptyLinePlaceholder":1551},[186,67430,67431,67433,67435],{"class":188,"line":34155},[186,67432,1470],{"class":202},[186,67434,52089],{"class":523},[186,67436,552],{"class":202},[169,67438,67439],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[169,67441,67442],{},"用好之间比较得到的布尔值！！！",[169,67444,67445,67446,67449,67450,3126,67453,2194,67455,67458],{},"在 JS 里访问的时候，",[183,67447,67448],{},"checkbox.checked"," 是一个 ",[54,67451,67452],{},"布尔值",[183,67454,2835],{},[183,67456,67457],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[169,67460,67461,67462,67465,67466],{},"HTML 的 ",[183,67463,67464],{},"checked=\"checked\""," 只是 ",[54,67467,67468,67469,67472],{},"初始值；JS 的 ",[183,67470,67471],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[169,67474,67475],{},"：checked是一个伪类选择器",[169,67477,67478],{},[164,67479],{"alt":181,"src":67480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[169,67482,67483,67486],{},[67484,67485],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[169,67488,67489],{},[164,67490],{"alt":181,"src":67491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67493,67495],{"id":67494},"_33-dom事件进阶","3.3 DOM事件进阶",[29,67497,67499],{"id":67498},"_331-事件流","3.3.1 事件流",[169,67501,67502],{},[164,67503],{"alt":181,"src":67504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23459,67506,67508],{"id":67507},"_3311-事件捕获","3.3.1.1 事件捕获",[169,67510,67511],{},[164,67512],{"alt":181,"src":67513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[176,67515,67517],{"className":52087,"code":67516,"language":52089,"meta":181,"style":181},"\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",[183,67518,67519,67529,67543,67547,67555,67569,67589,67601,67609,67616,67628,67640,67650,67654,67658,67665,67677,67689,67699,67703,67711,67719,67723,67731,67746,67765,67773,67781,67801,67821,67837,67848,67856,67873,67884,67892,67909,67920,67928,67936,67944,67948],{"__ignoreMap":181},[186,67520,67521,67523,67525,67527],{"class":188,"line":189},[186,67522,52751],{"class":202},[186,67524,52754],{"class":523},[186,67526,52757],{"class":198},[186,67528,552],{"class":202},[186,67530,67531,67533,67535,67537,67539,67541],{"class":188,"line":49},[186,67532,520],{"class":202},[186,67534,52089],{"class":523},[186,67536,52768],{"class":198},[186,67538,529],{"class":202},[186,67540,52773],{"class":532},[186,67542,552],{"class":202},[186,67544,67545],{"class":188,"line":219},[186,67546,3867],{"emptyLinePlaceholder":1551},[186,67548,67549,67551,67553],{"class":188,"line":225},[186,67550,520],{"class":202},[186,67552,52786],{"class":523},[186,67554,552],{"class":202},[186,67556,67557,67559,67561,67563,67565,67567],{"class":188,"line":242},[186,67558,53591],{"class":202},[186,67560,52796],{"class":523},[186,67562,52799],{"class":198},[186,67564,529],{"class":202},[186,67566,52804],{"class":532},[186,67568,552],{"class":202},[186,67570,67571,67573,67575,67577,67579,67581,67583,67585,67587],{"class":188,"line":248},[186,67572,53591],{"class":202},[186,67574,52796],{"class":523},[186,67576,16382],{"class":198},[186,67578,529],{"class":202},[186,67580,52843],{"class":532},[186,67582,52823],{"class":198},[186,67584,529],{"class":202},[186,67586,52850],{"class":532},[186,67588,552],{"class":202},[186,67590,67591,67593,67595,67597,67599],{"class":188,"line":265},[186,67592,53591],{"class":202},[186,67594,52859],{"class":523},[186,67596,52862],{"class":202},[186,67598,52859],{"class":523},[186,67600,552],{"class":202},[186,67602,67603,67605,67607],{"class":188,"line":271},[186,67604,53591],{"class":202},[186,67606,1524],{"class":523},[186,67608,552],{"class":202},[186,67610,67611,67614],{"class":188,"line":288},[186,67612,67613],{"class":198},"    .father",[186,67615,622],{"class":202},[186,67617,67618,67620,67622,67624,67626],{"class":188,"line":294},[186,67619,56215],{"class":206},[186,67621,210],{"class":202},[186,67623,66511],{"class":206},[186,67625,804],{"class":669},[186,67627,634],{"class":202},[186,67629,67630,67632,67634,67636,67638],{"class":188,"line":1212},[186,67631,56229],{"class":206},[186,67633,210],{"class":202},[186,67635,66511],{"class":206},[186,67637,804],{"class":669},[186,67639,634],{"class":202},[186,67641,67642,67644,67646,67648],{"class":188,"line":1223},[186,67643,56327],{"class":206},[186,67645,210],{"class":202},[186,67647,53094],{"class":206},[186,67649,634],{"class":202},[186,67651,67652],{"class":188,"line":1236},[186,67653,3654],{"class":202},[186,67655,67656],{"class":188,"line":3096},[186,67657,3867],{"emptyLinePlaceholder":1551},[186,67659,67660,67663],{"class":188,"line":3110},[186,67661,67662],{"class":198},"    .son",[186,67664,622],{"class":202},[186,67666,67667,67669,67671,67673,67675],{"class":188,"line":3115},[186,67668,56215],{"class":206},[186,67670,210],{"class":202},[186,67672,3190],{"class":206},[186,67674,804],{"class":669},[186,67676,634],{"class":202},[186,67678,67679,67681,67683,67685,67687],{"class":188,"line":3121},[186,67680,56229],{"class":206},[186,67682,210],{"class":202},[186,67684,3190],{"class":206},[186,67686,804],{"class":669},[186,67688,634],{"class":202},[186,67690,67691,67693,67695,67697],{"class":188,"line":3142},[186,67692,56327],{"class":206},[186,67694,210],{"class":202},[186,67696,56332],{"class":206},[186,67698,634],{"class":202},[186,67700,67701],{"class":188,"line":3147},[186,67702,3654],{"class":202},[186,67704,67705,67707,67709],{"class":188,"line":3161},[186,67706,53864],{"class":202},[186,67708,1524],{"class":523},[186,67710,552],{"class":202},[186,67712,67713,67715,67717],{"class":188,"line":3166},[186,67714,1470],{"class":202},[186,67716,52786],{"class":523},[186,67718,552],{"class":202},[186,67720,67721],{"class":188,"line":3195},[186,67722,3867],{"emptyLinePlaceholder":1551},[186,67724,67725,67727,67729],{"class":188,"line":3200},[186,67726,520],{"class":202},[186,67728,53247],{"class":523},[186,67730,552],{"class":202},[186,67732,67733,67735,67737,67739,67741,67744],{"class":188,"line":3217},[186,67734,53591],{"class":202},[186,67736,1450],{"class":523},[186,67738,1453],{"class":198},[186,67740,529],{"class":202},[186,67742,67743],{"class":532},"\"father\"",[186,67745,552],{"class":202},[186,67747,67748,67750,67752,67754,67756,67759,67761,67763],{"class":188,"line":3222},[186,67749,52793],{"class":202},[186,67751,1450],{"class":523},[186,67753,1453],{"class":198},[186,67755,529],{"class":202},[186,67757,67758],{"class":532},"\"son\"",[186,67760,56755],{"class":202},[186,67762,1450],{"class":523},[186,67764,552],{"class":202},[186,67766,67767,67769,67771],{"class":188,"line":3227},[186,67768,53864],{"class":202},[186,67770,1450],{"class":523},[186,67772,552],{"class":202},[186,67774,67775,67777,67779],{"class":188,"line":3232},[186,67776,53591],{"class":202},[186,67778,53260],{"class":523},[186,67780,552],{"class":202},[186,67782,67783,67785,67788,67790,67792,67794,67796,67799],{"class":188,"line":3246},[186,67784,12684],{"class":669},[186,67786,67787],{"class":206}," fa",[186,67789,15027],{"class":669},[186,67791,55841],{"class":202},[186,67793,55844],{"class":198},[186,67795,832],{"class":202},[186,67797,67798],{"class":532},"'.father'",[186,67800,1629],{"class":202},[186,67802,67803,67805,67808,67810,67812,67814,67816,67819],{"class":188,"line":3251},[186,67804,12684],{"class":669},[186,67806,67807],{"class":206}," son",[186,67809,15027],{"class":669},[186,67811,55841],{"class":202},[186,67813,55844],{"class":198},[186,67815,832],{"class":202},[186,67817,67818],{"class":532},"'.son'",[186,67820,1629],{"class":202},[186,67822,67823,67825,67827,67829,67831,67833,67835],{"class":188,"line":4044},[186,67824,53854],{"class":202},[186,67826,59254],{"class":198},[186,67828,832],{"class":202},[186,67830,59259],{"class":532},[186,67832,13898],{"class":202},[186,67834,55894],{"class":669},[186,67836,55897],{"class":202},[186,67838,67839,67841,67843,67846],{"class":188,"line":4058},[186,67840,60366],{"class":198},[186,67842,832],{"class":202},[186,67844,67845],{"class":532},"'woshiu1'",[186,67847,1629],{"class":202},[186,67849,67850,67852,67854],{"class":188,"line":4066},[186,67851,55980],{"class":202},[186,67853,2835],{"class":206},[186,67855,1629],{"class":202},[186,67857,67858,67861,67863,67865,67867,67869,67871],{"class":188,"line":4071},[186,67859,67860],{"class":202},"    fa.",[186,67862,59254],{"class":198},[186,67864,832],{"class":202},[186,67866,59259],{"class":532},[186,67868,13898],{"class":202},[186,67870,55894],{"class":669},[186,67872,55897],{"class":202},[186,67874,67875,67877,67879,67882],{"class":188,"line":4077},[186,67876,60366],{"class":198},[186,67878,832],{"class":202},[186,67880,67881],{"class":532},"'1'",[186,67883,1629],{"class":202},[186,67885,67886,67888,67890],{"class":188,"line":4083},[186,67887,55980],{"class":202},[186,67889,2835],{"class":206},[186,67891,1629],{"class":202},[186,67893,67894,67897,67899,67901,67903,67905,67907],{"class":188,"line":4088},[186,67895,67896],{"class":202},"    son.",[186,67898,59254],{"class":198},[186,67900,832],{"class":202},[186,67902,59259],{"class":532},[186,67904,13898],{"class":202},[186,67906,55894],{"class":669},[186,67908,55897],{"class":202},[186,67910,67911,67913,67915,67918],{"class":188,"line":9411},[186,67912,60366],{"class":198},[186,67914,832],{"class":202},[186,67916,67917],{"class":532},"'2'",[186,67919,1629],{"class":202},[186,67921,67922,67924,67926],{"class":188,"line":9435},[186,67923,55980],{"class":202},[186,67925,2835],{"class":206},[186,67927,1629],{"class":202},[186,67929,67930,67932,67934],{"class":188,"line":9440},[186,67931,53864],{"class":202},[186,67933,53260],{"class":523},[186,67935,552],{"class":202},[186,67937,67938,67940,67942],{"class":188,"line":9446},[186,67939,1470],{"class":202},[186,67941,53247],{"class":523},[186,67943,552],{"class":202},[186,67945,67946],{"class":188,"line":9473},[186,67947,3867],{"emptyLinePlaceholder":1551},[186,67949,67950,67952,67954],{"class":188,"line":9478},[186,67951,1470],{"class":202},[186,67953,52089],{"class":523},[186,67955,552],{"class":202},[169,67957,67958],{},[164,67959],{"alt":181,"src":67960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[169,67962,67963],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23459,67965,67967],{"id":67966},"_3312-事件冒泡","3.3.1.2 事件冒泡",[169,67969,67970],{},[164,67971],{"alt":181,"src":67972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[169,67974,67975],{},"反着来",[169,67977,67978],{},"注意是同名事件，比如都是‘click’",[23459,67980,67982],{"id":67981},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[169,67984,67985],{},[164,67986],{"alt":181,"src":67987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23459,67989,67991],{"id":67990},"_3314-解绑事件","3.3.1.4 解绑事件",[169,67993,67994],{},[164,67995],{"alt":181,"src":67996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[169,67998,67999],{},[164,68000],{"alt":181,"src":68001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23459,68003,68005],{"id":68004},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[34,68007,68008],{},[22,68009,68010],{},"事件类型的区别",[169,68012,68013],{},[164,68014],{"alt":181,"src":68015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[169,68017,68018],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[34,68020,68021],{"start":49},[22,68022,68023],{},"注册事件的区别",[169,68025,68026],{},[164,68027],{"alt":181,"src":68028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23459,68030,68032],{"id":68031},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[169,68034,68035],{},[164,68036],{"alt":181,"src":68037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[169,68039,68040],{},[164,68041],{"alt":181,"src":68042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[176,68044,68046],{"className":54514,"code":68045,"language":54516,"meta":181,"style":181},"\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",[183,68047,68048,68056,68073,68096,68104,68109,68114,68119,68123,68131,68139],{"__ignoreMap":181},[186,68049,68050,68052,68054],{"class":188,"line":189},[186,68051,520],{"class":202},[186,68053,53247],{"class":523},[186,68055,552],{"class":202},[186,68057,68058,68060,68063,68066,68068,68071],{"class":188,"line":49},[186,68059,53591],{"class":202},[186,68061,68062],{"class":523},"form",[186,68064,68065],{"class":198}," action",[186,68067,529],{"class":202},[186,68069,68070],{"class":532},"\"http:\u002F\u002Fwww.itcast.cn\"",[186,68072,552],{"class":202},[186,68074,68075,68077,68079,68081,68083,68086,68089,68091,68094],{"class":188,"line":219},[186,68076,52793],{"class":202},[186,68078,55266],{"class":523},[186,68080,55269],{"class":198},[186,68082,529],{"class":202},[186,68084,68085],{"class":532},"\"submit\"",[186,68087,68088],{"class":198}," value",[186,68090,529],{"class":202},[186,68092,68093],{"class":532},"\"免费注册\"",[186,68095,552],{"class":202},[186,68097,68098,68100,68102],{"class":188,"line":225},[186,68099,52793],{"class":202},[186,68101,53260],{"class":523},[186,68103,552],{"class":202},[186,68105,68106],{"class":188,"line":242},[186,68107,68108],{"class":202},"      const form = document.querySelector('form')\n",[186,68110,68111],{"class":188,"line":248},[186,68112,68113],{"class":202},"      form.addEventListener('submit', function (e) {\n",[186,68115,68116],{"class":188,"line":265},[186,68117,68118],{"class":202},"        e.preventDefault()\n",[186,68120,68121],{"class":188,"line":271},[186,68122,66252],{"class":202},[186,68124,68125,68127,68129],{"class":188,"line":288},[186,68126,53224],{"class":202},[186,68128,53260],{"class":523},[186,68130,552],{"class":202},[186,68132,68133,68135,68137],{"class":188,"line":294},[186,68134,53864],{"class":202},[186,68136,68062],{"class":523},[186,68138,552],{"class":202},[186,68140,68141,68143,68145],{"class":188,"line":1212},[186,68142,1470],{"class":202},[186,68144,53247],{"class":523},[186,68146,552],{"class":202},[169,68148,68149],{},"点击不在跳转！！！",[29,68151,68153],{"id":68152},"_332-事件委托","3.3.2 事件委托",[169,68155,68156],{},[164,68157],{"alt":181,"src":68158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[176,68160,68162],{"className":52087,"code":68161,"language":52089,"meta":181,"style":181},"\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",[183,68163,68164,68174,68188,68192,68200,68214,68234,68246,68254,68258,68266,68274,68286,68298,68310,68322,68334,68347,68355,68363,68368,68387,68408,68413,68418,68423,68428,68437,68441,68451,68455,68460,68465,68479,68489,68493,68497,68505,68513,68517],{"__ignoreMap":181},[186,68165,68166,68168,68170,68172],{"class":188,"line":189},[186,68167,52751],{"class":202},[186,68169,52754],{"class":523},[186,68171,52757],{"class":198},[186,68173,552],{"class":202},[186,68175,68176,68178,68180,68182,68184,68186],{"class":188,"line":49},[186,68177,520],{"class":202},[186,68179,52089],{"class":523},[186,68181,52768],{"class":198},[186,68183,529],{"class":202},[186,68185,52773],{"class":532},[186,68187,552],{"class":202},[186,68189,68190],{"class":188,"line":219},[186,68191,3867],{"emptyLinePlaceholder":1551},[186,68193,68194,68196,68198],{"class":188,"line":225},[186,68195,520],{"class":202},[186,68197,52786],{"class":523},[186,68199,552],{"class":202},[186,68201,68202,68204,68206,68208,68210,68212],{"class":188,"line":242},[186,68203,53591],{"class":202},[186,68205,52796],{"class":523},[186,68207,52799],{"class":198},[186,68209,529],{"class":202},[186,68211,52804],{"class":532},[186,68213,552],{"class":202},[186,68215,68216,68218,68220,68222,68224,68226,68228,68230,68232],{"class":188,"line":248},[186,68217,53591],{"class":202},[186,68219,52796],{"class":523},[186,68221,16382],{"class":198},[186,68223,529],{"class":202},[186,68225,52843],{"class":532},[186,68227,52823],{"class":198},[186,68229,529],{"class":202},[186,68231,52850],{"class":532},[186,68233,552],{"class":202},[186,68235,68236,68238,68240,68242,68244],{"class":188,"line":265},[186,68237,53591],{"class":202},[186,68239,52859],{"class":523},[186,68241,52862],{"class":202},[186,68243,52859],{"class":523},[186,68245,552],{"class":202},[186,68247,68248,68250,68252],{"class":188,"line":271},[186,68249,1470],{"class":202},[186,68251,52786],{"class":523},[186,68253,552],{"class":202},[186,68255,68256],{"class":188,"line":288},[186,68257,3867],{"emptyLinePlaceholder":1551},[186,68259,68260,68262,68264],{"class":188,"line":294},[186,68261,520],{"class":202},[186,68263,53247],{"class":523},[186,68265,552],{"class":202},[186,68267,68268,68270,68272],{"class":188,"line":1212},[186,68269,53591],{"class":202},[186,68271,19],{"class":523},[186,68273,552],{"class":202},[186,68275,68276,68278,68280,68282,68284],{"class":188,"line":1223},[186,68277,52793],{"class":202},[186,68279,22],{"class":523},[186,68281,55411],{"class":202},[186,68283,22],{"class":523},[186,68285,552],{"class":202},[186,68287,68288,68290,68292,68294,68296],{"class":188,"line":1236},[186,68289,52793],{"class":202},[186,68291,22],{"class":523},[186,68293,55430],{"class":202},[186,68295,22],{"class":523},[186,68297,552],{"class":202},[186,68299,68300,68302,68304,68306,68308],{"class":188,"line":3096},[186,68301,52793],{"class":202},[186,68303,22],{"class":523},[186,68305,55449],{"class":202},[186,68307,22],{"class":523},[186,68309,552],{"class":202},[186,68311,68312,68314,68316,68318,68320],{"class":188,"line":3110},[186,68313,52793],{"class":202},[186,68315,22],{"class":523},[186,68317,55468],{"class":202},[186,68319,22],{"class":523},[186,68321,552],{"class":202},[186,68323,68324,68326,68328,68330,68332],{"class":188,"line":3115},[186,68325,52793],{"class":202},[186,68327,22],{"class":523},[186,68329,55487],{"class":202},[186,68331,22],{"class":523},[186,68333,552],{"class":202},[186,68335,68336,68338,68340,68343,68345],{"class":188,"line":3121},[186,68337,52793],{"class":202},[186,68339,169],{"class":523},[186,68341,68342],{"class":202},">我不需要变色\u003C\u002F",[186,68344,169],{"class":523},[186,68346,552],{"class":202},[186,68348,68349,68351,68353],{"class":188,"line":3142},[186,68350,53864],{"class":202},[186,68352,19],{"class":523},[186,68354,552],{"class":202},[186,68356,68357,68359,68361],{"class":188,"line":3147},[186,68358,53591],{"class":202},[186,68360,53260],{"class":523},[186,68362,552],{"class":202},[186,68364,68365],{"class":188,"line":3161},[186,68366,68367],{"class":192},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[186,68369,68370,68372,68374,68376,68378,68380,68382,68385],{"class":188,"line":3166},[186,68371,12684],{"class":669},[186,68373,62733],{"class":206},[186,68375,15027],{"class":669},[186,68377,55841],{"class":202},[186,68379,55844],{"class":198},[186,68381,832],{"class":202},[186,68383,68384],{"class":532},"'ul'",[186,68386,1629],{"class":202},[186,68388,68389,68392,68394,68396,68398,68400,68402,68404,68406],{"class":188,"line":3195},[186,68390,68391],{"class":202},"    ul.",[186,68393,59254],{"class":198},[186,68395,832],{"class":202},[186,68397,59259],{"class":532},[186,68399,13898],{"class":202},[186,68401,55894],{"class":669},[186,68403,3126],{"class":202},[186,68405,1694],{"class":835},[186,68407,13905],{"class":202},[186,68409,68410],{"class":188,"line":3200},[186,68411,68412],{"class":192},"      \u002F\u002F alert(1)\n",[186,68414,68415],{"class":188,"line":3217},[186,68416,68417],{"class":192},"      \u002F\u002F e.target就是我们点击的对象\n",[186,68419,68420],{"class":188,"line":3222},[186,68421,68422],{"class":192},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[186,68424,68425],{"class":188,"line":3227},[186,68426,68427],{"class":192},"      \u002F\u002F e.target.style.color = 'red'\n",[186,68429,68430,68432,68434],{"class":188,"line":3232},[186,68431,59685],{"class":202},[186,68433,59688],{"class":198},[186,68435,68436],{"class":202},"(e)\n",[186,68438,68439],{"class":188,"line":3246},[186,68440,3867],{"emptyLinePlaceholder":1551},[186,68442,68443,68445,68448],{"class":188,"line":3251},[186,68444,59685],{"class":202},[186,68446,68447],{"class":198},"dir",[186,68449,68450],{"class":202},"(e.target)\n",[186,68452,68453],{"class":188,"line":4044},[186,68454,3867],{"emptyLinePlaceholder":1551},[186,68456,68457],{"class":188,"line":4058},[186,68458,68459],{"class":192},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[186,68461,68462],{"class":188,"line":4066},[186,68463,68464],{"class":192},"      \u002F\u002F 通过tagName来进行判断\n",[186,68466,68467,68469,68472,68474,68477],{"class":188,"line":4071},[186,68468,55925],{"class":669},[186,68470,68471],{"class":202}," (e.target.tagName ",[186,68473,55931],{"class":669},[186,68475,68476],{"class":532}," 'LI'",[186,68478,13905],{"class":202},[186,68480,68481,68484,68486],{"class":188,"line":4077},[186,68482,68483],{"class":202},"        e.target.style.color ",[186,68485,529],{"class":669},[186,68487,68488],{"class":532}," 'red'\n",[186,68490,68491],{"class":188,"line":4083},[186,68492,53845],{"class":202},[186,68494,68495],{"class":188,"line":4088},[186,68496,34916],{"class":202},[186,68498,68499,68501,68503],{"class":188,"line":9411},[186,68500,53864],{"class":202},[186,68502,53260],{"class":523},[186,68504,552],{"class":202},[186,68506,68507,68509,68511],{"class":188,"line":9435},[186,68508,1470],{"class":202},[186,68510,53247],{"class":523},[186,68512,552],{"class":202},[186,68514,68515],{"class":188,"line":9440},[186,68516,3867],{"emptyLinePlaceholder":1551},[186,68518,68519,68521,68523],{"class":188,"line":9446},[186,68520,1470],{"class":202},[186,68522,52089],{"class":523},[186,68524,552],{"class":202},[169,68526,68527],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[169,68529,68530],{},"if(e.target.ragName==='P') {}",[169,68532,68533],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[169,68535,68536],{},"通过事件委托的方式实现tab栏切换改造：",[169,68538,68539],{},"一定要记住自定义属性！！！！！！",[169,68541,68542],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[169,68544,68545],{},"id是自定义的属性名",[169,68547,68548],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[176,68550,68552],{"className":52087,"code":68551,"language":52089,"meta":181,"style":181},"\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",[183,68553,68554,68564,68578,68582,68590,68604,68624,68644,68656,68664,68670,68680,68690,68694,68698,68704,68716,68728,68740,68756,68760,68764,68770,68782,68794,68806,68816,68826,68830,68834,68842,68854,68864,68876,68880,68884,68892,68902,68912,68922,68926,68930,68940,68954,68966,68970,68974,68986,68996,69012,69022,69026,69030,69044,69054,69064,69068,69072,69078,69092,69096,69100,69108,69118,69122,69126,69135,69145,69149,69157,69165,69169,69177,69191,69205,69217,69225,69264,69296,69328,69360,69392,69400,69408,69422,69456,69490,69524,69558,69592,69600,69608,69616,69621,69626,69645,69650,69670,69678,69683,69696,69717,69730,69734,69739,69744,69757,69777,69805,69809,69813,69817,69825,69833,69837],{"__ignoreMap":181},[186,68555,68556,68558,68560,68562],{"class":188,"line":189},[186,68557,52751],{"class":202},[186,68559,52754],{"class":523},[186,68561,52757],{"class":198},[186,68563,552],{"class":202},[186,68565,68566,68568,68570,68572,68574,68576],{"class":188,"line":49},[186,68567,520],{"class":202},[186,68569,52089],{"class":523},[186,68571,52768],{"class":198},[186,68573,529],{"class":202},[186,68575,52773],{"class":532},[186,68577,552],{"class":202},[186,68579,68580],{"class":188,"line":219},[186,68581,3867],{"emptyLinePlaceholder":1551},[186,68583,68584,68586,68588],{"class":188,"line":225},[186,68585,520],{"class":202},[186,68587,52786],{"class":523},[186,68589,552],{"class":202},[186,68591,68592,68594,68596,68598,68600,68602],{"class":188,"line":242},[186,68593,53591],{"class":202},[186,68595,52796],{"class":523},[186,68597,52799],{"class":198},[186,68599,529],{"class":202},[186,68601,52804],{"class":532},[186,68603,60568],{"class":202},[186,68605,68606,68608,68610,68612,68614,68616,68618,68620,68622],{"class":188,"line":248},[186,68607,53591],{"class":202},[186,68609,52796],{"class":523},[186,68611,52815],{"class":198},[186,68613,529],{"class":202},[186,68615,52820],{"class":532},[186,68617,52823],{"class":198},[186,68619,529],{"class":202},[186,68621,52828],{"class":532},[186,68623,60568],{"class":202},[186,68625,68626,68628,68630,68632,68634,68636,68638,68640,68642],{"class":188,"line":265},[186,68627,53591],{"class":202},[186,68629,52796],{"class":523},[186,68631,16382],{"class":198},[186,68633,529],{"class":202},[186,68635,52843],{"class":532},[186,68637,52823],{"class":198},[186,68639,529],{"class":202},[186,68641,52850],{"class":532},[186,68643,60568],{"class":202},[186,68645,68646,68648,68650,68652,68654],{"class":188,"line":271},[186,68647,53591],{"class":202},[186,68649,52859],{"class":523},[186,68651,65063],{"class":202},[186,68653,52859],{"class":523},[186,68655,552],{"class":202},[186,68657,68658,68660,68662],{"class":188,"line":288},[186,68659,53591],{"class":202},[186,68661,1524],{"class":523},[186,68663,552],{"class":202},[186,68665,68666,68668],{"class":188,"line":294},[186,68667,7866],{"class":523},[186,68669,622],{"class":202},[186,68671,68672,68674,68676,68678],{"class":188,"line":1212},[186,68673,56151],{"class":206},[186,68675,210],{"class":202},[186,68677,1803],{"class":206},[186,68679,634],{"class":202},[186,68681,68682,68684,68686,68688],{"class":188,"line":1223},[186,68683,56140],{"class":206},[186,68685,210],{"class":202},[186,68687,1803],{"class":206},[186,68689,634],{"class":202},[186,68691,68692],{"class":188,"line":1236},[186,68693,3654],{"class":202},[186,68695,68696],{"class":188,"line":3096},[186,68697,3867],{"emptyLinePlaceholder":1551},[186,68699,68700,68702],{"class":188,"line":3110},[186,68701,65114],{"class":198},[186,68703,622],{"class":202},[186,68705,68706,68708,68710,68712,68714],{"class":188,"line":3115},[186,68707,56215],{"class":206},[186,68709,210],{"class":202},[186,68711,65125],{"class":206},[186,68713,804],{"class":669},[186,68715,634],{"class":202},[186,68717,68718,68720,68722,68724,68726],{"class":188,"line":3121},[186,68719,56229],{"class":206},[186,68721,210],{"class":202},[186,68723,65138],{"class":206},[186,68725,804],{"class":669},[186,68727,634],{"class":202},[186,68729,68730,68732,68734,68736,68738],{"class":188,"line":3142},[186,68731,56151],{"class":206},[186,68733,210],{"class":202},[186,68735,801],{"class":206},[186,68737,804],{"class":669},[186,68739,634],{"class":202},[186,68741,68742,68744,68746,68748,68750,68752,68754],{"class":188,"line":3147},[186,68743,63415],{"class":206},[186,68745,210],{"class":202},[186,68747,1829],{"class":206},[186,68749,804],{"class":669},[186,68751,52971],{"class":206},[186,68753,63682],{"class":206},[186,68755,634],{"class":202},[186,68757,68758],{"class":188,"line":3161},[186,68759,3654],{"class":202},[186,68761,68762],{"class":188,"line":3166},[186,68763,3867],{"emptyLinePlaceholder":1551},[186,68765,68766,68768],{"class":188,"line":3195},[186,68767,65183],{"class":198},[186,68769,622],{"class":202},[186,68771,68772,68774,68776,68778,68780],{"class":188,"line":3200},[186,68773,56215],{"class":206},[186,68775,210],{"class":202},[186,68777,1922],{"class":206},[186,68779,670],{"class":669},[186,68781,634],{"class":202},[186,68783,68784,68786,68788,68790,68792],{"class":188,"line":3217},[186,68785,56229],{"class":206},[186,68787,210],{"class":202},[186,68789,2515],{"class":206},[186,68791,804],{"class":669},[186,68793,634],{"class":202},[186,68795,68796,68798,68800,68802,68804],{"class":188,"line":3222},[186,68797,58800],{"class":206},[186,68799,210],{"class":202},[186,68801,2515],{"class":206},[186,68803,804],{"class":669},[186,68805,634],{"class":202},[186,68807,68808,68810,68812,68814],{"class":188,"line":3227},[186,68809,56452],{"class":206},[186,68811,210],{"class":202},[186,68813,52928],{"class":206},[186,68815,634],{"class":202},[186,68817,68818,68820,68822,68824],{"class":188,"line":3232},[186,68819,56463],{"class":206},[186,68821,210],{"class":202},[186,68823,53117],{"class":206},[186,68825,634],{"class":202},[186,68827,68828],{"class":188,"line":3246},[186,68829,3654],{"class":202},[186,68831,68832],{"class":188,"line":3251},[186,68833,3867],{"emptyLinePlaceholder":1551},[186,68835,68836,68838,68840],{"class":188,"line":4044},[186,68837,65183],{"class":198},[186,68839,65256],{"class":523},[186,68841,622],{"class":202},[186,68843,68844,68846,68848,68850,68852],{"class":188,"line":4058},[186,68845,56365],{"class":206},[186,68847,210],{"class":202},[186,68849,2408],{"class":206},[186,68851,804],{"class":669},[186,68853,634],{"class":202},[186,68855,68856,68858,68860,68862],{"class":188,"line":4066},[186,68857,63772],{"class":206},[186,68859,210],{"class":202},[186,68861,1231],{"class":206},[186,68863,634],{"class":202},[186,68865,68866,68868,68870,68872,68874],{"class":188,"line":4071},[186,68867,63438],{"class":206},[186,68869,210],{"class":202},[186,68871,801],{"class":206},[186,68873,804],{"class":669},[186,68875,634],{"class":202},[186,68877,68878],{"class":188,"line":4077},[186,68879,3654],{"class":202},[186,68881,68882],{"class":188,"line":4083},[186,68883,3867],{"emptyLinePlaceholder":1551},[186,68885,68886,68888,68890],{"class":188,"line":4088},[186,68887,65183],{"class":198},[186,68889,62733],{"class":523},[186,68891,622],{"class":202},[186,68893,68894,68896,68898,68900],{"class":188,"line":9411},[186,68895,56177],{"class":206},[186,68897,210],{"class":202},[186,68899,56182],{"class":206},[186,68901,634],{"class":202},[186,68903,68904,68906,68908,68910],{"class":188,"line":9435},[186,68905,56452],{"class":206},[186,68907,210],{"class":202},[186,68909,52928],{"class":206},[186,68911,634],{"class":202},[186,68913,68914,68916,68918,68920],{"class":188,"line":9440},[186,68915,56463],{"class":206},[186,68917,210],{"class":202},[186,68919,53030],{"class":206},[186,68921,634],{"class":202},[186,68923,68924],{"class":188,"line":9446},[186,68925,3654],{"class":202},[186,68927,68928],{"class":188,"line":9473},[186,68929,3867],{"emptyLinePlaceholder":1551},[186,68931,68932,68934,68936,68938],{"class":188,"line":9478},[186,68933,65183],{"class":198},[186,68935,62733],{"class":523},[186,68937,56518],{"class":523},[186,68939,622],{"class":202},[186,68941,68942,68944,68946,68948,68950,68952],{"class":188,"line":9484},[186,68943,56151],{"class":206},[186,68945,210],{"class":202},[186,68947,1803],{"class":206},[186,68949,10413],{"class":206},[186,68951,804],{"class":669},[186,68953,634],{"class":202},[186,68955,68956,68958,68960,68962,68964],{"class":188,"line":9496},[186,68957,56365],{"class":206},[186,68959,210],{"class":202},[186,68961,2159],{"class":206},[186,68963,804],{"class":669},[186,68965,634],{"class":202},[186,68967,68968],{"class":188,"line":9508},[186,68969,3654],{"class":202},[186,68971,68972],{"class":188,"line":9520},[186,68973,3867],{"emptyLinePlaceholder":1551},[186,68975,68976,68978,68980,68982,68984],{"class":188,"line":11179},[186,68977,65183],{"class":198},[186,68979,62733],{"class":523},[186,68981,56518],{"class":523},[186,68983,2871],{"class":523},[186,68985,622],{"class":202},[186,68987,68988,68990,68992,68994],{"class":188,"line":11204},[186,68989,65407],{"class":206},[186,68991,210],{"class":202},[186,68993,56182],{"class":206},[186,68995,634],{"class":202},[186,68997,68998,69000,69002,69004,69006,69008,69010],{"class":188,"line":11227},[186,68999,63670],{"class":206},[186,69001,210],{"class":202},[186,69003,1697],{"class":206},[186,69005,804],{"class":669},[186,69007,52971],{"class":206},[186,69009,65428],{"class":206},[186,69011,634],{"class":202},[186,69013,69014,69016,69018,69020],{"class":188,"line":11251},[186,69015,58857],{"class":206},[186,69017,210],{"class":202},[186,69019,63807],{"class":206},[186,69021,634],{"class":202},[186,69023,69024],{"class":188,"line":11256},[186,69025,3654],{"class":202},[186,69027,69028],{"class":188,"line":11261},[186,69029,3867],{"emptyLinePlaceholder":1551},[186,69031,69032,69034,69036,69038,69040,69042],{"class":188,"line":11266},[186,69033,65183],{"class":198},[186,69035,62733],{"class":523},[186,69037,56518],{"class":523},[186,69039,2871],{"class":523},[186,69041,65461],{"class":198},[186,69043,622],{"class":202},[186,69045,69046,69048,69050,69052],{"class":188,"line":11275},[186,69047,63229],{"class":206},[186,69049,210],{"class":202},[186,69051,65472],{"class":206},[186,69053,634],{"class":202},[186,69055,69056,69058,69060,69062],{"class":188,"line":11280},[186,69057,58857],{"class":206},[186,69059,210],{"class":202},[186,69061,65472],{"class":206},[186,69063,634],{"class":202},[186,69065,69066],{"class":188,"line":11286},[186,69067,3654],{"class":202},[186,69069,69070],{"class":188,"line":11307},[186,69071,3867],{"emptyLinePlaceholder":1551},[186,69073,69074,69076],{"class":188,"line":11313},[186,69075,65497],{"class":198},[186,69077,622],{"class":202},[186,69079,69080,69082,69084,69086,69088,69090],{"class":188,"line":11327},[186,69081,56140],{"class":206},[186,69083,210],{"class":202},[186,69085,1803],{"class":206},[186,69087,65510],{"class":206},[186,69089,804],{"class":669},[186,69091,634],{"class":202},[186,69093,69094],{"class":188,"line":11333},[186,69095,3654],{"class":202},[186,69097,69098],{"class":188,"line":11360},[186,69099,3867],{"emptyLinePlaceholder":1551},[186,69101,69102,69104,69106],{"class":188,"line":11369},[186,69103,65497],{"class":198},[186,69105,63612],{"class":198},[186,69107,622],{"class":202},[186,69109,69110,69112,69114,69116],{"class":188,"line":11375},[186,69111,56452],{"class":206},[186,69113,210],{"class":202},[186,69115,56182],{"class":206},[186,69117,634],{"class":202},[186,69119,69120],{"class":188,"line":11383},[186,69121,3654],{"class":202},[186,69123,69124],{"class":188,"line":11388},[186,69125,3867],{"emptyLinePlaceholder":1551},[186,69127,69128,69130,69133],{"class":188,"line":18065},[186,69129,65497],{"class":198},[186,69131,69132],{"class":198}," .active",[186,69134,622],{"class":202},[186,69136,69137,69139,69141,69143],{"class":188,"line":18071},[186,69138,56452],{"class":206},[186,69140,210],{"class":202},[186,69142,62310],{"class":206},[186,69144,634],{"class":202},[186,69146,69147],{"class":188,"line":18094},[186,69148,3654],{"class":202},[186,69150,69151,69153,69155],{"class":188,"line":18100},[186,69152,53864],{"class":202},[186,69154,1524],{"class":523},[186,69156,552],{"class":202},[186,69158,69159,69161,69163],{"class":188,"line":18123},[186,69160,1470],{"class":202},[186,69162,52786],{"class":523},[186,69164,552],{"class":202},[186,69166,69167],{"class":188,"line":18137},[186,69168,3867],{"emptyLinePlaceholder":1551},[186,69170,69171,69173,69175],{"class":188,"line":18157},[186,69172,520],{"class":202},[186,69174,53247],{"class":523},[186,69176,552],{"class":202},[186,69178,69179,69181,69183,69185,69187,69189],{"class":188,"line":18163},[186,69180,53591],{"class":202},[186,69182,1450],{"class":523},[186,69184,1453],{"class":198},[186,69186,529],{"class":202},[186,69188,65612],{"class":532},[186,69190,552],{"class":202},[186,69192,69193,69195,69197,69199,69201,69203],{"class":188,"line":18174},[186,69194,52793],{"class":202},[186,69196,1450],{"class":523},[186,69198,1453],{"class":198},[186,69200,529],{"class":202},[186,69202,65627],{"class":532},[186,69204,552],{"class":202},[186,69206,69207,69209,69211,69213,69215],{"class":188,"line":18197},[186,69208,56677],{"class":202},[186,69210,29],{"class":523},[186,69212,65638],{"class":202},[186,69214,29],{"class":523},[186,69216,552],{"class":202},[186,69218,69219,69221,69223],{"class":188,"line":18219},[186,69220,56677],{"class":202},[186,69222,19],{"class":523},[186,69224,552],{"class":202},[186,69226,69227,69229,69231,69233,69235,69237,69239,69241,69243,69245,69247,69249,69251,69254,69256,69258,69260,69262],{"class":188,"line":18224},[186,69228,56743],{"class":202},[186,69230,22],{"class":523},[186,69232,62493],{"class":202},[186,69234,948],{"class":523},[186,69236,1453],{"class":198},[186,69238,529],{"class":202},[186,69240,61147],{"class":532},[186,69242,62498],{"class":198},[186,69244,529],{"class":202},[186,69246,65673],{"class":532},[186,69248,55396],{"class":198},[186,69250,529],{"class":202},[186,69252,69253],{"class":532},"\"0\"",[186,69255,65676],{"class":202},[186,69257,948],{"class":523},[186,69259,56755],{"class":202},[186,69261,22],{"class":523},[186,69263,552],{"class":202},[186,69265,69266,69268,69270,69272,69274,69276,69278,69280,69282,69284,69286,69288,69290,69292,69294],{"class":188,"line":18230},[186,69267,56743],{"class":202},[186,69269,22],{"class":523},[186,69271,62493],{"class":202},[186,69273,948],{"class":523},[186,69275,62498],{"class":198},[186,69277,529],{"class":202},[186,69279,65673],{"class":532},[186,69281,55396],{"class":198},[186,69283,529],{"class":202},[186,69285,5144],{"class":532},[186,69287,65703],{"class":202},[186,69289,948],{"class":523},[186,69291,56755],{"class":202},[186,69293,22],{"class":523},[186,69295,552],{"class":202},[186,69297,69298,69300,69302,69304,69306,69308,69310,69312,69314,69316,69318,69320,69322,69324,69326],{"class":188,"line":18244},[186,69299,56743],{"class":202},[186,69301,22],{"class":523},[186,69303,62493],{"class":202},[186,69305,948],{"class":523},[186,69307,62498],{"class":198},[186,69309,529],{"class":202},[186,69311,65673],{"class":532},[186,69313,55396],{"class":198},[186,69315,529],{"class":202},[186,69317,5167],{"class":532},[186,69319,65730],{"class":202},[186,69321,948],{"class":523},[186,69323,56755],{"class":202},[186,69325,22],{"class":523},[186,69327,552],{"class":202},[186,69329,69330,69332,69334,69336,69338,69340,69342,69344,69346,69348,69350,69352,69354,69356,69358],{"class":188,"line":18257},[186,69331,56743],{"class":202},[186,69333,22],{"class":523},[186,69335,62493],{"class":202},[186,69337,948],{"class":523},[186,69339,62498],{"class":198},[186,69341,529],{"class":202},[186,69343,65673],{"class":532},[186,69345,55396],{"class":198},[186,69347,529],{"class":202},[186,69349,5180],{"class":532},[186,69351,65757],{"class":202},[186,69353,948],{"class":523},[186,69355,56755],{"class":202},[186,69357,22],{"class":523},[186,69359,552],{"class":202},[186,69361,69362,69364,69366,69368,69370,69372,69374,69376,69378,69380,69382,69384,69386,69388,69390],{"class":188,"line":18262},[186,69363,56743],{"class":202},[186,69365,22],{"class":523},[186,69367,62493],{"class":202},[186,69369,948],{"class":523},[186,69371,62498],{"class":198},[186,69373,529],{"class":202},[186,69375,65673],{"class":532},[186,69377,55396],{"class":198},[186,69379,529],{"class":202},[186,69381,5193],{"class":532},[186,69383,65784],{"class":202},[186,69385,948],{"class":523},[186,69387,56755],{"class":202},[186,69389,22],{"class":523},[186,69391,552],{"class":202},[186,69393,69394,69396,69398],{"class":188,"line":18276},[186,69395,56848],{"class":202},[186,69397,19],{"class":523},[186,69399,552],{"class":202},[186,69401,69402,69404,69406],{"class":188,"line":18281},[186,69403,53224],{"class":202},[186,69405,1450],{"class":523},[186,69407,552],{"class":202},[186,69409,69410,69412,69414,69416,69418,69420],{"class":188,"line":18287},[186,69411,52793],{"class":202},[186,69413,1450],{"class":523},[186,69415,1453],{"class":198},[186,69417,529],{"class":202},[186,69419,65821],{"class":532},[186,69421,552],{"class":202},[186,69423,69424,69426,69428,69430,69432,69434,69436,69438,69440,69442,69444,69446,69448,69450,69452,69454],{"class":188,"line":18292},[186,69425,56677],{"class":202},[186,69427,1450],{"class":523},[186,69429,1453],{"class":198},[186,69431,529],{"class":202},[186,69433,65836],{"class":532},[186,69435,62493],{"class":202},[186,69437,164],{"class":523},[186,69439,526],{"class":198},[186,69441,529],{"class":202},[186,69443,65847],{"class":532},[186,69445,536],{"class":198},[186,69447,529],{"class":202},[186,69449,9115],{"class":532},[186,69451,65856],{"class":202},[186,69453,1450],{"class":523},[186,69455,552],{"class":202},[186,69457,69458,69460,69462,69464,69466,69468,69470,69472,69474,69476,69478,69480,69482,69484,69486,69488],{"class":188,"line":18306},[186,69459,56677],{"class":202},[186,69461,1450],{"class":523},[186,69463,1453],{"class":198},[186,69465,529],{"class":202},[186,69467,64061],{"class":532},[186,69469,62493],{"class":202},[186,69471,164],{"class":523},[186,69473,526],{"class":198},[186,69475,529],{"class":202},[186,69477,65883],{"class":532},[186,69479,536],{"class":198},[186,69481,529],{"class":202},[186,69483,9115],{"class":532},[186,69485,65856],{"class":202},[186,69487,1450],{"class":523},[186,69489,552],{"class":202},[186,69491,69492,69494,69496,69498,69500,69502,69504,69506,69508,69510,69512,69514,69516,69518,69520,69522],{"class":188,"line":18311},[186,69493,56677],{"class":202},[186,69495,1450],{"class":523},[186,69497,1453],{"class":198},[186,69499,529],{"class":202},[186,69501,64061],{"class":532},[186,69503,62493],{"class":202},[186,69505,164],{"class":523},[186,69507,526],{"class":198},[186,69509,529],{"class":202},[186,69511,65918],{"class":532},[186,69513,536],{"class":198},[186,69515,529],{"class":202},[186,69517,9115],{"class":532},[186,69519,65856],{"class":202},[186,69521,1450],{"class":523},[186,69523,552],{"class":202},[186,69525,69526,69528,69530,69532,69534,69536,69538,69540,69542,69544,69546,69548,69550,69552,69554,69556],{"class":188,"line":18316},[186,69527,56677],{"class":202},[186,69529,1450],{"class":523},[186,69531,1453],{"class":198},[186,69533,529],{"class":202},[186,69535,64061],{"class":532},[186,69537,62493],{"class":202},[186,69539,164],{"class":523},[186,69541,526],{"class":198},[186,69543,529],{"class":202},[186,69545,65953],{"class":532},[186,69547,536],{"class":198},[186,69549,529],{"class":202},[186,69551,9115],{"class":532},[186,69553,65856],{"class":202},[186,69555,1450],{"class":523},[186,69557,552],{"class":202},[186,69559,69560,69562,69564,69566,69568,69570,69572,69574,69576,69578,69580,69582,69584,69586,69588,69590],{"class":188,"line":18330},[186,69561,56677],{"class":202},[186,69563,1450],{"class":523},[186,69565,1453],{"class":198},[186,69567,529],{"class":202},[186,69569,64061],{"class":532},[186,69571,62493],{"class":202},[186,69573,164],{"class":523},[186,69575,526],{"class":198},[186,69577,529],{"class":202},[186,69579,65988],{"class":532},[186,69581,536],{"class":198},[186,69583,529],{"class":202},[186,69585,9115],{"class":532},[186,69587,65856],{"class":202},[186,69589,1450],{"class":523},[186,69591,552],{"class":202},[186,69593,69594,69596,69598],{"class":188,"line":18342},[186,69595,53224],{"class":202},[186,69597,1450],{"class":523},[186,69599,552],{"class":202},[186,69601,69602,69604,69606],{"class":188,"line":18347},[186,69603,53864],{"class":202},[186,69605,1450],{"class":523},[186,69607,552],{"class":202},[186,69609,69610,69612,69614],{"class":188,"line":18360},[186,69611,53591],{"class":202},[186,69613,53260],{"class":523},[186,69615,552],{"class":202},[186,69617,69618],{"class":188,"line":18365},[186,69619,69620],{"class":192},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[186,69622,69623],{"class":188,"line":18370},[186,69624,69625],{"class":192},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[186,69627,69628,69630,69632,69634,69636,69638,69640,69643],{"class":188,"line":18375},[186,69629,12684],{"class":669},[186,69631,62733],{"class":206},[186,69633,15027],{"class":669},[186,69635,55841],{"class":202},[186,69637,55844],{"class":198},[186,69639,832],{"class":202},[186,69641,69642],{"class":532},"'.tab-nav ul'",[186,69644,1629],{"class":202},[186,69646,69647],{"class":188,"line":18388},[186,69648,69649],{"class":192},"    \u002F\u002F 2.添加事件\n",[186,69651,69652,69654,69656,69658,69660,69662,69664,69666,69668],{"class":188,"line":18393},[186,69653,68391],{"class":202},[186,69655,59254],{"class":198},[186,69657,832],{"class":202},[186,69659,59259],{"class":532},[186,69661,13898],{"class":202},[186,69663,55894],{"class":669},[186,69665,3126],{"class":202},[186,69667,1694],{"class":835},[186,69669,13905],{"class":202},[186,69671,69672,69674,69676],{"class":188,"line":34088},[186,69673,59685],{"class":202},[186,69675,68447],{"class":198},[186,69677,68450],{"class":202},[186,69679,69680],{"class":188,"line":34094},[186,69681,69682],{"class":192},"      \u002F\u002Fe.targer是我们点击的对象\n",[186,69684,69685,69687,69689,69691,69694],{"class":188,"line":34100},[186,69686,55925],{"class":669},[186,69688,68471],{"class":202},[186,69690,55931],{"class":669},[186,69692,69693],{"class":532}," 'A'",[186,69695,13905],{"class":202},[186,69697,69698,69700,69702,69704,69707,69709,69711,69713,69715],{"class":188,"line":34106},[186,69699,53372],{"class":202},[186,69701,55844],{"class":198},[186,69703,832],{"class":202},[186,69705,69706],{"class":532},"'.active'",[186,69708,58444],{"class":202},[186,69710,58447],{"class":198},[186,69712,832],{"class":202},[186,69714,66151],{"class":532},[186,69716,1629],{"class":202},[186,69718,69719,69722,69724,69726,69728],{"class":188,"line":34112},[186,69720,69721],{"class":202},"        e.target.classList.",[186,69723,6797],{"class":198},[186,69725,832],{"class":202},[186,69727,66151],{"class":532},[186,69729,1629],{"class":202},[186,69731,69732],{"class":188,"line":34123},[186,69733,3867],{"emptyLinePlaceholder":1551},[186,69735,69736],{"class":188,"line":34129},[186,69737,69738],{"class":192},"        \u002F\u002F 下面大盒子模块\n",[186,69740,69741],{"class":188,"line":34149},[186,69742,69743],{"class":192},"        \u002F\u002F console.log(e.target.dataset.id)\n",[186,69745,69746,69748,69750,69752,69754],{"class":188,"line":34155},[186,69747,62711],{"class":669},[186,69749,4498],{"class":206},[186,69751,15027],{"class":669},[186,69753,47020],{"class":669},[186,69755,69756],{"class":202},"e.target.dataset.id\n",[186,69758,69759,69761,69763,69765,69767,69769,69771,69773,69775],{"class":188,"line":34166},[186,69760,53372],{"class":202},[186,69762,55844],{"class":198},[186,69764,832],{"class":202},[186,69766,66199],{"class":532},[186,69768,58444],{"class":202},[186,69770,58447],{"class":198},[186,69772,832],{"class":202},[186,69774,66151],{"class":532},[186,69776,1629],{"class":202},[186,69778,69779,69781,69783,69785,69787,69789,69791,69793,69795,69797,69799,69801,69803],{"class":188,"line":34172},[186,69780,53372],{"class":202},[186,69782,55844],{"class":198},[186,69784,832],{"class":202},[186,69786,66225],{"class":532},[186,69788,2051],{"class":202},[186,69790,47020],{"class":669},[186,69792,26577],{"class":206},[186,69794,58473],{"class":532},[186,69796,58444],{"class":202},[186,69798,6797],{"class":198},[186,69800,832],{"class":202},[186,69802,66151],{"class":532},[186,69804,1629],{"class":202},[186,69806,69807],{"class":188,"line":34178},[186,69808,3867],{"emptyLinePlaceholder":1551},[186,69810,69811],{"class":188,"line":34184},[186,69812,53845],{"class":202},[186,69814,69815],{"class":188,"line":34190},[186,69816,34916],{"class":202},[186,69818,69819,69821,69823],{"class":188,"line":34196},[186,69820,53864],{"class":202},[186,69822,53260],{"class":523},[186,69824,552],{"class":202},[186,69826,69827,69829,69831],{"class":188,"line":34202},[186,69828,1470],{"class":202},[186,69830,53247],{"class":523},[186,69832,552],{"class":202},[186,69834,69835],{"class":188,"line":34208},[186,69836,3867],{"emptyLinePlaceholder":1551},[186,69838,69839,69841,69843],{"class":188,"line":34228},[186,69840,1470],{"class":202},[186,69842,52089],{"class":523},[186,69844,552],{"class":202},[29,69846,69848],{"id":69847},"_333-页面加载事件","3.3.3 页面加载事件",[34,69850,69851],{},[22,69852,69853],{},"load",[169,69855,69856],{},[164,69857],{"alt":181,"src":69858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[169,69860,69861],{},"window代表整个窗口，比document还要大",[169,69863,69864],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[169,69866,69867],{},"img.addEventListener('load', function () {",[169,69869,69870],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[169,69872,53911],{},[34,69874,69875],{"start":49},[22,69876,69877],{},"DOMContentLoaded",[169,69879,69880],{},[164,69881],{"alt":181,"src":69882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[169,69884,69885],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[29,69887,69889],{"id":69888},"_334-元素滚动事件","3.3.4 元素滚动事件",[169,69891,69892],{},[164,69893],{"alt":181,"src":69894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[169,69896,69897],{},[164,69898],{"alt":181,"src":69899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[169,69901,69902],{},[164,69903],{"alt":181,"src":69904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[169,69906,69907],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[169,69909,69910],{},"获得的是数字型数据，不带单位",[169,69912,69913],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[169,69915,69916],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[169,69918,69919],{},"它是通过document.documentElement来获取",[169,69921,69922],{},[164,69923],{"alt":181,"src":69924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[169,69926,69927],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[29,69929,69931],{"id":69930},"_335-页面缩放事件","3.3.5 页面缩放事件",[169,69933,69934],{},[164,69935],{"alt":181,"src":69936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[169,69938,69939],{},[164,69940],{"alt":181,"src":69941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[29,69943,69945],{"id":69944},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[169,69947,69948],{},[164,69949],{"alt":181,"src":69950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[169,69952,69953],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[169,69955,69956],{},[164,69957],{"alt":181,"src":69958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[169,69960,69961],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[169,69963,69964],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[169,69966,69967],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[169,69969,69970],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[169,69972,69973],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[169,69975,69976],{},[164,69977],{"alt":181,"src":69978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[169,69980,69981],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[169,69983,69984],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[169,69986,69987],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[169,69989,69990],{},"e.pageX-box.getBoundingClientRect()",[29,69992,69994],{"id":69993},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[169,69996,69997],{},[164,69998],{"alt":181,"src":69999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[169,70001,70002],{},"这个是相对于视口来说的，它是个方法，不是属性值",[29,70004,70006],{"id":70005},"_338-总结","3.3.8 总结",[169,70008,70009],{},[164,70010],{"alt":181,"src":70011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[169,70013,70014],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[169,70016,70017],{},"修改盒子的宽高只能通过width和height来实现",[29,70019,70021],{"id":70020},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[176,70023,70025],{"className":52087,"code":70024,"language":52089,"meta":181,"style":181},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[183,70026,70027,70032,70037,70042,70047],{"__ignoreMap":181},[186,70028,70029],{"class":188,"line":189},[186,70030,70031],{"class":202},"\u002F* 页面滑动 *\u002F\n",[186,70033,70034],{"class":188,"line":49},[186,70035,70036],{"class":202},"html {\n",[186,70038,70039],{"class":188,"line":219},[186,70040,70041],{"class":202},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[186,70043,70044],{"class":188,"line":225},[186,70045,70046],{"class":202},"  scroll-behavior: smooth;\n",[186,70048,70049],{"class":188,"line":242},[186,70050,639],{"class":202},[169,70052,70053],{},"默认是auto",[29,70055,70057],{"id":70056},"_3310-日期对象","3.3.10 日期对象",[23459,70059,70061],{"id":70060},"_33101-实例化","3.3.10.1 实例化",[169,70063,70064],{},[164,70065],{"alt":181,"src":70066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23459,70068,70070],{"id":70069},"_33102-时期对象方法","3.3.10.2 时期对象方法",[169,70072,70073],{},[164,70074],{"alt":181,"src":70075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[169,70077,70078],{},"月份+1",[169,70080,70081],{},"老外认为第一天为0，星期天",[169,70083,70084],{},"方法使用的时候必须要跟括号",[169,70086,70087],{},"快速获得日期",[169,70089,70090],{},"\u002F\u002F 得到年月日",[169,70092,70093],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[169,70095,70096],{},"\u002F\u002F 得到当地日期",[169,70098,70099],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[169,70101,70102],{},"\u002F\u002F 得到当地时间",[169,70104,70105],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[169,70107,70108],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[169,70110,70111],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53260,70113,70114],{},"\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",[169,70116,70117],{},"学会去封装函数！",[23459,70119,70121],{"id":70120},"_33103-时间戳","3.3.10.3 时间戳",[169,70123,70124],{},[164,70125],{"alt":181,"src":70126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[169,70128,70129],{},[164,70130],{"alt":181,"src":70131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[169,70133,70134],{},"三种方法记住一个就可以",[29,70136,70138],{"id":70137},"_3311-节点操作","3.3.11 节点操作",[23459,70140,70142],{"id":70141},"_33111-dom节点","3.3.11.1 DOM节点",[169,70144,70145],{},[164,70146],{"alt":181,"src":70147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[169,70149,70150],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23459,70152,70154],{"id":70153},"_33112-查找节点","3.3.11.2 查找节点",[169,70156,70157],{},"前边的document.querySelector()是获取的元素",[169,70159,70160],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[169,70162,70163],{},[164,70164],{"alt":181,"src":70165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[34,70167,70168],{},[22,70169,70170],{},"父节点",[169,70172,70173],{},[164,70174],{"alt":181,"src":70175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[34,70177,70178],{"start":49},[22,70179,70180],{},"子节点",[169,70182,70183],{},[164,70184],{"alt":181,"src":70185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[169,70187,70188],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[169,70190,70191],{},"children获得的是伪数组，是亲儿子",[34,70193,70194],{"start":219},[22,70195,70196],{},"兄弟节点",[169,70198,70199],{},[164,70200],{"alt":181,"src":70201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23459,70203,70205],{"id":70204},"_33113-增加节点","3.3.11.3 增加节点",[169,70207,70208],{},[164,70209],{"alt":181,"src":70210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[169,70212,70213],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[169,70215,70216],{},[164,70217],{"alt":181,"src":70218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[169,70220,70221],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[169,70223,70224],{},"下面是写法的部分展示，就按照下边的格式来写",[169,70226,70227],{},"例：",[53260,70229,70230],{},"\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",[169,70232,70233],{},[164,70234],{"alt":181,"src":70235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[169,70237,70238],{},"false只克隆标签，里边的内容不会克隆过来",[176,70240,70242],{"className":52087,"code":70241,"language":52089,"meta":181,"style":181},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[183,70243,70244],{"__ignoreMap":181},[186,70245,70246],{"class":188,"line":189},[186,70247,70241],{"class":202},[23459,70249,70251],{"id":70250},"_33114-删除节点","3.3.11.4 删除节点",[169,70253,70254],{},[164,70255],{"alt":181,"src":70256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[169,70258,70259],{},"父亲删儿子",[169,70261,70262],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[29,70264,70266],{"id":70265},"_3312-m端事件","3.3.12 M端事件",[169,70268,70269],{},"M端就是移动端",[169,70271,70272],{},[164,70273],{"alt":181,"src":70274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[29,70276,70278],{"id":70277},"_3313-插件","3.3.13 插件",[169,70280,70281],{},"要熟悉官网！！！",[169,70283,70284],{},[948,70285,70286],{"href":70286,"rel":70287},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[952],[169,70289,70290],{},[948,70291,70292],{"href":70292,"rel":70293},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[952],[29,70295,70297],{"id":70296},"_3314-学生信息表","3.3.14 学生信息表",[34,70299,70300,70303,70306,70309,70312,70315,70318,70321],{},[22,70301,70302],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[22,70304,70305],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[22,70307,70308],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[22,70310,70311],{},"用好表单元素自带的属性，value,name等",[22,70313,70314],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[22,70316,70317],{},"不要忘记事件对象",[22,70319,70320],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[22,70322,70323],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[169,70325,70326],{},"结构：",[176,70328,70330],{"className":52087,"code":70329,"language":52089,"meta":181,"style":181},"\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",[183,70331,70332,70342,70356,70360,70368,70382,70402,70423,70436,70460,70468,70472,70480,70493,70514,70542,70570,70575,70597,70617,70636,70644,70672,70694,70714,70734,70754,70774,70794,70802,70822,70830,70834,70847,70855,70863,70871,70884,70897,70910,70923,70936,70949,70962,70970,70978,70986,70991,70996,71001,71006,71011,71016,71021,71026,71031,71036,71041,71046,71051,71059,71067,71075,71079,71099,71118,71138,71158,71178,71198,71202,71207,71227,71232,71242,71247,71252,71272,71294,71299,71309,71313,71317,71322,71327,71356,71370,71385,71389,71393,71397,71402,71413,71426,71431,71436,71441,71446,71451,71455,71460,71465,71474,71479,71484,71496,71501,71508,71512,71517,71527,71532,71542,71547,71575,71596,71606,71626,71644,71661,71678,71695,71712,71716,71726,71731,71736,71741,71752,71756,71760,71764,71769,71774,71795,71807,71812,71817,71822,71836,71841,71848,71852,71856,71864,71868,71876,71880],{"__ignoreMap":181},[186,70333,70334,70336,70338,70340],{"class":188,"line":189},[186,70335,52751],{"class":202},[186,70337,52754],{"class":523},[186,70339,52757],{"class":198},[186,70341,552],{"class":202},[186,70343,70344,70346,70348,70350,70352,70354],{"class":188,"line":49},[186,70345,520],{"class":202},[186,70347,52089],{"class":523},[186,70349,52768],{"class":198},[186,70351,529],{"class":202},[186,70353,52773],{"class":532},[186,70355,552],{"class":202},[186,70357,70358],{"class":188,"line":219},[186,70359,3867],{"emptyLinePlaceholder":1551},[186,70361,70362,70364,70366],{"class":188,"line":225},[186,70363,520],{"class":202},[186,70365,52786],{"class":523},[186,70367,552],{"class":202},[186,70369,70370,70372,70374,70376,70378,70380],{"class":188,"line":242},[186,70371,53591],{"class":202},[186,70373,52796],{"class":523},[186,70375,52799],{"class":198},[186,70377,529],{"class":202},[186,70379,52804],{"class":532},[186,70381,60568],{"class":202},[186,70383,70384,70386,70388,70390,70392,70394,70396,70398,70400],{"class":188,"line":248},[186,70385,53591],{"class":202},[186,70387,52796],{"class":523},[186,70389,16382],{"class":198},[186,70391,529],{"class":202},[186,70393,52843],{"class":532},[186,70395,52823],{"class":198},[186,70397,529],{"class":202},[186,70399,52850],{"class":532},[186,70401,60568],{"class":202},[186,70403,70404,70406,70408,70410,70412,70414,70416,70418,70421],{"class":188,"line":265},[186,70405,53591],{"class":202},[186,70407,52796],{"class":523},[186,70409,52815],{"class":198},[186,70411,529],{"class":202},[186,70413,52820],{"class":532},[186,70415,52823],{"class":198},[186,70417,529],{"class":202},[186,70419,70420],{"class":532},"\"ie=edge\"",[186,70422,60568],{"class":202},[186,70424,70425,70427,70429,70432,70434],{"class":188,"line":271},[186,70426,53591],{"class":202},[186,70428,52859],{"class":523},[186,70430,70431],{"class":202},">学生信息管理\u003C\u002F",[186,70433,52859],{"class":523},[186,70435,552],{"class":202},[186,70437,70438,70440,70443,70446,70448,70451,70453,70455,70458],{"class":188,"line":288},[186,70439,53591],{"class":202},[186,70441,70442],{"class":523},"link",[186,70444,70445],{"class":198}," rel",[186,70447,529],{"class":202},[186,70449,70450],{"class":532},"\"stylesheet\"",[186,70452,62498],{"class":198},[186,70454,529],{"class":202},[186,70456,70457],{"class":532},"\"css\u002Findex.css\"",[186,70459,60568],{"class":202},[186,70461,70462,70464,70466],{"class":188,"line":294},[186,70463,1470],{"class":202},[186,70465,52786],{"class":523},[186,70467,552],{"class":202},[186,70469,70470],{"class":188,"line":1212},[186,70471,3867],{"emptyLinePlaceholder":1551},[186,70473,70474,70476,70478],{"class":188,"line":1223},[186,70475,520],{"class":202},[186,70477,53247],{"class":523},[186,70479,552],{"class":202},[186,70481,70482,70484,70486,70489,70491],{"class":188,"line":1236},[186,70483,53591],{"class":202},[186,70485,10],{"class":523},[186,70487,70488],{"class":202},">新增学员\u003C\u002F",[186,70490,10],{"class":523},[186,70492,552],{"class":202},[186,70494,70495,70497,70499,70501,70503,70505,70508,70510,70512],{"class":188,"line":3096},[186,70496,53591],{"class":202},[186,70498,68062],{"class":523},[186,70500,1453],{"class":198},[186,70502,529],{"class":202},[186,70504,64102],{"class":532},[186,70506,70507],{"class":198}," autocomplete",[186,70509,529],{"class":202},[186,70511,33231],{"class":532},[186,70513,552],{"class":202},[186,70515,70516,70519,70521,70523,70525,70527,70529,70531,70534,70536,70538,70540],{"class":188,"line":3110},[186,70517,70518],{"class":202},"    姓名：\u003C",[186,70520,55266],{"class":523},[186,70522,55269],{"class":198},[186,70524,529],{"class":202},[186,70526,64137],{"class":532},[186,70528,1453],{"class":198},[186,70530,529],{"class":202},[186,70532,70533],{"class":532},"\"uname\"",[186,70535,16382],{"class":198},[186,70537,529],{"class":202},[186,70539,70533],{"class":532},[186,70541,60568],{"class":202},[186,70543,70544,70547,70549,70551,70553,70555,70557,70559,70562,70564,70566,70568],{"class":188,"line":3115},[186,70545,70546],{"class":202},"    年龄：\u003C",[186,70548,55266],{"class":523},[186,70550,55269],{"class":198},[186,70552,529],{"class":202},[186,70554,64137],{"class":532},[186,70556,1453],{"class":198},[186,70558,529],{"class":202},[186,70560,70561],{"class":532},"\"age\"",[186,70563,16382],{"class":198},[186,70565,529],{"class":202},[186,70567,70561],{"class":532},[186,70569,60568],{"class":202},[186,70571,70572],{"class":188,"line":3121},[186,70573,70574],{"class":202},"    性别:\n",[186,70576,70577,70579,70582,70584,70586,70589,70591,70593,70595],{"class":188,"line":3142},[186,70578,52793],{"class":202},[186,70580,70581],{"class":523},"select",[186,70583,16382],{"class":198},[186,70585,529],{"class":202},[186,70587,70588],{"class":532},"\"gender\"",[186,70590,1453],{"class":198},[186,70592,529],{"class":202},[186,70594,70588],{"class":532},[186,70596,552],{"class":202},[186,70598,70599,70601,70604,70606,70608,70610,70613,70615],{"class":188,"line":3147},[186,70600,56677],{"class":202},[186,70602,70603],{"class":523},"option",[186,70605,68088],{"class":198},[186,70607,529],{"class":202},[186,70609,11424],{"class":532},[186,70611,70612],{"class":202},">男\u003C\u002F",[186,70614,70603],{"class":523},[186,70616,552],{"class":202},[186,70618,70619,70621,70623,70625,70627,70629,70632,70634],{"class":188,"line":3161},[186,70620,56677],{"class":202},[186,70622,70603],{"class":523},[186,70624,68088],{"class":198},[186,70626,529],{"class":202},[186,70628,11493],{"class":532},[186,70630,70631],{"class":202},">女\u003C\u002F",[186,70633,70603],{"class":523},[186,70635,552],{"class":202},[186,70637,70638,70640,70642],{"class":188,"line":3166},[186,70639,53224],{"class":202},[186,70641,70581],{"class":523},[186,70643,552],{"class":202},[186,70645,70646,70649,70651,70653,70655,70657,70659,70661,70664,70666,70668,70670],{"class":188,"line":3195},[186,70647,70648],{"class":202},"    薪资：\u003C",[186,70650,55266],{"class":523},[186,70652,55269],{"class":198},[186,70654,529],{"class":202},[186,70656,64137],{"class":532},[186,70658,1453],{"class":198},[186,70660,529],{"class":202},[186,70662,70663],{"class":532},"\"salary\"",[186,70665,16382],{"class":198},[186,70667,529],{"class":202},[186,70669,70663],{"class":532},[186,70671,60568],{"class":202},[186,70673,70674,70677,70679,70681,70683,70686,70688,70690,70692],{"class":188,"line":3200},[186,70675,70676],{"class":202},"    就业城市：\u003C",[186,70678,70581],{"class":523},[186,70680,16382],{"class":198},[186,70682,529],{"class":202},[186,70684,70685],{"class":532},"\"city\"",[186,70687,1453],{"class":198},[186,70689,529],{"class":202},[186,70691,70685],{"class":532},[186,70693,552],{"class":202},[186,70695,70696,70698,70700,70702,70704,70707,70710,70712],{"class":188,"line":3217},[186,70697,56677],{"class":202},[186,70699,70603],{"class":523},[186,70701,68088],{"class":198},[186,70703,529],{"class":202},[186,70705,70706],{"class":532},"\"北京\"",[186,70708,70709],{"class":202},">北京\u003C\u002F",[186,70711,70603],{"class":523},[186,70713,552],{"class":202},[186,70715,70716,70718,70720,70722,70724,70727,70730,70732],{"class":188,"line":3222},[186,70717,56677],{"class":202},[186,70719,70603],{"class":523},[186,70721,68088],{"class":198},[186,70723,529],{"class":202},[186,70725,70726],{"class":532},"\"上海\"",[186,70728,70729],{"class":202},">上海\u003C\u002F",[186,70731,70603],{"class":523},[186,70733,552],{"class":202},[186,70735,70736,70738,70740,70742,70744,70747,70750,70752],{"class":188,"line":3227},[186,70737,56677],{"class":202},[186,70739,70603],{"class":523},[186,70741,68088],{"class":198},[186,70743,529],{"class":202},[186,70745,70746],{"class":532},"\"广州\"",[186,70748,70749],{"class":202},">广州\u003C\u002F",[186,70751,70603],{"class":523},[186,70753,552],{"class":202},[186,70755,70756,70758,70760,70762,70764,70767,70770,70772],{"class":188,"line":3232},[186,70757,56677],{"class":202},[186,70759,70603],{"class":523},[186,70761,68088],{"class":198},[186,70763,529],{"class":202},[186,70765,70766],{"class":532},"\"深圳\"",[186,70768,70769],{"class":202},">深圳\u003C\u002F",[186,70771,70603],{"class":523},[186,70773,552],{"class":202},[186,70775,70776,70778,70780,70782,70784,70787,70790,70792],{"class":188,"line":3246},[186,70777,56677],{"class":202},[186,70779,70603],{"class":523},[186,70781,68088],{"class":198},[186,70783,529],{"class":202},[186,70785,70786],{"class":532},"\"曹县\"",[186,70788,70789],{"class":202},">曹县\u003C\u002F",[186,70791,70603],{"class":523},[186,70793,552],{"class":202},[186,70795,70796,70798,70800],{"class":188,"line":3251},[186,70797,53224],{"class":202},[186,70799,70581],{"class":523},[186,70801,552],{"class":202},[186,70803,70804,70806,70808,70810,70812,70815,70818,70820],{"class":188,"line":4044},[186,70805,52793],{"class":202},[186,70807,55332],{"class":523},[186,70809,1453],{"class":198},[186,70811,529],{"class":202},[186,70813,70814],{"class":532},"\"add\"",[186,70816,70817],{"class":202},">录入\u003C\u002F",[186,70819,55332],{"class":523},[186,70821,552],{"class":202},[186,70823,70824,70826,70828],{"class":188,"line":4058},[186,70825,53864],{"class":202},[186,70827,68062],{"class":523},[186,70829,552],{"class":202},[186,70831,70832],{"class":188,"line":4066},[186,70833,3867],{"emptyLinePlaceholder":1551},[186,70835,70836,70838,70840,70843,70845],{"class":188,"line":4071},[186,70837,53591],{"class":202},[186,70839,10],{"class":523},[186,70841,70842],{"class":202},">就业榜\u003C\u002F",[186,70844,10],{"class":523},[186,70846,552],{"class":202},[186,70848,70849,70851,70853],{"class":188,"line":4077},[186,70850,53591],{"class":202},[186,70852,99],{"class":523},[186,70854,552],{"class":202},[186,70856,70857,70859,70861],{"class":188,"line":4083},[186,70858,52793],{"class":202},[186,70860,102],{"class":523},[186,70862,552],{"class":202},[186,70864,70865,70867,70869],{"class":188,"line":4088},[186,70866,56677],{"class":202},[186,70868,105],{"class":523},[186,70870,552],{"class":202},[186,70872,70873,70875,70877,70880,70882],{"class":188,"line":9411},[186,70874,56743],{"class":202},[186,70876,108],{"class":523},[186,70878,70879],{"class":202},">序号\u003C\u002F",[186,70881,108],{"class":523},[186,70883,552],{"class":202},[186,70885,70886,70888,70890,70893,70895],{"class":188,"line":9435},[186,70887,56743],{"class":202},[186,70889,108],{"class":523},[186,70891,70892],{"class":202},">姓名\u003C\u002F",[186,70894,108],{"class":523},[186,70896,552],{"class":202},[186,70898,70899,70901,70903,70906,70908],{"class":188,"line":9440},[186,70900,56743],{"class":202},[186,70902,108],{"class":523},[186,70904,70905],{"class":202},">年龄\u003C\u002F",[186,70907,108],{"class":523},[186,70909,552],{"class":202},[186,70911,70912,70914,70916,70919,70921],{"class":188,"line":9446},[186,70913,56743],{"class":202},[186,70915,108],{"class":523},[186,70917,70918],{"class":202},">性别\u003C\u002F",[186,70920,108],{"class":523},[186,70922,552],{"class":202},[186,70924,70925,70927,70929,70932,70934],{"class":188,"line":9473},[186,70926,56743],{"class":202},[186,70928,108],{"class":523},[186,70930,70931],{"class":202},">薪资\u003C\u002F",[186,70933,108],{"class":523},[186,70935,552],{"class":202},[186,70937,70938,70940,70942,70945,70947],{"class":188,"line":9478},[186,70939,56743],{"class":202},[186,70941,108],{"class":523},[186,70943,70944],{"class":202},">就业城市\u003C\u002F",[186,70946,108],{"class":523},[186,70948,552],{"class":202},[186,70950,70951,70953,70955,70958,70960],{"class":188,"line":9484},[186,70952,56743],{"class":202},[186,70954,108],{"class":523},[186,70956,70957],{"class":202},">操作\u003C\u002F",[186,70959,108],{"class":523},[186,70961,552],{"class":202},[186,70963,70964,70966,70968],{"class":188,"line":9496},[186,70965,56848],{"class":202},[186,70967,105],{"class":523},[186,70969,552],{"class":202},[186,70971,70972,70974,70976],{"class":188,"line":9508},[186,70973,53224],{"class":202},[186,70975,102],{"class":523},[186,70977,552],{"class":202},[186,70979,70980,70982,70984],{"class":188,"line":9520},[186,70981,52793],{"class":202},[186,70983,116],{"class":523},[186,70985,552],{"class":202},[186,70987,70988],{"class":188,"line":11179},[186,70989,70990],{"class":192},"      \u003C!-- \n",[186,70992,70993],{"class":188,"line":11204},[186,70994,70995],{"class":192},"        \u003Ctr>\n",[186,70997,70998],{"class":188,"line":11227},[186,70999,71000],{"class":192},"          \u003Ctd>1001\u003C\u002Ftd>\n",[186,71002,71003],{"class":188,"line":11251},[186,71004,71005],{"class":192},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[186,71007,71008],{"class":188,"line":11256},[186,71009,71010],{"class":192},"          \u003Ctd>19\u003C\u002Ftd>\n",[186,71012,71013],{"class":188,"line":11261},[186,71014,71015],{"class":192},"          \u003Ctd>男\u003C\u002Ftd>\n",[186,71017,71018],{"class":188,"line":11266},[186,71019,71020],{"class":192},"          \u003Ctd>15000\u003C\u002Ftd>\n",[186,71022,71023],{"class":188,"line":11275},[186,71024,71025],{"class":192},"          \u003Ctd>上海\u003C\u002Ftd>\n",[186,71027,71028],{"class":188,"line":11280},[186,71029,71030],{"class":192},"          \u003Ctd>\n",[186,71032,71033],{"class":188,"line":11286},[186,71034,71035],{"class":192},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[186,71037,71038],{"class":188,"line":11307},[186,71039,71040],{"class":192},"          \u003C\u002Ftd>\n",[186,71042,71043],{"class":188,"line":11313},[186,71044,71045],{"class":192},"        \u003C\u002Ftr> \n",[186,71047,71048],{"class":188,"line":11327},[186,71049,71050],{"class":192},"        -->\n",[186,71052,71053,71055,71057],{"class":188,"line":11333},[186,71054,53224],{"class":202},[186,71056,116],{"class":523},[186,71058,552],{"class":202},[186,71060,71061,71063,71065],{"class":188,"line":11360},[186,71062,53864],{"class":202},[186,71064,99],{"class":523},[186,71066,552],{"class":202},[186,71068,71069,71071,71073],{"class":188,"line":11369},[186,71070,53591],{"class":202},[186,71072,53260],{"class":523},[186,71074,552],{"class":202},[186,71076,71077],{"class":188,"line":11375},[186,71078,61399],{"class":192},[186,71080,71081,71083,71086,71088,71090,71092,71094,71097],{"class":188,"line":11383},[186,71082,12684],{"class":669},[186,71084,71085],{"class":206}," uname",[186,71087,15027],{"class":669},[186,71089,55841],{"class":202},[186,71091,55844],{"class":198},[186,71093,832],{"class":202},[186,71095,71096],{"class":532},"'.uname'",[186,71098,1629],{"class":202},[186,71100,71101,71103,71105,71107,71109,71111,71113,71116],{"class":188,"line":11388},[186,71102,12684],{"class":669},[186,71104,17150],{"class":206},[186,71106,15027],{"class":669},[186,71108,55841],{"class":202},[186,71110,55844],{"class":198},[186,71112,832],{"class":202},[186,71114,71115],{"class":532},"'.age'",[186,71117,1629],{"class":202},[186,71119,71120,71122,71125,71127,71129,71131,71133,71136],{"class":188,"line":18065},[186,71121,12684],{"class":669},[186,71123,71124],{"class":206}," gender",[186,71126,15027],{"class":669},[186,71128,55841],{"class":202},[186,71130,55844],{"class":198},[186,71132,832],{"class":202},[186,71134,71135],{"class":532},"'.gender'",[186,71137,1629],{"class":202},[186,71139,71140,71142,71145,71147,71149,71151,71153,71156],{"class":188,"line":18071},[186,71141,12684],{"class":669},[186,71143,71144],{"class":206}," salary",[186,71146,15027],{"class":669},[186,71148,55841],{"class":202},[186,71150,55844],{"class":198},[186,71152,832],{"class":202},[186,71154,71155],{"class":532},"'.salary'",[186,71157,1629],{"class":202},[186,71159,71160,71162,71165,71167,71169,71171,71173,71176],{"class":188,"line":18094},[186,71161,12684],{"class":669},[186,71163,71164],{"class":206}," city",[186,71166,15027],{"class":669},[186,71168,55841],{"class":202},[186,71170,55844],{"class":198},[186,71172,832],{"class":202},[186,71174,71175],{"class":532},"'.city'",[186,71177,1629],{"class":202},[186,71179,71180,71182,71185,71187,71189,71191,71193,71196],{"class":188,"line":18100},[186,71181,12684],{"class":669},[186,71183,71184],{"class":206}," tbody",[186,71186,15027],{"class":669},[186,71188,55841],{"class":202},[186,71190,55844],{"class":198},[186,71192,832],{"class":202},[186,71194,71195],{"class":532},"'tbody'",[186,71197,1629],{"class":202},[186,71199,71200],{"class":188,"line":18123},[186,71201,3867],{"emptyLinePlaceholder":1551},[186,71203,71204],{"class":188,"line":18137},[186,71205,71206],{"class":192},"    \u002F\u002F 获取所有带有name属性的元素\n",[186,71208,71209,71211,71214,71216,71218,71220,71222,71225],{"class":188,"line":18157},[186,71210,12684],{"class":669},[186,71212,71213],{"class":206}," items",[186,71215,15027],{"class":669},[186,71217,55841],{"class":202},[186,71219,57122],{"class":198},[186,71221,832],{"class":202},[186,71223,71224],{"class":532},"'[name]'",[186,71226,1629],{"class":202},[186,71228,71229],{"class":188,"line":18163},[186,71230,71231],{"class":192},"    \u002F\u002F 声明一个空的数组\n",[186,71233,71234,71236,71238,71240],{"class":188,"line":18174},[186,71235,12684],{"class":669},[186,71237,59136],{"class":206},[186,71239,15027],{"class":669},[186,71241,53285],{"class":202},[186,71243,71244],{"class":188,"line":18197},[186,71245,71246],{"class":192},"    \u002F\u002F 1.录入模块\n",[186,71248,71249],{"class":188,"line":18219},[186,71250,71251],{"class":192},"    \u002F\u002F 1.1这是一个表单提交事件\n",[186,71253,71254,71256,71259,71261,71263,71265,71267,71270],{"class":188,"line":18224},[186,71255,12684],{"class":669},[186,71257,71258],{"class":206}," info",[186,71260,15027],{"class":669},[186,71262,55841],{"class":202},[186,71264,55844],{"class":198},[186,71266,832],{"class":202},[186,71268,71269],{"class":532},"'.info'",[186,71271,1629],{"class":202},[186,71273,71274,71277,71279,71281,71284,71286,71288,71290,71292],{"class":188,"line":18230},[186,71275,71276],{"class":202},"    info.",[186,71278,59254],{"class":198},[186,71280,832],{"class":202},[186,71282,71283],{"class":532},"'submit'",[186,71285,13898],{"class":202},[186,71287,55894],{"class":669},[186,71289,3126],{"class":202},[186,71291,1694],{"class":835},[186,71293,13905],{"class":202},[186,71295,71296],{"class":188,"line":18244},[186,71297,71298],{"class":192},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[186,71300,71301,71304,71307],{"class":188,"line":18257},[186,71302,71303],{"class":202},"      e.",[186,71305,71306],{"class":198},"preventDefault",[186,71308,3443],{"class":202},[186,71310,71311],{"class":188,"line":18262},[186,71312,61453],{"class":192},[186,71314,71315],{"class":188,"line":18276},[186,71316,3867],{"emptyLinePlaceholder":1551},[186,71318,71319],{"class":188,"line":18281},[186,71320,71321],{"class":192},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[186,71323,71324],{"class":188,"line":18287},[186,71325,71326],{"class":192},"      \u002F\u002F 先遍历循环\n",[186,71328,71329,71331,71333,71335,71337,71339,71341,71343,71345,71348,71350,71352,71354],{"class":188,"line":18292},[186,71330,53731],{"class":669},[186,71332,3126],{"class":202},[186,71334,53294],{"class":669},[186,71336,10901],{"class":202},[186,71338,529],{"class":669},[186,71340,5559],{"class":206},[186,71342,10908],{"class":202},[186,71344,520],{"class":669},[186,71346,71347],{"class":202}," items.",[186,71349,53415],{"class":206},[186,71351,4680],{"class":202},[186,71353,3759],{"class":669},[186,71355,13905],{"class":202},[186,71357,71358,71360,71363,71365,71368],{"class":188,"line":18306},[186,71359,3964],{"class":669},[186,71361,71362],{"class":202}," (items[i].value ",[186,71364,55931],{"class":669},[186,71366,71367],{"class":532}," ''",[186,71369,13905],{"class":202},[186,71371,71372,71375,71378,71380,71383],{"class":188,"line":18311},[186,71373,71374],{"class":669},"          return",[186,71376,71377],{"class":198}," alert",[186,71379,832],{"class":202},[186,71381,71382],{"class":532},"'输入内容不能为空'",[186,71384,1629],{"class":202},[186,71386,71387],{"class":188,"line":18316},[186,71388,3996],{"class":202},[186,71390,71391],{"class":188,"line":18330},[186,71392,53845],{"class":202},[186,71394,71395],{"class":188,"line":18342},[186,71396,3867],{"emptyLinePlaceholder":1551},[186,71398,71399],{"class":188,"line":18347},[186,71400,71401],{"class":192},"      \u002F\u002F 创建新的对象\n",[186,71403,71404,71406,71409,71411],{"class":188,"line":18360},[186,71405,59669],{"class":669},[186,71407,71408],{"class":206}," obj",[186,71410,15027],{"class":669},[186,71412,622],{"class":202},[186,71414,71415,71418,71420,71422,71424],{"class":188,"line":18365},[186,71416,71417],{"class":202},"        stuID: arr.",[186,71419,53415],{"class":206},[186,71421,47020],{"class":669},[186,71423,26577],{"class":206},[186,71425,32921],{"class":202},[186,71427,71428],{"class":188,"line":18370},[186,71429,71430],{"class":202},"        uname: uname.value,\n",[186,71432,71433],{"class":188,"line":18375},[186,71434,71435],{"class":202},"        age: age.value,\n",[186,71437,71438],{"class":188,"line":18388},[186,71439,71440],{"class":202},"        gender: gender.value,\n",[186,71442,71443],{"class":188,"line":18393},[186,71444,71445],{"class":202},"        salary: salary.value,\n",[186,71447,71448],{"class":188,"line":34088},[186,71449,71450],{"class":202},"        city: city.value\n",[186,71452,71453],{"class":188,"line":34094},[186,71454,53845],{"class":202},[186,71456,71457],{"class":188,"line":34100},[186,71458,71459],{"class":192},"      \u002F\u002F console.log(obj);\n",[186,71461,71462],{"class":188,"line":34106},[186,71463,71464],{"class":192},"      \u002F\u002F 追加到数组里面\n",[186,71466,71467,71469,71471],{"class":188,"line":34112},[186,71468,59448],{"class":202},[186,71470,53331],{"class":198},[186,71472,71473],{"class":202},"(obj)\n",[186,71475,71476],{"class":188,"line":34123},[186,71477,71478],{"class":192},"      \u002F\u002F console.log(arr);\n",[186,71480,71481],{"class":188,"line":34129},[186,71482,71483],{"class":192},"      \u002F\u002F 清空表单  reset重置表单\n",[186,71485,71486,71489,71491,71494],{"class":188,"line":34149},[186,71487,71488],{"class":206},"      this",[186,71490,2168],{"class":202},[186,71492,71493],{"class":198},"reset",[186,71495,3443],{"class":202},[186,71497,71498],{"class":188,"line":34155},[186,71499,71500],{"class":192},"      \u002F\u002F 调用渲染函数\n",[186,71502,71503,71506],{"class":188,"line":34166},[186,71504,71505],{"class":198},"      render",[186,71507,3443],{"class":202},[186,71509,71510],{"class":188,"line":34172},[186,71511,34916],{"class":202},[186,71513,71514],{"class":188,"line":34178},[186,71515,71516],{"class":192},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[186,71518,71519,71522,71525],{"class":188,"line":34184},[186,71520,71521],{"class":669},"    function",[186,71523,71524],{"class":198}," render",[186,71526,12316],{"class":202},[186,71528,71529],{"class":188,"line":34190},[186,71530,71531],{"class":192},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[186,71533,71534,71537,71539],{"class":188,"line":34196},[186,71535,71536],{"class":202},"      tbody.innerHTML ",[186,71538,529],{"class":669},[186,71540,71541],{"class":532}," ''\n",[186,71543,71544],{"class":188,"line":34202},[186,71545,71546],{"class":192},"      \u002F\u002F 遍历数组\n",[186,71548,71549,71551,71553,71555,71557,71559,71561,71563,71565,71567,71569,71571,71573],{"class":188,"line":34208},[186,71550,53731],{"class":669},[186,71552,3126],{"class":202},[186,71554,53294],{"class":669},[186,71556,10901],{"class":202},[186,71558,529],{"class":669},[186,71560,5559],{"class":206},[186,71562,10908],{"class":202},[186,71564,520],{"class":669},[186,71566,53412],{"class":202},[186,71568,53415],{"class":206},[186,71570,4680],{"class":202},[186,71572,3759],{"class":669},[186,71574,13905],{"class":202},[186,71576,71577,71579,71582,71584,71586,71589,71591,71594],{"class":188,"line":34228},[186,71578,62711],{"class":669},[186,71580,71581],{"class":206}," tr",[186,71583,15027],{"class":669},[186,71585,55841],{"class":202},[186,71587,71588],{"class":198},"createElement",[186,71590,832],{"class":202},[186,71592,71593],{"class":532},"'tr'",[186,71595,1629],{"class":202},[186,71597,71598,71601,71603],{"class":188,"line":34234},[186,71599,71600],{"class":202},"        tr.innerHTML ",[186,71602,529],{"class":669},[186,71604,71605],{"class":532}," `\n",[186,71607,71608,71611,71613,71615,71617,71620,71623],{"class":188,"line":34250},[186,71609,71610],{"class":532},"        \u003Ctd>${",[186,71612,5346],{"class":202},[186,71614,2498],{"class":532},[186,71616,2051],{"class":202},[186,71618,71619],{"class":532},"].",[186,71621,71622],{"class":202},"stuID",[186,71624,71625],{"class":532},"}\u003C\u002Ftd>\n",[186,71627,71628,71631,71633,71635,71637,71639,71642],{"class":188,"line":34256},[186,71629,71630],{"class":532},"          \u003Ctd>${",[186,71632,5346],{"class":202},[186,71634,2498],{"class":532},[186,71636,2051],{"class":202},[186,71638,71619],{"class":532},[186,71640,71641],{"class":202},"uname",[186,71643,71625],{"class":532},[186,71645,71646,71648,71650,71652,71654,71656,71659],{"class":188,"line":34270},[186,71647,71630],{"class":532},[186,71649,5346],{"class":202},[186,71651,2498],{"class":532},[186,71653,2051],{"class":202},[186,71655,71619],{"class":532},[186,71657,71658],{"class":202},"age",[186,71660,71625],{"class":532},[186,71662,71663,71665,71667,71669,71671,71673,71676],{"class":188,"line":34276},[186,71664,71630],{"class":532},[186,71666,5346],{"class":202},[186,71668,2498],{"class":532},[186,71670,2051],{"class":202},[186,71672,71619],{"class":532},[186,71674,71675],{"class":202},"gender",[186,71677,71625],{"class":532},[186,71679,71680,71682,71684,71686,71688,71690,71693],{"class":188,"line":34291},[186,71681,71630],{"class":532},[186,71683,5346],{"class":202},[186,71685,2498],{"class":532},[186,71687,2051],{"class":202},[186,71689,71619],{"class":532},[186,71691,71692],{"class":202},"salary",[186,71694,71625],{"class":532},[186,71696,71697,71699,71701,71703,71705,71707,71710],{"class":188,"line":34297},[186,71698,71630],{"class":532},[186,71700,5346],{"class":202},[186,71702,2498],{"class":532},[186,71704,2051],{"class":202},[186,71706,71619],{"class":532},[186,71708,71709],{"class":202},"city",[186,71711,71625],{"class":532},[186,71713,71714],{"class":188,"line":34306},[186,71715,71030],{"class":532},[186,71717,71718,71721,71723],{"class":188,"line":34312},[186,71719,71720],{"class":532},"            \u003Ca href=\"javascript:\" data-id=${",[186,71722,2051],{"class":202},[186,71724,71725],{"class":532},"}>删除\u003C\u002Fa>\n",[186,71727,71728],{"class":188,"line":34321},[186,71729,71730],{"class":532},"          \u003C\u002Ftd> \n",[186,71732,71733],{"class":188,"line":34327},[186,71734,71735],{"class":532},"          `\n",[186,71737,71738],{"class":188,"line":34333},[186,71739,71740],{"class":192},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[186,71742,71743,71746,71749],{"class":188,"line":34342},[186,71744,71745],{"class":202},"        tbody.",[186,71747,71748],{"class":198},"appendChild",[186,71750,71751],{"class":202},"(tr)\n",[186,71753,71754],{"class":188,"line":34348},[186,71755,53845],{"class":202},[186,71757,71758],{"class":188,"line":34359},[186,71759,3654],{"class":202},[186,71761,71762],{"class":188,"line":34365},[186,71763,3867],{"emptyLinePlaceholder":1551},[186,71765,71766],{"class":188,"line":34384},[186,71767,71768],{"class":192},"    \u002F\u002F 3.删除委托\n",[186,71770,71771],{"class":188,"line":34390},[186,71772,71773],{"class":192},"    \u002F\u002F 3.1 事件委托 tbody\n",[186,71775,71776,71779,71781,71783,71785,71787,71789,71791,71793],{"class":188,"line":34401},[186,71777,71778],{"class":202},"    tbody.",[186,71780,59254],{"class":198},[186,71782,832],{"class":202},[186,71784,59259],{"class":532},[186,71786,13898],{"class":202},[186,71788,55894],{"class":669},[186,71790,3126],{"class":202},[186,71792,1694],{"class":835},[186,71794,13905],{"class":202},[186,71796,71797,71799,71801,71803,71805],{"class":188,"line":34407},[186,71798,55925],{"class":669},[186,71800,68471],{"class":202},[186,71802,55931],{"class":669},[186,71804,69693],{"class":532},[186,71806,13905],{"class":202},[186,71808,71809],{"class":188,"line":34427},[186,71810,71811],{"class":192},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[186,71813,71814],{"class":188,"line":34443},[186,71815,71816],{"class":192},"        \u002F\u002F console.log(e.target.dataset.id);\n",[186,71818,71819],{"class":188,"line":34449},[186,71820,71821],{"class":192},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[186,71823,71824,71827,71829,71832,71834],{"class":188,"line":34463},[186,71825,71826],{"class":202},"        arr.",[186,71828,59451],{"class":198},[186,71830,71831],{"class":202},"(e.target.dataset.id, ",[186,71833,1829],{"class":206},[186,71835,1629],{"class":202},[186,71837,71838],{"class":188,"line":34469},[186,71839,71840],{"class":192},"        \u002F\u002F 重新渲染一次\n",[186,71842,71843,71846],{"class":188,"line":34475},[186,71844,71845],{"class":198},"        render",[186,71847,3443],{"class":202},[186,71849,71850],{"class":188,"line":34486},[186,71851,53845],{"class":202},[186,71853,71854],{"class":188,"line":34492},[186,71855,34916],{"class":202},[186,71857,71858,71860,71862],{"class":188,"line":34498},[186,71859,53864],{"class":202},[186,71861,53260],{"class":523},[186,71863,552],{"class":202},[186,71865,71866],{"class":188,"line":34508},[186,71867,3867],{"emptyLinePlaceholder":1551},[186,71869,71870,71872,71874],{"class":188,"line":34514},[186,71871,1470],{"class":202},[186,71873,53247],{"class":523},[186,71875,552],{"class":202},[186,71877,71878],{"class":188,"line":34525},[186,71879,3867],{"emptyLinePlaceholder":1551},[186,71881,71882,71884,71886],{"class":188,"line":34531},[186,71883,1470],{"class":202},[186,71885,52089],{"class":523},[186,71887,552],{"class":202},[169,71889,71890],{},"样式：",[176,71892,71896],{"className":71893,"code":71894,"language":71895,"meta":181,"style":181},"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",[183,71897,71898,71903,71913,71922,71926,71930,71935,71945,71950,71954,71959,71969,71974,71983,71987,71991,71996,72001,72010,72020,72025,72029,72034,72043,72052,72057,72067,72077,72081,72086,72094,72098,72103,72108,72113,72121,72130,72134,72139,72148,72152,72157,72166,72170,72175,72184,72193,72201,72205,72210,72219,72228,72237,72247,72253,72262,72272,72282,72286,72291,72300,72308,72318,72326,72335,72344,72354,72362,72366,72371,72380],{"__ignoreMap":181},[186,71899,71900],{"class":188,"line":189},[186,71901,71902],{"class":202},"* {\n",[186,71904,71905,71908,71910],{"class":188,"line":49},[186,71906,71907],{"class":523},"  margin",[186,71909,210],{"class":202},[186,71911,71912],{"class":532},"0;\n",[186,71914,71915,71918,71920],{"class":188,"line":219},[186,71916,71917],{"class":532},"  padding",[186,71919,210],{"class":202},[186,71921,71912],{"class":532},[186,71923,71924],{"class":188,"line":225},[186,71925,639],{"class":202},[186,71927,71928],{"class":188,"line":242},[186,71929,3867],{"emptyLinePlaceholder":1551},[186,71931,71932],{"class":188,"line":248},[186,71933,71934],{"class":532},"a {\n",[186,71936,71937,71940,71942],{"class":188,"line":265},[186,71938,71939],{"class":523},"  text-decoration",[186,71941,210],{"class":202},[186,71943,71944],{"class":532},"none;\n",[186,71946,71947],{"class":188,"line":271},[186,71948,71949],{"class":532},"  color:#721c24;\n",[186,71951,71952],{"class":188,"line":288},[186,71953,639],{"class":202},[186,71955,71956],{"class":188,"line":294},[186,71957,71958],{"class":532},"h1 {\n",[186,71960,71961,71964,71966],{"class":188,"line":1212},[186,71962,71963],{"class":523},"  text-align",[186,71965,210],{"class":202},[186,71967,71968],{"class":532},"center;\n",[186,71970,71971],{"class":188,"line":1223},[186,71972,71973],{"class":532},"  color:#333;\n",[186,71975,71976,71978,71980],{"class":188,"line":1236},[186,71977,71907],{"class":523},[186,71979,210],{"class":202},[186,71981,71982],{"class":532},"20px 0;\n",[186,71984,71985],{"class":188,"line":3096},[186,71986,4141],{"class":202},[186,71988,71989],{"class":188,"line":3110},[186,71990,639],{"class":202},[186,71992,71993],{"class":188,"line":3115},[186,71994,71995],{"class":532},"table {\n",[186,71997,71998],{"class":188,"line":3121},[186,71999,72000],{"class":532},"  margin:0 auto;\n",[186,72002,72003,72005,72007],{"class":188,"line":3142},[186,72004,796],{"class":523},[186,72006,210],{"class":202},[186,72008,72009],{"class":532},"800px;\n",[186,72011,72012,72015,72017],{"class":188,"line":3147},[186,72013,72014],{"class":523},"  border-collapse",[186,72016,210],{"class":202},[186,72018,72019],{"class":532},"collapse;\n",[186,72021,72022],{"class":188,"line":3161},[186,72023,72024],{"class":532},"  color:#004085;\n",[186,72026,72027],{"class":188,"line":3166},[186,72028,639],{"class":202},[186,72030,72031],{"class":188,"line":3195},[186,72032,72033],{"class":532},"th {\n",[186,72035,72036,72038,72040],{"class":188,"line":3200},[186,72037,71917],{"class":523},[186,72039,210],{"class":202},[186,72041,72042],{"class":532},"10px;\n",[186,72044,72045,72047,72049],{"class":188,"line":3217},[186,72046,824],{"class":523},[186,72048,210],{"class":202},[186,72050,72051],{"class":192},"#cfe5ff;\n",[186,72053,72054],{"class":188,"line":3222},[186,72055,72056],{"class":202},"  \n",[186,72058,72059,72062,72064],{"class":188,"line":3227},[186,72060,72061],{"class":523},"  font-size",[186,72063,210],{"class":202},[186,72065,72066],{"class":532},"20px;\n",[186,72068,72069,72072,72074],{"class":188,"line":3232},[186,72070,72071],{"class":523},"  font-weight",[186,72073,210],{"class":202},[186,72075,72076],{"class":532},"400;\n",[186,72078,72079],{"class":188,"line":3246},[186,72080,639],{"class":202},[186,72082,72083],{"class":188,"line":3251},[186,72084,72085],{"class":532},"td,th {\n",[186,72087,72088,72091],{"class":188,"line":4044},[186,72089,72090],{"class":532},"  border:1px solid",[186,72092,72093],{"class":192}," #b8daff;\n",[186,72095,72096],{"class":188,"line":4058},[186,72097,639],{"class":202},[186,72099,72100],{"class":188,"line":4066},[186,72101,72102],{"class":532},"td {\n",[186,72104,72105],{"class":188,"line":4071},[186,72106,72107],{"class":532},"  padding:10px;\n",[186,72109,72110],{"class":188,"line":4077},[186,72111,72112],{"class":532},"  color:#666;\n",[186,72114,72115,72117,72119],{"class":188,"line":4083},[186,72116,71963],{"class":523},[186,72118,210],{"class":202},[186,72120,71968],{"class":532},[186,72122,72123,72125,72127],{"class":188,"line":4088},[186,72124,72061],{"class":523},[186,72126,210],{"class":202},[186,72128,72129],{"class":532},"16px;\n",[186,72131,72132],{"class":188,"line":9411},[186,72133,639],{"class":202},[186,72135,72136],{"class":188,"line":9435},[186,72137,72138],{"class":532},"tbody tr {\n",[186,72140,72141,72143,72145],{"class":188,"line":9440},[186,72142,824],{"class":523},[186,72144,210],{"class":202},[186,72146,72147],{"class":192},"#fff;\n",[186,72149,72150],{"class":188,"line":9446},[186,72151,639],{"class":202},[186,72153,72154],{"class":188,"line":9473},[186,72155,72156],{"class":532},"tbody tr:hover {\n",[186,72158,72159,72161,72163],{"class":188,"line":9478},[186,72160,824],{"class":523},[186,72162,210],{"class":202},[186,72164,72165],{"class":192},"#e1ecf8;\n",[186,72167,72168],{"class":188,"line":9484},[186,72169,639],{"class":202},[186,72171,72172],{"class":188,"line":9496},[186,72173,72174],{"class":532},".info {\n",[186,72176,72177,72179,72181],{"class":188,"line":9508},[186,72178,796],{"class":523},[186,72180,210],{"class":202},[186,72182,72183],{"class":532},"900px;\n",[186,72185,72186,72188,72190],{"class":188,"line":9520},[186,72187,71907],{"class":523},[186,72189,210],{"class":202},[186,72191,72192],{"class":532},"50px auto;\n",[186,72194,72195,72197,72199],{"class":188,"line":11179},[186,72196,71963],{"class":523},[186,72198,210],{"class":202},[186,72200,71968],{"class":532},[186,72202,72203],{"class":188,"line":11204},[186,72204,639],{"class":202},[186,72206,72207],{"class":188,"line":11227},[186,72208,72209],{"class":532},".info  input, .info select {\n",[186,72211,72212,72214,72216],{"class":188,"line":11251},[186,72213,796],{"class":523},[186,72215,210],{"class":202},[186,72217,72218],{"class":532},"80px;\n",[186,72220,72221,72223,72225],{"class":188,"line":11256},[186,72222,811],{"class":523},[186,72224,210],{"class":202},[186,72226,72227],{"class":532},"27px;\n",[186,72229,72230,72233,72235],{"class":188,"line":11261},[186,72231,72232],{"class":523},"  outline",[186,72234,210],{"class":202},[186,72236,71944],{"class":532},[186,72238,72239,72242,72244],{"class":188,"line":11266},[186,72240,72241],{"class":523},"  border-radius",[186,72243,210],{"class":202},[186,72245,72246],{"class":532},"5px;\n",[186,72248,72249,72251],{"class":188,"line":11275},[186,72250,72090],{"class":532},[186,72252,72093],{"class":192},[186,72254,72255,72258,72260],{"class":188,"line":11280},[186,72256,72257],{"class":523},"  padding-left",[186,72259,210],{"class":202},[186,72261,72246],{"class":532},[186,72263,72264,72267,72269],{"class":188,"line":11286},[186,72265,72266],{"class":523},"  box-sizing",[186,72268,210],{"class":202},[186,72270,72271],{"class":532},"border-box;\n",[186,72273,72274,72277,72279],{"class":188,"line":11307},[186,72275,72276],{"class":523},"  margin-right",[186,72278,210],{"class":202},[186,72280,72281],{"class":532},"15px;\n",[186,72283,72284],{"class":188,"line":11313},[186,72285,639],{"class":202},[186,72287,72288],{"class":188,"line":11327},[186,72289,72290],{"class":532},".info button {\n",[186,72292,72293,72295,72297],{"class":188,"line":11333},[186,72294,796],{"class":523},[186,72296,210],{"class":202},[186,72298,72299],{"class":532},"60px;\n",[186,72301,72302,72304,72306],{"class":188,"line":11360},[186,72303,811],{"class":523},[186,72305,210],{"class":202},[186,72307,72227],{"class":532},[186,72309,72310,72313,72315],{"class":188,"line":11369},[186,72311,72312],{"class":523},"  background-color",[186,72314,210],{"class":202},[186,72316,72317],{"class":192},"#004085;\n",[186,72319,72320,72322,72324],{"class":188,"line":11375},[186,72321,72232],{"class":523},[186,72323,210],{"class":202},[186,72325,71944],{"class":532},[186,72327,72328,72331,72333],{"class":188,"line":11383},[186,72329,72330],{"class":523},"  border",[186,72332,210],{"class":202},[186,72334,71912],{"class":532},[186,72336,72337,72340,72342],{"class":188,"line":11388},[186,72338,72339],{"class":523},"  color",[186,72341,210],{"class":202},[186,72343,72147],{"class":192},[186,72345,72346,72349,72351],{"class":188,"line":18065},[186,72347,72348],{"class":523},"  cursor",[186,72350,210],{"class":202},[186,72352,72353],{"class":532},"pointer;\n",[186,72355,72356,72358,72360],{"class":188,"line":18071},[186,72357,72241],{"class":523},[186,72359,210],{"class":202},[186,72361,72246],{"class":532},[186,72363,72364],{"class":188,"line":18094},[186,72365,639],{"class":202},[186,72367,72368],{"class":188,"line":18100},[186,72369,72370],{"class":532},".info .age {\n",[186,72372,72373,72375,72377],{"class":188,"line":18123},[186,72374,796],{"class":523},[186,72376,210],{"class":202},[186,72378,72379],{"class":532},"50px;\n",[186,72381,72382],{"class":188,"line":18137},[186,72383,639],{"class":202},[169,72385,72386],{},"思路：",[169,72388,72389],{},[164,72390],{"alt":181,"src":72391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[169,72393,72394],{},[164,72395],{"alt":181,"src":72396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[169,72398,72399],{},[164,72400],{"alt":181,"src":72401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[29,72403,72405],{"id":72404},"_3315-重绘回流","3.3.15 重绘回流",[169,72407,72408],{},[164,72409],{"alt":181,"src":72410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[169,72412,72413],{},[164,72414],{"alt":181,"src":72415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[169,72417,72418],{},[164,72419],{"alt":181,"src":72420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72422,72424],{"id":72423},"_34-bom","3.4 BOM",[169,72426,72427],{},[164,72428],{"alt":181,"src":72429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[169,72431,72432],{},"平时写的document省略了window而已，实际上是window.document",[169,72434,72435],{},"函数也是这样，调用的时候实际为window.fn()",[169,72437,72438],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[169,72440,72441],{},"window大部分情况下可以省略",[29,72443,72445],{"id":72444},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[169,72447,72448],{},"只执行一次",[169,72450,72451],{},[164,72452],{"alt":181,"src":72453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[169,72455,72456],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[169,72458,72459],{},[164,72460],{"alt":181,"src":72461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[29,72463,72465],{"id":72464},"_342-js执行机制","3.4.2 JS执行机制",[169,72467,72468],{},[164,72469],{"alt":181,"src":72470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[169,72472,72473],{},"两个的结果都是1111 3333 2222",[169,72475,72476],{},[164,72477],{"alt":181,"src":72478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[169,72480,72481],{},[164,72482],{"alt":181,"src":72483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[169,72485,72486],{},[164,72487],{"alt":181,"src":72488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[169,72490,72491],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[169,72493,72494],{},"工作流程：",[169,72496,72497],{},[164,72498],{"alt":181,"src":72499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[169,72501,72502],{},[164,72503],{"alt":181,"src":72504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[169,72506,72507],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[169,72509,72510],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[29,72512,72514],{"id":72513},"_343-location对象","3.4.3 location对象",[169,72516,72517],{},"location对象属于window这个全局对象下的，可以 省略window",[169,72519,72520],{},[164,72521],{"alt":181,"src":72522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[169,72524,72525],{},"href可以跳转页面",[34,72527,72528],{},[22,72529,72530],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[169,72532,72533],{},"search得到提交信息之后网站后边的地址",[169,72535,72536],{},[164,72537],{"alt":181,"src":72538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[169,72540,72541],{},[164,72542],{"alt":181,"src":72543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[34,72545,72546],{"start":49},[22,72547,72548],{},"hash:这个获取单页面应用#后边的地址",[169,72550,72551],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[169,72553,72554],{},[164,72555],{"alt":181,"src":72556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[176,72558,72560],{"className":54514,"code":72559,"language":54516,"meta":181,"style":181},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[183,72561,72562,72582,72602],{"__ignoreMap":181},[186,72563,72564,72566,72568,72570,72572,72575,72578,72580],{"class":188,"line":189},[186,72565,53591],{"class":202},[186,72567,948],{"class":523},[186,72569,62498],{"class":198},[186,72571,529],{"class":202},[186,72573,72574],{"class":532},"\"#\u002Fmy\"",[186,72576,72577],{"class":202},">我的\u003C\u002F",[186,72579,948],{"class":523},[186,72581,552],{"class":202},[186,72583,72584,72586,72588,72590,72592,72595,72598,72600],{"class":188,"line":49},[186,72585,53591],{"class":202},[186,72587,948],{"class":523},[186,72589,62498],{"class":198},[186,72591,529],{"class":202},[186,72593,72594],{"class":532},"\"#\u002Ffriend\"",[186,72596,72597],{"class":202},">关注\u003C\u002F",[186,72599,948],{"class":523},[186,72601,552],{"class":202},[186,72603,72604,72606,72608,72610,72612,72615,72618,72620],{"class":188,"line":219},[186,72605,53591],{"class":202},[186,72607,948],{"class":523},[186,72609,62498],{"class":198},[186,72611,529],{"class":202},[186,72613,72614],{"class":532},"\"#\u002Fdownload\"",[186,72616,72617],{"class":202},">下载\u003C\u002F",[186,72619,948],{"class":523},[186,72621,552],{"class":202},[169,72623,72624],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[34,72626,72627],{"start":219},[22,72628,72629,72630,72632,72633,72635],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[726,72631],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[726,72634],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[29,72637,72639],{"id":72638},"_345-navigator对象","3.4.5 navigator对象",[169,72641,72642],{},[164,72643],{"alt":181,"src":72644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[176,72646,72650],{"className":72647,"code":72648,"language":72649,"meta":181,"style":181},"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",[183,72651,72652,72657,72668,72680,72685,72736,72777,72782,72795,72807,72812],{"__ignoreMap":181},[186,72653,72654],{"class":188,"line":189},[186,72655,72656],{"class":192},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[186,72658,72659,72661,72663,72665],{"class":188,"line":49},[186,72660,1838],{"class":669},[186,72662,832],{"class":202},[186,72664,55894],{"class":669},[186,72666,72667],{"class":202}," () { \n",[186,72669,72670,72672,72675,72677],{"class":188,"line":219},[186,72671,8255],{"class":669},[186,72673,72674],{"class":206}," userAgent",[186,72676,15027],{"class":669},[186,72678,72679],{"class":202}," navigator.userAgent \n",[186,72681,72682],{"class":188,"line":225},[186,72683,72684],{"class":192},"\u002F\u002F 验证是否为Android或iPhone \n",[186,72686,72687,72689,72692,72694,72697,72700,72702,72704,72707,72709,72712,72716,72718,72720,72722,72725,72727,72729,72731,72733],{"class":188,"line":242},[186,72688,8255],{"class":669},[186,72690,72691],{"class":206}," android",[186,72693,15027],{"class":669},[186,72695,72696],{"class":202}," userAgent.",[186,72698,72699],{"class":198},"match",[186,72701,832],{"class":202},[186,72703,2194],{"class":532},[186,72705,72706],{"class":49431},"(Android);",[186,72708,2593],{"class":669},[186,72710,72711],{"class":206},"[\\s",[186,72713,72715],{"class":72714},"snhLl","\\\u002F",[186,72717,2547],{"class":206},[186,72719,2091],{"class":669},[186,72721,832],{"class":49431},[186,72723,72724],{"class":206},"[\\d.]",[186,72726,2091],{"class":669},[186,72728,2039],{"class":49431},[186,72730,2593],{"class":669},[186,72732,2194],{"class":532},[186,72734,72735],{"class":202},") \n",[186,72737,72738,72740,72743,72745,72747,72749,72751,72753,72756,72759,72762,72764,72766,72769,72771,72773,72775],{"class":188,"line":248},[186,72739,8255],{"class":669},[186,72741,72742],{"class":206}," iphone",[186,72744,15027],{"class":669},[186,72746,72696],{"class":202},[186,72748,72699],{"class":198},[186,72750,832],{"class":202},[186,72752,2194],{"class":532},[186,72754,72755],{"class":49431},"(iPhone",[186,72757,72758],{"class":206},"\\s",[186,72760,72761],{"class":49431},"OS)",[186,72763,72758],{"class":206},[186,72765,832],{"class":49431},[186,72767,72768],{"class":206},"[\\d_]",[186,72770,2091],{"class":669},[186,72772,2039],{"class":49431},[186,72774,2194],{"class":532},[186,72776,72735],{"class":202},[186,72778,72779],{"class":188,"line":265},[186,72780,72781],{"class":192},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[186,72783,72784,72786,72789,72792],{"class":188,"line":271},[186,72785,3003],{"class":669},[186,72787,72788],{"class":202}," (android ",[186,72790,72791],{"class":669},"||",[186,72793,72794],{"class":202}," iphone) { \n",[186,72796,72797,72800,72802,72805],{"class":188,"line":288},[186,72798,72799],{"class":202},"location.href ",[186,72801,529],{"class":669},[186,72803,72804],{"class":532}," 'http:\u002F\u002Fm.itcast.cn'",[186,72806,4141],{"class":202},[186,72808,72809],{"class":188,"line":294},[186,72810,72811],{"class":202},"} \n",[186,72813,72814],{"class":188,"line":1212},[186,72815,72816],{"class":202},"})()\n",[29,72818,72820],{"id":72819},"_346-histroy对象","3.4.6 histroy对象",[169,72822,72823],{},[164,72824],{"alt":181,"src":72825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[169,72827,72828],{},"浏览器地址的前进与后退!!!",[169,72830,72831],{},"history.back() 等效于 history.go(-1)",[169,72833,72834],{},"history.forward() 等效于 history.go(1)",[14,72836,72838],{"id":72837},"_35-本地存储","3.5 本地存储",[34,72840,72841,72844,72847],{},[22,72842,72843],{},"数据存储在用户浏览器中",[22,72845,72846],{},"设置、读取方便、甚至页面刷新不丢失数据",[22,72848,72849],{},"容量较大，sessionStorage和localStorage约 5M 左右",[29,72851,72853],{"id":72852},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[169,72855,72856],{},"只能存储字符串",[169,72858,72859],{},[164,72860],{"alt":181,"src":72861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[169,72863,72864],{},[164,72865],{"alt":181,"src":72866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[169,72868,72869],{},"键值对要加引号,不然就会当变量来看了",[169,72871,72872],{},"localStorage.setItem('uname', 'pink')",[169,72874,72875],{},"刷新之后信息不再丢失",[169,72877,72878],{},"操作key,value会跟着变",[169,72880,72881],{},"删除只删除键就可以,即名字",[169,72883,72872],{},[169,72885,72886],{},"改:",[169,72888,72889],{},"localStorage.setItem('uname','red')",[169,72891,72892],{},"有这个键就是改,没有这个键就是改",[169,72894,72895],{},[164,72896],{"alt":181,"src":72897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[169,72899,72900],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[169,72902,72903],{},[164,72904],{"alt":181,"src":72905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[169,72907,72908],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[29,72910,72912],{"id":72911},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[169,72914,72915],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[169,72917,72918],{},"特性:",[34,72920,72921,72924,72927,72930],{},[22,72922,72923],{},"生命周期为关闭浏览器窗口",[22,72925,72926],{},"在同一个窗口(页面)下数据可以共享",[22,72928,72929],{},"以键值对的形式存储使用",[22,72931,72932],{},"用法跟localStorage 基本相同",[29,72934,72936],{"id":72935},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[169,72938,72939],{},"本地只能存储字符串,无法直接存储复杂数据类型",[176,72941,72943],{"className":54514,"code":72942,"language":54516,"meta":181,"style":181},"\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",[183,72944,72945,72953,72958,72963,72968,72973,72977,72982,72987],{"__ignoreMap":181},[186,72946,72947,72949,72951],{"class":188,"line":189},[186,72948,520],{"class":202},[186,72950,53260],{"class":523},[186,72952,552],{"class":202},[186,72954,72955],{"class":188,"line":49},[186,72956,72957],{"class":202},"    const obj = {\n",[186,72959,72960],{"class":188,"line":219},[186,72961,72962],{"class":202},"      uname: 'pink老师',\n",[186,72964,72965],{"class":188,"line":225},[186,72966,72967],{"class":202},"      age: 18,\n",[186,72969,72970],{"class":188,"line":242},[186,72971,72972],{"class":202},"      gender: '女'\n",[186,72974,72975],{"class":188,"line":248},[186,72976,3654],{"class":202},[186,72978,72979],{"class":188,"line":265},[186,72980,72981],{"class":202},"    \u002F\u002F 存储复杂数据类型\n",[186,72983,72984],{"class":188,"line":271},[186,72985,72986],{"class":202},"    localStorage.setItem('obj', obj)\n",[186,72988,72989,72991,72993],{"class":188,"line":288},[186,72990,53864],{"class":202},[186,72992,53260],{"class":523},[186,72994,552],{"class":202},[169,72996,72997],{},[164,72998],{"alt":181,"src":72999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[169,73001,73002],{},"如果获取一下数据:",[169,73004,73005],{},"log(localStorage.getItem('obj'))",[169,73007,73008],{},[164,73009],{"alt":181,"src":73010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[169,73012,73013],{},"发现直接存对象是使用不了的!!!",[23459,73015,73017],{"id":73016},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[169,73019,73020],{},[164,73021],{"alt":181,"src":73022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[176,73024,73026],{"className":52087,"code":73025,"language":52089,"meta":181,"style":181},"\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",[183,73027,73028,73036,73046,73056,73065,73073,73077,73081,73107,73126,73134,73138,73143,73148],{"__ignoreMap":181},[186,73029,73030,73032,73034],{"class":188,"line":189},[186,73031,520],{"class":202},[186,73033,53260],{"class":523},[186,73035,552],{"class":202},[186,73037,73038,73040,73042,73044],{"class":188,"line":49},[186,73039,12684],{"class":669},[186,73041,71408],{"class":206},[186,73043,15027],{"class":669},[186,73045,622],{"class":202},[186,73047,73048,73051,73054],{"class":188,"line":219},[186,73049,73050],{"class":202},"      uname: ",[186,73052,73053],{"class":532},"'pink老师'",[186,73055,32921],{"class":202},[186,73057,73058,73061,73063],{"class":188,"line":225},[186,73059,73060],{"class":202},"      age: ",[186,73062,2260],{"class":206},[186,73064,32921],{"class":202},[186,73066,73067,73070],{"class":188,"line":242},[186,73068,73069],{"class":202},"      gender: ",[186,73071,73072],{"class":532},"'女'\n",[186,73074,73075],{"class":188,"line":248},[186,73076,3654],{"class":202},[186,73078,73079],{"class":188,"line":265},[186,73080,72981],{"class":192},[186,73082,73083,73086,73089,73091,73094,73096,73099,73101,73104],{"class":188,"line":271},[186,73084,73085],{"class":202},"  localStorage.",[186,73087,73088],{"class":198},"setItem",[186,73090,832],{"class":202},[186,73092,73093],{"class":532},"'obj'",[186,73095,13898],{"class":202},[186,73097,73098],{"class":206},"JSON",[186,73100,2168],{"class":202},[186,73102,73103],{"class":198},"stringify",[186,73105,73106],{"class":202},"(obj))\n",[186,73108,73109,73112,73114,73117,73120,73122,73124],{"class":188,"line":288},[186,73110,73111],{"class":202},"  console.",[186,73113,59688],{"class":198},[186,73115,73116],{"class":202},"(localStorage.",[186,73118,73119],{"class":198},"getItem",[186,73121,832],{"class":202},[186,73123,73093],{"class":532},[186,73125,31952],{"class":202},[186,73127,73128,73130,73132],{"class":188,"line":294},[186,73129,53864],{"class":202},[186,73131,53260],{"class":523},[186,73133,552],{"class":202},[186,73135,73136],{"class":188,"line":1212},[186,73137,72056],{"class":202},[186,73139,73140],{"class":188,"line":1223},[186,73141,73142],{"class":202},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[186,73144,73145],{"class":188,"line":1236},[186,73146,73147],{"class":202},"  类型是字符串的\n",[186,73149,73150],{"class":188,"line":3096},[186,73151,73152],{"class":202},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23459,73154,73156],{"id":73155},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[169,73158,73159],{},[164,73160],{"alt":181,"src":73161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[169,73163,73164],{},[164,73165],{"alt":181,"src":73166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[176,73168,73170],{"className":54514,"code":73169,"language":54516,"meta":181,"style":181},"  \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",[183,73171,73172,73180,73184,73188,73192,73196,73200,73205,73210,73215,73220,73225,73230,73235,73240],{"__ignoreMap":181},[186,73173,73174,73176,73178],{"class":188,"line":189},[186,73175,53591],{"class":202},[186,73177,53260],{"class":523},[186,73179,552],{"class":202},[186,73181,73182],{"class":188,"line":49},[186,73183,72957],{"class":202},[186,73185,73186],{"class":188,"line":219},[186,73187,72962],{"class":202},[186,73189,73190],{"class":188,"line":225},[186,73191,72967],{"class":202},[186,73193,73194],{"class":188,"line":242},[186,73195,72972],{"class":202},[186,73197,73198],{"class":188,"line":248},[186,73199,3654],{"class":202},[186,73201,73202],{"class":188,"line":265},[186,73203,73204],{"class":202},"    \u002F\u002F 1.存储复杂数据类型\n",[186,73206,73207],{"class":188,"line":271},[186,73208,73209],{"class":202},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[186,73211,73212],{"class":188,"line":288},[186,73213,73214],{"class":202},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[186,73216,73217],{"class":188,"line":294},[186,73218,73219],{"class":202},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[186,73221,73222],{"class":188,"line":1212},[186,73223,73224],{"class":202},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[186,73226,73227],{"class":188,"line":1223},[186,73228,73229],{"class":202},"    \u002F\u002F 取\n",[186,73231,73232],{"class":188,"line":1236},[186,73233,73234],{"class":202},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[186,73236,73237],{"class":188,"line":3096},[186,73238,73239],{"class":202},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[186,73241,73242,73244,73246],{"class":188,"line":3110},[186,73243,53864],{"class":202},[186,73245,53260],{"class":523},[186,73247,552],{"class":202},[169,73249,73250],{},[164,73251],{"alt":181,"src":73252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[29,73254,73256],{"id":73255},"_356-数组map方法","3.5.6 数组map方法",[169,73258,73259],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[169,73261,73262],{},[164,73263],{"alt":181,"src":73264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[169,73266,73267],{},[164,73268],{"alt":181,"src":73269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[169,73271,73272,73275],{},[54,73273,73274],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[169,73277,73278],{},"map有返回值，但是forEach没有返回值",[169,73280,73281],{},"map是个方法。用的时候要加 ()",[169,73283,73284],{},"map返回的是一个数组",[29,73286,73288],{"id":73287},"_357-数组中join方法","3.5.7 数组中join方法",[169,73290,73291],{},[164,73292],{"alt":181,"src":73293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[169,73295,73296],{},"类似于python中拼接字符串一样！",[34,73298,73299,73302,73305],{},[22,73300,73301],{},"小括号为空则逗号分开",[22,73303,73304],{},"小括号为空字符串 ''，则元素之间没有分隔符",[22,73306,73307],{},"小括号用啥符号就用进行分割",[29,73309,73311],{"id":73310},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[34,73313,73314,73317,73320,73323,73326],{},[22,73315,73316],{},"记住本地时间获取快速方式：new Date().toDateString()",[22,73318,73319],{},"尽量减少DOM操作，用好map+join的渲染方式",[22,73321,73322],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[22,73324,73325],{},"return可以实现函数的结束",[22,73327,73328],{},"禁止跳转是 preventDefault() 不要忘记",[176,73330,73332],{"className":52087,"code":73331,"language":52089,"meta":181,"style":181},"\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",[183,73333,73334,73344,73358,73362,73370,73384,73404,73416,73424,73430,73440,73450,73454,73458,73464,73474,73486,73490,73494,73501,73513,73527,73537,73541,73545,73552,73559,73566,73578,73590,73600,73612,73616,73620,73627,73634,73646,73658,73668,73680,73710,73714,73718,73725,73737,73749,73773,73783,73793,73797,73801,73809,73820,73832,73844,73856,73873,73885,73897,73901,73905,73912,73924,73936,73948,73959,73977,73990,74002,74026,74037,74041,74045,74053,74063,74067,74071,74077,74089,74099,74109,74113,74117,74123,74145,74149,74153,74159,74165,74177,74187,74199,74229,74242,74259,74263,74267,74278,74300,74310,74314,74318,74331,74341,74353,74365,74377,74389,74399,74409,74419,74430,74443,74447,74455,74463,74467,74475,74488,74508,74541,74574,74607,74633,74651,74669,74677,74703,74721,74739,74757,74775,74793,74801,74809,74827,74835,74864,74872,74880,74888,74901,74913,74925,74937,74949,74961,74974,74986,74994,75002,75010,75015,75020,75024,75028,75032,75036,75040,75044,75049,75054,75059,75064,75072,75080,75088,75093,75098,75103,75108,75113,75118,75123,75128,75133,75138,75143,75148,75153,75158,75162,75167,75172,75182,75191,75195,75200,75209,75225,75267,75307,75346,75411,75419,75423,75428,75446,75454,75459,75464,75494,75500,75505,75518,75530,75542,75554,75566,75578,75590,75594,75604,75608,75613,75618,75622,75631,75635,75640,75645,75664,75669,75689,75693,75698,75702,75707,75725,75743,75761,75780,75799,75818,75823,75829,75850,75856,75865,75871,75877,75883,75910,75923,75928,75938,75944,75950,75956,75962,75967,75973,75979,75985,75991,76024,76029,76034,76039,76044,76050,76056,76062,76073,76078,76084,76091,76105,76111,76135,76140,76145,76151,76157,76178,76184,76197,76203,76209,76215,76221,76226,76232,76238,76244,76262,76276,76282,76290,76296,76318,76323,76328,76333,76338,76343,76352,76361,76366],{"__ignoreMap":181},[186,73335,73336,73338,73340,73342],{"class":188,"line":189},[186,73337,52751],{"class":202},[186,73339,52754],{"class":523},[186,73341,52757],{"class":198},[186,73343,552],{"class":202},[186,73345,73346,73348,73350,73352,73354,73356],{"class":188,"line":49},[186,73347,520],{"class":202},[186,73349,52089],{"class":523},[186,73351,52768],{"class":198},[186,73353,529],{"class":202},[186,73355,52773],{"class":532},[186,73357,552],{"class":202},[186,73359,73360],{"class":188,"line":219},[186,73361,3867],{"emptyLinePlaceholder":1551},[186,73363,73364,73366,73368],{"class":188,"line":225},[186,73365,520],{"class":202},[186,73367,52786],{"class":523},[186,73369,552],{"class":202},[186,73371,73372,73374,73376,73378,73380,73382],{"class":188,"line":242},[186,73373,53591],{"class":202},[186,73375,52796],{"class":523},[186,73377,52799],{"class":198},[186,73379,529],{"class":202},[186,73381,52804],{"class":532},[186,73383,552],{"class":202},[186,73385,73386,73388,73390,73392,73394,73396,73398,73400,73402],{"class":188,"line":248},[186,73387,53591],{"class":202},[186,73389,52796],{"class":523},[186,73391,16382],{"class":198},[186,73393,529],{"class":202},[186,73395,52843],{"class":532},[186,73397,52823],{"class":198},[186,73399,529],{"class":202},[186,73401,52850],{"class":532},[186,73403,552],{"class":202},[186,73405,73406,73408,73410,73412,73414],{"class":188,"line":265},[186,73407,53591],{"class":202},[186,73409,52859],{"class":523},[186,73411,52862],{"class":202},[186,73413,52859],{"class":523},[186,73415,552],{"class":202},[186,73417,73418,73420,73422],{"class":188,"line":271},[186,73419,53591],{"class":202},[186,73421,1524],{"class":523},[186,73423,552],{"class":202},[186,73425,73426,73428],{"class":188,"line":288},[186,73427,7866],{"class":523},[186,73429,622],{"class":202},[186,73431,73432,73434,73436,73438],{"class":188,"line":294},[186,73433,56140],{"class":206},[186,73435,210],{"class":202},[186,73437,1803],{"class":206},[186,73439,634],{"class":202},[186,73441,73442,73444,73446,73448],{"class":188,"line":1212},[186,73443,56151],{"class":206},[186,73445,210],{"class":202},[186,73447,1803],{"class":206},[186,73449,634],{"class":202},[186,73451,73452],{"class":188,"line":1223},[186,73453,3654],{"class":202},[186,73455,73456],{"class":188,"line":1236},[186,73457,3867],{"emptyLinePlaceholder":1551},[186,73459,73460,73462],{"class":188,"line":3096},[186,73461,58720],{"class":523},[186,73463,622],{"class":202},[186,73465,73466,73468,73470,73472],{"class":188,"line":3110},[186,73467,58727],{"class":206},[186,73469,210],{"class":202},[186,73471,53042],{"class":206},[186,73473,634],{"class":202},[186,73475,73476,73478,73480,73482,73484],{"class":188,"line":3115},[186,73477,63515],{"class":206},[186,73479,210],{"class":202},[186,73481,801],{"class":206},[186,73483,804],{"class":669},[186,73485,634],{"class":202},[186,73487,73488],{"class":188,"line":3121},[186,73489,3654],{"class":202},[186,73491,73492],{"class":188,"line":3142},[186,73493,3867],{"emptyLinePlaceholder":1551},[186,73495,73496,73499],{"class":188,"line":3147},[186,73497,73498],{"class":198},"    .info",[186,73500,622],{"class":202},[186,73502,73503,73505,73507,73509,73511],{"class":188,"line":3161},[186,73504,56215],{"class":206},[186,73506,210],{"class":202},[186,73508,52940],{"class":206},[186,73510,804],{"class":669},[186,73512,634],{"class":202},[186,73514,73515,73517,73519,73521,73523,73525],{"class":188,"line":3166},[186,73516,56151],{"class":206},[186,73518,210],{"class":202},[186,73520,2056],{"class":206},[186,73522,804],{"class":669},[186,73524,53006],{"class":206},[186,73526,634],{"class":202},[186,73528,73529,73531,73533,73535],{"class":188,"line":3195},[186,73530,58727],{"class":206},[186,73532,210],{"class":202},[186,73534,53042],{"class":206},[186,73536,634],{"class":202},[186,73538,73539],{"class":188,"line":3200},[186,73540,3654],{"class":202},[186,73542,73543],{"class":188,"line":3217},[186,73544,3867],{"emptyLinePlaceholder":1551},[186,73546,73547,73550],{"class":188,"line":3222},[186,73548,73549],{"class":198},"    .uname",[186,73551,32921],{"class":202},[186,73553,73554,73557],{"class":188,"line":3227},[186,73555,73556],{"class":198},"    .age",[186,73558,32921],{"class":202},[186,73560,73561,73564],{"class":188,"line":3232},[186,73562,73563],{"class":198},"    .salary",[186,73565,622],{"class":202},[186,73567,73568,73570,73572,73574,73576],{"class":188,"line":3246},[186,73569,56215],{"class":206},[186,73571,210],{"class":202},[186,73573,1922],{"class":206},[186,73575,804],{"class":669},[186,73577,634],{"class":202},[186,73579,73580,73582,73584,73586,73588],{"class":188,"line":3251},[186,73581,56229],{"class":206},[186,73583,210],{"class":202},[186,73585,801],{"class":206},[186,73587,804],{"class":669},[186,73589,634],{"class":202},[186,73591,73592,73594,73596,73598],{"class":188,"line":4044},[186,73593,63218],{"class":206},[186,73595,210],{"class":202},[186,73597,56182],{"class":206},[186,73599,634],{"class":202},[186,73601,73602,73604,73606,73608,73610],{"class":188,"line":4058},[186,73603,63188],{"class":206},[186,73605,210],{"class":202},[186,73607,2185],{"class":206},[186,73609,804],{"class":669},[186,73611,634],{"class":202},[186,73613,73614],{"class":188,"line":4066},[186,73615,3654],{"class":202},[186,73617,73618],{"class":188,"line":4071},[186,73619,3867],{"emptyLinePlaceholder":1551},[186,73621,73622,73625],{"class":188,"line":4077},[186,73623,73624],{"class":198},"    .gender",[186,73626,32921],{"class":202},[186,73628,73629,73632],{"class":188,"line":4083},[186,73630,73631],{"class":198},"    .city",[186,73633,622],{"class":202},[186,73635,73636,73638,73640,73642,73644],{"class":188,"line":4088},[186,73637,56215],{"class":206},[186,73639,210],{"class":202},[186,73641,1922],{"class":206},[186,73643,804],{"class":669},[186,73645,634],{"class":202},[186,73647,73648,73650,73652,73654,73656],{"class":188,"line":9411},[186,73649,56229],{"class":206},[186,73651,210],{"class":202},[186,73653,2433],{"class":206},[186,73655,804],{"class":669},[186,73657,634],{"class":202},[186,73659,73660,73662,73664,73666],{"class":188,"line":9435},[186,73661,63218],{"class":206},[186,73663,210],{"class":202},[186,73665,56182],{"class":206},[186,73667,634],{"class":202},[186,73669,73670,73672,73674,73676,73678],{"class":188,"line":9440},[186,73671,63188],{"class":206},[186,73673,210],{"class":202},[186,73675,2185],{"class":206},[186,73677,804],{"class":669},[186,73679,634],{"class":202},[186,73681,73682,73684,73686,73688,73690,73692,73695,73697,73699,73701,73704,73706,73708],{"class":188,"line":9446},[186,73683,63415],{"class":206},[186,73685,210],{"class":202},[186,73687,1829],{"class":206},[186,73689,804],{"class":669},[186,73691,52971],{"class":206},[186,73693,73694],{"class":206}," rgb",[186,73696,832],{"class":202},[186,73698,3190],{"class":206},[186,73700,13898],{"class":202},[186,73702,73703],{"class":206},"197",[186,73705,13898],{"class":202},[186,73707,73703],{"class":206},[186,73709,1112],{"class":202},[186,73711,73712],{"class":188,"line":9473},[186,73713,3654],{"class":202},[186,73715,73716],{"class":188,"line":9478},[186,73717,3867],{"emptyLinePlaceholder":1551},[186,73719,73720,73723],{"class":188,"line":9484},[186,73721,73722],{"class":523},"    button",[186,73724,622],{"class":202},[186,73726,73727,73729,73731,73733,73735],{"class":188,"line":9496},[186,73728,56229],{"class":206},[186,73730,210],{"class":202},[186,73732,2433],{"class":206},[186,73734,804],{"class":669},[186,73736,634],{"class":202},[186,73738,73739,73741,73743,73745,73747],{"class":188,"line":9508},[186,73740,56215],{"class":206},[186,73742,210],{"class":202},[186,73744,2094],{"class":206},[186,73746,804],{"class":669},[186,73748,634],{"class":202},[186,73750,73751,73753,73755,73758,73760,73762,73764,73767,73769,73771],{"class":188,"line":9520},[186,73752,56327],{"class":206},[186,73754,210],{"class":202},[186,73756,73757],{"class":206},"rgb",[186,73759,832],{"class":202},[186,73761,2576],{"class":206},[186,73763,13898],{"class":202},[186,73765,73766],{"class":206},"187",[186,73768,13898],{"class":202},[186,73770,1910],{"class":206},[186,73772,1112],{"class":202},[186,73774,73775,73777,73779,73781],{"class":188,"line":11179},[186,73776,58857],{"class":206},[186,73778,210],{"class":202},[186,73780,62283],{"class":206},[186,73782,634],{"class":202},[186,73784,73785,73787,73789,73791],{"class":188,"line":11204},[186,73786,63415],{"class":206},[186,73788,210],{"class":202},[186,73790,1803],{"class":206},[186,73792,634],{"class":202},[186,73794,73795],{"class":188,"line":11227},[186,73796,3654],{"class":202},[186,73798,73799],{"class":188,"line":11251},[186,73800,3867],{"emptyLinePlaceholder":1551},[186,73802,73803,73805,73807],{"class":188,"line":11256},[186,73804,73722],{"class":523},[186,73806,53137],{"class":523},[186,73808,622],{"class":202},[186,73810,73811,73813,73815,73818],{"class":188,"line":11261},[186,73812,56452],{"class":206},[186,73814,210],{"class":202},[186,73816,73817],{"class":206},"inline-block",[186,73819,634],{"class":202},[186,73821,73822,73824,73826,73828,73830],{"class":188,"line":11266},[186,73823,56215],{"class":206},[186,73825,210],{"class":202},[186,73827,2056],{"class":206},[186,73829,804],{"class":669},[186,73831,634],{"class":202},[186,73833,73834,73836,73838,73840,73842],{"class":188,"line":11275},[186,73835,56229],{"class":206},[186,73837,210],{"class":202},[186,73839,2056],{"class":206},[186,73841,804],{"class":669},[186,73843,634],{"class":202},[186,73845,73846,73848,73850,73852,73854],{"class":188,"line":11280},[186,73847,58800],{"class":206},[186,73849,210],{"class":202},[186,73851,2082],{"class":206},[186,73853,804],{"class":669},[186,73855,634],{"class":202},[186,73857,73858,73860,73862,73864,73866,73868,73871],{"class":188,"line":11286},[186,73859,63415],{"class":206},[186,73861,210],{"class":202},[186,73863,1829],{"class":206},[186,73865,804],{"class":669},[186,73867,52971],{"class":206},[186,73869,73870],{"class":206}," #fff",[186,73872,634],{"class":202},[186,73874,73875,73877,73879,73881,73883],{"class":188,"line":11307},[186,73876,56577],{"class":206},[186,73878,210],{"class":202},[186,73880,1930],{"class":206},[186,73882,804],{"class":669},[186,73884,634],{"class":202},[186,73886,73887,73889,73891,73893,73895],{"class":188,"line":11313},[186,73888,63188],{"class":206},[186,73890,210],{"class":202},[186,73892,1829],{"class":206},[186,73894,804],{"class":669},[186,73896,634],{"class":202},[186,73898,73899],{"class":188,"line":11327},[186,73900,3654],{"class":202},[186,73902,73903],{"class":188,"line":11333},[186,73904,3867],{"emptyLinePlaceholder":1551},[186,73906,73907,73910],{"class":188,"line":11360},[186,73908,73909],{"class":198},"    .total",[186,73911,622],{"class":202},[186,73913,73914,73916,73918,73920,73922],{"class":188,"line":11369},[186,73915,56215],{"class":206},[186,73917,210],{"class":202},[186,73919,63070],{"class":206},[186,73921,804],{"class":669},[186,73923,634],{"class":202},[186,73925,73926,73928,73930,73932,73934],{"class":188,"line":11375},[186,73927,56229],{"class":206},[186,73929,210],{"class":202},[186,73931,2011],{"class":206},[186,73933,804],{"class":669},[186,73935,634],{"class":202},[186,73937,73938,73940,73942,73944,73946],{"class":188,"line":11383},[186,73939,58800],{"class":206},[186,73941,210],{"class":202},[186,73943,2011],{"class":206},[186,73945,804],{"class":669},[186,73947,634],{"class":202},[186,73949,73950,73952,73954,73957],{"class":188,"line":11388},[186,73951,58727],{"class":206},[186,73953,210],{"class":202},[186,73955,73956],{"class":206},"right",[186,73958,634],{"class":202},[186,73960,73961,73963,73965,73967,73969,73971,73973,73975],{"class":188,"line":18065},[186,73962,56151],{"class":206},[186,73964,210],{"class":202},[186,73966,2011],{"class":206},[186,73968,804],{"class":669},[186,73970,53006],{"class":206},[186,73972,3505],{"class":206},[186,73974,804],{"class":669},[186,73976,634],{"class":202},[186,73978,73979,73982,73984,73986,73988],{"class":188,"line":18071},[186,73980,73981],{"class":206},"      padding-right",[186,73983,210],{"class":202},[186,73985,2056],{"class":206},[186,73987,804],{"class":669},[186,73989,634],{"class":202},[186,73991,73992,73994,73996,73998,74000],{"class":188,"line":18094},[186,73993,56365],{"class":206},[186,73995,210],{"class":202},[186,73997,2133],{"class":206},[186,73999,804],{"class":669},[186,74001,634],{"class":202},[186,74003,74004,74006,74008,74010,74012,74015,74017,74020,74022,74024],{"class":188,"line":18100},[186,74005,56327],{"class":206},[186,74007,210],{"class":202},[186,74009,73757],{"class":206},[186,74011,832],{"class":202},[186,74013,74014],{"class":206},"237",[186,74016,13898],{"class":202},[186,74018,74019],{"class":206},"235",[186,74021,13898],{"class":202},[186,74023,74019],{"class":206},[186,74025,1112],{"class":202},[186,74027,74028,74031,74033,74035],{"class":188,"line":18123},[186,74029,74030],{"class":206},"      box-sizing",[186,74032,210],{"class":202},[186,74034,61946],{"class":206},[186,74036,634],{"class":202},[186,74038,74039],{"class":188,"line":18137},[186,74040,3654],{"class":202},[186,74042,74043],{"class":188,"line":18157},[186,74044,3867],{"emptyLinePlaceholder":1551},[186,74046,74047,74049,74051],{"class":188,"line":18163},[186,74048,73909],{"class":198},[186,74050,53137],{"class":523},[186,74052,622],{"class":202},[186,74054,74055,74057,74059,74061],{"class":188,"line":18174},[186,74056,58857],{"class":206},[186,74058,210],{"class":202},[186,74060,58862],{"class":206},[186,74062,634],{"class":202},[186,74064,74065],{"class":188,"line":18197},[186,74066,3654],{"class":202},[186,74068,74069],{"class":188,"line":18219},[186,74070,3867],{"emptyLinePlaceholder":1551},[186,74072,74073,74075],{"class":188,"line":18224},[186,74074,66460],{"class":523},[186,74076,622],{"class":202},[186,74078,74079,74081,74083,74085,74087],{"class":188,"line":18230},[186,74080,56215],{"class":206},[186,74082,210],{"class":202},[186,74084,63070],{"class":206},[186,74086,804],{"class":669},[186,74088,634],{"class":202},[186,74090,74091,74093,74095,74097],{"class":188,"line":18244},[186,74092,56151],{"class":206},[186,74094,210],{"class":202},[186,74096,147],{"class":206},[186,74098,634],{"class":202},[186,74100,74101,74103,74105,74107],{"class":188,"line":18257},[186,74102,66467],{"class":206},[186,74104,210],{"class":202},[186,74106,66472],{"class":206},[186,74108,634],{"class":202},[186,74110,74111],{"class":188,"line":18262},[186,74112,3654],{"class":202},[186,74114,74115],{"class":188,"line":18276},[186,74116,3867],{"emptyLinePlaceholder":1551},[186,74118,74119,74121],{"class":188,"line":18281},[186,74120,66552],{"class":523},[186,74122,622],{"class":202},[186,74124,74125,74127,74129,74131,74133,74135,74137,74139,74141,74143],{"class":188,"line":18287},[186,74126,56327],{"class":206},[186,74128,210],{"class":202},[186,74130,73757],{"class":206},[186,74132,832],{"class":202},[186,74134,74014],{"class":206},[186,74136,13898],{"class":202},[186,74138,74019],{"class":206},[186,74140,13898],{"class":202},[186,74142,74019],{"class":206},[186,74144,1112],{"class":202},[186,74146,74147],{"class":188,"line":18292},[186,74148,3654],{"class":202},[186,74150,74151],{"class":188,"line":18306},[186,74152,3867],{"emptyLinePlaceholder":1551},[186,74154,74155,74157],{"class":188,"line":18311},[186,74156,66552],{"class":523},[186,74158,32921],{"class":202},[186,74160,74161,74163],{"class":188,"line":18316},[186,74162,66618],{"class":523},[186,74164,622],{"class":202},[186,74166,74167,74169,74171,74173,74175],{"class":188,"line":18330},[186,74168,56229],{"class":206},[186,74170,210],{"class":202},[186,74172,1884],{"class":206},[186,74174,804],{"class":669},[186,74176,634],{"class":202},[186,74178,74179,74181,74183,74185],{"class":188,"line":18342},[186,74180,58727],{"class":206},[186,74182,210],{"class":202},[186,74184,110],{"class":206},[186,74186,634],{"class":202},[186,74188,74189,74191,74193,74195,74197],{"class":188,"line":18347},[186,74190,56365],{"class":206},[186,74192,210],{"class":202},[186,74194,2159],{"class":206},[186,74196,804],{"class":669},[186,74198,634],{"class":202},[186,74200,74201,74203,74205,74207,74209,74211,74213,74215,74218,74220,74223,74225,74227],{"class":188,"line":18360},[186,74202,63415],{"class":206},[186,74204,210],{"class":202},[186,74206,1829],{"class":206},[186,74208,804],{"class":669},[186,74210,52971],{"class":206},[186,74212,73694],{"class":206},[186,74214,832],{"class":202},[186,74216,74217],{"class":206},"228",[186,74219,13898],{"class":202},[186,74221,74222],{"class":206},"225",[186,74224,13898],{"class":202},[186,74226,74222],{"class":206},[186,74228,1112],{"class":202},[186,74230,74231,74234,74236,74238,74240],{"class":188,"line":18365},[186,74232,74233],{"class":206},"      padding-left",[186,74235,210],{"class":202},[186,74237,1930],{"class":206},[186,74239,804],{"class":669},[186,74241,634],{"class":202},[186,74243,74244,74246,74248,74250,74253,74255,74257],{"class":188,"line":18370},[186,74245,63298],{"class":206},[186,74247,210],{"class":202},[186,74249,29577],{"class":206},[186,74251,74252],{"class":206}," linear",[186,74254,63305],{"class":206},[186,74256,2304],{"class":669},[186,74258,634],{"class":202},[186,74260,74261],{"class":188,"line":18375},[186,74262,3654],{"class":202},[186,74264,74265],{"class":188,"line":18388},[186,74266,3867],{"emptyLinePlaceholder":1551},[186,74268,74269,74272,74274,74276],{"class":188,"line":18393},[186,74270,74271],{"class":523},"    tbody",[186,74273,71581],{"class":523},[186,74275,62381],{"class":198},[186,74277,622],{"class":202},[186,74279,74280,74282,74284,74286,74288,74290,74292,74294,74296,74298],{"class":188,"line":34088},[186,74281,56327],{"class":206},[186,74283,210],{"class":202},[186,74285,73757],{"class":206},[186,74287,832],{"class":202},[186,74289,74014],{"class":206},[186,74291,13898],{"class":202},[186,74293,74019],{"class":206},[186,74295,13898],{"class":202},[186,74297,74019],{"class":206},[186,74299,1112],{"class":202},[186,74301,74302,74304,74306,74308],{"class":188,"line":34094},[186,74303,63463],{"class":206},[186,74305,210],{"class":202},[186,74307,63468],{"class":206},[186,74309,634],{"class":202},[186,74311,74312],{"class":188,"line":34100},[186,74313,3654],{"class":202},[186,74315,74316],{"class":188,"line":34106},[186,74317,3867],{"emptyLinePlaceholder":1551},[186,74319,74320,74322,74324,74327,74329],{"class":188,"line":34112},[186,74321,74271],{"class":523},[186,74323,71581],{"class":523},[186,74325,74326],{"class":523}," td",[186,74328,2871],{"class":523},[186,74330,622],{"class":202},[186,74332,74333,74335,74337,74339],{"class":188,"line":34123},[186,74334,56452],{"class":206},[186,74336,210],{"class":202},[186,74338,62310],{"class":206},[186,74340,634],{"class":202},[186,74342,74343,74345,74347,74349,74351],{"class":188,"line":34129},[186,74344,56215],{"class":206},[186,74346,210],{"class":202},[186,74348,2515],{"class":206},[186,74350,804],{"class":669},[186,74352,634],{"class":202},[186,74354,74355,74357,74359,74361,74363],{"class":188,"line":34149},[186,74356,56229],{"class":206},[186,74358,210],{"class":202},[186,74360,2433],{"class":206},[186,74362,804],{"class":669},[186,74364,634],{"class":202},[186,74366,74367,74369,74371,74373,74375],{"class":188,"line":34155},[186,74368,58800],{"class":206},[186,74370,210],{"class":202},[186,74372,2433],{"class":206},[186,74374,804],{"class":669},[186,74376,634],{"class":202},[186,74378,74379,74381,74383,74385,74387],{"class":188,"line":34166},[186,74380,63515],{"class":206},[186,74382,210],{"class":202},[186,74384,1697],{"class":206},[186,74386,804],{"class":669},[186,74388,634],{"class":202},[186,74390,74391,74393,74395,74397],{"class":188,"line":34172},[186,74392,58857],{"class":206},[186,74394,210],{"class":202},[186,74396,62283],{"class":206},[186,74398,634],{"class":202},[186,74400,74401,74403,74405,74407],{"class":188,"line":34178},[186,74402,58727],{"class":206},[186,74404,210],{"class":202},[186,74406,53042],{"class":206},[186,74408,634],{"class":202},[186,74410,74411,74413,74415,74417],{"class":188,"line":34184},[186,74412,65407],{"class":206},[186,74414,210],{"class":202},[186,74416,56182],{"class":206},[186,74418,634],{"class":202},[186,74420,74421,74423,74425,74428],{"class":188,"line":34190},[186,74422,56327],{"class":206},[186,74424,210],{"class":202},[186,74426,74427],{"class":206},"orange",[186,74429,634],{"class":202},[186,74431,74432,74434,74436,74439,74441],{"class":188,"line":34196},[186,74433,56577],{"class":206},[186,74435,210],{"class":202},[186,74437,74438],{"class":206},"12.5",[186,74440,804],{"class":669},[186,74442,634],{"class":202},[186,74444,74445],{"class":188,"line":34202},[186,74446,3654],{"class":202},[186,74448,74449,74451,74453],{"class":188,"line":34208},[186,74450,53864],{"class":202},[186,74452,1524],{"class":523},[186,74454,552],{"class":202},[186,74456,74457,74459,74461],{"class":188,"line":34228},[186,74458,1470],{"class":202},[186,74460,52786],{"class":523},[186,74462,552],{"class":202},[186,74464,74465],{"class":188,"line":34234},[186,74466,3867],{"emptyLinePlaceholder":1551},[186,74468,74469,74471,74473],{"class":188,"line":34250},[186,74470,520],{"class":202},[186,74472,53247],{"class":523},[186,74474,552],{"class":202},[186,74476,74477,74479,74481,74484,74486],{"class":188,"line":34256},[186,74478,53591],{"class":202},[186,74480,14],{"class":523},[186,74482,74483],{"class":202},">学生就业统计表\u003C\u002F",[186,74485,14],{"class":523},[186,74487,552],{"class":202},[186,74489,74490,74492,74494,74496,74498,74500,74502,74504,74506],{"class":188,"line":34270},[186,74491,53591],{"class":202},[186,74493,68062],{"class":523},[186,74495,1453],{"class":198},[186,74497,529],{"class":202},[186,74499,64102],{"class":532},[186,74501,70507],{"class":198},[186,74503,529],{"class":202},[186,74505,33231],{"class":532},[186,74507,552],{"class":202},[186,74509,74510,74512,74514,74516,74518,74520,74522,74524,74526,74528,74530,74533,74535,74537,74539],{"class":188,"line":34276},[186,74511,52793],{"class":202},[186,74513,55266],{"class":523},[186,74515,55269],{"class":198},[186,74517,529],{"class":202},[186,74519,64137],{"class":532},[186,74521,16382],{"class":198},[186,74523,529],{"class":202},[186,74525,70533],{"class":532},[186,74527,62461],{"class":198},[186,74529,529],{"class":202},[186,74531,74532],{"class":532},"\"姓名\"",[186,74534,1453],{"class":198},[186,74536,529],{"class":202},[186,74538,70533],{"class":532},[186,74540,552],{"class":202},[186,74542,74543,74545,74547,74549,74551,74553,74555,74557,74559,74561,74563,74566,74568,74570,74572],{"class":188,"line":34291},[186,74544,52793],{"class":202},[186,74546,55266],{"class":523},[186,74548,55269],{"class":198},[186,74550,529],{"class":202},[186,74552,64137],{"class":532},[186,74554,16382],{"class":198},[186,74556,529],{"class":202},[186,74558,70561],{"class":532},[186,74560,62461],{"class":198},[186,74562,529],{"class":202},[186,74564,74565],{"class":532},"\"年龄\"",[186,74567,1453],{"class":198},[186,74569,529],{"class":202},[186,74571,70561],{"class":532},[186,74573,552],{"class":202},[186,74575,74576,74578,74580,74582,74584,74586,74588,74590,74592,74594,74596,74599,74601,74603,74605],{"class":188,"line":34297},[186,74577,52793],{"class":202},[186,74579,55266],{"class":523},[186,74581,55269],{"class":198},[186,74583,529],{"class":202},[186,74585,64137],{"class":532},[186,74587,16382],{"class":198},[186,74589,529],{"class":202},[186,74591,70663],{"class":532},[186,74593,62461],{"class":198},[186,74595,529],{"class":202},[186,74597,74598],{"class":532},"\"薪资\"",[186,74600,1453],{"class":198},[186,74602,529],{"class":202},[186,74604,70663],{"class":532},[186,74606,552],{"class":202},[186,74608,74609,74611,74613,74615,74617,74619,74621,74623,74625,74627,74629,74631],{"class":188,"line":34306},[186,74610,52793],{"class":202},[186,74612,70581],{"class":523},[186,74614,16382],{"class":198},[186,74616,529],{"class":202},[186,74618,70588],{"class":532},[186,74620,16421],{"class":198},[186,74622,529],{"class":202},[186,74624,9115],{"class":532},[186,74626,1453],{"class":198},[186,74628,529],{"class":202},[186,74630,70588],{"class":532},[186,74632,552],{"class":202},[186,74634,74635,74637,74639,74641,74643,74645,74647,74649],{"class":188,"line":34312},[186,74636,56677],{"class":202},[186,74638,70603],{"class":523},[186,74640,68088],{"class":198},[186,74642,529],{"class":202},[186,74644,11424],{"class":532},[186,74646,70612],{"class":202},[186,74648,70603],{"class":523},[186,74650,552],{"class":202},[186,74652,74653,74655,74657,74659,74661,74663,74665,74667],{"class":188,"line":34321},[186,74654,56677],{"class":202},[186,74656,70603],{"class":523},[186,74658,68088],{"class":198},[186,74660,529],{"class":202},[186,74662,11493],{"class":532},[186,74664,70631],{"class":202},[186,74666,70603],{"class":523},[186,74668,552],{"class":202},[186,74670,74671,74673,74675],{"class":188,"line":34327},[186,74672,53224],{"class":202},[186,74674,70581],{"class":523},[186,74676,552],{"class":202},[186,74678,74679,74681,74683,74685,74687,74689,74691,74693,74695,74697,74699,74701],{"class":188,"line":34333},[186,74680,52793],{"class":202},[186,74682,70581],{"class":523},[186,74684,16382],{"class":198},[186,74686,529],{"class":202},[186,74688,70685],{"class":532},[186,74690,16421],{"class":198},[186,74692,529],{"class":202},[186,74694,9115],{"class":532},[186,74696,1453],{"class":198},[186,74698,529],{"class":202},[186,74700,70685],{"class":532},[186,74702,552],{"class":202},[186,74704,74705,74707,74709,74711,74713,74715,74717,74719],{"class":188,"line":34342},[186,74706,56677],{"class":202},[186,74708,70603],{"class":523},[186,74710,68088],{"class":198},[186,74712,529],{"class":202},[186,74714,70706],{"class":532},[186,74716,70709],{"class":202},[186,74718,70603],{"class":523},[186,74720,552],{"class":202},[186,74722,74723,74725,74727,74729,74731,74733,74735,74737],{"class":188,"line":34348},[186,74724,56677],{"class":202},[186,74726,70603],{"class":523},[186,74728,68088],{"class":198},[186,74730,529],{"class":202},[186,74732,70726],{"class":532},[186,74734,70729],{"class":202},[186,74736,70603],{"class":523},[186,74738,552],{"class":202},[186,74740,74741,74743,74745,74747,74749,74751,74753,74755],{"class":188,"line":34359},[186,74742,56677],{"class":202},[186,74744,70603],{"class":523},[186,74746,68088],{"class":198},[186,74748,529],{"class":202},[186,74750,70746],{"class":532},[186,74752,70749],{"class":202},[186,74754,70603],{"class":523},[186,74756,552],{"class":202},[186,74758,74759,74761,74763,74765,74767,74769,74771,74773],{"class":188,"line":34365},[186,74760,56677],{"class":202},[186,74762,70603],{"class":523},[186,74764,68088],{"class":198},[186,74766,529],{"class":202},[186,74768,70766],{"class":532},[186,74770,70769],{"class":202},[186,74772,70603],{"class":523},[186,74774,552],{"class":202},[186,74776,74777,74779,74781,74783,74785,74787,74789,74791],{"class":188,"line":34384},[186,74778,56677],{"class":202},[186,74780,70603],{"class":523},[186,74782,68088],{"class":198},[186,74784,529],{"class":202},[186,74786,70786],{"class":532},[186,74788,70789],{"class":202},[186,74790,70603],{"class":523},[186,74792,552],{"class":202},[186,74794,74795,74797,74799],{"class":188,"line":34390},[186,74796,53224],{"class":202},[186,74798,70581],{"class":523},[186,74800,552],{"class":202},[186,74802,74803,74805,74807],{"class":188,"line":34401},[186,74804,52793],{"class":202},[186,74806,55332],{"class":523},[186,74808,552],{"class":202},[186,74810,74811,74813,74815,74818,74820,74823,74825],{"class":188,"line":34407},[186,74812,56677],{"class":202},[186,74814,186],{"class":523},[186,74816,74817],{"class":202},">+\u003C\u002F",[186,74819,186],{"class":523},[186,74821,74822],{"class":202},">添加\u003C\u002F",[186,74824,55332],{"class":523},[186,74826,552],{"class":202},[186,74828,74829,74831,74833],{"class":188,"line":34427},[186,74830,53864],{"class":202},[186,74832,68062],{"class":523},[186,74834,552],{"class":202},[186,74836,74837,74839,74841,74843,74845,74847,74850,74852,74855,74857,74860,74862],{"class":188,"line":34443},[186,74838,53591],{"class":202},[186,74840,1450],{"class":523},[186,74842,1453],{"class":198},[186,74844,529],{"class":202},[186,74846,64018],{"class":532},[186,74848,74849],{"class":202},">共有数据 \u003C",[186,74851,186],{"class":523},[186,74853,74854],{"class":202},">0\u003C\u002F",[186,74856,186],{"class":523},[186,74858,74859],{"class":202},"> 条\u003C\u002F",[186,74861,1450],{"class":523},[186,74863,552],{"class":202},[186,74865,74866,74868,74870],{"class":188,"line":34449},[186,74867,53591],{"class":202},[186,74869,99],{"class":523},[186,74871,552],{"class":202},[186,74873,74874,74876,74878],{"class":188,"line":34463},[186,74875,52793],{"class":202},[186,74877,102],{"class":523},[186,74879,552],{"class":202},[186,74881,74882,74884,74886],{"class":188,"line":34469},[186,74883,56677],{"class":202},[186,74885,105],{"class":523},[186,74887,552],{"class":202},[186,74889,74890,74892,74894,74897,74899],{"class":188,"line":34475},[186,74891,56743],{"class":202},[186,74893,108],{"class":523},[186,74895,74896],{"class":202},">ID\u003C\u002F",[186,74898,108],{"class":523},[186,74900,552],{"class":202},[186,74902,74903,74905,74907,74909,74911],{"class":188,"line":34486},[186,74904,56743],{"class":202},[186,74906,108],{"class":523},[186,74908,70892],{"class":202},[186,74910,108],{"class":523},[186,74912,552],{"class":202},[186,74914,74915,74917,74919,74921,74923],{"class":188,"line":34492},[186,74916,56743],{"class":202},[186,74918,108],{"class":523},[186,74920,70905],{"class":202},[186,74922,108],{"class":523},[186,74924,552],{"class":202},[186,74926,74927,74929,74931,74933,74935],{"class":188,"line":34498},[186,74928,56743],{"class":202},[186,74930,108],{"class":523},[186,74932,70918],{"class":202},[186,74934,108],{"class":523},[186,74936,552],{"class":202},[186,74938,74939,74941,74943,74945,74947],{"class":188,"line":34508},[186,74940,56743],{"class":202},[186,74942,108],{"class":523},[186,74944,70931],{"class":202},[186,74946,108],{"class":523},[186,74948,552],{"class":202},[186,74950,74951,74953,74955,74957,74959],{"class":188,"line":34514},[186,74952,56743],{"class":202},[186,74954,108],{"class":523},[186,74956,70944],{"class":202},[186,74958,108],{"class":523},[186,74960,552],{"class":202},[186,74962,74963,74965,74967,74970,74972],{"class":188,"line":34525},[186,74964,56743],{"class":202},[186,74966,108],{"class":523},[186,74968,74969],{"class":202},">录入时间\u003C\u002F",[186,74971,108],{"class":523},[186,74973,552],{"class":202},[186,74975,74976,74978,74980,74982,74984],{"class":188,"line":34531},[186,74977,56743],{"class":202},[186,74979,108],{"class":523},[186,74981,70957],{"class":202},[186,74983,108],{"class":523},[186,74985,552],{"class":202},[186,74987,74988,74990,74992],{"class":188,"line":34541},[186,74989,56848],{"class":202},[186,74991,105],{"class":523},[186,74993,552],{"class":202},[186,74995,74996,74998,75000],{"class":188,"line":34546},[186,74997,53224],{"class":202},[186,74999,102],{"class":523},[186,75001,552],{"class":202},[186,75003,75004,75006,75008],{"class":188,"line":34552},[186,75005,52793],{"class":202},[186,75007,116],{"class":523},[186,75009,552],{"class":202},[186,75011,75012],{"class":188,"line":34601},[186,75013,75014],{"class":192},"      \u003C!-- \u003Ctr>\n",[186,75016,75017],{"class":188,"line":34648},[186,75018,75019],{"class":192},"        \u003Ctd>1\u003C\u002Ftd>\n",[186,75021,75022],{"class":188,"line":34653},[186,75023,75019],{"class":192},[186,75025,75026],{"class":188,"line":34659},[186,75027,75019],{"class":192},[186,75029,75030],{"class":188,"line":34678},[186,75031,75019],{"class":192},[186,75033,75034],{"class":188,"line":34684},[186,75035,75019],{"class":192},[186,75037,75038],{"class":188,"line":34704},[186,75039,75019],{"class":192},[186,75041,75042],{"class":188,"line":34710},[186,75043,75019],{"class":192},[186,75045,75046],{"class":188,"line":34716},[186,75047,75048],{"class":192},"        \u003Ctd>\n",[186,75050,75051],{"class":188,"line":34726},[186,75052,75053],{"class":192},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[186,75055,75056],{"class":188,"line":34731},[186,75057,75058],{"class":192},"        \u003C\u002Ftd>\n",[186,75060,75061],{"class":188,"line":34737},[186,75062,75063],{"class":192},"      \u003C\u002Ftr> -->\n",[186,75065,75066,75068,75070],{"class":188,"line":34753},[186,75067,53224],{"class":202},[186,75069,116],{"class":523},[186,75071,552],{"class":202},[186,75073,75074,75076,75078],{"class":188,"line":34798},[186,75075,53864],{"class":202},[186,75077,99],{"class":523},[186,75079,552],{"class":202},[186,75081,75082,75084,75086],{"class":188,"line":34804},[186,75083,53591],{"class":202},[186,75085,53260],{"class":523},[186,75087,552],{"class":202},[186,75089,75090],{"class":188,"line":34810},[186,75091,75092],{"class":192},"    \u002F\u002F const initData = [{\n",[186,75094,75095],{"class":188,"line":34816},[186,75096,75097],{"class":192},"    \u002F\u002F   unameId: 1,\n",[186,75099,75100],{"class":188,"line":34827},[186,75101,75102],{"class":192},"    \u002F\u002F   uname: '华晨宇',\n",[186,75104,75105],{"class":188,"line":34833},[186,75106,75107],{"class":192},"    \u002F\u002F   age: 22,\n",[186,75109,75110],{"class":188,"line":34839},[186,75111,75112],{"class":192},"    \u002F\u002F   salary: 12000,\n",[186,75114,75115],{"class":188,"line":34845},[186,75116,75117],{"class":192},"    \u002F\u002F   gender: '男',\n",[186,75119,75120],{"class":188,"line":34863},[186,75121,75122],{"class":192},"    \u002F\u002F   city: '北京',\n",[186,75124,75125],{"class":188,"line":34877},[186,75126,75127],{"class":192},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[186,75129,75130],{"class":188,"line":34886},[186,75131,75132],{"class":192},"    \u002F\u002F }]\n",[186,75134,75135],{"class":188,"line":34895},[186,75136,75137],{"class":192},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[186,75139,75140],{"class":188,"line":34904},[186,75141,75142],{"class":192},"    \u002F\u002F 1.渲染业务\n",[186,75144,75145],{"class":188,"line":34913},[186,75146,75147],{"class":192},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[186,75149,75150],{"class":188,"line":34919},[186,75151,75152],{"class":192},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[186,75154,75155],{"class":188,"line":34925},[186,75156,75157],{"class":192},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[186,75159,75160],{"class":188,"line":34933},[186,75161,3867],{"emptyLinePlaceholder":1551},[186,75163,75164],{"class":188,"line":34938},[186,75165,75166],{"class":192},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[186,75168,75169],{"class":188,"line":34944},[186,75170,75171],{"class":192},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[186,75173,75174,75176,75178,75180],{"class":188,"line":34955},[186,75175,12684],{"class":669},[186,75177,59136],{"class":206},[186,75179,15027],{"class":669},[186,75181,53285],{"class":202},[186,75183,75184,75187,75189],{"class":188,"line":34961},[186,75185,75186],{"class":202},"    console.",[186,75188,59688],{"class":198},[186,75190,53859],{"class":202},[186,75192,75193],{"class":188,"line":34981},[186,75194,3867],{"emptyLinePlaceholder":1551},[186,75196,75197],{"class":188,"line":34987},[186,75198,75199],{"class":192},"    \u002F\u002F 时间函数\n",[186,75201,75202,75204,75207],{"class":188,"line":34993},[186,75203,71521],{"class":669},[186,75205,75206],{"class":198}," getTime",[186,75208,12316],{"class":202},[186,75210,75211,75213,75216,75218,75220,75223],{"class":188,"line":34999},[186,75212,59669],{"class":669},[186,75214,75215],{"class":206}," date",[186,75217,15027],{"class":669},[186,75219,13041],{"class":669},[186,75221,75222],{"class":198}," Date",[186,75224,3443],{"class":202},[186,75226,75227,75229,75231,75233,75236,75239,75241,75243,75245,75248,75251,75253,75255,75257,75259,75261,75263,75265],{"class":188,"line":35016},[186,75228,59669],{"class":669},[186,75230,17552],{"class":206},[186,75232,15027],{"class":669},[186,75234,75235],{"class":202}," date.",[186,75237,75238],{"class":198},"getHours",[186,75240,14513],{"class":202},[186,75242,520],{"class":669},[186,75244,3505],{"class":206},[186,75246,75247],{"class":669}," ?",[186,75249,75250],{"class":532}," '0'",[186,75252,47020],{"class":669},[186,75254,75235],{"class":202},[186,75256,75238],{"class":198},[186,75258,14513],{"class":202},[186,75260,2467],{"class":669},[186,75262,75235],{"class":202},[186,75264,75238],{"class":198},[186,75266,3443],{"class":202},[186,75268,75269,75271,75274,75276,75278,75281,75283,75285,75287,75289,75291,75293,75295,75297,75299,75301,75303,75305],{"class":188,"line":35022},[186,75270,59669],{"class":669},[186,75272,75273],{"class":206}," m",[186,75275,15027],{"class":669},[186,75277,75235],{"class":202},[186,75279,75280],{"class":198},"getMinutes",[186,75282,14513],{"class":202},[186,75284,520],{"class":669},[186,75286,3505],{"class":206},[186,75288,75247],{"class":669},[186,75290,75250],{"class":532},[186,75292,47020],{"class":669},[186,75294,75235],{"class":202},[186,75296,75280],{"class":198},[186,75298,14513],{"class":202},[186,75300,2467],{"class":669},[186,75302,75235],{"class":202},[186,75304,75280],{"class":198},[186,75306,3443],{"class":202},[186,75308,75309,75311,75313,75315,75317,75320,75322,75324,75326,75328,75330,75332,75334,75336,75338,75340,75342,75344],{"class":188,"line":35028},[186,75310,59669],{"class":669},[186,75312,9891],{"class":206},[186,75314,15027],{"class":669},[186,75316,75235],{"class":202},[186,75318,75319],{"class":198},"getSeconds",[186,75321,14513],{"class":202},[186,75323,520],{"class":669},[186,75325,3505],{"class":206},[186,75327,75247],{"class":669},[186,75329,75250],{"class":532},[186,75331,47020],{"class":669},[186,75333,75235],{"class":202},[186,75335,75319],{"class":198},[186,75337,14513],{"class":202},[186,75339,2467],{"class":669},[186,75341,75235],{"class":202},[186,75343,75319],{"class":198},[186,75345,3443],{"class":202},[186,75347,75348,75350,75353,75355,75357,75360,75362,75365,75367,75370,75372,75374,75377,75379,75381,75383,75385,75387,75389,75392,75394,75397,75399,75402,75404,75406,75408],{"class":188,"line":35034},[186,75349,59669],{"class":669},[186,75351,75352],{"class":206}," str",[186,75354,15027],{"class":669},[186,75356,64341],{"class":532},[186,75358,75359],{"class":202},"date",[186,75361,2168],{"class":532},[186,75363,75364],{"class":198},"getFullYear",[186,75366,3894],{"class":532},[186,75368,75369],{"class":532},"}\u002F${",[186,75371,75359],{"class":202},[186,75373,2168],{"class":532},[186,75375,75376],{"class":198},"getMonth",[186,75378,14513],{"class":532},[186,75380,2091],{"class":669},[186,75382,26577],{"class":206},[186,75384,75369],{"class":532},[186,75386,75359],{"class":202},[186,75388,2168],{"class":532},[186,75390,75391],{"class":198},"getDate",[186,75393,3894],{"class":532},[186,75395,75396],{"class":532},"} ${",[186,75398,2025],{"class":202},[186,75400,75401],{"class":532},"}:${",[186,75403,2154],{"class":202},[186,75405,75401],{"class":532},[186,75407,2304],{"class":202},[186,75409,75410],{"class":532},"}`\n",[186,75412,75413,75416],{"class":188,"line":35040},[186,75414,75415],{"class":669},"      return",[186,75417,75418],{"class":202}," str\n",[186,75420,75421],{"class":188,"line":35046},[186,75422,3654],{"class":202},[186,75424,75425],{"class":188,"line":35073},[186,75426,75427],{"class":192},"    \u002F\u002F 渲染函数\n",[186,75429,75430,75432,75434,75436,75438,75440,75442,75444],{"class":188,"line":35097},[186,75431,12684],{"class":669},[186,75433,71184],{"class":206},[186,75435,15027],{"class":669},[186,75437,55841],{"class":202},[186,75439,55844],{"class":198},[186,75441,832],{"class":202},[186,75443,71195],{"class":532},[186,75445,1629],{"class":202},[186,75447,75448,75450,75452],{"class":188,"line":35103},[186,75449,71521],{"class":669},[186,75451,71524],{"class":198},[186,75453,12316],{"class":202},[186,75455,75456],{"class":188,"line":35109},[186,75457,75458],{"class":192},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[186,75460,75461],{"class":188,"line":35115},[186,75462,75463],{"class":192},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[186,75465,75466,75468,75471,75473,75475,75478,75480,75482,75484,75487,75489,75492],{"class":188,"line":35126},[186,75467,59669],{"class":669},[186,75469,75470],{"class":206}," trArr",[186,75472,15027],{"class":669},[186,75474,53412],{"class":202},[186,75476,75477],{"class":198},"map",[186,75479,832],{"class":202},[186,75481,55894],{"class":669},[186,75483,3126],{"class":202},[186,75485,75486],{"class":835},"ele",[186,75488,13898],{"class":202},[186,75490,75491],{"class":835},"index",[186,75493,13905],{"class":202},[186,75495,75496,75498],{"class":188,"line":35137},[186,75497,16214],{"class":669},[186,75499,71605],{"class":532},[186,75501,75502],{"class":188,"line":35143},[186,75503,75504],{"class":532},"      \u003Ctr>\n",[186,75506,75507,75509,75511,75513,75516],{"class":188,"line":35160},[186,75508,71610],{"class":532},[186,75510,75486],{"class":202},[186,75512,2168],{"class":532},[186,75514,75515],{"class":202},"unameId",[186,75517,71625],{"class":532},[186,75519,75520,75522,75524,75526,75528],{"class":188,"line":35183},[186,75521,71610],{"class":532},[186,75523,75486],{"class":202},[186,75525,2168],{"class":532},[186,75527,71641],{"class":202},[186,75529,71625],{"class":532},[186,75531,75532,75534,75536,75538,75540],{"class":188,"line":35206},[186,75533,71610],{"class":532},[186,75535,75486],{"class":202},[186,75537,2168],{"class":532},[186,75539,71658],{"class":202},[186,75541,71625],{"class":532},[186,75543,75544,75546,75548,75550,75552],{"class":188,"line":35212},[186,75545,71610],{"class":532},[186,75547,75486],{"class":202},[186,75549,2168],{"class":532},[186,75551,71675],{"class":202},[186,75553,71625],{"class":532},[186,75555,75556,75558,75560,75562,75564],{"class":188,"line":35217},[186,75557,71610],{"class":532},[186,75559,75486],{"class":202},[186,75561,2168],{"class":532},[186,75563,71692],{"class":202},[186,75565,71625],{"class":532},[186,75567,75568,75570,75572,75574,75576],{"class":188,"line":35226},[186,75569,71610],{"class":532},[186,75571,75486],{"class":202},[186,75573,2168],{"class":532},[186,75575,71709],{"class":202},[186,75577,71625],{"class":532},[186,75579,75580,75582,75584,75586,75588],{"class":188,"line":35236},[186,75581,71610],{"class":532},[186,75583,75486],{"class":202},[186,75585,2168],{"class":532},[186,75587,3854],{"class":202},[186,75589,71625],{"class":532},[186,75591,75592],{"class":188,"line":35242},[186,75593,75048],{"class":532},[186,75595,75596,75599,75601],{"class":188,"line":35247},[186,75597,75598],{"class":532},"          \u003Ca href=\"#\" data-id=\"${",[186,75600,75491],{"class":202},[186,75602,75603],{"class":532},"}\">删除\u003C\u002Fa>\n",[186,75605,75606],{"class":188,"line":35253},[186,75607,75058],{"class":532},[186,75609,75610],{"class":188,"line":35266},[186,75611,75612],{"class":532},"      \u003C\u002Ftr>\n",[186,75614,75615],{"class":188,"line":35272},[186,75616,75617],{"class":532},"  `\n",[186,75619,75620],{"class":188,"line":35283},[186,75621,66252],{"class":202},[186,75623,75624,75626,75628],{"class":188,"line":35294},[186,75625,59685],{"class":202},[186,75627,59688],{"class":198},[186,75629,75630],{"class":202},"(trArr)\n",[186,75632,75633],{"class":188,"line":35313},[186,75634,3867],{"emptyLinePlaceholder":1551},[186,75636,75637],{"class":188,"line":50972},[186,75638,75639],{"class":192},"      \u002F\u002F (2) 把数组转换为字符串join\n",[186,75641,75642],{"class":188,"line":50977},[186,75643,75644],{"class":192},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[186,75646,75647,75649,75651,75654,75657,75659,75662],{"class":188,"line":50986},[186,75648,71536],{"class":202},[186,75650,529],{"class":669},[186,75652,75653],{"class":202}," trArr.",[186,75655,75656],{"class":198},"join",[186,75658,832],{"class":202},[186,75660,75661],{"class":532},"''",[186,75663,1629],{"class":202},[186,75665,75666],{"class":188,"line":50995},[186,75667,75668],{"class":192},"      \u002F\u002F 显示共有几条\n",[186,75670,75671,75673,75675,75677,75680,75683,75685,75687],{"class":188,"line":51000},[186,75672,57212],{"class":202},[186,75674,55844],{"class":198},[186,75676,832],{"class":202},[186,75678,75679],{"class":532},"'.total span'",[186,75681,75682],{"class":202},").innerHTML ",[186,75684,529],{"class":669},[186,75686,53412],{"class":202},[186,75688,57272],{"class":206},[186,75690,75691],{"class":188,"line":51005},[186,75692,3654],{"class":202},[186,75694,75695],{"class":188,"line":51010},[186,75696,75697],{"class":192},"    \u002F\u002F render()\n",[186,75699,75700],{"class":188,"line":51023},[186,75701,3867],{"emptyLinePlaceholder":1551},[186,75703,75704],{"class":188,"line":51028},[186,75705,75706],{"class":192},"    \u002F\u002F 获取DOM对象\n",[186,75708,75709,75711,75713,75715,75717,75719,75721,75723],{"class":188,"line":51037},[186,75710,12684],{"class":669},[186,75712,71258],{"class":206},[186,75714,15027],{"class":669},[186,75716,55841],{"class":202},[186,75718,55844],{"class":198},[186,75720,832],{"class":202},[186,75722,71269],{"class":532},[186,75724,1629],{"class":202},[186,75726,75727,75729,75731,75733,75735,75737,75739,75741],{"class":188,"line":51046},[186,75728,12684],{"class":669},[186,75730,71085],{"class":206},[186,75732,15027],{"class":669},[186,75734,55841],{"class":202},[186,75736,55844],{"class":198},[186,75738,832],{"class":202},[186,75740,71096],{"class":532},[186,75742,1629],{"class":202},[186,75744,75745,75747,75749,75751,75753,75755,75757,75759],{"class":188,"line":51063},[186,75746,12684],{"class":669},[186,75748,17150],{"class":206},[186,75750,15027],{"class":669},[186,75752,55841],{"class":202},[186,75754,55844],{"class":198},[186,75756,832],{"class":202},[186,75758,71115],{"class":532},[186,75760,1629],{"class":202},[186,75762,75764,75766,75768,75770,75772,75774,75776,75778],{"class":188,"line":75763},231,[186,75765,12684],{"class":669},[186,75767,71144],{"class":206},[186,75769,15027],{"class":669},[186,75771,55841],{"class":202},[186,75773,55844],{"class":198},[186,75775,832],{"class":202},[186,75777,71155],{"class":532},[186,75779,1629],{"class":202},[186,75781,75783,75785,75787,75789,75791,75793,75795,75797],{"class":188,"line":75782},232,[186,75784,12684],{"class":669},[186,75786,71124],{"class":206},[186,75788,15027],{"class":669},[186,75790,55841],{"class":202},[186,75792,55844],{"class":198},[186,75794,832],{"class":202},[186,75796,71135],{"class":532},[186,75798,1629],{"class":202},[186,75800,75802,75804,75806,75808,75810,75812,75814,75816],{"class":188,"line":75801},233,[186,75803,12684],{"class":669},[186,75805,71164],{"class":206},[186,75807,15027],{"class":669},[186,75809,55841],{"class":202},[186,75811,55844],{"class":198},[186,75813,832],{"class":202},[186,75815,71175],{"class":532},[186,75817,1629],{"class":202},[186,75819,75821],{"class":188,"line":75820},234,[186,75822,3867],{"emptyLinePlaceholder":1551},[186,75824,75826],{"class":188,"line":75825},235,[186,75827,75828],{"class":192},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[186,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848],{"class":188,"line":75831},236,[186,75833,71276],{"class":202},[186,75835,59254],{"class":198},[186,75837,832],{"class":202},[186,75839,71283],{"class":532},[186,75841,13898],{"class":202},[186,75843,55894],{"class":669},[186,75845,3126],{"class":202},[186,75847,1694],{"class":835},[186,75849,13905],{"class":202},[186,75851,75853],{"class":188,"line":75852},237,[186,75854,75855],{"class":192},"      \u002F\u002F 禁止浏览器跳转\n",[186,75857,75859,75861,75863],{"class":188,"line":75858},238,[186,75860,71303],{"class":202},[186,75862,71306],{"class":198},[186,75864,3443],{"class":202},[186,75866,75868],{"class":188,"line":75867},239,[186,75869,75870],{"class":192},"      \u002F\u002F 非空判断\n",[186,75872,75874],{"class":188,"line":75873},240,[186,75875,75876],{"class":192},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[186,75878,75880],{"class":188,"line":75879},241,[186,75881,75882],{"class":192},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[186,75884,75886,75888,75890,75892,75895,75897,75900,75903,75905,75907],{"class":188,"line":75885},242,[186,75887,55925],{"class":669},[186,75889,3126],{"class":202},[186,75891,1838],{"class":669},[186,75893,75894],{"class":202},"uname.value ",[186,75896,72791],{"class":669},[186,75898,75899],{"class":669}," !",[186,75901,75902],{"class":202},"age.value ",[186,75904,72791],{"class":669},[186,75906,75899],{"class":669},[186,75908,75909],{"class":202},"salary.value) {\n",[186,75911,75913,75915,75917,75919,75921],{"class":188,"line":75912},243,[186,75914,16214],{"class":669},[186,75916,71377],{"class":198},[186,75918,832],{"class":202},[186,75920,71382],{"class":532},[186,75922,1629],{"class":202},[186,75924,75926],{"class":188,"line":75925},244,[186,75927,53845],{"class":202},[186,75929,75931,75933,75935],{"class":188,"line":75930},245,[186,75932,59448],{"class":202},[186,75934,53331],{"class":198},[186,75936,75937],{"class":202},"({\n",[186,75939,75941],{"class":188,"line":75940},246,[186,75942,75943],{"class":192},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[186,75945,75947],{"class":188,"line":75946},247,[186,75948,75949],{"class":192},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[186,75951,75953],{"class":188,"line":75952},248,[186,75954,75955],{"class":192},"        \u002F\u002F 对象的序号应为数组长度+1\n",[186,75957,75959],{"class":188,"line":75958},249,[186,75960,75961],{"class":192},"        \u002F\u002F unameId: arr.length + 1,\n",[186,75963,75965],{"class":188,"line":75964},250,[186,75966,3867],{"emptyLinePlaceholder":1551},[186,75968,75970],{"class":188,"line":75969},251,[186,75971,75972],{"class":192},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[186,75974,75976],{"class":188,"line":75975},252,[186,75977,75978],{"class":192},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[186,75980,75982],{"class":188,"line":75981},253,[186,75983,75984],{"class":192},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[186,75986,75988],{"class":188,"line":75987},254,[186,75989,75990],{"class":192},"        \u002F\u002F 0当假看\n",[186,75992,75994,75997,75999,76001,76004,76006,76008,76010,76013,76015,76017,76020,76022],{"class":188,"line":75993},255,[186,75995,75996],{"class":202},"        unameId: arr.",[186,75998,53415],{"class":206},[186,76000,75247],{"class":669},[186,76002,76003],{"class":202}," arr[arr.",[186,76005,53415],{"class":206},[186,76007,53718],{"class":669},[186,76009,26577],{"class":206},[186,76011,76012],{"class":202},"].unameId ",[186,76014,2091],{"class":669},[186,76016,26577],{"class":206},[186,76018,76019],{"class":669}," :",[186,76021,26577],{"class":206},[186,76023,32921],{"class":202},[186,76025,76027],{"class":188,"line":76026},256,[186,76028,71430],{"class":202},[186,76030,76032],{"class":188,"line":76031},257,[186,76033,71435],{"class":202},[186,76035,76037],{"class":188,"line":76036},258,[186,76038,71445],{"class":202},[186,76040,76042],{"class":188,"line":76041},259,[186,76043,71440],{"class":202},[186,76045,76047],{"class":188,"line":76046},260,[186,76048,76049],{"class":202},"        city: city.value,\n",[186,76051,76053],{"class":188,"line":76052},261,[186,76054,76055],{"class":192},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[186,76057,76059],{"class":188,"line":76058},262,[186,76060,76061],{"class":192},"        \u002F\u002F time: new Date().toDateString()\n",[186,76063,76065,76068,76071],{"class":188,"line":76064},263,[186,76066,76067],{"class":202},"        time: ",[186,76069,76070],{"class":198},"getTime",[186,76072,3443],{"class":202},[186,76074,76076],{"class":188,"line":76075},264,[186,76077,66252],{"class":202},[186,76079,76081],{"class":188,"line":76080},265,[186,76082,76083],{"class":192},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[186,76085,76087,76089],{"class":188,"line":76086},266,[186,76088,71505],{"class":198},[186,76090,3443],{"class":202},[186,76092,76094,76096,76098,76100,76102],{"class":188,"line":76093},267,[186,76095,71488],{"class":206},[186,76097,2168],{"class":202},[186,76099,71493],{"class":198},[186,76101,14513],{"class":202},[186,76103,76104],{"class":192},"\u002F\u002F重置表单\n",[186,76106,76108],{"class":188,"line":76107},268,[186,76109,76110],{"class":192},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[186,76112,76114,76117,76119,76121,76124,76126,76128,76130,76132],{"class":188,"line":76113},269,[186,76115,76116],{"class":202},"      localStorage.",[186,76118,73088],{"class":198},[186,76120,832],{"class":202},[186,76122,76123],{"class":532},"'data'",[186,76125,13898],{"class":202},[186,76127,73098],{"class":206},[186,76129,2168],{"class":202},[186,76131,73103],{"class":198},[186,76133,76134],{"class":202},"(arr))\n",[186,76136,76138],{"class":188,"line":76137},270,[186,76139,34916],{"class":202},[186,76141,76143],{"class":188,"line":76142},271,[186,76144,3867],{"emptyLinePlaceholder":1551},[186,76146,76148],{"class":188,"line":76147},272,[186,76149,76150],{"class":192},"    \u002F\u002F 3.删除业务\n",[186,76152,76154],{"class":188,"line":76153},273,[186,76155,76156],{"class":192},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[186,76158,76160,76162,76164,76166,76168,76170,76172,76174,76176],{"class":188,"line":76159},274,[186,76161,71778],{"class":202},[186,76163,59254],{"class":198},[186,76165,832],{"class":202},[186,76167,59259],{"class":532},[186,76169,13898],{"class":202},[186,76171,55894],{"class":669},[186,76173,3126],{"class":202},[186,76175,1694],{"class":835},[186,76177,13905],{"class":202},[186,76179,76181],{"class":188,"line":76180},275,[186,76182,76183],{"class":192},"      \u002F\u002F 判断是否点击的是删除按钮\n",[186,76185,76187,76189,76191,76193,76195],{"class":188,"line":76186},276,[186,76188,55925],{"class":669},[186,76190,68471],{"class":202},[186,76192,55931],{"class":669},[186,76194,69693],{"class":532},[186,76196,13905],{"class":202},[186,76198,76200],{"class":188,"line":76199},277,[186,76201,76202],{"class":192},"        \u002F\u002F alert(1)\n",[186,76204,76206],{"class":188,"line":76205},278,[186,76207,76208],{"class":192},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[186,76210,76212],{"class":188,"line":76211},279,[186,76213,76214],{"class":192},"        \u002F\u002F console.log(e.target)\n",[186,76216,76218],{"class":188,"line":76217},280,[186,76219,76220],{"class":192},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[186,76222,76224],{"class":188,"line":76223},281,[186,76225,3867],{"emptyLinePlaceholder":1551},[186,76227,76229],{"class":188,"line":76228},282,[186,76230,76231],{"class":192},"        \u002F\u002F 确认框，确然是否真的要删除\n",[186,76233,76235],{"class":188,"line":76234},283,[186,76236,76237],{"class":192},"        \u002F\u002F confirm()为确认框\n",[186,76239,76241],{"class":188,"line":76240},284,[186,76242,76243],{"class":192},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[186,76245,76247,76249,76251,76254,76256,76259],{"class":188,"line":76246},285,[186,76248,3964],{"class":669},[186,76250,3126],{"class":202},[186,76252,76253],{"class":198},"confirm",[186,76255,832],{"class":202},[186,76257,76258],{"class":532},"'您确定要删除这条数据吗？'",[186,76260,76261],{"class":202},")) {\n",[186,76263,76265,76268,76270,76272,76274],{"class":188,"line":76264},286,[186,76266,76267],{"class":202},"          arr.",[186,76269,59451],{"class":198},[186,76271,71831],{"class":202},[186,76273,1829],{"class":206},[186,76275,1629],{"class":202},[186,76277,76279],{"class":188,"line":76278},287,[186,76280,76281],{"class":192},"          \u002F\u002F 3.4 重新渲染页面\n",[186,76283,76285,76288],{"class":188,"line":76284},288,[186,76286,76287],{"class":198},"          render",[186,76289,3443],{"class":202},[186,76291,76293],{"class":188,"line":76292},289,[186,76294,76295],{"class":192},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[186,76297,76299,76302,76304,76306,76308,76310,76312,76314,76316],{"class":188,"line":76298},290,[186,76300,76301],{"class":202},"          localStorage.",[186,76303,73088],{"class":198},[186,76305,832],{"class":202},[186,76307,76123],{"class":532},[186,76309,13898],{"class":202},[186,76311,73098],{"class":206},[186,76313,2168],{"class":202},[186,76315,73103],{"class":198},[186,76317,76134],{"class":202},[186,76319,76321],{"class":188,"line":76320},291,[186,76322,3996],{"class":202},[186,76324,76326],{"class":188,"line":76325},292,[186,76327,53845],{"class":202},[186,76329,76331],{"class":188,"line":76330},293,[186,76332,3867],{"emptyLinePlaceholder":1551},[186,76334,76336],{"class":188,"line":76335},294,[186,76337,34916],{"class":202},[186,76339,76341],{"class":188,"line":76340},295,[186,76342,3867],{"emptyLinePlaceholder":1551},[186,76344,76346,76348,76350],{"class":188,"line":76345},296,[186,76347,53864],{"class":202},[186,76349,53260],{"class":523},[186,76351,552],{"class":202},[186,76353,76355,76357,76359],{"class":188,"line":76354},297,[186,76356,1470],{"class":202},[186,76358,53247],{"class":523},[186,76360,552],{"class":202},[186,76362,76364],{"class":188,"line":76363},298,[186,76365,3867],{"emptyLinePlaceholder":1551},[186,76367,76369,76371,76373],{"class":188,"line":76368},299,[186,76370,1470],{"class":202},[186,76372,52089],{"class":523},[186,76374,552],{"class":202},[14,76376,76378],{"id":76377},"_36-正则表达式","3.6 正则表达式",[169,76380,76381],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[169,76383,76384],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[169,76386,76387],{},"正则表达式的作用：",[19,76389,76390,76397,76403],{},[22,76391,76392,76393,76396],{},"表单验证（ ",[54,76394,76395],{},"匹配"," ）",[22,76398,76399,76400,76396],{},"过滤敏感词（ ",[54,76401,76402],{},"替换",[22,76404,76405,76406,76396],{},"字符串中提取我们想要的部分（ ",[54,76407,76408],{},"提取",[29,76410,76412],{"id":76411},"_361-语法","3.6.1 语法",[169,76414,76415],{},"正则表达式使用步骤：",[34,76417,76418,76421],{},[22,76419,76420],{},"定义规则",[22,76422,76423],{},"查找是否匹配",[169,76425,76426],{},"正则表达式里边不需要写引号",[169,76428,76429],{},[164,76430],{"alt":181,"src":76431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[169,76433,76434],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[169,76436,76437],{},"reg.test(str)",[169,76439,76440],{},[164,76441],{"alt":181,"src":76442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[169,76444,76445],{},[164,76446],{"alt":181,"src":76447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[29,76449,76451],{"id":76450},"_362-元字符","3.6.2 元字符",[34,76453,76454,76457,76460,76463,76470],{},[22,76455,76456],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[22,76458,76459],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[22,76461,76462],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[22,76464,76465,76466],{},"正则验证工具：",[948,76467,76468],{"href":76468,"rel":76469},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[952],[22,76471,76472],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23459,76474,76476],{"id":76475},"_3621-边界符","3.6.2.1 边界符",[169,76478,76479],{},[164,76480],{"alt":181,"src":76481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[169,76483,76484],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[169,76486,76487],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[169,76489,76490],{},"只匹配一次",[169,76492,76493],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23459,76495,76497],{"id":76496},"_3622-量词","3.6.2.2 量词",[169,76499,76500],{},[164,76501],{"alt":181,"src":76502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[169,76504,76505],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23459,76507,76509],{"id":76508},"_3623-元字符","3.6.2.3 元字符",[169,76511,76512],{},[164,76513],{"alt":181,"src":76514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[169,76516,76517],{},"匹配的是a或b或c []只选一个",[169,76519,76520],{},[164,76521],{"alt":181,"src":76522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[169,76524,76525],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[169,76527,76528],{},[164,76529],{"alt":181,"src":76530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[169,76532,76533],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[169,76535,76536],{},[164,76537],{"alt":181,"src":76538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[176,76540,76542],{"className":52087,"code":76541,"language":52089,"meta":181,"style":181},"\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",[183,76543,76544,76554,76568,76572,76580,76594,76614,76626,76634,76638,76646,76654,76659,76690,76717,76745,76749,76754,76782,76813,76818,76823,76854,76886,76918,76922,76927,76958,76988,77018,77022,77027,77058,77089,77119,77149,77153,77158,77191,77195,77200,77231,77262,77266,77271,77302,77332,77363,77367,77372,77404,77435,77466,77493,77524,77556,77589,77620,77651,77683,77714,77722,77730,77734],{"__ignoreMap":181},[186,76545,76546,76548,76550,76552],{"class":188,"line":189},[186,76547,52751],{"class":202},[186,76549,52754],{"class":523},[186,76551,52757],{"class":198},[186,76553,552],{"class":202},[186,76555,76556,76558,76560,76562,76564,76566],{"class":188,"line":49},[186,76557,520],{"class":202},[186,76559,52089],{"class":523},[186,76561,52768],{"class":198},[186,76563,529],{"class":202},[186,76565,52773],{"class":532},[186,76567,552],{"class":202},[186,76569,76570],{"class":188,"line":219},[186,76571,3867],{"emptyLinePlaceholder":1551},[186,76573,76574,76576,76578],{"class":188,"line":225},[186,76575,520],{"class":202},[186,76577,52786],{"class":523},[186,76579,552],{"class":202},[186,76581,76582,76584,76586,76588,76590,76592],{"class":188,"line":242},[186,76583,53591],{"class":202},[186,76585,52796],{"class":523},[186,76587,52799],{"class":198},[186,76589,529],{"class":202},[186,76591,52804],{"class":532},[186,76593,552],{"class":202},[186,76595,76596,76598,76600,76602,76604,76606,76608,76610,76612],{"class":188,"line":248},[186,76597,53591],{"class":202},[186,76599,52796],{"class":523},[186,76601,16382],{"class":198},[186,76603,529],{"class":202},[186,76605,52843],{"class":532},[186,76607,52823],{"class":198},[186,76609,529],{"class":202},[186,76611,52850],{"class":532},[186,76613,552],{"class":202},[186,76615,76616,76618,76620,76622,76624],{"class":188,"line":265},[186,76617,53591],{"class":202},[186,76619,52859],{"class":523},[186,76621,52862],{"class":202},[186,76623,52859],{"class":523},[186,76625,552],{"class":202},[186,76627,76628,76630,76632],{"class":188,"line":271},[186,76629,1470],{"class":202},[186,76631,52786],{"class":523},[186,76633,552],{"class":202},[186,76635,76636],{"class":188,"line":288},[186,76637,3867],{"emptyLinePlaceholder":1551},[186,76639,76640,76642,76644],{"class":188,"line":294},[186,76641,520],{"class":202},[186,76643,53247],{"class":523},[186,76645,552],{"class":202},[186,76647,76648,76650,76652],{"class":188,"line":1212},[186,76649,53591],{"class":202},[186,76651,53260],{"class":523},[186,76653,552],{"class":202},[186,76655,76656],{"class":188,"line":1223},[186,76657,76658],{"class":192},"    \u002F\u002F 元字符中\n",[186,76660,76661,76663,76665,76667,76669,76672,76674,76676,76679,76681,76684,76687],{"class":188,"line":1236},[186,76662,75186],{"class":202},[186,76664,59688],{"class":198},[186,76666,832],{"class":202},[186,76668,2194],{"class":532},[186,76670,76671],{"class":49431},"哈",[186,76673,2194],{"class":532},[186,76675,2168],{"class":202},[186,76677,76678],{"class":198},"test",[186,76680,832],{"class":202},[186,76682,76683],{"class":532},"'哈'",[186,76685,76686],{"class":202},"))  ",[186,76688,76689],{"class":192},"\u002F\u002Ftrue\n",[186,76691,76692,76694,76696,76698,76700,76702,76704,76706,76708,76710,76713,76715],{"class":188,"line":3096},[186,76693,75186],{"class":202},[186,76695,59688],{"class":198},[186,76697,832],{"class":202},[186,76699,2194],{"class":532},[186,76701,76671],{"class":49431},[186,76703,2194],{"class":532},[186,76705,2168],{"class":202},[186,76707,76678],{"class":198},[186,76709,832],{"class":202},[186,76711,76712],{"class":532},"'哈哈'",[186,76714,76686],{"class":202},[186,76716,76689],{"class":192},[186,76718,76719,76721,76723,76725,76727,76729,76731,76733,76735,76737,76740,76743],{"class":188,"line":3110},[186,76720,75186],{"class":202},[186,76722,59688],{"class":198},[186,76724,832],{"class":202},[186,76726,2194],{"class":532},[186,76728,76671],{"class":49431},[186,76730,2194],{"class":532},[186,76732,2168],{"class":202},[186,76734,76678],{"class":198},[186,76736,832],{"class":202},[186,76738,76739],{"class":532},"'二哈'",[186,76741,76742],{"class":202},"))   ",[186,76744,76689],{"class":192},[186,76746,76747],{"class":188,"line":3115},[186,76748,3867],{"emptyLinePlaceholder":1551},[186,76750,76751],{"class":188,"line":3121},[186,76752,76753],{"class":192},"    \u002F\u002F 1.边界符\n",[186,76755,76756,76758,76760,76762,76764,76766,76768,76770,76772,76774,76776,76778,76780],{"class":188,"line":3142},[186,76757,75186],{"class":202},[186,76759,59688],{"class":198},[186,76761,832],{"class":202},[186,76763,2194],{"class":532},[186,76765,2573],{"class":669},[186,76767,76671],{"class":49431},[186,76769,2194],{"class":532},[186,76771,2168],{"class":202},[186,76773,76678],{"class":198},[186,76775,832],{"class":202},[186,76777,76683],{"class":532},[186,76779,76686],{"class":202},[186,76781,76689],{"class":192},[186,76783,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804,76806,76808,76810],{"class":188,"line":3147},[186,76785,75186],{"class":202},[186,76787,59688],{"class":198},[186,76789,832],{"class":202},[186,76791,2194],{"class":532},[186,76793,2573],{"class":669},[186,76795,76671],{"class":49431},[186,76797,1913],{"class":669},[186,76799,2194],{"class":532},[186,76801,2168],{"class":202},[186,76803,76678],{"class":198},[186,76805,832],{"class":202},[186,76807,76712],{"class":532},[186,76809,76686],{"class":202},[186,76811,76812],{"class":192},"\u002F\u002Ffalse\n",[186,76814,76815],{"class":188,"line":3161},[186,76816,76817],{"class":192},"    \u002F\u002F 2.量词\n",[186,76819,76820],{"class":188,"line":3166},[186,76821,76822],{"class":192},"    \u002F\u002F 量词 * 类似于 >= 0\n",[186,76824,76825,76827,76829,76831,76833,76835,76837,76840,76842,76844,76846,76848,76850,76852],{"class":188,"line":3195},[186,76826,75186],{"class":202},[186,76828,59688],{"class":198},[186,76830,832],{"class":202},[186,76832,2194],{"class":532},[186,76834,2573],{"class":669},[186,76836,76671],{"class":49431},[186,76838,76839],{"class":669},"*$",[186,76841,2194],{"class":532},[186,76843,2168],{"class":202},[186,76845,76678],{"class":198},[186,76847,832],{"class":202},[186,76849,76712],{"class":532},[186,76851,76686],{"class":202},[186,76853,76689],{"class":192},[186,76855,76856,76858,76860,76862,76864,76866,76868,76870,76872,76874,76876,76878,76881,76883],{"class":188,"line":3200},[186,76857,75186],{"class":202},[186,76859,59688],{"class":198},[186,76861,832],{"class":202},[186,76863,2194],{"class":532},[186,76865,2573],{"class":669},[186,76867,76671],{"class":49431},[186,76869,76839],{"class":669},[186,76871,2194],{"class":532},[186,76873,2168],{"class":202},[186,76875,76678],{"class":198},[186,76877,832],{"class":202},[186,76879,76880],{"class":532},"'二哈好傻'",[186,76882,76686],{"class":202},[186,76884,76885],{"class":192},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[186,76887,76888,76890,76892,76894,76896,76898,76900,76902,76904,76906,76908,76910,76913,76915],{"class":188,"line":3217},[186,76889,75186],{"class":202},[186,76891,59688],{"class":198},[186,76893,832],{"class":202},[186,76895,2194],{"class":532},[186,76897,2573],{"class":669},[186,76899,76671],{"class":49431},[186,76901,76839],{"class":669},[186,76903,2194],{"class":532},[186,76905,2168],{"class":202},[186,76907,76678],{"class":198},[186,76909,832],{"class":202},[186,76911,76912],{"class":532},"'哈好哈'",[186,76914,76742],{"class":202},[186,76916,76917],{"class":192},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[186,76919,76920],{"class":188,"line":3222},[186,76921,3867],{"emptyLinePlaceholder":1551},[186,76923,76924],{"class":188,"line":3227},[186,76925,76926],{"class":192},"    \u002F\u002F +类似于>=1\n",[186,76928,76929,76931,76933,76935,76937,76939,76941,76944,76946,76948,76950,76952,76954,76956],{"class":188,"line":3232},[186,76930,75186],{"class":202},[186,76932,59688],{"class":198},[186,76934,832],{"class":202},[186,76936,2194],{"class":532},[186,76938,2573],{"class":669},[186,76940,76671],{"class":49431},[186,76942,76943],{"class":669},"+$",[186,76945,2194],{"class":532},[186,76947,2168],{"class":202},[186,76949,76678],{"class":198},[186,76951,832],{"class":202},[186,76953,76712],{"class":532},[186,76955,76686],{"class":202},[186,76957,76689],{"class":192},[186,76959,76960,76962,76964,76966,76968,76970,76972,76974,76976,76978,76980,76982,76984,76986],{"class":188,"line":3246},[186,76961,75186],{"class":202},[186,76963,59688],{"class":198},[186,76965,832],{"class":202},[186,76967,2194],{"class":532},[186,76969,2573],{"class":669},[186,76971,76671],{"class":49431},[186,76973,76943],{"class":669},[186,76975,2194],{"class":532},[186,76977,2168],{"class":202},[186,76979,76678],{"class":198},[186,76981,832],{"class":202},[186,76983,76880],{"class":532},[186,76985,76686],{"class":202},[186,76987,76885],{"class":192},[186,76989,76990,76992,76994,76996,76998,77000,77002,77004,77006,77008,77010,77012,77014,77016],{"class":188,"line":3251},[186,76991,75186],{"class":202},[186,76993,59688],{"class":198},[186,76995,832],{"class":202},[186,76997,2194],{"class":532},[186,76999,2573],{"class":669},[186,77001,76671],{"class":49431},[186,77003,76943],{"class":669},[186,77005,2194],{"class":532},[186,77007,2168],{"class":202},[186,77009,76678],{"class":198},[186,77011,832],{"class":202},[186,77013,76912],{"class":532},[186,77015,76742],{"class":202},[186,77017,76812],{"class":192},[186,77019,77020],{"class":188,"line":4044},[186,77021,3867],{"emptyLinePlaceholder":1551},[186,77023,77024],{"class":188,"line":4058},[186,77025,77026],{"class":192},"    \u002F\u002F ?类似于0次或一次\n",[186,77028,77029,77031,77033,77035,77037,77039,77042,77044,77046,77048,77050,77052,77054,77056],{"class":188,"line":4066},[186,77030,75186],{"class":202},[186,77032,59688],{"class":198},[186,77034,832],{"class":202},[186,77036,2194],{"class":532},[186,77038,2573],{"class":669},[186,77040,77041],{"class":49431},"哈？",[186,77043,1913],{"class":669},[186,77045,2194],{"class":532},[186,77047,2168],{"class":202},[186,77049,76678],{"class":198},[186,77051,832],{"class":202},[186,77053,75661],{"class":532},[186,77055,76742],{"class":202},[186,77057,76689],{"class":192},[186,77059,77060,77062,77064,77066,77068,77070,77072,77075,77077,77079,77081,77083,77085,77087],{"class":188,"line":4071},[186,77061,75186],{"class":202},[186,77063,59688],{"class":198},[186,77065,832],{"class":202},[186,77067,2194],{"class":532},[186,77069,2573],{"class":669},[186,77071,76671],{"class":49431},[186,77073,77074],{"class":669},"?$",[186,77076,2194],{"class":532},[186,77078,2168],{"class":202},[186,77080,76678],{"class":198},[186,77082,832],{"class":202},[186,77084,76712],{"class":532},[186,77086,76686],{"class":202},[186,77088,76812],{"class":192},[186,77090,77091,77093,77095,77097,77099,77101,77103,77105,77107,77109,77111,77113,77115,77117],{"class":188,"line":4077},[186,77092,75186],{"class":202},[186,77094,59688],{"class":198},[186,77096,832],{"class":202},[186,77098,2194],{"class":532},[186,77100,2573],{"class":669},[186,77102,76671],{"class":49431},[186,77104,77074],{"class":669},[186,77106,2194],{"class":532},[186,77108,2168],{"class":202},[186,77110,76678],{"class":198},[186,77112,832],{"class":202},[186,77114,76880],{"class":532},[186,77116,76686],{"class":202},[186,77118,76885],{"class":192},[186,77120,77121,77123,77125,77127,77129,77131,77133,77135,77137,77139,77141,77143,77145,77147],{"class":188,"line":4083},[186,77122,75186],{"class":202},[186,77124,59688],{"class":198},[186,77126,832],{"class":202},[186,77128,2194],{"class":532},[186,77130,2573],{"class":669},[186,77132,76671],{"class":49431},[186,77134,77074],{"class":669},[186,77136,2194],{"class":532},[186,77138,2168],{"class":202},[186,77140,76678],{"class":198},[186,77142,832],{"class":202},[186,77144,76912],{"class":532},[186,77146,76686],{"class":202},[186,77148,76812],{"class":192},[186,77150,77151],{"class":188,"line":4088},[186,77152,3867],{"emptyLinePlaceholder":1551},[186,77154,77155],{"class":188,"line":9411},[186,77156,77157],{"class":192},"    \u002F\u002F {n}写几，就必须出现几次\n",[186,77159,77160,77162,77164,77166,77168,77170,77172,77175,77177,77179,77181,77183,77186,77189],{"class":188,"line":9435},[186,77161,75186],{"class":202},[186,77163,59688],{"class":198},[186,77165,832],{"class":202},[186,77167,2194],{"class":532},[186,77169,2573],{"class":669},[186,77171,76671],{"class":49431},[186,77173,77174],{"class":669},"{4}$",[186,77176,2194],{"class":532},[186,77178,2168],{"class":202},[186,77180,76678],{"class":198},[186,77182,832],{"class":202},[186,77184,77185],{"class":532},"'哈哈哈哈'",[186,77187,77188],{"class":202},")) ",[186,77190,76689],{"class":192},[186,77192,77193],{"class":188,"line":9440},[186,77194,3867],{"emptyLinePlaceholder":1551},[186,77196,77197],{"class":188,"line":9446},[186,77198,77199],{"class":192},"    \u002F\u002F {n,}大于等于n次\n",[186,77201,77202,77204,77206,77208,77210,77212,77214,77217,77219,77221,77223,77225,77227,77229],{"class":188,"line":9473},[186,77203,75186],{"class":202},[186,77205,59688],{"class":198},[186,77207,832],{"class":202},[186,77209,2194],{"class":532},[186,77211,2573],{"class":669},[186,77213,76671],{"class":49431},[186,77215,77216],{"class":669},"{4,}$",[186,77218,2194],{"class":532},[186,77220,2168],{"class":202},[186,77222,76678],{"class":198},[186,77224,832],{"class":202},[186,77226,77185],{"class":532},[186,77228,77188],{"class":202},[186,77230,76689],{"class":192},[186,77232,77233,77235,77237,77239,77241,77243,77245,77247,77249,77251,77253,77255,77258,77260],{"class":188,"line":9478},[186,77234,75186],{"class":202},[186,77236,59688],{"class":198},[186,77238,832],{"class":202},[186,77240,2194],{"class":532},[186,77242,2573],{"class":669},[186,77244,76671],{"class":49431},[186,77246,77216],{"class":669},[186,77248,2194],{"class":532},[186,77250,2168],{"class":202},[186,77252,76678],{"class":198},[186,77254,832],{"class":202},[186,77256,77257],{"class":532},"'哈哈哈哈哈'",[186,77259,77188],{"class":202},[186,77261,76689],{"class":192},[186,77263,77264],{"class":188,"line":9484},[186,77265,3867],{"emptyLinePlaceholder":1551},[186,77267,77268],{"class":188,"line":9496},[186,77269,77270],{"class":192},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[186,77272,77273,77275,77277,77279,77281,77283,77285,77288,77290,77292,77294,77296,77298,77300],{"class":188,"line":9508},[186,77274,75186],{"class":202},[186,77276,59688],{"class":198},[186,77278,832],{"class":202},[186,77280,2194],{"class":532},[186,77282,2573],{"class":669},[186,77284,76671],{"class":49431},[186,77286,77287],{"class":669},"{4,6}$",[186,77289,2194],{"class":532},[186,77291,2168],{"class":202},[186,77293,76678],{"class":198},[186,77295,832],{"class":202},[186,77297,77185],{"class":532},[186,77299,77188],{"class":202},[186,77301,76689],{"class":192},[186,77303,77304,77306,77308,77310,77312,77314,77316,77318,77320,77322,77324,77326,77328,77330],{"class":188,"line":9520},[186,77305,75186],{"class":202},[186,77307,59688],{"class":198},[186,77309,832],{"class":202},[186,77311,2194],{"class":532},[186,77313,2573],{"class":669},[186,77315,76671],{"class":49431},[186,77317,77287],{"class":669},[186,77319,2194],{"class":532},[186,77321,2168],{"class":202},[186,77323,76678],{"class":198},[186,77325,832],{"class":202},[186,77327,77257],{"class":532},[186,77329,77188],{"class":202},[186,77331,76689],{"class":192},[186,77333,77334,77336,77338,77340,77342,77344,77346,77348,77350,77352,77354,77356,77359,77361],{"class":188,"line":11179},[186,77335,75186],{"class":202},[186,77337,59688],{"class":198},[186,77339,832],{"class":202},[186,77341,2194],{"class":532},[186,77343,2573],{"class":669},[186,77345,76671],{"class":49431},[186,77347,77287],{"class":669},[186,77349,2194],{"class":532},[186,77351,2168],{"class":202},[186,77353,76678],{"class":198},[186,77355,832],{"class":202},[186,77357,77358],{"class":532},"'哈哈哈哈哈哈哈'",[186,77360,77188],{"class":202},[186,77362,76812],{"class":192},[186,77364,77365],{"class":188,"line":11204},[186,77366,3867],{"emptyLinePlaceholder":1551},[186,77368,77369],{"class":188,"line":11227},[186,77370,77371],{"class":192},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[186,77373,77374,77376,77378,77380,77382,77384,77387,77389,77391,77393,77395,77397,77400,77402],{"class":188,"line":11251},[186,77375,75186],{"class":202},[186,77377,59688],{"class":198},[186,77379,832],{"class":202},[186,77381,2194],{"class":532},[186,77383,2573],{"class":669},[186,77385,77386],{"class":206},"[abc]",[186,77388,1913],{"class":669},[186,77390,2194],{"class":532},[186,77392,2168],{"class":202},[186,77394,76678],{"class":198},[186,77396,832],{"class":202},[186,77398,77399],{"class":532},"'a'",[186,77401,76686],{"class":202},[186,77403,76689],{"class":192},[186,77405,77406,77408,77410,77412,77414,77416,77418,77420,77422,77424,77426,77428,77431,77433],{"class":188,"line":11256},[186,77407,75186],{"class":202},[186,77409,59688],{"class":198},[186,77411,832],{"class":202},[186,77413,2194],{"class":532},[186,77415,2573],{"class":669},[186,77417,77386],{"class":206},[186,77419,1913],{"class":669},[186,77421,2194],{"class":532},[186,77423,2168],{"class":202},[186,77425,76678],{"class":198},[186,77427,832],{"class":202},[186,77429,77430],{"class":532},"'b'",[186,77432,76686],{"class":202},[186,77434,76689],{"class":192},[186,77436,77437,77439,77441,77443,77445,77447,77449,77451,77453,77455,77457,77459,77462,77464],{"class":188,"line":11261},[186,77438,75186],{"class":202},[186,77440,59688],{"class":198},[186,77442,832],{"class":202},[186,77444,2194],{"class":532},[186,77446,2573],{"class":669},[186,77448,77386],{"class":206},[186,77450,1913],{"class":669},[186,77452,2194],{"class":532},[186,77454,2168],{"class":202},[186,77456,76678],{"class":198},[186,77458,832],{"class":202},[186,77460,77461],{"class":532},"'c'",[186,77463,76686],{"class":202},[186,77465,76689],{"class":192},[186,77467,77468,77470,77472,77474,77476,77478,77480,77482,77484,77486,77489,77491],{"class":188,"line":11266},[186,77469,75186],{"class":202},[186,77471,59688],{"class":198},[186,77473,832],{"class":202},[186,77475,2194],{"class":532},[186,77477,77386],{"class":206},[186,77479,2194],{"class":532},[186,77481,2168],{"class":202},[186,77483,76678],{"class":198},[186,77485,832],{"class":202},[186,77487,77488],{"class":532},"'ab'",[186,77490,76686],{"class":202},[186,77492,76689],{"class":192},[186,77494,77495,77497,77499,77501,77503,77505,77507,77509,77511,77513,77515,77517,77519,77521],{"class":188,"line":11275},[186,77496,75186],{"class":202},[186,77498,59688],{"class":198},[186,77500,832],{"class":202},[186,77502,2194],{"class":532},[186,77504,2573],{"class":669},[186,77506,77386],{"class":206},[186,77508,1913],{"class":669},[186,77510,2194],{"class":532},[186,77512,2168],{"class":202},[186,77514,76678],{"class":198},[186,77516,832],{"class":202},[186,77518,77488],{"class":532},[186,77520,76686],{"class":202},[186,77522,77523],{"class":192},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[186,77525,77526,77528,77530,77532,77534,77536,77538,77541,77543,77545,77547,77549,77551,77553],{"class":188,"line":11280},[186,77527,75186],{"class":202},[186,77529,59688],{"class":198},[186,77531,832],{"class":202},[186,77533,2194],{"class":532},[186,77535,2573],{"class":669},[186,77537,77386],{"class":206},[186,77539,77540],{"class":669},"{2}$",[186,77542,2194],{"class":532},[186,77544,2168],{"class":202},[186,77546,76678],{"class":198},[186,77548,832],{"class":202},[186,77550,77488],{"class":532},[186,77552,76686],{"class":202},[186,77554,77555],{"class":192},"\u002F\u002Ftrue   可以选两个\n",[186,77557,77558,77560,77562,77564,77566,77568,77571,77573,77575,77577,77579,77581,77584,77586],{"class":188,"line":11286},[186,77559,75186],{"class":202},[186,77561,59688],{"class":198},[186,77563,832],{"class":202},[186,77565,2194],{"class":532},[186,77567,2573],{"class":669},[186,77569,77570],{"class":206},"[a-z]",[186,77572,1913],{"class":669},[186,77574,2194],{"class":532},[186,77576,2168],{"class":202},[186,77578,76678],{"class":198},[186,77580,832],{"class":202},[186,77582,77583],{"class":532},"'p'",[186,77585,76742],{"class":202},[186,77587,77588],{"class":192},"\u002F\u002Ftrue   依然只能选一个\n",[186,77590,77591,77593,77595,77597,77599,77601,77604,77606,77608,77610,77612,77614,77616,77618],{"class":188,"line":11307},[186,77592,75186],{"class":202},[186,77594,59688],{"class":198},[186,77596,832],{"class":202},[186,77598,2194],{"class":532},[186,77600,2573],{"class":669},[186,77602,77603],{"class":206},"[A-Z]",[186,77605,1913],{"class":669},[186,77607,2194],{"class":532},[186,77609,2168],{"class":202},[186,77611,76678],{"class":198},[186,77613,832],{"class":202},[186,77615,77583],{"class":532},[186,77617,76742],{"class":202},[186,77619,76812],{"class":192},[186,77621,77622,77624,77626,77628,77630,77632,77634,77636,77638,77640,77642,77644,77647,77649],{"class":188,"line":11313},[186,77623,75186],{"class":202},[186,77625,59688],{"class":198},[186,77627,832],{"class":202},[186,77629,2194],{"class":532},[186,77631,2573],{"class":669},[186,77633,77603],{"class":206},[186,77635,1913],{"class":669},[186,77637,2194],{"class":532},[186,77639,2168],{"class":202},[186,77641,76678],{"class":198},[186,77643,832],{"class":202},[186,77645,77646],{"class":532},"'P'",[186,77648,76742],{"class":202},[186,77650,76689],{"class":192},[186,77652,77653,77655,77657,77659,77661,77663,77666,77668,77670,77672,77674,77676,77679,77681],{"class":188,"line":11327},[186,77654,75186],{"class":202},[186,77656,59688],{"class":198},[186,77658,832],{"class":202},[186,77660,2194],{"class":532},[186,77662,2573],{"class":669},[186,77664,77665],{"class":206},"[0-9]",[186,77667,1913],{"class":669},[186,77669,2194],{"class":532},[186,77671,2168],{"class":202},[186,77673,76678],{"class":198},[186,77675,832],{"class":202},[186,77677,77678],{"class":532},"'0'",[186,77680,76742],{"class":202},[186,77682,76689],{"class":192},[186,77684,77685,77687,77689,77691,77693,77695,77698,77700,77702,77704,77706,77708,77710,77712],{"class":188,"line":11333},[186,77686,75186],{"class":202},[186,77688,59688],{"class":198},[186,77690,832],{"class":202},[186,77692,2194],{"class":532},[186,77694,2573],{"class":669},[186,77696,77697],{"class":206},"[a-zA-Z0-9]",[186,77699,1913],{"class":669},[186,77701,2194],{"class":532},[186,77703,2168],{"class":202},[186,77705,76678],{"class":198},[186,77707,832],{"class":202},[186,77709,77583],{"class":532},[186,77711,76686],{"class":202},[186,77713,76689],{"class":192},[186,77715,77716,77718,77720],{"class":188,"line":11360},[186,77717,53864],{"class":202},[186,77719,53260],{"class":523},[186,77721,552],{"class":202},[186,77723,77724,77726,77728],{"class":188,"line":11369},[186,77725,1470],{"class":202},[186,77727,53247],{"class":523},[186,77729,552],{"class":202},[186,77731,77732],{"class":188,"line":11375},[186,77733,3867],{"emptyLinePlaceholder":1551},[186,77735,77736,77738,77740],{"class":188,"line":11383},[186,77737,1470],{"class":202},[186,77739,52089],{"class":523},[186,77741,552],{"class":202},[23459,77743,77745],{"id":77744},"_3624-修饰符","3.6.2.4 修饰符",[169,77747,77748],{},[164,77749],{"alt":181,"src":77750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[169,77752,77753],{},"replace是个方法，使用的时候一定不要忘记括号()",[169,77755,77756],{},[164,77757],{"alt":181,"src":77758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[176,77760,77762],{"className":52087,"code":77761,"language":52089,"meta":181,"style":181},"\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",[183,77763,77764,77774,77788,77796,77810,77830,77842,77850,77858,77866,77898,77929,77934,77966,77977,78010,78019,78027,78035],{"__ignoreMap":181},[186,77765,77766,77768,77770,77772],{"class":188,"line":189},[186,77767,52751],{"class":202},[186,77769,52754],{"class":523},[186,77771,52757],{"class":198},[186,77773,552],{"class":202},[186,77775,77776,77778,77780,77782,77784,77786],{"class":188,"line":49},[186,77777,520],{"class":202},[186,77779,52089],{"class":523},[186,77781,52768],{"class":198},[186,77783,529],{"class":202},[186,77785,52773],{"class":532},[186,77787,552],{"class":202},[186,77789,77790,77792,77794],{"class":188,"line":219},[186,77791,520],{"class":202},[186,77793,52786],{"class":523},[186,77795,552],{"class":202},[186,77797,77798,77800,77802,77804,77806,77808],{"class":188,"line":225},[186,77799,53591],{"class":202},[186,77801,52796],{"class":523},[186,77803,52799],{"class":198},[186,77805,529],{"class":202},[186,77807,52804],{"class":532},[186,77809,552],{"class":202},[186,77811,77812,77814,77816,77818,77820,77822,77824,77826,77828],{"class":188,"line":242},[186,77813,53591],{"class":202},[186,77815,52796],{"class":523},[186,77817,16382],{"class":198},[186,77819,529],{"class":202},[186,77821,52843],{"class":532},[186,77823,52823],{"class":198},[186,77825,529],{"class":202},[186,77827,52850],{"class":532},[186,77829,552],{"class":202},[186,77831,77832,77834,77836,77838,77840],{"class":188,"line":248},[186,77833,53591],{"class":202},[186,77835,52859],{"class":523},[186,77837,52862],{"class":202},[186,77839,52859],{"class":523},[186,77841,552],{"class":202},[186,77843,77844,77846,77848],{"class":188,"line":265},[186,77845,1470],{"class":202},[186,77847,52786],{"class":523},[186,77849,552],{"class":202},[186,77851,77852,77854,77856],{"class":188,"line":271},[186,77853,520],{"class":202},[186,77855,53247],{"class":523},[186,77857,552],{"class":202},[186,77859,77860,77862,77864],{"class":188,"line":288},[186,77861,53591],{"class":202},[186,77863,53260],{"class":523},[186,77865,552],{"class":202},[186,77867,77868,77870,77872,77874,77876,77878,77881,77883,77885,77887,77889,77891,77894,77896],{"class":188,"line":294},[186,77869,75186],{"class":202},[186,77871,59688],{"class":198},[186,77873,832],{"class":202},[186,77875,2194],{"class":532},[186,77877,2573],{"class":669},[186,77879,77880],{"class":49431},"java",[186,77882,1913],{"class":669},[186,77884,2194],{"class":532},[186,77886,2168],{"class":202},[186,77888,76678],{"class":198},[186,77890,832],{"class":202},[186,77892,77893],{"class":532},"'java'",[186,77895,77188],{"class":202},[186,77897,76689],{"class":192},[186,77899,77900,77902,77904,77906,77908,77910,77912,77914,77916,77918,77920,77922,77925,77927],{"class":188,"line":1212},[186,77901,75186],{"class":202},[186,77903,59688],{"class":198},[186,77905,832],{"class":202},[186,77907,2194],{"class":532},[186,77909,2573],{"class":669},[186,77911,77880],{"class":49431},[186,77913,1913],{"class":669},[186,77915,2194],{"class":532},[186,77917,2168],{"class":202},[186,77919,76678],{"class":198},[186,77921,832],{"class":202},[186,77923,77924],{"class":532},"'Java'",[186,77926,77188],{"class":202},[186,77928,76812],{"class":192},[186,77930,77931],{"class":188,"line":1223},[186,77932,77933],{"class":192},"    \u002F\u002F 不区分大小写、\n",[186,77935,77936,77938,77940,77942,77944,77946,77948,77950,77952,77954,77956,77958,77960,77962,77964],{"class":188,"line":1236},[186,77937,75186],{"class":202},[186,77939,59688],{"class":198},[186,77941,832],{"class":202},[186,77943,2194],{"class":532},[186,77945,2573],{"class":669},[186,77947,77880],{"class":49431},[186,77949,1913],{"class":669},[186,77951,2194],{"class":532},[186,77953,2051],{"class":669},[186,77955,2168],{"class":202},[186,77957,76678],{"class":198},[186,77959,832],{"class":202},[186,77961,77924],{"class":532},[186,77963,77188],{"class":202},[186,77965,76689],{"class":192},[186,77967,77968,77970,77972,77974],{"class":188,"line":3096},[186,77969,12684],{"class":669},[186,77971,75352],{"class":206},[186,77973,15027],{"class":669},[186,77975,77976],{"class":532}," 'java是一门编程语言，学完java工资很高'\n",[186,77978,77979,77981,77984,77986,77989,77992,77994,77996,77998,78000,78003,78005,78008],{"class":188,"line":3110},[186,77980,12684],{"class":669},[186,77982,77983],{"class":206}," result",[186,77985,15027],{"class":669},[186,77987,77988],{"class":202}," str.",[186,77990,77991],{"class":198},"replace",[186,77993,832],{"class":202},[186,77995,2194],{"class":532},[186,77997,77880],{"class":49431},[186,77999,2194],{"class":532},[186,78001,78002],{"class":669},"ig",[186,78004,13898],{"class":202},[186,78006,78007],{"class":532},"'前端'",[186,78009,1629],{"class":202},[186,78011,78012,78014,78016],{"class":188,"line":3115},[186,78013,75186],{"class":202},[186,78015,59688],{"class":198},[186,78017,78018],{"class":202},"(result)\n",[186,78020,78021,78023,78025],{"class":188,"line":3121},[186,78022,53864],{"class":202},[186,78024,53260],{"class":523},[186,78026,552],{"class":202},[186,78028,78029,78031,78033],{"class":188,"line":3142},[186,78030,1470],{"class":202},[186,78032,53247],{"class":523},[186,78034,552],{"class":202},[186,78036,78037,78039,78041],{"class":188,"line":3147},[186,78038,1470],{"class":202},[186,78040,52089],{"class":523},[186,78042,552],{"class":202},[1524,78044,78045],{},"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":181,"searchDepth":49,"depth":49,"links":78047},[78048,78058,78070,78087,78094,78102],{"id":54807,"depth":49,"text":54808,"children":78049},[78050,78051,78052,78053,78054,78055,78056,78057],{"id":54811,"depth":219,"text":54812},{"id":54844,"depth":219,"text":54845},{"id":54883,"depth":219,"text":54884},{"id":55040,"depth":219,"text":55041},{"id":55088,"depth":219,"text":55089},{"id":55224,"depth":219,"text":55225},{"id":55546,"depth":219,"text":55547},{"id":58530,"depth":219,"text":58531},{"id":58558,"depth":49,"text":58559,"children":78059},[78060,78061,78062,78063,78064,78065,78066,78067,78068,78069],{"id":58562,"depth":219,"text":58563},{"id":58585,"depth":219,"text":58586},{"id":59500,"depth":219,"text":59501},{"id":60190,"depth":219,"text":60191},{"id":60472,"depth":219,"text":60473},{"id":64630,"depth":219,"text":64631},{"id":64800,"depth":219,"text":64801},{"id":64928,"depth":219,"text":64929},{"id":64953,"depth":219,"text":64954},{"id":66341,"depth":219,"text":66342},{"id":67494,"depth":49,"text":67495,"children":78071},[78072,78073,78074,78075,78076,78077,78078,78079,78080,78081,78082,78083,78084,78085,78086],{"id":67498,"depth":219,"text":67499},{"id":68152,"depth":219,"text":68153},{"id":69847,"depth":219,"text":69848},{"id":69888,"depth":219,"text":69889},{"id":69930,"depth":219,"text":69931},{"id":69944,"depth":219,"text":69945},{"id":69993,"depth":219,"text":69994},{"id":70005,"depth":219,"text":70006},{"id":70020,"depth":219,"text":70021},{"id":70056,"depth":219,"text":70057},{"id":70137,"depth":219,"text":70138},{"id":70265,"depth":219,"text":70266},{"id":70277,"depth":219,"text":70278},{"id":70296,"depth":219,"text":70297},{"id":72404,"depth":219,"text":72405},{"id":72423,"depth":49,"text":72424,"children":78088},[78089,78090,78091,78092,78093],{"id":72444,"depth":219,"text":72445},{"id":72464,"depth":219,"text":72465},{"id":72513,"depth":219,"text":72514},{"id":72638,"depth":219,"text":72639},{"id":72819,"depth":219,"text":72820},{"id":72837,"depth":49,"text":72838,"children":78095},[78096,78097,78098,78099,78100,78101],{"id":72852,"depth":219,"text":72853},{"id":72911,"depth":219,"text":72912},{"id":72935,"depth":219,"text":72936},{"id":73255,"depth":219,"text":73256},{"id":73287,"depth":219,"text":73288},{"id":73310,"depth":219,"text":73311},{"id":76377,"depth":49,"text":76378,"children":78103},[78104,78105],{"id":76411,"depth":219,"text":76412},{"id":76450,"depth":219,"text":76451},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54779,"description":1548},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78112,"title":78113,"body":78114,"description":1548,"extension":1549,"meta":94249,"navigation":1551,"path":94250,"seo":94251,"stem":94252,"__hash__":94253},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78115,"toc":94185},[78116,78119,78122,78126,78130,78135,78140,78151,78155,78160,78163,78167,78170,78175,78179,78183,78186,78191,78194,78198,78201,78209,78212,78216,78221,78226,78229,78233,78238,78243,78246,78250,78255,78258,78263,78266,78271,78274,78279,78284,78287,78290,78294,78299,78304,78307,78311,78315,78318,78321,78324,78328,78332,78337,78342,78345,78349,78354,78359,78362,78365,78368,78371,78374,78377,78380,78383,78386,78391,78395,78400,78405,78408,78411,78414,78417,78420,78423,78426,78429,78433,78437,78440,78443,78446,78451,78453,78456,78459,78462,78465,78468,78471,78474,78477,78480,78483,78486,78489,78492,78497,78502,78507,78510,78514,78517,78522,78526,78528,78539,78544,78645,78648,78651,78654,78657,78660,78663,78666,78669,78671,78674,78677,78680,78683,78686,78688,78691,78694,78697,78700,78703,78706,78708,78711,78713,78715,78718,78722,78726,78729,78732,78735,78738,78741,78744,78747,78750,78753,78758,78878,78881,78884,78889,78892,78895,78898,78901,78906,78909,78912,78915,78918,78923,78926,79026,79091,79165,79169,79172,79175,79179,79182,79196,79225,79228,79231,79234,79237,79240,79243,79246,79248,79251,79254,79257,79260,79264,79269,79273,79278,79353,79356,79539,79542,79545,79548,79551,79554,79556,79559,79562,79565,79568,79571,79574,79576,79580,79583,79588,79591,79594,79597,79600,79602,79607,79610,79613,79616,79619,79621,79626,79629,79632,79634,79636,79639,79643,79646,79649,79654,79657,79660,79663,79713,79718,79722,79727,79730,79799,79802,79811,79815,79820,79823,79826,79834,79837,79854,81655,81659,81663,81668,81671,81675,81681,81687,81839,81844,81849,81852,81855,81858,81861,81864,81867,81870,81873,81876,81879,81882,81885,81890,81894,81897,81908,81912,81917,81920,81923,81926,81929,81932,81934,81937,81940,81943,81946,81948,81965,81968,81972,81975,81980,81985,81988,81991,81995,81998,82001,82010,82013,82017,82020,82025,82030,82097,82101,82104,82107,82112,82117,82203,82208,82212,82215,82218,82233,82236,82241,82245,82250,82359,82362,82373,82523,82527,82532,82641,82645,82650,82655,82660,82663,82670,82690,82726,82890,82895,82898,82903,82910,82913,82916,82919,82978,83034,83090,83094,83099,83414,83417,83421,83424,83429,83538,83543,83547,83552,83556,83627,83631,83633,83636,83639,83677,83953,83957,83974,84040,84074,84078,84081,84086,84115,84122,84131,84136,84151,84156,84165,84168,84305,84309,84371,84375,84380,84625,84629,84634,84637,84640,84643,84646,84650,84655,86236,86240,86244,86250,86253,86258,86262,86265,86270,86273,86284,86288,86293,86297,86302,86307,86310,86315,86319,86323,86326,86331,86336,86339,86342,86345,86467,86472,86574,86577,86580,86584,86589,86761,86766,86770,86773,86778,86844,86849,86852,86983,86986,86991,86994,86997,87088,87093,87096,87099,87102,87105,87110,87115,87118,87123,87128,87133,87137,87140,87143,87148,87153,87158,87163,87217,87220,87223,87228,87231,87234,87239,87244,87249,87253,87258,87272,87277,87280,87285,87289,87294,87299,87304,87309,87314,87319,87324,87329,87332,87336,87341,87344,87347,87350,87355,87360,87363,87366,87370,87373,87376,87381,87386,87391,87396,87399,87404,87409,87470,87475,87478,87483,88723,88728,88732,88736,88741,88744,88749,88754,88757,88762,88764,88769,88773,88776,88779,88790,88794,88799,88804,88859,88864,88869,88874,89085,89090,89094,89099,89102,89104,89107,89110,89557,89562,89569,89575,89578,89581,89845,89850,89854,90119,90124,90128,90133,90138,90143,90148,90479,90482,90487,90492,90495,90499,90503,90508,90513,90518,90523,90528,90533,90537,90540,90545,90550,90553,90627,90632,90637,90642,90644,90647,91017,91022,91027,91032,91035,91038,91140,91145,91150,91253,91257,91262,91266,91270,91275,91280,91283,91288,91291,91294,91687,91692,91695,91698,91701,91704,92224,92228,92233,92238,92243,92246,92251,92254,92257,92639,92644,92646,92648,92651,92654,93166,93170,93231,93234,93237,93240,93244,93247,93252,93257,94182],[10,78117,78113],{"id":78118},"_4js进阶",[169,78120,78121],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78123,78125],{"id":78124},"_41-作用域","4.1 作用域",[29,78127,78129],{"id":78128},"_411-局部作用域","4.1.1 局部作用域",[169,78131,78132],{},[164,78133],{"alt":181,"src":78134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[169,78136,78137],{},[164,78138],{"alt":181,"src":78139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[19,78141,78142,78145,78148],{},[22,78143,78144],{},"函数作用域在函数内部",[22,78146,78147],{},"块级作用域在{}",[22,78149,78150],{},"对象的那个{}不是作用域，不是块作用域",[29,78152,78154],{"id":78153},"_412-全局作用域","4.1.2 全局作用域",[169,78156,78157],{},[164,78158],{"alt":181,"src":78159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[169,78161,78162],{},"window.a=10不要这样写",[29,78164,78166],{"id":78165},"_413-作用域链","4.1.3 作用域链",[169,78168,78169],{},"变量查找机制",[169,78171,78172],{},[164,78173],{"alt":181,"src":78174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78176,78178],{"id":78177},"_42-垃圾回收机制","4.2 垃圾回收机制",[29,78180,78182],{"id":78181},"_421-大体介绍","4.2.1 大体介绍",[169,78184,78185],{},"垃圾回收机制(Garbage Collection) 简称 GC",[169,78187,78188],{},[164,78189],{"alt":181,"src":78190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[169,78192,78193],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[29,78195,78197],{"id":78196},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[169,78199,78200],{},"堆栈空间分配区别：",[34,78202,78203,78206],{},[22,78204,78205],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[22,78207,78208],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[169,78210,78211],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23459,78213,78215],{"id":78214},"_4221-引用计数","4.2.2.1 引用计数",[169,78217,78218],{},[164,78219],{"alt":181,"src":78220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[169,78222,78223],{},[164,78224],{"alt":181,"src":78225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[169,78227,78228],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23459,78230,78232],{"id":78231},"_4222-标记清除法","4.2.2.2 标记清除法",[169,78234,78235],{},[164,78236],{"alt":181,"src":78237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[169,78239,78240],{},[164,78241],{"alt":181,"src":78242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[169,78244,78245],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78247,78249],{"id":78248},"_43-闭包","4.3 闭包",[169,78251,78252],{},[164,78253],{"alt":181,"src":78254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[169,78256,78257],{},"闭包：内层函数+外层函数的变量",[169,78259,78260],{},[164,78261],{"alt":181,"src":78262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[169,78264,78265],{},"closure就是闭包",[169,78267,78268],{},[164,78269],{"alt":181,"src":78270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[169,78272,78273],{},"内层函数必须包含外层函数的变量才是闭包",[169,78275,78276],{},[164,78277],{"alt":181,"src":78278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[169,78280,78281],{},[164,78282],{"alt":181,"src":78283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[169,78285,78286],{},"闭包可能会引起内存泄漏",[169,78288,78289],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78291,78293],{"id":78292},"_44-变量提升","4.4 变量提升",[169,78295,78296],{},[164,78297],{"alt":181,"src":78298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[169,78300,78301],{},[164,78302],{"alt":181,"src":78303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[169,78305,78306],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78308,78310],{"id":78309},"_45-函数进阶","4.5 函数进阶",[29,78312,78314],{"id":78313},"_451-函数提升","4.5.1 函数提升",[169,78316,78317],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[169,78319,78320],{},"只提升函数声明，不提升函数调用",[53260,78322,78323],{},"\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",[29,78325,78327],{"id":78326},"_452-函数参数","4.5.2 函数参数",[23459,78329,78331],{"id":78330},"_4521-动态参数","4.5.2.1 动态参数",[169,78333,78334],{},[164,78335],{"alt":181,"src":78336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[169,78338,78339],{},[164,78340],{"alt":181,"src":78341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[169,78343,78344],{},"箭头函数里边没有arguments",[23459,78346,78348],{"id":78347},"_4522-剩余参数","4.5.2.2 剩余参数",[169,78350,78351],{},[164,78352],{"alt":181,"src":78353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[169,78355,78356],{},[164,78357],{"alt":181,"src":78358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[169,78360,78361],{},"剩余参数使用的时候不需要写...",[169,78363,78364],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[169,78366,78367],{},"  function getSum(a,b,...arr) {",[169,78369,78370],{},"  console.log(11)",[169,78372,78373],{},"  }",[169,78375,78376],{},"  getSum(1,2,3,4)",[169,78378,78379],{},"  将1传给a，2传给b，剩下的传给剩余参数",[169,78381,78382],{},"  getSum(1,2)",[169,78384,78385],{},"  将1传给a，2传给b，剩余参数为一个空数组",[169,78387,78388],{},[164,78389],{"alt":181,"src":78390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23459,78392,78394],{"id":78393},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[169,78396,78397],{},[164,78398],{"alt":181,"src":78399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[169,78401,78402],{},[164,78403],{"alt":181,"src":78404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[169,78406,78407],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[169,78409,78410],{},"展开运算符可以用于数组之间的合并：",[169,78412,78413],{},"const arr1 = [1, 2, 3]",[169,78415,78416],{},"const arr2 = [3, 4, 5]",[169,78418,78419],{},"const arr = [...arr1, ...arr2]",[169,78421,78422],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[169,78424,78425],{},"剩余参数：函数参数使用，得到真数组",[169,78427,78428],{},"展开运算符：数组中使用，数组展开",[29,78430,78432],{"id":78431},"_453-箭头函数","4.5.3 箭头函数",[23459,78434,78436],{"id":78435},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[169,78438,78439],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[169,78441,78442],{},"它不是万能的！！！",[169,78444,78445],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[169,78447,78448],{},[164,78449],{"alt":181,"src":78450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[169,78452,1652],{},[169,78454,78455],{},"① 只有一个形参的时候，可以省略小括号：",[169,78457,78458],{},"const fn=x=>{console.log(x)}",[169,78460,78461],{},"② 只有一行代码时可以省略大括号：",[169,78463,78464],{},"const fn=x=>console.log(11)",[169,78466,78467],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[169,78469,78470],{},"const fn=x=>x+x",[169,78472,78473],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[169,78475,78476],{},"⑤ 阻止表单默认提交：",[169,78478,78479],{},"const form = document.querySelector('form')",[169,78481,78482],{},"form.addEventListener('click', ev => ev.preventDefault())",[169,78484,78485],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[169,78487,78488],{},"const fn=uname=>({uname:uname})",[169,78490,78491],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[169,78493,78494],{},[164,78495],{"alt":181,"src":78496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[169,78498,78499],{},[164,78500],{"alt":181,"src":78501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[169,78503,78504],{},[164,78505],{"alt":181,"src":78506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[169,78508,78509],{},"一定不要忘记用()，有()就理解为自带return",[23459,78511,78513],{"id":78512},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[169,78515,78516],{},"箭头函数是没有动态参数的arguments",[169,78518,78519],{},[164,78520],{"alt":181,"src":78521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23459,78523,78525],{"id":78524},"_4533-箭头函数this","4.5.3.3 箭头函数this",[169,78527,12795],{},[34,78529,78530,78533,78536],{},[22,78531,78532],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[22,78534,78535],{},"事件回调函数使用箭头函数时，this 为全局的 window",[22,78537,78538],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[169,78540,78541],{},[164,78542],{"alt":181,"src":78543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[176,78545,78547],{"className":54514,"code":78546,"language":54516,"meta":181,"style":181},"  \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",[183,78548,78549,78557,78562,78567,78572,78577,78582,78586,78591,78595,78599,78604,78609,78614,78618,78622,78627,78632,78637],{"__ignoreMap":181},[186,78550,78551,78553,78555],{"class":188,"line":189},[186,78552,53591],{"class":202},[186,78554,53260],{"class":523},[186,78556,552],{"class":202},[186,78558,78559],{"class":188,"line":49},[186,78560,78561],{"class":202},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[186,78563,78564],{"class":188,"line":219},[186,78565,78566],{"class":202},"    console.log(this) \u002F\u002F指向window\n",[186,78568,78569],{"class":188,"line":225},[186,78570,78571],{"class":202},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[186,78573,78574],{"class":188,"line":242},[186,78575,78576],{"class":202},"    function fn() {\n",[186,78578,78579],{"class":188,"line":248},[186,78580,78581],{"class":202},"      console.log(this)  \u002F\u002F指向window\n",[186,78583,78584],{"class":188,"line":265},[186,78585,3654],{"class":202},[186,78587,78588],{"class":188,"line":271},[186,78589,78590],{"class":202},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[186,78592,78593],{"class":188,"line":288},[186,78594,3867],{"emptyLinePlaceholder":1551},[186,78596,78597],{"class":188,"line":294},[186,78598,72957],{"class":202},[186,78600,78601],{"class":188,"line":1212},[186,78602,78603],{"class":202},"      name: 'andy',\n",[186,78605,78606],{"class":188,"line":1223},[186,78607,78608],{"class":202},"      sayHai: function () {\n",[186,78610,78611],{"class":188,"line":1236},[186,78612,78613],{"class":202},"        console.log(this)\n",[186,78615,78616],{"class":188,"line":3096},[186,78617,53845],{"class":202},[186,78619,78620],{"class":188,"line":3110},[186,78621,3654],{"class":202},[186,78623,78624],{"class":188,"line":3115},[186,78625,78626],{"class":202},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[186,78628,78629],{"class":188,"line":3121},[186,78630,78631],{"class":202},"    \u002F\u002F 2.箭头函数的this\n",[186,78633,78634],{"class":188,"line":3142},[186,78635,78636],{"class":202},"    const fn = () => console.log(this)\n",[186,78638,78639,78641,78643],{"class":188,"line":3147},[186,78640,53864],{"class":202},[186,78642,53260],{"class":523},[186,78644,552],{"class":202},[169,78646,78647],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[169,78649,78650],{},"const fn = () => console.log(this)",[169,78652,78653],{},"fn() \u002F\u002F指向window",[169,78655,78656],{},"\u002F\u002F 3.对象方法箭头函数 this",[169,78658,78659],{},"①",[169,78661,78662],{},"const obj = {",[169,78664,78665],{},"uname: 'pink老师',",[169,78667,78668],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[169,78670,2553],{},[169,78672,78673],{},"调用对象里边的函数",[169,78675,78676],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[169,78678,78679],{},"obj.sayHai()",[169,78681,78682],{},"②",[169,78684,78685],{},"const obj1 = {",[169,78687,78665],{},[169,78689,78690],{},"sayHai: function () {",[169,78692,78693],{},"let i = 10",[169,78695,78696],{},"const count = () => {",[169,78698,78699],{},"console.log(this)",[169,78701,78702],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[169,78704,78705],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[169,78707,2553],{},[169,78709,78710],{},"count()",[169,78712,2553],{},[169,78714,2553],{},[169,78716,78717],{},"obj1.sayHai()",[14,78719,78721],{"id":78720},"_46-解构赋值","4.6 解构赋值",[29,78723,78725],{"id":78724},"_461-数组解构","4.6.1 数组解构",[169,78727,78728],{},"以前要是使用数组中的值的话：",[169,78730,78731],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[169,78733,78734],{},"const arr=[100,60,80]",[169,78736,78737],{},"const max=arr[0]",[169,78739,78740],{},"const min=arr[1]",[169,78742,78743],{},"const avg=arr[2]",[169,78745,78746],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[169,78748,78749],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[169,78751,78752],{},"这个写法就类似于上边的那种用很多const的方法",[169,78754,78755],{},[164,78756],{"alt":181,"src":78757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[176,78759,78761],{"className":52087,"code":78760,"language":52089,"meta":181,"style":181},"①变量之间交换值:\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",[183,78762,78763,78768,78773,78778,78783,78788,78792,78796,78801,78805,78810,78815,78819,78824,78829,78840,78850,78855,78860,78865,78869,78873],{"__ignoreMap":181},[186,78764,78765],{"class":188,"line":189},[186,78766,78767],{"class":202},"①变量之间交换值:\n",[186,78769,78770],{"class":188,"line":49},[186,78771,78772],{"class":202},"let a=1\n",[186,78774,78775],{"class":188,"line":219},[186,78776,78777],{"class":202},"let b=2;\n",[186,78779,78780],{"class":188,"line":225},[186,78781,78782],{"class":202},"必须加这行代码，不然就会报错\n",[186,78784,78785],{"class":188,"line":242},[186,78786,78787],{"class":202},"[b,a]=[a,b]\n",[186,78789,78790],{"class":188,"line":248},[186,78791,3867],{"emptyLinePlaceholder":1551},[186,78793,78794],{"class":188,"line":265},[186,78795,3867],{"emptyLinePlaceholder":1551},[186,78797,78798],{"class":188,"line":271},[186,78799,78800],{"class":202},"可以写成下面的方式：\n",[186,78802,78803],{"class":188,"line":288},[186,78804,78772],{"class":202},[186,78806,78807],{"class":188,"line":294},[186,78808,78809],{"class":202},"let b=2\n",[186,78811,78812],{"class":188,"line":1212},[186,78813,78814],{"class":202},";[b,a]=[a,b]\n",[186,78816,78817],{"class":188,"line":1223},[186,78818,3867],{"emptyLinePlaceholder":1551},[186,78820,78821],{"class":188,"line":1236},[186,78822,78823],{"class":202},"②排序\n",[186,78825,78826],{"class":188,"line":3096},[186,78827,78828],{"class":202},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[186,78830,78831,78834,78837],{"class":188,"line":3110},[186,78832,78833],{"class":202},"for (let i = 0; i ",[186,78835,520],{"class":78836},"s7hpK",[186,78838,78839],{"class":202}," arr1.length; i++) {\n",[186,78841,78842,78845,78847],{"class":188,"line":3115},[186,78843,78844],{"class":202},"   for (let j = 0; j ",[186,78846,520],{"class":78836},[186,78848,78849],{"class":202}," arr1.length - 1; j++) {\n",[186,78851,78852],{"class":188,"line":3121},[186,78853,78854],{"class":202},"      if (arr1[j] > arr1[j + 1]) {\n",[186,78856,78857],{"class":188,"line":3142},[186,78858,78859],{"class":202},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[186,78861,78862],{"class":188,"line":3147},[186,78863,78864],{"class":202},"       }\n",[186,78866,78867],{"class":188,"line":3161},[186,78868,5775],{"class":202},[186,78870,78871],{"class":188,"line":3166},[186,78872,639],{"class":202},[186,78874,78875],{"class":188,"line":3195},[186,78876,78877],{"class":202},"console.log(arr1)\n",[169,78879,78880],{},"数组解构的细节：",[169,78882,78883],{},"①变量多，单元值少",[169,78885,78886],{},[164,78887],{"alt":181,"src":78888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[169,78890,78891],{},"防止出现undefined的方法：",[169,78893,78894],{},"const [a=0,b=0] =[1]",[169,78896,78897],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[169,78899,78900],{},"②变量少，单元值多",[169,78902,78903],{},[164,78904],{"alt":181,"src":78905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[169,78907,78908],{},"此时可以使用剩余参数来接收多余的值",[169,78910,78911],{},"const [a,b,...c]=[1,2,3,4]",[169,78913,78914],{},"console.log(c) 输出[3,4]",[169,78916,78917],{},"③可以按需导入，忽略某些返回值",[169,78919,78920],{},[164,78921],{"alt":181,"src":78922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[169,78924,78925],{},"④支持多维数组的结构",[176,78927,78931],{"className":78928,"code":78929,"language":78930,"meta":181,"style":181},"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",[183,78932,78933,78961,78977,78992,79007],{"__ignoreMap":181},[186,78934,78935,78937,78939,78941,78943,78945,78947,78949,78952,78954,78956,78958],{"class":188,"line":189},[186,78936,8255],{"class":669},[186,78938,53280],{"class":202},[186,78940,529],{"class":669},[186,78942,53673],{"class":202},[186,78944,1829],{"class":206},[186,78946,13898],{"class":202},[186,78948,1697],{"class":206},[186,78950,78951],{"class":202},", [",[186,78953,1691],{"class":206},[186,78955,13898],{"class":202},[186,78957,1904],{"class":206},[186,78959,78960],{"class":202},"]]\n",[186,78962,78963,78966,78968,78970,78972,78974],{"class":188,"line":49},[186,78964,78965],{"class":202},"console.",[186,78967,59688],{"class":198},[186,78969,5317],{"class":202},[186,78971,1803],{"class":206},[186,78973,5682],{"class":202},[186,78975,78976],{"class":192},"  \u002F\u002F1\n",[186,78978,78979,78981,78983,78985,78987,78989],{"class":188,"line":219},[186,78980,78965],{"class":202},[186,78982,59688],{"class":198},[186,78984,5317],{"class":202},[186,78986,1829],{"class":206},[186,78988,5682],{"class":202},[186,78990,78991],{"class":192},"  \u002F\u002F2\n",[186,78993,78994,78996,78998,79000,79002,79004],{"class":188,"line":225},[186,78995,78965],{"class":202},[186,78997,59688],{"class":198},[186,78999,5317],{"class":202},[186,79001,1697],{"class":206},[186,79003,5682],{"class":202},[186,79005,79006],{"class":192},"  \u002F\u002F[3,4]\n",[186,79008,79009,79011,79013,79015,79017,79019,79021,79023],{"class":188,"line":242},[186,79010,78965],{"class":202},[186,79012,59688],{"class":198},[186,79014,5317],{"class":202},[186,79016,1697],{"class":206},[186,79018,6367],{"class":202},[186,79020,1803],{"class":206},[186,79022,5682],{"class":202},[186,79024,79025],{"class":192},"  \u002F\u002F3\n",[176,79027,79029],{"className":78928,"code":79028,"language":78930,"meta":181,"style":181},"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",[183,79030,79031,79058,79069,79080],{"__ignoreMap":181},[186,79032,79033,79035,79038,79040,79042,79044,79046,79048,79050,79052,79054,79056],{"class":188,"line":189},[186,79034,8255],{"class":669},[186,79036,79037],{"class":202}," [a, b, c] ",[186,79039,529],{"class":669},[186,79041,53673],{"class":202},[186,79043,1829],{"class":206},[186,79045,13898],{"class":202},[186,79047,1697],{"class":206},[186,79049,78951],{"class":202},[186,79051,1691],{"class":206},[186,79053,13898],{"class":202},[186,79055,1904],{"class":206},[186,79057,78960],{"class":202},[186,79059,79060,79062,79064,79067],{"class":188,"line":49},[186,79061,78965],{"class":202},[186,79063,59688],{"class":198},[186,79065,79066],{"class":202},"(a)",[186,79068,78976],{"class":192},[186,79070,79071,79073,79075,79078],{"class":188,"line":219},[186,79072,78965],{"class":202},[186,79074,59688],{"class":198},[186,79076,79077],{"class":202},"(b)",[186,79079,78991],{"class":192},[186,79081,79082,79084,79086,79089],{"class":188,"line":225},[186,79083,78965],{"class":202},[186,79085,59688],{"class":198},[186,79087,79088],{"class":202},"(c)",[186,79090,79006],{"class":192},[176,79092,79094],{"className":78928,"code":79093,"language":78930,"meta":181,"style":181},"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",[183,79095,79096,79123,79133,79143,79153],{"__ignoreMap":181},[186,79097,79098,79100,79103,79105,79107,79109,79111,79113,79115,79117,79119,79121],{"class":188,"line":189},[186,79099,8255],{"class":669},[186,79101,79102],{"class":202}," [a, b, [c, d]] ",[186,79104,529],{"class":669},[186,79106,53673],{"class":202},[186,79108,1829],{"class":206},[186,79110,13898],{"class":202},[186,79112,1697],{"class":206},[186,79114,78951],{"class":202},[186,79116,1691],{"class":206},[186,79118,13898],{"class":202},[186,79120,1904],{"class":206},[186,79122,78960],{"class":202},[186,79124,79125,79127,79129,79131],{"class":188,"line":49},[186,79126,78965],{"class":202},[186,79128,59688],{"class":198},[186,79130,79066],{"class":202},[186,79132,78976],{"class":192},[186,79134,79135,79137,79139,79141],{"class":188,"line":219},[186,79136,78965],{"class":202},[186,79138,59688],{"class":198},[186,79140,79077],{"class":202},[186,79142,78991],{"class":192},[186,79144,79145,79147,79149,79151],{"class":188,"line":225},[186,79146,78965],{"class":202},[186,79148,59688],{"class":198},[186,79150,79088],{"class":202},[186,79152,79025],{"class":192},[186,79154,79155,79157,79159,79162],{"class":188,"line":242},[186,79156,78965],{"class":202},[186,79158,59688],{"class":198},[186,79160,79161],{"class":202},"(d)",[186,79163,79164],{"class":192},"  \u002F\u002F4\n",[29,79166,79168],{"id":79167},"_462-对象解构","4.6.2 对象解构",[169,79170,79171],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[169,79173,79174],{},"用的非常非常多！！！！！！",[23459,79176,79178],{"id":79177},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[169,79180,79181],{},"基本语法：",[34,79183,79184,79187,79190,79193],{},[22,79185,79186],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[22,79188,79189],{},"对象属性的值将被赋值给与属性名相同的变量",[22,79191,79192],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[22,79194,79195],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[176,79197,79199],{"className":52087,"code":79198,"language":52089,"meta":181,"style":181},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[183,79200,79201,79206,79211,79216,79220],{"__ignoreMap":181},[186,79202,79203],{"class":188,"line":189},[186,79204,79205],{"class":202},"const obj = {\n",[186,79207,79208],{"class":188,"line":49},[186,79209,79210],{"class":202},"   uname: 'pink老师',\n",[186,79212,79213],{"class":188,"line":219},[186,79214,79215],{"class":202},"   age: 18,\n",[186,79217,79218],{"class":188,"line":225},[186,79219,639],{"class":202},[186,79221,79222],{"class":188,"line":242},[186,79223,79224],{"class":202},"const { uname, age } = obj\n",[169,79226,79227],{},"上方代码这样写等价于：",[169,79229,79230],{},"const uname等价于obj.uname",[169,79232,79233],{},"变量名可以重新改名：",[169,79235,79236],{},"const uname='red老师'",[169,79238,79239],{},"const user={",[169,79241,79242],{},"  uname:'pink老师',",[169,79244,79245],{},"  age:18",[169,79247,2553],{},[169,79249,79250],{},"const {uname,age}=user",[169,79252,79253],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[169,79255,79256],{},"const {旧变量名：新变量名}=对象",[169,79258,79259],{},"const {uname:username,age}=user",[23459,79261,79263],{"id":79262},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[169,79265,79266],{},[164,79267],{"alt":181,"src":79268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23459,79270,79272],{"id":79271},"_4623-多级对象解构","4.6.2.3 多级对象解构",[169,79274,79275],{},[164,79276],{"alt":181,"src":79277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[176,79279,79281],{"className":54514,"code":79280,"language":54516,"meta":181,"style":181},"  \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",[183,79282,79283,79291,79296,79301,79306,79311,79316,79321,79326,79331,79335,79340,79345],{"__ignoreMap":181},[186,79284,79285,79287,79289],{"class":188,"line":189},[186,79286,53591],{"class":202},[186,79288,53260],{"class":523},[186,79290,552],{"class":202},[186,79292,79293],{"class":188,"line":49},[186,79294,79295],{"class":202},"    const pig = {\n",[186,79297,79298],{"class":188,"line":219},[186,79299,79300],{"class":202},"      name: '佩奇',\n",[186,79302,79303],{"class":188,"line":225},[186,79304,79305],{"class":202},"      family: {\n",[186,79307,79308],{"class":188,"line":242},[186,79309,79310],{"class":202},"        mother: '猪妈妈',\n",[186,79312,79313],{"class":188,"line":248},[186,79314,79315],{"class":202},"        father: '猪爸爸',\n",[186,79317,79318],{"class":188,"line":265},[186,79319,79320],{"class":202},"        sister: '乔治'\n",[186,79322,79323],{"class":188,"line":271},[186,79324,79325],{"class":202},"      },\n",[186,79327,79328],{"class":188,"line":288},[186,79329,79330],{"class":202},"      age: 6\n",[186,79332,79333],{"class":188,"line":294},[186,79334,3654],{"class":202},[186,79336,79337],{"class":188,"line":1212},[186,79338,79339],{"class":202},"    \u002F\u002F 多级对象解构\n",[186,79341,79342],{"class":188,"line":1223},[186,79343,79344],{"class":202},"    const { name, family: { mother, father, sister }, age } = pig\n",[186,79346,79347,79349,79351],{"class":188,"line":1236},[186,79348,53864],{"class":202},[186,79350,53260],{"class":523},[186,79352,552],{"class":202},[169,79354,79355],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[176,79357,79360],{"className":79358,"code":79359,"language":77880,"meta":181,"style":181},"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",[183,79361,79362,79367,79378,79390,79402,79411,79415,79426,79438,79448,79453,79457,79467,79478,79487,79491,79495,79506,79517,79526,79530,79535],{"__ignoreMap":181},[186,79363,79364],{"class":188,"line":189},[186,79365,79366],{"class":192},"    \u002F\u002F 这是后台传递过来的数据\n",[186,79368,79369,79371,79374,79376],{"class":188,"line":49},[186,79370,12684],{"class":669},[186,79372,79373],{"class":202}," msg ",[186,79375,529],{"class":669},[186,79377,622],{"class":202},[186,79379,79380,79383,79385,79388],{"class":188,"line":219},[186,79381,79382],{"class":532},"      \"code\"",[186,79384,2467],{"class":669},[186,79386,79387],{"class":206}," 200",[186,79389,32921],{"class":202},[186,79391,79392,79395,79397,79400],{"class":188,"line":225},[186,79393,79394],{"class":532},"      \"msg\"",[186,79396,2467],{"class":669},[186,79398,79399],{"class":532}," \"获取新闻列表成功\"",[186,79401,32921],{"class":202},[186,79403,79404,79407,79409],{"class":188,"line":242},[186,79405,79406],{"class":532},"      \"data\"",[186,79408,2467],{"class":669},[186,79410,56888],{"class":202},[186,79412,79413],{"class":188,"line":248},[186,79414,3977],{"class":202},[186,79416,79417,79420,79422,79424],{"class":188,"line":265},[186,79418,79419],{"class":532},"          \"id\"",[186,79421,2467],{"class":669},[186,79423,26577],{"class":206},[186,79425,32921],{"class":202},[186,79427,79428,79431,79433,79436],{"class":188,"line":271},[186,79429,79430],{"class":532},"          \"title\"",[186,79432,2467],{"class":669},[186,79434,79435],{"class":532}," \"5G商用自己，三大运用商收入下降\"",[186,79437,32921],{"class":202},[186,79439,79440,79443,79445],{"class":188,"line":288},[186,79441,79442],{"class":532},"          \"count\"",[186,79444,2467],{"class":669},[186,79446,79447],{"class":206}," 58\n",[186,79449,79450],{"class":188,"line":294},[186,79451,79452],{"class":202},"        },\n",[186,79454,79455],{"class":188,"line":1212},[186,79456,3977],{"class":202},[186,79458,79459,79461,79463,79465],{"class":188,"line":1223},[186,79460,79419],{"class":532},[186,79462,2467],{"class":669},[186,79464,16217],{"class":206},[186,79466,32921],{"class":202},[186,79468,79469,79471,79473,79476],{"class":188,"line":1236},[186,79470,79430],{"class":532},[186,79472,2467],{"class":669},[186,79474,79475],{"class":532}," \"国际媒体头条速览\"",[186,79477,32921],{"class":202},[186,79479,79480,79482,79484],{"class":188,"line":3096},[186,79481,79442],{"class":532},[186,79483,2467],{"class":669},[186,79485,79486],{"class":206}," 56\n",[186,79488,79489],{"class":188,"line":3110},[186,79490,79452],{"class":202},[186,79492,79493],{"class":188,"line":3115},[186,79494,3977],{"class":202},[186,79496,79497,79499,79501,79504],{"class":188,"line":3121},[186,79498,79419],{"class":532},[186,79500,2467],{"class":669},[186,79502,79503],{"class":206}," 3",[186,79505,32921],{"class":202},[186,79507,79508,79510,79512,79515],{"class":188,"line":3142},[186,79509,79430],{"class":532},[186,79511,2467],{"class":669},[186,79513,79514],{"class":532}," \"乌克兰和俄罗斯持续冲突\"",[186,79516,32921],{"class":202},[186,79518,79519,79521,79523],{"class":188,"line":3147},[186,79520,79442],{"class":532},[186,79522,2467],{"class":669},[186,79524,79525],{"class":206}," 1669\n",[186,79527,79528],{"class":188,"line":3161},[186,79529,79452],{"class":202},[186,79531,79532],{"class":188,"line":3166},[186,79533,79534],{"class":202},"      ]\n",[186,79536,79537],{"class":188,"line":3195},[186,79538,3654],{"class":202},[169,79540,79541],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[169,79543,79544],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[169,79546,79547],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[169,79549,79550],{},"function({data}) {",[169,79552,79553],{},"console.log(data)",[169,79555,2553],{},[169,79557,79558],{},"render(msg)",[169,79560,79561],{},"实参传递给形参的时候解构了",[169,79563,79564],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[169,79566,79567],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[169,79569,79570],{},"function render({data:mydata}) {",[169,79572,79573],{},"  console.log(data)",[169,79575,2553],{},[29,79577,79579],{"id":79578},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[169,79581,79582],{},"有两种情况：一个是数组结构，一个是立即执行函数",[34,79584,79585],{},[22,79586,79587],{},"如果对一个数组进行遍历，有两种方式：",[169,79589,79590],{},"①法1",[169,79592,79593],{},"const arr=[1,2,3]",[169,79595,79596],{},"arr.map(function(item,index) {",[169,79598,79599],{},"  console.log(item)",[169,79601,53911],{},[169,79603,79604],{},[164,79605],{"alt":181,"src":79606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[169,79608,79609],{},"②法2",[169,79611,79612],{},"const str='pink'",[169,79614,79615],{},"[1,2,3].map(function(item,index) {",[169,79617,79618],{},"console.log(item)",[169,79620,53911],{},[169,79622,79623],{},[164,79624],{"alt":181,"src":79625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[169,79627,79628],{},"此时会报错",[169,79630,79631],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[169,79633,79618],{},[169,79635,53911],{},[169,79637,79638],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79640,79642],{"id":79641},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[169,79644,79645],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[169,79647,79648],{},"可以理解为加强版的for循环",[169,79650,79651],{},[164,79652],{"alt":181,"src":79653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[169,79655,79656],{},"里边不写return，不返回数组，只遍历不返回",[169,79658,79659],{},"map是返回数组",[169,79661,79662],{},"forEach主要用于遍历数组对象",[176,79664,79666],{"className":54514,"code":79665,"language":54516,"meta":181,"style":181},"  \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",[183,79667,79668,79676,79681,79686,79691,79696,79700,79705],{"__ignoreMap":181},[186,79669,79670,79672,79674],{"class":188,"line":189},[186,79671,53591],{"class":202},[186,79673,53260],{"class":523},[186,79675,552],{"class":202},[186,79677,79678],{"class":188,"line":49},[186,79679,79680],{"class":202},"    const arr = ['red', 'green', 'pink']\n",[186,79682,79683],{"class":188,"line":219},[186,79684,79685],{"class":202},"    const result = arr.forEach(function (item, index) {\n",[186,79687,79688],{"class":188,"line":225},[186,79689,79690],{"class":202},"      console.log(item)\n",[186,79692,79693],{"class":188,"line":242},[186,79694,79695],{"class":202},"      console.log(index)\n",[186,79697,79698],{"class":188,"line":248},[186,79699,34916],{"class":202},[186,79701,79702],{"class":188,"line":265},[186,79703,79704],{"class":202},"    console.log(result)\n",[186,79706,79707,79709,79711],{"class":188,"line":271},[186,79708,53864],{"class":202},[186,79710,53260],{"class":523},[186,79712,552],{"class":202},[169,79714,79715],{},[164,79716],{"alt":181,"src":79717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79719,79721],{"id":79720},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[169,79723,79724],{},[164,79725],{"alt":181,"src":79726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[169,79728,79729],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[176,79731,79733],{"className":54514,"code":79732,"language":54516,"meta":181,"style":181},"\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",[183,79734,79735,79743,79751,79756,79761,79765,79769,79774,79778,79783,79791],{"__ignoreMap":181},[186,79736,79737,79739,79741],{"class":188,"line":189},[186,79738,520],{"class":202},[186,79740,53247],{"class":523},[186,79742,552],{"class":202},[186,79744,79745,79747,79749],{"class":188,"line":49},[186,79746,53591],{"class":202},[186,79748,53260],{"class":523},[186,79750,552],{"class":202},[186,79752,79753],{"class":188,"line":219},[186,79754,79755],{"class":202},"    const arr = [10, 20, 30]\n",[186,79757,79758],{"class":188,"line":225},[186,79759,79760],{"class":202},"    const newArr = arr.filter(function (item, index) {\n",[186,79762,79763],{"class":188,"line":242},[186,79764,79690],{"class":202},[186,79766,79767],{"class":188,"line":248},[186,79768,79695],{"class":202},[186,79770,79771],{"class":188,"line":265},[186,79772,79773],{"class":202},"      return item >= 20\n",[186,79775,79776],{"class":188,"line":271},[186,79777,34916],{"class":202},[186,79779,79780],{"class":188,"line":288},[186,79781,79782],{"class":202},"    console.log(newArr)\n",[186,79784,79785,79787,79789],{"class":188,"line":294},[186,79786,53864],{"class":202},[186,79788,53260],{"class":523},[186,79790,552],{"class":202},[186,79792,79793,79795,79797],{"class":188,"line":1212},[186,79794,1470],{"class":202},[186,79796,53247],{"class":523},[186,79798,552],{"class":202},[169,79800,79801],{},"这个也可以写成箭头函数：",[176,79803,79805],{"className":52087,"code":79804,"language":52089,"meta":181,"style":181},"const newArr = arr.filter(item => item >= 20)\n",[183,79806,79807],{"__ignoreMap":181},[186,79808,79809],{"class":188,"line":189},[186,79810,79804],{"class":202},[14,79812,79814],{"id":79813},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[169,79816,79817],{},[164,79818],{"alt":181,"src":79819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[169,79821,79822],{},"步骤：",[169,79824,79825],{},"①：渲染页面模块",[19,79827,79828,79831],{},[22,79829,79830],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[22,79832,79833],{},"用forEach+字符串的形式",[169,79835,79836],{},"②：点击不同需求，显示不同页面内容",[19,79838,79839,79842,79845,79848,79851],{},[22,79840,79841],{},"点击采取事件委托方式 .filter",[22,79843,79844],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[22,79846,79847],{},"筛选条件是根据点击的 data-index 来判断",[22,79849,79850],{},"可以使用对象解构，把事件对象解构",[22,79852,79853],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[176,79855,79857],{"className":52087,"code":79856,"language":52089,"meta":181,"style":181},"\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",[183,79858,79859,79869,79883,79887,79895,79909,79929,79941,79949,79955,79965,79975,79985,79989,79993,79999,80012,80024,80034,80046,80050,80054,80061,80074,80086,80103,80121,80134,80138,80142,80154,80164,80168,80172,80179,80220,80247,80257,80261,80265,80273,80285,80289,80293,80301,80313,80325,80336,80340,80344,80353,80365,80376,80380,80384,80393,80405,80417,80421,80425,80432,80442,80454,80466,80481,80485,80489,80497,80513,80523,80533,80543,80555,80559,80563,80573,80584,80594,80598,80606,80614,80618,80626,80641,80667,80692,80717,80736,80744,80758,80763,80768,80773,80778,80783,80791,80799,80804,80815,80820,80830,80840,80850,80860,80864,80868,80877,80886,80895,80904,80908,80912,80921,80930,80939,80948,80952,80956,80965,80974,80983,80992,80996,81000,81009,81018,81027,81036,81040,81044,81053,81062,81071,81080,81084,81088,81097,81106,81115,81124,81128,81132,81141,81150,81158,81167,81171,81175,81179,81184,81196,81201,81213,81217,81234,81261,81270,81275,81285,81295,81304,81309,81314,81318,81323,81340,81344,81349,81357,81362,81389,81394,81414,81419,81431,81436,81441,81446,81457,81471,81508,81526,81559,81576,81600,81604,81609,81615,81619,81623,81627,81635,81643,81647],{"__ignoreMap":181},[186,79860,79861,79863,79865,79867],{"class":188,"line":189},[186,79862,52751],{"class":202},[186,79864,52754],{"class":523},[186,79866,52757],{"class":198},[186,79868,552],{"class":202},[186,79870,79871,79873,79875,79877,79879,79881],{"class":188,"line":49},[186,79872,520],{"class":202},[186,79874,52089],{"class":523},[186,79876,52768],{"class":198},[186,79878,529],{"class":202},[186,79880,52773],{"class":532},[186,79882,552],{"class":202},[186,79884,79885],{"class":188,"line":219},[186,79886,3867],{"emptyLinePlaceholder":1551},[186,79888,79889,79891,79893],{"class":188,"line":225},[186,79890,520],{"class":202},[186,79892,52786],{"class":523},[186,79894,552],{"class":202},[186,79896,79897,79899,79901,79903,79905,79907],{"class":188,"line":242},[186,79898,53591],{"class":202},[186,79900,52796],{"class":523},[186,79902,52799],{"class":198},[186,79904,529],{"class":202},[186,79906,52804],{"class":532},[186,79908,552],{"class":202},[186,79910,79911,79913,79915,79917,79919,79921,79923,79925,79927],{"class":188,"line":248},[186,79912,53591],{"class":202},[186,79914,52796],{"class":523},[186,79916,16382],{"class":198},[186,79918,529],{"class":202},[186,79920,52843],{"class":532},[186,79922,52823],{"class":198},[186,79924,529],{"class":202},[186,79926,52850],{"class":532},[186,79928,552],{"class":202},[186,79930,79931,79933,79935,79937,79939],{"class":188,"line":265},[186,79932,53591],{"class":202},[186,79934,52859],{"class":523},[186,79936,52862],{"class":202},[186,79938,52859],{"class":523},[186,79940,552],{"class":202},[186,79942,79943,79945,79947],{"class":188,"line":271},[186,79944,53591],{"class":202},[186,79946,1524],{"class":523},[186,79948,552],{"class":202},[186,79950,79951,79953],{"class":188,"line":288},[186,79952,7866],{"class":523},[186,79954,622],{"class":202},[186,79956,79957,79959,79961,79963],{"class":188,"line":294},[186,79958,56140],{"class":206},[186,79960,210],{"class":202},[186,79962,1803],{"class":206},[186,79964,634],{"class":202},[186,79966,79967,79969,79971,79973],{"class":188,"line":1212},[186,79968,56151],{"class":206},[186,79970,210],{"class":202},[186,79972,1803],{"class":206},[186,79974,634],{"class":202},[186,79976,79977,79979,79981,79983],{"class":188,"line":1223},[186,79978,74030],{"class":206},[186,79980,210],{"class":202},[186,79982,61946],{"class":206},[186,79984,634],{"class":202},[186,79986,79987],{"class":188,"line":1236},[186,79988,3654],{"class":202},[186,79990,79991],{"class":188,"line":3096},[186,79992,3867],{"emptyLinePlaceholder":1551},[186,79994,79995,79997],{"class":188,"line":3110},[186,79996,63561],{"class":198},[186,79998,622],{"class":202},[186,80000,80001,80003,80005,80008,80010],{"class":188,"line":3115},[186,80002,56215],{"class":206},[186,80004,210],{"class":202},[186,80006,80007],{"class":206},"990",[186,80009,804],{"class":669},[186,80011,634],{"class":202},[186,80013,80014,80016,80018,80020,80022],{"class":188,"line":3121},[186,80015,56151],{"class":206},[186,80017,210],{"class":202},[186,80019,1803],{"class":206},[186,80021,53006],{"class":206},[186,80023,634],{"class":202},[186,80025,80026,80028,80030,80032],{"class":188,"line":3142},[186,80027,56452],{"class":206},[186,80029,210],{"class":202},[186,80031,52928],{"class":206},[186,80033,634],{"class":202},[186,80035,80036,80039,80041,80044],{"class":188,"line":3147},[186,80037,80038],{"class":206},"      flex-wrap",[186,80040,210],{"class":202},[186,80042,80043],{"class":206},"wrap",[186,80045,634],{"class":202},[186,80047,80048],{"class":188,"line":3161},[186,80049,3654],{"class":202},[186,80051,80052],{"class":188,"line":3166},[186,80053,3867],{"emptyLinePlaceholder":1551},[186,80055,80056,80059],{"class":188,"line":3195},[186,80057,80058],{"class":198},"    .item",[186,80060,622],{"class":202},[186,80062,80063,80065,80067,80070,80072],{"class":188,"line":3200},[186,80064,56215],{"class":206},[186,80066,210],{"class":202},[186,80068,80069],{"class":206},"240",[186,80071,804],{"class":669},[186,80073,634],{"class":202},[186,80075,80076,80078,80080,80082,80084],{"class":188,"line":3217},[186,80077,63438],{"class":206},[186,80079,210],{"class":202},[186,80081,2056],{"class":206},[186,80083,804],{"class":669},[186,80085,634],{"class":202},[186,80087,80088,80090,80092,80094,80096,80099,80101],{"class":188,"line":3222},[186,80089,56140],{"class":206},[186,80091,210],{"class":202},[186,80093,801],{"class":206},[186,80095,804],{"class":669},[186,80097,80098],{"class":206}," 30",[186,80100,804],{"class":669},[186,80102,634],{"class":202},[186,80104,80105,80107,80109,80111,80114,80117,80119],{"class":188,"line":3227},[186,80106,63298],{"class":206},[186,80108,210],{"class":202},[186,80110,29577],{"class":206},[186,80112,80113],{"class":206}," ease",[186,80115,80116],{"class":206}," .5",[186,80118,2304],{"class":669},[186,80120,634],{"class":202},[186,80122,80123,80126,80128,80130,80132],{"class":188,"line":3232},[186,80124,80125],{"class":206},"      margin-bottom",[186,80127,210],{"class":202},[186,80129,801],{"class":206},[186,80131,804],{"class":669},[186,80133,634],{"class":202},[186,80135,80136],{"class":188,"line":3246},[186,80137,3654],{"class":202},[186,80139,80140],{"class":188,"line":3251},[186,80141,3867],{"emptyLinePlaceholder":1551},[186,80143,80144,80147,80149,80152],{"class":188,"line":4044},[186,80145,80146],{"class":198},"    .item:nth-child",[186,80148,832],{"class":202},[186,80150,80151],{"class":206},"4n",[186,80153,13905],{"class":202},[186,80155,80156,80158,80160,80162],{"class":188,"line":4058},[186,80157,63438],{"class":206},[186,80159,210],{"class":202},[186,80161,1803],{"class":206},[186,80163,634],{"class":202},[186,80165,80166],{"class":188,"line":4066},[186,80167,3654],{"class":202},[186,80169,80170],{"class":188,"line":4071},[186,80171,3867],{"emptyLinePlaceholder":1551},[186,80173,80174,80177],{"class":188,"line":4077},[186,80175,80176],{"class":198},"    .item:hover",[186,80178,622],{"class":202},[186,80180,80181,80184,80186,80188,80190,80192,80194,80196,80198,80201,80203,80205,80207,80209,80211,80213,80215,80218],{"class":188,"line":4083},[186,80182,80183],{"class":206},"      box-shadow",[186,80185,210],{"class":202},[186,80187,1803],{"class":206},[186,80189,804],{"class":669},[186,80191,5559],{"class":206},[186,80193,804],{"class":669},[186,80195,3615],{"class":206},[186,80197,804],{"class":669},[186,80199,80200],{"class":206}," rgba",[186,80202,832],{"class":202},[186,80204,1803],{"class":206},[186,80206,13898],{"class":202},[186,80208,1803],{"class":206},[186,80210,13898],{"class":202},[186,80212,1803],{"class":206},[186,80214,13898],{"class":202},[186,80216,80217],{"class":206},".2",[186,80219,1112],{"class":202},[186,80221,80222,80225,80227,80230,80232,80234,80236,80239,80241,80243,80245],{"class":188,"line":4088},[186,80223,80224],{"class":206},"      transform",[186,80226,210],{"class":202},[186,80228,80229],{"class":206},"translate3d",[186,80231,832],{"class":202},[186,80233,1803],{"class":206},[186,80235,13898],{"class":202},[186,80237,80238],{"class":206},"-4",[186,80240,804],{"class":669},[186,80242,13898],{"class":202},[186,80244,1803],{"class":206},[186,80246,1112],{"class":202},[186,80248,80249,80251,80253,80255],{"class":188,"line":9411},[186,80250,63463],{"class":206},[186,80252,210],{"class":202},[186,80254,63468],{"class":206},[186,80256,634],{"class":202},[186,80258,80259],{"class":188,"line":9435},[186,80260,3654],{"class":202},[186,80262,80263],{"class":188,"line":9440},[186,80264,3867],{"emptyLinePlaceholder":1551},[186,80266,80267,80269,80271],{"class":188,"line":9446},[186,80268,80058],{"class":198},[186,80270,57056],{"class":523},[186,80272,622],{"class":202},[186,80274,80275,80277,80279,80281,80283],{"class":188,"line":9473},[186,80276,56215],{"class":206},[186,80278,210],{"class":202},[186,80280,1922],{"class":206},[186,80282,670],{"class":669},[186,80284,634],{"class":202},[186,80286,80287],{"class":188,"line":9478},[186,80288,3654],{"class":202},[186,80290,80291],{"class":188,"line":9484},[186,80292,3867],{"emptyLinePlaceholder":1551},[186,80294,80295,80297,80299],{"class":188,"line":9496},[186,80296,80058],{"class":198},[186,80298,63742],{"class":198},[186,80300,622],{"class":202},[186,80302,80303,80305,80307,80309,80311],{"class":188,"line":9508},[186,80304,56365],{"class":206},[186,80306,210],{"class":202},[186,80308,2260],{"class":206},[186,80310,804],{"class":669},[186,80312,634],{"class":202},[186,80314,80315,80317,80319,80321,80323],{"class":188,"line":9520},[186,80316,80125],{"class":206},[186,80318,210],{"class":202},[186,80320,2056],{"class":206},[186,80322,804],{"class":669},[186,80324,634],{"class":202},[186,80326,80327,80329,80331,80334],{"class":188,"line":11179},[186,80328,58857],{"class":206},[186,80330,210],{"class":202},[186,80332,80333],{"class":206},"#666",[186,80335,634],{"class":202},[186,80337,80338],{"class":188,"line":11204},[186,80339,3654],{"class":202},[186,80341,80342],{"class":188,"line":11227},[186,80343,3867],{"emptyLinePlaceholder":1551},[186,80345,80346,80348,80351],{"class":188,"line":11251},[186,80347,80058],{"class":198},[186,80349,80350],{"class":198}," .price",[186,80352,622],{"class":202},[186,80354,80355,80357,80359,80361,80363],{"class":188,"line":11256},[186,80356,56365],{"class":206},[186,80358,210],{"class":202},[186,80360,2358],{"class":206},[186,80362,804],{"class":669},[186,80364,634],{"class":202},[186,80366,80367,80369,80371,80374],{"class":188,"line":11261},[186,80368,58857],{"class":206},[186,80370,210],{"class":202},[186,80372,80373],{"class":206},"firebrick",[186,80375,634],{"class":202},[186,80377,80378],{"class":188,"line":11266},[186,80379,3654],{"class":202},[186,80381,80382],{"class":188,"line":11275},[186,80383,3867],{"emptyLinePlaceholder":1551},[186,80385,80386,80388,80391],{"class":188,"line":11280},[186,80387,80058],{"class":198},[186,80389,80390],{"class":198}," .price::before",[186,80392,622],{"class":202},[186,80394,80395,80398,80400,80403],{"class":188,"line":11286},[186,80396,80397],{"class":206},"      content",[186,80399,210],{"class":202},[186,80401,80402],{"class":532},"'￥'",[186,80404,634],{"class":202},[186,80406,80407,80409,80411,80413,80415],{"class":188,"line":11307},[186,80408,56365],{"class":206},[186,80410,210],{"class":202},[186,80412,2159],{"class":206},[186,80414,804],{"class":669},[186,80416,634],{"class":202},[186,80418,80419],{"class":188,"line":11313},[186,80420,3654],{"class":202},[186,80422,80423],{"class":188,"line":11327},[186,80424,3867],{"emptyLinePlaceholder":1551},[186,80426,80427,80430],{"class":188,"line":11333},[186,80428,80429],{"class":198},"    .filter",[186,80431,622],{"class":202},[186,80433,80434,80436,80438,80440],{"class":188,"line":11360},[186,80435,56452],{"class":206},[186,80437,210],{"class":202},[186,80439,52928],{"class":206},[186,80441,634],{"class":202},[186,80443,80444,80446,80448,80450,80452],{"class":188,"line":11369},[186,80445,56215],{"class":206},[186,80447,210],{"class":202},[186,80449,80007],{"class":206},[186,80451,804],{"class":669},[186,80453,634],{"class":202},[186,80455,80456,80458,80460,80462,80464],{"class":188,"line":11375},[186,80457,56151],{"class":206},[186,80459,210],{"class":202},[186,80461,1803],{"class":206},[186,80463,53006],{"class":206},[186,80465,634],{"class":202},[186,80467,80468,80470,80472,80474,80476,80478],{"class":188,"line":11383},[186,80469,56140],{"class":206},[186,80471,210],{"class":202},[186,80473,666],{"class":206},[186,80475,804],{"class":669},[186,80477,80098],{"class":206},[186,80479,80480],{"class":669},"px\n",[186,80482,80483],{"class":188,"line":11388},[186,80484,3654],{"class":202},[186,80486,80487],{"class":188,"line":18065},[186,80488,3867],{"emptyLinePlaceholder":1551},[186,80490,80491,80493,80495],{"class":188,"line":18071},[186,80492,80429],{"class":198},[186,80494,2871],{"class":523},[186,80496,622],{"class":202},[186,80498,80499,80501,80503,80505,80507,80509,80511],{"class":188,"line":18094},[186,80500,56140],{"class":206},[186,80502,210],{"class":202},[186,80504,2056],{"class":206},[186,80506,804],{"class":669},[186,80508,10413],{"class":206},[186,80510,804],{"class":669},[186,80512,634],{"class":202},[186,80514,80515,80517,80519,80521],{"class":188,"line":18100},[186,80516,63161],{"class":206},[186,80518,210],{"class":202},[186,80520,63256],{"class":206},[186,80522,634],{"class":202},[186,80524,80525,80527,80529,80531],{"class":188,"line":18123},[186,80526,58857],{"class":206},[186,80528,210],{"class":202},[186,80530,80333],{"class":206},[186,80532,634],{"class":202},[186,80534,80535,80537,80539,80541],{"class":188,"line":18137},[186,80536,65407],{"class":206},[186,80538,210],{"class":202},[186,80540,56182],{"class":206},[186,80542,634],{"class":202},[186,80544,80545,80547,80549,80551,80553],{"class":188,"line":18157},[186,80546,63188],{"class":206},[186,80548,210],{"class":202},[186,80550,801],{"class":206},[186,80552,804],{"class":669},[186,80554,634],{"class":202},[186,80556,80557],{"class":188,"line":18163},[186,80558,3654],{"class":202},[186,80560,80561],{"class":188,"line":18174},[186,80562,3867],{"emptyLinePlaceholder":1551},[186,80564,80565,80567,80569,80571],{"class":188,"line":18197},[186,80566,80429],{"class":198},[186,80568,2871],{"class":523},[186,80570,63338],{"class":198},[186,80572,622],{"class":202},[186,80574,80575,80577,80579,80582],{"class":188,"line":18219},[186,80576,56327],{"class":206},[186,80578,210],{"class":202},[186,80580,80581],{"class":206},"#05943c",[186,80583,634],{"class":202},[186,80585,80586,80588,80590,80592],{"class":188,"line":18224},[186,80587,58857],{"class":206},[186,80589,210],{"class":202},[186,80591,62283],{"class":206},[186,80593,634],{"class":202},[186,80595,80596],{"class":188,"line":18230},[186,80597,3654],{"class":202},[186,80599,80600,80602,80604],{"class":188,"line":18244},[186,80601,53864],{"class":202},[186,80603,1524],{"class":523},[186,80605,552],{"class":202},[186,80607,80608,80610,80612],{"class":188,"line":18257},[186,80609,1470],{"class":202},[186,80611,52786],{"class":523},[186,80613,552],{"class":202},[186,80615,80616],{"class":188,"line":18262},[186,80617,3867],{"emptyLinePlaceholder":1551},[186,80619,80620,80622,80624],{"class":188,"line":18276},[186,80621,520],{"class":202},[186,80623,53247],{"class":523},[186,80625,552],{"class":202},[186,80627,80628,80630,80632,80634,80636,80639],{"class":188,"line":18281},[186,80629,53591],{"class":202},[186,80631,1450],{"class":523},[186,80633,1453],{"class":198},[186,80635,529],{"class":202},[186,80637,80638],{"class":532},"\"filter\"",[186,80640,552],{"class":202},[186,80642,80643,80645,80647,80649,80651,80653,80656,80658,80660,80663,80665],{"class":188,"line":18287},[186,80644,52793],{"class":202},[186,80646,948],{"class":523},[186,80648,62498],{"class":198},[186,80650,529],{"class":202},[186,80652,62503],{"class":532},[186,80654,80655],{"class":198}," data-index",[186,80657,529],{"class":202},[186,80659,5144],{"class":532},[186,80661,80662],{"class":202},">0-100元\u003C\u002F",[186,80664,948],{"class":523},[186,80666,552],{"class":202},[186,80668,80669,80671,80673,80675,80677,80679,80681,80683,80685,80688,80690],{"class":188,"line":18292},[186,80670,52793],{"class":202},[186,80672,948],{"class":523},[186,80674,62498],{"class":198},[186,80676,529],{"class":202},[186,80678,62503],{"class":532},[186,80680,80655],{"class":198},[186,80682,529],{"class":202},[186,80684,5167],{"class":532},[186,80686,80687],{"class":202},">100-300元\u003C\u002F",[186,80689,948],{"class":523},[186,80691,552],{"class":202},[186,80693,80694,80696,80698,80700,80702,80704,80706,80708,80710,80713,80715],{"class":188,"line":18306},[186,80695,52793],{"class":202},[186,80697,948],{"class":523},[186,80699,62498],{"class":198},[186,80701,529],{"class":202},[186,80703,62503],{"class":532},[186,80705,80655],{"class":198},[186,80707,529],{"class":202},[186,80709,5180],{"class":532},[186,80711,80712],{"class":202},">300元以上\u003C\u002F",[186,80714,948],{"class":523},[186,80716,552],{"class":202},[186,80718,80719,80721,80723,80725,80727,80729,80732,80734],{"class":188,"line":18311},[186,80720,52793],{"class":202},[186,80722,948],{"class":523},[186,80724,62498],{"class":198},[186,80726,529],{"class":202},[186,80728,62503],{"class":532},[186,80730,80731],{"class":202},">全部区间\u003C\u002F",[186,80733,948],{"class":523},[186,80735,552],{"class":202},[186,80737,80738,80740,80742],{"class":188,"line":18316},[186,80739,53864],{"class":202},[186,80741,1450],{"class":523},[186,80743,552],{"class":202},[186,80745,80746,80748,80750,80752,80754,80756],{"class":188,"line":18330},[186,80747,53591],{"class":202},[186,80749,1450],{"class":523},[186,80751,1453],{"class":198},[186,80753,529],{"class":202},[186,80755,64046],{"class":532},[186,80757,552],{"class":202},[186,80759,80760],{"class":188,"line":18342},[186,80761,80762],{"class":192},"    \u003C!-- \u003Cdiv class=\"item\">\n",[186,80764,80765],{"class":188,"line":18347},[186,80766,80767],{"class":192},"      \u003Cimg src=\"\" alt=\"\">\n",[186,80769,80770],{"class":188,"line":18360},[186,80771,80772],{"class":192},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[186,80774,80775],{"class":188,"line":18365},[186,80776,80777],{"class":192},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[186,80779,80780],{"class":188,"line":18370},[186,80781,80782],{"class":192},"    \u003C\u002Fdiv> -->\n",[186,80784,80785,80787,80789],{"class":188,"line":18375},[186,80786,53864],{"class":202},[186,80788,1450],{"class":523},[186,80790,552],{"class":202},[186,80792,80793,80795,80797],{"class":188,"line":18388},[186,80794,53591],{"class":202},[186,80796,53260],{"class":523},[186,80798,552],{"class":202},[186,80800,80801],{"class":188,"line":18393},[186,80802,80803],{"class":192},"    \u002F\u002F 2. 初始化数据\n",[186,80805,80806,80808,80811,80813],{"class":188,"line":34088},[186,80807,12684],{"class":669},[186,80809,80810],{"class":206}," goodsList",[186,80812,15027],{"class":669},[186,80814,56888],{"class":202},[186,80816,80817],{"class":188,"line":34094},[186,80818,80819],{"class":202},"      {\n",[186,80821,80822,80825,80828],{"class":188,"line":34100},[186,80823,80824],{"class":202},"        id: ",[186,80826,80827],{"class":532},"'4001172'",[186,80829,32921],{"class":202},[186,80831,80832,80835,80838],{"class":188,"line":34106},[186,80833,80834],{"class":202},"        name: ",[186,80836,80837],{"class":532},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[186,80839,32921],{"class":202},[186,80841,80842,80845,80848],{"class":188,"line":34112},[186,80843,80844],{"class":202},"        price: ",[186,80846,80847],{"class":532},"'289.00'",[186,80849,32921],{"class":202},[186,80851,80852,80855,80858],{"class":188,"line":34123},[186,80853,80854],{"class":202},"        picture: ",[186,80856,80857],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[186,80859,32921],{"class":202},[186,80861,80862],{"class":188,"line":34129},[186,80863,79325],{"class":202},[186,80865,80866],{"class":188,"line":34149},[186,80867,80819],{"class":202},[186,80869,80870,80872,80875],{"class":188,"line":34155},[186,80871,80824],{"class":202},[186,80873,80874],{"class":532},"'4001594'",[186,80876,32921],{"class":202},[186,80878,80879,80881,80884],{"class":188,"line":34166},[186,80880,80834],{"class":202},[186,80882,80883],{"class":532},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[186,80885,32921],{"class":202},[186,80887,80888,80890,80893],{"class":188,"line":34172},[186,80889,80844],{"class":202},[186,80891,80892],{"class":532},"'288.00'",[186,80894,32921],{"class":202},[186,80896,80897,80899,80902],{"class":188,"line":34178},[186,80898,80854],{"class":202},[186,80900,80901],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[186,80903,32921],{"class":202},[186,80905,80906],{"class":188,"line":34184},[186,80907,79325],{"class":202},[186,80909,80910],{"class":188,"line":34190},[186,80911,80819],{"class":202},[186,80913,80914,80916,80919],{"class":188,"line":34196},[186,80915,80824],{"class":202},[186,80917,80918],{"class":532},"'4001009'",[186,80920,32921],{"class":202},[186,80922,80923,80925,80928],{"class":188,"line":34202},[186,80924,80834],{"class":202},[186,80926,80927],{"class":532},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[186,80929,32921],{"class":202},[186,80931,80932,80934,80937],{"class":188,"line":34208},[186,80933,80844],{"class":202},[186,80935,80936],{"class":532},"'109.00'",[186,80938,32921],{"class":202},[186,80940,80941,80943,80946],{"class":188,"line":34228},[186,80942,80854],{"class":202},[186,80944,80945],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[186,80947,32921],{"class":202},[186,80949,80950],{"class":188,"line":34234},[186,80951,79325],{"class":202},[186,80953,80954],{"class":188,"line":34250},[186,80955,80819],{"class":202},[186,80957,80958,80960,80963],{"class":188,"line":34256},[186,80959,80824],{"class":202},[186,80961,80962],{"class":532},"'4001874'",[186,80964,32921],{"class":202},[186,80966,80967,80969,80972],{"class":188,"line":34270},[186,80968,80834],{"class":202},[186,80970,80971],{"class":532},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[186,80973,32921],{"class":202},[186,80975,80976,80978,80981],{"class":188,"line":34276},[186,80977,80844],{"class":202},[186,80979,80980],{"class":532},"'488.00'",[186,80982,32921],{"class":202},[186,80984,80985,80987,80990],{"class":188,"line":34291},[186,80986,80854],{"class":202},[186,80988,80989],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[186,80991,32921],{"class":202},[186,80993,80994],{"class":188,"line":34297},[186,80995,79325],{"class":202},[186,80997,80998],{"class":188,"line":34306},[186,80999,80819],{"class":202},[186,81001,81002,81004,81007],{"class":188,"line":34312},[186,81003,80824],{"class":202},[186,81005,81006],{"class":532},"'4001649'",[186,81008,32921],{"class":202},[186,81010,81011,81013,81016],{"class":188,"line":34321},[186,81012,80834],{"class":202},[186,81014,81015],{"class":532},"'大师监制龙泉青瓷茶叶罐'",[186,81017,32921],{"class":202},[186,81019,81020,81022,81025],{"class":188,"line":34327},[186,81021,80844],{"class":202},[186,81023,81024],{"class":532},"'139.00'",[186,81026,32921],{"class":202},[186,81028,81029,81031,81034],{"class":188,"line":34333},[186,81030,80854],{"class":202},[186,81032,81033],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[186,81035,32921],{"class":202},[186,81037,81038],{"class":188,"line":34342},[186,81039,79325],{"class":202},[186,81041,81042],{"class":188,"line":34348},[186,81043,80819],{"class":202},[186,81045,81046,81048,81051],{"class":188,"line":34359},[186,81047,80824],{"class":202},[186,81049,81050],{"class":532},"'3997185'",[186,81052,32921],{"class":202},[186,81054,81055,81057,81060],{"class":188,"line":34365},[186,81056,80834],{"class":202},[186,81058,81059],{"class":532},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[186,81061,32921],{"class":202},[186,81063,81064,81066,81069],{"class":188,"line":34384},[186,81065,80844],{"class":202},[186,81067,81068],{"class":532},"'108.00'",[186,81070,32921],{"class":202},[186,81072,81073,81075,81078],{"class":188,"line":34390},[186,81074,80854],{"class":202},[186,81076,81077],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[186,81079,32921],{"class":202},[186,81081,81082],{"class":188,"line":34401},[186,81083,79325],{"class":202},[186,81085,81086],{"class":188,"line":34407},[186,81087,80819],{"class":202},[186,81089,81090,81092,81095],{"class":188,"line":34427},[186,81091,80824],{"class":202},[186,81093,81094],{"class":532},"'3997403'",[186,81096,32921],{"class":202},[186,81098,81099,81101,81104],{"class":188,"line":34443},[186,81100,80834],{"class":202},[186,81102,81103],{"class":532},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[186,81105,32921],{"class":202},[186,81107,81108,81110,81113],{"class":188,"line":34449},[186,81109,80844],{"class":202},[186,81111,81112],{"class":532},"'100.00'",[186,81114,32921],{"class":202},[186,81116,81117,81119,81122],{"class":188,"line":34463},[186,81118,80854],{"class":202},[186,81120,81121],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[186,81123,32921],{"class":202},[186,81125,81126],{"class":188,"line":34469},[186,81127,79325],{"class":202},[186,81129,81130],{"class":188,"line":34475},[186,81131,80819],{"class":202},[186,81133,81134,81136,81139],{"class":188,"line":34486},[186,81135,80824],{"class":202},[186,81137,81138],{"class":532},"'3998274'",[186,81140,32921],{"class":202},[186,81142,81143,81145,81148],{"class":188,"line":34492},[186,81144,80834],{"class":202},[186,81146,81147],{"class":532},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[186,81149,32921],{"class":202},[186,81151,81152,81154,81156],{"class":188,"line":34498},[186,81153,80844],{"class":202},[186,81155,81024],{"class":532},[186,81157,32921],{"class":202},[186,81159,81160,81162,81165],{"class":188,"line":34508},[186,81161,80854],{"class":202},[186,81163,81164],{"class":532},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[186,81166,32921],{"class":202},[186,81168,81169],{"class":188,"line":34514},[186,81170,79325],{"class":202},[186,81172,81173],{"class":188,"line":34525},[186,81174,54556],{"class":202},[186,81176,81177],{"class":188,"line":34531},[186,81178,3867],{"emptyLinePlaceholder":1551},[186,81180,81181],{"class":188,"line":34541},[186,81182,81183],{"class":192},"    \u002F\u002F 1.渲染函数\n",[186,81185,81186,81188,81190,81192,81194],{"class":188,"line":34546},[186,81187,71521],{"class":669},[186,81189,71524],{"class":198},[186,81191,832],{"class":202},[186,81193,5346],{"class":835},[186,81195,13905],{"class":202},[186,81197,81198],{"class":188,"line":34552},[186,81199,81200],{"class":192},"      \u002F\u002F 声明空字符串\n",[186,81202,81203,81206,81209,81211],{"class":188,"line":34601},[186,81204,81205],{"class":669},"      let",[186,81207,81208],{"class":202}," str ",[186,81210,529],{"class":669},[186,81212,71541],{"class":532},[186,81214,81215],{"class":188,"line":34648},[186,81216,71546],{"class":192},[186,81218,81219,81221,81224,81226,81229,81232],{"class":188,"line":34653},[186,81220,59448],{"class":202},[186,81222,81223],{"class":198},"forEach",[186,81225,832],{"class":202},[186,81227,81228],{"class":835},"item",[186,81230,81231],{"class":669}," =>",[186,81233,622],{"class":202},[186,81235,81236,81238,81240,81243,81245,81248,81250,81253,81256,81258],{"class":188,"line":34659},[186,81237,62711],{"class":669},[186,81239,203],{"class":202},[186,81241,81242],{"class":206},"name",[186,81244,13898],{"class":202},[186,81246,81247],{"class":206},"price",[186,81249,13898],{"class":202},[186,81251,81252],{"class":206},"picture",[186,81254,81255],{"class":202}," } ",[186,81257,529],{"class":669},[186,81259,81260],{"class":202}," item\n",[186,81262,81263,81266,81268],{"class":188,"line":34678},[186,81264,81265],{"class":202},"        str ",[186,81267,10940],{"class":669},[186,81269,71605],{"class":532},[186,81271,81272],{"class":188,"line":34684},[186,81273,81274],{"class":532},"          \u003Cdiv class=\"item\">\n",[186,81276,81277,81280,81282],{"class":188,"line":34704},[186,81278,81279],{"class":532},"            \u003Cimg src=\"${",[186,81281,81252],{"class":202},[186,81283,81284],{"class":532},"}\" alt=\"\">\n",[186,81286,81287,81290,81292],{"class":188,"line":34710},[186,81288,81289],{"class":532},"            \u003Cp class=\"name\">${",[186,81291,81242],{"class":202},[186,81293,81294],{"class":532},"}\u003C\u002Fp>\n",[186,81296,81297,81300,81302],{"class":188,"line":34716},[186,81298,81299],{"class":532},"            \u003Cp class=\"price\">${",[186,81301,81247],{"class":202},[186,81303,81294],{"class":532},[186,81305,81306],{"class":188,"line":34726},[186,81307,81308],{"class":532},"          \u003C\u002Fdiv>\n",[186,81310,81311],{"class":188,"line":34731},[186,81312,81313],{"class":532},"        `\n",[186,81315,81316],{"class":188,"line":34737},[186,81317,66252],{"class":202},[186,81319,81320],{"class":188,"line":34753},[186,81321,81322],{"class":192},"      \u002F\u002F 追加给List\n",[186,81324,81325,81327,81329,81331,81334,81336,81338],{"class":188,"line":34798},[186,81326,57212],{"class":202},[186,81328,55844],{"class":198},[186,81330,832],{"class":202},[186,81332,81333],{"class":532},"'.list'",[186,81335,75682],{"class":202},[186,81337,529],{"class":669},[186,81339,75418],{"class":202},[186,81341,81342],{"class":188,"line":34804},[186,81343,3654],{"class":202},[186,81345,81346],{"class":188,"line":34810},[186,81347,81348],{"class":192},"    \u002F\u002F 页面一打开就需要渲染\n",[186,81350,81351,81354],{"class":188,"line":34816},[186,81352,81353],{"class":198},"    render",[186,81355,81356],{"class":202},"(goodsList)\n",[186,81358,81359],{"class":188,"line":34827},[186,81360,81361],{"class":192},"    \u002F\u002F 2.过滤筛选\n",[186,81363,81364,81366,81368,81370,81373,81375,81377,81379,81381,81383,81385,81387],{"class":188,"line":34833},[186,81365,53854],{"class":202},[186,81367,55844],{"class":198},[186,81369,832],{"class":202},[186,81371,81372],{"class":532},"'.filter'",[186,81374,32281],{"class":202},[186,81376,59254],{"class":198},[186,81378,832],{"class":202},[186,81380,59259],{"class":532},[186,81382,13898],{"class":202},[186,81384,1694],{"class":835},[186,81386,81231],{"class":669},[186,81388,622],{"class":202},[186,81390,81391],{"class":188,"line":34839},[186,81392,81393],{"class":192},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[186,81395,81396,81398,81400,81403,81405,81407,81409,81411],{"class":188,"line":34845},[186,81397,59669],{"class":669},[186,81399,203],{"class":202},[186,81401,81402],{"class":206},"tagName",[186,81404,13898],{"class":202},[186,81406,32992],{"class":206},[186,81408,81255],{"class":202},[186,81410,529],{"class":669},[186,81412,81413],{"class":202}," e.target\n",[186,81415,81416],{"class":188,"line":34863},[186,81417,81418],{"class":192},"      \u002F\u002F 判断\n",[186,81420,81421,81423,81425,81427,81429],{"class":188,"line":34877},[186,81422,55925],{"class":669},[186,81424,68471],{"class":202},[186,81426,55931],{"class":669},[186,81428,69693],{"class":532},[186,81430,13905],{"class":202},[186,81432,81433],{"class":188,"line":34886},[186,81434,81435],{"class":192},"        \u002F\u002F console.log(11)\n",[186,81437,81438],{"class":188,"line":34895},[186,81439,81440],{"class":192},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[186,81442,81443],{"class":188,"line":34904},[186,81444,81445],{"class":192},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[186,81447,81448,81450,81452,81454],{"class":188,"line":34913},[186,81449,53277],{"class":669},[186,81451,53280],{"class":202},[186,81453,529],{"class":669},[186,81455,81456],{"class":202}," goodsList\n",[186,81458,81459,81461,81464,81466,81469],{"class":188,"line":34919},[186,81460,3964],{"class":669},[186,81462,81463],{"class":202}," (dataset.index ",[186,81465,55931],{"class":669},[186,81467,81468],{"class":532}," '1'",[186,81470,13905],{"class":202},[186,81472,81473,81476,81478,81481,81484,81486,81488,81490,81493,81495,81497,81500,81502,81504,81506],{"class":188,"line":34925},[186,81474,81475],{"class":202},"          arr ",[186,81477,529],{"class":669},[186,81479,81480],{"class":202}," goodsList.",[186,81482,81483],{"class":198},"filter",[186,81485,832],{"class":202},[186,81487,81228],{"class":835},[186,81489,81231],{"class":669},[186,81491,81492],{"class":202}," item.price ",[186,81494,3178],{"class":669},[186,81496,5559],{"class":206},[186,81498,81499],{"class":669}," &&",[186,81501,81492],{"class":202},[186,81503,3059],{"class":669},[186,81505,7217],{"class":206},[186,81507,1629],{"class":202},[186,81509,81510,81513,81515,81517,81519,81521,81524],{"class":188,"line":34933},[186,81511,81512],{"class":202},"        } ",[186,81514,3169],{"class":669},[186,81516,3172],{"class":669},[186,81518,81463],{"class":202},[186,81520,55931],{"class":669},[186,81522,81523],{"class":532}," '2'",[186,81525,13905],{"class":202},[186,81527,81528,81530,81532,81534,81536,81538,81540,81542,81544,81546,81548,81550,81552,81554,81557],{"class":188,"line":34938},[186,81529,81475],{"class":202},[186,81531,529],{"class":669},[186,81533,81480],{"class":202},[186,81535,81483],{"class":198},[186,81537,832],{"class":202},[186,81539,81228],{"class":835},[186,81541,81231],{"class":669},[186,81543,81492],{"class":202},[186,81545,3178],{"class":669},[186,81547,7217],{"class":206},[186,81549,81499],{"class":669},[186,81551,81492],{"class":202},[186,81553,3059],{"class":669},[186,81555,81556],{"class":206}," 300",[186,81558,1629],{"class":202},[186,81560,81561,81563,81565,81567,81569,81571,81574],{"class":188,"line":34944},[186,81562,81512],{"class":202},[186,81564,3169],{"class":669},[186,81566,3172],{"class":669},[186,81568,81463],{"class":202},[186,81570,55931],{"class":669},[186,81572,81573],{"class":532}," '3'",[186,81575,13905],{"class":202},[186,81577,81578,81580,81582,81584,81586,81588,81590,81592,81594,81596,81598],{"class":188,"line":34955},[186,81579,81475],{"class":202},[186,81581,529],{"class":669},[186,81583,81480],{"class":202},[186,81585,81483],{"class":198},[186,81587,832],{"class":202},[186,81589,81228],{"class":835},[186,81591,81231],{"class":669},[186,81593,81492],{"class":202},[186,81595,3178],{"class":669},[186,81597,81556],{"class":206},[186,81599,1629],{"class":202},[186,81601,81602],{"class":188,"line":34961},[186,81603,3996],{"class":202},[186,81605,81606],{"class":188,"line":34981},[186,81607,81608],{"class":192},"        \u002F\u002F 渲染函数\n",[186,81610,81611,81613],{"class":188,"line":34987},[186,81612,71845],{"class":198},[186,81614,53859],{"class":202},[186,81616,81617],{"class":188,"line":34993},[186,81618,53845],{"class":202},[186,81620,81621],{"class":188,"line":34999},[186,81622,3867],{"emptyLinePlaceholder":1551},[186,81624,81625],{"class":188,"line":35016},[186,81626,34916],{"class":202},[186,81628,81629,81631,81633],{"class":188,"line":35022},[186,81630,53864],{"class":202},[186,81632,53260],{"class":523},[186,81634,552],{"class":202},[186,81636,81637,81639,81641],{"class":188,"line":35028},[186,81638,1470],{"class":202},[186,81640,53247],{"class":523},[186,81642,552],{"class":202},[186,81644,81645],{"class":188,"line":35034},[186,81646,3867],{"emptyLinePlaceholder":1551},[186,81648,81649,81651,81653],{"class":188,"line":35040},[186,81650,1470],{"class":202},[186,81652,52089],{"class":523},[186,81654,552],{"class":202},[14,81656,81658],{"id":81657},"_410-深入了解对象","4.10 深入了解对象",[29,81660,81662],{"id":81661},"_4101-创建对象","4.10.1 创建对象",[169,81664,81665],{},[164,81666],{"alt":181,"src":81667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[169,81669,81670],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[29,81672,81674],{"id":81673},"_4102-构造函数","4.10.2 构造函数",[169,81676,81677,81680],{},[54,81678,81679],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[169,81682,81683,81686],{},[54,81684,81685],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[176,81688,81690],{"className":52087,"code":81689,"language":52089,"meta":181,"style":181},"\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",[183,81691,81692,81700,81705,81726,81739,81751,81763,81767,81772,81799,81804,81831],{"__ignoreMap":181},[186,81693,81694,81696,81698],{"class":188,"line":189},[186,81695,520],{"class":202},[186,81697,53260],{"class":523},[186,81699,552],{"class":202},[186,81701,81702],{"class":188,"line":49},[186,81703,81704],{"class":192},"\u002F\u002F例：\n",[186,81706,81707,81709,81712,81714,81716,81718,81720,81722,81724],{"class":188,"line":219},[186,81708,55894],{"class":669},[186,81710,81711],{"class":198}," Pig",[186,81713,832],{"class":202},[186,81715,81242],{"class":835},[186,81717,1988],{"class":202},[186,81719,71658],{"class":835},[186,81721,1988],{"class":202},[186,81723,71675],{"class":835},[186,81725,13905],{"class":202},[186,81727,81728,81731,81734,81736],{"class":188,"line":225},[186,81729,81730],{"class":206},"    this",[186,81732,81733],{"class":202},".name",[186,81735,529],{"class":669},[186,81737,81738],{"class":202},"name\n",[186,81740,81741,81743,81746,81748],{"class":188,"line":242},[186,81742,81730],{"class":206},[186,81744,81745],{"class":202},".age",[186,81747,529],{"class":669},[186,81749,81750],{"class":202},"age\n",[186,81752,81753,81755,81758,81760],{"class":188,"line":248},[186,81754,81730],{"class":206},[186,81756,81757],{"class":202},".gender",[186,81759,529],{"class":669},[186,81761,81762],{"class":202},"gender    \n",[186,81764,81765],{"class":188,"line":265},[186,81766,639],{"class":202},[186,81768,81769],{"class":188,"line":271},[186,81770,81771],{"class":192},"\u002F\u002F创建佩奇对象\n",[186,81773,81774,81776,81779,81781,81783,81785,81788,81790,81792,81794,81797],{"class":188,"line":288},[186,81775,8255],{"class":669},[186,81777,81778],{"class":206}," Peppa",[186,81780,13180],{"class":669},[186,81782,81711],{"class":198},[186,81784,832],{"class":202},[186,81786,81787],{"class":532},"'佩奇'",[186,81789,1988],{"class":202},[186,81791,1954],{"class":206},[186,81793,1988],{"class":202},[186,81795,81796],{"class":532},"'女'",[186,81798,1629],{"class":202},[186,81800,81801],{"class":188,"line":294},[186,81802,81803],{"class":192},"\u002F\u002F创建乔治对象\n",[186,81805,81806,81808,81811,81813,81815,81817,81820,81822,81824,81826,81829],{"class":188,"line":1212},[186,81807,8255],{"class":669},[186,81809,81810],{"class":206}," George",[186,81812,13180],{"class":669},[186,81814,81711],{"class":198},[186,81816,832],{"class":202},[186,81818,81819],{"class":532},"'乔治'",[186,81821,1988],{"class":202},[186,81823,1691],{"class":206},[186,81825,1988],{"class":202},[186,81827,81828],{"class":532},"'男'",[186,81830,1629],{"class":202},[186,81832,81833,81835,81837],{"class":188,"line":1223},[186,81834,1470],{"class":202},[186,81836,53260],{"class":523},[186,81838,552],{"class":202},[169,81840,81841],{},[164,81842],{"alt":181,"src":81843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[169,81845,81846],{},[164,81847],{"alt":181,"src":81848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[169,81850,81851],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[169,81853,81854],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[169,81856,81857],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[169,81859,81860],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[169,81862,81863],{},"这里用等号是因为：对象.属性=值",[169,81865,81866],{},"①利用对象字面量创建对象",[169,81868,81869],{},"const o={",[169,81871,81872],{},"name:'pink'",[169,81874,81875],{},"} ②利用new Object创建对象",[169,81877,81878],{},"const o=new Object({name:'pink'})",[169,81880,81881],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[169,81883,81884],{},"构造函数创建对象的执行过程：",[169,81886,81887],{},[164,81888],{"alt":181,"src":81889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[29,81891,81893],{"id":81892},"_4103-实例成员","4.10.3 实例成员",[169,81895,81896],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[34,81898,81899,81902,81905],{},[22,81900,81901],{},"实例对象的属性和方法即为实例成员",[22,81903,81904],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[22,81906,81907],{},"构造函数创建的实例对象彼此独立互不影响",[29,81909,81911],{"id":81910},"_4104-静态成员","4.10.4 静态成员",[169,81913,81914],{},[164,81915],{"alt":181,"src":81916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[169,81918,81919],{},"静态成员有Date.now() Math.PI Math.random()",[169,81921,81922],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[169,81924,81925],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[169,81927,81928],{},"function Pig(name) n {",[169,81930,81931],{},"this.name=name",[169,81933,2553],{},[169,81935,81936],{},"Pig.eyes=2",[169,81938,81939],{},"Pig.sayHai=function () { console.log(this) }",[169,81941,81942],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[169,81944,81945],{},"console.log(Pig.eyes) \u002F\u002F2",[169,81947,12795],{},[34,81949,81950,81953,81956,81959,81962],{},[22,81951,81952],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[22,81954,81955],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[22,81957,81958],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[22,81960,81961],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[22,81963,81964],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[169,81966,81967],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[29,81969,81971],{"id":81970},"_4105-内置构造函数","4.10.5 内置构造函数",[169,81973,81974],{},"内置构造函数包含：",[169,81976,81977],{},[164,81978],{"alt":181,"src":81979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[169,81981,81982],{},[164,81983],{"alt":181,"src":81984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[169,81986,81987],{},"这些基本数据类型，js对他们进行了包装",[53260,81989,81990],{},"\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",[23459,81992,81994],{"id":81993},"_41051-object","4.10.5.1 Object",[169,81996,81997],{},"Object 是内置的构造函数，用于创建普通对象",[169,81999,82000],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[176,82002,82004],{"className":52087,"code":82003,"language":52089,"meta":181,"style":181},"const user=new Object({name:'小明',age:15})\n",[183,82005,82006],{"__ignoreMap":181},[186,82007,82008],{"class":188,"line":189},[186,82009,82003],{"class":202},[169,82011,82012],{},"三个常用的静态方法：",[24371,82014,82016],{"id":82015},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[169,82018,82019],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[169,82021,82022],{},[164,82023],{"alt":181,"src":82024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[169,82026,82027],{},[164,82028],{"alt":181,"src":82029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[176,82031,82033],{"className":54514,"code":82032,"language":54516,"meta":181,"style":181},"\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",[183,82034,82035,82043,82051,82056,82061,82066,82071,82076,82081,82089],{"__ignoreMap":181},[186,82036,82037,82039,82041],{"class":188,"line":189},[186,82038,520],{"class":202},[186,82040,53247],{"class":523},[186,82042,552],{"class":202},[186,82044,82045,82047,82049],{"class":188,"line":49},[186,82046,53591],{"class":202},[186,82048,53260],{"class":523},[186,82050,552],{"class":202},[186,82052,82053],{"class":188,"line":219},[186,82054,82055],{"class":202},"    const o = { name: 'pink', age: 6 }\n",[186,82057,82058],{"class":188,"line":225},[186,82059,82060],{"class":202},"    \u002F\u002F 获得所有属性名\n",[186,82062,82063],{"class":188,"line":242},[186,82064,82065],{"class":202},"    const arr = Object.keys(o)\n",[186,82067,82068],{"class":188,"line":248},[186,82069,82070],{"class":202},"    console.log(arr)\n",[186,82072,82073],{"class":188,"line":265},[186,82074,82075],{"class":202},"    \u002F\u002F 获得所有属性值\n",[186,82077,82078],{"class":188,"line":271},[186,82079,82080],{"class":202},"    console.log(Object.values(o))\n",[186,82082,82083,82085,82087],{"class":188,"line":288},[186,82084,53864],{"class":202},[186,82086,53260],{"class":523},[186,82088,552],{"class":202},[186,82090,82091,82093,82095],{"class":188,"line":294},[186,82092,1470],{"class":202},[186,82094,53247],{"class":523},[186,82096,552],{"class":202},[24371,82098,82100],{"id":82099},"_410512-object-assign","4.10.5.1.2 Object. assign",[169,82102,82103],{},"Object.assign(oo,o)",[169,82105,82106],{},"后的东西添加给前 是追加",[169,82108,82109],{},[164,82110],{"alt":181,"src":82111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[169,82113,82114],{},[164,82115],{"alt":181,"src":82116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[176,82118,82120],{"className":54514,"code":82119,"language":54516,"meta":181,"style":181},"\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",[183,82121,82122,82130,82138,82142,82146,82150,82154,82158,82162,82167,82172,82177,82182,82187,82195],{"__ignoreMap":181},[186,82123,82124,82126,82128],{"class":188,"line":189},[186,82125,520],{"class":202},[186,82127,53247],{"class":523},[186,82129,552],{"class":202},[186,82131,82132,82134,82136],{"class":188,"line":49},[186,82133,53591],{"class":202},[186,82135,53260],{"class":523},[186,82137,552],{"class":202},[186,82139,82140],{"class":188,"line":219},[186,82141,82055],{"class":202},[186,82143,82144],{"class":188,"line":225},[186,82145,82060],{"class":202},[186,82147,82148],{"class":188,"line":242},[186,82149,82065],{"class":202},[186,82151,82152],{"class":188,"line":248},[186,82153,82070],{"class":202},[186,82155,82156],{"class":188,"line":265},[186,82157,82075],{"class":202},[186,82159,82160],{"class":188,"line":271},[186,82161,82080],{"class":202},[186,82163,82164],{"class":188,"line":288},[186,82165,82166],{"class":202},"    const oo = {}\n",[186,82168,82169],{"class":188,"line":294},[186,82170,82171],{"class":202},"    Object.assign(oo, o)\n",[186,82173,82174],{"class":188,"line":1212},[186,82175,82176],{"class":202},"    console.log(oo)\n",[186,82178,82179],{"class":188,"line":1223},[186,82180,82181],{"class":202},"    Object.assign(o, { gender: '女' })\n",[186,82183,82184],{"class":188,"line":1236},[186,82185,82186],{"class":202},"    console.log(o)\n",[186,82188,82189,82191,82193],{"class":188,"line":3096},[186,82190,53864],{"class":202},[186,82192,53260],{"class":523},[186,82194,552],{"class":202},[186,82196,82197,82199,82201],{"class":188,"line":3110},[186,82198,1470],{"class":202},[186,82200,53247],{"class":523},[186,82202,552],{"class":202},[169,82204,82205],{},[164,82206],{"alt":181,"src":82207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23459,82209,82211],{"id":82210},"_41052-array","4.10.5.2 Array",[169,82213,82214],{},"Array 是内置的构造函数，用于创建数组",[169,82216,82217],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[176,82219,82221],{"className":52087,"code":82220,"language":52089,"meta":181,"style":181},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[183,82222,82223,82228],{"__ignoreMap":181},[186,82224,82225],{"class":188,"line":189},[186,82226,82227],{"class":202},"const arr=new Array(3,5)\n",[186,82229,82230],{"class":188,"line":49},[186,82231,82232],{"class":202},"console.log(arr)  \u002F\u002F[3,5]\n",[169,82234,82235],{},"Array的实例方法，这个方法是实例成员",[169,82237,82238],{},[164,82239],{"alt":181,"src":82240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24371,82242,82244],{"id":82243},"_410521-reduce","4.10.5.2.1 reduce",[169,82246,82247],{},[164,82248],{"alt":181,"src":82249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[176,82251,82253],{"className":54514,"code":82252,"language":54516,"meta":181,"style":181},"\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",[183,82254,82255,82263,82271,82276,82281,82286,82291,82295,82300,82305,82310,82314,82319,82324,82328,82333,82338,82343,82351],{"__ignoreMap":181},[186,82256,82257,82259,82261],{"class":188,"line":189},[186,82258,520],{"class":202},[186,82260,53247],{"class":523},[186,82262,552],{"class":202},[186,82264,82265,82267,82269],{"class":188,"line":49},[186,82266,53591],{"class":202},[186,82268,53260],{"class":523},[186,82270,552],{"class":202},[186,82272,82273],{"class":188,"line":219},[186,82274,82275],{"class":202},"    const arr = [1, 5, 8]\n",[186,82277,82278],{"class":188,"line":225},[186,82279,82280],{"class":202},"    \u002F\u002F 1.没有初始值\n",[186,82282,82283],{"class":188,"line":242},[186,82284,82285],{"class":202},"    const total = arr.reduce(function (prev, current) {\n",[186,82287,82288],{"class":188,"line":248},[186,82289,82290],{"class":202},"      return prev + current\n",[186,82292,82293],{"class":188,"line":265},[186,82294,34916],{"class":202},[186,82296,82297],{"class":188,"line":271},[186,82298,82299],{"class":202},"    console.log(total)   \u002F\u002F14\n",[186,82301,82302],{"class":188,"line":288},[186,82303,82304],{"class":202},"    \u002F\u002F 2.有初始值\n",[186,82306,82307],{"class":188,"line":294},[186,82308,82309],{"class":202},"    const total1 = arr.reduce(function (prev, current) {\n",[186,82311,82312],{"class":188,"line":1212},[186,82313,82290],{"class":202},[186,82315,82316],{"class":188,"line":1223},[186,82317,82318],{"class":202},"    }, 10)\n",[186,82320,82321],{"class":188,"line":1236},[186,82322,82323],{"class":202},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[186,82325,82326],{"class":188,"line":3096},[186,82327,3867],{"emptyLinePlaceholder":1551},[186,82329,82330],{"class":188,"line":3110},[186,82331,82332],{"class":202},"    \u002F\u002F 3.箭头函数写法\n",[186,82334,82335],{"class":188,"line":3115},[186,82336,82337],{"class":202},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[186,82339,82340],{"class":188,"line":3121},[186,82341,82342],{"class":202},"    console.log(total2)   \u002F\u002F24\n",[186,82344,82345,82347,82349],{"class":188,"line":3142},[186,82346,53864],{"class":202},[186,82348,53260],{"class":523},[186,82350,552],{"class":202},[186,82352,82353,82355,82357],{"class":188,"line":3147},[186,82354,1470],{"class":202},[186,82356,53247],{"class":523},[186,82358,552],{"class":202},[169,82360,82361],{},"执行过程：",[34,82363,82364,82367,82370],{},[22,82365,82366],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[22,82368,82369],{},"每一次循环，把返回值给作为下一次循环的上一次值",[22,82371,82372],{},"如果有起始值，则起始值作为上一次值",[176,82374,82376],{"className":54514,"code":82375,"language":54516,"meta":181,"style":181},"\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",[183,82377,82378,82386,82394,82398,82402,82406,82410,82414,82418,82423,82428,82433,82438,82443,82447,82451,82455,82459,82463,82467,82472,82476,82481,82485,82490,82495,82499,82503,82507,82515],{"__ignoreMap":181},[186,82379,82380,82382,82384],{"class":188,"line":189},[186,82381,520],{"class":202},[186,82383,53247],{"class":523},[186,82385,552],{"class":202},[186,82387,82388,82390,82392],{"class":188,"line":49},[186,82389,53591],{"class":202},[186,82391,53260],{"class":523},[186,82393,552],{"class":202},[186,82395,82396],{"class":188,"line":219},[186,82397,82275],{"class":202},[186,82399,82400],{"class":188,"line":225},[186,82401,82280],{"class":202},[186,82403,82404],{"class":188,"line":242},[186,82405,82285],{"class":202},[186,82407,82408],{"class":188,"line":248},[186,82409,82290],{"class":202},[186,82411,82412],{"class":188,"line":265},[186,82413,34916],{"class":202},[186,82415,82416],{"class":188,"line":271},[186,82417,82299],{"class":202},[186,82419,82420],{"class":188,"line":288},[186,82421,82422],{"class":202},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[186,82424,82425],{"class":188,"line":294},[186,82426,82427],{"class":202},"    \u002F\u002F     1              5                    6\n",[186,82429,82430],{"class":188,"line":1212},[186,82431,82432],{"class":202},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[186,82434,82435],{"class":188,"line":1223},[186,82436,82437],{"class":202},"    \u002F\u002F     6              8                    14\n",[186,82439,82440],{"class":188,"line":1236},[186,82441,82442],{"class":202},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[186,82444,82445],{"class":188,"line":3096},[186,82446,82304],{"class":202},[186,82448,82449],{"class":188,"line":3110},[186,82450,82309],{"class":202},[186,82452,82453],{"class":188,"line":3115},[186,82454,82290],{"class":202},[186,82456,82457],{"class":188,"line":3121},[186,82458,82318],{"class":202},[186,82460,82461],{"class":188,"line":3142},[186,82462,82323],{"class":202},[186,82464,82465],{"class":188,"line":3147},[186,82466,82422],{"class":202},[186,82468,82469],{"class":188,"line":3161},[186,82470,82471],{"class":202},"    \u002F\u002F     10             1                     11\n",[186,82473,82474],{"class":188,"line":3166},[186,82475,82432],{"class":202},[186,82477,82478],{"class":188,"line":3195},[186,82479,82480],{"class":202},"    \u002F\u002F     11             5                    16\n",[186,82482,82483],{"class":188,"line":3200},[186,82484,82432],{"class":202},[186,82486,82487],{"class":188,"line":3217},[186,82488,82489],{"class":202},"    \u002F\u002F     16             8                    24\n",[186,82491,82492],{"class":188,"line":3222},[186,82493,82494],{"class":202},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[186,82496,82497],{"class":188,"line":3227},[186,82498,82332],{"class":202},[186,82500,82501],{"class":188,"line":3232},[186,82502,82337],{"class":202},[186,82504,82505],{"class":188,"line":3246},[186,82506,82342],{"class":202},[186,82508,82509,82511,82513],{"class":188,"line":3251},[186,82510,53864],{"class":202},[186,82512,53260],{"class":523},[186,82514,552],{"class":202},[186,82516,82517,82519,82521],{"class":188,"line":4044},[186,82518,1470],{"class":202},[186,82520,53247],{"class":523},[186,82522,552],{"class":202},[24371,82524,82526],{"id":82525},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[169,82528,82529],{},[164,82530],{"alt":181,"src":82531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[176,82533,82535],{"className":54514,"code":82534,"language":54516,"meta":181,"style":181},"\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",[183,82536,82537,82545,82553,82558,82563,82568,82573,82577,82582,82587,82592,82597,82602,82607,82611,82616,82620,82625,82633],{"__ignoreMap":181},[186,82538,82539,82541,82543],{"class":188,"line":189},[186,82540,520],{"class":202},[186,82542,53247],{"class":523},[186,82544,552],{"class":202},[186,82546,82547,82549,82551],{"class":188,"line":49},[186,82548,53591],{"class":202},[186,82550,53260],{"class":523},[186,82552,552],{"class":202},[186,82554,82555],{"class":188,"line":219},[186,82556,82557],{"class":202},"    const arr = [\n",[186,82559,82560],{"class":188,"line":225},[186,82561,82562],{"class":202},"      { name: '张三', salary: 10000 },\n",[186,82564,82565],{"class":188,"line":242},[186,82566,82567],{"class":202},"      { name: '李四', salary: 10000 },\n",[186,82569,82570],{"class":188,"line":248},[186,82571,82572],{"class":202},"      { name: '王五', salary: 10000 }\n",[186,82574,82575],{"class":188,"line":265},[186,82576,54556],{"class":202},[186,82578,82579],{"class":188,"line":271},[186,82580,82581],{"class":202},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[186,82583,82584],{"class":188,"line":288},[186,82585,82586],{"class":202},"    \u002F\u002F prev是累计值\n",[186,82588,82589],{"class":188,"line":294},[186,82590,82591],{"class":202},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[186,82593,82594],{"class":188,"line":1212},[186,82595,82596],{"class":202},"    console.log(total)\n",[186,82598,82599],{"class":188,"line":1223},[186,82600,82601],{"class":202},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[186,82603,82604],{"class":188,"line":1236},[186,82605,82606],{"class":202},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[186,82608,82609],{"class":188,"line":3096},[186,82610,82601],{"class":202},[186,82612,82613],{"class":188,"line":3110},[186,82614,82615],{"class":202},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[186,82617,82618],{"class":188,"line":3115},[186,82619,82601],{"class":202},[186,82621,82622],{"class":188,"line":3121},[186,82623,82624],{"class":202},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[186,82626,82627,82629,82631],{"class":188,"line":3142},[186,82628,53864],{"class":202},[186,82630,53260],{"class":523},[186,82632,552],{"class":202},[186,82634,82635,82637,82639],{"class":188,"line":3147},[186,82636,1470],{"class":202},[186,82638,53247],{"class":523},[186,82640,552],{"class":202},[24371,82642,82644],{"id":82643},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[169,82646,82647],{},[164,82648],{"alt":181,"src":82649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[169,82651,82652],{},[164,82653],{"alt":181,"src":82654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[34,82656,82657],{},[22,82658,82659],{},"find()",[169,82661,82662],{},"循环查找，找到第一个就ok",[169,82664,82665],{},[948,82666,82669],{"href":82667,"rel":82668},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[952],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[176,82671,82673],{"className":52087,"code":82672,"language":52089,"meta":181,"style":181},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[183,82674,82675,82680,82685],{"__ignoreMap":181},[186,82676,82677],{"class":188,"line":189},[186,82678,82679],{"class":202},"const array1 = [5, 12, 8, 130, 44]\n",[186,82681,82682],{"class":188,"line":49},[186,82683,82684],{"class":202},"const found = array1.find((element) => element > 10)\n",[186,82686,82687],{"class":188,"line":219},[186,82688,82689],{"class":202},"console.log(found)  \u002F\u002F12\n",[169,82691,82692,82694,82695,82700,82701,82704,82705,82707,82708,82713,82714,82716,82717,82719,82720,82722,82723],{},[183,82693,82659],{}," 方法是一个",[948,82696,82699],{"href":82697,"rel":82698},"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",[952],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[183,82702,82703],{},"callbackFn"," 函数，直到 ",[183,82706,82703],{}," 返回一个",[948,82709,82712],{"href":82710,"rel":82711},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[952],"真值","。然后 ",[183,82715,82659],{}," 返回该元素并停止迭代数组。如果 ",[183,82718,82703],{}," 从未返回真值，则 ",[183,82721,82659],{}," 返回 ",[183,82724,82725],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[176,82727,82729],{"className":54514,"code":82728,"language":54516,"meta":181,"style":181},"\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",[183,82730,82731,82739,82747,82752,82757,82762,82766,82771,82776,82780,82785,82790,82794,82798,82803,82808,82812,82816,82821,82826,82831,82836,82841,82845,82850,82855,82860,82865,82869,82874,82882],{"__ignoreMap":181},[186,82732,82733,82735,82737],{"class":188,"line":189},[186,82734,520],{"class":202},[186,82736,53247],{"class":523},[186,82738,552],{"class":202},[186,82740,82741,82743,82745],{"class":188,"line":49},[186,82742,53591],{"class":202},[186,82744,53260],{"class":523},[186,82746,552],{"class":202},[186,82748,82749],{"class":188,"line":219},[186,82750,82751],{"class":202},"    const arr = ['red', 'blue', 'green']\n",[186,82753,82754],{"class":188,"line":225},[186,82755,82756],{"class":202},"    const found = arr.find(item => item === 'pink')\n",[186,82758,82759],{"class":188,"line":242},[186,82760,82761],{"class":202},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[186,82763,82764],{"class":188,"line":248},[186,82765,3867],{"emptyLinePlaceholder":1551},[186,82767,82768],{"class":188,"line":265},[186,82769,82770],{"class":202},"    \u002F\u002F 使用场景，用于查找数据\n",[186,82772,82773],{"class":188,"line":271},[186,82774,82775],{"class":202},"    const arr1 = [\n",[186,82777,82778],{"class":188,"line":288},[186,82779,80819],{"class":202},[186,82781,82782],{"class":188,"line":294},[186,82783,82784],{"class":202},"        name: '小米',\n",[186,82786,82787],{"class":188,"line":1212},[186,82788,82789],{"class":202},"        price: 1999\n",[186,82791,82792],{"class":188,"line":1223},[186,82793,79325],{"class":202},[186,82795,82796],{"class":188,"line":1236},[186,82797,80819],{"class":202},[186,82799,82800],{"class":188,"line":3096},[186,82801,82802],{"class":202},"        name: '华为',\n",[186,82804,82805],{"class":188,"line":3110},[186,82806,82807],{"class":202},"        price: 3999\n",[186,82809,82810],{"class":188,"line":3115},[186,82811,53845],{"class":202},[186,82813,82814],{"class":188,"line":3121},[186,82815,54556],{"class":202},[186,82817,82818],{"class":188,"line":3142},[186,82819,82820],{"class":202},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[186,82822,82823],{"class":188,"line":3147},[186,82824,82825],{"class":202},"    \u002F\u002F const found1 = arr1.find(item => {\n",[186,82827,82828],{"class":188,"line":3161},[186,82829,82830],{"class":202},"    \u002F\u002F   if (item.name === '小米') {\n",[186,82832,82833],{"class":188,"line":3166},[186,82834,82835],{"class":202},"    \u002F\u002F     return item\n",[186,82837,82838],{"class":188,"line":3195},[186,82839,82840],{"class":202},"    \u002F\u002F   }\n",[186,82842,82843],{"class":188,"line":3200},[186,82844,64728],{"class":202},[186,82846,82847],{"class":188,"line":3217},[186,82848,82849],{"class":202},"    \u002F\u002F 另一种写法\n",[186,82851,82852],{"class":188,"line":3222},[186,82853,82854],{"class":202},"    const found1 = arr1.find(item => {\n",[186,82856,82857],{"class":188,"line":3227},[186,82858,82859],{"class":202},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[186,82861,82862],{"class":188,"line":3232},[186,82863,82864],{"class":202},"      return item.name = '小米'\n",[186,82866,82867],{"class":188,"line":3246},[186,82868,34916],{"class":202},[186,82870,82871],{"class":188,"line":3251},[186,82872,82873],{"class":202},"    console.log(found1)\n",[186,82875,82876,82878,82880],{"class":188,"line":4044},[186,82877,53864],{"class":202},[186,82879,53260],{"class":523},[186,82881,552],{"class":202},[186,82883,82884,82886,82888],{"class":188,"line":4058},[186,82885,1470],{"class":202},[186,82887,53247],{"class":523},[186,82889,552],{"class":202},[169,82891,82892],{},[164,82893],{"alt":181,"src":82894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[169,82896,82897],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[34,82899,82900],{"start":49},[22,82901,82902],{},"every()返回的是布尔值",[169,82904,82905],{},[948,82906,82909],{"href":82907,"rel":82908},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[952],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[169,82911,82912],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[169,82914,82915],{},"some是只有有一个就没问题",[169,82917,82918],{},"every是必须全是才行",[176,82920,82924],{"className":82921,"code":82922,"language":82923,"meta":181,"style":181},"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",[183,82925,82926,82942,82956,82960,82969],{"__ignoreMap":181},[186,82927,82928,82930,82933,82935,82937,82940],{"class":188,"line":189},[186,82929,55894],{"class":669},[186,82931,82932],{"class":202}," isBigEnough(element, ",[186,82934,75491],{"class":669},[186,82936,13898],{"class":202},[186,82938,82939],{"class":669},"array",[186,82941,13905],{"class":202},[186,82943,82944,82947,82950,82952,82954],{"class":188,"line":49},[186,82945,82946],{"class":669},"  return",[186,82948,82949],{"class":202}," element ",[186,82951,3178],{"class":669},[186,82953,3505],{"class":206},[186,82955,634],{"class":202},[186,82957,82958],{"class":188,"line":219},[186,82959,639],{"class":202},[186,82961,82962,82965,82967],{"class":188,"line":225},[186,82963,82964],{"class":202},"[12, 5, 8, 130, 44].every(isBigEnough); ",[186,82966,34784],{"class":669},[186,82968,55961],{"class":202},[186,82970,82971,82974,82976],{"class":188,"line":242},[186,82972,82973],{"class":202},"[12, 54, 18, 130, 44].every(isBigEnough); ",[186,82975,34784],{"class":669},[186,82977,59381],{"class":202},[176,82979,82981],{"className":54514,"code":82980,"language":54516,"meta":181,"style":181},"\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",[183,82982,82983,82991,82999,83004,83008,83013,83018,83026],{"__ignoreMap":181},[186,82984,82985,82987,82989],{"class":188,"line":189},[186,82986,520],{"class":202},[186,82988,53247],{"class":523},[186,82990,552],{"class":202},[186,82992,82993,82995,82997],{"class":188,"line":49},[186,82994,53591],{"class":202},[186,82996,53260],{"class":523},[186,82998,552],{"class":202},[186,83000,83001],{"class":188,"line":219},[186,83002,83003],{"class":202},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[186,83005,83006],{"class":188,"line":225},[186,83007,79755],{"class":202},[186,83009,83010],{"class":188,"line":242},[186,83011,83012],{"class":202},"    const flag = arr.every(item => item >= 10)\n",[186,83014,83015],{"class":188,"line":248},[186,83016,83017],{"class":202},"    console.log(flag)    \u002F\u002Ftrue\n",[186,83019,83020,83022,83024],{"class":188,"line":265},[186,83021,53864],{"class":202},[186,83023,53260],{"class":523},[186,83025,552],{"class":202},[186,83027,83028,83030,83032],{"class":188,"line":271},[186,83029,1470],{"class":202},[186,83031,53247],{"class":523},[186,83033,552],{"class":202},[176,83035,83037],{"className":54514,"code":83036,"language":54516,"meta":181,"style":181},"\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",[183,83038,83039,83047,83055,83059,83064,83069,83074,83082],{"__ignoreMap":181},[186,83040,83041,83043,83045],{"class":188,"line":189},[186,83042,520],{"class":202},[186,83044,53247],{"class":523},[186,83046,552],{"class":202},[186,83048,83049,83051,83053],{"class":188,"line":49},[186,83050,53591],{"class":202},[186,83052,53260],{"class":523},[186,83054,552],{"class":202},[186,83056,83057],{"class":188,"line":219},[186,83058,83003],{"class":202},[186,83060,83061],{"class":188,"line":225},[186,83062,83063],{"class":202},"    const arr = [10, 0, 5]\n",[186,83065,83066],{"class":188,"line":242},[186,83067,83068],{"class":202},"    const flag = arr.some(item => item >= 10)\n",[186,83070,83071],{"class":188,"line":248},[186,83072,83073],{"class":202},"    console.log(flag)   \u002F\u002Ftrue\n",[186,83075,83076,83078,83080],{"class":188,"line":265},[186,83077,53864],{"class":202},[186,83079,53260],{"class":523},[186,83081,552],{"class":202},[186,83083,83084,83086,83088],{"class":188,"line":271},[186,83085,1470],{"class":202},[186,83087,53247],{"class":523},[186,83089,552],{"class":202},[24371,83091,83093],{"id":83092},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[169,83095,83096],{},[164,83097],{"alt":181,"src":83098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[176,83100,83102],{"className":52087,"code":83101,"language":52089,"meta":181,"style":181},"\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",[183,83103,83104,83114,83128,83132,83140,83154,83174,83186,83194,83201,83213,83225,83237,83249,83259,83269,83273,83281,83289,83293,83301,83313,83321,83343,83348,83353,83386,83394,83402,83406],{"__ignoreMap":181},[186,83105,83106,83108,83110,83112],{"class":188,"line":189},[186,83107,52751],{"class":202},[186,83109,52754],{"class":523},[186,83111,52757],{"class":198},[186,83113,552],{"class":202},[186,83115,83116,83118,83120,83122,83124,83126],{"class":188,"line":49},[186,83117,520],{"class":202},[186,83119,52089],{"class":523},[186,83121,52768],{"class":198},[186,83123,529],{"class":202},[186,83125,52773],{"class":532},[186,83127,552],{"class":202},[186,83129,83130],{"class":188,"line":219},[186,83131,3867],{"emptyLinePlaceholder":1551},[186,83133,83134,83136,83138],{"class":188,"line":225},[186,83135,520],{"class":202},[186,83137,52786],{"class":523},[186,83139,552],{"class":202},[186,83141,83142,83144,83146,83148,83150,83152],{"class":188,"line":242},[186,83143,53591],{"class":202},[186,83145,52796],{"class":523},[186,83147,52799],{"class":198},[186,83149,529],{"class":202},[186,83151,52804],{"class":532},[186,83153,552],{"class":202},[186,83155,83156,83158,83160,83162,83164,83166,83168,83170,83172],{"class":188,"line":248},[186,83157,53591],{"class":202},[186,83159,52796],{"class":523},[186,83161,16382],{"class":198},[186,83163,529],{"class":202},[186,83165,52843],{"class":532},[186,83167,52823],{"class":198},[186,83169,529],{"class":202},[186,83171,52850],{"class":532},[186,83173,552],{"class":202},[186,83175,83176,83178,83180,83182,83184],{"class":188,"line":265},[186,83177,53591],{"class":202},[186,83179,52859],{"class":523},[186,83181,52862],{"class":202},[186,83183,52859],{"class":523},[186,83185,552],{"class":202},[186,83187,83188,83190,83192],{"class":188,"line":271},[186,83189,53591],{"class":202},[186,83191,1524],{"class":523},[186,83193,552],{"class":202},[186,83195,83196,83199],{"class":188,"line":288},[186,83197,83198],{"class":523},"    div",[186,83200,622],{"class":202},[186,83202,83203,83205,83207,83209,83211],{"class":188,"line":294},[186,83204,56215],{"class":206},[186,83206,210],{"class":202},[186,83208,3190],{"class":206},[186,83210,804],{"class":669},[186,83212,634],{"class":202},[186,83214,83215,83217,83219,83221,83223],{"class":188,"line":1212},[186,83216,56229],{"class":206},[186,83218,210],{"class":202},[186,83220,2011],{"class":206},[186,83222,804],{"class":669},[186,83224,634],{"class":202},[186,83226,83227,83229,83231,83233,83235],{"class":188,"line":1223},[186,83228,58800],{"class":206},[186,83230,210],{"class":202},[186,83232,2011],{"class":206},[186,83234,804],{"class":669},[186,83236,634],{"class":202},[186,83238,83239,83241,83243,83245,83247],{"class":188,"line":1236},[186,83240,66570],{"class":206},[186,83242,210],{"class":202},[186,83244,2108],{"class":206},[186,83246,804],{"class":669},[186,83248,634],{"class":202},[186,83250,83251,83253,83255,83257],{"class":188,"line":3096},[186,83252,58727],{"class":206},[186,83254,210],{"class":202},[186,83256,53042],{"class":206},[186,83258,634],{"class":202},[186,83260,83261,83263,83265,83267],{"class":188,"line":3110},[186,83262,56327],{"class":206},[186,83264,210],{"class":202},[186,83266,53094],{"class":206},[186,83268,634],{"class":202},[186,83270,83271],{"class":188,"line":3115},[186,83272,3654],{"class":202},[186,83274,83275,83277,83279],{"class":188,"line":3121},[186,83276,53864],{"class":202},[186,83278,1524],{"class":523},[186,83280,552],{"class":202},[186,83282,83283,83285,83287],{"class":188,"line":3142},[186,83284,1470],{"class":202},[186,83286,52786],{"class":523},[186,83288,552],{"class":202},[186,83290,83291],{"class":188,"line":3147},[186,83292,3867],{"emptyLinePlaceholder":1551},[186,83294,83295,83297,83299],{"class":188,"line":3161},[186,83296,520],{"class":202},[186,83298,53247],{"class":523},[186,83300,552],{"class":202},[186,83302,83303,83305,83307,83309,83311],{"class":188,"line":3166},[186,83304,53591],{"class":202},[186,83306,1450],{"class":523},[186,83308,56755],{"class":202},[186,83310,1450],{"class":523},[186,83312,552],{"class":202},[186,83314,83315,83317,83319],{"class":188,"line":3195},[186,83316,53591],{"class":202},[186,83318,53260],{"class":523},[186,83320,552],{"class":202},[186,83322,83323,83325,83328,83330,83333,83336,83338,83341],{"class":188,"line":3200},[186,83324,12684],{"class":669},[186,83326,83327],{"class":206}," spec",[186,83329,15027],{"class":669},[186,83331,83332],{"class":202}," { size: ",[186,83334,83335],{"class":532},"'40cm*40cm'",[186,83337,56905],{"class":202},[186,83339,83340],{"class":532},"'黑色'",[186,83342,57045],{"class":202},[186,83344,83345],{"class":188,"line":3217},[186,83346,83347],{"class":192},"    \u002F\u002F const arr = Object.values(spec)\n",[186,83349,83350],{"class":188,"line":3222},[186,83351,83352],{"class":192},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[186,83354,83355,83357,83359,83361,83364,83366,83368,83371,83374,83377,83379,83381,83384],{"class":188,"line":3227},[186,83356,53854],{"class":202},[186,83358,55844],{"class":198},[186,83360,832],{"class":202},[186,83362,83363],{"class":532},"'div'",[186,83365,75682],{"class":202},[186,83367,529],{"class":669},[186,83369,83370],{"class":202}," Object.",[186,83372,83373],{"class":198},"values",[186,83375,83376],{"class":202},"(spec).",[186,83378,75656],{"class":198},[186,83380,832],{"class":202},[186,83382,83383],{"class":532},"'\u002F'",[186,83385,1629],{"class":202},[186,83387,83388,83390,83392],{"class":188,"line":3232},[186,83389,53864],{"class":202},[186,83391,53260],{"class":523},[186,83393,552],{"class":202},[186,83395,83396,83398,83400],{"class":188,"line":3246},[186,83397,1470],{"class":202},[186,83399,53247],{"class":523},[186,83401,552],{"class":202},[186,83403,83404],{"class":188,"line":3251},[186,83405,3867],{"emptyLinePlaceholder":1551},[186,83407,83408,83410,83412],{"class":188,"line":4044},[186,83409,1470],{"class":202},[186,83411,52089],{"class":523},[186,83413,552],{"class":202},[169,83415,83416],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24371,83418,83420],{"id":83419},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[169,83422,83423],{},"静态方法，将伪数组转换为真数组",[169,83425,83426],{},[164,83427],{"alt":181,"src":83428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[176,83430,83432],{"className":54514,"code":83431,"language":54516,"meta":181,"style":181},"\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",[183,83433,83434,83442,83450,83462,83474,83486,83494,83502,83507,83512,83517,83522,83530],{"__ignoreMap":181},[186,83435,83436,83438,83440],{"class":188,"line":189},[186,83437,520],{"class":202},[186,83439,53247],{"class":523},[186,83441,552],{"class":202},[186,83443,83444,83446,83448],{"class":188,"line":49},[186,83445,53591],{"class":202},[186,83447,19],{"class":523},[186,83449,552],{"class":202},[186,83451,83452,83454,83456,83458,83460],{"class":188,"line":219},[186,83453,52793],{"class":202},[186,83455,22],{"class":523},[186,83457,56755],{"class":202},[186,83459,22],{"class":523},[186,83461,552],{"class":202},[186,83463,83464,83466,83468,83470,83472],{"class":188,"line":225},[186,83465,52793],{"class":202},[186,83467,22],{"class":523},[186,83469,56755],{"class":202},[186,83471,22],{"class":523},[186,83473,552],{"class":202},[186,83475,83476,83478,83480,83482,83484],{"class":188,"line":242},[186,83477,52793],{"class":202},[186,83479,22],{"class":523},[186,83481,56755],{"class":202},[186,83483,22],{"class":523},[186,83485,552],{"class":202},[186,83487,83488,83490,83492],{"class":188,"line":248},[186,83489,53864],{"class":202},[186,83491,19],{"class":523},[186,83493,552],{"class":202},[186,83495,83496,83498,83500],{"class":188,"line":265},[186,83497,53591],{"class":202},[186,83499,53260],{"class":523},[186,83501,552],{"class":202},[186,83503,83504],{"class":188,"line":271},[186,83505,83506],{"class":202},"    const lis = document.querySelectorAll('li')\n",[186,83508,83509],{"class":188,"line":288},[186,83510,83511],{"class":202},"    const liss = Array.from(lis)\n",[186,83513,83514],{"class":188,"line":294},[186,83515,83516],{"class":202},"    liss.pop()\n",[186,83518,83519],{"class":188,"line":1212},[186,83520,83521],{"class":202},"    console.log(liss)\n",[186,83523,83524,83526,83528],{"class":188,"line":1223},[186,83525,53864],{"class":202},[186,83527,53260],{"class":523},[186,83529,552],{"class":202},[186,83531,83532,83534,83536],{"class":188,"line":1236},[186,83533,1470],{"class":202},[186,83535,53247],{"class":523},[186,83537,552],{"class":202},[169,83539,83540],{},[164,83541],{"alt":181,"src":83542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23459,83544,83546],{"id":83545},"_41053-string","4.10.5.3 String",[169,83548,83549],{},[164,83550],{"alt":181,"src":83551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24371,83553,83555],{"id":83554},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[176,83557,83559],{"className":54514,"code":83558,"language":54516,"meta":181,"style":181},"\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",[183,83560,83561,83569,83577,83582,83587,83592,83596,83601,83606,83611,83619],{"__ignoreMap":181},[186,83562,83563,83565,83567],{"class":188,"line":189},[186,83564,520],{"class":202},[186,83566,53247],{"class":523},[186,83568,552],{"class":202},[186,83570,83571,83573,83575],{"class":188,"line":49},[186,83572,53591],{"class":202},[186,83574,53260],{"class":523},[186,83576,552],{"class":202},[186,83578,83579],{"class":188,"line":219},[186,83580,83581],{"class":202},"    \u002F\u002F 把字符串转化为数组\n",[186,83583,83584],{"class":188,"line":225},[186,83585,83586],{"class":202},"    const str = 'pink,red'\n",[186,83588,83589],{"class":188,"line":242},[186,83590,83591],{"class":202},"    const arr = str.split(',')\n",[186,83593,83594],{"class":188,"line":248},[186,83595,82070],{"class":202},[186,83597,83598],{"class":188,"line":265},[186,83599,83600],{"class":202},"    const str1 = '2025-8-25'\n",[186,83602,83603],{"class":188,"line":271},[186,83604,83605],{"class":202},"    const arr1 = str1.split('-')\n",[186,83607,83608],{"class":188,"line":288},[186,83609,83610],{"class":202},"    console.log(arr1)\n",[186,83612,83613,83615,83617],{"class":188,"line":294},[186,83614,53864],{"class":202},[186,83616,53260],{"class":523},[186,83618,552],{"class":202},[186,83620,83621,83623,83625],{"class":188,"line":1212},[186,83622,1470],{"class":202},[186,83624,53247],{"class":523},[186,83626,552],{"class":202},[24371,83628,83630],{"id":83629},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[169,83632,6647],{},[169,83634,83635],{},"substring(indexStart)",[169,83637,83638],{},"substring(indexStart, indexEnd)",[19,83640,83641,83652,83664,83674],{},[22,83642,83643,83644,83647,83648,83651],{},"如果省略了 ",[183,83645,83646],{},"indexEnd","，则 ",[183,83649,83650],{},"substring()"," 提取字符直到字符串的末尾",[22,83653,83654,83655,83658,83659,83647,83661,83663],{},"如果 ",[183,83656,83657],{},"indexStart"," 等于 ",[183,83660,83646],{},[183,83662,83650],{}," 返回一个空字符串",[22,83665,83654,83666,83668,83669,83647,83671,83673],{},[183,83667,83657],{}," 大于 ",[183,83670,83646],{},[183,83672,83650],{}," 的效果就像交换了这两个参数一样",[22,83675,83676],{},"结束的索引号不包含想要截取的部分",[176,83678,83680],{"className":82921,"code":83679,"language":82923,"meta":181,"style":181},"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",[183,83681,83682,83694,83698,83732,83762,83766,83797,83801,83828,83858,83888,83892,83923],{"__ignoreMap":181},[186,83683,83684,83687,83689,83692],{"class":188,"line":189},[186,83685,83686],{"class":202},"const anyString ",[186,83688,529],{"class":669},[186,83690,83691],{"class":532}," \"Mozilla\"",[186,83693,634],{"class":202},[186,83695,83696],{"class":188,"line":49},[186,83697,3867],{"emptyLinePlaceholder":1551},[186,83699,83700,83703,83705,83707,83709,83712,83714,83717,83719,83721,83723,83725,83727,83729],{"class":188,"line":219},[186,83701,83702],{"class":206},"console",[186,83704,2168],{"class":202},[186,83706,59688],{"class":206},[186,83708,832],{"class":202},[186,83710,83711],{"class":206},"anyString",[186,83713,2168],{"class":202},[186,83715,83716],{"class":206},"substring",[186,83718,832],{"class":202},[186,83720,1803],{"class":206},[186,83722,13898],{"class":202},[186,83724,1829],{"class":206},[186,83726,76686],{"class":202},[186,83728,34784],{"class":669},[186,83730,83731],{"class":532}," 'M'\n",[186,83733,83734,83736,83738,83740,83742,83744,83746,83748,83750,83752,83754,83756,83758,83760],{"class":188,"line":225},[186,83735,83702],{"class":206},[186,83737,2168],{"class":202},[186,83739,59688],{"class":206},[186,83741,832],{"class":202},[186,83743,83711],{"class":206},[186,83745,2168],{"class":202},[186,83747,83716],{"class":206},[186,83749,832],{"class":202},[186,83751,1829],{"class":206},[186,83753,13898],{"class":202},[186,83755,1803],{"class":206},[186,83757,76686],{"class":202},[186,83759,34784],{"class":669},[186,83761,83731],{"class":532},[186,83763,83764],{"class":188,"line":242},[186,83765,3867],{"emptyLinePlaceholder":1551},[186,83767,83768,83770,83772,83774,83776,83778,83780,83782,83784,83786,83788,83790,83792,83794],{"class":188,"line":248},[186,83769,83702],{"class":206},[186,83771,2168],{"class":202},[186,83773,59688],{"class":206},[186,83775,832],{"class":202},[186,83777,83711],{"class":206},[186,83779,2168],{"class":202},[186,83781,83716],{"class":206},[186,83783,832],{"class":202},[186,83785,1803],{"class":206},[186,83787,13898],{"class":202},[186,83789,1954],{"class":206},[186,83791,76686],{"class":202},[186,83793,34784],{"class":669},[186,83795,83796],{"class":532}," 'Mozill'\n",[186,83798,83799],{"class":188,"line":265},[186,83800,3867],{"emptyLinePlaceholder":1551},[186,83802,83803,83805,83807,83809,83811,83813,83815,83817,83819,83821,83823,83825],{"class":188,"line":271},[186,83804,83702],{"class":206},[186,83806,2168],{"class":202},[186,83808,59688],{"class":206},[186,83810,832],{"class":202},[186,83812,83711],{"class":206},[186,83814,2168],{"class":202},[186,83816,83716],{"class":206},[186,83818,832],{"class":202},[186,83820,1904],{"class":206},[186,83822,76686],{"class":202},[186,83824,34784],{"class":669},[186,83826,83827],{"class":532}," 'lla'\n",[186,83829,83830,83832,83834,83836,83838,83840,83842,83844,83846,83848,83850,83852,83854,83856],{"class":188,"line":288},[186,83831,83702],{"class":206},[186,83833,2168],{"class":202},[186,83835,59688],{"class":206},[186,83837,832],{"class":202},[186,83839,83711],{"class":206},[186,83841,2168],{"class":202},[186,83843,83716],{"class":206},[186,83845,832],{"class":202},[186,83847,1904],{"class":206},[186,83849,13898],{"class":202},[186,83851,1979],{"class":206},[186,83853,76742],{"class":202},[186,83855,34784],{"class":669},[186,83857,83827],{"class":532},[186,83859,83860,83862,83864,83866,83868,83870,83872,83874,83876,83878,83880,83882,83884,83886],{"class":188,"line":294},[186,83861,83702],{"class":206},[186,83863,2168],{"class":202},[186,83865,59688],{"class":206},[186,83867,832],{"class":202},[186,83869,83711],{"class":206},[186,83871,2168],{"class":202},[186,83873,83716],{"class":206},[186,83875,832],{"class":202},[186,83877,1979],{"class":206},[186,83879,13898],{"class":202},[186,83881,1904],{"class":206},[186,83883,76686],{"class":202},[186,83885,34784],{"class":669},[186,83887,83827],{"class":532},[186,83889,83890],{"class":188,"line":1212},[186,83891,3867],{"emptyLinePlaceholder":1551},[186,83893,83894,83896,83898,83900,83902,83904,83906,83908,83910,83912,83914,83916,83918,83920],{"class":188,"line":1223},[186,83895,83702],{"class":206},[186,83897,2168],{"class":202},[186,83899,59688],{"class":206},[186,83901,832],{"class":202},[186,83903,83711],{"class":206},[186,83905,2168],{"class":202},[186,83907,83716],{"class":206},[186,83909,832],{"class":202},[186,83911,1803],{"class":206},[186,83913,13898],{"class":202},[186,83915,1979],{"class":206},[186,83917,76686],{"class":202},[186,83919,34784],{"class":669},[186,83921,83922],{"class":532}," 'Mozilla'\n",[186,83924,83925,83927,83929,83931,83933,83935,83937,83939,83941,83943,83945,83947,83949,83951],{"class":188,"line":1236},[186,83926,83702],{"class":206},[186,83928,2168],{"class":202},[186,83930,59688],{"class":206},[186,83932,832],{"class":202},[186,83934,83711],{"class":206},[186,83936,2168],{"class":202},[186,83938,83716],{"class":206},[186,83940,832],{"class":202},[186,83942,1803],{"class":206},[186,83944,13898],{"class":202},[186,83946,2056],{"class":206},[186,83948,76686],{"class":202},[186,83950,34784],{"class":669},[186,83952,83922],{"class":532},[24371,83954,83956],{"id":83955},"_410533-startswith","4.10.5.3.3 startsWith",[169,83958,83959,83962,83963,83968,83969,83971,83972],{},[183,83960,83961],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[54,83964,83965],{},[183,83966,83967],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[183,83970,2835],{}," 或 ",[183,83973,67457],{},[176,83975,83977],{"className":78928,"code":83976,"language":78930,"meta":181,"style":181},"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",[183,83978,83979,83991,84010,84015,84035],{"__ignoreMap":181},[186,83980,83981,83983,83986,83988],{"class":188,"line":189},[186,83982,8255],{"class":669},[186,83984,83985],{"class":202}," str1 ",[186,83987,529],{"class":669},[186,83989,83990],{"class":532}," \"Saturday night plans\"\n",[186,83992,83993,83995,83997,84000,84003,84005,84008],{"class":188,"line":49},[186,83994,78965],{"class":202},[186,83996,59688],{"class":198},[186,83998,83999],{"class":202},"(str1.",[186,84001,84002],{"class":198},"startsWith",[186,84004,832],{"class":202},[186,84006,84007],{"class":532},"\"Sat\"",[186,84009,31952],{"class":202},[186,84011,84012],{"class":188,"line":219},[186,84013,84014],{"class":192},"\u002F\u002F Expected output: true\n",[186,84016,84017,84019,84021,84023,84025,84027,84029,84031,84033],{"class":188,"line":225},[186,84018,78965],{"class":202},[186,84020,59688],{"class":198},[186,84022,83999],{"class":202},[186,84024,84002],{"class":198},[186,84026,832],{"class":202},[186,84028,84007],{"class":532},[186,84030,13898],{"class":202},[186,84032,1691],{"class":206},[186,84034,31952],{"class":202},[186,84036,84037],{"class":188,"line":242},[186,84038,84039],{"class":192},"\u002F\u002F Expected output: false\n",[176,84041,84043],{"className":52087,"code":84042,"language":52089,"meta":181,"style":181},"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",[183,84044,84045,84050,84055,84059,84064,84069],{"__ignoreMap":181},[186,84046,84047],{"class":188,"line":189},[186,84048,84049],{"class":202},"startsWith(searchString)\n",[186,84051,84052],{"class":188,"line":49},[186,84053,84054],{"class":202},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[186,84056,84057],{"class":188,"line":219},[186,84058,3867],{"emptyLinePlaceholder":1551},[186,84060,84061],{"class":188,"line":225},[186,84062,84063],{"class":202},"const str3 = 'pink老师上课中'\n",[186,84065,84066],{"class":188,"line":242},[186,84067,84068],{"class":202},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[186,84070,84071],{"class":188,"line":248},[186,84072,84073],{"class":202},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24371,84075,84077],{"id":84076},"_410534-includes","4.10.5.3.4 includes",[169,84079,84080],{},"includes(searchString) includes(searchString, position)",[34,84082,84083],{},[22,84084,84085],{},"searchString:",[169,84087,84088,84089,84091,84092,84097,84098,84103,84104,22961,84107,84110,84111,84114],{},"一个要在 ",[183,84090,2775],{}," 中查找的字符串。",[948,84093,84096],{"href":84094,"rel":84095},"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",[952],"不能是正则表达式","。所有非正则表达式的值都会被",[948,84099,84102],{"href":84100,"rel":84101},"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",[952],"强制转换为字符串","，因此如果该参数被省略或传入 ",[183,84105,84106],{},"undefined",[183,84108,84109],{},"includes()"," 方法会在字符串中搜索 ",[183,84112,84113],{},"\"undefined\"","，这通常不是你想要的",[34,84116,84117],{"start":49},[22,84118,84119,2467],{},[183,84120,84121],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[169,84123,84124,84125,84128,84129],{},"在字符串中开始搜索 ",[183,84126,84127],{},"searchString"," 的位置。默认值为 ",[183,84130,1803],{},[34,84132,84133],{"start":219},[22,84134,84135],{},"返回值：",[169,84137,84138,84139,84141,84142,84146,84147],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[183,84140,84127],{}," 为空字符串的情况），则返回 ",[54,84143,84144],{},[183,84145,2835],{}," ，否则返回 ",[54,84148,84149],{},[183,84150,67457],{},[34,84152,84153],{"start":225},[22,84154,84155],{},"异常：",[169,84157,83654,84158,15257,84160,84164],{},[183,84159,84127],{},[948,84161,84163],{"href":84094,"rel":84162},[952],"是一个正则表达式","，则会抛出",[169,84166,84167],{},"只要是有就是true，不需要非得以谁开头结尾",[176,84169,84171],{"className":78928,"code":84170,"language":78930,"meta":181,"style":181},"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",[183,84172,84173,84184,84207,84226,84246,84268,84287],{"__ignoreMap":181},[186,84174,84175,84177,84179,84181],{"class":188,"line":189},[186,84176,8255],{"class":669},[186,84178,81208],{"class":202},[186,84180,529],{"class":669},[186,84182,84183],{"class":532}," \"To be, or not to be, that is the question.\"\n",[186,84185,84186,84188,84190,84193,84196,84198,84201,84204],{"class":188,"line":49},[186,84187,78965],{"class":202},[186,84189,59688],{"class":198},[186,84191,84192],{"class":202},"(str.",[186,84194,84195],{"class":198},"includes",[186,84197,832],{"class":202},[186,84199,84200],{"class":532},"\"To be\"",[186,84202,84203],{"class":202},"))",[186,84205,84206],{"class":192},"  \u002F\u002F true\n",[186,84208,84209,84211,84213,84215,84217,84219,84222,84224],{"class":188,"line":219},[186,84210,78965],{"class":202},[186,84212,59688],{"class":198},[186,84214,84192],{"class":202},[186,84216,84195],{"class":198},[186,84218,832],{"class":202},[186,84220,84221],{"class":532},"\"question\"",[186,84223,84203],{"class":202},[186,84225,84206],{"class":192},[186,84227,84228,84230,84232,84234,84236,84238,84241,84243],{"class":188,"line":225},[186,84229,78965],{"class":202},[186,84231,59688],{"class":198},[186,84233,84192],{"class":202},[186,84235,84195],{"class":198},[186,84237,832],{"class":202},[186,84239,84240],{"class":532},"\"nonexistent\"",[186,84242,84203],{"class":202},[186,84244,84245],{"class":192},"  \u002F\u002F false\n",[186,84247,84248,84250,84252,84254,84256,84258,84260,84262,84264,84266],{"class":188,"line":242},[186,84249,78965],{"class":202},[186,84251,59688],{"class":198},[186,84253,84192],{"class":202},[186,84255,84195],{"class":198},[186,84257,832],{"class":202},[186,84259,84200],{"class":532},[186,84261,13898],{"class":202},[186,84263,1829],{"class":206},[186,84265,84203],{"class":202},[186,84267,84245],{"class":192},[186,84269,84270,84272,84274,84276,84278,84280,84283,84285],{"class":188,"line":248},[186,84271,78965],{"class":202},[186,84273,59688],{"class":198},[186,84275,84192],{"class":202},[186,84277,84195],{"class":198},[186,84279,832],{"class":202},[186,84281,84282],{"class":532},"\"TO BE\"",[186,84284,84203],{"class":202},[186,84286,84245],{"class":192},[186,84288,84289,84291,84293,84295,84297,84299,84301,84303],{"class":188,"line":265},[186,84290,78965],{"class":202},[186,84292,59688],{"class":198},[186,84294,84192],{"class":202},[186,84296,84195],{"class":198},[186,84298,832],{"class":202},[186,84300,9115],{"class":532},[186,84302,84203],{"class":202},[186,84304,84206],{"class":192},[24371,84306,84308],{"id":84307},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[176,84310,84312],{"className":54514,"code":84311,"language":54516,"meta":181,"style":181},"\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",[183,84313,84314,84322,84330,84335,84340,84345,84350,84355,84363],{"__ignoreMap":181},[186,84315,84316,84318,84320],{"class":188,"line":189},[186,84317,520],{"class":202},[186,84319,53247],{"class":523},[186,84321,552],{"class":202},[186,84323,84324,84326,84328],{"class":188,"line":49},[186,84325,53591],{"class":202},[186,84327,53260],{"class":523},[186,84329,552],{"class":202},[186,84331,84332],{"class":188,"line":219},[186,84333,84334],{"class":202},"    const num = 10\n",[186,84336,84337],{"class":188,"line":225},[186,84338,84339],{"class":202},"    \u002F\u002F 强制转换\n",[186,84341,84342],{"class":188,"line":242},[186,84343,84344],{"class":202},"    console.log(String(num))\n",[186,84346,84347],{"class":188,"line":248},[186,84348,84349],{"class":202},"    \u002F\u002F toString()方法转换\n",[186,84351,84352],{"class":188,"line":265},[186,84353,84354],{"class":202},"    console.log(num.toString())\n",[186,84356,84357,84359,84361],{"class":188,"line":271},[186,84358,53864],{"class":202},[186,84360,53260],{"class":523},[186,84362,552],{"class":202},[186,84364,84365,84367,84369],{"class":188,"line":288},[186,84366,1470],{"class":202},[186,84368,53247],{"class":523},[186,84370,552],{"class":202},[24371,84372,84374],{"id":84373},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[169,84376,84377],{},[164,84378],{"alt":181,"src":84379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[176,84381,84383],{"className":52087,"code":84382,"language":52089,"meta":181,"style":181},"\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",[183,84384,84385,84395,84409,84413,84421,84435,84455,84467,84475,84479,84487,84499,84507,84519,84524,84529,84534,84581,84597,84605,84613,84617],{"__ignoreMap":181},[186,84386,84387,84389,84391,84393],{"class":188,"line":189},[186,84388,52751],{"class":202},[186,84390,52754],{"class":523},[186,84392,52757],{"class":198},[186,84394,552],{"class":202},[186,84396,84397,84399,84401,84403,84405,84407],{"class":188,"line":49},[186,84398,520],{"class":202},[186,84400,52089],{"class":523},[186,84402,52768],{"class":198},[186,84404,529],{"class":202},[186,84406,52773],{"class":532},[186,84408,552],{"class":202},[186,84410,84411],{"class":188,"line":219},[186,84412,3867],{"emptyLinePlaceholder":1551},[186,84414,84415,84417,84419],{"class":188,"line":225},[186,84416,520],{"class":202},[186,84418,52786],{"class":523},[186,84420,552],{"class":202},[186,84422,84423,84425,84427,84429,84431,84433],{"class":188,"line":242},[186,84424,53591],{"class":202},[186,84426,52796],{"class":523},[186,84428,52799],{"class":198},[186,84430,529],{"class":202},[186,84432,52804],{"class":532},[186,84434,552],{"class":202},[186,84436,84437,84439,84441,84443,84445,84447,84449,84451,84453],{"class":188,"line":248},[186,84438,53591],{"class":202},[186,84440,52796],{"class":523},[186,84442,16382],{"class":198},[186,84444,529],{"class":202},[186,84446,52843],{"class":532},[186,84448,52823],{"class":198},[186,84450,529],{"class":202},[186,84452,52850],{"class":532},[186,84454,552],{"class":202},[186,84456,84457,84459,84461,84463,84465],{"class":188,"line":265},[186,84458,53591],{"class":202},[186,84460,52859],{"class":523},[186,84462,52862],{"class":202},[186,84464,52859],{"class":523},[186,84466,552],{"class":202},[186,84468,84469,84471,84473],{"class":188,"line":271},[186,84470,1470],{"class":202},[186,84472,52786],{"class":523},[186,84474,552],{"class":202},[186,84476,84477],{"class":188,"line":288},[186,84478,3867],{"emptyLinePlaceholder":1551},[186,84480,84481,84483,84485],{"class":188,"line":294},[186,84482,520],{"class":202},[186,84484,53247],{"class":523},[186,84486,552],{"class":202},[186,84488,84489,84491,84493,84495,84497],{"class":188,"line":1212},[186,84490,53591],{"class":202},[186,84492,1450],{"class":523},[186,84494,56755],{"class":202},[186,84496,1450],{"class":523},[186,84498,552],{"class":202},[186,84500,84501,84503,84505],{"class":188,"line":1223},[186,84502,53591],{"class":202},[186,84504,53260],{"class":523},[186,84506,552],{"class":202},[186,84508,84509,84511,84514,84516],{"class":188,"line":1236},[186,84510,12684],{"class":669},[186,84512,84513],{"class":206}," gift",[186,84515,15027],{"class":669},[186,84517,84518],{"class":532}," '50g的茶叶，清洗球'\n",[186,84520,84521],{"class":188,"line":3096},[186,84522,84523],{"class":192},"    \u002F\u002F 1.把字符串拆分为数组\n",[186,84525,84526],{"class":188,"line":3110},[186,84527,84528],{"class":192},"    \u002F\u002F console.log(gift.split(','))\n",[186,84530,84531],{"class":188,"line":3115},[186,84532,84533],{"class":192},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[186,84535,84536,84538,84540,84542,84545,84548,84550,84553,84555,84557,84559,84561,84563,84566,84568,84571,84573,84575,84577,84579],{"class":188,"line":3121},[186,84537,12684],{"class":669},[186,84539,75352],{"class":206},[186,84541,15027],{"class":669},[186,84543,84544],{"class":202}," gift.",[186,84546,84547],{"class":198},"split",[186,84549,832],{"class":202},[186,84551,84552],{"class":532},"'，'",[186,84554,32281],{"class":202},[186,84556,75477],{"class":198},[186,84558,832],{"class":202},[186,84560,81228],{"class":835},[186,84562,81231],{"class":669},[186,84564,84565],{"class":532}," `\u003Cspan>【赠品】${",[186,84567,81228],{"class":202},[186,84569,84570],{"class":532},"}\u003C\u002Fspan>\u003Cbr>`",[186,84572,32281],{"class":202},[186,84574,75656],{"class":198},[186,84576,832],{"class":202},[186,84578,75661],{"class":532},[186,84580,1629],{"class":202},[186,84582,84583,84585,84587,84589,84591,84593,84595],{"class":188,"line":3142},[186,84584,53854],{"class":202},[186,84586,55844],{"class":198},[186,84588,832],{"class":202},[186,84590,83363],{"class":532},[186,84592,75682],{"class":202},[186,84594,529],{"class":669},[186,84596,75418],{"class":202},[186,84598,84599,84601,84603],{"class":188,"line":3147},[186,84600,53864],{"class":202},[186,84602,53260],{"class":523},[186,84604,552],{"class":202},[186,84606,84607,84609,84611],{"class":188,"line":3161},[186,84608,1470],{"class":202},[186,84610,53247],{"class":523},[186,84612,552],{"class":202},[186,84614,84615],{"class":188,"line":3166},[186,84616,3867],{"emptyLinePlaceholder":1551},[186,84618,84619,84621,84623],{"class":188,"line":3195},[186,84620,1470],{"class":202},[186,84622,52089],{"class":523},[186,84624,552],{"class":202},[23459,84626,84628],{"id":84627},"_41054-number","4.10.5.4 Number",[169,84630,84631],{},[164,84632],{"alt":181,"src":84633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[169,84635,84636],{},"整数也可以进行toFixed来保留小数",[169,84638,84639],{},"比如：",[169,84641,84642],{},"const price=10",[169,84644,84645],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23459,84647,84649],{"id":84648},"_41055-购物车展示","4.10.5.5 购物车展示",[169,84651,84652],{},[164,84653],{"alt":181,"src":84654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[176,84656,84658],{"className":52087,"code":84657,"language":52089,"meta":181,"style":181},"\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",[183,84659,84660,84670,84684,84688,84696,84710,84730,84742,84750,84756,84766,84776,84786,84790,84794,84800,84812,84826,84830,84834,84840,84852,84868,84878,84894,84898,84902,84908,84918,84928,84932,84936,84944,84956,84968,84980,84984,84988,84996,85008,85012,85016,85027,85037,85049,85061,85071,85075,85079,85087,85096,85108,85118,85128,85132,85136,85144,85153,85160,85170,85182,85186,85190,85199,85209,85220,85232,85244,85248,85252,85261,85271,85282,85286,85290,85296,85308,85320,85330,85340,85358,85370,85374,85378,85387,85399,85409,85419,85431,85435,85443,85451,85455,85463,85477,85485,85499,85527,85535,85543,85553,85557,85565,85573,85582,85590,85599,85609,85613,85617,85625,85633,85642,85650,85658,85671,85675,85679,85687,85695,85704,85712,85720,85735,85739,85743,85751,85759,85768,85776,85784,85798,85806,85810,85814,85819,85845,85850,85887,85892,85915,85920,85974,85979,86015,86019,86025,86030,86039,86053,86062,86081,86090,86100,86105,86110,86123,86128,86182,86208,86216,86224,86228],{"__ignoreMap":181},[186,84661,84662,84664,84666,84668],{"class":188,"line":189},[186,84663,52751],{"class":202},[186,84665,52754],{"class":523},[186,84667,52757],{"class":198},[186,84669,552],{"class":202},[186,84671,84672,84674,84676,84678,84680,84682],{"class":188,"line":49},[186,84673,520],{"class":202},[186,84675,52089],{"class":523},[186,84677,52768],{"class":198},[186,84679,529],{"class":202},[186,84681,52773],{"class":532},[186,84683,552],{"class":202},[186,84685,84686],{"class":188,"line":219},[186,84687,3867],{"emptyLinePlaceholder":1551},[186,84689,84690,84692,84694],{"class":188,"line":225},[186,84691,520],{"class":202},[186,84693,52786],{"class":523},[186,84695,552],{"class":202},[186,84697,84698,84700,84702,84704,84706,84708],{"class":188,"line":242},[186,84699,53591],{"class":202},[186,84701,52796],{"class":523},[186,84703,52799],{"class":198},[186,84705,529],{"class":202},[186,84707,52804],{"class":532},[186,84709,552],{"class":202},[186,84711,84712,84714,84716,84718,84720,84722,84724,84726,84728],{"class":188,"line":248},[186,84713,53591],{"class":202},[186,84715,52796],{"class":523},[186,84717,16382],{"class":198},[186,84719,529],{"class":202},[186,84721,52843],{"class":532},[186,84723,52823],{"class":198},[186,84725,529],{"class":202},[186,84727,52850],{"class":532},[186,84729,552],{"class":202},[186,84731,84732,84734,84736,84738,84740],{"class":188,"line":265},[186,84733,53591],{"class":202},[186,84735,52859],{"class":523},[186,84737,52862],{"class":202},[186,84739,52859],{"class":523},[186,84741,552],{"class":202},[186,84743,84744,84746,84748],{"class":188,"line":271},[186,84745,53591],{"class":202},[186,84747,1524],{"class":523},[186,84749,552],{"class":202},[186,84751,84752,84754],{"class":188,"line":288},[186,84753,7866],{"class":523},[186,84755,622],{"class":202},[186,84757,84758,84760,84762,84764],{"class":188,"line":294},[186,84759,56140],{"class":206},[186,84761,210],{"class":202},[186,84763,1803],{"class":206},[186,84765,634],{"class":202},[186,84767,84768,84770,84772,84774],{"class":188,"line":1212},[186,84769,56151],{"class":206},[186,84771,210],{"class":202},[186,84773,1803],{"class":206},[186,84775,634],{"class":202},[186,84777,84778,84780,84782,84784],{"class":188,"line":1223},[186,84779,74030],{"class":206},[186,84781,210],{"class":202},[186,84783,61946],{"class":206},[186,84785,634],{"class":202},[186,84787,84788],{"class":188,"line":1236},[186,84789,3654],{"class":202},[186,84791,84792],{"class":188,"line":3096},[186,84793,3867],{"emptyLinePlaceholder":1551},[186,84795,84796,84798],{"class":188,"line":3110},[186,84797,63561],{"class":198},[186,84799,622],{"class":202},[186,84801,84802,84804,84806,84808,84810],{"class":188,"line":3115},[186,84803,56215],{"class":206},[186,84805,210],{"class":202},[186,84807,80007],{"class":206},[186,84809,804],{"class":669},[186,84811,634],{"class":202},[186,84813,84814,84816,84818,84820,84822,84824],{"class":188,"line":3121},[186,84815,56151],{"class":206},[186,84817,210],{"class":202},[186,84819,1922],{"class":206},[186,84821,804],{"class":669},[186,84823,53006],{"class":206},[186,84825,634],{"class":202},[186,84827,84828],{"class":188,"line":3142},[186,84829,3654],{"class":202},[186,84831,84832],{"class":188,"line":3147},[186,84833,3867],{"emptyLinePlaceholder":1551},[186,84835,84836,84838],{"class":188,"line":3161},[186,84837,80058],{"class":198},[186,84839,622],{"class":202},[186,84841,84842,84844,84846,84848,84850],{"class":188,"line":3166},[186,84843,56140],{"class":206},[186,84845,210],{"class":202},[186,84847,2185],{"class":206},[186,84849,804],{"class":669},[186,84851,634],{"class":202},[186,84853,84854,84856,84858,84860,84862,84864,84866],{"class":188,"line":3195},[186,84855,63298],{"class":206},[186,84857,210],{"class":202},[186,84859,29577],{"class":206},[186,84861,80113],{"class":206},[186,84863,80116],{"class":206},[186,84865,2304],{"class":669},[186,84867,634],{"class":202},[186,84869,84870,84872,84874,84876],{"class":188,"line":3200},[186,84871,56452],{"class":206},[186,84873,210],{"class":202},[186,84875,52928],{"class":206},[186,84877,634],{"class":202},[186,84879,84880,84882,84884,84886,84888,84890,84892],{"class":188,"line":3217},[186,84881,63415],{"class":206},[186,84883,210],{"class":202},[186,84885,1829],{"class":206},[186,84887,804],{"class":669},[186,84889,52971],{"class":206},[186,84891,63682],{"class":206},[186,84893,634],{"class":202},[186,84895,84896],{"class":188,"line":3222},[186,84897,3654],{"class":202},[186,84899,84900],{"class":188,"line":3227},[186,84901,3867],{"emptyLinePlaceholder":1551},[186,84903,84904,84906],{"class":188,"line":3232},[186,84905,80176],{"class":198},[186,84907,622],{"class":202},[186,84909,84910,84912,84914,84916],{"class":188,"line":3246},[186,84911,63463],{"class":206},[186,84913,210],{"class":202},[186,84915,63468],{"class":206},[186,84917,634],{"class":202},[186,84919,84920,84922,84924,84926],{"class":188,"line":3251},[186,84921,56327],{"class":206},[186,84923,210],{"class":202},[186,84925,63256],{"class":206},[186,84927,634],{"class":202},[186,84929,84930],{"class":188,"line":4044},[186,84931,3654],{"class":202},[186,84933,84934],{"class":188,"line":4058},[186,84935,3867],{"emptyLinePlaceholder":1551},[186,84937,84938,84940,84942],{"class":188,"line":4066},[186,84939,80058],{"class":198},[186,84941,57056],{"class":523},[186,84943,622],{"class":202},[186,84945,84946,84948,84950,84952,84954],{"class":188,"line":4071},[186,84947,56215],{"class":206},[186,84949,210],{"class":202},[186,84951,2222],{"class":206},[186,84953,804],{"class":669},[186,84955,634],{"class":202},[186,84957,84958,84960,84962,84964,84966],{"class":188,"line":4077},[186,84959,56229],{"class":206},[186,84961,210],{"class":202},[186,84963,2222],{"class":206},[186,84965,804],{"class":669},[186,84967,634],{"class":202},[186,84969,84970,84972,84974,84976,84978],{"class":188,"line":4083},[186,84971,63188],{"class":206},[186,84973,210],{"class":202},[186,84975,1930],{"class":206},[186,84977,804],{"class":669},[186,84979,634],{"class":202},[186,84981,84982],{"class":188,"line":4088},[186,84983,3654],{"class":202},[186,84985,84986],{"class":188,"line":9411},[186,84987,3867],{"emptyLinePlaceholder":1551},[186,84989,84990,84992,84994],{"class":188,"line":9435},[186,84991,80058],{"class":198},[186,84993,63742],{"class":198},[186,84995,622],{"class":202},[186,84997,84998,85000,85002,85004,85006],{"class":188,"line":9440},[186,84999,56215],{"class":206},[186,85001,210],{"class":202},[186,85003,3190],{"class":206},[186,85005,804],{"class":669},[186,85007,634],{"class":202},[186,85009,85010],{"class":188,"line":9446},[186,85011,3654],{"class":202},[186,85013,85014],{"class":188,"line":9473},[186,85015,3867],{"emptyLinePlaceholder":1551},[186,85017,85018,85020,85022,85025],{"class":188,"line":9478},[186,85019,80058],{"class":198},[186,85021,63742],{"class":198},[186,85023,85024],{"class":198}," .tag",[186,85026,622],{"class":202},[186,85028,85029,85031,85033,85035],{"class":188,"line":9484},[186,85030,56452],{"class":206},[186,85032,210],{"class":202},[186,85034,62310],{"class":206},[186,85036,634],{"class":202},[186,85038,85039,85041,85043,85045,85047],{"class":188,"line":9496},[186,85040,56140],{"class":206},[186,85042,210],{"class":202},[186,85044,1697],{"class":206},[186,85046,804],{"class":669},[186,85048,634],{"class":202},[186,85050,85051,85053,85055,85057,85059],{"class":188,"line":9508},[186,85052,56365],{"class":206},[186,85054,210],{"class":202},[186,85056,2108],{"class":206},[186,85058,804],{"class":669},[186,85060,634],{"class":202},[186,85062,85063,85065,85067,85069],{"class":188,"line":9520},[186,85064,58857],{"class":206},[186,85066,210],{"class":202},[186,85068,63508],{"class":206},[186,85070,634],{"class":202},[186,85072,85073],{"class":188,"line":11179},[186,85074,3654],{"class":202},[186,85076,85077],{"class":188,"line":11204},[186,85078,3867],{"emptyLinePlaceholder":1551},[186,85080,85081,85083,85085],{"class":188,"line":11227},[186,85082,80058],{"class":198},[186,85084,80350],{"class":198},[186,85086,32921],{"class":202},[186,85088,85089,85091,85094],{"class":188,"line":11251},[186,85090,80058],{"class":198},[186,85092,85093],{"class":198}," .sub-total",[186,85095,622],{"class":202},[186,85097,85098,85100,85102,85104,85106],{"class":188,"line":11256},[186,85099,56365],{"class":206},[186,85101,210],{"class":202},[186,85103,2260],{"class":206},[186,85105,804],{"class":669},[186,85107,634],{"class":202},[186,85109,85110,85112,85114,85116],{"class":188,"line":11261},[186,85111,58857],{"class":206},[186,85113,210],{"class":202},[186,85115,80373],{"class":206},[186,85117,634],{"class":202},[186,85119,85120,85122,85124,85126],{"class":188,"line":11266},[186,85121,63275],{"class":206},[186,85123,210],{"class":202},[186,85125,1829],{"class":206},[186,85127,634],{"class":202},[186,85129,85130],{"class":188,"line":11275},[186,85131,3654],{"class":202},[186,85133,85134],{"class":188,"line":11280},[186,85135,3867],{"emptyLinePlaceholder":1551},[186,85137,85138,85140,85142],{"class":188,"line":11286},[186,85139,80058],{"class":198},[186,85141,80390],{"class":198},[186,85143,32921],{"class":202},[186,85145,85146,85148,85151],{"class":188,"line":11307},[186,85147,80058],{"class":198},[186,85149,85150],{"class":198}," .sub-total::before",[186,85152,32921],{"class":202},[186,85154,85155,85158],{"class":188,"line":11313},[186,85156,85157],{"class":198},"    .amount::before",[186,85159,622],{"class":202},[186,85161,85162,85164,85166,85168],{"class":188,"line":11327},[186,85163,80397],{"class":206},[186,85165,210],{"class":202},[186,85167,80402],{"class":532},[186,85169,634],{"class":202},[186,85171,85172,85174,85176,85178,85180],{"class":188,"line":11333},[186,85173,56365],{"class":206},[186,85175,210],{"class":202},[186,85177,2108],{"class":206},[186,85179,804],{"class":669},[186,85181,634],{"class":202},[186,85183,85184],{"class":188,"line":11360},[186,85185,3654],{"class":202},[186,85187,85188],{"class":188,"line":11369},[186,85189,3867],{"emptyLinePlaceholder":1551},[186,85191,85192,85194,85197],{"class":188,"line":11375},[186,85193,80058],{"class":198},[186,85195,85196],{"class":198}," .spec",[186,85198,622],{"class":202},[186,85200,85201,85203,85205,85207],{"class":188,"line":11383},[186,85202,63275],{"class":206},[186,85204,210],{"class":202},[186,85206,1697],{"class":206},[186,85208,634],{"class":202},[186,85210,85211,85213,85215,85218],{"class":188,"line":11388},[186,85212,58857],{"class":206},[186,85214,210],{"class":202},[186,85216,85217],{"class":206},"#888",[186,85219,634],{"class":202},[186,85221,85222,85224,85226,85228,85230],{"class":188,"line":18065},[186,85223,56365],{"class":206},[186,85225,210],{"class":202},[186,85227,2159],{"class":206},[186,85229,804],{"class":669},[186,85231,634],{"class":202},[186,85233,85234,85236,85238,85240,85242],{"class":188,"line":18071},[186,85235,63438],{"class":206},[186,85237,210],{"class":202},[186,85239,801],{"class":206},[186,85241,804],{"class":669},[186,85243,634],{"class":202},[186,85245,85246],{"class":188,"line":18094},[186,85247,3654],{"class":202},[186,85249,85250],{"class":188,"line":18100},[186,85251,3867],{"emptyLinePlaceholder":1551},[186,85253,85254,85256,85259],{"class":188,"line":18123},[186,85255,80058],{"class":198},[186,85257,85258],{"class":198}," .count",[186,85260,622],{"class":202},[186,85262,85263,85265,85267,85269],{"class":188,"line":18137},[186,85264,63275],{"class":206},[186,85266,210],{"class":202},[186,85268,1829],{"class":206},[186,85270,634],{"class":202},[186,85272,85273,85275,85277,85280],{"class":188,"line":18157},[186,85274,58857],{"class":206},[186,85276,210],{"class":202},[186,85278,85279],{"class":206},"#aaa",[186,85281,634],{"class":202},[186,85283,85284],{"class":188,"line":18163},[186,85285,3654],{"class":202},[186,85287,85288],{"class":188,"line":18174},[186,85289,3867],{"emptyLinePlaceholder":1551},[186,85291,85292,85294],{"class":188,"line":18197},[186,85293,73909],{"class":198},[186,85295,622],{"class":202},[186,85297,85298,85300,85302,85304,85306],{"class":188,"line":18219},[186,85299,56215],{"class":206},[186,85301,210],{"class":202},[186,85303,80007],{"class":206},[186,85305,804],{"class":669},[186,85307,634],{"class":202},[186,85309,85310,85312,85314,85316,85318],{"class":188,"line":18224},[186,85311,56151],{"class":206},[186,85313,210],{"class":202},[186,85315,1803],{"class":206},[186,85317,53006],{"class":206},[186,85319,634],{"class":202},[186,85321,85322,85324,85326,85328],{"class":188,"line":18230},[186,85323,56452],{"class":206},[186,85325,210],{"class":202},[186,85327,52928],{"class":206},[186,85329,634],{"class":202},[186,85331,85332,85334,85336,85338],{"class":188,"line":18244},[186,85333,56463],{"class":206},[186,85335,210],{"class":202},[186,85337,53030],{"class":206},[186,85339,634],{"class":202},[186,85341,85342,85345,85347,85349,85351,85353,85356],{"class":188,"line":18257},[186,85343,85344],{"class":206},"      border-top",[186,85346,210],{"class":202},[186,85348,1829],{"class":206},[186,85350,804],{"class":669},[186,85352,52971],{"class":206},[186,85354,85355],{"class":206}," #4e4e4e",[186,85357,634],{"class":202},[186,85359,85360,85362,85364,85366,85368],{"class":188,"line":18262},[186,85361,56140],{"class":206},[186,85363,210],{"class":202},[186,85365,801],{"class":206},[186,85367,804],{"class":669},[186,85369,634],{"class":202},[186,85371,85372],{"class":188,"line":18276},[186,85373,3654],{"class":202},[186,85375,85376],{"class":188,"line":18281},[186,85377,3867],{"emptyLinePlaceholder":1551},[186,85379,85380,85382,85385],{"class":188,"line":18287},[186,85381,73909],{"class":198},[186,85383,85384],{"class":198}," .amount",[186,85386,622],{"class":202},[186,85388,85389,85391,85393,85395,85397],{"class":188,"line":18292},[186,85390,56365],{"class":206},[186,85392,210],{"class":202},[186,85394,2260],{"class":206},[186,85396,804],{"class":669},[186,85398,634],{"class":202},[186,85400,85401,85403,85405,85407],{"class":188,"line":18306},[186,85402,58857],{"class":206},[186,85404,210],{"class":202},[186,85406,80373],{"class":206},[186,85408,634],{"class":202},[186,85410,85411,85413,85415,85417],{"class":188,"line":18311},[186,85412,63772],{"class":206},[186,85414,210],{"class":202},[186,85416,52940],{"class":206},[186,85418,634],{"class":202},[186,85420,85421,85423,85425,85427,85429],{"class":188,"line":18316},[186,85422,63188],{"class":206},[186,85424,210],{"class":202},[186,85426,666],{"class":206},[186,85428,804],{"class":669},[186,85430,634],{"class":202},[186,85432,85433],{"class":188,"line":18330},[186,85434,3654],{"class":202},[186,85436,85437,85439,85441],{"class":188,"line":18342},[186,85438,53864],{"class":202},[186,85440,1524],{"class":523},[186,85442,552],{"class":202},[186,85444,85445,85447,85449],{"class":188,"line":18347},[186,85446,1470],{"class":202},[186,85448,52786],{"class":523},[186,85450,552],{"class":202},[186,85452,85453],{"class":188,"line":18360},[186,85454,3867],{"emptyLinePlaceholder":1551},[186,85456,85457,85459,85461],{"class":188,"line":18365},[186,85458,520],{"class":202},[186,85460,53247],{"class":523},[186,85462,552],{"class":202},[186,85464,85465,85467,85469,85471,85473,85475],{"class":188,"line":18370},[186,85466,53591],{"class":202},[186,85468,1450],{"class":523},[186,85470,1453],{"class":198},[186,85472,529],{"class":202},[186,85474,64046],{"class":532},[186,85476,552],{"class":202},[186,85478,85479,85481,85483],{"class":188,"line":18375},[186,85480,53864],{"class":202},[186,85482,1450],{"class":523},[186,85484,552],{"class":202},[186,85486,85487,85489,85491,85493,85495,85497],{"class":188,"line":18388},[186,85488,53591],{"class":202},[186,85490,1450],{"class":523},[186,85492,1453],{"class":198},[186,85494,529],{"class":202},[186,85496,64018],{"class":532},[186,85498,552],{"class":202},[186,85500,85501,85503,85505,85508,85510,85512,85514,85517,85519,85521,85523,85525],{"class":188,"line":18393},[186,85502,52793],{"class":202},[186,85504,1450],{"class":523},[186,85506,85507],{"class":202},">合计：\u003C",[186,85509,186],{"class":523},[186,85511,1453],{"class":198},[186,85513,529],{"class":202},[186,85515,85516],{"class":532},"\"amount\"",[186,85518,56755],{"class":202},[186,85520,186],{"class":523},[186,85522,56755],{"class":202},[186,85524,1450],{"class":523},[186,85526,552],{"class":202},[186,85528,85529,85531,85533],{"class":188,"line":34088},[186,85530,53864],{"class":202},[186,85532,1450],{"class":523},[186,85534,552],{"class":202},[186,85536,85537,85539,85541],{"class":188,"line":34094},[186,85538,53591],{"class":202},[186,85540,53260],{"class":523},[186,85542,552],{"class":202},[186,85544,85545,85547,85549,85551],{"class":188,"line":34100},[186,85546,12684],{"class":669},[186,85548,80810],{"class":206},[186,85550,15027],{"class":669},[186,85552,56888],{"class":202},[186,85554,85555],{"class":188,"line":34106},[186,85556,80819],{"class":202},[186,85558,85559,85561,85563],{"class":188,"line":34112},[186,85560,80824],{"class":202},[186,85562,80827],{"class":532},[186,85564,32921],{"class":202},[186,85566,85567,85569,85571],{"class":188,"line":34123},[186,85568,80834],{"class":202},[186,85570,80837],{"class":532},[186,85572,32921],{"class":202},[186,85574,85575,85577,85580],{"class":188,"line":34129},[186,85576,80844],{"class":202},[186,85578,85579],{"class":206},"289.9",[186,85581,32921],{"class":202},[186,85583,85584,85586,85588],{"class":188,"line":34149},[186,85585,80854],{"class":202},[186,85587,80857],{"class":532},[186,85589,32921],{"class":202},[186,85591,85592,85595,85597],{"class":188,"line":34155},[186,85593,85594],{"class":202},"        count: ",[186,85596,1697],{"class":206},[186,85598,32921],{"class":202},[186,85600,85601,85604,85607],{"class":188,"line":34166},[186,85602,85603],{"class":202},"        spec: { color: ",[186,85605,85606],{"class":532},"'白色'",[186,85608,57045],{"class":202},[186,85610,85611],{"class":188,"line":34172},[186,85612,79325],{"class":202},[186,85614,85615],{"class":188,"line":34178},[186,85616,80819],{"class":202},[186,85618,85619,85621,85623],{"class":188,"line":34184},[186,85620,80824],{"class":202},[186,85622,80918],{"class":532},[186,85624,32921],{"class":202},[186,85626,85627,85629,85631],{"class":188,"line":34190},[186,85628,80834],{"class":202},[186,85630,80927],{"class":532},[186,85632,32921],{"class":202},[186,85634,85635,85637,85640],{"class":188,"line":34196},[186,85636,80844],{"class":202},[186,85638,85639],{"class":206},"109.8",[186,85641,32921],{"class":202},[186,85643,85644,85646,85648],{"class":188,"line":34202},[186,85645,80854],{"class":202},[186,85647,80945],{"class":532},[186,85649,32921],{"class":202},[186,85651,85652,85654,85656],{"class":188,"line":34208},[186,85653,85594],{"class":202},[186,85655,1691],{"class":206},[186,85657,32921],{"class":202},[186,85659,85660,85663,85665,85667,85669],{"class":188,"line":34228},[186,85661,85662],{"class":202},"        spec: { size: ",[186,85664,83335],{"class":532},[186,85666,56905],{"class":202},[186,85668,83340],{"class":532},[186,85670,57045],{"class":202},[186,85672,85673],{"class":188,"line":34234},[186,85674,79325],{"class":202},[186,85676,85677],{"class":188,"line":34250},[186,85678,80819],{"class":202},[186,85680,85681,85683,85685],{"class":188,"line":34256},[186,85682,80824],{"class":202},[186,85684,80962],{"class":532},[186,85686,32921],{"class":202},[186,85688,85689,85691,85693],{"class":188,"line":34270},[186,85690,80834],{"class":202},[186,85692,80971],{"class":532},[186,85694,32921],{"class":202},[186,85696,85697,85699,85702],{"class":188,"line":34276},[186,85698,80844],{"class":202},[186,85700,85701],{"class":206},"488",[186,85703,32921],{"class":202},[186,85705,85706,85708,85710],{"class":188,"line":34291},[186,85707,80854],{"class":202},[186,85709,80989],{"class":532},[186,85711,32921],{"class":202},[186,85713,85714,85716,85718],{"class":188,"line":34297},[186,85715,85594],{"class":202},[186,85717,1829],{"class":206},[186,85719,32921],{"class":202},[186,85721,85722,85724,85727,85730,85733],{"class":188,"line":34306},[186,85723,85603],{"class":202},[186,85725,85726],{"class":532},"'青色'",[186,85728,85729],{"class":202},", sum: ",[186,85731,85732],{"class":532},"'一大四小'",[186,85734,57045],{"class":202},[186,85736,85737],{"class":188,"line":34312},[186,85738,79325],{"class":202},[186,85740,85741],{"class":188,"line":34321},[186,85742,80819],{"class":202},[186,85744,85745,85747,85749],{"class":188,"line":34327},[186,85746,80824],{"class":202},[186,85748,81006],{"class":532},[186,85750,32921],{"class":202},[186,85752,85753,85755,85757],{"class":188,"line":34333},[186,85754,80834],{"class":202},[186,85756,81015],{"class":532},[186,85758,32921],{"class":202},[186,85760,85761,85763,85766],{"class":188,"line":34342},[186,85762,80844],{"class":202},[186,85764,85765],{"class":206},"139",[186,85767,32921],{"class":202},[186,85769,85770,85772,85774],{"class":188,"line":34348},[186,85771,80854],{"class":202},[186,85773,81033],{"class":532},[186,85775,32921],{"class":202},[186,85777,85778,85780,85782],{"class":188,"line":34359},[186,85779,85594],{"class":202},[186,85781,1829],{"class":206},[186,85783,32921],{"class":202},[186,85785,85786,85788,85791,85793,85796],{"class":188,"line":34365},[186,85787,85662],{"class":202},[186,85789,85790],{"class":532},"'小号'",[186,85792,56905],{"class":202},[186,85794,85795],{"class":532},"'紫色'",[186,85797,56911],{"class":202},[186,85799,85800,85803],{"class":188,"line":34384},[186,85801,85802],{"class":202},"        gift: ",[186,85804,85805],{"class":532},"'50g茶叶,清洗球'\n",[186,85807,85808],{"class":188,"line":34390},[186,85809,53845],{"class":202},[186,85811,85812],{"class":188,"line":34401},[186,85813,54556],{"class":202},[186,85815,85816],{"class":188,"line":34407},[186,85817,85818],{"class":192},"    \u002F\u002F  1.根据数据渲染页面\n",[186,85820,85821,85823,85825,85827,85829,85831,85833,85835,85837,85839,85841,85843],{"class":188,"line":34427},[186,85822,53854],{"class":202},[186,85824,55844],{"class":198},[186,85826,832],{"class":202},[186,85828,81333],{"class":532},[186,85830,75682],{"class":202},[186,85832,529],{"class":669},[186,85834,81480],{"class":202},[186,85836,75477],{"class":198},[186,85838,832],{"class":202},[186,85840,81228],{"class":835},[186,85842,81231],{"class":669},[186,85844,622],{"class":202},[186,85846,85847],{"class":188,"line":34443},[186,85848,85849],{"class":192},"      \u002F\u002F 对象解构\n",[186,85851,85852,85854,85856,85858,85860,85862,85864,85867,85869,85871,85873,85876,85878,85881,85883,85885],{"class":188,"line":34449},[186,85853,59669],{"class":669},[186,85855,203],{"class":202},[186,85857,81252],{"class":206},[186,85859,13898],{"class":202},[186,85861,81242],{"class":206},[186,85863,13898],{"class":202},[186,85865,85866],{"class":206},"count",[186,85868,13898],{"class":202},[186,85870,81247],{"class":206},[186,85872,13898],{"class":202},[186,85874,85875],{"class":206},"spec",[186,85877,13898],{"class":202},[186,85879,85880],{"class":206},"gift",[186,85882,81255],{"class":202},[186,85884,529],{"class":669},[186,85886,81260],{"class":202},[186,85888,85889],{"class":188,"line":34463},[186,85890,85891],{"class":192},"      \u002F\u002F 规格文字模块处理\n",[186,85893,85894,85896,85899,85901,85903,85905,85907,85909,85911,85913],{"class":188,"line":34469},[186,85895,59669],{"class":669},[186,85897,85898],{"class":206}," text",[186,85900,15027],{"class":669},[186,85902,83370],{"class":202},[186,85904,83373],{"class":198},[186,85906,83376],{"class":202},[186,85908,75656],{"class":198},[186,85910,832],{"class":202},[186,85912,83383],{"class":532},[186,85914,1629],{"class":202},[186,85916,85917],{"class":188,"line":34475},[186,85918,85919],{"class":192},"      \u002F\u002F 处理赠品模块\n",[186,85921,85922,85924,85926,85928,85931,85933,85935,85937,85939,85942,85944,85946,85948,85950,85952,85955,85957,85960,85962,85964,85966,85968,85970,85972],{"class":188,"line":34486},[186,85923,59669],{"class":669},[186,85925,75352],{"class":206},[186,85927,15027],{"class":669},[186,85929,85930],{"class":202}," gift ",[186,85932,2593],{"class":669},[186,85934,84544],{"class":202},[186,85936,84547],{"class":198},[186,85938,832],{"class":202},[186,85940,85941],{"class":532},"','",[186,85943,32281],{"class":202},[186,85945,75477],{"class":198},[186,85947,832],{"class":202},[186,85949,81228],{"class":835},[186,85951,81231],{"class":669},[186,85953,85954],{"class":532}," `\u003Cspan class=\"tag\">【赠品】${",[186,85956,81228],{"class":202},[186,85958,85959],{"class":532},"}\u003C\u002Fspan>`",[186,85961,32281],{"class":202},[186,85963,75656],{"class":198},[186,85965,832],{"class":202},[186,85967,75661],{"class":532},[186,85969,839],{"class":202},[186,85971,2467],{"class":669},[186,85973,71541],{"class":532},[186,85975,85976],{"class":188,"line":34492},[186,85977,85978],{"class":192},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[186,85980,85981,85983,85986,85988,85991,85993,85995,85997,86000,86002,86004,86006,86009,86011,86013],{"class":188,"line":34498},[186,85982,59669],{"class":669},[186,85984,85985],{"class":206}," subtotal",[186,85987,15027],{"class":669},[186,85989,85990],{"class":202}," ((price ",[186,85992,2065],{"class":669},[186,85994,7217],{"class":206},[186,85996,7981],{"class":669},[186,85998,85999],{"class":202}," count) ",[186,86001,2194],{"class":669},[186,86003,7217],{"class":206},[186,86005,32281],{"class":202},[186,86007,86008],{"class":198},"toFixed",[186,86010,832],{"class":202},[186,86012,1697],{"class":206},[186,86014,1629],{"class":202},[186,86016,86017],{"class":188,"line":34508},[186,86018,3867],{"emptyLinePlaceholder":1551},[186,86020,86021,86023],{"class":188,"line":34514},[186,86022,75415],{"class":669},[186,86024,71605],{"class":532},[186,86026,86027],{"class":188,"line":34525},[186,86028,86029],{"class":532},"        \u003Cdiv class=\"item\">\n",[186,86031,86032,86035,86037],{"class":188,"line":34531},[186,86033,86034],{"class":532},"          \u003Cimg src=\"${",[186,86036,81252],{"class":202},[186,86038,81284],{"class":532},[186,86040,86041,86044,86046,86049,86051],{"class":188,"line":34541},[186,86042,86043],{"class":532},"          \u003Cp class=\"name\">${",[186,86045,81242],{"class":202},[186,86047,86048],{"class":532},"}${",[186,86050,2775],{"class":202},[186,86052,81294],{"class":532},[186,86054,86055,86058,86060],{"class":188,"line":34546},[186,86056,86057],{"class":532},"          \u003Cp class=\"spec\">${",[186,86059,753],{"class":202},[186,86061,81294],{"class":532},[186,86063,86064,86067,86069,86071,86073,86075,86077,86079],{"class":188,"line":34552},[186,86065,86066],{"class":532},"          \u003Cp class=\"price\">${",[186,86068,81247],{"class":202},[186,86070,2168],{"class":532},[186,86072,86008],{"class":198},[186,86074,832],{"class":532},[186,86076,1697],{"class":206},[186,86078,2039],{"class":532},[186,86080,81294],{"class":532},[186,86082,86083,86086,86088],{"class":188,"line":34601},[186,86084,86085],{"class":532},"          \u003Cp class=\"count\">x${",[186,86087,85866],{"class":202},[186,86089,81294],{"class":532},[186,86091,86092,86095,86098],{"class":188,"line":34648},[186,86093,86094],{"class":532},"          \u003Cp class=\"sub-total\">${",[186,86096,86097],{"class":202},"subtotal",[186,86099,81294],{"class":532},[186,86101,86102],{"class":188,"line":34653},[186,86103,86104],{"class":532},"        \u003C\u002Fdiv> \n",[186,86106,86107],{"class":188,"line":34659},[186,86108,86109],{"class":532},"             `\n",[186,86111,86112,86115,86117,86119,86121],{"class":188,"line":34678},[186,86113,86114],{"class":202},"    }).",[186,86116,75656],{"class":198},[186,86118,832],{"class":202},[186,86120,75661],{"class":532},[186,86122,1629],{"class":202},[186,86124,86125],{"class":188,"line":34684},[186,86126,86127],{"class":192},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[186,86129,86130,86132,86134,86136,86138,86141,86143,86146,86148,86150,86152,86155,86158,86160,86163,86165,86167,86169,86172,86174,86176,86178,86180],{"class":188,"line":34704},[186,86131,12684],{"class":669},[186,86133,64223],{"class":206},[186,86135,15027],{"class":669},[186,86137,81480],{"class":202},[186,86139,86140],{"class":198},"reduce",[186,86142,3843],{"class":202},[186,86144,86145],{"class":835},"prev",[186,86147,13898],{"class":202},[186,86149,81228],{"class":835},[186,86151,839],{"class":202},[186,86153,86154],{"class":669},"=>",[186,86156,86157],{"class":202}," prev ",[186,86159,2091],{"class":669},[186,86161,86162],{"class":202}," (item.price ",[186,86164,2065],{"class":669},[186,86166,7217],{"class":206},[186,86168,7981],{"class":669},[186,86170,86171],{"class":202}," item.count) ",[186,86173,2194],{"class":669},[186,86175,7217],{"class":206},[186,86177,13898],{"class":202},[186,86179,1803],{"class":206},[186,86181,1629],{"class":202},[186,86183,86184,86186,86188,86190,86193,86195,86197,86200,86202,86204,86206],{"class":188,"line":34710},[186,86185,53854],{"class":202},[186,86187,55844],{"class":198},[186,86189,832],{"class":202},[186,86191,86192],{"class":532},"'.amount'",[186,86194,75682],{"class":202},[186,86196,529],{"class":669},[186,86198,86199],{"class":202}," total.",[186,86201,86008],{"class":198},[186,86203,832],{"class":202},[186,86205,1697],{"class":206},[186,86207,1629],{"class":202},[186,86209,86210,86212,86214],{"class":188,"line":34716},[186,86211,53864],{"class":202},[186,86213,53260],{"class":523},[186,86215,552],{"class":202},[186,86217,86218,86220,86222],{"class":188,"line":34726},[186,86219,1470],{"class":202},[186,86221,53247],{"class":523},[186,86223,552],{"class":202},[186,86225,86226],{"class":188,"line":34731},[186,86227,3867],{"emptyLinePlaceholder":1551},[186,86229,86230,86232,86234],{"class":188,"line":34737},[186,86231,1470],{"class":202},[186,86233,52089],{"class":523},[186,86235,552],{"class":202},[14,86237,86239],{"id":86238},"_411-编程思想","4.11 编程思想",[29,86241,86243],{"id":86242},"_4111-面向过程介绍","4.11.1 面向过程介绍",[169,86245,86246,86249],{},[54,86247,86248],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[169,86251,86252],{},"调用就可以了",[169,86254,86255],{},[164,86256],{"alt":181,"src":86257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[29,86259,86261],{"id":86260},"_4112-面向对象","4.11.2 面向对象",[169,86263,86264],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[169,86266,86267],{},[164,86268],{"alt":181,"src":86269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[169,86271,86272],{},"面向对象的特性：",[19,86274,86275,86278,86281],{},[22,86276,86277],{},"封装性",[22,86279,86280],{},"继承性",[22,86282,86283],{},"多态性",[29,86285,86287],{"id":86286},"_4113-两者比较","4.11.3 两者比较",[169,86289,86290],{},[164,86291],{"alt":181,"src":86292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86294,86296],{"id":86295},"_412-构造函数回顾","4.12 构造函数回顾",[169,86298,86299],{},[164,86300],{"alt":181,"src":86301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[169,86303,86304],{},[164,86305],{"alt":181,"src":86306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[169,86308,86309],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[169,86311,86312],{},[164,86313],{"alt":181,"src":86314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86316,86318],{"id":86317},"_413-原型","4.13 原型",[29,86320,86322],{"id":86321},"_4131-原型对象的认识","4.13.1 原型对象的认识",[169,86324,86325],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[169,86327,86328],{},[164,86329],{"alt":181,"src":86330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[169,86332,86333],{},[164,86334],{"alt":181,"src":86335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[169,86337,86338],{},"原型是构造函数的属性，它也是一个对象",[169,86340,86341],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[169,86343,86344],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[176,86346,86348],{"className":54514,"code":86347,"language":54516,"meta":181,"style":181},"\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",[183,86349,86350,86358,86363,86371,86376,86381,86386,86391,86396,86400,86404,86408,86413,86418,86422,86427,86432,86437,86442,86447,86451,86459],{"__ignoreMap":181},[186,86351,86352,86354,86356],{"class":188,"line":189},[186,86353,520],{"class":202},[186,86355,53247],{"class":523},[186,86357,552],{"class":202},[186,86359,86360],{"class":188,"line":49},[186,86361,86362],{"class":192},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[186,86364,86365,86367,86369],{"class":188,"line":219},[186,86366,53591],{"class":202},[186,86368,53260],{"class":523},[186,86370,552],{"class":202},[186,86372,86373],{"class":188,"line":225},[186,86374,86375],{"class":202},"    function Star(uname, age) {\n",[186,86377,86378],{"class":188,"line":242},[186,86379,86380],{"class":202},"      this.uname = uname,\n",[186,86382,86383],{"class":188,"line":248},[186,86384,86385],{"class":202},"        this.age = age\n",[186,86387,86388],{"class":188,"line":265},[186,86389,86390],{"class":202},"      \u002F\u002F this.sing = function () {\n",[186,86392,86393],{"class":188,"line":271},[186,86394,86395],{"class":202},"      \u002F\u002F   console.log('唱歌')\n",[186,86397,86398],{"class":188,"line":288},[186,86399,3867],{"emptyLinePlaceholder":1551},[186,86401,86402],{"class":188,"line":294},[186,86403,61478],{"class":202},[186,86405,86406],{"class":188,"line":1212},[186,86407,3654],{"class":202},[186,86409,86410],{"class":188,"line":1223},[186,86411,86412],{"class":202},"    Star.prototype.sing = function () {\n",[186,86414,86415],{"class":188,"line":1236},[186,86416,86417],{"class":202},"      console.log('唱歌')\n",[186,86419,86420],{"class":188,"line":3096},[186,86421,3654],{"class":202},[186,86423,86424],{"class":188,"line":3110},[186,86425,86426],{"class":202},"    \u002F\u002F console.dir(Star.prototype)\n",[186,86428,86429],{"class":188,"line":3115},[186,86430,86431],{"class":202},"    const pink = new Star('pink', 18)\n",[186,86433,86434],{"class":188,"line":3121},[186,86435,86436],{"class":202},"    const red = new Star('red', 20)\n",[186,86438,86439],{"class":188,"line":3142},[186,86440,86441],{"class":202},"    pink.sing()\n",[186,86443,86444],{"class":188,"line":3147},[186,86445,86446],{"class":202},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[186,86448,86449],{"class":188,"line":3161},[186,86450,3867],{"emptyLinePlaceholder":1551},[186,86452,86453,86455,86457],{"class":188,"line":3166},[186,86454,53864],{"class":202},[186,86456,53260],{"class":523},[186,86458,552],{"class":202},[186,86460,86461,86463,86465],{"class":188,"line":3195},[186,86462,1470],{"class":202},[186,86464,53247],{"class":523},[186,86466,552],{"class":202},[169,86468,86469],{},[164,86470],{"alt":181,"src":86471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[176,86473,86475],{"className":54514,"code":86474,"language":54516,"meta":181,"style":181},"\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",[183,86476,86477,86485,86493,86498,86503,86508,86513,86517,86522,86527,86532,86536,86541,86545,86549,86554,86558,86566],{"__ignoreMap":181},[186,86478,86479,86481,86483],{"class":188,"line":189},[186,86480,520],{"class":202},[186,86482,53247],{"class":523},[186,86484,552],{"class":202},[186,86486,86487,86489,86491],{"class":188,"line":49},[186,86488,53591],{"class":202},[186,86490,53260],{"class":523},[186,86492,552],{"class":202},[186,86494,86495],{"class":188,"line":219},[186,86496,86497],{"class":202},"    let that\n",[186,86499,86500],{"class":188,"line":225},[186,86501,86502],{"class":202},"    function Star(uname) {\n",[186,86504,86505],{"class":188,"line":242},[186,86506,86507],{"class":202},"      this.uname = uname\n",[186,86509,86510],{"class":188,"line":248},[186,86511,86512],{"class":202},"      that = this\n",[186,86514,86515],{"class":188,"line":265},[186,86516,3654],{"class":202},[186,86518,86519],{"class":188,"line":271},[186,86520,86521],{"class":202},"    \u002F\u002F 实例对象是 ldh\n",[186,86523,86524],{"class":188,"line":288},[186,86525,86526],{"class":202},"    const ldh = new Star('刘德华')\n",[186,86528,86529],{"class":188,"line":294},[186,86530,86531],{"class":202},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[186,86533,86534],{"class":188,"line":1212},[186,86535,3867],{"emptyLinePlaceholder":1551},[186,86537,86538],{"class":188,"line":1223},[186,86539,86540],{"class":202},"    Star.sing = function () {\n",[186,86542,86543],{"class":188,"line":1236},[186,86544,86417],{"class":202},[186,86546,86547],{"class":188,"line":3096},[186,86548,3654],{"class":202},[186,86550,86551],{"class":188,"line":3110},[186,86552,86553],{"class":202},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[186,86555,86556],{"class":188,"line":3115},[186,86557,3867],{"emptyLinePlaceholder":1551},[186,86559,86560,86562,86564],{"class":188,"line":3121},[186,86561,53864],{"class":202},[186,86563,53260],{"class":523},[186,86565,552],{"class":202},[186,86567,86568,86570,86572],{"class":188,"line":3142},[186,86569,1470],{"class":202},[186,86571,53247],{"class":523},[186,86573,552],{"class":202},[169,86575,86576],{},"构造函数的this指向的是实例对象；",[169,86578,86579],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[29,86581,86583],{"id":86582},"_4132-数组扩展方法","4.13.2 数组扩展方法",[169,86585,86586],{},[164,86587],{"alt":181,"src":86588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[176,86590,86592],{"className":54514,"code":86591,"language":54516,"meta":181,"style":181},"\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",[183,86593,86594,86602,86610,86615,86620,86625,86630,86635,86640,86645,86650,86655,86660,86664,86669,86674,86679,86684,86688,86693,86698,86703,86708,86712,86717,86722,86727,86732,86736,86741,86745,86753],{"__ignoreMap":181},[186,86595,86596,86598,86600],{"class":188,"line":189},[186,86597,520],{"class":202},[186,86599,53247],{"class":523},[186,86601,552],{"class":202},[186,86603,86604,86606,86608],{"class":188,"line":49},[186,86605,53591],{"class":202},[186,86607,53260],{"class":523},[186,86609,552],{"class":202},[186,86611,86612],{"class":188,"line":219},[186,86613,86614],{"class":202},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[186,86616,86617],{"class":188,"line":225},[186,86618,86619],{"class":202},"    const arr = [1, 2, 3]\n",[186,86621,86622],{"class":188,"line":242},[186,86623,86624],{"class":202},"    \u002F\u002F 自己定义数组的扩展方法\n",[186,86626,86627],{"class":188,"line":248},[186,86628,86629],{"class":202},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[186,86631,86632],{"class":188,"line":265},[186,86633,86634],{"class":202},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[186,86636,86637],{"class":188,"line":271},[186,86638,86639],{"class":202},"    \u002F\u002F ①.最大值\n",[186,86641,86642],{"class":188,"line":288},[186,86643,86644],{"class":202},"    Array.prototype.max = function () {\n",[186,86646,86647],{"class":188,"line":294},[186,86648,86649],{"class":202},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[186,86651,86652],{"class":188,"line":1212},[186,86653,86654],{"class":202},"      return Math.max(...this)\n",[186,86656,86657],{"class":188,"line":1223},[186,86658,86659],{"class":202},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[186,86661,86662],{"class":188,"line":1236},[186,86663,3654],{"class":202},[186,86665,86666],{"class":188,"line":3096},[186,86667,86668],{"class":202},"    console.log(arr.max())\n",[186,86670,86671],{"class":188,"line":3110},[186,86672,86673],{"class":202},"    \u002F\u002F ②最小值\n",[186,86675,86676],{"class":188,"line":3115},[186,86677,86678],{"class":202},"    Array.prototype.min = function () {\n",[186,86680,86681],{"class":188,"line":3121},[186,86682,86683],{"class":202},"      return Math.min(...this)\n",[186,86685,86686],{"class":188,"line":3142},[186,86687,3654],{"class":202},[186,86689,86690],{"class":188,"line":3147},[186,86691,86692],{"class":202},"    console.log(arr.min())\n",[186,86694,86695],{"class":188,"line":3161},[186,86696,86697],{"class":202},"    \u002F\u002F③求和\n",[186,86699,86700],{"class":188,"line":3166},[186,86701,86702],{"class":202},"    Array.prototype.sum = function () {\n",[186,86704,86705],{"class":188,"line":3195},[186,86706,86707],{"class":202},"      return this.reduce((prev, current) => prev + current, 0)\n",[186,86709,86710],{"class":188,"line":3200},[186,86711,3654],{"class":202},[186,86713,86714],{"class":188,"line":3217},[186,86715,86716],{"class":202},"    console.log(arr.sum())\n",[186,86718,86719],{"class":188,"line":3222},[186,86720,86721],{"class":202},"    \u002F\u002F ③排序\n",[186,86723,86724],{"class":188,"line":3227},[186,86725,86726],{"class":202},"    Array.prototype.rever = function () {\n",[186,86728,86729],{"class":188,"line":3232},[186,86730,86731],{"class":202},"      return this.reverse()\n",[186,86733,86734],{"class":188,"line":3246},[186,86735,3654],{"class":202},[186,86737,86738],{"class":188,"line":3251},[186,86739,86740],{"class":202},"    console.log(arr.rever())\n",[186,86742,86743],{"class":188,"line":4044},[186,86744,3867],{"emptyLinePlaceholder":1551},[186,86746,86747,86749,86751],{"class":188,"line":4058},[186,86748,53864],{"class":202},[186,86750,53260],{"class":523},[186,86752,552],{"class":202},[186,86754,86755,86757,86759],{"class":188,"line":4066},[186,86756,1470],{"class":202},[186,86758,53247],{"class":523},[186,86760,552],{"class":202},[169,86762,86763],{},[164,86764],{"alt":181,"src":86765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[29,86767,86769],{"id":86768},"_4133-constructor-属性","4.13.3 constructor 属性",[169,86771,86772],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[169,86774,86775],{},[164,86776],{"alt":181,"src":86777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[176,86779,86781],{"className":54514,"code":86780,"language":54516,"meta":181,"style":181},"\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",[183,86782,86783,86791,86799,86804,86809,86813,86818,86823,86828,86836],{"__ignoreMap":181},[186,86784,86785,86787,86789],{"class":188,"line":189},[186,86786,520],{"class":202},[186,86788,53247],{"class":523},[186,86790,552],{"class":202},[186,86792,86793,86795,86797],{"class":188,"line":49},[186,86794,53591],{"class":202},[186,86796,53260],{"class":523},[186,86798,552],{"class":202},[186,86800,86801],{"class":188,"line":219},[186,86802,86803],{"class":202},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[186,86805,86806],{"class":188,"line":225},[186,86807,86808],{"class":202},"    function Star() {\n",[186,86810,86811],{"class":188,"line":242},[186,86812,3654],{"class":202},[186,86814,86815],{"class":188,"line":248},[186,86816,86817],{"class":202},"    const ldh = new Star()\n",[186,86819,86820],{"class":188,"line":265},[186,86821,86822],{"class":202},"    console.log(Star.prototype)\n",[186,86824,86825],{"class":188,"line":271},[186,86826,86827],{"class":202},"    console.log(Star.prototype.constructor === Star)\n",[186,86829,86830,86832,86834],{"class":188,"line":288},[186,86831,53864],{"class":202},[186,86833,53260],{"class":523},[186,86835,552],{"class":202},[186,86837,86838,86840,86842],{"class":188,"line":294},[186,86839,1470],{"class":202},[186,86841,53247],{"class":523},[186,86843,552],{"class":202},[169,86845,86846],{},[164,86847],{"alt":181,"src":86848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[169,86850,86851],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[176,86853,86855],{"className":54514,"code":86854,"language":54516,"meta":181,"style":181},"  \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",[183,86856,86857,86865,86869,86873,86877,86882,86887,86892,86896,86901,86906,86911,86916,86921,86926,86930,86934,86939,86944,86949,86953,86958,86963,86967,86971,86975],{"__ignoreMap":181},[186,86858,86859,86861,86863],{"class":188,"line":189},[186,86860,53591],{"class":202},[186,86862,53260],{"class":523},[186,86864,552],{"class":202},[186,86866,86867],{"class":188,"line":49},[186,86868,86803],{"class":202},[186,86870,86871],{"class":188,"line":219},[186,86872,86808],{"class":202},[186,86874,86875],{"class":188,"line":225},[186,86876,3654],{"class":202},[186,86878,86879],{"class":188,"line":242},[186,86880,86881],{"class":202},"    \u002F\u002F const ldh = new Star()\n",[186,86883,86884],{"class":188,"line":248},[186,86885,86886],{"class":202},"    \u002F\u002F console.log(Star.prototype)\n",[186,86888,86889],{"class":188,"line":265},[186,86890,86891],{"class":202},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[186,86893,86894],{"class":188,"line":271},[186,86895,3867],{"emptyLinePlaceholder":1551},[186,86897,86898],{"class":188,"line":288},[186,86899,86900],{"class":202},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[186,86902,86903],{"class":188,"line":294},[186,86904,86905],{"class":202},"    \u002F\u002F Star.prototype.sing = function () {\n",[186,86907,86908],{"class":188,"line":1212},[186,86909,86910],{"class":202},"    \u002F\u002F   console.log('唱歌')\n",[186,86912,86913],{"class":188,"line":1223},[186,86914,86915],{"class":202},"    \u002F\u002F }\n",[186,86917,86918],{"class":188,"line":1236},[186,86919,86920],{"class":202},"    \u002F\u002F Star.prototype.dance = function () {\n",[186,86922,86923],{"class":188,"line":3096},[186,86924,86925],{"class":202},"    \u002F\u002F   console.log('跳舞')\n",[186,86927,86928],{"class":188,"line":3110},[186,86929,86915],{"class":202},[186,86931,86932],{"class":188,"line":3115},[186,86933,86822],{"class":202},[186,86935,86936],{"class":188,"line":3121},[186,86937,86938],{"class":202},"    Star.prototype = {\n",[186,86940,86941],{"class":188,"line":3142},[186,86942,86943],{"class":202},"      sing: function () {\n",[186,86945,86946],{"class":188,"line":3147},[186,86947,86948],{"class":202},"        console.log('唱歌')\n",[186,86950,86951],{"class":188,"line":3161},[186,86952,79325],{"class":202},[186,86954,86955],{"class":188,"line":3166},[186,86956,86957],{"class":202},"      dance: function () {\n",[186,86959,86960],{"class":188,"line":3195},[186,86961,86962],{"class":202},"        console.log('跳舞')\n",[186,86964,86965],{"class":188,"line":3200},[186,86966,53845],{"class":202},[186,86968,86969],{"class":188,"line":3217},[186,86970,3654],{"class":202},[186,86972,86973],{"class":188,"line":3222},[186,86974,86822],{"class":202},[186,86976,86977,86979,86981],{"class":188,"line":3227},[186,86978,53864],{"class":202},[186,86980,53260],{"class":523},[186,86982,552],{"class":202},[169,86984,86985],{},"进行输出结果后会发现：",[169,86987,86988],{},[164,86989],{"alt":181,"src":86990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[169,86992,86993],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[169,86995,86996],{},"所以，要重新指回创造这个原型对象的构造函数",[176,86998,87000],{"className":72647,"code":86999,"language":72649,"meta":181,"style":181},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[183,87001,87002,87016,87021,87026,87037,87050,87055,87066,87080,87084],{"__ignoreMap":181},[186,87003,87004,87007,87009,87012,87014],{"class":188,"line":189},[186,87005,87006],{"class":206},"Star",[186,87008,2168],{"class":202},[186,87010,87011],{"class":206},"prototype",[186,87013,15027],{"class":669},[186,87015,622],{"class":202},[186,87017,87018],{"class":188,"line":49},[186,87019,87020],{"class":192},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[186,87022,87023],{"class":188,"line":219},[186,87024,87025],{"class":202},"  constructor: Star,\n",[186,87027,87028,87031,87033,87035],{"class":188,"line":225},[186,87029,87030],{"class":198},"  sing",[186,87032,210],{"class":202},[186,87034,55894],{"class":669},[186,87036,55897],{"class":202},[186,87038,87039,87041,87043,87045,87048],{"class":188,"line":242},[186,87040,75186],{"class":202},[186,87042,59688],{"class":198},[186,87044,832],{"class":202},[186,87046,87047],{"class":532},"'唱歌'",[186,87049,1629],{"class":202},[186,87051,87052],{"class":188,"line":248},[186,87053,87054],{"class":202},"   },\n",[186,87056,87057,87060,87062,87064],{"class":188,"line":265},[186,87058,87059],{"class":198},"   dance",[186,87061,210],{"class":202},[186,87063,55894],{"class":669},[186,87065,55897],{"class":202},[186,87067,87068,87071,87073,87075,87078],{"class":188,"line":271},[186,87069,87070],{"class":202},"     console.",[186,87072,59688],{"class":198},[186,87074,832],{"class":202},[186,87076,87077],{"class":532},"'跳舞'",[186,87079,1629],{"class":202},[186,87081,87082],{"class":188,"line":288},[186,87083,5775],{"class":202},[186,87085,87086],{"class":188,"line":294},[186,87087,639],{"class":202},[169,87089,87090],{},[164,87091],{"alt":181,"src":87092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[169,87094,87095],{},"总结1：",[169,87097,87098],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[169,87100,87101],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[169,87103,87104],{},"constructor指的是他的来源",[169,87106,87107],{},[164,87108],{"alt":181,"src":87109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[169,87111,87112],{},[164,87113],{"alt":181,"src":87114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[169,87116,87117],{},"总结2：",[169,87119,87120],{},[164,87121],{"alt":181,"src":87122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[169,87124,87125],{},[164,87126],{"alt":181,"src":87127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[169,87129,87130],{},[164,87131],{"alt":181,"src":87132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[29,87134,87136],{"id":87135},"_4134-对象原型","4.13.4 对象原型",[169,87138,87139],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[169,87141,87142],{},"对象原型就是__proto__这个属性",[169,87144,87145],{},[164,87146],{"alt":181,"src":87147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[169,87149,87150],{},[164,87151],{"alt":181,"src":87152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[169,87154,87155],{},[164,87156],{"alt":181,"src":87157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[169,87159,87160],{},[164,87161],{"alt":181,"src":87162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[176,87164,87166],{"className":54514,"code":87165,"language":54516,"meta":181,"style":181},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[183,87167,87168,87176,87184,87188,87192,87196,87201,87209],{"__ignoreMap":181},[186,87169,87170,87172,87174],{"class":188,"line":189},[186,87171,520],{"class":202},[186,87173,53247],{"class":523},[186,87175,552],{"class":202},[186,87177,87178,87180,87182],{"class":188,"line":49},[186,87179,53591],{"class":202},[186,87181,53260],{"class":523},[186,87183,552],{"class":202},[186,87185,87186],{"class":188,"line":219},[186,87187,86808],{"class":202},[186,87189,87190],{"class":188,"line":225},[186,87191,3654],{"class":202},[186,87193,87194],{"class":188,"line":242},[186,87195,86817],{"class":202},[186,87197,87198],{"class":188,"line":248},[186,87199,87200],{"class":202},"    console.log(ldh)\n",[186,87202,87203,87205,87207],{"class":188,"line":265},[186,87204,53864],{"class":202},[186,87206,53260],{"class":523},[186,87208,552],{"class":202},[186,87210,87211,87213,87215],{"class":188,"line":271},[186,87212,1470],{"class":202},[186,87214,53247],{"class":523},[186,87216,552],{"class":202},[169,87218,87219],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[169,87221,87222],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[169,87224,87225],{},[164,87226],{"alt":181,"src":87227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[169,87229,87230],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[169,87232,87233],{},"对象原型指向原型对象",[169,87235,87236],{},[164,87237],{"alt":181,"src":87238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[169,87240,87241],{},[164,87242],{"alt":181,"src":87243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[169,87245,87246],{},[164,87247],{"alt":181,"src":87248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[29,87250,87252],{"id":87251},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[169,87254,87255],{},[164,87256],{"alt":181,"src":87257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[34,87259,87260,87263,87266,87269],{},[22,87261,87262],{},"构造函数通过new的形式实例化得到实例对象",[22,87264,87265],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[22,87267,87268],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[22,87270,87271],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[169,87273,87274],{},[164,87275],{"alt":181,"src":87276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[169,87278,87279],{},"题目梳理：",[169,87281,87282],{},[164,87283],{"alt":181,"src":87284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[29,87286,87288],{"id":87287},"_4136-原型继承","4.13.6 原型继承",[169,87290,87291],{},[164,87292],{"alt":181,"src":87293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[169,87295,87296],{},[164,87297],{"alt":181,"src":87298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[169,87300,87301],{},[164,87302],{"alt":181,"src":87303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[169,87305,87306],{},[164,87307],{"alt":181,"src":87308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[169,87310,87311],{},[164,87312],{"alt":181,"src":87313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[169,87315,87316],{},[164,87317],{"alt":181,"src":87318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[169,87320,87321],{},[164,87322],{"alt":181,"src":87323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[169,87325,87326],{},[164,87327],{"alt":181,"src":87328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[169,87330,87331],{},"回顾：构造函数每次new得到对象都是不同的",[29,87333,87335],{"id":87334},"_4137-原型链","4.13.7 原型链",[169,87337,87338],{},[164,87339],{"alt":181,"src":87340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[169,87342,87343],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[169,87345,87346],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[169,87348,87349],{},"大哥是Object",[169,87351,87352],{},[164,87353],{"alt":181,"src":87354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[169,87356,87357],{},[164,87358],{"alt":181,"src":87359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[169,87361,87362],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[169,87364,87365],{},"万物皆对象",[29,87367,87369],{"id":87368},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[169,87371,87372],{},"模态框",[169,87374,87375],{},"以后遇见这个效果直接使用这个就行",[169,87377,87378],{},[164,87379],{"alt":181,"src":87380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[169,87382,87383],{},[164,87384],{"alt":181,"src":87385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[169,87387,87388],{},[164,87389],{"alt":181,"src":87390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[169,87392,87393],{},[164,87394],{"alt":181,"src":87395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[169,87397,87398],{},"补充知识点：",[34,87400,87401],{},[22,87402,87403],{},"append()",[169,87405,87406],{},[164,87407],{"alt":181,"src":87408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[176,87410,87412],{"className":52087,"code":87411,"language":52089,"meta":181,"style":181},"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",[183,87413,87414,87419,87424,87429,87433,87437,87441,87446,87451,87456,87460],{"__ignoreMap":181},[186,87415,87416],{"class":188,"line":189},[186,87417,87418],{"class":202},"append(param1)\n",[186,87420,87421],{"class":188,"line":49},[186,87422,87423],{"class":202},"append(param1, param2)\n",[186,87425,87426],{"class":188,"line":219},[186,87427,87428],{"class":202},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[186,87430,87431],{"class":188,"line":225},[186,87432,3867],{"emptyLinePlaceholder":1551},[186,87434,87435],{"class":188,"line":242},[186,87436,3867],{"emptyLinePlaceholder":1551},[186,87438,87439],{"class":188,"line":248},[186,87440,3867],{"emptyLinePlaceholder":1551},[186,87442,87443],{"class":188,"line":265},[186,87444,87445],{"class":202},"let div = document.createElement(\"div\");\n",[186,87447,87448],{"class":188,"line":271},[186,87449,87450],{"class":202},"let p = document.createElement(\"p\");\n",[186,87452,87453],{"class":188,"line":288},[186,87454,87455],{"class":202},"div.append(p);\n",[186,87457,87458],{"class":188,"line":294},[186,87459,3867],{"emptyLinePlaceholder":1551},[186,87461,87462,87465,87467],{"class":188,"line":1212},[186,87463,87464],{"class":202},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[186,87466,169],{"class":523},[186,87468,87469],{"class":202},"> ]\n",[34,87471,87472],{"start":49},[22,87473,87474],{},"remove()",[169,87476,87477],{},"自己删自己",[169,87479,87480],{},[164,87481],{"alt":181,"src":87482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[176,87484,87486],{"className":52087,"code":87485,"language":52089,"meta":181,"style":181},"\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",[183,87487,87488,87498,87512,87516,87524,87538,87558,87570,87578,87585,87597,87610,87645,87657,87667,87679,87691,87703,87730,87740,87744,87748,87757,87769,87783,87793,87805,87809,87813,87823,87834,87844,87854,87867,87880,87890,87894,87898,87907,87917,87929,87933,87937,87946,87956,87966,87978,87982,87986,87996,88012,88023,88033,88043,88055,88067,88079,88083,88087,88100,88111,88115,88123,88131,88135,88143,88163,88183,88191,88196,88222,88227,88232,88251,88256,88268,88273,88284,88294,88304,88309,88314,88318,88323,88328,88333,88353,88358,88378,88383,88397,88402,88407,88412,88428,88432,88437,88466,88471,88476,88481,88492,88496,88500,88504,88509,88534,88539,88564,88569,88578,88582,88587,88612,88616,88641,88645,88654,88658,88663,88681,88691,88695,88703,88711,88715],{"__ignoreMap":181},[186,87489,87490,87492,87494,87496],{"class":188,"line":189},[186,87491,52751],{"class":202},[186,87493,52754],{"class":523},[186,87495,52757],{"class":198},[186,87497,552],{"class":202},[186,87499,87500,87502,87504,87506,87508,87510],{"class":188,"line":49},[186,87501,520],{"class":202},[186,87503,52089],{"class":523},[186,87505,52768],{"class":198},[186,87507,529],{"class":202},[186,87509,52773],{"class":532},[186,87511,552],{"class":202},[186,87513,87514],{"class":188,"line":219},[186,87515,3867],{"emptyLinePlaceholder":1551},[186,87517,87518,87520,87522],{"class":188,"line":225},[186,87519,520],{"class":202},[186,87521,52786],{"class":523},[186,87523,552],{"class":202},[186,87525,87526,87528,87530,87532,87534,87536],{"class":188,"line":242},[186,87527,53591],{"class":202},[186,87529,52796],{"class":523},[186,87531,52799],{"class":198},[186,87533,529],{"class":202},[186,87535,52804],{"class":532},[186,87537,552],{"class":202},[186,87539,87540,87542,87544,87546,87548,87550,87552,87554,87556],{"class":188,"line":248},[186,87541,53591],{"class":202},[186,87543,52796],{"class":523},[186,87545,16382],{"class":198},[186,87547,529],{"class":202},[186,87549,52843],{"class":532},[186,87551,52823],{"class":198},[186,87553,529],{"class":202},[186,87555,52850],{"class":532},[186,87557,552],{"class":202},[186,87559,87560,87562,87564,87566,87568],{"class":188,"line":265},[186,87561,53591],{"class":202},[186,87563,52859],{"class":523},[186,87565,52862],{"class":202},[186,87567,52859],{"class":523},[186,87569,552],{"class":202},[186,87571,87572,87574,87576],{"class":188,"line":271},[186,87573,53591],{"class":202},[186,87575,1524],{"class":523},[186,87577,552],{"class":202},[186,87579,87580,87583],{"class":188,"line":288},[186,87581,87582],{"class":198},"    .modal",[186,87584,622],{"class":202},[186,87586,87587,87589,87591,87593,87595],{"class":188,"line":294},[186,87588,56215],{"class":206},[186,87590,210],{"class":202},[186,87592,5439],{"class":206},[186,87594,804],{"class":669},[186,87596,634],{"class":202},[186,87598,87599,87602,87604,87606,87608],{"class":188,"line":1212},[186,87600,87601],{"class":206},"      min-height",[186,87603,210],{"class":202},[186,87605,1922],{"class":206},[186,87607,804],{"class":669},[186,87609,634],{"class":202},[186,87611,87612,87614,87616,87618,87620,87622,87624,87626,87628,87630,87632,87634,87636,87638,87640,87643],{"class":188,"line":1223},[186,87613,80183],{"class":206},[186,87615,210],{"class":202},[186,87617,1803],{"class":206},[186,87619,5559],{"class":206},[186,87621,3505],{"class":206},[186,87623,804],{"class":669},[186,87625,80200],{"class":206},[186,87627,832],{"class":202},[186,87629,1803],{"class":206},[186,87631,13898],{"class":202},[186,87633,1803],{"class":206},[186,87635,13898],{"class":202},[186,87637,1803],{"class":206},[186,87639,13898],{"class":202},[186,87641,87642],{"class":206},"0.1",[186,87644,1112],{"class":202},[186,87646,87647,87649,87651,87653,87655],{"class":188,"line":1236},[186,87648,56577],{"class":206},[186,87650,210],{"class":202},[186,87652,1904],{"class":206},[186,87654,804],{"class":669},[186,87656,634],{"class":202},[186,87658,87659,87661,87663,87665],{"class":188,"line":3096},[186,87660,56204],{"class":206},[186,87662,210],{"class":202},[186,87664,283],{"class":206},[186,87666,634],{"class":202},[186,87668,87669,87672,87674,87677],{"class":188,"line":3110},[186,87670,87671],{"class":206},"      z-index",[186,87673,210],{"class":202},[186,87675,87676],{"class":206},"999",[186,87678,634],{"class":202},[186,87680,87681,87683,87685,87687,87689],{"class":188,"line":3115},[186,87682,56281],{"class":206},[186,87684,210],{"class":202},[186,87686,666],{"class":206},[186,87688,670],{"class":669},[186,87690,634],{"class":202},[186,87692,87693,87695,87697,87699,87701],{"class":188,"line":3121},[186,87694,56390],{"class":206},[186,87696,210],{"class":202},[186,87698,666],{"class":206},[186,87700,670],{"class":669},[186,87702,634],{"class":202},[186,87704,87705,87707,87709,87711,87713,87716,87718,87720,87722,87724,87726,87728],{"class":188,"line":3142},[186,87706,80224],{"class":206},[186,87708,210],{"class":202},[186,87710,80229],{"class":206},[186,87712,832],{"class":202},[186,87714,87715],{"class":206},"-50",[186,87717,670],{"class":669},[186,87719,13898],{"class":202},[186,87721,87715],{"class":206},[186,87723,670],{"class":669},[186,87725,13898],{"class":202},[186,87727,1803],{"class":206},[186,87729,1112],{"class":202},[186,87731,87732,87734,87736,87738],{"class":188,"line":3147},[186,87733,56327],{"class":206},[186,87735,210],{"class":202},[186,87737,62283],{"class":206},[186,87739,634],{"class":202},[186,87741,87742],{"class":188,"line":3161},[186,87743,3654],{"class":202},[186,87745,87746],{"class":188,"line":3166},[186,87747,3867],{"emptyLinePlaceholder":1551},[186,87749,87750,87752,87755],{"class":188,"line":3195},[186,87751,87582],{"class":198},[186,87753,87754],{"class":198}," .header",[186,87756,622],{"class":202},[186,87758,87759,87761,87763,87765,87767],{"class":188,"line":3200},[186,87760,58800],{"class":206},[186,87762,210],{"class":202},[186,87764,2011],{"class":206},[186,87766,804],{"class":669},[186,87768,634],{"class":202},[186,87770,87771,87773,87775,87777,87779,87781],{"class":188,"line":3217},[186,87772,56140],{"class":206},[186,87774,210],{"class":202},[186,87776,1803],{"class":206},[186,87778,3505],{"class":206},[186,87780,804],{"class":669},[186,87782,634],{"class":202},[186,87784,87785,87787,87789,87791],{"class":188,"line":3222},[186,87786,56204],{"class":206},[186,87788,210],{"class":202},[186,87790,237],{"class":206},[186,87792,634],{"class":202},[186,87794,87795,87797,87799,87801,87803],{"class":188,"line":3227},[186,87796,56365],{"class":206},[186,87798,210],{"class":202},[186,87800,801],{"class":206},[186,87802,804],{"class":669},[186,87804,634],{"class":202},[186,87806,87807],{"class":188,"line":3232},[186,87808,3654],{"class":202},[186,87810,87811],{"class":188,"line":3246},[186,87812,3867],{"emptyLinePlaceholder":1551},[186,87814,87815,87817,87819,87821],{"class":188,"line":3251},[186,87816,87582],{"class":198},[186,87818,87754],{"class":198},[186,87820,4498],{"class":523},[186,87822,622],{"class":202},[186,87824,87825,87828,87830,87832],{"class":188,"line":4044},[186,87826,87827],{"class":206},"      font-style",[186,87829,210],{"class":202},[186,87831,1231],{"class":206},[186,87833,634],{"class":202},[186,87835,87836,87838,87840,87842],{"class":188,"line":4058},[186,87837,58857],{"class":206},[186,87839,210],{"class":202},[186,87841,63508],{"class":206},[186,87843,634],{"class":202},[186,87845,87846,87848,87850,87852],{"class":188,"line":4066},[186,87847,56204],{"class":206},[186,87849,210],{"class":202},[186,87851,260],{"class":206},[186,87853,634],{"class":202},[186,87855,87856,87859,87861,87863,87865],{"class":188,"line":4071},[186,87857,87858],{"class":206},"      right",[186,87860,210],{"class":202},[186,87862,2185],{"class":206},[186,87864,804],{"class":669},[186,87866,634],{"class":202},[186,87868,87869,87871,87873,87876,87878],{"class":188,"line":4077},[186,87870,56390],{"class":206},[186,87872,210],{"class":202},[186,87874,87875],{"class":206},"-2",[186,87877,804],{"class":669},[186,87879,634],{"class":202},[186,87881,87882,87884,87886,87888],{"class":188,"line":4083},[186,87883,63463],{"class":206},[186,87885,210],{"class":202},[186,87887,63468],{"class":206},[186,87889,634],{"class":202},[186,87891,87892],{"class":188,"line":4088},[186,87893,3654],{"class":202},[186,87895,87896],{"class":188,"line":9411},[186,87897,3867],{"emptyLinePlaceholder":1551},[186,87899,87900,87902,87905],{"class":188,"line":9435},[186,87901,87582],{"class":198},[186,87903,87904],{"class":198}," .body",[186,87906,622],{"class":202},[186,87908,87909,87911,87913,87915],{"class":188,"line":9440},[186,87910,58727],{"class":206},[186,87912,210],{"class":202},[186,87914,53042],{"class":206},[186,87916,634],{"class":202},[186,87918,87919,87921,87923,87925,87927],{"class":188,"line":9446},[186,87920,56140],{"class":206},[186,87922,210],{"class":202},[186,87924,2056],{"class":206},[186,87926,804],{"class":669},[186,87928,634],{"class":202},[186,87930,87931],{"class":188,"line":9473},[186,87932,3654],{"class":202},[186,87934,87935],{"class":188,"line":9478},[186,87936,3867],{"emptyLinePlaceholder":1551},[186,87938,87939,87941,87944],{"class":188,"line":9484},[186,87940,87582],{"class":198},[186,87942,87943],{"class":198}," .footer",[186,87945,622],{"class":202},[186,87947,87948,87950,87952,87954],{"class":188,"line":9496},[186,87949,56452],{"class":206},[186,87951,210],{"class":202},[186,87953,52928],{"class":206},[186,87955,634],{"class":202},[186,87957,87958,87960,87962,87964],{"class":188,"line":9508},[186,87959,56463],{"class":206},[186,87961,210],{"class":202},[186,87963,53030],{"class":206},[186,87965,634],{"class":202},[186,87967,87968,87970,87972,87974,87976],{"class":188,"line":9520},[186,87969,56140],{"class":206},[186,87971,210],{"class":202},[186,87973,2056],{"class":206},[186,87975,804],{"class":669},[186,87977,634],{"class":202},[186,87979,87980],{"class":188,"line":11179},[186,87981,3654],{"class":202},[186,87983,87984],{"class":188,"line":11204},[186,87985,3867],{"emptyLinePlaceholder":1551},[186,87987,87988,87990,87992,87994],{"class":188,"line":11227},[186,87989,87582],{"class":198},[186,87991,87943],{"class":198},[186,87993,2871],{"class":523},[186,87995,622],{"class":202},[186,87997,87998,88000,88002,88004,88006,88008,88010],{"class":188,"line":11251},[186,87999,56140],{"class":206},[186,88001,210],{"class":202},[186,88003,1691],{"class":206},[186,88005,804],{"class":669},[186,88007,3550],{"class":206},[186,88009,804],{"class":669},[186,88011,634],{"class":202},[186,88013,88014,88016,88018,88021],{"class":188,"line":11256},[186,88015,63161],{"class":206},[186,88017,210],{"class":202},[186,88019,88020],{"class":206},"#ccc",[186,88022,634],{"class":202},[186,88024,88025,88027,88029,88031],{"class":188,"line":11261},[186,88026,65407],{"class":206},[186,88028,210],{"class":202},[186,88030,56182],{"class":206},[186,88032,634],{"class":202},[186,88034,88035,88037,88039,88041],{"class":188,"line":11266},[186,88036,58857],{"class":206},[186,88038,210],{"class":202},[186,88040,62283],{"class":206},[186,88042,634],{"class":202},[186,88044,88045,88047,88049,88051,88053],{"class":188,"line":11275},[186,88046,56577],{"class":206},[186,88048,210],{"class":202},[186,88050,1697],{"class":206},[186,88052,804],{"class":669},[186,88054,634],{"class":202},[186,88056,88057,88059,88061,88063,88065],{"class":188,"line":11280},[186,88058,63188],{"class":206},[186,88060,210],{"class":202},[186,88062,2056],{"class":206},[186,88064,804],{"class":669},[186,88066,634],{"class":202},[186,88068,88069,88071,88073,88075,88077],{"class":188,"line":11286},[186,88070,56365],{"class":206},[186,88072,210],{"class":202},[186,88074,2159],{"class":206},[186,88076,804],{"class":669},[186,88078,634],{"class":202},[186,88080,88081],{"class":188,"line":11307},[186,88082,3654],{"class":202},[186,88084,88085],{"class":188,"line":11313},[186,88086,3867],{"emptyLinePlaceholder":1551},[186,88088,88089,88091,88093,88095,88098],{"class":188,"line":11327},[186,88090,87582],{"class":198},[186,88092,87943],{"class":198},[186,88094,2871],{"class":523},[186,88096,88097],{"class":198},".submit",[186,88099,622],{"class":202},[186,88101,88102,88104,88106,88109],{"class":188,"line":11333},[186,88103,56327],{"class":206},[186,88105,210],{"class":202},[186,88107,88108],{"class":206},"#369",[186,88110,634],{"class":202},[186,88112,88113],{"class":188,"line":11360},[186,88114,3654],{"class":202},[186,88116,88117,88119,88121],{"class":188,"line":11369},[186,88118,53864],{"class":202},[186,88120,1524],{"class":523},[186,88122,552],{"class":202},[186,88124,88125,88127,88129],{"class":188,"line":11375},[186,88126,1470],{"class":202},[186,88128,52786],{"class":523},[186,88130,552],{"class":202},[186,88132,88133],{"class":188,"line":11383},[186,88134,3867],{"emptyLinePlaceholder":1551},[186,88136,88137,88139,88141],{"class":188,"line":11388},[186,88138,520],{"class":202},[186,88140,53247],{"class":523},[186,88142,552],{"class":202},[186,88144,88145,88147,88149,88151,88153,88156,88159,88161],{"class":188,"line":18065},[186,88146,53591],{"class":202},[186,88148,55332],{"class":523},[186,88150,16421],{"class":198},[186,88152,529],{"class":202},[186,88154,88155],{"class":532},"\"delete\"",[186,88157,88158],{"class":202},">删除\u003C\u002F",[186,88160,55332],{"class":523},[186,88162,552],{"class":202},[186,88164,88165,88167,88169,88171,88173,88176,88179,88181],{"class":188,"line":18071},[186,88166,53591],{"class":202},[186,88168,55332],{"class":523},[186,88170,16421],{"class":198},[186,88172,529],{"class":202},[186,88174,88175],{"class":532},"\"login\"",[186,88177,88178],{"class":202},">登录\u003C\u002F",[186,88180,55332],{"class":523},[186,88182,552],{"class":202},[186,88184,88185,88187,88189],{"class":188,"line":18094},[186,88186,53591],{"class":202},[186,88188,53260],{"class":523},[186,88190,552],{"class":202},[186,88192,88193],{"class":188,"line":18100},[186,88194,88195],{"class":192},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[186,88197,88198,88200,88203,88205,88207,88209,88211,88213,88216,88218,88220],{"class":188,"line":18123},[186,88199,71521],{"class":669},[186,88201,88202],{"class":198}," Modal",[186,88204,832],{"class":202},[186,88206,52859],{"class":835},[186,88208,15027],{"class":669},[186,88210,71367],{"class":532},[186,88212,13898],{"class":202},[186,88214,88215],{"class":835},"message",[186,88217,15027],{"class":669},[186,88219,71367],{"class":532},[186,88221,13905],{"class":202},[186,88223,88224],{"class":188,"line":18137},[186,88225,88226],{"class":192},"      \u002F\u002F 创建Model 模态框盒子\n",[186,88228,88229],{"class":188,"line":18157},[186,88230,88231],{"class":192},"      \u002F\u002F 1.1 创建div标签\n",[186,88233,88234,88236,88239,88241,88243,88245,88247,88249],{"class":188,"line":18163},[186,88235,71488],{"class":206},[186,88237,88238],{"class":202},".modalBox ",[186,88240,529],{"class":669},[186,88242,55841],{"class":202},[186,88244,71588],{"class":198},[186,88246,832],{"class":202},[186,88248,83363],{"class":532},[186,88250,1629],{"class":202},[186,88252,88253],{"class":188,"line":18174},[186,88254,88255],{"class":192},"      \u002F\u002F 1.2 给div 添加类名为model\n",[186,88257,88258,88260,88263,88265],{"class":188,"line":18197},[186,88259,71488],{"class":206},[186,88261,88262],{"class":202},".modalBox.className ",[186,88264,529],{"class":669},[186,88266,88267],{"class":532}," 'modal'\n",[186,88269,88270],{"class":188,"line":18219},[186,88271,88272],{"class":192},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[186,88274,88275,88277,88280,88282],{"class":188,"line":18224},[186,88276,71488],{"class":206},[186,88278,88279],{"class":202},".modalBox.innerHTML ",[186,88281,529],{"class":669},[186,88283,71605],{"class":532},[186,88285,88286,88289,88291],{"class":188,"line":18230},[186,88287,88288],{"class":532},"        \u003Cdiv class=\"header\">${",[186,88290,52859],{"class":202},[186,88292,88293],{"class":532},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[186,88295,88296,88299,88301],{"class":188,"line":18244},[186,88297,88298],{"class":532},"        \u003Cdiv class=\"body\">${",[186,88300,88215],{"class":202},[186,88302,88303],{"class":532},"}\u003C\u002Fdiv>\n",[186,88305,88306],{"class":188,"line":18257},[186,88307,88308],{"class":532},"      `\n",[186,88310,88311],{"class":188,"line":18262},[186,88312,88313],{"class":192},"      \u002F\u002F console.log(this.modalBox)\n",[186,88315,88316],{"class":188,"line":18276},[186,88317,3654],{"class":202},[186,88319,88320],{"class":188,"line":18281},[186,88321,88322],{"class":192},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[186,88324,88325],{"class":188,"line":18287},[186,88326,88327],{"class":192},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[186,88329,88330],{"class":188,"line":18292},[186,88331,88332],{"class":192},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[186,88334,88335,88338,88340,88342,88344,88347,88349,88351],{"class":188,"line":18306},[186,88336,88337],{"class":206},"    Modal",[186,88339,2168],{"class":202},[186,88341,87011],{"class":206},[186,88343,2168],{"class":202},[186,88345,88346],{"class":198},"open",[186,88348,15027],{"class":669},[186,88350,60359],{"class":669},[186,88352,55897],{"class":202},[186,88354,88355],{"class":188,"line":18311},[186,88356,88357],{"class":192},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[186,88359,88360,88362,88365,88367,88369,88371,88373,88376],{"class":188,"line":18316},[186,88361,59669],{"class":669},[186,88363,88364],{"class":206}," box",[186,88366,15027],{"class":669},[186,88368,55841],{"class":202},[186,88370,55844],{"class":198},[186,88372,832],{"class":202},[186,88374,88375],{"class":532},"'.modal'",[186,88377,1629],{"class":202},[186,88379,88380],{"class":188,"line":18330},[186,88381,88382],{"class":192},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[186,88384,88385,88388,88390,88393,88395],{"class":188,"line":18342},[186,88386,88387],{"class":202},"      box ",[186,88389,3183],{"class":669},[186,88391,88392],{"class":202}," box.",[186,88394,58447],{"class":198},[186,88396,3443],{"class":202},[186,88398,88399],{"class":188,"line":18347},[186,88400,88401],{"class":192},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[186,88403,88404],{"class":188,"line":18360},[186,88405,88406],{"class":192},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[186,88408,88409],{"class":188,"line":18365},[186,88410,88411],{"class":192},"      \u002F\u002F append可以增加对象\n",[186,88413,88414,88417,88420,88422,88425],{"class":188,"line":18370},[186,88415,88416],{"class":202},"      document.body.",[186,88418,88419],{"class":198},"append",[186,88421,832],{"class":202},[186,88423,88424],{"class":206},"this",[186,88426,88427],{"class":202},".modalBox)\n",[186,88429,88430],{"class":188,"line":18375},[186,88431,3867],{"emptyLinePlaceholder":1551},[186,88433,88434],{"class":188,"line":18388},[186,88435,88436],{"class":192},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[186,88438,88439,88441,88444,88446,88448,88451,88453,88455,88457,88459,88462,88464],{"class":188,"line":18393},[186,88440,71488],{"class":206},[186,88442,88443],{"class":202},".modalBox.",[186,88445,55844],{"class":198},[186,88447,832],{"class":202},[186,88449,88450],{"class":532},"'i'",[186,88452,32281],{"class":202},[186,88454,59254],{"class":198},[186,88456,832],{"class":202},[186,88458,59259],{"class":532},[186,88460,88461],{"class":202},", () ",[186,88463,86154],{"class":669},[186,88465,622],{"class":202},[186,88467,88468],{"class":188,"line":34088},[186,88469,88470],{"class":192},"        \u002F\u002F 这个地方需要用到箭头函数\n",[186,88472,88473],{"class":188,"line":34094},[186,88474,88475],{"class":192},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[186,88477,88478],{"class":188,"line":34100},[186,88479,88480],{"class":192},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[186,88482,88483,88485,88487,88490],{"class":188,"line":34106},[186,88484,66163],{"class":206},[186,88486,2168],{"class":202},[186,88488,88489],{"class":198},"close",[186,88491,3443],{"class":202},[186,88493,88494],{"class":188,"line":34112},[186,88495,66252],{"class":202},[186,88497,88498],{"class":188,"line":34123},[186,88499,3654],{"class":202},[186,88501,88502],{"class":188,"line":34129},[186,88503,3867],{"emptyLinePlaceholder":1551},[186,88505,88506],{"class":188,"line":34149},[186,88507,88508],{"class":192},"    \u002F\u002F 测试一下 点击 删除按钮\n",[186,88510,88511,88513,88515,88517,88520,88522,88524,88526,88528,88530,88532],{"class":188,"line":34155},[186,88512,53854],{"class":202},[186,88514,55844],{"class":198},[186,88516,832],{"class":202},[186,88518,88519],{"class":532},"'#delete'",[186,88521,32281],{"class":202},[186,88523,59254],{"class":198},[186,88525,832],{"class":202},[186,88527,59259],{"class":532},[186,88529,88461],{"class":202},[186,88531,86154],{"class":669},[186,88533,622],{"class":202},[186,88535,88536],{"class":188,"line":34166},[186,88537,88538],{"class":192},"      \u002F\u002F 先调用Model构造函数\n",[186,88540,88541,88543,88546,88548,88550,88552,88554,88557,88559,88562],{"class":188,"line":34172},[186,88542,59669],{"class":669},[186,88544,88545],{"class":206}," del",[186,88547,15027],{"class":669},[186,88549,13041],{"class":669},[186,88551,88202],{"class":198},[186,88553,832],{"class":202},[186,88555,88556],{"class":532},"'温馨的提示'",[186,88558,13898],{"class":202},[186,88560,88561],{"class":532},"'您没有删除权限操作'",[186,88563,1629],{"class":202},[186,88565,88566],{"class":188,"line":34178},[186,88567,88568],{"class":192},"      \u002F\u002F 实例对象调用open方法\n",[186,88570,88571,88574,88576],{"class":188,"line":34184},[186,88572,88573],{"class":202},"      del.",[186,88575,88346],{"class":198},[186,88577,3443],{"class":202},[186,88579,88580],{"class":188,"line":34190},[186,88581,34916],{"class":202},[186,88583,88584],{"class":188,"line":34196},[186,88585,88586],{"class":192},"    \u002F\u002F 测试一下 点击 登录按钮\n",[186,88588,88589,88591,88593,88595,88598,88600,88602,88604,88606,88608,88610],{"class":188,"line":34202},[186,88590,53854],{"class":202},[186,88592,55844],{"class":198},[186,88594,832],{"class":202},[186,88596,88597],{"class":532},"'#login'",[186,88599,32281],{"class":202},[186,88601,59254],{"class":198},[186,88603,832],{"class":202},[186,88605,59259],{"class":532},[186,88607,88461],{"class":202},[186,88609,86154],{"class":669},[186,88611,622],{"class":202},[186,88613,88614],{"class":188,"line":34208},[186,88615,88538],{"class":192},[186,88617,88618,88620,88623,88625,88627,88629,88631,88634,88636,88639],{"class":188,"line":34228},[186,88619,59669],{"class":669},[186,88621,88622],{"class":206}," log",[186,88624,15027],{"class":669},[186,88626,13041],{"class":669},[186,88628,88202],{"class":198},[186,88630,832],{"class":202},[186,88632,88633],{"class":532},"'友情提示'",[186,88635,13898],{"class":202},[186,88637,88638],{"class":532},"'您还没有登录呢'",[186,88640,1629],{"class":202},[186,88642,88643],{"class":188,"line":34234},[186,88644,88568],{"class":192},[186,88646,88647,88650,88652],{"class":188,"line":34250},[186,88648,88649],{"class":202},"      log.",[186,88651,88346],{"class":198},[186,88653,3443],{"class":202},[186,88655,88656],{"class":188,"line":34256},[186,88657,34916],{"class":202},[186,88659,88660],{"class":188,"line":34270},[186,88661,88662],{"class":192},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[186,88664,88665,88667,88669,88671,88673,88675,88677,88679],{"class":188,"line":34276},[186,88666,88337],{"class":206},[186,88668,2168],{"class":202},[186,88670,87011],{"class":206},[186,88672,2168],{"class":202},[186,88674,88489],{"class":198},[186,88676,15027],{"class":669},[186,88678,60359],{"class":669},[186,88680,55897],{"class":202},[186,88682,88683,88685,88687,88689],{"class":188,"line":34291},[186,88684,71488],{"class":206},[186,88686,88443],{"class":202},[186,88688,58447],{"class":198},[186,88690,3443],{"class":202},[186,88692,88693],{"class":188,"line":34297},[186,88694,3654],{"class":202},[186,88696,88697,88699,88701],{"class":188,"line":34306},[186,88698,53864],{"class":202},[186,88700,53260],{"class":523},[186,88702,552],{"class":202},[186,88704,88705,88707,88709],{"class":188,"line":34312},[186,88706,1470],{"class":202},[186,88708,53247],{"class":523},[186,88710,552],{"class":202},[186,88712,88713],{"class":188,"line":34321},[186,88714,3867],{"emptyLinePlaceholder":1551},[186,88716,88717,88719,88721],{"class":188,"line":34327},[186,88718,1470],{"class":202},[186,88720,52089],{"class":523},[186,88722,552],{"class":202},[169,88724,88725],{},[164,88726],{"alt":181,"src":88727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88729,88731],{"id":88730},"_414-深浅拷贝","4.14 深浅拷贝",[29,88733,88735],{"id":88734},"_4141-浅拷贝","4.14.1 浅拷贝",[169,88737,88738],{},[164,88739],{"alt":181,"src":88740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[169,88742,88743],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[169,88745,88746],{},[164,88747],{"alt":181,"src":88748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[169,88750,88751],{},[164,88752],{"alt":181,"src":88753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[169,88755,88756],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[169,88758,88759],{},[164,88760],{"alt":181,"src":88761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[169,88763,12795],{},[169,88765,88766],{},[164,88767],{"alt":181,"src":88768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[29,88770,88772],{"id":88771},"_4142-深拷贝","4.14.2 深拷贝",[169,88774,88775],{},"深拷贝：拷贝的是对象，不是地址",[169,88777,88778],{},"常用的三种方法：",[34,88780,88781,88784,88787],{},[22,88782,88783],{},"通过递归实现深拷贝",[22,88785,88786],{},"lodash\u002FcloneDeep",[22,88788,88789],{},"通过JSON.stringify()实现",[23459,88791,88793],{"id":88792},"_41421-递归函数","4.14.2.1 递归函数",[169,88795,88796],{},[164,88797],{"alt":181,"src":88798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[34,88800,88801],{},[22,88802,88803],{},"死递归占溢出：",[176,88805,88807],{"className":54514,"code":88806,"language":54516,"meta":181,"style":181},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[183,88808,88809,88817,88825,88829,88834,88838,88843,88851],{"__ignoreMap":181},[186,88810,88811,88813,88815],{"class":188,"line":189},[186,88812,520],{"class":202},[186,88814,53247],{"class":523},[186,88816,552],{"class":202},[186,88818,88819,88821,88823],{"class":188,"line":49},[186,88820,53591],{"class":202},[186,88822,53260],{"class":523},[186,88824,552],{"class":202},[186,88826,88827],{"class":188,"line":219},[186,88828,78576],{"class":202},[186,88830,88831],{"class":188,"line":225},[186,88832,88833],{"class":202},"      fn()\n",[186,88835,88836],{"class":188,"line":242},[186,88837,3654],{"class":202},[186,88839,88840],{"class":188,"line":248},[186,88841,88842],{"class":202},"    fn()\n",[186,88844,88845,88847,88849],{"class":188,"line":265},[186,88846,53864],{"class":202},[186,88848,53260],{"class":523},[186,88850,552],{"class":202},[186,88852,88853,88855,88857],{"class":188,"line":271},[186,88854,1470],{"class":202},[186,88856,53247],{"class":523},[186,88858,552],{"class":202},[34,88860,88861],{"start":49},[22,88862,88863],{},"递归函数要加判断条件：",[169,88865,88866],{},[164,88867],{"alt":181,"src":88868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[34,88870,88871],{"start":219},[22,88872,88873],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[176,88875,88877],{"className":52087,"code":88876,"language":52089,"meta":181,"style":181},"\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",[183,88878,88879,88889,88903,88907,88915,88929,88949,88961,88969,88973,88981,88993,89001,89009,89034,89046,89050,89057,89065,89073,89077],{"__ignoreMap":181},[186,88880,88881,88883,88885,88887],{"class":188,"line":189},[186,88882,52751],{"class":202},[186,88884,52754],{"class":523},[186,88886,52757],{"class":198},[186,88888,552],{"class":202},[186,88890,88891,88893,88895,88897,88899,88901],{"class":188,"line":49},[186,88892,520],{"class":202},[186,88894,52089],{"class":523},[186,88896,52768],{"class":198},[186,88898,529],{"class":202},[186,88900,52773],{"class":532},[186,88902,552],{"class":202},[186,88904,88905],{"class":188,"line":219},[186,88906,3867],{"emptyLinePlaceholder":1551},[186,88908,88909,88911,88913],{"class":188,"line":225},[186,88910,520],{"class":202},[186,88912,52786],{"class":523},[186,88914,552],{"class":202},[186,88916,88917,88919,88921,88923,88925,88927],{"class":188,"line":242},[186,88918,53591],{"class":202},[186,88920,52796],{"class":523},[186,88922,52799],{"class":198},[186,88924,529],{"class":202},[186,88926,52804],{"class":532},[186,88928,552],{"class":202},[186,88930,88931,88933,88935,88937,88939,88941,88943,88945,88947],{"class":188,"line":248},[186,88932,53591],{"class":202},[186,88934,52796],{"class":523},[186,88936,16382],{"class":198},[186,88938,529],{"class":202},[186,88940,52843],{"class":532},[186,88942,52823],{"class":198},[186,88944,529],{"class":202},[186,88946,52850],{"class":532},[186,88948,552],{"class":202},[186,88950,88951,88953,88955,88957,88959],{"class":188,"line":265},[186,88952,53591],{"class":202},[186,88954,52859],{"class":523},[186,88956,52862],{"class":202},[186,88958,52859],{"class":523},[186,88960,552],{"class":202},[186,88962,88963,88965,88967],{"class":188,"line":271},[186,88964,1470],{"class":202},[186,88966,52786],{"class":523},[186,88968,552],{"class":202},[186,88970,88971],{"class":188,"line":288},[186,88972,3867],{"emptyLinePlaceholder":1551},[186,88974,88975,88977,88979],{"class":188,"line":294},[186,88976,520],{"class":202},[186,88978,53247],{"class":523},[186,88980,552],{"class":202},[186,88982,88983,88985,88987,88989,88991],{"class":188,"line":1212},[186,88984,53591],{"class":202},[186,88986,1450],{"class":523},[186,88988,56755],{"class":202},[186,88990,1450],{"class":523},[186,88992,552],{"class":202},[186,88994,88995,88997,88999],{"class":188,"line":1223},[186,88996,53591],{"class":202},[186,88998,53260],{"class":523},[186,89000,552],{"class":202},[186,89002,89003,89005,89007],{"class":188,"line":1236},[186,89004,71521],{"class":669},[186,89006,75206],{"class":198},[186,89008,12316],{"class":202},[186,89010,89011,89013,89015,89017,89019,89021,89023,89025,89027,89029,89032],{"class":188,"line":3096},[186,89012,57212],{"class":202},[186,89014,55844],{"class":198},[186,89016,832],{"class":202},[186,89018,83363],{"class":532},[186,89020,75682],{"class":202},[186,89022,529],{"class":669},[186,89024,13041],{"class":669},[186,89026,75222],{"class":198},[186,89028,18722],{"class":202},[186,89030,89031],{"class":198},"toLocaleString",[186,89033,3443],{"class":202},[186,89035,89036,89039,89042,89044],{"class":188,"line":3110},[186,89037,89038],{"class":198},"      setTimeout",[186,89040,89041],{"class":202},"(getTime, ",[186,89043,7873],{"class":206},[186,89045,1629],{"class":202},[186,89047,89048],{"class":188,"line":3115},[186,89049,3654],{"class":202},[186,89051,89052,89055],{"class":188,"line":3121},[186,89053,89054],{"class":198},"    getTime",[186,89056,3443],{"class":202},[186,89058,89059,89061,89063],{"class":188,"line":3142},[186,89060,53864],{"class":202},[186,89062,53260],{"class":523},[186,89064,552],{"class":202},[186,89066,89067,89069,89071],{"class":188,"line":3147},[186,89068,1470],{"class":202},[186,89070,53247],{"class":523},[186,89072,552],{"class":202},[186,89074,89075],{"class":188,"line":3161},[186,89076,3867],{"emptyLinePlaceholder":1551},[186,89078,89079,89081,89083],{"class":188,"line":3166},[186,89080,1470],{"class":202},[186,89082,52089],{"class":523},[186,89084,552],{"class":202},[169,89086,89087],{},[164,89088],{"alt":181,"src":89089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[34,89091,89092],{"start":225},[22,89093,88783],{},[169,89095,89096],{},[164,89097],{"alt":181,"src":89098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[169,89100,89101],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[169,89103,40643],{},[169,89105,89106],{},"这个是简易版的递归函数深拷贝",[169,89108,89109],{},"一定要注意先数组再对象，因为万物皆可对象",[176,89111,89113],{"className":52087,"code":89112,"language":52089,"meta":181,"style":181},"\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",[183,89114,89115,89125,89139,89143,89151,89165,89185,89197,89205,89209,89217,89225,89235,89244,89252,89268,89272,89280,89284,89288,89300,89305,89324,89340,89345,89350,89355,89370,89375,89380,89389,89397,89414,89422,89428,89436,89441,89446,89455,89459,89463,89467,89478,89487,89497,89511,89521,89529,89537,89545,89549],{"__ignoreMap":181},[186,89116,89117,89119,89121,89123],{"class":188,"line":189},[186,89118,52751],{"class":202},[186,89120,52754],{"class":523},[186,89122,52757],{"class":198},[186,89124,552],{"class":202},[186,89126,89127,89129,89131,89133,89135,89137],{"class":188,"line":49},[186,89128,520],{"class":202},[186,89130,52089],{"class":523},[186,89132,52768],{"class":198},[186,89134,529],{"class":202},[186,89136,52773],{"class":532},[186,89138,552],{"class":202},[186,89140,89141],{"class":188,"line":219},[186,89142,3867],{"emptyLinePlaceholder":1551},[186,89144,89145,89147,89149],{"class":188,"line":225},[186,89146,520],{"class":202},[186,89148,52786],{"class":523},[186,89150,552],{"class":202},[186,89152,89153,89155,89157,89159,89161,89163],{"class":188,"line":242},[186,89154,53591],{"class":202},[186,89156,52796],{"class":523},[186,89158,52799],{"class":198},[186,89160,529],{"class":202},[186,89162,52804],{"class":532},[186,89164,552],{"class":202},[186,89166,89167,89169,89171,89173,89175,89177,89179,89181,89183],{"class":188,"line":248},[186,89168,53591],{"class":202},[186,89170,52796],{"class":523},[186,89172,16382],{"class":198},[186,89174,529],{"class":202},[186,89176,52843],{"class":532},[186,89178,52823],{"class":198},[186,89180,529],{"class":202},[186,89182,52850],{"class":532},[186,89184,552],{"class":202},[186,89186,89187,89189,89191,89193,89195],{"class":188,"line":265},[186,89188,53591],{"class":202},[186,89190,52859],{"class":523},[186,89192,52862],{"class":202},[186,89194,52859],{"class":523},[186,89196,552],{"class":202},[186,89198,89199,89201,89203],{"class":188,"line":271},[186,89200,1470],{"class":202},[186,89202,52786],{"class":523},[186,89204,552],{"class":202},[186,89206,89207],{"class":188,"line":288},[186,89208,3867],{"emptyLinePlaceholder":1551},[186,89210,89211,89213,89215],{"class":188,"line":294},[186,89212,520],{"class":202},[186,89214,53247],{"class":523},[186,89216,552],{"class":202},[186,89218,89219,89221,89223],{"class":188,"line":1212},[186,89220,53591],{"class":202},[186,89222,53260],{"class":523},[186,89224,552],{"class":202},[186,89226,89227,89229,89231,89233],{"class":188,"line":1223},[186,89228,12684],{"class":669},[186,89230,71408],{"class":206},[186,89232,15027],{"class":669},[186,89234,622],{"class":202},[186,89236,89237,89239,89242],{"class":188,"line":1236},[186,89238,73050],{"class":202},[186,89240,89241],{"class":532},"'pink'",[186,89243,32921],{"class":202},[186,89245,89246,89248,89250],{"class":188,"line":3096},[186,89247,73060],{"class":202},[186,89249,2260],{"class":206},[186,89251,32921],{"class":202},[186,89253,89254,89257,89260,89262,89265],{"class":188,"line":3110},[186,89255,89256],{"class":202},"      hobby: [",[186,89258,89259],{"class":532},"'乒乓球'",[186,89261,13898],{"class":202},[186,89263,89264],{"class":532},"'足球'",[186,89266,89267],{"class":202},"],\n",[186,89269,89270],{"class":188,"line":3115},[186,89271,79305],{"class":202},[186,89273,89274,89277],{"class":188,"line":3121},[186,89275,89276],{"class":202},"        baby: ",[186,89278,89279],{"class":532},"'小pink'\n",[186,89281,89282],{"class":188,"line":3142},[186,89283,53845],{"class":202},[186,89285,89286],{"class":188,"line":3147},[186,89287,3654],{"class":202},[186,89289,89290,89292,89295,89297],{"class":188,"line":3161},[186,89291,12684],{"class":669},[186,89293,89294],{"class":206}," o",[186,89296,15027],{"class":669},[186,89298,89299],{"class":202}," {}\n",[186,89301,89302],{"class":188,"line":3166},[186,89303,89304],{"class":192},"    \u002F\u002F 拷贝函数\n",[186,89306,89307,89309,89312,89314,89317,89319,89322],{"class":188,"line":3195},[186,89308,71521],{"class":669},[186,89310,89311],{"class":198}," deepCopy",[186,89313,832],{"class":202},[186,89315,89316],{"class":835},"newObj",[186,89318,13898],{"class":202},[186,89320,89321],{"class":835},"oldObj",[186,89323,13905],{"class":202},[186,89325,89326,89328,89330,89332,89335,89337],{"class":188,"line":3200},[186,89327,53731],{"class":669},[186,89329,3126],{"class":202},[186,89331,53294],{"class":669},[186,89333,89334],{"class":202}," k ",[186,89336,27500],{"class":669},[186,89338,89339],{"class":202}," oldObj) {\n",[186,89341,89342],{"class":188,"line":3217},[186,89343,89344],{"class":192},"        \u002F\u002F 处理数组的问题\n",[186,89346,89347],{"class":188,"line":3222},[186,89348,89349],{"class":192},"        \u002F\u002F 判断是否属于数组\n",[186,89351,89352],{"class":188,"line":3227},[186,89353,89354],{"class":192},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[186,89356,89357,89359,89362,89365,89368],{"class":188,"line":3232},[186,89358,3964],{"class":669},[186,89360,89361],{"class":202}," (oldObj[k] ",[186,89363,89364],{"class":669},"instanceof",[186,89366,89367],{"class":198}," Array",[186,89369,13905],{"class":202},[186,89371,89372],{"class":188,"line":3246},[186,89373,89374],{"class":192},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[186,89376,89377],{"class":188,"line":3251},[186,89378,89379],{"class":192},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[186,89381,89382,89385,89387],{"class":188,"line":4044},[186,89383,89384],{"class":202},"          newObj[k] ",[186,89386,529],{"class":669},[186,89388,53285],{"class":202},[186,89390,89391,89394],{"class":188,"line":4058},[186,89392,89393],{"class":198},"          deepCopy",[186,89395,89396],{"class":202},"(newObj[k], oldObj[k])\n",[186,89398,89399,89401,89403,89405,89407,89409,89412],{"class":188,"line":4066},[186,89400,81512],{"class":202},[186,89402,3169],{"class":669},[186,89404,3172],{"class":669},[186,89406,89361],{"class":202},[186,89408,89364],{"class":669},[186,89410,89411],{"class":198}," Object",[186,89413,13905],{"class":202},[186,89415,89416,89418,89420],{"class":188,"line":4071},[186,89417,89384],{"class":202},[186,89419,529],{"class":669},[186,89421,89299],{"class":202},[186,89423,89424,89426],{"class":188,"line":4077},[186,89425,89393],{"class":198},[186,89427,89396],{"class":202},[186,89429,89430,89432,89434],{"class":188,"line":4083},[186,89431,81512],{"class":202},[186,89433,3169],{"class":669},[186,89435,622],{"class":202},[186,89437,89438],{"class":188,"line":4088},[186,89439,89440],{"class":192},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[186,89442,89443],{"class":188,"line":9411},[186,89444,89445],{"class":192},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[186,89447,89448,89450,89452],{"class":188,"line":9435},[186,89449,89384],{"class":202},[186,89451,529],{"class":669},[186,89453,89454],{"class":202}," oldObj[k]\n",[186,89456,89457],{"class":188,"line":9440},[186,89458,3996],{"class":202},[186,89460,89461],{"class":188,"line":9446},[186,89462,53845],{"class":202},[186,89464,89465],{"class":188,"line":9473},[186,89466,3654],{"class":202},[186,89468,89469,89472,89475],{"class":188,"line":9478},[186,89470,89471],{"class":198},"    deepCopy",[186,89473,89474],{"class":202},"(o, obj) ",[186,89476,89477],{"class":192},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[186,89479,89480,89482,89484],{"class":188,"line":9484},[186,89481,75186],{"class":202},[186,89483,59688],{"class":198},[186,89485,89486],{"class":202},"(o)\n",[186,89488,89489,89492,89494],{"class":188,"line":9496},[186,89490,89491],{"class":202},"    o.age ",[186,89493,529],{"class":669},[186,89495,89496],{"class":206}," 20\n",[186,89498,89499,89502,89504,89506,89508],{"class":188,"line":9508},[186,89500,89501],{"class":202},"    o.hobby[",[186,89503,1803],{"class":206},[186,89505,5909],{"class":202},[186,89507,529],{"class":669},[186,89509,89510],{"class":532}," '篮球'\n",[186,89512,89513,89516,89518],{"class":188,"line":9520},[186,89514,89515],{"class":202},"    o.family ",[186,89517,529],{"class":669},[186,89519,89520],{"class":532}," '老pink'\n",[186,89522,89523,89525,89527],{"class":188,"line":11179},[186,89524,75186],{"class":202},[186,89526,59688],{"class":198},[186,89528,71473],{"class":202},[186,89530,89531,89533,89535],{"class":188,"line":11204},[186,89532,53864],{"class":202},[186,89534,53260],{"class":523},[186,89536,552],{"class":202},[186,89538,89539,89541,89543],{"class":188,"line":11227},[186,89540,1470],{"class":202},[186,89542,53247],{"class":523},[186,89544,552],{"class":202},[186,89546,89547],{"class":188,"line":11251},[186,89548,3867],{"emptyLinePlaceholder":1551},[186,89550,89551,89553,89555],{"class":188,"line":11256},[186,89552,1470],{"class":202},[186,89554,52089],{"class":523},[186,89556,552],{"class":202},[169,89558,89559],{},[164,89560],{"alt":181,"src":89561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23459,89563,89565,89566],{"id":89564},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[54,89567,89568],{},"js库lodash里面cloneDeep内部实现了深拷贝",[169,89570,89571],{},[948,89572,89573],{"href":89573,"rel":89574},"https:\u002F\u002Fwww.lodashjs.com\u002F",[952],[169,89576,89577],{},"lodash里边的方法都要加上一个下划线_",[169,89579,89580],{},"_.cloneDeep()",[176,89582,89584],{"className":52087,"code":89583,"language":52089,"meta":181,"style":181},"\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",[183,89585,89586,89596,89610,89614,89622,89636,89656,89668,89676,89680,89688,89693,89712,89720,89730,89738,89746,89758,89762,89768,89772,89776,89792,89800,89809,89817,89825,89833,89837],{"__ignoreMap":181},[186,89587,89588,89590,89592,89594],{"class":188,"line":189},[186,89589,52751],{"class":202},[186,89591,52754],{"class":523},[186,89593,52757],{"class":198},[186,89595,552],{"class":202},[186,89597,89598,89600,89602,89604,89606,89608],{"class":188,"line":49},[186,89599,520],{"class":202},[186,89601,52089],{"class":523},[186,89603,52768],{"class":198},[186,89605,529],{"class":202},[186,89607,52773],{"class":532},[186,89609,552],{"class":202},[186,89611,89612],{"class":188,"line":219},[186,89613,3867],{"emptyLinePlaceholder":1551},[186,89615,89616,89618,89620],{"class":188,"line":225},[186,89617,520],{"class":202},[186,89619,52786],{"class":523},[186,89621,552],{"class":202},[186,89623,89624,89626,89628,89630,89632,89634],{"class":188,"line":242},[186,89625,53591],{"class":202},[186,89627,52796],{"class":523},[186,89629,52799],{"class":198},[186,89631,529],{"class":202},[186,89633,52804],{"class":532},[186,89635,552],{"class":202},[186,89637,89638,89640,89642,89644,89646,89648,89650,89652,89654],{"class":188,"line":248},[186,89639,53591],{"class":202},[186,89641,52796],{"class":523},[186,89643,16382],{"class":198},[186,89645,529],{"class":202},[186,89647,52843],{"class":532},[186,89649,52823],{"class":198},[186,89651,529],{"class":202},[186,89653,52850],{"class":532},[186,89655,552],{"class":202},[186,89657,89658,89660,89662,89664,89666],{"class":188,"line":265},[186,89659,53591],{"class":202},[186,89661,52859],{"class":523},[186,89663,52862],{"class":202},[186,89665,52859],{"class":523},[186,89667,552],{"class":202},[186,89669,89670,89672,89674],{"class":188,"line":271},[186,89671,1470],{"class":202},[186,89673,52786],{"class":523},[186,89675,552],{"class":202},[186,89677,89678],{"class":188,"line":288},[186,89679,3867],{"emptyLinePlaceholder":1551},[186,89681,89682,89684,89686],{"class":188,"line":294},[186,89683,520],{"class":202},[186,89685,53247],{"class":523},[186,89687,552],{"class":202},[186,89689,89690],{"class":188,"line":1212},[186,89691,89692],{"class":192},"  \u003C!-- 先引用这个库 -->\n",[186,89694,89695,89697,89699,89701,89703,89706,89708,89710],{"class":188,"line":1223},[186,89696,53591],{"class":202},[186,89698,53260],{"class":523},[186,89700,526],{"class":198},[186,89702,529],{"class":202},[186,89704,89705],{"class":532},"\"lodash.min.js\"",[186,89707,56755],{"class":202},[186,89709,53260],{"class":523},[186,89711,552],{"class":202},[186,89713,89714,89716,89718],{"class":188,"line":1236},[186,89715,53591],{"class":202},[186,89717,53260],{"class":523},[186,89719,552],{"class":202},[186,89721,89722,89724,89726,89728],{"class":188,"line":3096},[186,89723,12684],{"class":669},[186,89725,71408],{"class":206},[186,89727,15027],{"class":669},[186,89729,622],{"class":202},[186,89731,89732,89734,89736],{"class":188,"line":3110},[186,89733,73050],{"class":202},[186,89735,89241],{"class":532},[186,89737,32921],{"class":202},[186,89739,89740,89742,89744],{"class":188,"line":3115},[186,89741,73060],{"class":202},[186,89743,2260],{"class":206},[186,89745,32921],{"class":202},[186,89747,89748,89750,89752,89754,89756],{"class":188,"line":3121},[186,89749,89256],{"class":202},[186,89751,89259],{"class":532},[186,89753,13898],{"class":202},[186,89755,89264],{"class":532},[186,89757,89267],{"class":202},[186,89759,89760],{"class":188,"line":3142},[186,89761,79305],{"class":202},[186,89763,89764,89766],{"class":188,"line":3147},[186,89765,89276],{"class":202},[186,89767,89279],{"class":532},[186,89769,89770],{"class":188,"line":3161},[186,89771,53845],{"class":202},[186,89773,89774],{"class":188,"line":3166},[186,89775,3654],{"class":202},[186,89777,89778,89780,89782,89784,89787,89790],{"class":188,"line":3195},[186,89779,12684],{"class":669},[186,89781,89294],{"class":206},[186,89783,15027],{"class":669},[186,89785,89786],{"class":202}," _.",[186,89788,89789],{"class":198},"cloneDeep",[186,89791,71473],{"class":202},[186,89793,89794,89796,89798],{"class":188,"line":3200},[186,89795,75186],{"class":202},[186,89797,59688],{"class":198},[186,89799,89486],{"class":202},[186,89801,89802,89805,89807],{"class":188,"line":3217},[186,89803,89804],{"class":202},"    o.family.baby ",[186,89806,529],{"class":669},[186,89808,89520],{"class":532},[186,89810,89811,89813,89815],{"class":188,"line":3222},[186,89812,75186],{"class":202},[186,89814,59688],{"class":198},[186,89816,71473],{"class":202},[186,89818,89819,89821,89823],{"class":188,"line":3227},[186,89820,53864],{"class":202},[186,89822,53260],{"class":523},[186,89824,552],{"class":202},[186,89826,89827,89829,89831],{"class":188,"line":3232},[186,89828,1470],{"class":202},[186,89830,53247],{"class":523},[186,89832,552],{"class":202},[186,89834,89835],{"class":188,"line":3246},[186,89836,3867],{"emptyLinePlaceholder":1551},[186,89838,89839,89841,89843],{"class":188,"line":3251},[186,89840,1470],{"class":202},[186,89842,52089],{"class":523},[186,89844,552],{"class":202},[169,89846,89847],{},[164,89848],{"alt":181,"src":89849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23459,89851,89853],{"id":89852},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[176,89855,89857],{"className":52087,"code":89856,"language":52089,"meta":181,"style":181},"\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",[183,89858,89859,89869,89883,89887,89895,89909,89929,89941,89949,89953,89961,89969,89979,89987,89995,90007,90011,90017,90021,90025,90030,90035,90040,90066,90074,90083,90091,90099,90107,90111],{"__ignoreMap":181},[186,89860,89861,89863,89865,89867],{"class":188,"line":189},[186,89862,52751],{"class":202},[186,89864,52754],{"class":523},[186,89866,52757],{"class":198},[186,89868,552],{"class":202},[186,89870,89871,89873,89875,89877,89879,89881],{"class":188,"line":49},[186,89872,520],{"class":202},[186,89874,52089],{"class":523},[186,89876,52768],{"class":198},[186,89878,529],{"class":202},[186,89880,52773],{"class":532},[186,89882,552],{"class":202},[186,89884,89885],{"class":188,"line":219},[186,89886,3867],{"emptyLinePlaceholder":1551},[186,89888,89889,89891,89893],{"class":188,"line":225},[186,89890,520],{"class":202},[186,89892,52786],{"class":523},[186,89894,552],{"class":202},[186,89896,89897,89899,89901,89903,89905,89907],{"class":188,"line":242},[186,89898,53591],{"class":202},[186,89900,52796],{"class":523},[186,89902,52799],{"class":198},[186,89904,529],{"class":202},[186,89906,52804],{"class":532},[186,89908,552],{"class":202},[186,89910,89911,89913,89915,89917,89919,89921,89923,89925,89927],{"class":188,"line":248},[186,89912,53591],{"class":202},[186,89914,52796],{"class":523},[186,89916,16382],{"class":198},[186,89918,529],{"class":202},[186,89920,52843],{"class":532},[186,89922,52823],{"class":198},[186,89924,529],{"class":202},[186,89926,52850],{"class":532},[186,89928,552],{"class":202},[186,89930,89931,89933,89935,89937,89939],{"class":188,"line":265},[186,89932,53591],{"class":202},[186,89934,52859],{"class":523},[186,89936,52862],{"class":202},[186,89938,52859],{"class":523},[186,89940,552],{"class":202},[186,89942,89943,89945,89947],{"class":188,"line":271},[186,89944,1470],{"class":202},[186,89946,52786],{"class":523},[186,89948,552],{"class":202},[186,89950,89951],{"class":188,"line":288},[186,89952,3867],{"emptyLinePlaceholder":1551},[186,89954,89955,89957,89959],{"class":188,"line":294},[186,89956,520],{"class":202},[186,89958,53247],{"class":523},[186,89960,552],{"class":202},[186,89962,89963,89965,89967],{"class":188,"line":1212},[186,89964,53591],{"class":202},[186,89966,53260],{"class":523},[186,89968,552],{"class":202},[186,89970,89971,89973,89975,89977],{"class":188,"line":1223},[186,89972,12684],{"class":669},[186,89974,71408],{"class":206},[186,89976,15027],{"class":669},[186,89978,622],{"class":202},[186,89980,89981,89983,89985],{"class":188,"line":1236},[186,89982,73050],{"class":202},[186,89984,89241],{"class":532},[186,89986,32921],{"class":202},[186,89988,89989,89991,89993],{"class":188,"line":3096},[186,89990,73060],{"class":202},[186,89992,2260],{"class":206},[186,89994,32921],{"class":202},[186,89996,89997,89999,90001,90003,90005],{"class":188,"line":3110},[186,89998,89256],{"class":202},[186,90000,89259],{"class":532},[186,90002,13898],{"class":202},[186,90004,89264],{"class":532},[186,90006,89267],{"class":202},[186,90008,90009],{"class":188,"line":3115},[186,90010,79305],{"class":202},[186,90012,90013,90015],{"class":188,"line":3121},[186,90014,89276],{"class":202},[186,90016,89279],{"class":532},[186,90018,90019],{"class":188,"line":3142},[186,90020,53845],{"class":202},[186,90022,90023],{"class":188,"line":3147},[186,90024,3654],{"class":202},[186,90026,90027],{"class":188,"line":3161},[186,90028,90029],{"class":192},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[186,90031,90032],{"class":188,"line":3166},[186,90033,90034],{"class":192},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[186,90036,90037],{"class":188,"line":3195},[186,90038,90039],{"class":192},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[186,90041,90042,90044,90046,90048,90051,90053,90056,90058,90060,90062,90064],{"class":188,"line":3200},[186,90043,12684],{"class":669},[186,90045,89294],{"class":206},[186,90047,15027],{"class":669},[186,90049,90050],{"class":206}," JSON",[186,90052,2168],{"class":202},[186,90054,90055],{"class":198},"parse",[186,90057,832],{"class":202},[186,90059,73098],{"class":206},[186,90061,2168],{"class":202},[186,90063,73103],{"class":198},[186,90065,73106],{"class":202},[186,90067,90068,90070,90072],{"class":188,"line":3217},[186,90069,75186],{"class":202},[186,90071,59688],{"class":198},[186,90073,89486],{"class":202},[186,90075,90076,90078,90080],{"class":188,"line":3222},[186,90077,89804],{"class":202},[186,90079,529],{"class":669},[186,90081,90082],{"class":532}," '123'\n",[186,90084,90085,90087,90089],{"class":188,"line":3227},[186,90086,75186],{"class":202},[186,90088,59688],{"class":198},[186,90090,71473],{"class":202},[186,90092,90093,90095,90097],{"class":188,"line":3232},[186,90094,53864],{"class":202},[186,90096,53260],{"class":523},[186,90098,552],{"class":202},[186,90100,90101,90103,90105],{"class":188,"line":3246},[186,90102,1470],{"class":202},[186,90104,53247],{"class":523},[186,90106,552],{"class":202},[186,90108,90109],{"class":188,"line":3251},[186,90110,3867],{"emptyLinePlaceholder":1551},[186,90112,90113,90115,90117],{"class":188,"line":4044},[186,90114,1470],{"class":202},[186,90116,52089],{"class":523},[186,90118,552],{"class":202},[169,90120,90121],{},[164,90122],{"alt":181,"src":90123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90125,90127],{"id":90126},"_415-异常处理","4.15 异常处理",[34,90129,90130],{},[22,90131,90132],{},"throw抛异常",[169,90134,90135],{},[164,90136],{"alt":181,"src":90137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[34,90139,90140],{"start":49},[22,90141,90142],{},"try\u002Fcatch 捕获错误信息",[169,90144,90145],{},[164,90146],{"alt":181,"src":90147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[176,90149,90151],{"className":52087,"code":90150,"language":52089,"meta":181,"style":181},"\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",[183,90152,90153,90163,90177,90181,90189,90203,90223,90235,90243,90247,90255,90267,90275,90284,90291,90296,90315,90324,90335,90340,90350,90355,90360,90365,90382,90386,90391,90398,90410,90414,90426,90430,90434,90439,90444,90451,90459,90467,90471],{"__ignoreMap":181},[186,90154,90155,90157,90159,90161],{"class":188,"line":189},[186,90156,52751],{"class":202},[186,90158,52754],{"class":523},[186,90160,52757],{"class":198},[186,90162,552],{"class":202},[186,90164,90165,90167,90169,90171,90173,90175],{"class":188,"line":49},[186,90166,520],{"class":202},[186,90168,52089],{"class":523},[186,90170,52768],{"class":198},[186,90172,529],{"class":202},[186,90174,52773],{"class":532},[186,90176,552],{"class":202},[186,90178,90179],{"class":188,"line":219},[186,90180,3867],{"emptyLinePlaceholder":1551},[186,90182,90183,90185,90187],{"class":188,"line":225},[186,90184,520],{"class":202},[186,90186,52786],{"class":523},[186,90188,552],{"class":202},[186,90190,90191,90193,90195,90197,90199,90201],{"class":188,"line":242},[186,90192,53591],{"class":202},[186,90194,52796],{"class":523},[186,90196,52799],{"class":198},[186,90198,529],{"class":202},[186,90200,52804],{"class":532},[186,90202,552],{"class":202},[186,90204,90205,90207,90209,90211,90213,90215,90217,90219,90221],{"class":188,"line":248},[186,90206,53591],{"class":202},[186,90208,52796],{"class":523},[186,90210,16382],{"class":198},[186,90212,529],{"class":202},[186,90214,52843],{"class":532},[186,90216,52823],{"class":198},[186,90218,529],{"class":202},[186,90220,52850],{"class":532},[186,90222,552],{"class":202},[186,90224,90225,90227,90229,90231,90233],{"class":188,"line":265},[186,90226,53591],{"class":202},[186,90228,52859],{"class":523},[186,90230,52862],{"class":202},[186,90232,52859],{"class":523},[186,90234,552],{"class":202},[186,90236,90237,90239,90241],{"class":188,"line":271},[186,90238,1470],{"class":202},[186,90240,52786],{"class":523},[186,90242,552],{"class":202},[186,90244,90245],{"class":188,"line":288},[186,90246,3867],{"emptyLinePlaceholder":1551},[186,90248,90249,90251,90253],{"class":188,"line":294},[186,90250,520],{"class":202},[186,90252,53247],{"class":523},[186,90254,552],{"class":202},[186,90256,90257,90259,90261,90263,90265],{"class":188,"line":1212},[186,90258,53591],{"class":202},[186,90260,169],{"class":523},[186,90262,54940],{"class":202},[186,90264,169],{"class":523},[186,90266,552],{"class":202},[186,90268,90269,90271,90273],{"class":188,"line":1223},[186,90270,53591],{"class":202},[186,90272,53260],{"class":523},[186,90274,552],{"class":202},[186,90276,90277,90279,90282],{"class":188,"line":1236},[186,90278,71521],{"class":669},[186,90280,90281],{"class":198}," fn",[186,90283,12316],{"class":202},[186,90285,90286,90289],{"class":188,"line":3096},[186,90287,90288],{"class":669},"      try",[186,90290,622],{"class":202},[186,90292,90293],{"class":188,"line":3110},[186,90294,90295],{"class":192},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[186,90297,90298,90300,90302,90304,90306,90308,90310,90313],{"class":188,"line":3115},[186,90299,62711],{"class":669},[186,90301,8288],{"class":206},[186,90303,15027],{"class":669},[186,90305,55841],{"class":202},[186,90307,55844],{"class":198},[186,90309,832],{"class":202},[186,90311,90312],{"class":532},"'.p'",[186,90314,1629],{"class":202},[186,90316,90317,90320,90322],{"class":188,"line":3121},[186,90318,90319],{"class":202},"        p.style.color ",[186,90321,529],{"class":669},[186,90323,68488],{"class":532},[186,90325,90326,90329,90332],{"class":188,"line":3142},[186,90327,90328],{"class":202},"      } ",[186,90330,90331],{"class":669},"catch",[186,90333,90334],{"class":202}," (err) {\n",[186,90336,90337],{"class":188,"line":3147},[186,90338,90339],{"class":192},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[186,90341,90342,90345,90347],{"class":188,"line":3161},[186,90343,90344],{"class":202},"        console.",[186,90346,59688],{"class":198},[186,90348,90349],{"class":202},"(err.message)\n",[186,90351,90352],{"class":188,"line":3166},[186,90353,90354],{"class":192},"        \u002F\u002F 想要中断程序，需要加return\n",[186,90356,90357],{"class":188,"line":3195},[186,90358,90359],{"class":192},"        \u002F\u002F return\n",[186,90361,90362],{"class":188,"line":3200},[186,90363,90364],{"class":192},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[186,90366,90367,90370,90372,90375,90377,90380],{"class":188,"line":3217},[186,90368,90369],{"class":669},"        throw",[186,90371,13041],{"class":669},[186,90373,90374],{"class":198}," Error",[186,90376,832],{"class":202},[186,90378,90379],{"class":532},"'你看看，选择器错误了吧'",[186,90381,1629],{"class":202},[186,90383,90384],{"class":188,"line":3222},[186,90385,53845],{"class":202},[186,90387,90388],{"class":188,"line":3227},[186,90389,90390],{"class":192},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[186,90392,90393,90396],{"class":188,"line":3232},[186,90394,90395],{"class":669},"      finally",[186,90397,622],{"class":202},[186,90399,90400,90403,90405,90408],{"class":188,"line":3246},[186,90401,90402],{"class":198},"        alert",[186,90404,832],{"class":202},[186,90406,90407],{"class":532},"'弹出对话框'",[186,90409,1629],{"class":202},[186,90411,90412],{"class":188,"line":3251},[186,90413,53845],{"class":202},[186,90415,90416,90418,90420,90422,90424],{"class":188,"line":4044},[186,90417,59685],{"class":202},[186,90419,59688],{"class":198},[186,90421,832],{"class":202},[186,90423,2082],{"class":206},[186,90425,1629],{"class":202},[186,90427,90428],{"class":188,"line":4058},[186,90429,3867],{"emptyLinePlaceholder":1551},[186,90431,90432],{"class":188,"line":4066},[186,90433,3654],{"class":202},[186,90435,90436],{"class":188,"line":4071},[186,90437,90438],{"class":192},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[186,90440,90441],{"class":188,"line":4077},[186,90442,90443],{"class":192},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[186,90445,90446,90449],{"class":188,"line":4083},[186,90447,90448],{"class":198},"    fn",[186,90450,3443],{"class":202},[186,90452,90453,90455,90457],{"class":188,"line":4088},[186,90454,53864],{"class":202},[186,90456,53260],{"class":523},[186,90458,552],{"class":202},[186,90460,90461,90463,90465],{"class":188,"line":9411},[186,90462,1470],{"class":202},[186,90464,53247],{"class":523},[186,90466,552],{"class":202},[186,90468,90469],{"class":188,"line":9435},[186,90470,3867],{"emptyLinePlaceholder":1551},[186,90472,90473,90475,90477],{"class":188,"line":9440},[186,90474,1470],{"class":202},[186,90476,52089],{"class":523},[186,90478,552],{"class":202},[169,90480,90481],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[34,90483,90484],{"start":219},[22,90485,90486],{},"debugger",[169,90488,90489],{},[164,90490],{"alt":181,"src":90491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[169,90493,90494],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90496,90498],{"id":90497},"_416-处理this","4.16 处理this",[29,90500,90502],{"id":90501},"_4161-this的指向","4.16.1 this的指向",[34,90504,90505],{},[22,90506,90507],{},"普通函数的this",[169,90509,90510],{},[164,90511],{"alt":181,"src":90512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[34,90514,90515],{"start":49},[22,90516,90517],{},"箭头函数的this",[169,90519,90520],{},[164,90521],{"alt":181,"src":90522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[169,90524,90525],{},[164,90526],{"alt":181,"src":90527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[169,90529,90530],{},[164,90531],{"alt":181,"src":90532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[29,90534,90536],{"id":90535},"_4162-this的改变","4.16.2 this的改变",[169,90538,90539],{},"call() apply() bind()",[34,90541,90542],{},[22,90543,90544],{},"call()",[169,90546,90547],{},[164,90548],{"alt":181,"src":90549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[169,90551,90552],{},"两个作用：①调用函数；②改变this指向",[176,90554,90556],{"className":54514,"code":90555,"language":54516,"meta":181,"style":181},"\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",[183,90557,90558,90566,90574,90578,90583,90587,90592,90597,90602,90606,90611,90619],{"__ignoreMap":181},[186,90559,90560,90562,90564],{"class":188,"line":189},[186,90561,520],{"class":202},[186,90563,53247],{"class":523},[186,90565,552],{"class":202},[186,90567,90568,90570,90572],{"class":188,"line":49},[186,90569,53591],{"class":202},[186,90571,53260],{"class":523},[186,90573,552],{"class":202},[186,90575,90576],{"class":188,"line":219},[186,90577,72957],{"class":202},[186,90579,90580],{"class":188,"line":225},[186,90581,90582],{"class":202},"      uname: 'pink'\n",[186,90584,90585],{"class":188,"line":242},[186,90586,3654],{"class":202},[186,90588,90589],{"class":188,"line":248},[186,90590,90591],{"class":202},"    function fn(x, y) {\n",[186,90593,90594],{"class":188,"line":265},[186,90595,90596],{"class":202},"      console.log(this)  \u002F\u002Fwindow\n",[186,90598,90599],{"class":188,"line":271},[186,90600,90601],{"class":202},"      console.log(x + y)\n",[186,90603,90604],{"class":188,"line":288},[186,90605,3654],{"class":202},[186,90607,90608],{"class":188,"line":294},[186,90609,90610],{"class":202},"    fn.call(obj, 1, 2)\n",[186,90612,90613,90615,90617],{"class":188,"line":1212},[186,90614,53864],{"class":202},[186,90616,53260],{"class":523},[186,90618,552],{"class":202},[186,90620,90621,90623,90625],{"class":188,"line":1223},[186,90622,1470],{"class":202},[186,90624,53247],{"class":523},[186,90626,552],{"class":202},[169,90628,90629],{},[164,90630],{"alt":181,"src":90631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[34,90633,90634],{"start":49},[22,90635,90636],{},"apply()",[169,90638,90639],{},[164,90640],{"alt":181,"src":90641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[169,90643,90552],{},[169,90645,90646],{},"call传递的是普通参数，而apply必须传递的是数组",[176,90648,90650],{"className":52087,"code":90649,"language":52089,"meta":181,"style":181},"\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",[183,90651,90652,90662,90676,90680,90688,90702,90722,90734,90742,90746,90754,90762,90772,90779,90783,90788,90804,90816,90830,90834,90839,90858,90863,90867,90872,90877,90885,90890,90912,90917,90933,90949,90961,90965,90970,90989,90997,91005,91009],{"__ignoreMap":181},[186,90653,90654,90656,90658,90660],{"class":188,"line":189},[186,90655,52751],{"class":202},[186,90657,52754],{"class":523},[186,90659,52757],{"class":198},[186,90661,552],{"class":202},[186,90663,90664,90666,90668,90670,90672,90674],{"class":188,"line":49},[186,90665,520],{"class":202},[186,90667,52089],{"class":523},[186,90669,52768],{"class":198},[186,90671,529],{"class":202},[186,90673,52773],{"class":532},[186,90675,552],{"class":202},[186,90677,90678],{"class":188,"line":219},[186,90679,3867],{"emptyLinePlaceholder":1551},[186,90681,90682,90684,90686],{"class":188,"line":225},[186,90683,520],{"class":202},[186,90685,52786],{"class":523},[186,90687,552],{"class":202},[186,90689,90690,90692,90694,90696,90698,90700],{"class":188,"line":242},[186,90691,53591],{"class":202},[186,90693,52796],{"class":523},[186,90695,52799],{"class":198},[186,90697,529],{"class":202},[186,90699,52804],{"class":532},[186,90701,552],{"class":202},[186,90703,90704,90706,90708,90710,90712,90714,90716,90718,90720],{"class":188,"line":248},[186,90705,53591],{"class":202},[186,90707,52796],{"class":523},[186,90709,16382],{"class":198},[186,90711,529],{"class":202},[186,90713,52843],{"class":532},[186,90715,52823],{"class":198},[186,90717,529],{"class":202},[186,90719,52850],{"class":532},[186,90721,552],{"class":202},[186,90723,90724,90726,90728,90730,90732],{"class":188,"line":265},[186,90725,53591],{"class":202},[186,90727,52859],{"class":523},[186,90729,52862],{"class":202},[186,90731,52859],{"class":523},[186,90733,552],{"class":202},[186,90735,90736,90738,90740],{"class":188,"line":271},[186,90737,1470],{"class":202},[186,90739,52786],{"class":523},[186,90741,552],{"class":202},[186,90743,90744],{"class":188,"line":288},[186,90745,3867],{"emptyLinePlaceholder":1551},[186,90747,90748,90750,90752],{"class":188,"line":294},[186,90749,520],{"class":202},[186,90751,53247],{"class":523},[186,90753,552],{"class":202},[186,90755,90756,90758,90760],{"class":188,"line":1212},[186,90757,53591],{"class":202},[186,90759,53260],{"class":523},[186,90761,552],{"class":202},[186,90763,90764,90766,90768,90770],{"class":188,"line":1223},[186,90765,12684],{"class":669},[186,90767,71408],{"class":206},[186,90769,15027],{"class":669},[186,90771,622],{"class":202},[186,90773,90774,90776],{"class":188,"line":1236},[186,90775,73060],{"class":202},[186,90777,90778],{"class":206},"18\n",[186,90780,90781],{"class":188,"line":3096},[186,90782,3654],{"class":202},[186,90784,90785],{"class":188,"line":3110},[186,90786,90787],{"class":192},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[186,90789,90790,90792,90794,90796,90798,90800,90802],{"class":188,"line":3115},[186,90791,71521],{"class":669},[186,90793,90281],{"class":198},[186,90795,832],{"class":202},[186,90797,2428],{"class":835},[186,90799,13898],{"class":202},[186,90801,2453],{"class":835},[186,90803,13905],{"class":202},[186,90805,90806,90808,90810,90812,90814],{"class":188,"line":3121},[186,90807,59685],{"class":202},[186,90809,59688],{"class":198},[186,90811,832],{"class":202},[186,90813,88424],{"class":206},[186,90815,1629],{"class":202},[186,90817,90818,90820,90822,90825,90827],{"class":188,"line":3142},[186,90819,59685],{"class":202},[186,90821,59688],{"class":198},[186,90823,90824],{"class":202},"(x ",[186,90826,2091],{"class":669},[186,90828,90829],{"class":202}," y)\n",[186,90831,90832],{"class":188,"line":3147},[186,90833,3654],{"class":202},[186,90835,90836],{"class":188,"line":3161},[186,90837,90838],{"class":192},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[186,90840,90841,90844,90847,90850,90852,90854,90856],{"class":188,"line":3166},[186,90842,90843],{"class":202},"    fn.",[186,90845,90846],{"class":198},"apply",[186,90848,90849],{"class":202},"(obj, [",[186,90851,1829],{"class":206},[186,90853,13898],{"class":202},[186,90855,1697],{"class":206},[186,90857,6123],{"class":202},[186,90859,90860],{"class":188,"line":3195},[186,90861,90862],{"class":192},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[186,90864,90865],{"class":188,"line":3200},[186,90866,3867],{"emptyLinePlaceholder":1551},[186,90868,90869],{"class":188,"line":3217},[186,90870,90871],{"class":192},"    \u002F\u002F 使用场景：求数组最大值\n",[186,90873,90874],{"class":188,"line":3222},[186,90875,90876],{"class":192},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[186,90878,90879,90882],{"class":188,"line":3227},[186,90880,90881],{"class":192},"    \u002F\u002F console.log(max)",[186,90883,90884],{"class":192},"   \u002F\u002F3\n",[186,90886,90887],{"class":188,"line":3232},[186,90888,90889],{"class":192},"    \u002F\u002F 指向空或者Math都是可以的\n",[186,90891,90892,90894,90896,90898,90900,90902,90904,90906,90908,90910],{"class":188,"line":3246},[186,90893,12684],{"class":669},[186,90895,59136],{"class":206},[186,90897,15027],{"class":669},[186,90899,53673],{"class":202},[186,90901,1922],{"class":206},[186,90903,13898],{"class":202},[186,90905,2114],{"class":206},[186,90907,13898],{"class":202},[186,90909,2145],{"class":206},[186,90911,34701],{"class":202},[186,90913,90914],{"class":188,"line":3251},[186,90915,90916],{"class":192},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[186,90918,90919,90921,90923,90925,90928,90930],{"class":188,"line":4044},[186,90920,12684],{"class":669},[186,90922,7414],{"class":206},[186,90924,15027],{"class":669},[186,90926,90927],{"class":202}," Math.max.",[186,90929,90846],{"class":198},[186,90931,90932],{"class":202},"(Math, arr)\n",[186,90934,90935,90937,90940,90942,90945,90947],{"class":188,"line":4058},[186,90936,12684],{"class":669},[186,90938,90939],{"class":206}," min",[186,90941,15027],{"class":669},[186,90943,90944],{"class":202}," Math.min.",[186,90946,90846],{"class":198},[186,90948,90932],{"class":202},[186,90950,90951,90953,90955,90958],{"class":188,"line":4066},[186,90952,75186],{"class":202},[186,90954,59688],{"class":198},[186,90956,90957],{"class":202},"(max, min)     ",[186,90959,90960],{"class":192},"\u002F\u002F100,4\n",[186,90962,90963],{"class":188,"line":4071},[186,90964,3867],{"emptyLinePlaceholder":1551},[186,90966,90967],{"class":188,"line":4077},[186,90968,90969],{"class":192},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[186,90971,90972,90974,90976,90979,90981,90983,90986],{"class":188,"line":4083},[186,90973,75186],{"class":202},[186,90975,59688],{"class":198},[186,90977,90978],{"class":202},"(Max.",[186,90980,7478],{"class":198},[186,90982,832],{"class":202},[186,90984,90985],{"class":669},"...",[186,90987,90988],{"class":202},"arr))\n",[186,90990,90991,90993,90995],{"class":188,"line":4088},[186,90992,53864],{"class":202},[186,90994,53260],{"class":523},[186,90996,552],{"class":202},[186,90998,90999,91001,91003],{"class":188,"line":9411},[186,91000,1470],{"class":202},[186,91002,53247],{"class":523},[186,91004,552],{"class":202},[186,91006,91007],{"class":188,"line":9435},[186,91008,3867],{"emptyLinePlaceholder":1551},[186,91010,91011,91013,91015],{"class":188,"line":9440},[186,91012,1470],{"class":202},[186,91014,52089],{"class":523},[186,91016,552],{"class":202},[169,91018,91019],{},[164,91020],{"alt":181,"src":91021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[34,91023,91024],{"start":219},[22,91025,91026],{},"bind()",[169,91028,91029],{},[164,91030],{"alt":181,"src":91031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[169,91033,91034],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[169,91036,91037],{},"bind的语法跟call很相似",[176,91039,91041],{"className":54514,"code":91040,"language":54516,"meta":181,"style":181},"\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",[183,91042,91043,91051,91059,91063,91068,91072,91076,91081,91085,91090,91095,91100,91105,91110,91115,91120,91124,91132],{"__ignoreMap":181},[186,91044,91045,91047,91049],{"class":188,"line":189},[186,91046,520],{"class":202},[186,91048,53247],{"class":523},[186,91050,552],{"class":202},[186,91052,91053,91055,91057],{"class":188,"line":49},[186,91054,53591],{"class":202},[186,91056,53260],{"class":523},[186,91058,552],{"class":202},[186,91060,91061],{"class":188,"line":219},[186,91062,72957],{"class":202},[186,91064,91065],{"class":188,"line":225},[186,91066,91067],{"class":202},"      age: 18\n",[186,91069,91070],{"class":188,"line":242},[186,91071,3654],{"class":202},[186,91073,91074],{"class":188,"line":248},[186,91075,78576],{"class":202},[186,91077,91078],{"class":188,"line":265},[186,91079,91080],{"class":202},"      console.log(this)\n",[186,91082,91083],{"class":188,"line":271},[186,91084,3654],{"class":202},[186,91086,91087],{"class":188,"line":288},[186,91088,91089],{"class":202},"    \u002F\u002F 1.bind 不会调用函数\n",[186,91091,91092],{"class":188,"line":294},[186,91093,91094],{"class":202},"    \u002F\u002F 2.bind能改变this的指向\n",[186,91096,91097],{"class":188,"line":1212},[186,91098,91099],{"class":202},"    fn.bind()\n",[186,91101,91102],{"class":188,"line":1223},[186,91103,91104],{"class":202},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[186,91106,91107],{"class":188,"line":1236},[186,91108,91109],{"class":202},"    const fun = fn.bind(obj)\n",[186,91111,91112],{"class":188,"line":3096},[186,91113,91114],{"class":202},"    \u002F\u002F console.log(fun)\n",[186,91116,91117],{"class":188,"line":3110},[186,91118,91119],{"class":202},"    \u002F\u002F 调用,查看this的指向\n",[186,91121,91122],{"class":188,"line":3115},[186,91123,54098],{"class":202},[186,91125,91126,91128,91130],{"class":188,"line":3121},[186,91127,53864],{"class":202},[186,91129,53260],{"class":523},[186,91131,552],{"class":202},[186,91133,91134,91136,91138],{"class":188,"line":3142},[186,91135,1470],{"class":202},[186,91137,53247],{"class":523},[186,91139,552],{"class":202},[169,91141,91142],{},[164,91143],{"alt":181,"src":91144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[34,91146,91147],{"start":225},[22,91148,91149],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[176,91151,91153],{"className":54514,"code":91152,"language":54516,"meta":181,"style":181},"\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",[183,91154,91155,91163,91176,91184,91189,91193,91198,91203,91208,91213,91218,91223,91228,91233,91237,91245],{"__ignoreMap":181},[186,91156,91157,91159,91161],{"class":188,"line":189},[186,91158,520],{"class":202},[186,91160,53247],{"class":523},[186,91162,552],{"class":202},[186,91164,91165,91167,91169,91172,91174],{"class":188,"line":49},[186,91166,53591],{"class":202},[186,91168,55332],{"class":523},[186,91170,91171],{"class":202},">禁用\u003C\u002F",[186,91173,55332],{"class":523},[186,91175,552],{"class":202},[186,91177,91178,91180,91182],{"class":188,"line":219},[186,91179,53591],{"class":202},[186,91181,53260],{"class":523},[186,91183,552],{"class":202},[186,91185,91186],{"class":188,"line":225},[186,91187,91188],{"class":202},"    const btn = document.querySelector('button')\n",[186,91190,91191],{"class":188,"line":242},[186,91192,60457],{"class":202},[186,91194,91195],{"class":188,"line":248},[186,91196,91197],{"class":202},"      this.disabled = true\n",[186,91199,91200],{"class":188,"line":265},[186,91201,91202],{"class":202},"      \u002F\u002F 定时器是window进行调用的\n",[186,91204,91205],{"class":188,"line":271},[186,91206,91207],{"class":202},"      setTimeout(function () {\n",[186,91209,91210],{"class":188,"line":288},[186,91211,91212],{"class":202},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[186,91214,91215],{"class":188,"line":294},[186,91216,91217],{"class":202},"        this.disabled = false\n",[186,91219,91220],{"class":188,"line":1212},[186,91221,91222],{"class":202},"      }.bind(this), 2000)\n",[186,91224,91225],{"class":188,"line":1223},[186,91226,91227],{"class":202},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[186,91229,91230],{"class":188,"line":1236},[186,91231,91232],{"class":202},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[186,91234,91235],{"class":188,"line":3096},[186,91236,34916],{"class":202},[186,91238,91239,91241,91243],{"class":188,"line":3110},[186,91240,53864],{"class":202},[186,91242,53260],{"class":523},[186,91244,552],{"class":202},[186,91246,91247,91249,91251],{"class":188,"line":3115},[186,91248,1470],{"class":202},[186,91250,53247],{"class":523},[186,91252,552],{"class":202},[34,91254,91255],{"start":242},[22,91256,23414],{},[169,91258,91259],{},[164,91260],{"alt":181,"src":91261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91263,91265],{"id":91264},"_417-性能优化","4.17 性能优化",[29,91267,91269],{"id":91268},"_4171-防抖","4.17.1 防抖",[169,91271,91272],{},[164,91273],{"alt":181,"src":91274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[169,91276,91277],{},[54,91278,91279],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[169,91281,91282],{},"防抖实现方式：",[19,91284,91285],{},[22,91286,91287],{},"lodash 提供了防抖处理",[169,91289,91290],{},"_.debounce(func,[wait=0],[options={}])",[169,91292,91293],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[176,91295,91297],{"className":52087,"code":91296,"language":52089,"meta":181,"style":181},"\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",[183,91298,91299,91309,91323,91327,91335,91349,91369,91381,91389,91395,91405,91417,91429,91440,91452,91462,91472,91485,91489,91497,91505,91509,91517,91535,91553,91561,91580,91590,91599,91610,91615,91619,91624,91629,91634,91659,91667,91675,91679],{"__ignoreMap":181},[186,91300,91301,91303,91305,91307],{"class":188,"line":189},[186,91302,52751],{"class":202},[186,91304,52754],{"class":523},[186,91306,52757],{"class":198},[186,91308,552],{"class":202},[186,91310,91311,91313,91315,91317,91319,91321],{"class":188,"line":49},[186,91312,520],{"class":202},[186,91314,52089],{"class":523},[186,91316,52768],{"class":198},[186,91318,529],{"class":202},[186,91320,52773],{"class":532},[186,91322,552],{"class":202},[186,91324,91325],{"class":188,"line":219},[186,91326,3867],{"emptyLinePlaceholder":1551},[186,91328,91329,91331,91333],{"class":188,"line":225},[186,91330,520],{"class":202},[186,91332,52786],{"class":523},[186,91334,552],{"class":202},[186,91336,91337,91339,91341,91343,91345,91347],{"class":188,"line":242},[186,91338,53591],{"class":202},[186,91340,52796],{"class":523},[186,91342,52799],{"class":198},[186,91344,529],{"class":202},[186,91346,52804],{"class":532},[186,91348,552],{"class":202},[186,91350,91351,91353,91355,91357,91359,91361,91363,91365,91367],{"class":188,"line":248},[186,91352,53591],{"class":202},[186,91354,52796],{"class":523},[186,91356,16382],{"class":198},[186,91358,529],{"class":202},[186,91360,52843],{"class":532},[186,91362,52823],{"class":198},[186,91364,529],{"class":202},[186,91366,52850],{"class":532},[186,91368,552],{"class":202},[186,91370,91371,91373,91375,91377,91379],{"class":188,"line":265},[186,91372,53591],{"class":202},[186,91374,52859],{"class":523},[186,91376,52862],{"class":202},[186,91378,52859],{"class":523},[186,91380,552],{"class":202},[186,91382,91383,91385,91387],{"class":188,"line":271},[186,91384,53591],{"class":202},[186,91386,1524],{"class":523},[186,91388,552],{"class":202},[186,91390,91391,91393],{"class":188,"line":288},[186,91392,56197],{"class":198},[186,91394,622],{"class":202},[186,91396,91397,91399,91401,91403],{"class":188,"line":294},[186,91398,74030],{"class":206},[186,91400,210],{"class":202},[186,91402,61946],{"class":206},[186,91404,634],{"class":202},[186,91406,91407,91409,91411,91413,91415],{"class":188,"line":1212},[186,91408,56215],{"class":206},[186,91410,210],{"class":202},[186,91412,3190],{"class":206},[186,91414,804],{"class":669},[186,91416,634],{"class":202},[186,91418,91419,91421,91423,91425,91427],{"class":188,"line":1223},[186,91420,56229],{"class":206},[186,91422,210],{"class":202},[186,91424,3190],{"class":206},[186,91426,804],{"class":669},[186,91428,634],{"class":202},[186,91430,91431,91433,91435,91438],{"class":188,"line":1236},[186,91432,56327],{"class":206},[186,91434,210],{"class":202},[186,91436,91437],{"class":206},"gray",[186,91439,634],{"class":202},[186,91441,91442,91444,91446,91448,91450],{"class":188,"line":3096},[186,91443,56365],{"class":206},[186,91445,210],{"class":202},[186,91447,2433],{"class":206},[186,91449,804],{"class":669},[186,91451,634],{"class":202},[186,91453,91454,91456,91458,91460],{"class":188,"line":3110},[186,91455,58857],{"class":206},[186,91457,210],{"class":202},[186,91459,62283],{"class":206},[186,91461,634],{"class":202},[186,91463,91464,91466,91468,91470],{"class":188,"line":3115},[186,91465,58727],{"class":206},[186,91467,210],{"class":202},[186,91469,53042],{"class":206},[186,91471,634],{"class":202},[186,91473,91474,91477,91479,91481,91483],{"class":188,"line":3121},[186,91475,91476],{"class":206},"      padding-top",[186,91478,210],{"class":202},[186,91480,1930],{"class":206},[186,91482,804],{"class":669},[186,91484,634],{"class":202},[186,91486,91487],{"class":188,"line":3142},[186,91488,3654],{"class":202},[186,91490,91491,91493,91495],{"class":188,"line":3147},[186,91492,53864],{"class":202},[186,91494,1524],{"class":523},[186,91496,552],{"class":202},[186,91498,91499,91501,91503],{"class":188,"line":3161},[186,91500,1470],{"class":202},[186,91502,52786],{"class":523},[186,91504,552],{"class":202},[186,91506,91507],{"class":188,"line":3166},[186,91508,3867],{"emptyLinePlaceholder":1551},[186,91510,91511,91513,91515],{"class":188,"line":3195},[186,91512,520],{"class":202},[186,91514,53247],{"class":523},[186,91516,552],{"class":202},[186,91518,91519,91521,91523,91525,91527,91529,91531,91533],{"class":188,"line":3200},[186,91520,53591],{"class":202},[186,91522,1450],{"class":523},[186,91524,1453],{"class":198},[186,91526,529],{"class":202},[186,91528,54937],{"class":532},[186,91530,56755],{"class":202},[186,91532,1450],{"class":523},[186,91534,552],{"class":202},[186,91536,91537,91539,91541,91543,91545,91547,91549,91551],{"class":188,"line":3217},[186,91538,53591],{"class":202},[186,91540,53260],{"class":523},[186,91542,526],{"class":198},[186,91544,529],{"class":202},[186,91546,89705],{"class":532},[186,91548,56755],{"class":202},[186,91550,53260],{"class":523},[186,91552,552],{"class":202},[186,91554,91555,91557,91559],{"class":188,"line":3222},[186,91556,53591],{"class":202},[186,91558,53260],{"class":523},[186,91560,552],{"class":202},[186,91562,91563,91565,91567,91569,91571,91573,91575,91578],{"class":188,"line":3227},[186,91564,12684],{"class":669},[186,91566,88364],{"class":206},[186,91568,15027],{"class":669},[186,91570,55841],{"class":202},[186,91572,55844],{"class":198},[186,91574,832],{"class":202},[186,91576,91577],{"class":532},"'.box'",[186,91579,1629],{"class":202},[186,91581,91582,91584,91586,91588],{"class":188,"line":3232},[186,91583,53666],{"class":669},[186,91585,10901],{"class":202},[186,91587,529],{"class":669},[186,91589,48787],{"class":206},[186,91591,91592,91594,91597],{"class":188,"line":3246},[186,91593,71521],{"class":669},[186,91595,91596],{"class":198}," mouseMove",[186,91598,12316],{"class":202},[186,91600,91601,91604,91606,91608],{"class":188,"line":3251},[186,91602,91603],{"class":202},"      box.innerHTML ",[186,91605,529],{"class":669},[186,91607,4498],{"class":202},[186,91609,4169],{"class":669},[186,91611,91612],{"class":188,"line":4044},[186,91613,91614],{"class":192},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[186,91616,91617],{"class":188,"line":4058},[186,91618,3654],{"class":202},[186,91620,91621],{"class":188,"line":4066},[186,91622,91623],{"class":192},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[186,91625,91626],{"class":188,"line":4071},[186,91627,91628],{"class":192},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[186,91630,91631],{"class":188,"line":4077},[186,91632,91633],{"class":192},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[186,91635,91636,91639,91641,91643,91646,91649,91652,91655,91657],{"class":188,"line":4083},[186,91637,91638],{"class":202},"    box.",[186,91640,59254],{"class":198},[186,91642,832],{"class":202},[186,91644,91645],{"class":532},"'mousemove'",[186,91647,91648],{"class":202},", _.",[186,91650,91651],{"class":198},"debounce",[186,91653,91654],{"class":202},"(mouseMove, ",[186,91656,66511],{"class":206},[186,91658,31952],{"class":202},[186,91660,91661,91663,91665],{"class":188,"line":4088},[186,91662,53864],{"class":202},[186,91664,53260],{"class":523},[186,91666,552],{"class":202},[186,91668,91669,91671,91673],{"class":188,"line":9411},[186,91670,1470],{"class":202},[186,91672,53247],{"class":523},[186,91674,552],{"class":202},[186,91676,91677],{"class":188,"line":9435},[186,91678,3867],{"emptyLinePlaceholder":1551},[186,91680,91681,91683,91685],{"class":188,"line":9440},[186,91682,1470],{"class":202},[186,91684,52089],{"class":523},[186,91686,552],{"class":202},[19,91688,91689],{},[22,91690,91691],{},"手写一个防抖函数来处理",[169,91693,91694],{},"防抖的核心就是利用定时器来实现的：",[169,91696,91697],{},"①声明一个定时器变量",[169,91699,91700],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[169,91702,91703],{},"③如果没有定时器则开启定时器，记得存到变量里面",[176,91705,91707],{"className":52087,"code":91706,"language":52089,"meta":181,"style":181},"\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",[183,91708,91709,91719,91733,91737,91745,91759,91779,91791,91799,91805,91815,91827,91839,91849,91861,91871,91881,91893,91897,91905,91913,91917,91925,91943,91961,91969,91987,91997,92005,92015,92019,92023,92027,92032,92037,92042,92047,92052,92057,92075,92082,92087,92095,92100,92113,92129,92139,92144,92148,92152,92172,92176,92181,92186,92191,92196,92204,92212,92216],{"__ignoreMap":181},[186,91710,91711,91713,91715,91717],{"class":188,"line":189},[186,91712,52751],{"class":202},[186,91714,52754],{"class":523},[186,91716,52757],{"class":198},[186,91718,552],{"class":202},[186,91720,91721,91723,91725,91727,91729,91731],{"class":188,"line":49},[186,91722,520],{"class":202},[186,91724,52089],{"class":523},[186,91726,52768],{"class":198},[186,91728,529],{"class":202},[186,91730,52773],{"class":532},[186,91732,552],{"class":202},[186,91734,91735],{"class":188,"line":219},[186,91736,3867],{"emptyLinePlaceholder":1551},[186,91738,91739,91741,91743],{"class":188,"line":225},[186,91740,520],{"class":202},[186,91742,52786],{"class":523},[186,91744,552],{"class":202},[186,91746,91747,91749,91751,91753,91755,91757],{"class":188,"line":242},[186,91748,53591],{"class":202},[186,91750,52796],{"class":523},[186,91752,52799],{"class":198},[186,91754,529],{"class":202},[186,91756,52804],{"class":532},[186,91758,552],{"class":202},[186,91760,91761,91763,91765,91767,91769,91771,91773,91775,91777],{"class":188,"line":248},[186,91762,53591],{"class":202},[186,91764,52796],{"class":523},[186,91766,16382],{"class":198},[186,91768,529],{"class":202},[186,91770,52843],{"class":532},[186,91772,52823],{"class":198},[186,91774,529],{"class":202},[186,91776,52850],{"class":532},[186,91778,552],{"class":202},[186,91780,91781,91783,91785,91787,91789],{"class":188,"line":265},[186,91782,53591],{"class":202},[186,91784,52859],{"class":523},[186,91786,52862],{"class":202},[186,91788,52859],{"class":523},[186,91790,552],{"class":202},[186,91792,91793,91795,91797],{"class":188,"line":271},[186,91794,53591],{"class":202},[186,91796,1524],{"class":523},[186,91798,552],{"class":202},[186,91800,91801,91803],{"class":188,"line":288},[186,91802,56197],{"class":198},[186,91804,622],{"class":202},[186,91806,91807,91809,91811,91813],{"class":188,"line":294},[186,91808,74030],{"class":206},[186,91810,210],{"class":202},[186,91812,61946],{"class":206},[186,91814,634],{"class":202},[186,91816,91817,91819,91821,91823,91825],{"class":188,"line":1212},[186,91818,56215],{"class":206},[186,91820,210],{"class":202},[186,91822,3190],{"class":206},[186,91824,804],{"class":669},[186,91826,634],{"class":202},[186,91828,91829,91831,91833,91835,91837],{"class":188,"line":1223},[186,91830,56229],{"class":206},[186,91832,210],{"class":202},[186,91834,3190],{"class":206},[186,91836,804],{"class":669},[186,91838,634],{"class":202},[186,91840,91841,91843,91845,91847],{"class":188,"line":1236},[186,91842,56327],{"class":206},[186,91844,210],{"class":202},[186,91846,91437],{"class":206},[186,91848,634],{"class":202},[186,91850,91851,91853,91855,91857,91859],{"class":188,"line":3096},[186,91852,56365],{"class":206},[186,91854,210],{"class":202},[186,91856,2433],{"class":206},[186,91858,804],{"class":669},[186,91860,634],{"class":202},[186,91862,91863,91865,91867,91869],{"class":188,"line":3110},[186,91864,58857],{"class":206},[186,91866,210],{"class":202},[186,91868,62283],{"class":206},[186,91870,634],{"class":202},[186,91872,91873,91875,91877,91879],{"class":188,"line":3115},[186,91874,58727],{"class":206},[186,91876,210],{"class":202},[186,91878,53042],{"class":206},[186,91880,634],{"class":202},[186,91882,91883,91885,91887,91889,91891],{"class":188,"line":3121},[186,91884,91476],{"class":206},[186,91886,210],{"class":202},[186,91888,1930],{"class":206},[186,91890,804],{"class":669},[186,91892,634],{"class":202},[186,91894,91895],{"class":188,"line":3142},[186,91896,3654],{"class":202},[186,91898,91899,91901,91903],{"class":188,"line":3147},[186,91900,53864],{"class":202},[186,91902,1524],{"class":523},[186,91904,552],{"class":202},[186,91906,91907,91909,91911],{"class":188,"line":3161},[186,91908,1470],{"class":202},[186,91910,52786],{"class":523},[186,91912,552],{"class":202},[186,91914,91915],{"class":188,"line":3166},[186,91916,3867],{"emptyLinePlaceholder":1551},[186,91918,91919,91921,91923],{"class":188,"line":3195},[186,91920,520],{"class":202},[186,91922,53247],{"class":523},[186,91924,552],{"class":202},[186,91926,91927,91929,91931,91933,91935,91937,91939,91941],{"class":188,"line":3200},[186,91928,53591],{"class":202},[186,91930,1450],{"class":523},[186,91932,1453],{"class":198},[186,91934,529],{"class":202},[186,91936,54937],{"class":532},[186,91938,56755],{"class":202},[186,91940,1450],{"class":523},[186,91942,552],{"class":202},[186,91944,91945,91947,91949,91951,91953,91955,91957,91959],{"class":188,"line":3217},[186,91946,53591],{"class":202},[186,91948,53260],{"class":523},[186,91950,526],{"class":198},[186,91952,529],{"class":202},[186,91954,89705],{"class":532},[186,91956,56755],{"class":202},[186,91958,53260],{"class":523},[186,91960,552],{"class":202},[186,91962,91963,91965,91967],{"class":188,"line":3222},[186,91964,53591],{"class":202},[186,91966,53260],{"class":523},[186,91968,552],{"class":202},[186,91970,91971,91973,91975,91977,91979,91981,91983,91985],{"class":188,"line":3227},[186,91972,12684],{"class":669},[186,91974,88364],{"class":206},[186,91976,15027],{"class":669},[186,91978,55841],{"class":202},[186,91980,55844],{"class":198},[186,91982,832],{"class":202},[186,91984,91577],{"class":532},[186,91986,1629],{"class":202},[186,91988,91989,91991,91993,91995],{"class":188,"line":3232},[186,91990,53666],{"class":669},[186,91992,10901],{"class":202},[186,91994,529],{"class":669},[186,91996,48787],{"class":206},[186,91998,91999,92001,92003],{"class":188,"line":3246},[186,92000,71521],{"class":669},[186,92002,91596],{"class":198},[186,92004,12316],{"class":202},[186,92006,92007,92009,92011,92013],{"class":188,"line":3251},[186,92008,91603],{"class":202},[186,92010,529],{"class":669},[186,92012,4498],{"class":202},[186,92014,4169],{"class":669},[186,92016,92017],{"class":188,"line":4044},[186,92018,91614],{"class":192},[186,92020,92021],{"class":188,"line":4058},[186,92022,3654],{"class":202},[186,92024,92025],{"class":188,"line":4066},[186,92026,91623],{"class":192},[186,92028,92029],{"class":188,"line":4071},[186,92030,92031],{"class":192},"    \u002F\u002F 手写防抖函数\n",[186,92033,92034],{"class":188,"line":4077},[186,92035,92036],{"class":192},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[186,92038,92039],{"class":188,"line":4083},[186,92040,92041],{"class":192},"    \u002F\u002F 1.声明定时器变量\n",[186,92043,92044],{"class":188,"line":4088},[186,92045,92046],{"class":192},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[186,92048,92049],{"class":188,"line":9411},[186,92050,92051],{"class":192},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[186,92053,92054],{"class":188,"line":9435},[186,92055,92056],{"class":192},"    \u002F\u002F 4.定时器里面写函数调用\n",[186,92058,92059,92061,92064,92066,92069,92071,92073],{"class":188,"line":9440},[186,92060,71521],{"class":669},[186,92062,92063],{"class":198}," debounce",[186,92065,832],{"class":202},[186,92067,92068],{"class":835},"fn",[186,92070,13898],{"class":202},[186,92072,2328],{"class":835},[186,92074,13905],{"class":202},[186,92076,92077,92079],{"class":188,"line":9446},[186,92078,81205],{"class":669},[186,92080,92081],{"class":202}," timer\n",[186,92083,92084],{"class":188,"line":9473},[186,92085,92086],{"class":192},"      \u002F\u002F return 返回一个匿名函数\n",[186,92088,92089,92091,92093],{"class":188,"line":9478},[186,92090,75415],{"class":669},[186,92092,60359],{"class":669},[186,92094,55897],{"class":202},[186,92096,92097],{"class":188,"line":9484},[186,92098,92099],{"class":192},"        \u002F\u002F 这里边写第二三四步\n",[186,92101,92102,92104,92107,92110],{"class":188,"line":9496},[186,92103,3964],{"class":669},[186,92105,92106],{"class":202}," (timer) ",[186,92108,92109],{"class":198},"clearTimeout",[186,92111,92112],{"class":202},"(timer)\n",[186,92114,92115,92118,92120,92123,92125,92127],{"class":188,"line":9508},[186,92116,92117],{"class":202},"        timer ",[186,92119,529],{"class":669},[186,92121,92122],{"class":198}," setTimeout",[186,92124,832],{"class":202},[186,92126,55894],{"class":669},[186,92128,55897],{"class":202},[186,92130,92131,92134,92136],{"class":188,"line":9520},[186,92132,92133],{"class":198},"          fn",[186,92135,14513],{"class":202},[186,92137,92138],{"class":192},"\u002F\u002F加小括号调用fn }, t)\n",[186,92140,92141],{"class":188,"line":11179},[186,92142,92143],{"class":202},"        }, t)\n",[186,92145,92146],{"class":188,"line":11204},[186,92147,53845],{"class":202},[186,92149,92150],{"class":188,"line":11227},[186,92151,3654],{"class":202},[186,92153,92154,92156,92158,92160,92162,92164,92166,92168,92170],{"class":188,"line":11251},[186,92155,91638],{"class":202},[186,92157,59254],{"class":198},[186,92159,832],{"class":202},[186,92161,91645],{"class":532},[186,92163,13898],{"class":202},[186,92165,91651],{"class":198},[186,92167,91654],{"class":202},[186,92169,66511],{"class":206},[186,92171,31952],{"class":202},[186,92173,92174],{"class":188,"line":11256},[186,92175,3867],{"emptyLinePlaceholder":1551},[186,92177,92178],{"class":188,"line":11261},[186,92179,92180],{"class":192},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[186,92182,92183],{"class":188,"line":11266},[186,92184,92185],{"class":192},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[186,92187,92188],{"class":188,"line":11275},[186,92189,92190],{"class":192},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[186,92192,92193],{"class":188,"line":11280},[186,92194,92195],{"class":192},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[186,92197,92198,92200,92202],{"class":188,"line":11286},[186,92199,53864],{"class":202},[186,92201,53260],{"class":523},[186,92203,552],{"class":202},[186,92205,92206,92208,92210],{"class":188,"line":11307},[186,92207,1470],{"class":202},[186,92209,53247],{"class":523},[186,92211,552],{"class":202},[186,92213,92214],{"class":188,"line":11313},[186,92215,3867],{"emptyLinePlaceholder":1551},[186,92217,92218,92220,92222],{"class":188,"line":11327},[186,92219,1470],{"class":202},[186,92221,52089],{"class":523},[186,92223,552],{"class":202},[29,92225,92227],{"id":92226},"_4172-节流","4.17.2 节流",[169,92229,92230],{},[164,92231],{"alt":181,"src":92232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[169,92234,92235],{},[164,92236],{"alt":181,"src":92237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[169,92239,92240],{},[54,92241,92242],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[169,92244,92245],{},"实现方式：",[19,92247,92248],{},[22,92249,92250],{},"lodash 提供的节流函数来处理",[169,92252,92253],{},"_.throttle(func,[wait=0],[options=])",[169,92255,92256],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[176,92258,92260],{"className":52087,"code":92259,"language":52089,"meta":181,"style":181},"\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",[183,92261,92262,92272,92286,92290,92298,92312,92332,92344,92352,92358,92368,92380,92392,92402,92414,92424,92434,92446,92450,92458,92466,92470,92478,92496,92514,92522,92540,92550,92558,92568,92572,92576,92580,92585,92590,92611,92619,92627,92631],{"__ignoreMap":181},[186,92263,92264,92266,92268,92270],{"class":188,"line":189},[186,92265,52751],{"class":202},[186,92267,52754],{"class":523},[186,92269,52757],{"class":198},[186,92271,552],{"class":202},[186,92273,92274,92276,92278,92280,92282,92284],{"class":188,"line":49},[186,92275,520],{"class":202},[186,92277,52089],{"class":523},[186,92279,52768],{"class":198},[186,92281,529],{"class":202},[186,92283,52773],{"class":532},[186,92285,552],{"class":202},[186,92287,92288],{"class":188,"line":219},[186,92289,3867],{"emptyLinePlaceholder":1551},[186,92291,92292,92294,92296],{"class":188,"line":225},[186,92293,520],{"class":202},[186,92295,52786],{"class":523},[186,92297,552],{"class":202},[186,92299,92300,92302,92304,92306,92308,92310],{"class":188,"line":242},[186,92301,53591],{"class":202},[186,92303,52796],{"class":523},[186,92305,52799],{"class":198},[186,92307,529],{"class":202},[186,92309,52804],{"class":532},[186,92311,552],{"class":202},[186,92313,92314,92316,92318,92320,92322,92324,92326,92328,92330],{"class":188,"line":248},[186,92315,53591],{"class":202},[186,92317,52796],{"class":523},[186,92319,16382],{"class":198},[186,92321,529],{"class":202},[186,92323,52843],{"class":532},[186,92325,52823],{"class":198},[186,92327,529],{"class":202},[186,92329,52850],{"class":532},[186,92331,552],{"class":202},[186,92333,92334,92336,92338,92340,92342],{"class":188,"line":265},[186,92335,53591],{"class":202},[186,92337,52859],{"class":523},[186,92339,52862],{"class":202},[186,92341,52859],{"class":523},[186,92343,552],{"class":202},[186,92345,92346,92348,92350],{"class":188,"line":271},[186,92347,53591],{"class":202},[186,92349,1524],{"class":523},[186,92351,552],{"class":202},[186,92353,92354,92356],{"class":188,"line":288},[186,92355,56197],{"class":198},[186,92357,622],{"class":202},[186,92359,92360,92362,92364,92366],{"class":188,"line":294},[186,92361,74030],{"class":206},[186,92363,210],{"class":202},[186,92365,61946],{"class":206},[186,92367,634],{"class":202},[186,92369,92370,92372,92374,92376,92378],{"class":188,"line":1212},[186,92371,56215],{"class":206},[186,92373,210],{"class":202},[186,92375,3190],{"class":206},[186,92377,804],{"class":669},[186,92379,634],{"class":202},[186,92381,92382,92384,92386,92388,92390],{"class":188,"line":1223},[186,92383,56229],{"class":206},[186,92385,210],{"class":202},[186,92387,3190],{"class":206},[186,92389,804],{"class":669},[186,92391,634],{"class":202},[186,92393,92394,92396,92398,92400],{"class":188,"line":1236},[186,92395,56327],{"class":206},[186,92397,210],{"class":202},[186,92399,91437],{"class":206},[186,92401,634],{"class":202},[186,92403,92404,92406,92408,92410,92412],{"class":188,"line":3096},[186,92405,56365],{"class":206},[186,92407,210],{"class":202},[186,92409,2433],{"class":206},[186,92411,804],{"class":669},[186,92413,634],{"class":202},[186,92415,92416,92418,92420,92422],{"class":188,"line":3110},[186,92417,58857],{"class":206},[186,92419,210],{"class":202},[186,92421,62283],{"class":206},[186,92423,634],{"class":202},[186,92425,92426,92428,92430,92432],{"class":188,"line":3115},[186,92427,58727],{"class":206},[186,92429,210],{"class":202},[186,92431,53042],{"class":206},[186,92433,634],{"class":202},[186,92435,92436,92438,92440,92442,92444],{"class":188,"line":3121},[186,92437,91476],{"class":206},[186,92439,210],{"class":202},[186,92441,1930],{"class":206},[186,92443,804],{"class":669},[186,92445,634],{"class":202},[186,92447,92448],{"class":188,"line":3142},[186,92449,3654],{"class":202},[186,92451,92452,92454,92456],{"class":188,"line":3147},[186,92453,53864],{"class":202},[186,92455,1524],{"class":523},[186,92457,552],{"class":202},[186,92459,92460,92462,92464],{"class":188,"line":3161},[186,92461,1470],{"class":202},[186,92463,52786],{"class":523},[186,92465,552],{"class":202},[186,92467,92468],{"class":188,"line":3166},[186,92469,3867],{"emptyLinePlaceholder":1551},[186,92471,92472,92474,92476],{"class":188,"line":3195},[186,92473,520],{"class":202},[186,92475,53247],{"class":523},[186,92477,552],{"class":202},[186,92479,92480,92482,92484,92486,92488,92490,92492,92494],{"class":188,"line":3200},[186,92481,53591],{"class":202},[186,92483,1450],{"class":523},[186,92485,1453],{"class":198},[186,92487,529],{"class":202},[186,92489,54937],{"class":532},[186,92491,56755],{"class":202},[186,92493,1450],{"class":523},[186,92495,552],{"class":202},[186,92497,92498,92500,92502,92504,92506,92508,92510,92512],{"class":188,"line":3217},[186,92499,53591],{"class":202},[186,92501,53260],{"class":523},[186,92503,526],{"class":198},[186,92505,529],{"class":202},[186,92507,89705],{"class":532},[186,92509,56755],{"class":202},[186,92511,53260],{"class":523},[186,92513,552],{"class":202},[186,92515,92516,92518,92520],{"class":188,"line":3222},[186,92517,53591],{"class":202},[186,92519,53260],{"class":523},[186,92521,552],{"class":202},[186,92523,92524,92526,92528,92530,92532,92534,92536,92538],{"class":188,"line":3227},[186,92525,12684],{"class":669},[186,92527,88364],{"class":206},[186,92529,15027],{"class":669},[186,92531,55841],{"class":202},[186,92533,55844],{"class":198},[186,92535,832],{"class":202},[186,92537,91577],{"class":532},[186,92539,1629],{"class":202},[186,92541,92542,92544,92546,92548],{"class":188,"line":3232},[186,92543,53666],{"class":669},[186,92545,10901],{"class":202},[186,92547,529],{"class":669},[186,92549,48787],{"class":206},[186,92551,92552,92554,92556],{"class":188,"line":3246},[186,92553,71521],{"class":669},[186,92555,91596],{"class":198},[186,92557,12316],{"class":202},[186,92559,92560,92562,92564,92566],{"class":188,"line":3251},[186,92561,91603],{"class":202},[186,92563,529],{"class":669},[186,92565,4498],{"class":202},[186,92567,4169],{"class":669},[186,92569,92570],{"class":188,"line":4044},[186,92571,91614],{"class":192},[186,92573,92574],{"class":188,"line":4058},[186,92575,3654],{"class":202},[186,92577,92578],{"class":188,"line":4066},[186,92579,91623],{"class":192},[186,92581,92582],{"class":188,"line":4071},[186,92583,92584],{"class":192},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[186,92586,92587],{"class":188,"line":4077},[186,92588,92589],{"class":192},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[186,92591,92592,92594,92596,92598,92600,92602,92605,92607,92609],{"class":188,"line":4083},[186,92593,91638],{"class":202},[186,92595,59254],{"class":198},[186,92597,832],{"class":202},[186,92599,91645],{"class":532},[186,92601,91648],{"class":202},[186,92603,92604],{"class":198},"throttle",[186,92606,91654],{"class":202},[186,92608,66511],{"class":206},[186,92610,31952],{"class":202},[186,92612,92613,92615,92617],{"class":188,"line":4088},[186,92614,53864],{"class":202},[186,92616,53260],{"class":523},[186,92618,552],{"class":202},[186,92620,92621,92623,92625],{"class":188,"line":9411},[186,92622,1470],{"class":202},[186,92624,53247],{"class":523},[186,92626,552],{"class":202},[186,92628,92629],{"class":188,"line":9435},[186,92630,3867],{"emptyLinePlaceholder":1551},[186,92632,92633,92635,92637],{"class":188,"line":9440},[186,92634,1470],{"class":202},[186,92636,52089],{"class":523},[186,92638,552],{"class":202},[19,92640,92641],{},[22,92642,92643],{},"手写一个节流函数来处理",[169,92645,72386],{},[169,92647,91697],{},[169,92649,92650],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[169,92652,92653],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[176,92655,92657],{"className":52087,"code":92656,"language":52089,"meta":181,"style":181},"\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",[183,92658,92659,92669,92683,92687,92695,92709,92729,92741,92749,92755,92765,92777,92789,92799,92811,92821,92831,92843,92847,92855,92863,92867,92875,92893,92911,92919,92937,92947,92955,92965,92969,92973,92977,92982,92987,92992,92997,93002,93007,93024,93030,93038,93049,93064,93071,93076,93081,93091,93096,93101,93106,93110,93114,93118,93138,93146,93154,93158],{"__ignoreMap":181},[186,92660,92661,92663,92665,92667],{"class":188,"line":189},[186,92662,52751],{"class":202},[186,92664,52754],{"class":523},[186,92666,52757],{"class":198},[186,92668,552],{"class":202},[186,92670,92671,92673,92675,92677,92679,92681],{"class":188,"line":49},[186,92672,520],{"class":202},[186,92674,52089],{"class":523},[186,92676,52768],{"class":198},[186,92678,529],{"class":202},[186,92680,52773],{"class":532},[186,92682,552],{"class":202},[186,92684,92685],{"class":188,"line":219},[186,92686,3867],{"emptyLinePlaceholder":1551},[186,92688,92689,92691,92693],{"class":188,"line":225},[186,92690,520],{"class":202},[186,92692,52786],{"class":523},[186,92694,552],{"class":202},[186,92696,92697,92699,92701,92703,92705,92707],{"class":188,"line":242},[186,92698,53591],{"class":202},[186,92700,52796],{"class":523},[186,92702,52799],{"class":198},[186,92704,529],{"class":202},[186,92706,52804],{"class":532},[186,92708,552],{"class":202},[186,92710,92711,92713,92715,92717,92719,92721,92723,92725,92727],{"class":188,"line":248},[186,92712,53591],{"class":202},[186,92714,52796],{"class":523},[186,92716,16382],{"class":198},[186,92718,529],{"class":202},[186,92720,52843],{"class":532},[186,92722,52823],{"class":198},[186,92724,529],{"class":202},[186,92726,52850],{"class":532},[186,92728,552],{"class":202},[186,92730,92731,92733,92735,92737,92739],{"class":188,"line":265},[186,92732,53591],{"class":202},[186,92734,52859],{"class":523},[186,92736,52862],{"class":202},[186,92738,52859],{"class":523},[186,92740,552],{"class":202},[186,92742,92743,92745,92747],{"class":188,"line":271},[186,92744,53591],{"class":202},[186,92746,1524],{"class":523},[186,92748,552],{"class":202},[186,92750,92751,92753],{"class":188,"line":288},[186,92752,56197],{"class":198},[186,92754,622],{"class":202},[186,92756,92757,92759,92761,92763],{"class":188,"line":294},[186,92758,74030],{"class":206},[186,92760,210],{"class":202},[186,92762,61946],{"class":206},[186,92764,634],{"class":202},[186,92766,92767,92769,92771,92773,92775],{"class":188,"line":1212},[186,92768,56215],{"class":206},[186,92770,210],{"class":202},[186,92772,3190],{"class":206},[186,92774,804],{"class":669},[186,92776,634],{"class":202},[186,92778,92779,92781,92783,92785,92787],{"class":188,"line":1223},[186,92780,56229],{"class":206},[186,92782,210],{"class":202},[186,92784,3190],{"class":206},[186,92786,804],{"class":669},[186,92788,634],{"class":202},[186,92790,92791,92793,92795,92797],{"class":188,"line":1236},[186,92792,56327],{"class":206},[186,92794,210],{"class":202},[186,92796,91437],{"class":206},[186,92798,634],{"class":202},[186,92800,92801,92803,92805,92807,92809],{"class":188,"line":3096},[186,92802,56365],{"class":206},[186,92804,210],{"class":202},[186,92806,2433],{"class":206},[186,92808,804],{"class":669},[186,92810,634],{"class":202},[186,92812,92813,92815,92817,92819],{"class":188,"line":3110},[186,92814,58857],{"class":206},[186,92816,210],{"class":202},[186,92818,62283],{"class":206},[186,92820,634],{"class":202},[186,92822,92823,92825,92827,92829],{"class":188,"line":3115},[186,92824,58727],{"class":206},[186,92826,210],{"class":202},[186,92828,53042],{"class":206},[186,92830,634],{"class":202},[186,92832,92833,92835,92837,92839,92841],{"class":188,"line":3121},[186,92834,91476],{"class":206},[186,92836,210],{"class":202},[186,92838,1930],{"class":206},[186,92840,804],{"class":669},[186,92842,634],{"class":202},[186,92844,92845],{"class":188,"line":3142},[186,92846,3654],{"class":202},[186,92848,92849,92851,92853],{"class":188,"line":3147},[186,92850,53864],{"class":202},[186,92852,1524],{"class":523},[186,92854,552],{"class":202},[186,92856,92857,92859,92861],{"class":188,"line":3161},[186,92858,1470],{"class":202},[186,92860,52786],{"class":523},[186,92862,552],{"class":202},[186,92864,92865],{"class":188,"line":3166},[186,92866,3867],{"emptyLinePlaceholder":1551},[186,92868,92869,92871,92873],{"class":188,"line":3195},[186,92870,520],{"class":202},[186,92872,53247],{"class":523},[186,92874,552],{"class":202},[186,92876,92877,92879,92881,92883,92885,92887,92889,92891],{"class":188,"line":3200},[186,92878,53591],{"class":202},[186,92880,1450],{"class":523},[186,92882,1453],{"class":198},[186,92884,529],{"class":202},[186,92886,54937],{"class":532},[186,92888,56755],{"class":202},[186,92890,1450],{"class":523},[186,92892,552],{"class":202},[186,92894,92895,92897,92899,92901,92903,92905,92907,92909],{"class":188,"line":3217},[186,92896,53591],{"class":202},[186,92898,53260],{"class":523},[186,92900,526],{"class":198},[186,92902,529],{"class":202},[186,92904,89705],{"class":532},[186,92906,56755],{"class":202},[186,92908,53260],{"class":523},[186,92910,552],{"class":202},[186,92912,92913,92915,92917],{"class":188,"line":3222},[186,92914,53591],{"class":202},[186,92916,53260],{"class":523},[186,92918,552],{"class":202},[186,92920,92921,92923,92925,92927,92929,92931,92933,92935],{"class":188,"line":3227},[186,92922,12684],{"class":669},[186,92924,88364],{"class":206},[186,92926,15027],{"class":669},[186,92928,55841],{"class":202},[186,92930,55844],{"class":198},[186,92932,832],{"class":202},[186,92934,91577],{"class":532},[186,92936,1629],{"class":202},[186,92938,92939,92941,92943,92945],{"class":188,"line":3232},[186,92940,53666],{"class":669},[186,92942,10901],{"class":202},[186,92944,529],{"class":669},[186,92946,48787],{"class":206},[186,92948,92949,92951,92953],{"class":188,"line":3246},[186,92950,71521],{"class":669},[186,92952,91596],{"class":198},[186,92954,12316],{"class":202},[186,92956,92957,92959,92961,92963],{"class":188,"line":3251},[186,92958,91603],{"class":202},[186,92960,529],{"class":669},[186,92962,4498],{"class":202},[186,92964,4169],{"class":669},[186,92966,92967],{"class":188,"line":4044},[186,92968,91614],{"class":192},[186,92970,92971],{"class":188,"line":4058},[186,92972,3654],{"class":202},[186,92974,92975],{"class":188,"line":4066},[186,92976,91623],{"class":192},[186,92978,92979],{"class":188,"line":4071},[186,92980,92981],{"class":192},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[186,92983,92984],{"class":188,"line":4077},[186,92985,92986],{"class":192},"    \u002F\u002F 1.声明一个定时器变量\n",[186,92988,92989],{"class":188,"line":4083},[186,92990,92991],{"class":192},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[186,92993,92994],{"class":188,"line":4088},[186,92995,92996],{"class":192},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[186,92998,92999],{"class":188,"line":9411},[186,93000,93001],{"class":192},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[186,93003,93004],{"class":188,"line":9435},[186,93005,93006],{"class":192},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[186,93008,93009,93011,93014,93016,93018,93020,93022],{"class":188,"line":9440},[186,93010,71521],{"class":669},[186,93012,93013],{"class":198}," throttle",[186,93015,832],{"class":202},[186,93017,92068],{"class":835},[186,93019,13898],{"class":202},[186,93021,2328],{"class":835},[186,93023,13905],{"class":202},[186,93025,93026,93028],{"class":188,"line":9446},[186,93027,81205],{"class":669},[186,93029,92081],{"class":202},[186,93031,93032,93034,93036],{"class":188,"line":9473},[186,93033,75415],{"class":669},[186,93035,60359],{"class":669},[186,93037,55897],{"class":202},[186,93039,93040,93042,93044,93046],{"class":188,"line":9478},[186,93041,3964],{"class":669},[186,93043,3126],{"class":202},[186,93045,1838],{"class":669},[186,93047,93048],{"class":202},"timer) {\n",[186,93050,93051,93054,93056,93058,93060,93062],{"class":188,"line":9484},[186,93052,93053],{"class":202},"          timer ",[186,93055,529],{"class":669},[186,93057,92122],{"class":198},[186,93059,832],{"class":202},[186,93061,55894],{"class":669},[186,93063,55897],{"class":202},[186,93065,93066,93069],{"class":188,"line":9496},[186,93067,93068],{"class":198},"            fn",[186,93070,3443],{"class":202},[186,93072,93073],{"class":188,"line":9508},[186,93074,93075],{"class":192},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[186,93077,93078],{"class":188,"line":9520},[186,93079,93080],{"class":192},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[186,93082,93083,93086,93088],{"class":188,"line":11179},[186,93084,93085],{"class":202},"            timer ",[186,93087,529],{"class":669},[186,93089,93090],{"class":206}," null\n",[186,93092,93093],{"class":188,"line":11204},[186,93094,93095],{"class":192},"            \u002F\u002F 不能用clearTimeout(timer)\n",[186,93097,93098],{"class":188,"line":11227},[186,93099,93100],{"class":192},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[186,93102,93103],{"class":188,"line":11251},[186,93104,93105],{"class":202},"          }, t)\n",[186,93107,93108],{"class":188,"line":11256},[186,93109,3996],{"class":202},[186,93111,93112],{"class":188,"line":11261},[186,93113,53845],{"class":202},[186,93115,93116],{"class":188,"line":11266},[186,93117,3654],{"class":202},[186,93119,93120,93122,93124,93126,93128,93130,93132,93134,93136],{"class":188,"line":11275},[186,93121,91638],{"class":202},[186,93123,59254],{"class":198},[186,93125,832],{"class":202},[186,93127,91645],{"class":532},[186,93129,13898],{"class":202},[186,93131,92604],{"class":198},[186,93133,91654],{"class":202},[186,93135,66511],{"class":206},[186,93137,31952],{"class":202},[186,93139,93140,93142,93144],{"class":188,"line":11280},[186,93141,53864],{"class":202},[186,93143,53260],{"class":523},[186,93145,552],{"class":202},[186,93147,93148,93150,93152],{"class":188,"line":11286},[186,93149,1470],{"class":202},[186,93151,53247],{"class":523},[186,93153,552],{"class":202},[186,93155,93156],{"class":188,"line":11307},[186,93157,3867],{"emptyLinePlaceholder":1551},[186,93159,93160,93162,93164],{"class":188,"line":11313},[186,93161,1470],{"class":202},[186,93163,52089],{"class":523},[186,93165,552],{"class":202},[29,93167,93169],{"id":93168},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[176,93171,93173],{"className":54514,"code":93172,"language":54516,"meta":181,"style":181},"\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",[183,93174,93175,93183,93191,93196,93201,93206,93211,93215,93223],{"__ignoreMap":181},[186,93176,93177,93179,93181],{"class":188,"line":189},[186,93178,520],{"class":202},[186,93180,53247],{"class":523},[186,93182,552],{"class":202},[186,93184,93185,93187,93189],{"class":188,"line":49},[186,93186,53591],{"class":202},[186,93188,53260],{"class":523},[186,93190,552],{"class":202},[186,93192,93193],{"class":188,"line":219},[186,93194,93195],{"class":202},"    let timer = null\n",[186,93197,93198],{"class":188,"line":225},[186,93199,93200],{"class":202},"    timer = setTimeout(() => {\n",[186,93202,93203],{"class":188,"line":242},[186,93204,93205],{"class":202},"      clearTimeout(timer)\n",[186,93207,93208],{"class":188,"line":248},[186,93209,93210],{"class":202},"      console.log(timer)\n",[186,93212,93213],{"class":188,"line":265},[186,93214,61666],{"class":202},[186,93216,93217,93219,93221],{"class":188,"line":271},[186,93218,53864],{"class":202},[186,93220,53260],{"class":523},[186,93222,552],{"class":202},[186,93224,93225,93227,93229],{"class":188,"line":288},[186,93226,1470],{"class":202},[186,93228,53247],{"class":523},[186,93230,552],{"class":202},[169,93232,93233],{},"输出为1",[169,93235,93236],{},"在开启的定时器里边写清除定时器",[169,93238,93239],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[29,93241,93243],{"id":93242},"_4174-节流综合案例","4.17.4 节流综合案例",[169,93245,93246],{},"页面打开，可以记录上一次的视频播放位置",[169,93248,93249],{},[164,93250],{"alt":181,"src":93251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[169,93253,93254],{},[164,93255],{"alt":181,"src":93256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[176,93258,93260],{"className":52087,"code":93259,"language":52089,"meta":181,"style":181},"\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",[183,93261,93262,93272,93286,93290,93298,93312,93332,93352,93374,93387,93395,93401,93411,93421,93431,93435,93439,93446,93459,93471,93475,93479,93489,93501,93515,93519,93523,93530,93540,93553,93565,93575,93585,93601,93613,93617,93621,93629,93639,93651,93661,93671,93681,93685,93689,93699,93710,93714,93722,93730,93734,93742,93757,93772,93787,93808,93816,93824,93839,93861,93869,93884,93910,93936,93962,93970,93978,93997,94005,94010,94029,94034,94052,94057,94062,94070,94075,94089,94097,94102,94119,94123,94128,94150,94154,94162,94170,94174],{"__ignoreMap":181},[186,93263,93264,93266,93268,93270],{"class":188,"line":189},[186,93265,52751],{"class":202},[186,93267,52754],{"class":523},[186,93269,52757],{"class":198},[186,93271,552],{"class":202},[186,93273,93274,93276,93278,93280,93282,93284],{"class":188,"line":49},[186,93275,520],{"class":202},[186,93277,52089],{"class":523},[186,93279,52768],{"class":198},[186,93281,529],{"class":202},[186,93283,52773],{"class":532},[186,93285,552],{"class":202},[186,93287,93288],{"class":188,"line":219},[186,93289,3867],{"emptyLinePlaceholder":1551},[186,93291,93292,93294,93296],{"class":188,"line":225},[186,93293,520],{"class":202},[186,93295,52786],{"class":523},[186,93297,552],{"class":202},[186,93299,93300,93302,93304,93306,93308,93310],{"class":188,"line":242},[186,93301,53591],{"class":202},[186,93303,52796],{"class":523},[186,93305,52799],{"class":198},[186,93307,529],{"class":202},[186,93309,52804],{"class":532},[186,93311,60568],{"class":202},[186,93313,93314,93316,93318,93320,93322,93324,93326,93328,93330],{"class":188,"line":248},[186,93315,53591],{"class":202},[186,93317,52796],{"class":523},[186,93319,52815],{"class":198},[186,93321,529],{"class":202},[186,93323,52820],{"class":532},[186,93325,52823],{"class":198},[186,93327,529],{"class":202},[186,93329,52828],{"class":532},[186,93331,60568],{"class":202},[186,93333,93334,93336,93338,93340,93342,93344,93346,93348,93350],{"class":188,"line":265},[186,93335,53591],{"class":202},[186,93337,52796],{"class":523},[186,93339,16382],{"class":198},[186,93341,529],{"class":202},[186,93343,52843],{"class":532},[186,93345,52823],{"class":198},[186,93347,529],{"class":202},[186,93349,52850],{"class":532},[186,93351,60568],{"class":202},[186,93353,93354,93356,93358,93360,93362,93365,93367,93369,93372],{"class":188,"line":271},[186,93355,53591],{"class":202},[186,93357,52796],{"class":523},[186,93359,16382],{"class":198},[186,93361,529],{"class":202},[186,93363,93364],{"class":532},"\"referrer\"",[186,93366,52823],{"class":198},[186,93368,529],{"class":202},[186,93370,93371],{"class":532},"\"never\"",[186,93373,60568],{"class":202},[186,93375,93376,93378,93380,93383,93385],{"class":188,"line":288},[186,93377,53591],{"class":202},[186,93379,52859],{"class":523},[186,93381,93382],{"class":202},">综合案例\u003C\u002F",[186,93384,52859],{"class":523},[186,93386,552],{"class":202},[186,93388,93389,93391,93393],{"class":188,"line":294},[186,93390,53591],{"class":202},[186,93392,1524],{"class":523},[186,93394,552],{"class":202},[186,93396,93397,93399],{"class":188,"line":1212},[186,93398,7866],{"class":523},[186,93400,622],{"class":202},[186,93402,93403,93405,93407,93409],{"class":188,"line":1223},[186,93404,56140],{"class":206},[186,93406,210],{"class":202},[186,93408,1803],{"class":206},[186,93410,634],{"class":202},[186,93412,93413,93415,93417,93419],{"class":188,"line":1236},[186,93414,56151],{"class":206},[186,93416,210],{"class":202},[186,93418,1803],{"class":206},[186,93420,634],{"class":202},[186,93422,93423,93425,93427,93429],{"class":188,"line":3096},[186,93424,74030],{"class":206},[186,93426,210],{"class":202},[186,93428,61946],{"class":206},[186,93430,634],{"class":202},[186,93432,93433],{"class":188,"line":3110},[186,93434,3654],{"class":202},[186,93436,93437],{"class":188,"line":3115},[186,93438,3867],{"emptyLinePlaceholder":1551},[186,93440,93441,93444],{"class":188,"line":3121},[186,93442,93443],{"class":198},"    .container",[186,93445,622],{"class":202},[186,93447,93448,93450,93452,93455,93457],{"class":188,"line":3142},[186,93449,56215],{"class":206},[186,93451,210],{"class":202},[186,93453,93454],{"class":206},"1200",[186,93456,804],{"class":669},[186,93458,634],{"class":202},[186,93460,93461,93463,93465,93467,93469],{"class":188,"line":3147},[186,93462,56151],{"class":206},[186,93464,210],{"class":202},[186,93466,1803],{"class":206},[186,93468,53006],{"class":206},[186,93470,634],{"class":202},[186,93472,93473],{"class":188,"line":3161},[186,93474,3654],{"class":202},[186,93476,93477],{"class":188,"line":3166},[186,93478,3867],{"emptyLinePlaceholder":1551},[186,93480,93481,93484,93487],{"class":188,"line":3195},[186,93482,93483],{"class":198},"    .video",[186,93485,93486],{"class":523}," video",[186,93488,622],{"class":202},[186,93490,93491,93493,93495,93497,93499],{"class":188,"line":3200},[186,93492,56215],{"class":206},[186,93494,210],{"class":202},[186,93496,1922],{"class":206},[186,93498,670],{"class":669},[186,93500,634],{"class":202},[186,93502,93503,93505,93507,93509,93511,93513],{"class":188,"line":3217},[186,93504,56140],{"class":206},[186,93506,210],{"class":202},[186,93508,801],{"class":206},[186,93510,804],{"class":669},[186,93512,5559],{"class":206},[186,93514,634],{"class":202},[186,93516,93517],{"class":188,"line":3222},[186,93518,3654],{"class":202},[186,93520,93521],{"class":188,"line":3227},[186,93522,3867],{"emptyLinePlaceholder":1551},[186,93524,93525,93528],{"class":188,"line":3232},[186,93526,93527],{"class":198},"    .elevator",[186,93529,622],{"class":202},[186,93531,93532,93534,93536,93538],{"class":188,"line":3246},[186,93533,56204],{"class":206},[186,93535,210],{"class":202},[186,93537,283],{"class":206},[186,93539,634],{"class":202},[186,93541,93542,93544,93546,93549,93551],{"class":188,"line":3251},[186,93543,56390],{"class":206},[186,93545,210],{"class":202},[186,93547,93548],{"class":206},"280",[186,93550,804],{"class":669},[186,93552,634],{"class":202},[186,93554,93555,93557,93559,93561,93563],{"class":188,"line":4044},[186,93556,87858],{"class":206},[186,93558,210],{"class":202},[186,93560,801],{"class":206},[186,93562,804],{"class":669},[186,93564,634],{"class":202},[186,93566,93567,93569,93571,93573],{"class":188,"line":4058},[186,93568,87671],{"class":206},[186,93570,210],{"class":202},[186,93572,87676],{"class":206},[186,93574,634],{"class":202},[186,93576,93577,93579,93581,93583],{"class":188,"line":4066},[186,93578,63161],{"class":206},[186,93580,210],{"class":202},[186,93582,62283],{"class":206},[186,93584,634],{"class":202},[186,93586,93587,93589,93591,93593,93595,93597,93599],{"class":188,"line":4071},[186,93588,63415],{"class":206},[186,93590,210],{"class":202},[186,93592,1829],{"class":206},[186,93594,804],{"class":669},[186,93596,52971],{"class":206},[186,93598,63682],{"class":206},[186,93600,634],{"class":202},[186,93602,93603,93605,93607,93609,93611],{"class":188,"line":4077},[186,93604,56215],{"class":206},[186,93606,210],{"class":202},[186,93608,2515],{"class":206},[186,93610,804],{"class":669},[186,93612,634],{"class":202},[186,93614,93615],{"class":188,"line":4083},[186,93616,3654],{"class":202},[186,93618,93619],{"class":188,"line":4088},[186,93620,3867],{"emptyLinePlaceholder":1551},[186,93622,93623,93625,93627],{"class":188,"line":9411},[186,93624,93527],{"class":198},[186,93626,2871],{"class":523},[186,93628,622],{"class":202},[186,93630,93631,93633,93635,93637],{"class":188,"line":9435},[186,93632,56452],{"class":206},[186,93634,210],{"class":202},[186,93636,62310],{"class":206},[186,93638,634],{"class":202},[186,93640,93641,93643,93645,93647,93649],{"class":188,"line":9440},[186,93642,56140],{"class":206},[186,93644,210],{"class":202},[186,93646,2056],{"class":206},[186,93648,804],{"class":669},[186,93650,634],{"class":202},[186,93652,93653,93655,93657,93659],{"class":188,"line":9446},[186,93654,65407],{"class":206},[186,93656,210],{"class":202},[186,93658,56182],{"class":206},[186,93660,634],{"class":202},[186,93662,93663,93665,93667,93669],{"class":188,"line":9473},[186,93664,58727],{"class":206},[186,93666,210],{"class":202},[186,93668,53042],{"class":206},[186,93670,634],{"class":202},[186,93672,93673,93675,93677,93679],{"class":188,"line":9478},[186,93674,58857],{"class":206},[186,93676,210],{"class":202},[186,93678,63508],{"class":206},[186,93680,634],{"class":202},[186,93682,93683],{"class":188,"line":9484},[186,93684,3654],{"class":202},[186,93686,93687],{"class":188,"line":9496},[186,93688,3867],{"emptyLinePlaceholder":1551},[186,93690,93691,93693,93695,93697],{"class":188,"line":9508},[186,93692,93527],{"class":198},[186,93694,2871],{"class":523},[186,93696,65461],{"class":198},[186,93698,622],{"class":202},[186,93700,93701,93703,93705,93708],{"class":188,"line":9520},[186,93702,58857],{"class":206},[186,93704,210],{"class":202},[186,93706,93707],{"class":206},"#1286ff",[186,93709,634],{"class":202},[186,93711,93712],{"class":188,"line":11179},[186,93713,3654],{"class":202},[186,93715,93716,93718,93720],{"class":188,"line":11204},[186,93717,53864],{"class":202},[186,93719,1524],{"class":523},[186,93721,552],{"class":202},[186,93723,93724,93726,93728],{"class":188,"line":11227},[186,93725,1470],{"class":202},[186,93727,52786],{"class":523},[186,93729,552],{"class":202},[186,93731,93732],{"class":188,"line":11251},[186,93733,3867],{"emptyLinePlaceholder":1551},[186,93735,93736,93738,93740],{"class":188,"line":11256},[186,93737,520],{"class":202},[186,93739,53247],{"class":523},[186,93741,552],{"class":202},[186,93743,93744,93746,93748,93750,93752,93755],{"class":188,"line":11261},[186,93745,53591],{"class":202},[186,93747,1450],{"class":523},[186,93749,1453],{"class":198},[186,93751,529],{"class":202},[186,93753,93754],{"class":532},"\"container\"",[186,93756,552],{"class":202},[186,93758,93759,93761,93763,93765,93767,93770],{"class":188,"line":11266},[186,93760,52793],{"class":202},[186,93762,1450],{"class":523},[186,93764,1453],{"class":198},[186,93766,529],{"class":202},[186,93768,93769],{"class":532},"\"header\"",[186,93771,552],{"class":202},[186,93773,93774,93776,93778,93780,93782,93785],{"class":188,"line":11275},[186,93775,56677],{"class":202},[186,93777,948],{"class":523},[186,93779,62498],{"class":198},[186,93781,529],{"class":202},[186,93783,93784],{"class":532},"\"http:\u002F\u002Fpip.itcast.cn\"",[186,93786,552],{"class":202},[186,93788,93789,93791,93793,93795,93797,93800,93802,93804,93806],{"class":188,"line":11280},[186,93790,56743],{"class":202},[186,93792,164],{"class":523},[186,93794,526],{"class":198},[186,93796,529],{"class":202},[186,93798,93799],{"class":532},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[186,93801,536],{"class":198},[186,93803,529],{"class":202},[186,93805,9115],{"class":532},[186,93807,60568],{"class":202},[186,93809,93810,93812,93814],{"class":188,"line":11286},[186,93811,56848],{"class":202},[186,93813,948],{"class":523},[186,93815,552],{"class":202},[186,93817,93818,93820,93822],{"class":188,"line":11307},[186,93819,53224],{"class":202},[186,93821,1450],{"class":523},[186,93823,552],{"class":202},[186,93825,93826,93828,93830,93832,93834,93837],{"class":188,"line":11313},[186,93827,52793],{"class":202},[186,93829,1450],{"class":523},[186,93831,1453],{"class":198},[186,93833,529],{"class":202},[186,93835,93836],{"class":532},"\"video\"",[186,93838,552],{"class":202},[186,93840,93841,93843,93845,93847,93849,93852,93855,93857,93859],{"class":188,"line":11327},[186,93842,56677],{"class":202},[186,93844,29639],{"class":523},[186,93846,526],{"class":198},[186,93848,529],{"class":202},[186,93850,93851],{"class":532},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[186,93853,93854],{"class":198}," controls",[186,93856,56755],{"class":202},[186,93858,29639],{"class":523},[186,93860,552],{"class":202},[186,93862,93863,93865,93867],{"class":188,"line":11333},[186,93864,53224],{"class":202},[186,93866,1450],{"class":523},[186,93868,552],{"class":202},[186,93870,93871,93873,93875,93877,93879,93882],{"class":188,"line":11360},[186,93872,52793],{"class":202},[186,93874,1450],{"class":523},[186,93876,1453],{"class":198},[186,93878,529],{"class":202},[186,93880,93881],{"class":532},"\"elevator\"",[186,93883,552],{"class":202},[186,93885,93886,93888,93890,93892,93894,93896,93899,93901,93903,93906,93908],{"class":188,"line":11369},[186,93887,56677],{"class":202},[186,93889,948],{"class":523},[186,93891,62498],{"class":198},[186,93893,529],{"class":202},[186,93895,65673],{"class":532},[186,93897,93898],{"class":198}," data-ref",[186,93900,529],{"class":202},[186,93902,93836],{"class":532},[186,93904,93905],{"class":202},">视频介绍\u003C\u002F",[186,93907,948],{"class":523},[186,93909,552],{"class":202},[186,93911,93912,93914,93916,93918,93920,93922,93924,93926,93929,93932,93934],{"class":188,"line":11375},[186,93913,56677],{"class":202},[186,93915,948],{"class":523},[186,93917,62498],{"class":198},[186,93919,529],{"class":202},[186,93921,65673],{"class":532},[186,93923,93898],{"class":198},[186,93925,529],{"class":202},[186,93927,93928],{"class":532},"\"intro\"",[186,93930,93931],{"class":202},">课程简介\u003C\u002F",[186,93933,948],{"class":523},[186,93935,552],{"class":202},[186,93937,93938,93940,93942,93944,93946,93948,93950,93952,93955,93958,93960],{"class":188,"line":11383},[186,93939,56677],{"class":202},[186,93941,948],{"class":523},[186,93943,62498],{"class":198},[186,93945,529],{"class":202},[186,93947,65673],{"class":532},[186,93949,93898],{"class":198},[186,93951,529],{"class":202},[186,93953,93954],{"class":532},"\"outline\"",[186,93956,93957],{"class":202},">评论列表\u003C\u002F",[186,93959,948],{"class":523},[186,93961,552],{"class":202},[186,93963,93964,93966,93968],{"class":188,"line":11388},[186,93965,53224],{"class":202},[186,93967,1450],{"class":523},[186,93969,552],{"class":202},[186,93971,93972,93974,93976],{"class":188,"line":18065},[186,93973,53864],{"class":202},[186,93975,1450],{"class":523},[186,93977,552],{"class":202},[186,93979,93980,93982,93984,93986,93988,93991,93993,93995],{"class":188,"line":18071},[186,93981,53591],{"class":202},[186,93983,53260],{"class":523},[186,93985,526],{"class":198},[186,93987,529],{"class":202},[186,93989,93990],{"class":532},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[186,93992,56755],{"class":202},[186,93994,53260],{"class":523},[186,93996,552],{"class":202},[186,93998,93999,94001,94003],{"class":188,"line":18094},[186,94000,53591],{"class":202},[186,94002,53260],{"class":523},[186,94004,552],{"class":202},[186,94006,94007],{"class":188,"line":18100},[186,94008,94009],{"class":192},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[186,94011,94012,94014,94016,94018,94020,94022,94024,94027],{"class":188,"line":18123},[186,94013,12684],{"class":669},[186,94015,93486],{"class":206},[186,94017,15027],{"class":669},[186,94019,55841],{"class":202},[186,94021,55844],{"class":198},[186,94023,832],{"class":202},[186,94025,94026],{"class":532},"'video'",[186,94028,1629],{"class":202},[186,94030,94031],{"class":188,"line":18137},[186,94032,94033],{"class":192},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[186,94035,94036,94039,94041,94043,94045,94048,94050],{"class":188,"line":18157},[186,94037,94038],{"class":202},"    video.ontimeupdate ",[186,94040,529],{"class":669},[186,94042,89786],{"class":202},[186,94044,92604],{"class":198},[186,94046,94047],{"class":202},"(() ",[186,94049,86154],{"class":669},[186,94051,622],{"class":202},[186,94053,94054],{"class":188,"line":18163},[186,94055,94056],{"class":192},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[186,94058,94059],{"class":188,"line":18174},[186,94060,94061],{"class":192},"      \u002F\u002F 控制台输出当前的时间\n",[186,94063,94064,94067],{"class":188,"line":18197},[186,94065,94066],{"class":192},"      \u002F\u002F console.log(video.currentTime)",[186,94068,94069],{"class":192},"  \u002F\u002F获得当前的视频时间\n",[186,94071,94072],{"class":188,"line":18219},[186,94073,94074],{"class":192},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[186,94076,94077,94079,94081,94083,94086],{"class":188,"line":18224},[186,94078,76116],{"class":202},[186,94080,73088],{"class":198},[186,94082,832],{"class":202},[186,94084,94085],{"class":532},"'currentTime'",[186,94087,94088],{"class":202},", video.currentTime)\n",[186,94090,94091,94093,94095],{"class":188,"line":18230},[186,94092,55980],{"class":202},[186,94094,7873],{"class":206},[186,94096,1629],{"class":202},[186,94098,94099],{"class":188,"line":18244},[186,94100,94101],{"class":192},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[186,94103,94104,94107,94110,94112,94115,94117],{"class":188,"line":18257},[186,94105,94106],{"class":202},"    video.",[186,94108,94109],{"class":198},"onloadeddata",[186,94111,15027],{"class":669},[186,94113,94114],{"class":202}," () ",[186,94116,86154],{"class":669},[186,94118,622],{"class":202},[186,94120,94121],{"class":188,"line":18262},[186,94122,61453],{"class":192},[186,94124,94125],{"class":188,"line":18276},[186,94126,94127],{"class":192},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[186,94129,94130,94133,94135,94138,94140,94142,94144,94146,94148],{"class":188,"line":18281},[186,94131,94132],{"class":202},"      video.currentTime ",[186,94134,529],{"class":669},[186,94136,94137],{"class":202}," localStorage.",[186,94139,73119],{"class":198},[186,94141,832],{"class":202},[186,94143,94085],{"class":532},[186,94145,839],{"class":202},[186,94147,72791],{"class":669},[186,94149,48787],{"class":206},[186,94151,94152],{"class":188,"line":18287},[186,94153,3654],{"class":202},[186,94155,94156,94158,94160],{"class":188,"line":18292},[186,94157,53864],{"class":202},[186,94159,53260],{"class":523},[186,94161,552],{"class":202},[186,94163,94164,94166,94168],{"class":188,"line":18306},[186,94165,1470],{"class":202},[186,94167,53247],{"class":523},[186,94169,552],{"class":202},[186,94171,94172],{"class":188,"line":18311},[186,94173,3867],{"emptyLinePlaceholder":1551},[186,94175,94176,94178,94180],{"class":188,"line":18316},[186,94177,1470],{"class":202},[186,94179,52089],{"class":523},[186,94181,552],{"class":202},[1524,94183,94184],{},"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":181,"searchDepth":49,"depth":49,"links":94186},[94187,94192,94196,94197,94198,94203,94208,94209,94210,94211,94218,94223,94224,94234,94238,94239,94243],{"id":78124,"depth":49,"text":78125,"children":94188},[94189,94190,94191],{"id":78128,"depth":219,"text":78129},{"id":78153,"depth":219,"text":78154},{"id":78165,"depth":219,"text":78166},{"id":78177,"depth":49,"text":78178,"children":94193},[94194,94195],{"id":78181,"depth":219,"text":78182},{"id":78196,"depth":219,"text":78197},{"id":78248,"depth":49,"text":78249},{"id":78292,"depth":49,"text":78293},{"id":78309,"depth":49,"text":78310,"children":94199},[94200,94201,94202],{"id":78313,"depth":219,"text":78314},{"id":78326,"depth":219,"text":78327},{"id":78431,"depth":219,"text":78432},{"id":78720,"depth":49,"text":78721,"children":94204},[94205,94206,94207],{"id":78724,"depth":219,"text":78725},{"id":79167,"depth":219,"text":79168},{"id":79578,"depth":219,"text":79579},{"id":79641,"depth":49,"text":79642},{"id":79720,"depth":49,"text":79721},{"id":79813,"depth":49,"text":79814},{"id":81657,"depth":49,"text":81658,"children":94212},[94213,94214,94215,94216,94217],{"id":81661,"depth":219,"text":81662},{"id":81673,"depth":219,"text":81674},{"id":81892,"depth":219,"text":81893},{"id":81910,"depth":219,"text":81911},{"id":81970,"depth":219,"text":81971},{"id":86238,"depth":49,"text":86239,"children":94219},[94220,94221,94222],{"id":86242,"depth":219,"text":86243},{"id":86260,"depth":219,"text":86261},{"id":86286,"depth":219,"text":86287},{"id":86295,"depth":49,"text":86296},{"id":86317,"depth":49,"text":86318,"children":94225},[94226,94227,94228,94229,94230,94231,94232,94233],{"id":86321,"depth":219,"text":86322},{"id":86582,"depth":219,"text":86583},{"id":86768,"depth":219,"text":86769},{"id":87135,"depth":219,"text":87136},{"id":87251,"depth":219,"text":87252},{"id":87287,"depth":219,"text":87288},{"id":87334,"depth":219,"text":87335},{"id":87368,"depth":219,"text":87369},{"id":88730,"depth":49,"text":88731,"children":94235},[94236,94237],{"id":88734,"depth":219,"text":88735},{"id":88771,"depth":219,"text":88772},{"id":90126,"depth":49,"text":90127},{"id":90497,"depth":49,"text":90498,"children":94240},[94241,94242],{"id":90501,"depth":219,"text":90502},{"id":90535,"depth":219,"text":90536},{"id":91264,"depth":49,"text":91265,"children":94244},[94245,94246,94247,94248],{"id":91268,"depth":219,"text":91269},{"id":92226,"depth":219,"text":92227},{"id":93168,"depth":219,"text":93169},{"id":93242,"depth":219,"text":93243},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78113,"description":1548},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94255,"title":94256,"body":94257,"description":94268,"extension":1549,"meta":94269,"navigation":1551,"path":94271,"seo":94272,"stem":94273,"__hash__":94274},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94258,"toc":94266},[94259],[169,94260,94261,94262],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[948,94263,94264],{"href":94264,"rel":94265},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[952],{"title":181,"searchDepth":49,"depth":49,"links":94267},[],"三件套第三套学习",{"category":94270},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94256,"description":94268},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94276,"title":94277,"body":94278,"description":1548,"extension":1549,"meta":94383,"navigation":1551,"path":94384,"seo":94385,"stem":94386,"__hash__":94387},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94279,"toc":94378},[94280,94287,94290,94293,94296,94300,94309,94312,94315,94319,94328,94331,94335,94338,94358,94361,94375],[169,94281,94282],{},[948,94283,94286],{"href":94284,"rel":94285},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[952],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94288,94277],{"id":94289},"_1安装",[169,94291,94292],{},"numpy是科学计算基础库,底层是C语言",[169,94294,94295],{},"三种方式：",[14,94297,94299],{"id":94298},"_11-通过pip安装","1.1 通过pip安装",[176,94301,94303],{"className":31833,"code":94302,"language":31835,"meta":181,"style":181},"pip install numpy\n",[183,94304,94305],{"__ignoreMap":181},[186,94306,94307],{"class":188,"line":189},[186,94308,94302],{"class":202},[169,94310,94311],{},"首选方式，自动处理依赖项",[169,94313,94314],{},"在提示系统命令符中使用cmd",[14,94316,94318],{"id":94317},"_12-通过anaconda安装","1.2 通过Anaconda安装",[176,94320,94322],{"className":31833,"code":94321,"language":31835,"meta":181,"style":181},"conda install numpy\n",[183,94323,94324],{"__ignoreMap":181},[186,94325,94326],{"class":188,"line":189},[186,94327,94321],{"class":202},[169,94329,94330],{},"自动解决环境依赖",[14,94332,94334],{"id":94333},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[169,94336,94337],{},"对于Debian\u002FUbuntu",[176,94339,94341],{"className":31833,"code":94340,"language":31835,"meta":181,"style":181},"sudo apt-get install python3-numpy\n",[183,94342,94343],{"__ignoreMap":181},[186,94344,94345,94348,94350,94353,94355],{"class":188,"line":189},[186,94346,94347],{"class":202},"sudo apt",[186,94349,2142],{"class":669},[186,94351,94352],{"class":202},"get install python3",[186,94354,2142],{"class":669},[186,94356,94357],{"class":202},"numpy\n",[169,94359,94360],{},"对于Fedora:",[176,94362,94364],{"className":31833,"code":94363,"language":31835,"meta":181,"style":181},"sudo dnf install python3-numpy\n",[183,94365,94366],{"__ignoreMap":181},[186,94367,94368,94371,94373],{"class":188,"line":189},[186,94369,94370],{"class":202},"sudo dnf install python3",[186,94372,2142],{"class":669},[186,94374,94357],{"class":202},[1524,94376,94377],{},"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":181,"searchDepth":49,"depth":49,"links":94379},[94380,94381,94382],{"id":94298,"depth":49,"text":94299},{"id":94317,"depth":49,"text":94318},{"id":94333,"depth":49,"text":94334},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94277,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94389,"title":94390,"body":94391,"description":1548,"extension":1549,"meta":94504,"navigation":1551,"path":94505,"seo":94506,"stem":94507,"__hash__":94508},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94392,"toc":94502},[94393,94396,94399,94402,94405,94408,94411,94414,94417,94420,94496,94499],[10,94394,94390],{"id":94395},"_10算数函数",[169,94397,94398],{},"加减乘除运算跟python基础语法没区别",[169,94400,94401],{},"除了python那种方法外还可以使用函数",[169,94403,94404],{},"加：np.add(a,b)",[169,94406,94407],{},"减：np.subtract(a,b)",[169,94409,94410],{},"乘：np.multiply(a,b)",[169,94412,94413],{},"除：np.divide(a,b) == a\u002Fb",[169,94415,94416],{},"取余：np.mod(a,b) == a%b",[169,94418,94419],{},"必须会的用法：",[176,94421,94423],{"className":31833,"code":94422,"language":31835,"meta":181,"style":181},"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",[183,94424,94425,94447,94468,94478,94491],{"__ignoreMap":181},[186,94426,94427,94429,94431,94434,94436,94439,94441,94443,94445],{"class":188,"line":189},[186,94428,948],{"class":202},[186,94430,529],{"class":669},[186,94432,94433],{"class":202},"np.arange(",[186,94435,2030],{"class":206},[186,94437,94438],{"class":202},").reshape(",[186,94440,1691],{"class":206},[186,94442,1988],{"class":202},[186,94444,1691],{"class":206},[186,94446,1629],{"class":202},[186,94448,94449,94451,94453,94456,94458,94460,94462,94464,94466],{"class":188,"line":49},[186,94450,1874],{"class":202},[186,94452,529],{"class":669},[186,94454,94455],{"class":202},"np.array([",[186,94457,2056],{"class":206},[186,94459,1988],{"class":202},[186,94461,2056],{"class":206},[186,94463,1988],{"class":202},[186,94465,2056],{"class":206},[186,94467,6123],{"class":202},[186,94469,94470,94473,94475],{"class":188,"line":219},[186,94471,94472],{"class":202},"result",[186,94474,529],{"class":669},[186,94476,94477],{"class":202},"np.empty_like(a)\n",[186,94479,94480,94483,94486,94488],{"class":188,"line":225},[186,94481,94482],{"class":202},"np.add(a,b,",[186,94484,94485],{"class":835},"out",[186,94487,529],{"class":669},[186,94489,94490],{"class":202},"result)\n",[186,94492,94493],{"class":188,"line":242},[186,94494,94495],{"class":202},"result\n",[169,94497,94498],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1524,94500,94501],{},"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":181,"searchDepth":49,"depth":49,"links":94503},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94390,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94510,"title":94511,"body":94512,"description":1548,"extension":1549,"meta":95274,"navigation":1551,"path":95275,"seo":95276,"stem":95277,"__hash__":95278},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94513,"toc":95261},[94514,94517,94520,94523,94527,94566,94570,94614,94674,94678,94681,94720,94723,94768,94772,94808,94812,94881,94885,94949,94953,94956,94959,94962,94965,95001,95005,95045,95049,95121,95124,95128,95191,95195,95258],[10,94515,94511],{"id":94516},"_11统计函数",[169,94518,94519],{},"sum max min mean",[169,94521,94522],{},"这些有axis参数，可以指定方向",[14,94524,94526],{"id":94525},"_111-sum求和函数","11.1 sum()求和函数",[176,94528,94530],{"className":31833,"code":94529,"language":31835,"meta":181,"style":181},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[183,94531,94532,94537,94558],{"__ignoreMap":181},[186,94533,94534],{"class":188,"line":189},[186,94535,94536],{"class":192},"#创建一维数组\n",[186,94538,94539,94541,94543,94546,94548,94550,94552,94554,94556],{"class":188,"line":49},[186,94540,948],{"class":202},[186,94542,529],{"class":669},[186,94544,94545],{"class":202},"np.random.randint(",[186,94547,1829],{"class":206},[186,94549,1988],{"class":202},[186,94551,1922],{"class":206},[186,94553,1988],{"class":202},[186,94555,801],{"class":206},[186,94557,1629],{"class":202},[186,94559,94560,94563],{"class":188,"line":219},[186,94561,94562],{"class":202},"np.sum(a)",[186,94564,94565],{"class":192},"#求和\n",[14,94567,94569],{"id":94568},"_112-max求最大值函数","11.2 max()求最大值函数",[176,94571,94573],{"className":31833,"code":94572,"language":31835,"meta":181,"style":181},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[183,94574,94575,94579,94599,94604,94609],{"__ignoreMap":181},[186,94576,94577],{"class":188,"line":189},[186,94578,94536],{"class":192},[186,94580,94581,94583,94585,94587,94589,94591,94593,94595,94597],{"class":188,"line":49},[186,94582,948],{"class":202},[186,94584,529],{"class":669},[186,94586,94545],{"class":202},[186,94588,1829],{"class":206},[186,94590,1988],{"class":202},[186,94592,1922],{"class":206},[186,94594,1988],{"class":202},[186,94596,801],{"class":206},[186,94598,1629],{"class":202},[186,94600,94601],{"class":188,"line":219},[186,94602,94603],{"class":202},"np.max(a)\n",[186,94605,94606],{"class":188,"line":225},[186,94607,94608],{"class":192},"#最大索引(求最大元素的索引)arg\n",[186,94610,94611],{"class":188,"line":242},[186,94612,94613],{"class":202},"np.argmax(a)\n",[176,94615,94617],{"className":31833,"code":94616,"language":31835,"meta":181,"style":181},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[183,94618,94619,94640,94660,94664],{"__ignoreMap":181},[186,94620,94621,94623,94625,94628,94630,94632,94634,94636,94638],{"class":188,"line":189},[186,94622,12382],{"class":202},[186,94624,529],{"class":669},[186,94626,94627],{"class":202}," np.array([",[186,94629,1829],{"class":206},[186,94631,13898],{"class":202},[186,94633,1930],{"class":206},[186,94635,13898],{"class":202},[186,94637,1691],{"class":206},[186,94639,6123],{"class":202},[186,94641,94642,94644,94646,94648,94650,94652,94654,94656,94658],{"class":188,"line":49},[186,94643,12408],{"class":202},[186,94645,529],{"class":669},[186,94647,94627],{"class":202},[186,94649,1691],{"class":206},[186,94651,13898],{"class":202},[186,94653,1697],{"class":206},[186,94655,13898],{"class":202},[186,94657,1904],{"class":206},[186,94659,6123],{"class":202},[186,94661,94662],{"class":188,"line":219},[186,94663,3867],{"emptyLinePlaceholder":1551},[186,94665,94666,94668,94671],{"class":188,"line":225},[186,94667,31870],{"class":206},[186,94669,94670],{"class":202},"(np.maximum(a, b))   ",[186,94672,94673],{"class":192},"# [3 5 4]，每个位置上取较大值\n",[14,94675,94677],{"id":94676},"_113-mean求平均值函数","11.3 mean()求平均值函数",[169,94679,94680],{},"①一维数组：",[176,94682,94684],{"className":31833,"code":94683,"language":31835,"meta":181,"style":181},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[183,94685,94686,94690,94710,94715],{"__ignoreMap":181},[186,94687,94688],{"class":188,"line":189},[186,94689,94536],{"class":192},[186,94691,94692,94694,94696,94698,94700,94702,94704,94706,94708],{"class":188,"line":49},[186,94693,948],{"class":202},[186,94695,529],{"class":669},[186,94697,94545],{"class":202},[186,94699,1829],{"class":206},[186,94701,1988],{"class":202},[186,94703,1922],{"class":206},[186,94705,1988],{"class":202},[186,94707,801],{"class":206},[186,94709,1629],{"class":202},[186,94711,94712],{"class":188,"line":219},[186,94713,94714],{"class":192},"#求平均值\n",[186,94716,94717],{"class":188,"line":225},[186,94718,94719],{"class":202},"np.mean(a)\n",[169,94721,94722],{},"②二维数组",[176,94724,94726],{"className":31833,"code":94725,"language":31835,"meta":181,"style":181},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[183,94727,94728,94733,94758,94763],{"__ignoreMap":181},[186,94729,94730],{"class":188,"line":189},[186,94731,94732],{"class":192},"#二维数组\n",[186,94734,94735,94738,94740,94742,94744,94746,94748,94750,94752,94754,94756],{"class":188,"line":49},[186,94736,94737],{"class":202},"aa",[186,94739,529],{"class":669},[186,94741,94433],{"class":202},[186,94743,1829],{"class":206},[186,94745,1988],{"class":202},[186,94747,2133],{"class":206},[186,94749,94438],{"class":202},[186,94751,1691],{"class":206},[186,94753,1988],{"class":202},[186,94755,1904],{"class":206},[186,94757,1629],{"class":202},[186,94759,94760],{"class":188,"line":219},[186,94761,94762],{"class":192},"#对数组中的所有数求平均\n",[186,94764,94765],{"class":188,"line":225},[186,94766,94767],{"class":202},"np.mean(aa)\n",[14,94769,94771],{"id":94770},"_114-median求中位数函数","11.4 median()求中位数函数",[176,94773,94775],{"className":31833,"code":94774,"language":31835,"meta":181,"style":181},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[183,94776,94777,94782,94798,94803],{"__ignoreMap":181},[186,94778,94779],{"class":188,"line":189},[186,94780,94781],{"class":192},"#求中位数\n",[186,94783,94784,94786,94788,94790,94792,94794,94796],{"class":188,"line":49},[186,94785,1874],{"class":202},[186,94787,529],{"class":669},[186,94789,94433],{"class":202},[186,94791,1829],{"class":206},[186,94793,1988],{"class":202},[186,94795,2056],{"class":206},[186,94797,1629],{"class":202},[186,94799,94800],{"class":188,"line":219},[186,94801,94802],{"class":202},"np.median(b)\n",[186,94804,94805],{"class":188,"line":225},[186,94806,94807],{"class":192},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94809,94811],{"id":94810},"_115-power求幂运算函数","11.5 power()求幂运算函数",[176,94813,94815],{"className":31833,"code":94814,"language":31835,"meta":181,"style":181},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[183,94816,94817,94833,94838,94843,94852,94857,94866],{"__ignoreMap":181},[186,94818,94819,94821,94823,94825,94827,94829,94831],{"class":188,"line":189},[186,94820,1874],{"class":202},[186,94822,529],{"class":669},[186,94824,94433],{"class":202},[186,94826,1829],{"class":206},[186,94828,1988],{"class":202},[186,94830,2056],{"class":206},[186,94832,1629],{"class":202},[186,94834,94835],{"class":188,"line":49},[186,94836,94837],{"class":192},"#幂运算\n",[186,94839,94840],{"class":188,"line":219},[186,94841,94842],{"class":192},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[186,94844,94845,94848,94850],{"class":188,"line":225},[186,94846,94847],{"class":202},"np.power(b,",[186,94849,1697],{"class":206},[186,94851,1629],{"class":202},[186,94853,94854],{"class":188,"line":242},[186,94855,94856],{"class":192},"#或者以下代码，将数据存储起来\n",[186,94858,94859,94861,94863],{"class":188,"line":248},[186,94860,2453],{"class":202},[186,94862,529],{"class":669},[186,94864,94865],{"class":202},"np.empty_like(b)\n",[186,94867,94868,94870,94872,94874,94876,94878],{"class":188,"line":265},[186,94869,94847],{"class":202},[186,94871,1697],{"class":206},[186,94873,1988],{"class":202},[186,94875,94485],{"class":835},[186,94877,529],{"class":669},[186,94879,94880],{"class":202},"y)\n",[14,94882,94884],{"id":94883},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[176,94886,94888],{"className":31833,"code":94887,"language":31835,"meta":181,"style":181},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[183,94889,94890,94906,94911,94916,94920,94938],{"__ignoreMap":181},[186,94891,94892,94894,94896,94898,94900,94902,94904],{"class":188,"line":189},[186,94893,1874],{"class":202},[186,94895,529],{"class":669},[186,94897,94433],{"class":202},[186,94899,1829],{"class":206},[186,94901,1988],{"class":202},[186,94903,2056],{"class":206},[186,94905,1629],{"class":202},[186,94907,94908],{"class":188,"line":49},[186,94909,94910],{"class":192},"#开方\n",[186,94912,94913],{"class":188,"line":219},[186,94914,94915],{"class":202},"np.sqrt(b)\n",[186,94917,94918],{"class":188,"line":225},[186,94919,94856],{"class":192},[186,94921,94922,94924,94926,94929,94932,94934,94936],{"class":188,"line":242},[186,94923,2453],{"class":202},[186,94925,529],{"class":669},[186,94927,94928],{"class":202},"np.empty_like(b,",[186,94930,94931],{"class":835},"dtype",[186,94933,529],{"class":669},[186,94935,1662],{"class":206},[186,94937,1629],{"class":202},[186,94939,94940,94943,94945,94947],{"class":188,"line":248},[186,94941,94942],{"class":202},"np.sqrt(b,",[186,94944,94485],{"class":835},[186,94946,529],{"class":669},[186,94948,94880],{"class":202},[14,94950,94952],{"id":94951},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[169,94954,94955],{},"对数组中的元素累计求和，可指定轴",[169,94957,94958],{},"#累计求和的意思是：",[169,94960,94961],{},"a = np.array([1, 2, 3, 4])",[169,94963,94964],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[176,94966,94968],{"className":31833,"code":94967,"language":31835,"meta":181,"style":181},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[183,94969,94970,94986,94991,94996],{"__ignoreMap":181},[186,94971,94972,94974,94976,94978,94980,94982,94984],{"class":188,"line":189},[186,94973,1874],{"class":202},[186,94975,529],{"class":669},[186,94977,94433],{"class":202},[186,94979,1829],{"class":206},[186,94981,1988],{"class":202},[186,94983,2056],{"class":206},[186,94985,1629],{"class":202},[186,94987,94988],{"class":188,"line":49},[186,94989,94990],{"class":202},"np.cumsum(b)\n",[186,94992,94993],{"class":188,"line":219},[186,94994,94995],{"class":192},"#结果：\n",[186,94997,94998],{"class":188,"line":225},[186,94999,95000],{"class":192},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95002,95004],{"id":95003},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[176,95006,95008],{"className":31833,"code":95007,"language":31835,"meta":181,"style":181},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[183,95009,95010,95026,95031,95036,95040],{"__ignoreMap":181},[186,95011,95012,95014,95016,95018,95020,95022,95024],{"class":188,"line":189},[186,95013,1874],{"class":202},[186,95015,529],{"class":669},[186,95017,94433],{"class":202},[186,95019,1829],{"class":206},[186,95021,1988],{"class":202},[186,95023,2056],{"class":206},[186,95025,1629],{"class":202},[186,95027,95028],{"class":188,"line":49},[186,95029,95030],{"class":192},"#对数组中的元素累计求积，可指定轴\n",[186,95032,95033],{"class":188,"line":219},[186,95034,95035],{"class":202},"np.cumprod(b)\n",[186,95037,95038],{"class":188,"line":225},[186,95039,94995],{"class":192},[186,95041,95042],{"class":188,"line":242},[186,95043,95044],{"class":192},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95046,95048],{"id":95047},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[176,95050,95052],{"className":31833,"code":95051,"language":31835,"meta":181,"style":181},"#删除数组中的重复数据，并对数据进行排序\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",[183,95053,95054,95059,95107,95112,95116],{"__ignoreMap":181},[186,95055,95056],{"class":188,"line":189},[186,95057,95058],{"class":192},"#删除数组中的重复数据，并对数据进行排序\n",[186,95060,95061,95063,95065,95067,95069,95071,95073,95075,95077,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105],{"class":188,"line":49},[186,95062,948],{"class":202},[186,95064,529],{"class":669},[186,95066,94455],{"class":202},[186,95068,1829],{"class":206},[186,95070,1988],{"class":202},[186,95072,1697],{"class":206},[186,95074,1988],{"class":202},[186,95076,1691],{"class":206},[186,95078,1988],{"class":202},[186,95080,2108],{"class":206},[186,95082,1988],{"class":202},[186,95084,1691],{"class":206},[186,95086,1988],{"class":202},[186,95088,2056],{"class":206},[186,95090,1988],{"class":202},[186,95092,1809],{"class":206},[186,95094,1988],{"class":202},[186,95096,1803],{"class":206},[186,95098,1988],{"class":202},[186,95100,2383],{"class":206},[186,95102,1988],{"class":202},[186,95104,1904],{"class":206},[186,95106,6123],{"class":202},[186,95108,95109],{"class":188,"line":219},[186,95110,95111],{"class":202},"np.unique(a)\n",[186,95113,95114],{"class":188,"line":225},[186,95115,94995],{"class":192},[186,95117,95118],{"class":188,"line":242},[186,95119,95120],{"class":192},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[169,95122,95123],{},"升序形式排序",[14,95125,95127],{"id":95126},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[176,95129,95131],{"className":31833,"code":95130,"language":31835,"meta":181,"style":181},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[183,95132,95133,95181,95186],{"__ignoreMap":181},[186,95134,95135,95137,95139,95141,95143,95145,95147,95149,95151,95153,95155,95157,95159,95161,95163,95165,95167,95169,95171,95173,95175,95177,95179],{"class":188,"line":189},[186,95136,948],{"class":202},[186,95138,529],{"class":669},[186,95140,94455],{"class":202},[186,95142,1829],{"class":206},[186,95144,1988],{"class":202},[186,95146,1697],{"class":206},[186,95148,1988],{"class":202},[186,95150,1691],{"class":206},[186,95152,1988],{"class":202},[186,95154,2108],{"class":206},[186,95156,1988],{"class":202},[186,95158,1691],{"class":206},[186,95160,1988],{"class":202},[186,95162,2056],{"class":206},[186,95164,1988],{"class":202},[186,95166,1809],{"class":206},[186,95168,1988],{"class":202},[186,95170,1803],{"class":206},[186,95172,1988],{"class":202},[186,95174,2383],{"class":206},[186,95176,1988],{"class":202},[186,95178,1904],{"class":206},[186,95180,6123],{"class":202},[186,95182,95183],{"class":188,"line":49},[186,95184,95185],{"class":192},"#返回数组中非零元素的索引\n",[186,95187,95188],{"class":188,"line":219},[186,95189,95190],{"class":202},"np.nonzero(a)\n",[14,95192,95194],{"id":95193},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[176,95196,95198],{"className":31833,"code":95197,"language":31835,"meta":181,"style":181},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[183,95199,95200,95248,95253],{"__ignoreMap":181},[186,95201,95202,95204,95206,95208,95210,95212,95214,95216,95218,95220,95222,95224,95226,95228,95230,95232,95234,95236,95238,95240,95242,95244,95246],{"class":188,"line":189},[186,95203,948],{"class":202},[186,95205,529],{"class":669},[186,95207,94455],{"class":202},[186,95209,1829],{"class":206},[186,95211,1988],{"class":202},[186,95213,1697],{"class":206},[186,95215,1988],{"class":202},[186,95217,1691],{"class":206},[186,95219,1988],{"class":202},[186,95221,2108],{"class":206},[186,95223,1988],{"class":202},[186,95225,1691],{"class":206},[186,95227,1988],{"class":202},[186,95229,2056],{"class":206},[186,95231,1988],{"class":202},[186,95233,1809],{"class":206},[186,95235,1988],{"class":202},[186,95237,1803],{"class":206},[186,95239,1988],{"class":202},[186,95241,2383],{"class":206},[186,95243,1988],{"class":202},[186,95245,1904],{"class":206},[186,95247,6123],{"class":202},[186,95249,95250],{"class":188,"line":49},[186,95251,95252],{"class":192},"#计算一组数中最大值与最小值的差，可指定轴\n",[186,95254,95255],{"class":188,"line":219},[186,95256,95257],{"class":202},"np.ptp(a)\n",[1524,95259,95260],{},"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":181,"searchDepth":49,"depth":49,"links":95262},[95263,95264,95265,95266,95267,95268,95269,95270,95271,95272,95273],{"id":94525,"depth":49,"text":94526},{"id":94568,"depth":49,"text":94569},{"id":94676,"depth":49,"text":94677},{"id":94770,"depth":49,"text":94771},{"id":94810,"depth":49,"text":94811},{"id":94883,"depth":49,"text":94884},{"id":94951,"depth":49,"text":94952},{"id":95003,"depth":49,"text":95004},{"id":95047,"depth":49,"text":95048},{"id":95126,"depth":49,"text":95127},{"id":95193,"depth":49,"text":95194},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94511,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95280,"title":95281,"body":95282,"description":1548,"extension":1549,"meta":95937,"navigation":1551,"path":95938,"seo":95939,"stem":95940,"__hash__":95941},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95283,"toc":95925},[95284,95287,95291,95294,95510,95514,95517,95726,95730,95796,95801,95805,95808,95811,95849,95853,95856,95861,95865,95868,95871,95876,95880,95883,95887,95890,95893,95898,95902,95905,95908,95913,95917,95922],[10,95285,95281],{"id":95286},"_12其他常用函数",[14,95288,95290],{"id":95289},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[169,95292,95293],{},"将数组的数据按照行列复制扩展",[176,95295,95297],{"className":31833,"code":95296,"language":31835,"meta":181,"style":181},"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",[183,95298,95299,95315,95324,95328,95333,95338,95351,95355,95360,95365,95370,95374,95379,95403,95415,95419,95423,95428,95433,95438,95443,95447,95460,95464,95468,95473,95478,95483,95488,95493,95497,95501,95506],{"__ignoreMap":181},[186,95300,95301,95303,95305,95307,95309,95311,95313],{"class":188,"line":189},[186,95302,948],{"class":202},[186,95304,529],{"class":669},[186,95306,94433],{"class":202},[186,95308,1829],{"class":206},[186,95310,1988],{"class":202},[186,95312,1930],{"class":206},[186,95314,1629],{"class":202},[186,95316,95317,95320,95322],{"class":188,"line":49},[186,95318,95319],{"class":202},"np.tile(a,",[186,95321,1697],{"class":206},[186,95323,1629],{"class":202},[186,95325,95326],{"class":188,"line":219},[186,95327,94995],{"class":192},[186,95329,95330],{"class":188,"line":225},[186,95331,95332],{"class":192},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[186,95334,95335],{"class":188,"line":242},[186,95336,95337],{"class":192},"#行复制两次，列复制三次\n",[186,95339,95340,95343,95345,95347,95349],{"class":188,"line":248},[186,95341,95342],{"class":202},"np.tile(a,(",[186,95344,1697],{"class":206},[186,95346,1988],{"class":202},[186,95348,1691],{"class":206},[186,95350,31952],{"class":202},[186,95352,95353],{"class":188,"line":265},[186,95354,94995],{"class":192},[186,95356,95357],{"class":188,"line":271},[186,95358,95359],{"class":532},"'''\n",[186,95361,95362],{"class":188,"line":288},[186,95363,95364],{"class":532},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[186,95366,95367],{"class":188,"line":294},[186,95368,95369],{"class":532},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[186,95371,95372],{"class":188,"line":1212},[186,95373,95359],{"class":532},[186,95375,95376],{"class":188,"line":1223},[186,95377,95378],{"class":192},"#创建二维数组\n",[186,95380,95381,95383,95385,95387,95389,95391,95393,95395,95397,95399,95401],{"class":188,"line":1236},[186,95382,94737],{"class":202},[186,95384,529],{"class":669},[186,95386,94433],{"class":202},[186,95388,1829],{"class":206},[186,95390,1988],{"class":202},[186,95392,2133],{"class":206},[186,95394,94438],{"class":202},[186,95396,1904],{"class":206},[186,95398,1988],{"class":202},[186,95400,1691],{"class":206},[186,95402,1629],{"class":202},[186,95404,95405,95408,95410,95412],{"class":188,"line":3096},[186,95406,95407],{"class":202},"np.tile(aa,",[186,95409,1697],{"class":206},[186,95411,2039],{"class":202},[186,95413,95414],{"class":192},"#一个数的时候就是行\n",[186,95416,95417],{"class":188,"line":3110},[186,95418,94995],{"class":192},[186,95420,95421],{"class":188,"line":3115},[186,95422,95359],{"class":532},[186,95424,95425],{"class":188,"line":3121},[186,95426,95427],{"class":532},"array([[ 1,  2,  3,  1,  2,  3],\n",[186,95429,95430],{"class":188,"line":3142},[186,95431,95432],{"class":532},"       [ 4,  5,  6,  4,  5,  6],\n",[186,95434,95435],{"class":188,"line":3147},[186,95436,95437],{"class":532},"       [ 7,  8,  9,  7,  8,  9],\n",[186,95439,95440],{"class":188,"line":3161},[186,95441,95442],{"class":532},"       [10, 11, 12, 10, 11, 12]])\n",[186,95444,95445],{"class":188,"line":3166},[186,95446,95359],{"class":532},[186,95448,95449,95452,95454,95456,95458],{"class":188,"line":3195},[186,95450,95451],{"class":202},"np.tile(aa,(",[186,95453,1697],{"class":206},[186,95455,1988],{"class":202},[186,95457,1691],{"class":206},[186,95459,31952],{"class":202},[186,95461,95462],{"class":188,"line":3200},[186,95463,94995],{"class":192},[186,95465,95466],{"class":188,"line":3217},[186,95467,95359],{"class":532},[186,95469,95470],{"class":188,"line":3222},[186,95471,95472],{"class":532},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[186,95474,95475],{"class":188,"line":3227},[186,95476,95477],{"class":532},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[186,95479,95480],{"class":188,"line":3232},[186,95481,95482],{"class":532},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[186,95484,95485],{"class":188,"line":3246},[186,95486,95487],{"class":532},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[186,95489,95490],{"class":188,"line":3251},[186,95491,95492],{"class":532},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[186,95494,95495],{"class":188,"line":4044},[186,95496,95477],{"class":532},[186,95498,95499],{"class":188,"line":4058},[186,95500,95482],{"class":532},[186,95502,95503],{"class":188,"line":4066},[186,95504,95505],{"class":532},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[186,95507,95508],{"class":188,"line":4071},[186,95509,95359],{"class":532},[14,95511,95513],{"id":95512},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[169,95515,95516],{},"repeat()将数组中的每个元素重复若干次",[176,95518,95520],{"className":31833,"code":95519,"language":31835,"meta":181,"style":181},"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",[183,95521,95522,95538,95547,95551,95556,95580,95585,95594,95598,95603,95607,95612,95628,95632,95636,95641,95646,95651,95655,95660,95664,95669,95674,95678,95694,95698,95702,95707,95712,95717,95722],{"__ignoreMap":181},[186,95523,95524,95526,95528,95530,95532,95534,95536],{"class":188,"line":189},[186,95525,948],{"class":202},[186,95527,529],{"class":669},[186,95529,94433],{"class":202},[186,95531,1829],{"class":206},[186,95533,1988],{"class":202},[186,95535,1930],{"class":206},[186,95537,1629],{"class":202},[186,95539,95540,95543,95545],{"class":188,"line":49},[186,95541,95542],{"class":202},"np.repeat(a,",[186,95544,1691],{"class":206},[186,95546,1629],{"class":202},[186,95548,95549],{"class":188,"line":219},[186,95550,94995],{"class":192},[186,95552,95553],{"class":188,"line":225},[186,95554,95555],{"class":192},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[186,95557,95558,95560,95562,95564,95566,95568,95570,95572,95574,95576,95578],{"class":188,"line":242},[186,95559,94737],{"class":202},[186,95561,529],{"class":669},[186,95563,94433],{"class":202},[186,95565,1829],{"class":206},[186,95567,1988],{"class":202},[186,95569,2133],{"class":206},[186,95571,94438],{"class":202},[186,95573,1904],{"class":206},[186,95575,1988],{"class":202},[186,95577,1691],{"class":206},[186,95579,1629],{"class":202},[186,95581,95582],{"class":188,"line":248},[186,95583,95584],{"class":192},"#这个重复之后二维变成一维\n",[186,95586,95587,95590,95592],{"class":188,"line":265},[186,95588,95589],{"class":202},"np.repeat(aa,",[186,95591,1697],{"class":206},[186,95593,1629],{"class":202},[186,95595,95596],{"class":188,"line":271},[186,95597,95359],{"class":532},[186,95599,95600],{"class":188,"line":288},[186,95601,95602],{"class":532},"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",[186,95604,95605],{"class":188,"line":294},[186,95606,95359],{"class":532},[186,95608,95609],{"class":188,"line":1212},[186,95610,95611],{"class":192},"#指定axis\n",[186,95613,95614,95616,95618,95620,95622,95624,95626],{"class":188,"line":1223},[186,95615,95589],{"class":202},[186,95617,1697],{"class":206},[186,95619,1988],{"class":202},[186,95621,48968],{"class":835},[186,95623,529],{"class":669},[186,95625,1803],{"class":206},[186,95627,1629],{"class":202},[186,95629,95630],{"class":188,"line":1236},[186,95631,94995],{"class":192},[186,95633,95634],{"class":188,"line":3096},[186,95635,95359],{"class":532},[186,95637,95638],{"class":188,"line":3110},[186,95639,95640],{"class":532},"array([[ 1,  2,  3],\n",[186,95642,95643],{"class":188,"line":3115},[186,95644,95645],{"class":532},"       [ 1,  2,  3],\n",[186,95647,95648],{"class":188,"line":3121},[186,95649,95650],{"class":532},"       [ 4,  5,  6],\n",[186,95652,95653],{"class":188,"line":3142},[186,95654,95650],{"class":532},[186,95656,95657],{"class":188,"line":3147},[186,95658,95659],{"class":532},"       [ 7,  8,  9],\n",[186,95661,95662],{"class":188,"line":3161},[186,95663,95659],{"class":532},[186,95665,95666],{"class":188,"line":3166},[186,95667,95668],{"class":532},"       [10, 11, 12],\n",[186,95670,95671],{"class":188,"line":3195},[186,95672,95673],{"class":532},"       [10, 11, 12]])\n",[186,95675,95676],{"class":188,"line":3200},[186,95677,95359],{"class":532},[186,95679,95680,95682,95684,95686,95688,95690,95692],{"class":188,"line":3217},[186,95681,95589],{"class":202},[186,95683,1697],{"class":206},[186,95685,1988],{"class":202},[186,95687,48968],{"class":835},[186,95689,529],{"class":669},[186,95691,1829],{"class":206},[186,95693,1629],{"class":202},[186,95695,95696],{"class":188,"line":3222},[186,95697,94995],{"class":192},[186,95699,95700],{"class":188,"line":3227},[186,95701,95359],{"class":532},[186,95703,95704],{"class":188,"line":3232},[186,95705,95706],{"class":532},"array([[ 1,  1,  2,  2,  3,  3],\n",[186,95708,95709],{"class":188,"line":3246},[186,95710,95711],{"class":532},"       [ 4,  4,  5,  5,  6,  6],\n",[186,95713,95714],{"class":188,"line":3251},[186,95715,95716],{"class":532},"       [ 7,  7,  8,  8,  9,  9],\n",[186,95718,95719],{"class":188,"line":4044},[186,95720,95721],{"class":532},"       [10, 10, 11, 11, 12, 12]])\n",[186,95723,95724],{"class":188,"line":4058},[186,95725,95359],{"class":532},[14,95727,95729],{"id":95728},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[176,95731,95733],{"className":31833,"code":95732,"language":31835,"meta":181,"style":181},"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",[183,95734,95735,95751,95756,95768,95772,95777,95787,95791],{"__ignoreMap":181},[186,95736,95737,95739,95741,95743,95745,95747,95749],{"class":188,"line":189},[186,95738,948],{"class":202},[186,95740,529],{"class":669},[186,95742,94433],{"class":202},[186,95744,1829],{"class":206},[186,95746,1988],{"class":202},[186,95748,1930],{"class":206},[186,95750,1629],{"class":202},[186,95752,95753],{"class":188,"line":49},[186,95754,95755],{"class":192},"#array([，2，3，4])\n",[186,95757,95758,95761,95763,95765],{"class":188,"line":219},[186,95759,95760],{"class":202},"np.roll(a,",[186,95762,1697],{"class":206},[186,95764,2039],{"class":202},[186,95766,95767],{"class":192},"#传正数向后调多少位，传负数向前调多少位\n",[186,95769,95770],{"class":188,"line":225},[186,95771,94995],{"class":192},[186,95773,95774],{"class":188,"line":242},[186,95775,95776],{"class":192},"#array([3, 4, 1, 2])\n",[186,95778,95779,95781,95783,95785],{"class":188,"line":248},[186,95780,95760],{"class":202},[186,95782,2142],{"class":669},[186,95784,1829],{"class":206},[186,95786,1629],{"class":202},[186,95788,95789],{"class":188,"line":265},[186,95790,94995],{"class":192},[186,95792,95793],{"class":188,"line":271},[186,95794,95795],{"class":192},"#array([2, 3, 4, 1])\n",[169,95797,95798],{},[164,95799],{"alt":181,"src":95800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95802,95804],{"id":95803},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[169,95806,95807],{},"resize()重新调整数组的大小",[169,95809,95810],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[176,95812,95814],{"className":31833,"code":95813,"language":31835,"meta":181,"style":181},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[183,95815,95816,95821,95834],{"__ignoreMap":181},[186,95817,95818],{"class":188,"line":189},[186,95819,95820],{"class":192},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[186,95822,95823,95826,95828,95830,95832],{"class":188,"line":49},[186,95824,95825],{"class":202},"np.resize(aa,(",[186,95827,1697],{"class":206},[186,95829,1988],{"class":202},[186,95831,1954],{"class":206},[186,95833,31952],{"class":202},[186,95835,95836,95838,95840,95842,95844,95846],{"class":188,"line":219},[186,95837,95825],{"class":202},[186,95839,1697],{"class":206},[186,95841,1988],{"class":202},[186,95843,2030],{"class":206},[186,95845,84203],{"class":202},[186,95847,95848],{"class":192},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95850,95852],{"id":95851},"_125-placeput函数","12.5 place()\u002Fput()函数",[169,95854,95855],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[169,95857,95858],{},[164,95859],{"alt":181,"src":95860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95862,95864],{"id":95863},"_126-保存加载文件","12.6 保存加载文件",[169,95866,95867],{},"savetxt():将数据保存到txt文件中",[169,95869,95870],{},"loadtxt():从文件加载数据",[169,95872,95873],{},[164,95874],{"alt":181,"src":95875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95877,95879],{"id":95878},"_127-genfromtxt函数","12.7 genfromtxt()函数",[169,95881,95882],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95884,95886],{"id":95885},"_128-anyall函数","12.8 any()\u002Fall()函数",[169,95888,95889],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[169,95891,95892],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[169,95894,95895],{},[164,95896],{"alt":181,"src":95897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95899,95901],{"id":95900},"_129-where语句","12.9 where语句",[169,95903,95904],{},"np.where(条件,x,y)",[169,95906,95907],{},"如果条件为True,对应值为x,否则对应值为y",[169,95909,95910],{},[164,95911],{"alt":181,"src":95912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95914,95916],{"id":95915},"_1210-dot矩阵","12.10 dot()矩阵",[169,95918,95919],{},[164,95920],{"alt":181,"src":95921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1524,95923,95924],{},"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":181,"searchDepth":49,"depth":49,"links":95926},[95927,95928,95929,95930,95931,95932,95933,95934,95935,95936],{"id":95289,"depth":49,"text":95290},{"id":95512,"depth":49,"text":95513},{"id":95728,"depth":49,"text":95729},{"id":95803,"depth":49,"text":95804},{"id":95851,"depth":49,"text":95852},{"id":95863,"depth":49,"text":95864},{"id":95878,"depth":49,"text":95879},{"id":95885,"depth":49,"text":95886},{"id":95900,"depth":49,"text":95901},{"id":95915,"depth":49,"text":95916},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95281,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95943,"title":95944,"body":95945,"description":1548,"extension":1549,"meta":96298,"navigation":1551,"path":96299,"seo":96300,"stem":96301,"__hash__":96302},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95946,"toc":96296},[95947,95950,95953,95956,95959,95962,96027,96029,96293],[10,95948,95944],{"id":95949},"_13数组排序",[169,95951,95952],{},"排序主要用到的方法是np.sort和np.argsort",[169,95954,95955],{},"其中np.sort()对数组直接排序",[169,95957,95958],{},"而np.argsort()是返回排序后的原始索引",[169,95960,95961],{},"①一维数组",[176,95963,95965],{"className":31833,"code":95964,"language":31835,"meta":181,"style":181},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[183,95966,95967,95971,96011,96019],{"__ignoreMap":181},[186,95968,95969],{"class":188,"line":189},[186,95970,94536],{"class":192},[186,95972,95973,95975,95977,95979,95981,95983,95985,95987,95989,95991,95993,95995,95997,95999,96001,96003,96005,96007,96009],{"class":188,"line":49},[186,95974,948],{"class":202},[186,95976,529],{"class":669},[186,95978,94455],{"class":202},[186,95980,1691],{"class":206},[186,95982,1988],{"class":202},[186,95984,2108],{"class":206},[186,95986,1988],{"class":202},[186,95988,2005],{"class":206},[186,95990,1988],{"class":202},[186,95992,2383],{"class":206},[186,95994,1988],{"class":202},[186,95996,1890],{"class":206},[186,95998,1988],{"class":202},[186,96000,2501],{"class":206},[186,96002,1988],{"class":202},[186,96004,1954],{"class":206},[186,96006,1988],{"class":202},[186,96008,2056],{"class":206},[186,96010,6123],{"class":202},[186,96012,96013,96016],{"class":188,"line":219},[186,96014,96015],{"class":202},"np.sort(a)",[186,96017,96018],{"class":192},"#升序排序\n",[186,96020,96021,96024],{"class":188,"line":225},[186,96022,96023],{"class":202},"np.argsort(a)",[186,96025,96026],{"class":192},"#按照元素大小来索引排序\n",[169,96028,94722],{},[176,96030,96032],{"className":31833,"code":96031,"language":31835,"meta":181,"style":181},"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",[183,96033,96034,96046,96072,96077,96081,96086,96091,96096,96101,96105,96113,96117,96122,96127,96132,96137,96141,96146,96159,96163,96168,96173,96178,96183,96187,96192,96204,96208,96212,96216,96220,96224,96228,96233,96248,96253,96262,96267,96271,96275,96280,96284,96289],{"__ignoreMap":181},[186,96035,96036,96039,96041,96043],{"class":188,"line":189},[186,96037,96038],{"class":202},"np.random.seed(",[186,96040,1803],{"class":206},[186,96042,2039],{"class":202},[186,96044,96045],{"class":192},"#保证每次值一样\n",[186,96047,96048,96050,96052,96054,96056,96058,96060,96062,96064,96066,96068,96070],{"class":188,"line":49},[186,96049,94737],{"class":202},[186,96051,529],{"class":669},[186,96053,94545],{"class":202},[186,96055,1922],{"class":206},[186,96057,1988],{"class":202},[186,96059,32951],{"class":835},[186,96061,529],{"class":669},[186,96063,832],{"class":202},[186,96065,1904],{"class":206},[186,96067,1988],{"class":202},[186,96069,1954],{"class":206},[186,96071,31952],{"class":202},[186,96073,96074],{"class":188,"line":219},[186,96075,96076],{"class":192},"#原数组：\n",[186,96078,96079],{"class":188,"line":225},[186,96080,95359],{"class":532},[186,96082,96083],{"class":188,"line":242},[186,96084,96085],{"class":532},"array([[44, 47, 64, 67, 67,  9],\n",[186,96087,96088],{"class":188,"line":248},[186,96089,96090],{"class":532},"       [83, 21, 36, 87, 70, 88],\n",[186,96092,96093],{"class":188,"line":265},[186,96094,96095],{"class":532},"       [88, 12, 58, 65, 39, 87],\n",[186,96097,96098],{"class":188,"line":271},[186,96099,96100],{"class":532},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[186,96102,96103],{"class":188,"line":288},[186,96104,95359],{"class":532},[186,96106,96107,96110],{"class":188,"line":294},[186,96108,96109],{"class":202},"np.sort(aa)",[186,96111,96112],{"class":192},"#每行进行了排序\n",[186,96114,96115],{"class":188,"line":1212},[186,96116,95359],{"class":532},[186,96118,96119],{"class":188,"line":1223},[186,96120,96121],{"class":532},"array([[ 9, 44, 47, 64, 67, 67],\n",[186,96123,96124],{"class":188,"line":1236},[186,96125,96126],{"class":532},"       [21, 36, 70, 83, 87, 88],\n",[186,96128,96129],{"class":188,"line":3096},[186,96130,96131],{"class":532},"       [12, 39, 58, 65, 87, 88],\n",[186,96133,96134],{"class":188,"line":3110},[186,96135,96136],{"class":532},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[186,96138,96139],{"class":188,"line":3115},[186,96140,95359],{"class":532},[186,96142,96143],{"class":188,"line":3121},[186,96144,96145],{"class":192},"#axis=0时\n",[186,96147,96148,96151,96153,96155,96157],{"class":188,"line":3142},[186,96149,96150],{"class":202},"np.sort(aa,",[186,96152,48968],{"class":835},[186,96154,529],{"class":669},[186,96156,1803],{"class":206},[186,96158,1629],{"class":202},[186,96160,96161],{"class":188,"line":3147},[186,96162,95359],{"class":532},[186,96164,96165],{"class":188,"line":3161},[186,96166,96167],{"class":532},"array([[44, 12, 36, 37, 25,  9],\n",[186,96169,96170],{"class":188,"line":3166},[186,96171,96172],{"class":532},"       [46, 21, 58, 65, 39, 77],\n",[186,96174,96175],{"class":188,"line":3195},[186,96176,96177],{"class":532},"       [83, 47, 64, 67, 67, 87],\n",[186,96179,96180],{"class":188,"line":3200},[186,96181,96182],{"class":532},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[186,96184,96185],{"class":188,"line":3217},[186,96186,95359],{"class":532},[186,96188,96189],{"class":188,"line":3222},[186,96190,96191],{"class":192},"#axis=1时,为默认值\n",[186,96193,96194,96196,96198,96200,96202],{"class":188,"line":3227},[186,96195,96150],{"class":202},[186,96197,48968],{"class":835},[186,96199,529],{"class":669},[186,96201,1829],{"class":206},[186,96203,1629],{"class":202},[186,96205,96206],{"class":188,"line":3232},[186,96207,95359],{"class":532},[186,96209,96210],{"class":188,"line":3246},[186,96211,96121],{"class":532},[186,96213,96214],{"class":188,"line":3251},[186,96215,96126],{"class":532},[186,96217,96218],{"class":188,"line":4044},[186,96219,96131],{"class":532},[186,96221,96222],{"class":188,"line":4058},[186,96223,96136],{"class":532},[186,96225,96226],{"class":188,"line":4066},[186,96227,95359],{"class":532},[186,96229,96230],{"class":188,"line":4071},[186,96231,96232],{"class":192},"#按最后一列排序\n",[186,96234,96235,96237,96239,96242,96244,96246],{"class":188,"line":4077},[186,96236,1874],{"class":202},[186,96238,529],{"class":669},[186,96240,96241],{"class":202},"aa[:,",[186,96243,2142],{"class":669},[186,96245,1829],{"class":206},[186,96247,34701],{"class":202},[186,96249,96250],{"class":188,"line":4083},[186,96251,96252],{"class":192},"#获取最后一列排好序的索引\n",[186,96254,96255,96257,96259],{"class":188,"line":4088},[186,96256,75491],{"class":202},[186,96258,529],{"class":669},[186,96260,96261],{"class":202},"np.argsort(b)\n",[186,96263,96264],{"class":188,"line":9411},[186,96265,96266],{"class":202},"aa[index]\n",[186,96268,96269],{"class":188,"line":9435},[186,96270,95359],{"class":532},[186,96272,96273],{"class":188,"line":9440},[186,96274,96085],{"class":532},[186,96276,96277],{"class":188,"line":9446},[186,96278,96279],{"class":532},"       [46, 88, 81, 37, 25, 77],\n",[186,96281,96282],{"class":188,"line":9473},[186,96283,96095],{"class":532},[186,96285,96286],{"class":188,"line":9478},[186,96287,96288],{"class":532},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[186,96290,96291],{"class":188,"line":9484},[186,96292,95359],{"class":532},[1524,96294,96295],{},"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":181,"searchDepth":49,"depth":49,"links":96297},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95944,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96304,"title":96305,"body":96306,"description":1548,"extension":1549,"meta":96336,"navigation":1551,"path":96337,"seo":96338,"stem":96339,"__hash__":96340},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96307,"toc":96334},[96308,96311,96314,96317,96320,96323,96326,96329],[10,96309,96305],{"id":96310},"_14广播机制",[169,96312,96313],{},"广播的规则：",[169,96315,96316],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[169,96318,96319],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[169,96321,96322],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[169,96324,96325],{},"3.如果没有维度形状为1，则会引发异常",[169,96327,96328],{},"也就是只有维度或者个数为1才可以进行广播操作",[169,96330,96331],{},[164,96332],{"alt":181,"src":96333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":181,"searchDepth":49,"depth":49,"links":96335},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96305,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96342,"title":96343,"body":96344,"description":1548,"extension":1549,"meta":96442,"navigation":1551,"path":96443,"seo":96444,"stem":96445,"__hash__":96446},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96345,"toc":96440},[96346,96349,96352,96437],[10,96347,96343],{"id":96348},"_15比较掩码",[169,96350,96351],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[176,96353,96355],{"className":31833,"code":96354,"language":31835,"meta":181,"style":181},"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",[183,96356,96357,96403,96414,96428,96432],{"__ignoreMap":181},[186,96358,96359,96361,96363,96366,96368,96370,96372,96374,96376,96378,96380,96382,96384,96386,96388,96390,96392,96394,96396,96398,96400],{"class":188,"line":189},[186,96360,948],{"class":202},[186,96362,529],{"class":669},[186,96364,96365],{"class":202},"np.array([[",[186,96367,1829],{"class":206},[186,96369,1988],{"class":202},[186,96371,1697],{"class":206},[186,96373,1988],{"class":202},[186,96375,1691],{"class":206},[186,96377,49484],{"class":202},[186,96379,2082],{"class":206},[186,96381,1988],{"class":202},[186,96383,2108],{"class":206},[186,96385,1988],{"class":202},[186,96387,2133],{"class":206},[186,96389,49484],{"class":202},[186,96391,2333],{"class":206},[186,96393,1988],{"class":202},[186,96395,2358],{"class":206},[186,96397,1988],{"class":202},[186,96399,2383],{"class":206},[186,96401,96402],{"class":202},"]])\n",[186,96404,96405,96407,96409,96411],{"class":188,"line":49},[186,96406,948],{"class":202},[186,96408,520],{"class":669},[186,96410,801],{"class":206},[186,96412,96413],{"class":192},"#结果是一个由True,False组成的数组\n",[186,96415,96416,96419,96421,96423,96425],{"class":188,"line":219},[186,96417,96418],{"class":202},"a[a",[186,96420,520],{"class":669},[186,96422,801],{"class":206},[186,96424,2547],{"class":202},[186,96426,96427],{"class":192},"#小于20的元素会存到这个数组中\n",[186,96429,96430],{"class":188,"line":225},[186,96431,94995],{"class":192},[186,96433,96434],{"class":188,"line":242},[186,96435,96436],{"class":192},"#array([ 1,  2,  3, 11, 12, 13])\n",[1524,96438,96439],{},"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":181,"searchDepth":49,"depth":49,"links":96441},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96343,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96448,"title":96449,"body":96450,"description":1548,"extension":1549,"meta":96542,"navigation":1551,"path":96543,"seo":96544,"stem":96545,"__hash__":96546},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96451,"toc":96540},[96452,96455,96458,96461,96464,96467,96532,96537],[10,96453,96449],{"id":96454},"_16魔法命令time",[169,96456,96457],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[169,96459,96460],{},"%:行模式",[169,96462,96463],{},"%%:单元格模式",[169,96465,96466],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[176,96468,96470],{"className":31833,"code":96469,"language":31835,"meta":181,"style":181},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[183,96471,96472,96477,96484,96489,96498,96511,96515,96523],{"__ignoreMap":181},[186,96473,96474],{"class":188,"line":189},[186,96475,96476],{"class":192},"#程序执行时间\n",[186,96478,96479,96481],{"class":188,"line":49},[186,96480,31847],{"class":669},[186,96482,96483],{"class":202}," time \n",[186,96485,96486],{"class":188,"line":219},[186,96487,96488],{"class":192},"#获取时间\n",[186,96490,96491,96494,96496],{"class":188,"line":225},[186,96492,96493],{"class":202},"start",[186,96495,529],{"class":669},[186,96497,33873],{"class":202},[186,96499,96500,96503,96506,96508],{"class":188,"line":242},[186,96501,96502],{"class":202},"time.sleep(",[186,96504,96505],{"class":206},"0.4",[186,96507,2039],{"class":202},[186,96509,96510],{"class":192},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[186,96512,96513],{"class":188,"line":248},[186,96514,96488],{"class":192},[186,96516,96517,96519,96521],{"class":188,"line":265},[186,96518,47255],{"class":202},[186,96520,529],{"class":669},[186,96522,33873],{"class":202},[186,96524,96525,96527,96529],{"class":188,"line":271},[186,96526,47255],{"class":202},[186,96528,2142],{"class":669},[186,96530,96531],{"class":202},"start\n",[169,96533,96534],{},[164,96535],{"alt":181,"src":96536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1524,96538,96539],{},"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":181,"searchDepth":49,"depth":49,"links":96541},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96449,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96548,"title":96549,"body":96550,"description":1548,"extension":1549,"meta":96585,"navigation":1551,"path":96586,"seo":96587,"stem":96588,"__hash__":96589},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96551,"toc":96583},[96552,96555,96558,96561,96564,96567,96570,96573,96578],[10,96553,96549],{"id":96554},"_17魔法命令timeit",[169,96556,96557],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[169,96559,96560],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[169,96562,96563],{},"单元格模式：",[169,96565,96566],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[169,96568,96569],{},"初始化语句执行次数由轮数来决定",[169,96571,96572],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[169,96574,96575],{},[164,96576],{"alt":181,"src":96577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[169,96579,96580],{},[164,96581],{"alt":181,"src":96582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":181,"searchDepth":49,"depth":49,"links":96584},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96549,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96591,"title":96592,"body":96593,"description":1548,"extension":1549,"meta":96611,"navigation":1551,"path":96612,"seo":96613,"stem":96614,"__hash__":96615},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96594,"toc":96609},[96595,96598,96601,96604],[10,96596,96592],{"id":96597},"_18魔法命令writefile和run",[169,96599,96600],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[169,96602,96603],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[169,96605,96606],{},[164,96607],{"alt":181,"src":96608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":181,"searchDepth":49,"depth":49,"links":96610},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96592,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96617,"title":96618,"body":96619,"description":1548,"extension":1549,"meta":96672,"navigation":1551,"path":96673,"seo":96674,"stem":96675,"__hash__":96676},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96620,"toc":96670},[96621,96624,96627,96629,96632,96635,96640,96643,96646,96649,96652,96655,96658,96661,96664,96667],[10,96622,96618],{"id":96623},"_19魔法命令memit",[169,96625,96626],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[169,96628,26058],{},[169,96630,96631],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[169,96633,96634],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[169,96636,96637],{},[164,96638],{"alt":181,"src":96639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[169,96641,96642],{},"补充：",[169,96644,96645],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[169,96647,96648],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[169,96650,96651],{},"解决方法：",[169,96653,96654],{},"1.cmd",[169,96656,96657],{},"2.依次输入以下代码：",[169,96659,96660],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[169,96662,96663],{},"pip install --upgrade ipython",[169,96665,96666],{},"#升级 memory_profiler 和 setuptools",[169,96668,96669],{},"pip install --upgrade memory_profiler setuptools",{"title":181,"searchDepth":49,"depth":49,"links":96671},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96618,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96678,"title":96679,"body":96680,"description":1548,"extension":1549,"meta":98326,"navigation":1551,"path":98327,"seo":98328,"stem":98329,"__hash__":98330},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96681,"toc":98296},[96682,96685,96689,96693,96754,96757,96762,96766,96771,96776,96781,96786,96789,96794,96798,96802,96835,96838,96841,96844,96896,96899,96935,96938,96980,96984,97005,97007,97044,97046,97051,97053,97058,97062,97065,97093,97097,97101,97154,97158,97250,97254,97258,97261,97266,97270,97295,97300,97304,97307,97310,97313,97316,97319,97322,97325,97337,97341,97345,97348,97380,97383,97406,97409,97435,97438,97464,97467,97501,97504,97566,97570,97573,97577,97580,97606,97609,97612,97617,97620,97689,97691,97696,97757,97760,97771,97777,97782,97786,97789,97802,97806,97821,97823,97846,97848,97874,97877,97880,97883,97931,97933,97938,97942,97946,97973,97977,98004,98007,98012,98017,98107,98111,98169,98174,98177,98180,98222,98226,98282,98287,98290,98293],[10,96683,96679],{"id":96684},"_2创建数组",[14,96686,96688],{"id":96687},"_21-array函数创建数组","2.1 array()函数创建数组",[29,96690,96692],{"id":96691},"_221-函数语句","2.2.1 函数语句",[176,96694,96696],{"className":31833,"code":96695,"language":31835,"meta":181,"style":181},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[183,96697,96698],{"__ignoreMap":181},[186,96699,96700,96703,96706,96708,96710,96712,96714,96716,96719,96721,96724,96726,96729,96731,96733,96735,96738,96740,96743,96745,96748,96750,96752],{"class":188,"line":189},[186,96701,96702],{"class":202},"numpy.array(",[186,96704,96705],{"class":206},"object",[186,96707,13898],{"class":202},[186,96709,94931],{"class":835},[186,96711,15027],{"class":669},[186,96713,40387],{"class":206},[186,96715,13898],{"class":202},[186,96717,96718],{"class":835},"copy",[186,96720,15027],{"class":669},[186,96722,96723],{"class":206}," True",[186,96725,13898],{"class":202},[186,96727,96728],{"class":835},"order",[186,96730,15027],{"class":669},[186,96732,40387],{"class":206},[186,96734,13898],{"class":202},[186,96736,96737],{"class":835},"subok",[186,96739,15027],{"class":669},[186,96741,96742],{"class":206}," False",[186,96744,13898],{"class":202},[186,96746,96747],{"class":835},"ndmin",[186,96749,15027],{"class":669},[186,96751,5559],{"class":206},[186,96753,1629],{"class":202},[169,96755,96756],{},"参数：",[169,96758,96759],{},[164,96760],{"alt":181,"src":96761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[29,96763,96765],{"id":96764},"_222-实例","2.2.2 实例",[169,96767,96768],{},[164,96769],{"alt":181,"src":96770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[169,96772,96773],{},[164,96774],{"alt":181,"src":96775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[169,96777,96778],{},[164,96779],{"alt":181,"src":96780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[169,96782,96783],{},[164,96784],{"alt":181,"src":96785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[169,96787,96788],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[169,96790,96791],{},[164,96792],{"alt":181,"src":96793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96795,96797],{"id":96796},"_22-随机数创建数组","2.2 随机数创建数组",[29,96799,96801],{"id":96800},"_221-random语句","2.2.1 random语句",[176,96803,96805],{"className":31833,"code":96804,"language":31835,"meta":181,"style":181},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[183,96806,96807,96812,96817,96825,96830],{"__ignoreMap":181},[186,96808,96809],{"class":188,"line":189},[186,96810,96811],{"class":192},"#random.random()\n",[186,96813,96814],{"class":188,"line":49},[186,96815,96816],{"class":192},"#确定随机种子,就是每次运行结果是相同的\n",[186,96818,96819,96821,96823],{"class":188,"line":219},[186,96820,96038],{"class":202},[186,96822,1803],{"class":206},[186,96824,1629],{"class":202},[186,96826,96827],{"class":188,"line":225},[186,96828,96829],{"class":202},"np.random.random()\n",[186,96831,96832],{"class":188,"line":242},[186,96833,96834],{"class":192},"#生成一个随机的数目\n",[169,96836,96837],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[169,96839,96840],{},"可以指定数组形状 size",[169,96842,96843],{},"①生成一维数组",[176,96845,96847],{"className":31833,"code":96846,"language":31835,"meta":181,"style":181},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[183,96848,96849,96854,96867,96872,96888],{"__ignoreMap":181},[186,96850,96851],{"class":188,"line":189},[186,96852,96853],{"class":192},"#random.random(size())\n",[186,96855,96856,96859,96861,96863,96865],{"class":188,"line":49},[186,96857,96858],{"class":202},"np.random.random(",[186,96860,32951],{"class":835},[186,96862,529],{"class":669},[186,96864,1930],{"class":206},[186,96866,1629],{"class":202},[186,96868,96869],{"class":188,"line":219},[186,96870,96871],{"class":192},"#生成一位的五个元素\n",[186,96873,96874,96876,96878,96880,96882,96884,96886],{"class":188,"line":225},[186,96875,948],{"class":202},[186,96877,529],{"class":669},[186,96879,96858],{"class":202},[186,96881,32951],{"class":835},[186,96883,529],{"class":669},[186,96885,1904],{"class":206},[186,96887,1629],{"class":202},[186,96889,96890,96893],{"class":188,"line":242},[186,96891,96892],{"class":202},"a.shape ",[186,96894,96895],{"class":192},"#输出数组形状\n",[169,96897,96898],{},"②生成二维数组",[176,96900,96902],{"className":31833,"code":96901,"language":31835,"meta":181,"style":181},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[183,96903,96904,96908,96930],{"__ignoreMap":181},[186,96905,96906],{"class":188,"line":189},[186,96907,94732],{"class":192},[186,96909,96910,96912,96914,96916,96918,96920,96922,96924,96926,96928],{"class":188,"line":49},[186,96911,94737],{"class":202},[186,96913,529],{"class":669},[186,96915,96858],{"class":202},[186,96917,32951],{"class":835},[186,96919,529],{"class":669},[186,96921,832],{"class":202},[186,96923,1904],{"class":206},[186,96925,1988],{"class":202},[186,96927,1930],{"class":206},[186,96929,31952],{"class":202},[186,96931,96932],{"class":188,"line":219},[186,96933,96934],{"class":192},"#生成四行五列的数组\n",[169,96936,96937],{},"③生成三维数组",[176,96939,96941],{"className":31833,"code":96940,"language":31835,"meta":181,"style":181},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[183,96942,96943,96948,96975],{"__ignoreMap":181},[186,96944,96945],{"class":188,"line":189},[186,96946,96947],{"class":192},"#三维数组\n",[186,96949,96950,96953,96955,96957,96959,96961,96963,96965,96967,96969,96971,96973],{"class":188,"line":49},[186,96951,96952],{"class":202},"aaa",[186,96954,529],{"class":669},[186,96956,96858],{"class":202},[186,96958,32951],{"class":835},[186,96960,529],{"class":669},[186,96962,832],{"class":202},[186,96964,1697],{"class":206},[186,96966,1988],{"class":202},[186,96968,1691],{"class":206},[186,96970,1988],{"class":202},[186,96972,1904],{"class":206},[186,96974,31952],{"class":202},[186,96976,96977],{"class":188,"line":219},[186,96978,96979],{"class":202},"aaa.shape\n",[29,96981,96983],{"id":96982},"_222-randint语句","2.2.2 randint语句",[176,96985,96987],{"className":31833,"code":96986,"language":31835,"meta":181,"style":181},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[183,96988,96989,96994],{"__ignoreMap":181},[186,96990,96991],{"class":188,"line":189},[186,96992,96993],{"class":192},"#生成随机的整数 random.randint(low,high,size)\n",[186,96995,96996,96998,97000,97002],{"class":188,"line":49},[186,96997,94545],{"class":202},[186,96999,1930],{"class":206},[186,97001,839],{"class":202},[186,97003,97004],{"class":192},"#0~5中的随机一个数\n",[169,97006,96843],{},[176,97008,97010],{"className":31833,"code":97009,"language":31835,"meta":181,"style":181},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[183,97011,97012,97017,97039],{"__ignoreMap":181},[186,97013,97014],{"class":188,"line":189},[186,97015,97016],{"class":192},"#一维\n",[186,97018,97019,97021,97023,97025,97027,97029,97031,97033,97035,97037],{"class":188,"line":49},[186,97020,94545],{"class":202},[186,97022,1829],{"class":206},[186,97024,1988],{"class":202},[186,97026,2082],{"class":206},[186,97028,1988],{"class":202},[186,97030,32951],{"class":835},[186,97032,529],{"class":669},[186,97034,832],{"class":202},[186,97036,2056],{"class":206},[186,97038,31952],{"class":202},[186,97040,97041],{"class":188,"line":219},[186,97042,97043],{"class":192},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[169,97045,96898],{},[169,97047,97048],{},[164,97049],{"alt":181,"src":97050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[169,97052,96937],{},[169,97054,97055],{},[164,97056],{"alt":181,"src":97057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[29,97059,97061],{"id":97060},"_222-rand语句","2.2.2 rand语句",[169,97063,97064],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[176,97066,97068],{"className":31833,"code":97067,"language":31835,"meta":181,"style":181},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[183,97069,97070,97083,97088],{"__ignoreMap":181},[186,97071,97072,97075,97077,97079,97081],{"class":188,"line":189},[186,97073,97074],{"class":202},"np.random.rand(",[186,97076,1922],{"class":206},[186,97078,1988],{"class":202},[186,97080,2056],{"class":206},[186,97082,1629],{"class":202},[186,97084,97085],{"class":188,"line":49},[186,97086,97087],{"class":192},"#第一个参数100：行数，表示有100个样本\n",[186,97089,97090],{"class":188,"line":219},[186,97091,97092],{"class":192},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97094,97096],{"id":97095},"_23-arange创建数组","2.3 arange()创建数组",[29,97098,97100],{"id":97099},"_231-函数语句","2.3.1 函数语句",[176,97102,97104],{"className":31833,"code":97103,"language":31835,"meta":181,"style":181},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[183,97105,97106,97120,97125,97130,97135,97140,97145,97150],{"__ignoreMap":181},[186,97107,97108,97111,97113,97115,97118],{"class":188,"line":189},[186,97109,97110],{"class":202},"numpy.arange([start,] stop[, step], ",[186,97112,94931],{"class":835},[186,97114,529],{"class":669},[186,97116,97117],{"class":206},"None",[186,97119,1629],{"class":202},[186,97121,97122],{"class":188,"line":49},[186,97123,97124],{"class":192},"#参数\n",[186,97126,97127],{"class":188,"line":219},[186,97128,97129],{"class":532},"\"\"\"\n",[186,97131,97132],{"class":188,"line":225},[186,97133,97134],{"class":532},"start:起始值，可选，默认从 0 开始。\n",[186,97136,97137],{"class":188,"line":242},[186,97138,97139],{"class":532},"stop:结束值（不包含该值）。\n",[186,97141,97142],{"class":188,"line":248},[186,97143,97144],{"class":532},"step:步长，可选，默认是 1。可以为浮点数。\n",[186,97146,97147],{"class":188,"line":265},[186,97148,97149],{"class":532},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[186,97151,97152],{"class":188,"line":271},[186,97153,97129],{"class":532},[29,97155,97157],{"id":97156},"_232-实例","2.3.2 实例",[176,97159,97161],{"className":31833,"code":97160,"language":31835,"meta":181,"style":181},"#创建一维数组\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",[183,97162,97163,97167,97191,97196,97201,97205,97228,97232,97236,97241,97246],{"__ignoreMap":181},[186,97164,97165],{"class":188,"line":189},[186,97166,94536],{"class":192},[186,97168,97169,97171,97173,97175,97177,97179,97181,97183,97185,97187,97189],{"class":188,"line":49},[186,97170,94433],{"class":202},[186,97172,1829],{"class":206},[186,97174,1988],{"class":202},[186,97176,2333],{"class":206},[186,97178,1988],{"class":202},[186,97180,1829],{"class":206},[186,97182,1988],{"class":202},[186,97184,94931],{"class":835},[186,97186,529],{"class":669},[186,97188,1626],{"class":206},[186,97190,1629],{"class":202},[186,97192,97193],{"class":188,"line":219},[186,97194,97195],{"class":192},"#输出结果：\n",[186,97197,97198],{"class":188,"line":225},[186,97199,97200],{"class":192},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[186,97202,97203],{"class":188,"line":242},[186,97204,95378],{"class":192},[186,97206,97207,97210,97212,97214,97216,97219,97221,97223,97225],{"class":188,"line":248},[186,97208,97209],{"class":202},"np.array([np.arange(",[186,97211,1829],{"class":206},[186,97213,1988],{"class":202},[186,97215,1904],{"class":206},[186,97217,97218],{"class":202},"),np.arange(",[186,97220,1904],{"class":206},[186,97222,1988],{"class":202},[186,97224,1979],{"class":206},[186,97226,97227],{"class":202},")])\n",[186,97229,97230],{"class":188,"line":265},[186,97231,94995],{"class":192},[186,97233,97234],{"class":188,"line":271},[186,97235,97129],{"class":532},[186,97237,97238],{"class":188,"line":288},[186,97239,97240],{"class":532},"array([[1, 2, 3],\n",[186,97242,97243],{"class":188,"line":294},[186,97244,97245],{"class":532},"       [4, 5, 6]])\n",[186,97247,97248],{"class":188,"line":1212},[186,97249,97129],{"class":532},[14,97251,97253],{"id":97252},"_24-生态分布","2.4 生态分布",[29,97255,97257],{"id":97256},"_241-标准正态分布","2.4.1 标准正态分布",[169,97259,97260],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[169,97262,97263],{},[164,97264],{"alt":181,"src":97265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[29,97267,97269],{"id":97268},"_242-常规正态分布","2.4.2 常规正态分布",[176,97271,97273],{"className":31833,"code":97272,"language":31835,"meta":181,"style":181},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[183,97274,97275,97280,97285,97290],{"__ignoreMap":181},[186,97276,97277],{"class":188,"line":189},[186,97278,97279],{"class":202},"random.normal(loc,scale,size)也可以生成正态分布\n",[186,97281,97282],{"class":188,"line":49},[186,97283,97284],{"class":192},"#loc:期望\n",[186,97286,97287],{"class":188,"line":219},[186,97288,97289],{"class":192},"#scale:方差\n",[186,97291,97292],{"class":188,"line":225},[186,97293,97294],{"class":192},"#size:用于确定是几维的数列\n",[169,97296,97297],{},[164,97298],{"alt":181,"src":97299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97301,97303],{"id":97302},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[169,97305,97306],{},"ndim:秩，维度个数",[169,97308,97309],{},"size:数组元素的个数",[169,97311,97312],{},"shape:数组的形状",[169,97314,97315],{},"dtype:数组元素的类型",[169,97317,97318],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[169,97320,97321],{},"他们都是属性，通过数组.属性的形式来确定",[169,97323,97324],{},"如果需要输出多个可以通过以下方式：",[176,97326,97328],{"className":31833,"code":97327,"language":31835,"meta":181,"style":181},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[183,97329,97330],{"__ignoreMap":181},[186,97331,97332,97334],{"class":188,"line":189},[186,97333,31870],{"class":206},[186,97335,97336],{"class":202},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97338,97340],{"id":97339},"_26-其他方式创建数组","2.6 其他方式创建数组",[29,97342,97344],{"id":97343},"_261-zeros创建数组","2.6.1 zeros()创建数组",[169,97346,97347],{},"①创建一维数组",[176,97349,97351],{"className":31833,"code":97350,"language":31835,"meta":181,"style":181},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[183,97352,97353,97362,97366,97371,97376],{"__ignoreMap":181},[186,97354,97355,97358,97360],{"class":188,"line":189},[186,97356,97357],{"class":202},"np.zeros(",[186,97359,2056],{"class":206},[186,97361,1629],{"class":202},[186,97363,97364],{"class":188,"line":49},[186,97365,97129],{"class":532},[186,97367,97368],{"class":188,"line":219},[186,97369,97370],{"class":532},"输出结果：\n",[186,97372,97373],{"class":188,"line":225},[186,97374,97375],{"class":532},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[186,97377,97378],{"class":188,"line":242},[186,97379,97129],{"class":532},[169,97381,97382],{},"上方代码等价于：",[176,97384,97386],{"className":31833,"code":97385,"language":31835,"meta":181,"style":181},"np.zeros(shape=(10))#创建10个元素的0数组\n",[183,97387,97388],{"__ignoreMap":181},[186,97389,97390,97392,97395,97397,97399,97401,97403],{"class":188,"line":189},[186,97391,97357],{"class":202},[186,97393,97394],{"class":835},"shape",[186,97396,529],{"class":669},[186,97398,832],{"class":202},[186,97400,2056],{"class":206},[186,97402,84203],{"class":202},[186,97404,97405],{"class":192},"#创建10个元素的0数组\n",[169,97407,97408],{},"也可以指定类型",[176,97410,97412],{"className":31833,"code":97411,"language":31835,"meta":181,"style":181},"#指定类型\nnp.zeros(5,dtype=int)\n",[183,97413,97414,97419],{"__ignoreMap":181},[186,97415,97416],{"class":188,"line":189},[186,97417,97418],{"class":192},"#指定类型\n",[186,97420,97421,97423,97425,97427,97429,97431,97433],{"class":188,"line":49},[186,97422,97357],{"class":202},[186,97424,1930],{"class":206},[186,97426,1988],{"class":202},[186,97428,94931],{"class":835},[186,97430,529],{"class":669},[186,97432,1626],{"class":206},[186,97434,1629],{"class":202},[169,97436,97437],{},"②创建二维数组",[176,97439,97441],{"className":31833,"code":97440,"language":31835,"meta":181,"style":181},"np.zeros((3,4),dtype=int)\n",[183,97442,97443],{"__ignoreMap":181},[186,97444,97445,97448,97450,97452,97454,97456,97458,97460,97462],{"class":188,"line":189},[186,97446,97447],{"class":202},"np.zeros((",[186,97449,1691],{"class":206},[186,97451,1988],{"class":202},[186,97453,1904],{"class":206},[186,97455,43710],{"class":202},[186,97457,94931],{"class":835},[186,97459,529],{"class":669},[186,97461,1626],{"class":206},[186,97463,1629],{"class":202},[169,97465,97466],{},"③创建三维数组",[176,97468,97470],{"className":31833,"code":97469,"language":31835,"meta":181,"style":181},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[183,97471,97472,97477],{"__ignoreMap":181},[186,97473,97474],{"class":188,"line":189},[186,97475,97476],{"class":192},"#创建三维数组\n",[186,97478,97479,97481,97483,97485,97487,97489,97491,97493,97495,97497,97499],{"class":188,"line":49},[186,97480,97447],{"class":202},[186,97482,1691],{"class":206},[186,97484,1988],{"class":202},[186,97486,1904],{"class":206},[186,97488,1988],{"class":202},[186,97490,1930],{"class":206},[186,97492,43710],{"class":202},[186,97494,94931],{"class":835},[186,97496,529],{"class":669},[186,97498,1626],{"class":206},[186,97500,1629],{"class":202},[169,97502,97503],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[176,97505,97507],{"className":31833,"code":97506,"language":31835,"meta":181,"style":181},"#使用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",[183,97508,97509,97514,97529,97534,97539,97561],{"__ignoreMap":181},[186,97510,97511],{"class":188,"line":189},[186,97512,97513],{"class":192},"#使用zeros_like将创建的一维数组变成全0的数组\n",[186,97515,97516,97518,97520,97522,97524,97526],{"class":188,"line":49},[186,97517,948],{"class":202},[186,97519,529],{"class":669},[186,97521,94433],{"class":202},[186,97523,1904],{"class":206},[186,97525,2039],{"class":202},[186,97527,97528],{"class":192},"#这个得到的结果：一维数组0，1，2，3\n",[186,97530,97531],{"class":188,"line":219},[186,97532,97533],{"class":202},"np.zeros_like(a)\n",[186,97535,97536],{"class":188,"line":225},[186,97537,97538],{"class":192},"#使用zeros_like将创建的二维数组变成全0的数组\n",[186,97540,97541,97543,97545,97547,97549,97551,97553,97555,97557,97559],{"class":188,"line":242},[186,97542,94737],{"class":202},[186,97544,529],{"class":669},[186,97546,96858],{"class":202},[186,97548,32951],{"class":835},[186,97550,529],{"class":669},[186,97552,832],{"class":202},[186,97554,1904],{"class":206},[186,97556,1988],{"class":202},[186,97558,1930],{"class":206},[186,97560,31952],{"class":202},[186,97562,97563],{"class":188,"line":248},[186,97564,97565],{"class":202},"np.zeros_like(aa)\n",[29,97567,97569],{"id":97568},"_262-ones创建数组","2.6.2 ones()创建数组",[169,97571,97572],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[29,97574,97576],{"id":97575},"_263-empty创建数组","2.6.3 empty()创建数组",[169,97578,97579],{},"①empty()用法",[176,97581,97583],{"className":31833,"code":97582,"language":31835,"meta":181,"style":181},"numpy.empty(shape,dtype=float,order='c')\n",[183,97584,97585],{"__ignoreMap":181},[186,97586,97587,97590,97592,97594,97596,97598,97600,97602,97604],{"class":188,"line":189},[186,97588,97589],{"class":202},"numpy.empty(shape,",[186,97591,94931],{"class":835},[186,97593,529],{"class":669},[186,97595,1662],{"class":206},[186,97597,1988],{"class":202},[186,97599,96728],{"class":835},[186,97601,529],{"class":669},[186,97603,77461],{"class":532},[186,97605,1629],{"class":202},[169,97607,97608],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[169,97610,97611],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[169,97613,97614],{},[164,97615],{"alt":181,"src":97616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[169,97618,97619],{},"②empty()用法",[176,97621,97623],{"className":31833,"code":97622,"language":31835,"meta":181,"style":181},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[183,97624,97625,97646,97658,97679,97684],{"__ignoreMap":181},[186,97626,97627,97629,97631,97634,97636,97638,97640,97642,97644],{"class":188,"line":189},[186,97628,2453],{"class":202},[186,97630,529],{"class":669},[186,97632,97633],{"class":202},"np.empty(",[186,97635,2056],{"class":206},[186,97637,1988],{"class":202},[186,97639,94931],{"class":835},[186,97641,529],{"class":669},[186,97643,1626],{"class":206},[186,97645,1629],{"class":202},[186,97647,97648,97650,97652,97654,97656],{"class":188,"line":49},[186,97649,2428],{"class":202},[186,97651,529],{"class":669},[186,97653,94433],{"class":202},[186,97655,1930],{"class":206},[186,97657,1629],{"class":202},[186,97659,97660,97663,97665,97668,97670,97672,97675,97677],{"class":188,"line":219},[186,97661,97662],{"class":202},"np.add(",[186,97664,1697],{"class":206},[186,97666,97667],{"class":202},",x,",[186,97669,94485],{"class":835},[186,97671,529],{"class":669},[186,97673,97674],{"class":202},"y[:",[186,97676,1930],{"class":206},[186,97678,6123],{"class":202},[186,97680,97681],{"class":188,"line":225},[186,97682,97683],{"class":192},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[186,97685,97686],{"class":188,"line":242},[186,97687,97688],{"class":202},"y\n",[169,97690,12977],{},[169,97692,97693],{},[164,97694],{"alt":181,"src":97695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[176,97697,97699],{"className":31833,"code":97698,"language":31835,"meta":181,"style":181},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[183,97700,97701,97717,97737,97752],{"__ignoreMap":181},[186,97702,97703,97705,97707,97709,97711,97713,97715],{"class":188,"line":189},[186,97704,2428],{"class":202},[186,97706,529],{"class":669},[186,97708,94433],{"class":202},[186,97710,1829],{"class":206},[186,97712,1988],{"class":202},[186,97714,1954],{"class":206},[186,97716,1629],{"class":202},[186,97718,97719,97721,97723,97725,97727,97729,97731,97733,97735],{"class":188,"line":49},[186,97720,2453],{"class":202},[186,97722,529],{"class":669},[186,97724,97633],{"class":202},[186,97726,1930],{"class":206},[186,97728,1988],{"class":202},[186,97730,94931],{"class":835},[186,97732,529],{"class":669},[186,97734,1626],{"class":206},[186,97736,1629],{"class":202},[186,97738,97739,97742,97744,97746,97748,97750],{"class":188,"line":219},[186,97740,97741],{"class":202},"np.add(x,",[186,97743,1697],{"class":206},[186,97745,1988],{"class":202},[186,97747,94485],{"class":835},[186,97749,529],{"class":669},[186,97751,94880],{"class":202},[186,97753,97754],{"class":188,"line":225},[186,97755,97756],{"class":192},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[169,97758,97759],{},"③empty_like()",[169,97761,97762],{},[54,97763,97764,97765,97770],{},"创建一个",[54,97766,97767],{},[54,97768,97769],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[169,97772,97773,97776],{},[183,97774,97775],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[169,97778,97779],{},[164,97780],{"alt":181,"src":97781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[29,97783,97785],{"id":97784},"_264-用法","2.6.4 ？？用法",[169,97787,97788],{},"当想查看一个函数的参数时，可以通过？？来实现",[176,97790,97792],{"className":31833,"code":97791,"language":31835,"meta":181,"style":181},"np.full??\n",[183,97793,97794],{"__ignoreMap":181},[186,97795,97796,97799],{"class":188,"line":189},[186,97797,97798],{"class":202},"np.full",[186,97800,97801],{"class":78836},"??\n",[29,97803,97805],{"id":97804},"_265-full创建数组","2.6.5 full()创建数组",[176,97807,97809],{"className":31833,"code":97808,"language":31835,"meta":181,"style":181},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[183,97810,97811,97816],{"__ignoreMap":181},[186,97812,97813],{"class":188,"line":189},[186,97814,97815],{"class":202},"full(shape,fill_value)\n",[186,97817,97818],{"class":188,"line":49},[186,97819,97820],{"class":202},"创建全为某个指定值的数组\n",[169,97822,95961],{},[176,97824,97826],{"className":31833,"code":97825,"language":31835,"meta":181,"style":181},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[183,97827,97828,97833],{"__ignoreMap":181},[186,97829,97830],{"class":188,"line":189},[186,97831,97832],{"class":192},"#创建一个一维数组,以20进行填充\n",[186,97834,97835,97838,97840,97842,97844],{"class":188,"line":49},[186,97836,97837],{"class":202},"np.full(",[186,97839,2056],{"class":206},[186,97841,1988],{"class":202},[186,97843,801],{"class":206},[186,97845,1629],{"class":202},[169,97847,94722],{},[176,97849,97851],{"className":31833,"code":97850,"language":31835,"meta":181,"style":181},"#创建二维数组\nnp.full((3,5),11)\n",[183,97852,97853,97857],{"__ignoreMap":181},[186,97854,97855],{"class":188,"line":189},[186,97856,95378],{"class":192},[186,97858,97859,97862,97864,97866,97868,97870,97872],{"class":188,"line":49},[186,97860,97861],{"class":202},"np.full((",[186,97863,1691],{"class":206},[186,97865,1988],{"class":202},[186,97867,1930],{"class":206},[186,97869,43710],{"class":202},[186,97871,2082],{"class":206},[186,97873,1629],{"class":202},[169,97875,97876],{},"③full_like用法",[169,97878,97879],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[169,97881,97882],{},"这里是指定填充而已",[176,97884,97886],{"className":31833,"code":97885,"language":31835,"meta":181,"style":181},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[183,97887,97888,97893,97917,97922],{"__ignoreMap":181},[186,97889,97890],{"class":188,"line":189},[186,97891,97892],{"class":192},"#创建一个指定形状数组\n",[186,97894,97895,97897,97899,97901,97903,97905,97907,97909,97911,97913,97915],{"class":188,"line":49},[186,97896,948],{"class":202},[186,97898,529],{"class":669},[186,97900,94433],{"class":202},[186,97902,1829],{"class":206},[186,97904,1988],{"class":202},[186,97906,1936],{"class":206},[186,97908,94438],{"class":202},[186,97910,1904],{"class":206},[186,97912,1988],{"class":202},[186,97914,2030],{"class":206},[186,97916,1629],{"class":202},[186,97918,97919],{"class":188,"line":219},[186,97920,97921],{"class":192},"#进行指定填充\n",[186,97923,97924,97927,97929],{"class":188,"line":225},[186,97925,97926],{"class":202},"np.full_like(a,",[186,97928,2056],{"class":206},[186,97930,1629],{"class":202},[169,97932,12977],{},[169,97934,97935],{},[164,97936],{"alt":181,"src":97937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[29,97939,97941],{"id":97940},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23459,97943,97945],{"id":97944},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[176,97947,97949],{"className":31833,"code":97948,"language":31835,"meta":181,"style":181},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[183,97950,97951,97968],{"__ignoreMap":181},[186,97952,97953,97956,97958,97960,97962,97964,97966],{"class":188,"line":189},[186,97954,97955],{"class":202},"np.eye(",[186,97957,1904],{"class":206},[186,97959,1988],{"class":202},[186,97961,94931],{"class":835},[186,97963,529],{"class":669},[186,97965,1626],{"class":206},[186,97967,1629],{"class":202},[186,97969,97970],{"class":188,"line":49},[186,97971,97972],{"class":192},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23459,97974,97976],{"id":97975},"_2662-法2identity","2.6.6.2 法2：identity()",[176,97978,97980],{"className":31833,"code":97979,"language":31835,"meta":181,"style":181},"#identity()\nnp.identity(5,dtype=int)\n",[183,97981,97982,97987],{"__ignoreMap":181},[186,97983,97984],{"class":188,"line":189},[186,97985,97986],{"class":192},"#identity()\n",[186,97988,97989,97992,97994,97996,97998,98000,98002],{"class":188,"line":49},[186,97990,97991],{"class":202},"np.identity(",[186,97993,1930],{"class":206},[186,97995,1988],{"class":202},[186,97997,94931],{"class":835},[186,97999,529],{"class":669},[186,98001,1626],{"class":206},[186,98003,1629],{"class":202},[169,98005,98006],{},"两个函数是有区别的",[169,98008,98009],{},[164,98010],{"alt":181,"src":98011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[169,98013,98014],{},[164,98015],{"alt":181,"src":98016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[176,98018,98020],{"className":31833,"code":98019,"language":31835,"meta":181,"style":181},"# 创建一个 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",[183,98021,98022,98027,98039,98044,98049,98054,98059,98063,98068,98088,98092,98097,98102],{"__ignoreMap":181},[186,98023,98024],{"class":188,"line":189},[186,98025,98026],{"class":192},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[186,98028,98029,98031,98033,98035,98037],{"class":188,"line":49},[186,98030,97955],{"class":202},[186,98032,1691],{"class":206},[186,98034,13898],{"class":202},[186,98036,1904],{"class":206},[186,98038,1629],{"class":202},[186,98040,98041],{"class":188,"line":219},[186,98042,98043],{"class":192},"# 输出:\n",[186,98045,98046],{"class":188,"line":225},[186,98047,98048],{"class":192},"# [[1. 0. 0. 0.]\n",[186,98050,98051],{"class":188,"line":242},[186,98052,98053],{"class":192},"#  [0. 1. 0. 0.]\n",[186,98055,98056],{"class":188,"line":248},[186,98057,98058],{"class":192},"#  [0. 0. 1. 0.]]\n",[186,98060,98061],{"class":188,"line":265},[186,98062,3867],{"emptyLinePlaceholder":1551},[186,98064,98065],{"class":188,"line":271},[186,98066,98067],{"class":192},"# 对角线向上偏移1\n",[186,98069,98070,98072,98074,98076,98078,98080,98082,98084,98086],{"class":188,"line":288},[186,98071,97955],{"class":202},[186,98073,1691],{"class":206},[186,98075,13898],{"class":202},[186,98077,1904],{"class":206},[186,98079,13898],{"class":202},[186,98081,2103],{"class":835},[186,98083,529],{"class":669},[186,98085,1829],{"class":206},[186,98087,1629],{"class":202},[186,98089,98090],{"class":188,"line":294},[186,98091,98043],{"class":192},[186,98093,98094],{"class":188,"line":1212},[186,98095,98096],{"class":192},"# [[0. 1. 0. 0.]\n",[186,98098,98099],{"class":188,"line":1223},[186,98100,98101],{"class":192},"#  [0. 0. 1. 0.]\n",[186,98103,98104],{"class":188,"line":1236},[186,98105,98106],{"class":192},"#  [0. 0. 0. 1.]]\n",[29,98108,98110],{"id":98109},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[176,98112,98114],{"className":31833,"code":98113,"language":31835,"meta":181,"style":181},"#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",[183,98115,98116,98121,98125,98130,98135,98140,98145,98150,98155,98160,98165],{"__ignoreMap":181},[186,98117,98118],{"class":188,"line":189},[186,98119,98120],{"class":192},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[186,98122,98123],{"class":188,"line":49},[186,98124,97129],{"class":532},[186,98126,98127],{"class":188,"line":219},[186,98128,98129],{"class":532},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[186,98131,98132],{"class":188,"line":225},[186,98133,98134],{"class":532},"参数介绍：\n",[186,98136,98137],{"class":188,"line":242},[186,98138,98139],{"class":532},"start：序列的起始值\n",[186,98141,98142],{"class":188,"line":248},[186,98143,98144],{"class":532},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[186,98146,98147],{"class":188,"line":265},[186,98148,98149],{"class":532},"num：要生长的等步长的样本数量，默认为50\n",[186,98151,98152],{"class":188,"line":271},[186,98153,98154],{"class":532},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[186,98156,98157],{"class":188,"line":288},[186,98158,98159],{"class":532},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[186,98161,98162],{"class":188,"line":294},[186,98163,98164],{"class":532},"dtype：ndarry的数据类型\n",[186,98166,98167],{"class":188,"line":1212},[186,98168,97129],{"class":532},[169,98170,98171],{},[164,98172],{"alt":181,"src":98173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[169,98175,98176],{},"这里num=是可以省略的",[169,98178,98179],{},"也就是下方两行代码结果是一模一样的",[176,98181,98183],{"className":31833,"code":98182,"language":31835,"meta":181,"style":181},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[183,98184,98185,98202],{"__ignoreMap":181},[186,98186,98187,98190,98192,98194,98196,98198,98200],{"class":188,"line":189},[186,98188,98189],{"class":202},"np.linspace(",[186,98191,1829],{"class":206},[186,98193,1988],{"class":202},[186,98195,1930],{"class":206},[186,98197,1988],{"class":202},[186,98199,1930],{"class":206},[186,98201,1629],{"class":202},[186,98203,98204,98206,98208,98210,98212,98214,98216,98218,98220],{"class":188,"line":49},[186,98205,98189],{"class":202},[186,98207,1829],{"class":206},[186,98209,1988],{"class":202},[186,98211,1930],{"class":206},[186,98213,1988],{"class":202},[186,98215,3133],{"class":835},[186,98217,529],{"class":669},[186,98219,1930],{"class":206},[186,98221,1629],{"class":202},[29,98223,98225],{"id":98224},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[176,98227,98229],{"className":31833,"code":98228,"language":31835,"meta":181,"style":181},"#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",[183,98230,98231,98236,98240,98245,98250,98255,98260,98264,98269,98274,98278],{"__ignoreMap":181},[186,98232,98233],{"class":188,"line":189},[186,98234,98235],{"class":192},"#logspace函数用于创建一个等比数列，格式如下：\n",[186,98237,98238],{"class":188,"line":49},[186,98239,97129],{"class":532},[186,98241,98242],{"class":188,"line":219},[186,98243,98244],{"class":532},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[186,98246,98247],{"class":188,"line":225},[186,98248,98249],{"class":532},"参数为：\n",[186,98251,98252],{"class":188,"line":242},[186,98253,98254],{"class":532},"start:序列的起始位置为：base**start\n",[186,98256,98257],{"class":188,"line":248},[186,98258,98259],{"class":532},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[186,98261,98262],{"class":188,"line":265},[186,98263,98149],{"class":532},[186,98265,98266],{"class":188,"line":271},[186,98267,98268],{"class":532},"endpoint：是否包含 stop 这个值，默认是 True\n",[186,98270,98271],{"class":188,"line":288},[186,98272,98273],{"class":532},"base：对数的底数，默认是 10（常见对数）\n",[186,98275,98276],{"class":188,"line":294},[186,98277,98164],{"class":532},[186,98279,98280],{"class":188,"line":1212},[186,98281,97129],{"class":532},[169,98283,98284],{},[164,98285],{"alt":181,"src":98286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[169,98288,98289],{},"logspace()函数中的num参数也是可以不写num=的",[169,98291,98292],{},"endpoint是不可以省略的",[1524,98294,98295],{},"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":181,"searchDepth":49,"depth":49,"links":98297},[98298,98302,98307,98311,98315,98316],{"id":96687,"depth":49,"text":96688,"children":98299},[98300,98301],{"id":96691,"depth":219,"text":96692},{"id":96764,"depth":219,"text":96765},{"id":96796,"depth":49,"text":96797,"children":98303},[98304,98305,98306],{"id":96800,"depth":219,"text":96801},{"id":96982,"depth":219,"text":96983},{"id":97060,"depth":219,"text":97061},{"id":97095,"depth":49,"text":97096,"children":98308},[98309,98310],{"id":97099,"depth":219,"text":97100},{"id":97156,"depth":219,"text":97157},{"id":97252,"depth":49,"text":97253,"children":98312},[98313,98314],{"id":97256,"depth":219,"text":97257},{"id":97268,"depth":219,"text":97269},{"id":97302,"depth":49,"text":97303},{"id":97339,"depth":49,"text":97340,"children":98317},[98318,98319,98320,98321,98322,98323,98324,98325],{"id":97343,"depth":219,"text":97344},{"id":97568,"depth":219,"text":97569},{"id":97575,"depth":219,"text":97576},{"id":97784,"depth":219,"text":97785},{"id":97804,"depth":219,"text":97805},{"id":97940,"depth":219,"text":97941},{"id":98109,"depth":219,"text":98110},{"id":98224,"depth":219,"text":98225},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96679,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98332,"title":98333,"body":98334,"description":1548,"extension":1549,"meta":98427,"navigation":1551,"path":98428,"seo":98429,"stem":98430,"__hash__":98431},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98335,"toc":98425},[98336,98339,98342,98345,98348,98351,98354,98357,98360,98363,98366,98369,98371,98374,98377,98382,98385,98388,98422],[10,98337,98333],{"id":98338},"_20魔法命令mprun",[169,98340,98341],{},"逐行分析数据内存的使用情况",[169,98343,98344],{},"语法格式：",[169,98346,98347],{},"%mprun -f 模块名.函数名 模块名.函数名()",[169,98349,98350],{},"分析结果列如下：",[169,98352,98353],{},"Line行号",[169,98355,98356],{},"Mem usage内存使用大小",[169,98358,98359],{},"increment内存增量",[169,98361,98362],{},"Line content代码内容",[169,98364,98365],{},"补充说明：",[169,98367,98368],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[169,98370,96634],{},[169,98372,98373],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[169,98375,98376],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[169,98378,98379],{},[164,98380],{"alt":181,"src":98381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[169,98383,98384],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[169,98386,98387],{},"这时候需要重新加载模块",[176,98389,98391],{"className":31833,"code":98390,"language":31835,"meta":181,"style":181},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[183,98392,98393,98398,98405,98410],{"__ignoreMap":181},[186,98394,98395],{"class":188,"line":189},[186,98396,98397],{"class":192},"#重新加载模块\n",[186,98399,98400,98402],{"class":188,"line":49},[186,98401,31847],{"class":669},[186,98403,98404],{"class":202}," importlib\n",[186,98406,98407],{"class":188,"line":219},[186,98408,98409],{"class":202},"importlib.reload(mprun_test)\n",[186,98411,98412,98414,98417,98419],{"class":188,"line":225},[186,98413,670],{"class":669},[186,98415,98416],{"class":202},"mprun ",[186,98418,2142],{"class":669},[186,98420,98421],{"class":202},"f mprun_test.fun_test mprun_test.fun_test()\n",[1524,98423,98424],{},"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":181,"searchDepth":49,"depth":49,"links":98426},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98333,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98433,"title":98434,"body":98435,"description":1548,"extension":1549,"meta":98452,"navigation":1551,"path":98453,"seo":98454,"stem":98455,"__hash__":98456},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98436,"toc":98450},[98437,98440,98445],[10,98438,98434],{"id":98439},"_3一维数组的索引和切片",[169,98441,98442],{},[164,98443],{"alt":181,"src":98444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[169,98446,98447],{},[164,98448],{"alt":181,"src":98449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":181,"searchDepth":49,"depth":49,"links":98451},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98434,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98458,"title":98459,"body":98460,"description":1548,"extension":1549,"meta":98943,"navigation":1551,"path":98944,"seo":98945,"stem":98946,"__hash__":98947},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98461,"toc":98941},[98462,98465,98468,98473,98506,98509,98547,98550,98584,98587,98692,98695,98732,98735,98836,98839,98890,98893,98935,98938],[10,98463,98459],{"id":98464},"_4二维数组的索引与切片",[169,98466,98467],{},"①获取指定单个元素",[169,98469,98470],{},[164,98471],{"alt":181,"src":98472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[176,98474,98476],{"className":31833,"code":98475,"language":31835,"meta":181,"style":181},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[183,98477,98478,98483,98488,98493],{"__ignoreMap":181},[186,98479,98480],{"class":188,"line":189},[186,98481,98482],{"class":192},"#获取元素9\n",[186,98484,98485],{"class":188,"line":49},[186,98486,98487],{"class":192},"#先获取所在行，再获取所在列\n",[186,98489,98490],{"class":188,"line":219},[186,98491,98492],{"class":192},"#数组[行索引号，列索引号]\n",[186,98494,98495,98498,98500,98502,98504],{"class":188,"line":225},[186,98496,98497],{"class":202},"a[",[186,98499,1829],{"class":206},[186,98501,1988],{"class":202},[186,98503,1697],{"class":206},[186,98505,34701],{"class":202},[169,98507,98508],{},"②获取整行元素",[176,98510,98512],{"className":31833,"code":98511,"language":31835,"meta":181,"style":181},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[183,98513,98514,98519,98524,98532,98537],{"__ignoreMap":181},[186,98515,98516],{"class":188,"line":189},[186,98517,98518],{"class":192},"#获取整行 数组[行索引号]\n",[186,98520,98521],{"class":188,"line":49},[186,98522,98523],{"class":192},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[186,98525,98526,98528,98530],{"class":188,"line":219},[186,98527,98497],{"class":202},[186,98529,1697],{"class":206},[186,98531,34701],{"class":202},[186,98533,98534],{"class":188,"line":225},[186,98535,98536],{"class":192},"#也可以负索引获取一行\n",[186,98538,98539,98541,98543,98545],{"class":188,"line":242},[186,98540,98497],{"class":202},[186,98542,2142],{"class":669},[186,98544,1829],{"class":206},[186,98546,34701],{"class":202},[169,98548,98549],{},"③获取整列元素",[176,98551,98553],{"className":31833,"code":98552,"language":31835,"meta":181,"style":181},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[183,98554,98555,98560,98569,98574],{"__ignoreMap":181},[186,98556,98557],{"class":188,"line":189},[186,98558,98559],{"class":192},"#获取整列 数组名[:,列索引]\n",[186,98561,98562,98565,98567],{"class":188,"line":49},[186,98563,98564],{"class":202},"a[:,",[186,98566,1697],{"class":206},[186,98568,34701],{"class":202},[186,98570,98571],{"class":188,"line":219},[186,98572,98573],{"class":192},"#也可以负索引获取一列\n",[186,98575,98576,98578,98580,98582],{"class":188,"line":225},[186,98577,98564],{"class":202},[186,98579,2142],{"class":669},[186,98581,1829],{"class":206},[186,98583,34701],{"class":202},[169,98585,98586],{},"④部分行部分列的元素",[176,98588,98590],{"className":31833,"code":98589,"language":31835,"meta":181,"style":181},"#部分行部分列 数组名[行切片，列切片]\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",[183,98591,98592,98597,98607,98611,98615,98620,98625,98629,98641,98645,98649,98654,98659,98664,98669,98673,98678],{"__ignoreMap":181},[186,98593,98594],{"class":188,"line":189},[186,98595,98596],{"class":192},"#部分行部分列 数组名[行切片，列切片]\n",[186,98598,98599,98602,98604],{"class":188,"line":49},[186,98600,98601],{"class":202},"a[:",[186,98603,1697],{"class":206},[186,98605,98606],{"class":202},",:]\n",[186,98608,98609],{"class":188,"line":219},[186,98610,94995],{"class":192},[186,98612,98613],{"class":188,"line":225},[186,98614,95359],{"class":532},[186,98616,98617],{"class":188,"line":242},[186,98618,98619],{"class":532},"array([[ 1,  2,  3,  4,  5,  6],\n",[186,98621,98622],{"class":188,"line":248},[186,98623,98624],{"class":532},"       [ 7,  8,  9, 10, 11, 12]])\n",[186,98626,98627],{"class":188,"line":265},[186,98628,95359],{"class":532},[186,98630,98631,98633,98635,98637,98639],{"class":188,"line":271},[186,98632,98564],{"class":202},[186,98634,1829],{"class":206},[186,98636,2467],{"class":202},[186,98638,1904],{"class":206},[186,98640,34701],{"class":202},[186,98642,98643],{"class":188,"line":288},[186,98644,94995],{"class":192},[186,98646,98647],{"class":188,"line":294},[186,98648,95359],{"class":532},[186,98650,98651],{"class":188,"line":1212},[186,98652,98653],{"class":532},"array([[ 2,  3,  4],\n",[186,98655,98656],{"class":188,"line":1223},[186,98657,98658],{"class":532},"       [ 8,  9, 10],\n",[186,98660,98661],{"class":188,"line":1236},[186,98662,98663],{"class":532},"       [14, 15, 16],\n",[186,98665,98666],{"class":188,"line":3096},[186,98667,98668],{"class":532},"       [20, 21, 22]])\n",[186,98670,98671],{"class":188,"line":3110},[186,98672,95359],{"class":532},[186,98674,98675],{"class":188,"line":3115},[186,98676,98677],{"class":192},"#对列行同时进行切片，使用了step参数\n",[186,98679,98680,98683,98685,98688,98690],{"class":188,"line":3121},[186,98681,98682],{"class":202},"a[::",[186,98684,1697],{"class":206},[186,98686,98687],{"class":202},",::",[186,98689,1697],{"class":206},[186,98691,34701],{"class":202},[169,98693,98694],{},"⑤同时获取两个元素",[176,98696,98698],{"className":31833,"code":98697,"language":31835,"meta":181,"style":181},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[183,98699,98700,98705,98710],{"__ignoreMap":181},[186,98701,98702],{"class":188,"line":189},[186,98703,98704],{"class":192},"#同时获取第三行第二列，第四行第一列\n",[186,98706,98707],{"class":188,"line":49},[186,98708,98709],{"class":192},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[186,98711,98712,98715,98717,98719,98721,98723,98725,98727,98729],{"class":188,"line":219},[186,98713,98714],{"class":202},"a[(",[186,98716,1697],{"class":206},[186,98718,1988],{"class":202},[186,98720,1691],{"class":206},[186,98722,43701],{"class":202},[186,98724,1829],{"class":206},[186,98726,1988],{"class":202},[186,98728,1803],{"class":206},[186,98730,98731],{"class":202},")]\n",[169,98733,98734],{},"⑥切片，对行进行反向获取",[176,98736,98738],{"className":31833,"code":98737,"language":31835,"meta":181,"style":181},"#切片 对所有行进行反向获取\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",[183,98739,98740,98745,98755,98759,98763,98768,98773,98778,98783,98787,98792,98808,98812,98817,98822,98827,98832],{"__ignoreMap":181},[186,98741,98742],{"class":188,"line":189},[186,98743,98744],{"class":192},"#切片 对所有行进行反向获取\n",[186,98746,98747,98749,98751,98753],{"class":188,"line":49},[186,98748,98682],{"class":202},[186,98750,2142],{"class":669},[186,98752,1829],{"class":206},[186,98754,34701],{"class":202},[186,98756,98757],{"class":188,"line":219},[186,98758,94995],{"class":192},[186,98760,98761],{"class":188,"line":225},[186,98762,95359],{"class":532},[186,98764,98765],{"class":188,"line":242},[186,98766,98767],{"class":532},"array([[19, 20, 21, 22, 23, 24],\n",[186,98769,98770],{"class":188,"line":248},[186,98771,98772],{"class":532},"       [13, 14, 15, 16, 17, 18],\n",[186,98774,98775],{"class":188,"line":265},[186,98776,98777],{"class":532},"       [ 7,  8,  9, 10, 11, 12],\n",[186,98779,98780],{"class":188,"line":271},[186,98781,98782],{"class":532},"       [ 1,  2,  3,  4,  5,  6]])\n",[186,98784,98785],{"class":188,"line":288},[186,98786,95359],{"class":532},[186,98788,98789],{"class":188,"line":294},[186,98790,98791],{"class":192},"#对行列都进行反向切片获取\n",[186,98793,98794,98796,98798,98800,98802,98804,98806],{"class":188,"line":1212},[186,98795,98682],{"class":202},[186,98797,2142],{"class":669},[186,98799,1829],{"class":206},[186,98801,98687],{"class":202},[186,98803,2142],{"class":669},[186,98805,1829],{"class":206},[186,98807,34701],{"class":202},[186,98809,98810],{"class":188,"line":1223},[186,98811,95359],{"class":532},[186,98813,98814],{"class":188,"line":1236},[186,98815,98816],{"class":532},"array([[24, 23, 22, 21, 20, 19],\n",[186,98818,98819],{"class":188,"line":3096},[186,98820,98821],{"class":532},"       [18, 17, 16, 15, 14, 13],\n",[186,98823,98824],{"class":188,"line":3110},[186,98825,98826],{"class":532},"       [12, 11, 10,  9,  8,  7],\n",[186,98828,98829],{"class":188,"line":3115},[186,98830,98831],{"class":532},"       [ 6,  5,  4,  3,  2,  1]])\n",[186,98833,98834],{"class":188,"line":3121},[186,98835,95359],{"class":532},[169,98837,98838],{},"⑦修改元素",[176,98840,98842],{"className":31833,"code":98841,"language":31835,"meta":181,"style":181},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[183,98843,98844,98849,98867,98872],{"__ignoreMap":181},[186,98845,98846],{"class":188,"line":189},[186,98847,98848],{"class":192},"#获取前两行和前两列\n",[186,98850,98851,98854,98856,98858,98860,98863,98865],{"class":188,"line":49},[186,98852,98853],{"class":202},"sub_a",[186,98855,529],{"class":669},[186,98857,98601],{"class":202},[186,98859,1697],{"class":206},[186,98861,98862],{"class":202},",:",[186,98864,1697],{"class":206},[186,98866,34701],{"class":202},[186,98868,98869],{"class":188,"line":219},[186,98870,98871],{"class":192},"#修改sub_a第一个元素的值\n",[186,98873,98874,98877,98879,98881,98883,98885,98887],{"class":188,"line":225},[186,98875,98876],{"class":202},"sub_a[",[186,98878,1803],{"class":206},[186,98880,1988],{"class":202},[186,98882,1803],{"class":206},[186,98884,2547],{"class":202},[186,98886,529],{"class":669},[186,98888,98889],{"class":206},"100\n",[169,98891,98892],{},"⑧数组复制copy()",[176,98894,98896],{"className":31833,"code":98895,"language":31835,"meta":181,"style":181},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[183,98897,98898,98903,98913,98918],{"__ignoreMap":181},[186,98899,98900],{"class":188,"line":189},[186,98901,98902],{"class":192},"#数组复制\n",[186,98904,98905,98908,98910],{"class":188,"line":49},[186,98906,98907],{"class":202},"copy_a",[186,98909,529],{"class":669},[186,98911,98912],{"class":202},"np.copy(sub_a)\n",[186,98914,98915],{"class":188,"line":219},[186,98916,98917],{"class":192},"#修改copy_a后不影响原数组\n",[186,98919,98920,98923,98925,98927,98929,98931,98933],{"class":188,"line":225},[186,98921,98922],{"class":202},"copy_a[",[186,98924,1803],{"class":206},[186,98926,1988],{"class":202},[186,98928,1803],{"class":206},[186,98930,2547],{"class":202},[186,98932,529],{"class":669},[186,98934,98889],{"class":206},[169,98936,98937],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1524,98939,98940],{},"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":181,"searchDepth":49,"depth":49,"links":98942},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98459,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98949,"title":98950,"body":98951,"description":1548,"extension":1549,"meta":99443,"navigation":1551,"path":99444,"seo":99445,"stem":99446,"__hash__":99447},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98952,"toc":99435},[98953,98956,98960,98963,98966,99019,99022,99047,99050,99069,99089,99092,99108,99112,99158,99162,99204,99208,99211,99214,99217,99220,99223,99285,99345,99349,99352,99409,99413,99418,99427,99432],[10,98954,98950],{"id":98955},"_5改变数组的维度",[14,98957,98959],{"id":98958},"_51-使用reshape","5.1 使用reshape()",[169,98961,98962],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[169,98964,98965],{},"①一维数组转换为二维数组",[176,98967,98969],{"className":31833,"code":98968,"language":31835,"meta":181,"style":181},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[183,98970,98971,98987,98992,98997,99002],{"__ignoreMap":181},[186,98972,98973,98975,98977,98979,98981,98983,98985],{"class":188,"line":189},[186,98974,948],{"class":202},[186,98976,529],{"class":669},[186,98978,94433],{"class":202},[186,98980,1829],{"class":206},[186,98982,1988],{"class":202},[186,98984,2133],{"class":206},[186,98986,1629],{"class":202},[186,98988,98989],{"class":188,"line":49},[186,98990,98991],{"class":192},"#将一维数组进行转换\n",[186,98993,98994],{"class":188,"line":219},[186,98995,98996],{"class":192},"#注意点：元素个数不可以变\n",[186,98998,98999],{"class":188,"line":225},[186,99000,99001],{"class":192},"#转换维度要保持一致，不一致就异常！！！\n",[186,99003,99004,99006,99008,99011,99013,99015,99017],{"class":188,"line":242},[186,99005,94737],{"class":202},[186,99007,529],{"class":669},[186,99009,99010],{"class":202},"a.reshape(",[186,99012,1697],{"class":206},[186,99014,1988],{"class":202},[186,99016,1954],{"class":206},[186,99018,1629],{"class":202},[169,99020,99021],{},"②一维数组转换为三维数组",[176,99023,99025],{"className":31833,"code":99024,"language":31835,"meta":181,"style":181},"aaa=a.reshape(2,3,2)\n",[183,99026,99027],{"__ignoreMap":181},[186,99028,99029,99031,99033,99035,99037,99039,99041,99043,99045],{"class":188,"line":189},[186,99030,96952],{"class":202},[186,99032,529],{"class":669},[186,99034,99010],{"class":202},[186,99036,1697],{"class":206},[186,99038,1988],{"class":202},[186,99040,1691],{"class":206},[186,99042,1988],{"class":202},[186,99044,1697],{"class":206},[186,99046,1629],{"class":202},[169,99048,99049],{},"③二维数组转化为一维数组",[176,99051,99053],{"className":31833,"code":99052,"language":31835,"meta":181,"style":181},"#知道元素个数：\naa.reshape(12)\n",[183,99054,99055,99060],{"__ignoreMap":181},[186,99056,99057],{"class":188,"line":189},[186,99058,99059],{"class":192},"#知道元素个数：\n",[186,99061,99062,99065,99067],{"class":188,"line":49},[186,99063,99064],{"class":202},"aa.reshape(",[186,99066,2108],{"class":206},[186,99068,1629],{"class":202},[176,99070,99072],{"className":31833,"code":99071,"language":31835,"meta":181,"style":181},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[183,99073,99074,99079],{"__ignoreMap":181},[186,99075,99076],{"class":188,"line":189},[186,99077,99078],{"class":192},"#不知道元素个数，参数传递-1\n",[186,99080,99081,99083,99085,99087],{"class":188,"line":49},[186,99082,99064],{"class":202},[186,99084,2142],{"class":669},[186,99086,1829],{"class":206},[186,99088,1629],{"class":202},[169,99090,99091],{},"④三维数组转换为一维数组",[176,99093,99095],{"className":31833,"code":99094,"language":31835,"meta":181,"style":181},"aaa.reshape(-1)\n",[183,99096,99097],{"__ignoreMap":181},[186,99098,99099,99102,99104,99106],{"class":188,"line":189},[186,99100,99101],{"class":202},"aaa.reshape(",[186,99103,2142],{"class":669},[186,99105,1829],{"class":206},[186,99107,1629],{"class":202},[14,99109,99111],{"id":99110},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[176,99113,99115],{"className":31833,"code":99114,"language":31835,"meta":181,"style":181},"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",[183,99116,99117,99144,99149,99153],{"__ignoreMap":181},[186,99118,99119,99121,99123,99125,99127,99129,99131,99133,99135,99137,99139,99141],{"class":188,"line":189},[186,99120,94737],{"class":202},[186,99122,529],{"class":669},[186,99124,94433],{"class":202},[186,99126,1829],{"class":206},[186,99128,1988],{"class":202},[186,99130,2133],{"class":206},[186,99132,94438],{"class":202},[186,99134,1697],{"class":206},[186,99136,1988],{"class":202},[186,99138,1954],{"class":206},[186,99140,2039],{"class":202},[186,99142,99143],{"class":192},"#转换为2行6列的数组\n",[186,99145,99146],{"class":188,"line":49},[186,99147,99148],{"class":202},"aa.revel()\n",[186,99150,99151],{"class":188,"line":219},[186,99152,94995],{"class":192},[186,99154,99155],{"class":188,"line":225},[186,99156,99157],{"class":192},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99159,99161],{"id":99160},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[176,99163,99165],{"className":31833,"code":99164,"language":31835,"meta":181,"style":181},"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",[183,99166,99167,99191,99196,99200],{"__ignoreMap":181},[186,99168,99169,99171,99173,99175,99177,99179,99181,99183,99185,99187,99189],{"class":188,"line":189},[186,99170,94737],{"class":202},[186,99172,529],{"class":669},[186,99174,94433],{"class":202},[186,99176,1829],{"class":206},[186,99178,1988],{"class":202},[186,99180,2133],{"class":206},[186,99182,94438],{"class":202},[186,99184,1697],{"class":206},[186,99186,1988],{"class":202},[186,99188,1954],{"class":206},[186,99190,1629],{"class":202},[186,99192,99193],{"class":188,"line":49},[186,99194,99195],{"class":202},"aa.flatten()\n",[186,99197,99198],{"class":188,"line":219},[186,99199,94995],{"class":192},[186,99201,99202],{"class":188,"line":225},[186,99203,99157],{"class":192},[14,99205,99207],{"id":99206},"_54-使用resize","5.4 使用resize()",[169,99209,99210],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[169,99212,99213],{},"通过resize方法可以改变数组的维度",[169,99215,99216],{},"#resize修改数组维度",[169,99218,99219],{},"#以元组的形式指定形状",[169,99221,99222],{},"#改变的是原数组",[176,99224,99226],{"className":31833,"code":99225,"language":31835,"meta":181,"style":181},"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",[183,99227,99228,99244,99264,99277,99281],{"__ignoreMap":181},[186,99229,99230,99232,99234,99236,99238,99240,99242],{"class":188,"line":189},[186,99231,948],{"class":202},[186,99233,529],{"class":669},[186,99235,94433],{"class":202},[186,99237,1829],{"class":206},[186,99239,1988],{"class":202},[186,99241,2133],{"class":206},[186,99243,1629],{"class":202},[186,99245,99246,99249,99251,99253,99255,99257,99259,99261],{"class":188,"line":49},[186,99247,99248],{"class":202},"a.shape",[186,99250,529],{"class":669},[186,99252,832],{"class":202},[186,99254,1697],{"class":206},[186,99256,1988],{"class":202},[186,99258,1954],{"class":206},[186,99260,2039],{"class":202},[186,99262,99263],{"class":192},"#改变了原数组\n",[186,99265,99266,99268,99270,99273,99275],{"class":188,"line":219},[186,99267,948],{"class":202},[186,99269,529],{"class":669},[186,99271,99272],{"class":202},"resize((",[186,99274,2108],{"class":206},[186,99276,31952],{"class":202},[186,99278,99279],{"class":188,"line":225},[186,99280,94995],{"class":192},[186,99282,99283],{"class":188,"line":242},[186,99284,99157],{"class":192},[176,99286,99288],{"className":31833,"code":99287,"language":31835,"meta":181,"style":181},"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",[183,99289,99290,99303,99307,99311,99316,99321,99326,99331,99336,99341],{"__ignoreMap":181},[186,99291,99292,99295,99297,99299,99301],{"class":188,"line":189},[186,99293,99294],{"class":202},"a.resize((",[186,99296,1954],{"class":206},[186,99298,1988],{"class":202},[186,99300,1697],{"class":206},[186,99302,31952],{"class":202},[186,99304,99305],{"class":188,"line":49},[186,99306,94995],{"class":192},[186,99308,99309],{"class":188,"line":219},[186,99310,95359],{"class":532},[186,99312,99313],{"class":188,"line":225},[186,99314,99315],{"class":532},"array([[ 1,  2],\n",[186,99317,99318],{"class":188,"line":242},[186,99319,99320],{"class":532},"       [ 3,  4],\n",[186,99322,99323],{"class":188,"line":248},[186,99324,99325],{"class":532},"       [ 5,  6],\n",[186,99327,99328],{"class":188,"line":265},[186,99329,99330],{"class":532},"       [ 7,  8],\n",[186,99332,99333],{"class":188,"line":271},[186,99334,99335],{"class":532},"       [ 9, 10],\n",[186,99337,99338],{"class":188,"line":288},[186,99339,99340],{"class":532},"       [11, 12]])\n",[186,99342,99343],{"class":188,"line":294},[186,99344,95359],{"class":532},[14,99346,99348],{"id":99347},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[169,99350,99351],{},"改变了原数组",[176,99353,99355],{"className":31833,"code":99354,"language":31835,"meta":181,"style":181},"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",[183,99356,99357,99373,99389,99393,99397,99401,99405],{"__ignoreMap":181},[186,99358,99359,99361,99363,99365,99367,99369,99371],{"class":188,"line":189},[186,99360,948],{"class":202},[186,99362,529],{"class":669},[186,99364,94433],{"class":202},[186,99366,1829],{"class":206},[186,99368,1988],{"class":202},[186,99370,2133],{"class":206},[186,99372,1629],{"class":202},[186,99374,99375,99377,99379,99381,99383,99385,99387],{"class":188,"line":49},[186,99376,99248],{"class":202},[186,99378,529],{"class":669},[186,99380,832],{"class":202},[186,99382,1697],{"class":206},[186,99384,1988],{"class":202},[186,99386,1954],{"class":206},[186,99388,1629],{"class":202},[186,99390,99391],{"class":188,"line":219},[186,99392,94995],{"class":192},[186,99394,99395],{"class":188,"line":225},[186,99396,95359],{"class":532},[186,99398,99399],{"class":188,"line":242},[186,99400,98619],{"class":532},[186,99402,99403],{"class":188,"line":248},[186,99404,98624],{"class":532},[186,99406,99407],{"class":188,"line":265},[186,99408,95359],{"class":532},[14,99410,99412],{"id":99411},"_56-重要比较","5.6 重要比较：",[169,99414,99415],{},[164,99416],{"alt":181,"src":99417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[169,99419,99420,99421,99423,99424,99426],{},"口诀：NumPy 函数要么用 ",[183,99422,97394],{},"，要么用 ",[183,99425,32951],{},"，创建结构用 shape，造数据用 size",[169,99428,99429],{},[164,99430],{"alt":181,"src":99431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1524,99433,99434],{},"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":181,"searchDepth":49,"depth":49,"links":99436},[99437,99438,99439,99440,99441,99442],{"id":98958,"depth":49,"text":98959},{"id":99110,"depth":49,"text":99111},{"id":99160,"depth":49,"text":99161},{"id":99206,"depth":49,"text":99207},{"id":99347,"depth":49,"text":99348},{"id":99411,"depth":49,"text":99412},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98950,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99449,"title":99450,"body":99451,"description":1548,"extension":1549,"meta":100523,"navigation":1551,"path":100524,"seo":100525,"stem":100526,"__hash__":100527},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99452,"toc":100517},[99453,99456,99460,99463,99466,99469,99534,99537,99577,99580,99662,99665,99670,99692,99694,99699,99704,99707,99710,99865,99868,100070,100074,100077,100080,100148,100150,100155,100158,100161,100241,100245,100248,100250,100323,100325,100330,100332,100412,100416,100419,100422,100425,100428,100431,100434,100514],[10,99454,99450],{"id":99455},"_6数组的拼接",[14,99457,99459],{"id":99458},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[169,99461,99462],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[169,99464,99465],{},"函数内部传两个数列构成的数列或者元组",[169,99467,99468],{},"①一维数组的拼接",[176,99470,99472],{"className":31833,"code":99471,"language":31835,"meta":181,"style":181},"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",[183,99473,99474,99494,99514,99519,99524,99529],{"__ignoreMap":181},[186,99475,99476,99478,99480,99482,99484,99486,99488,99490,99492],{"class":188,"line":189},[186,99477,948],{"class":202},[186,99479,529],{"class":669},[186,99481,94455],{"class":202},[186,99483,1829],{"class":206},[186,99485,1988],{"class":202},[186,99487,1697],{"class":206},[186,99489,1988],{"class":202},[186,99491,1691],{"class":206},[186,99493,6123],{"class":202},[186,99495,99496,99498,99500,99502,99504,99506,99508,99510,99512],{"class":188,"line":49},[186,99497,1874],{"class":202},[186,99499,529],{"class":669},[186,99501,94455],{"class":202},[186,99503,1904],{"class":206},[186,99505,1988],{"class":202},[186,99507,1930],{"class":206},[186,99509,1988],{"class":202},[186,99511,1954],{"class":206},[186,99513,6123],{"class":202},[186,99515,99516],{"class":188,"line":219},[186,99517,99518],{"class":192},"#调用concatenate进行数组拼接\n",[186,99520,99521],{"class":188,"line":225},[186,99522,99523],{"class":202},"np.concatenate((a,b))\n",[186,99525,99526],{"class":188,"line":242},[186,99527,99528],{"class":192},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[186,99530,99531],{"class":188,"line":248},[186,99532,99533],{"class":192},"#np.concatenate([a,b])\n",[169,99535,99536],{},"②一维多个数组拼接",[176,99538,99540],{"className":31833,"code":99539,"language":31835,"meta":181,"style":181},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[183,99541,99542,99547,99567,99572],{"__ignoreMap":181},[186,99543,99544],{"class":188,"line":189},[186,99545,99546],{"class":192},"#也可以多个数组进行拼接\n",[186,99548,99549,99551,99553,99555,99557,99559,99561,99563,99565],{"class":188,"line":49},[186,99550,1899],{"class":202},[186,99552,529],{"class":669},[186,99554,94455],{"class":202},[186,99556,2056],{"class":206},[186,99558,1988],{"class":202},[186,99560,2082],{"class":206},[186,99562,1988],{"class":202},[186,99564,2133],{"class":206},[186,99566,6123],{"class":202},[186,99568,99569],{"class":188,"line":219},[186,99570,99571],{"class":202},"c\n",[186,99573,99574],{"class":188,"line":225},[186,99575,99576],{"class":202},"np.concatenate((a,b,c))\n",[169,99578,99579],{},"③二维数组拼接",[176,99581,99583],{"className":31833,"code":99582,"language":31835,"meta":181,"style":181},"#二维数组使用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",[183,99584,99585,99590,99614,99639,99644,99649],{"__ignoreMap":181},[186,99586,99587],{"class":188,"line":189},[186,99588,99589],{"class":192},"#二维数组使用concatenate进行拼接\n",[186,99591,99592,99594,99596,99598,99600,99602,99604,99606,99608,99610,99612],{"class":188,"line":49},[186,99593,94737],{"class":202},[186,99595,529],{"class":669},[186,99597,94433],{"class":202},[186,99599,1829],{"class":206},[186,99601,1988],{"class":202},[186,99603,2133],{"class":206},[186,99605,94438],{"class":202},[186,99607,1691],{"class":206},[186,99609,1988],{"class":202},[186,99611,1904],{"class":206},[186,99613,1629],{"class":202},[186,99615,99616,99619,99621,99623,99625,99627,99629,99631,99633,99635,99637],{"class":188,"line":219},[186,99617,99618],{"class":202},"bb",[186,99620,529],{"class":669},[186,99622,94433],{"class":202},[186,99624,1947],{"class":206},[186,99626,1988],{"class":202},[186,99628,2252],{"class":206},[186,99630,94438],{"class":202},[186,99632,1691],{"class":206},[186,99634,1988],{"class":202},[186,99636,1904],{"class":206},[186,99638,1629],{"class":202},[186,99640,99641],{"class":188,"line":225},[186,99642,99643],{"class":192},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[186,99645,99646],{"class":188,"line":242},[186,99647,99648],{"class":192},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[186,99650,99651,99654,99656,99658,99660],{"class":188,"line":248},[186,99652,99653],{"class":202},"np.concatenate((aa,bb),",[186,99655,48968],{"class":835},[186,99657,529],{"class":669},[186,99659,1803],{"class":206},[186,99661,1629],{"class":202},[169,99663,99664],{},"结果：",[169,99666,99667],{},[164,99668],{"alt":181,"src":99669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[176,99671,99673],{"className":31833,"code":99672,"language":31835,"meta":181,"style":181},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[183,99674,99675,99680],{"__ignoreMap":181},[186,99676,99677],{"class":188,"line":189},[186,99678,99679],{"class":192},"#指定axis为1进行拼接\n",[186,99681,99682,99684,99686,99688,99690],{"class":188,"line":49},[186,99683,99653],{"class":202},[186,99685,48968],{"class":835},[186,99687,529],{"class":669},[186,99689,1829],{"class":206},[186,99691,1629],{"class":202},[169,99693,99664],{},[169,99695,99696],{},[164,99697],{"alt":181,"src":99698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[169,99700,99701],{},[54,99702,99703],{},"二维数组总结：0竖着方向，1横着方向",[169,99705,99706],{},"④三维数组拼接",[169,99708,99709],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[176,99711,99713],{"className":31833,"code":99712,"language":31835,"meta":181,"style":181},"#两个三行六列\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",[183,99714,99715,99720,99748,99778,99783,99800,99805,99810,99815,99832,99837,99842,99847,99860],{"__ignoreMap":181},[186,99716,99717],{"class":188,"line":189},[186,99718,99719],{"class":192},"#两个三行六列\n",[186,99721,99722,99724,99726,99728,99730,99732,99734,99736,99738,99740,99742,99744,99746],{"class":188,"line":49},[186,99723,96952],{"class":202},[186,99725,529],{"class":669},[186,99727,94433],{"class":202},[186,99729,1829],{"class":206},[186,99731,1988],{"class":202},[186,99733,1936],{"class":206},[186,99735,94438],{"class":202},[186,99737,1697],{"class":206},[186,99739,1988],{"class":202},[186,99741,1691],{"class":206},[186,99743,1988],{"class":202},[186,99745,1954],{"class":206},[186,99747,1629],{"class":202},[186,99749,99750,99753,99755,99757,99759,99761,99764,99766,99768,99770,99772,99774,99776],{"class":188,"line":219},[186,99751,99752],{"class":202},"bbb",[186,99754,529],{"class":669},[186,99756,94433],{"class":202},[186,99758,1947],{"class":206},[186,99760,1988],{"class":202},[186,99762,99763],{"class":206},"137",[186,99765,94438],{"class":202},[186,99767,1697],{"class":206},[186,99769,1988],{"class":202},[186,99771,1691],{"class":206},[186,99773,1988],{"class":202},[186,99775,1954],{"class":206},[186,99777,1629],{"class":202},[186,99779,99780],{"class":188,"line":225},[186,99781,99782],{"class":192},"#axis=0\n",[186,99784,99785,99787,99789,99792,99794,99796,99798],{"class":188,"line":242},[186,99786,2304],{"class":202},[186,99788,529],{"class":669},[186,99790,99791],{"class":202},"np.concatenate((aaa,bbb),",[186,99793,48968],{"class":835},[186,99795,529],{"class":669},[186,99797,1803],{"class":206},[186,99799,1629],{"class":202},[186,99801,99802],{"class":188,"line":248},[186,99803,99804],{"class":202},"s.shape\n",[186,99806,99807],{"class":188,"line":265},[186,99808,99809],{"class":192},"#输出：(4,3,6)\n",[186,99811,99812],{"class":188,"line":271},[186,99813,99814],{"class":192},"#axis=1\n",[186,99816,99817,99820,99822,99824,99826,99828,99830],{"class":188,"line":288},[186,99818,99819],{"class":202},"ss",[186,99821,529],{"class":669},[186,99823,99791],{"class":202},[186,99825,48968],{"class":835},[186,99827,529],{"class":669},[186,99829,1829],{"class":206},[186,99831,1629],{"class":202},[186,99833,99834],{"class":188,"line":294},[186,99835,99836],{"class":202},"ss.shape\n",[186,99838,99839],{"class":188,"line":1212},[186,99840,99841],{"class":192},"#输出：(2,6,6)\n",[186,99843,99844],{"class":188,"line":1223},[186,99845,99846],{"class":192},"#axis=2\n",[186,99848,99849,99851,99853,99855,99857],{"class":188,"line":1236},[186,99850,99791],{"class":202},[186,99852,48968],{"class":835},[186,99854,529],{"class":669},[186,99856,1697],{"class":206},[186,99858,99859],{"class":202},").shape\n",[186,99861,99862],{"class":188,"line":3096},[186,99863,99864],{"class":192},"#输出：（2，3，12）\n",[169,99866,99867],{},"⑤四维数组拼接",[176,99869,99871],{"className":31833,"code":99870,"language":31835,"meta":181,"style":181},"#两个三行六列\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",[183,99872,99873,99877,99905,99933,99958,99984,99988,100001,100006,100010,100022,100027,100031,100043,100048,100053,100065],{"__ignoreMap":181},[186,99874,99875],{"class":188,"line":189},[186,99876,99719],{"class":192},[186,99878,99879,99881,99883,99885,99887,99889,99891,99893,99895,99897,99899,99901,99903],{"class":188,"line":49},[186,99880,96952],{"class":202},[186,99882,529],{"class":669},[186,99884,94433],{"class":202},[186,99886,1829],{"class":206},[186,99888,1988],{"class":202},[186,99890,1936],{"class":206},[186,99892,94438],{"class":202},[186,99894,1697],{"class":206},[186,99896,1988],{"class":202},[186,99898,1691],{"class":206},[186,99900,1988],{"class":202},[186,99902,1954],{"class":206},[186,99904,1629],{"class":202},[186,99906,99907,99909,99911,99913,99915,99917,99919,99921,99923,99925,99927,99929,99931],{"class":188,"line":219},[186,99908,99752],{"class":202},[186,99910,529],{"class":669},[186,99912,94433],{"class":202},[186,99914,1947],{"class":206},[186,99916,1988],{"class":202},[186,99918,99763],{"class":206},[186,99920,94438],{"class":202},[186,99922,1697],{"class":206},[186,99924,1988],{"class":202},[186,99926,1691],{"class":206},[186,99928,1988],{"class":202},[186,99930,1954],{"class":206},[186,99932,1629],{"class":202},[186,99934,99935,99938,99940,99942,99944,99946,99948,99950,99952,99954,99956],{"class":188,"line":225},[186,99936,99937],{"class":202},"aaaa",[186,99939,529],{"class":669},[186,99941,99101],{"class":202},[186,99943,1697],{"class":206},[186,99945,1988],{"class":202},[186,99947,1691],{"class":206},[186,99949,1988],{"class":202},[186,99951,1691],{"class":206},[186,99953,1988],{"class":202},[186,99955,1697],{"class":206},[186,99957,1629],{"class":202},[186,99959,99960,99963,99965,99968,99970,99972,99974,99976,99978,99980,99982],{"class":188,"line":242},[186,99961,99962],{"class":202},"bbbb",[186,99964,529],{"class":669},[186,99966,99967],{"class":202},"bbb.reshape(",[186,99969,1697],{"class":206},[186,99971,1988],{"class":202},[186,99973,1691],{"class":206},[186,99975,1988],{"class":202},[186,99977,1691],{"class":206},[186,99979,1988],{"class":202},[186,99981,1697],{"class":206},[186,99983,1629],{"class":202},[186,99985,99986],{"class":188,"line":248},[186,99987,99782],{"class":192},[186,99989,99990,99993,99995,99997,99999],{"class":188,"line":265},[186,99991,99992],{"class":202},"np.concatenate((aaaa,bbbb),",[186,99994,48968],{"class":835},[186,99996,529],{"class":669},[186,99998,1803],{"class":206},[186,100000,99859],{"class":202},[186,100002,100003],{"class":188,"line":271},[186,100004,100005],{"class":192},"#结果：（4，3，3，2）\n",[186,100007,100008],{"class":188,"line":288},[186,100009,99814],{"class":192},[186,100011,100012,100014,100016,100018,100020],{"class":188,"line":294},[186,100013,99992],{"class":202},[186,100015,48968],{"class":835},[186,100017,529],{"class":669},[186,100019,1829],{"class":206},[186,100021,99859],{"class":202},[186,100023,100024],{"class":188,"line":1212},[186,100025,100026],{"class":192},"#结果：（2，6，3，2）\n",[186,100028,100029],{"class":188,"line":1223},[186,100030,99846],{"class":192},[186,100032,100033,100035,100037,100039,100041],{"class":188,"line":1236},[186,100034,99992],{"class":202},[186,100036,48968],{"class":835},[186,100038,529],{"class":669},[186,100040,1697],{"class":206},[186,100042,99859],{"class":202},[186,100044,100045],{"class":188,"line":3096},[186,100046,100047],{"class":192},"#结果：（2，3，6，2）\n",[186,100049,100050],{"class":188,"line":3110},[186,100051,100052],{"class":192},"#axis=3\n",[186,100054,100055,100057,100059,100061,100063],{"class":188,"line":3115},[186,100056,99992],{"class":202},[186,100058,48968],{"class":835},[186,100060,529],{"class":669},[186,100062,1691],{"class":206},[186,100064,99859],{"class":202},[186,100066,100067],{"class":188,"line":3121},[186,100068,100069],{"class":192},"#结果：（2，3，3，4）\n",[14,100071,100073],{"id":100072},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[169,100075,100076],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[169,100078,100079],{},"①二维数组",[176,100081,100083],{"className":31833,"code":100082,"language":31835,"meta":181,"style":181},"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",[183,100084,100085,100109,100133,100138,100143],{"__ignoreMap":181},[186,100086,100087,100089,100091,100093,100095,100097,100099,100101,100103,100105,100107],{"class":188,"line":189},[186,100088,94737],{"class":202},[186,100090,529],{"class":669},[186,100092,94433],{"class":202},[186,100094,1829],{"class":206},[186,100096,1988],{"class":202},[186,100098,2133],{"class":206},[186,100100,94438],{"class":202},[186,100102,1691],{"class":206},[186,100104,1988],{"class":202},[186,100106,1904],{"class":206},[186,100108,1629],{"class":202},[186,100110,100111,100113,100115,100117,100119,100121,100123,100125,100127,100129,100131],{"class":188,"line":49},[186,100112,99618],{"class":202},[186,100114,529],{"class":669},[186,100116,94433],{"class":202},[186,100118,1947],{"class":206},[186,100120,1988],{"class":202},[186,100122,2252],{"class":206},[186,100124,94438],{"class":202},[186,100126,1691],{"class":206},[186,100128,1988],{"class":202},[186,100130,1904],{"class":206},[186,100132,1629],{"class":202},[186,100134,100135],{"class":188,"line":219},[186,100136,100137],{"class":202},"np.hstack((aa,bb))\n",[186,100139,100140],{"class":188,"line":225},[186,100141,100142],{"class":192},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[186,100144,100145],{"class":188,"line":242},[186,100146,100147],{"class":192},"#np.hstack([aa,bb])\n",[169,100149,99664],{},[169,100151,100152],{},[164,100153],{"alt":181,"src":100154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[169,100156,100157],{},"等效于concatenate()函数中axis=1时的情况",[169,100159,100160],{},"②三维数组",[176,100162,100164],{"className":31833,"code":100163,"language":31835,"meta":181,"style":181},"#两个三行六列\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",[183,100165,100166,100170,100198,100226,100231,100236],{"__ignoreMap":181},[186,100167,100168],{"class":188,"line":189},[186,100169,99719],{"class":192},[186,100171,100172,100174,100176,100178,100180,100182,100184,100186,100188,100190,100192,100194,100196],{"class":188,"line":49},[186,100173,96952],{"class":202},[186,100175,529],{"class":669},[186,100177,94433],{"class":202},[186,100179,1829],{"class":206},[186,100181,1988],{"class":202},[186,100183,1936],{"class":206},[186,100185,94438],{"class":202},[186,100187,1697],{"class":206},[186,100189,1988],{"class":202},[186,100191,1691],{"class":206},[186,100193,1988],{"class":202},[186,100195,1954],{"class":206},[186,100197,1629],{"class":202},[186,100199,100200,100202,100204,100206,100208,100210,100212,100214,100216,100218,100220,100222,100224],{"class":188,"line":219},[186,100201,99752],{"class":202},[186,100203,529],{"class":669},[186,100205,94433],{"class":202},[186,100207,1947],{"class":206},[186,100209,1988],{"class":202},[186,100211,99763],{"class":206},[186,100213,94438],{"class":202},[186,100215,1697],{"class":206},[186,100217,1988],{"class":202},[186,100219,1691],{"class":206},[186,100221,1988],{"class":202},[186,100223,1954],{"class":206},[186,100225,1629],{"class":202},[186,100227,100228],{"class":188,"line":225},[186,100229,100230],{"class":192},"#使用hstack\n",[186,100232,100233],{"class":188,"line":242},[186,100234,100235],{"class":202},"np.hstack((aaa,bbb)).shape\n",[186,100237,100238],{"class":188,"line":248},[186,100239,100240],{"class":192},"#输出：（2，6，6）\n",[14,100242,100244],{"id":100243},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[169,100246,100247],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[169,100249,100079],{},[176,100251,100253],{"className":31833,"code":100252,"language":31835,"meta":181,"style":181},"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",[183,100254,100255,100279,100303,100308,100313,100318],{"__ignoreMap":181},[186,100256,100257,100259,100261,100263,100265,100267,100269,100271,100273,100275,100277],{"class":188,"line":189},[186,100258,94737],{"class":202},[186,100260,529],{"class":669},[186,100262,94433],{"class":202},[186,100264,1829],{"class":206},[186,100266,1988],{"class":202},[186,100268,2133],{"class":206},[186,100270,94438],{"class":202},[186,100272,1691],{"class":206},[186,100274,1988],{"class":202},[186,100276,1904],{"class":206},[186,100278,1629],{"class":202},[186,100280,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299,100301],{"class":188,"line":49},[186,100282,99618],{"class":202},[186,100284,529],{"class":669},[186,100286,94433],{"class":202},[186,100288,1947],{"class":206},[186,100290,1988],{"class":202},[186,100292,2252],{"class":206},[186,100294,94438],{"class":202},[186,100296,1691],{"class":206},[186,100298,1988],{"class":202},[186,100300,1904],{"class":206},[186,100302,1629],{"class":202},[186,100304,100305],{"class":188,"line":219},[186,100306,100307],{"class":192},"#vstack 垂直方向进行堆叠\n",[186,100309,100310],{"class":188,"line":225},[186,100311,100312],{"class":202},"np.vstack((aa,bb))\n",[186,100314,100315],{"class":188,"line":242},[186,100316,100317],{"class":192},"#与hstack传的参数类似，等价于：\n",[186,100319,100320],{"class":188,"line":248},[186,100321,100322],{"class":202},"np.vstack([aa,bb])\n",[169,100324,99664],{},[169,100326,100327],{},[164,100328],{"alt":181,"src":100329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[169,100331,100160],{},[176,100333,100335],{"className":31833,"code":100334,"language":31835,"meta":181,"style":181},"#两个三行六列\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",[183,100336,100337,100341,100369,100397,100402,100407],{"__ignoreMap":181},[186,100338,100339],{"class":188,"line":189},[186,100340,99719],{"class":192},[186,100342,100343,100345,100347,100349,100351,100353,100355,100357,100359,100361,100363,100365,100367],{"class":188,"line":49},[186,100344,96952],{"class":202},[186,100346,529],{"class":669},[186,100348,94433],{"class":202},[186,100350,1829],{"class":206},[186,100352,1988],{"class":202},[186,100354,1936],{"class":206},[186,100356,94438],{"class":202},[186,100358,1697],{"class":206},[186,100360,1988],{"class":202},[186,100362,1691],{"class":206},[186,100364,1988],{"class":202},[186,100366,1954],{"class":206},[186,100368,1629],{"class":202},[186,100370,100371,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395],{"class":188,"line":219},[186,100372,99752],{"class":202},[186,100374,529],{"class":669},[186,100376,94433],{"class":202},[186,100378,1947],{"class":206},[186,100380,1988],{"class":202},[186,100382,99763],{"class":206},[186,100384,94438],{"class":202},[186,100386,1697],{"class":206},[186,100388,1988],{"class":202},[186,100390,1691],{"class":206},[186,100392,1988],{"class":202},[186,100394,1954],{"class":206},[186,100396,1629],{"class":202},[186,100398,100399],{"class":188,"line":225},[186,100400,100401],{"class":192},"#使用vstack\n",[186,100403,100404],{"class":188,"line":242},[186,100405,100406],{"class":202},"np.vstack((aaa,bbb)).shape\n",[186,100408,100409],{"class":188,"line":248},[186,100410,100411],{"class":192},"#输出：（4，3，6）\n",[14,100413,100415],{"id":100414},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[169,100417,100418],{},"该方法是三维数组特有的方法",[169,100420,100421],{},"也就是说",[169,100423,100424],{},"一维数组拼接方法用：concatenate()",[169,100426,100427],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[169,100429,100430],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[169,100432,100433],{},"四维数组及多维数组只能用concatenate进行拼接",[176,100435,100437],{"className":31833,"code":100436,"language":31835,"meta":181,"style":181},"#两个三行六列\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",[183,100438,100439,100443,100471,100499,100504,100509],{"__ignoreMap":181},[186,100440,100441],{"class":188,"line":189},[186,100442,99719],{"class":192},[186,100444,100445,100447,100449,100451,100453,100455,100457,100459,100461,100463,100465,100467,100469],{"class":188,"line":49},[186,100446,96952],{"class":202},[186,100448,529],{"class":669},[186,100450,94433],{"class":202},[186,100452,1829],{"class":206},[186,100454,1988],{"class":202},[186,100456,1936],{"class":206},[186,100458,94438],{"class":202},[186,100460,1697],{"class":206},[186,100462,1988],{"class":202},[186,100464,1691],{"class":206},[186,100466,1988],{"class":202},[186,100468,1954],{"class":206},[186,100470,1629],{"class":202},[186,100472,100473,100475,100477,100479,100481,100483,100485,100487,100489,100491,100493,100495,100497],{"class":188,"line":219},[186,100474,99752],{"class":202},[186,100476,529],{"class":669},[186,100478,94433],{"class":202},[186,100480,1947],{"class":206},[186,100482,1988],{"class":202},[186,100484,99763],{"class":206},[186,100486,94438],{"class":202},[186,100488,1697],{"class":206},[186,100490,1988],{"class":202},[186,100492,1691],{"class":206},[186,100494,1988],{"class":202},[186,100496,1954],{"class":206},[186,100498,1629],{"class":202},[186,100500,100501],{"class":188,"line":225},[186,100502,100503],{"class":192},"#使用dstack\n",[186,100505,100506],{"class":188,"line":242},[186,100507,100508],{"class":202},"np.dstack((aaa,bbb)).shape\n",[186,100510,100511],{"class":188,"line":248},[186,100512,100513],{"class":192},"#结果：（2，3，12）\n",[1524,100515,100516],{},"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":181,"searchDepth":49,"depth":49,"links":100518},[100519,100520,100521,100522],{"id":99458,"depth":49,"text":99459},{"id":100072,"depth":49,"text":100073},{"id":100243,"depth":49,"text":100244},{"id":100414,"depth":49,"text":100415},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99450,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100529,"title":100530,"body":100531,"description":1548,"extension":1549,"meta":100806,"navigation":1551,"path":100807,"seo":100808,"stem":100809,"__hash__":100810},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100532,"toc":100804},[100533,100536,100539,100633,100636,100639,100642,100645,100648,100651,100654,100657,100801],[10,100534,100530],{"id":100535},"_7数组转置",[169,100537,100538],{},"使用transpose()函数",[176,100540,100542],{"className":31833,"code":100541,"language":31835,"meta":181,"style":181},"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",[183,100543,100544,100554,100578,100583,100588,100593,100598,100606,100610,100614,100619,100624,100629],{"__ignoreMap":181},[186,100545,100546,100548,100550,100552],{"class":188,"line":189},[186,100547,31847],{"class":669},[186,100549,32835],{"class":202},[186,100551,32838],{"class":669},[186,100553,32841],{"class":202},[186,100555,100556,100558,100560,100562,100564,100566,100568,100570,100572,100574,100576],{"class":188,"line":49},[186,100557,948],{"class":202},[186,100559,529],{"class":669},[186,100561,33172],{"class":202},[186,100563,1829],{"class":206},[186,100565,1988],{"class":202},[186,100567,2133],{"class":206},[186,100569,94438],{"class":202},[186,100571,1904],{"class":206},[186,100573,1988],{"class":202},[186,100575,1691],{"class":206},[186,100577,1629],{"class":202},[186,100579,100580],{"class":188,"line":219},[186,100581,100582],{"class":192},"#二维数组转置\n",[186,100584,100585],{"class":188,"line":225},[186,100586,100587],{"class":192},"#调用transpose()函数\n",[186,100589,100590],{"class":188,"line":242},[186,100591,100592],{"class":202},"a.transpose()\n",[186,100594,100595],{"class":188,"line":248},[186,100596,100597],{"class":192},"#对于二维数组也可以采用.T来实现\n",[186,100599,100600,100603],{"class":188,"line":265},[186,100601,100602],{"class":202},"a.T",[186,100604,100605],{"class":192},"#与上述代码一样\n",[186,100607,100608],{"class":188,"line":271},[186,100609,94995],{"class":192},[186,100611,100612],{"class":188,"line":288},[186,100613,95359],{"class":532},[186,100615,100616],{"class":188,"line":294},[186,100617,100618],{"class":532},"array([[ 1,  4,  7, 10],\n",[186,100620,100621],{"class":188,"line":1212},[186,100622,100623],{"class":532},"       [ 2,  5,  8, 11],\n",[186,100625,100626],{"class":188,"line":1223},[186,100627,100628],{"class":532},"       [ 3,  6,  9, 12]])\n",[186,100630,100631],{"class":188,"line":1236},[186,100632,95359],{"class":532},[169,100634,100635],{},"也可以使用np.transpose()的形式",[169,100637,100638],{},"#多维数组进行转置 np.transpose()",[169,100640,100641],{},"#对二维数组也可以使用np.transpose()进行转置",[169,100643,100644],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[169,100646,100647],{},"第二个参数，维度可以理解为用axis中的数来理解",[169,100649,100650],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[169,100652,100653],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[169,100655,100656],{},"四维及以上的数组也是一样的道理",[176,100658,100660],{"className":31833,"code":100659,"language":31835,"meta":181,"style":181},"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",[183,100661,100662,100690,100695,100700,100705,100723,100728,100760,100765,100770,100775,100796],{"__ignoreMap":181},[186,100663,100664,100666,100668,100670,100672,100674,100676,100678,100680,100682,100684,100686,100688],{"class":188,"line":189},[186,100665,2428],{"class":202},[186,100667,529],{"class":669},[186,100669,94433],{"class":202},[186,100671,1829],{"class":206},[186,100673,1988],{"class":202},[186,100675,1936],{"class":206},[186,100677,94438],{"class":202},[186,100679,1691],{"class":206},[186,100681,1988],{"class":202},[186,100683,1954],{"class":206},[186,100685,1988],{"class":202},[186,100687,1697],{"class":206},[186,100689,1629],{"class":202},[186,100691,100692],{"class":188,"line":49},[186,100693,100694],{"class":202},"x.shape\n",[186,100696,100697],{"class":188,"line":219},[186,100698,100699],{"class":192},"#结果：（3,6,2）\n",[186,100701,100702],{"class":188,"line":225},[186,100703,100704],{"class":192},"#使用np.transpose()进行转置 变为(2,6,3)\n",[186,100706,100707,100710,100712,100714,100716,100718,100720],{"class":188,"line":242},[186,100708,100709],{"class":202},"np.transpose(x,(",[186,100711,1697],{"class":206},[186,100713,1988],{"class":202},[186,100715,1829],{"class":206},[186,100717,1988],{"class":202},[186,100719,1803],{"class":206},[186,100721,100722],{"class":202},")).shape\n",[186,100724,100725],{"class":188,"line":248},[186,100726,100727],{"class":192},"#结果：(2,6,3)\n",[186,100729,100730,100732,100734,100736,100738,100740,100742,100744,100746,100748,100750,100752,100754,100756,100758],{"class":188,"line":265},[186,100731,99937],{"class":202},[186,100733,529],{"class":669},[186,100735,94433],{"class":202},[186,100737,1829],{"class":206},[186,100739,1988],{"class":202},[186,100741,1936],{"class":206},[186,100743,94438],{"class":202},[186,100745,1691],{"class":206},[186,100747,1988],{"class":202},[186,100749,1697],{"class":206},[186,100751,1988],{"class":202},[186,100753,1829],{"class":206},[186,100755,1988],{"class":202},[186,100757,1954],{"class":206},[186,100759,1629],{"class":202},[186,100761,100762],{"class":188,"line":271},[186,100763,100764],{"class":202},"aaaa.shape\n",[186,100766,100767],{"class":188,"line":288},[186,100768,100769],{"class":192},"#结果：（3，2，1，6）\n",[186,100771,100772],{"class":188,"line":294},[186,100773,100774],{"class":192},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[186,100776,100777,100780,100782,100784,100786,100788,100790,100792,100794],{"class":188,"line":1212},[186,100778,100779],{"class":202},"np.transpose(aaaa,(",[186,100781,1829],{"class":206},[186,100783,1988],{"class":202},[186,100785,1697],{"class":206},[186,100787,1988],{"class":202},[186,100789,1803],{"class":206},[186,100791,1988],{"class":202},[186,100793,1691],{"class":206},[186,100795,100722],{"class":202},[186,100797,100798],{"class":188,"line":1223},[186,100799,100800],{"class":192},"#结果：(2,1,3,6)\n",[1524,100802,100803],{},"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":181,"searchDepth":49,"depth":49,"links":100805},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100530,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100812,"title":100813,"body":100814,"description":1548,"extension":1549,"meta":101548,"navigation":1551,"path":101549,"seo":101550,"stem":101551,"__hash__":101552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100815,"toc":101546},[100816,100819,100822,100825,100828,100831,100834,100837,100840,100949,100952,100955,101543],[10,100817,100813],{"id":100818},"_8数组分割",[169,100820,100821],{},"split分割",[169,100823,100824],{},"numpy.split(ary,indics_or_sections,axis)",[169,100826,100827],{},"解释：",[169,100829,100830],{},"ary:被分割的数组",[169,100832,100833],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[169,100835,100836],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[169,100838,100839],{},"①一维数组的分割",[176,100841,100843],{"className":31833,"code":100842,"language":31835,"meta":181,"style":181},"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",[183,100844,100845,100861,100866,100875,100879,100884,100892,100896,100901,100906,100919,100923,100928,100940,100944],{"__ignoreMap":181},[186,100846,100847,100849,100851,100853,100855,100857,100859],{"class":188,"line":189},[186,100848,948],{"class":202},[186,100850,529],{"class":669},[186,100852,94433],{"class":202},[186,100854,1829],{"class":206},[186,100856,1988],{"class":202},[186,100858,2030],{"class":206},[186,100860,1629],{"class":202},[186,100862,100863],{"class":188,"line":49},[186,100864,100865],{"class":192},"#如果传入整数，必须能够平分，否则会报错\n",[186,100867,100868,100871,100873],{"class":188,"line":219},[186,100869,100870],{"class":202},"np.split(a,",[186,100872,1697],{"class":206},[186,100874,1629],{"class":202},[186,100876,100877],{"class":188,"line":225},[186,100878,94995],{"class":192},[186,100880,100881],{"class":188,"line":242},[186,100882,100883],{"class":192},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[186,100885,100886,100888,100890],{"class":188,"line":248},[186,100887,100870],{"class":202},[186,100889,1904],{"class":206},[186,100891,1629],{"class":202},[186,100893,100894],{"class":188,"line":265},[186,100895,94995],{"class":192},[186,100897,100898],{"class":188,"line":271},[186,100899,100900],{"class":192},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[186,100902,100903],{"class":188,"line":288},[186,100904,100905],{"class":192},"#传入数组\n",[186,100907,100908,100911,100913,100915,100917],{"class":188,"line":294},[186,100909,100910],{"class":202},"np.split(a,[",[186,100912,1691],{"class":206},[186,100914,1988],{"class":202},[186,100916,1930],{"class":206},[186,100918,6123],{"class":202},[186,100920,100921],{"class":188,"line":1212},[186,100922,94995],{"class":192},[186,100924,100925],{"class":188,"line":1223},[186,100926,100927],{"class":192},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[186,100929,100930,100932,100934,100936,100938],{"class":188,"line":1236},[186,100931,100910],{"class":202},[186,100933,1930],{"class":206},[186,100935,1988],{"class":202},[186,100937,1979],{"class":206},[186,100939,6123],{"class":202},[186,100941,100942],{"class":188,"line":3096},[186,100943,94995],{"class":192},[186,100945,100946],{"class":188,"line":3110},[186,100947,100948],{"class":192},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[169,100950,100951],{},"②二维数组的分割",[169,100953,100954],{},"使用split()",[176,100956,100958],{"className":31833,"code":100957,"language":31835,"meta":181,"style":181},"#二维数组分割\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",[183,100959,100960,100965,100989,100994,101003,101007,101011,101016,101021,101026,101031,101036,101041,101046,101050,101063,101067,101071,101075,101079,101083,101088,101093,101098,101102,101107,101123,101127,101131,101136,101141,101146,101151,101156,101161,101166,101171,101176,101181,101186,101191,101196,101201,101206,101211,101216,101221,101225,101229,101249,101253,101257,101262,101267,101272,101277,101282,101287,101292,101297,101302,101307,101312,101317,101322,101327,101332,101337,101342,101347,101351,101356,101365,101369,101373,101377,101381,101385,101389,101393,101397,101401,101410,101414,101418,101422,101426,101430,101434,101438,101442,101446,101450,101454,101458,101462,101466,101470,101474,101478,101482,101486,101490,101494,101507,101511,101515,101519,101523,101527,101531,101535,101539],{"__ignoreMap":181},[186,100961,100962],{"class":188,"line":189},[186,100963,100964],{"class":192},"#二维数组分割\n",[186,100966,100967,100969,100971,100973,100975,100977,100979,100981,100983,100985,100987],{"class":188,"line":49},[186,100968,94737],{"class":202},[186,100970,529],{"class":669},[186,100972,94433],{"class":202},[186,100974,1829],{"class":206},[186,100976,1988],{"class":202},[186,100978,1936],{"class":206},[186,100980,94438],{"class":202},[186,100982,1954],{"class":206},[186,100984,1988],{"class":202},[186,100986,1954],{"class":206},[186,100988,1629],{"class":202},[186,100990,100991],{"class":188,"line":219},[186,100992,100993],{"class":192},"#默认axis=0  传入整数平均分,按行来的\n",[186,100995,100996,100999,101001],{"class":188,"line":225},[186,100997,100998],{"class":202},"np.split(aa,",[186,101000,1691],{"class":206},[186,101002,1629],{"class":202},[186,101004,101005],{"class":188,"line":242},[186,101006,97195],{"class":192},[186,101008,101009],{"class":188,"line":248},[186,101010,95359],{"class":532},[186,101012,101013],{"class":188,"line":265},[186,101014,101015],{"class":532},"[array([[ 1,  2,  3,  4,  5,  6],\n",[186,101017,101018],{"class":188,"line":271},[186,101019,101020],{"class":532},"        [ 7,  8,  9, 10, 11, 12]]),\n",[186,101022,101023],{"class":188,"line":288},[186,101024,101025],{"class":532}," array([[13, 14, 15, 16, 17, 18],\n",[186,101027,101028],{"class":188,"line":294},[186,101029,101030],{"class":532},"        [19, 20, 21, 22, 23, 24]]),\n",[186,101032,101033],{"class":188,"line":1212},[186,101034,101035],{"class":532}," array([[25, 26, 27, 28, 29, 30],\n",[186,101037,101038],{"class":188,"line":1223},[186,101039,101040],{"class":532},"        [31, 32, 33, 34, 35, 36]])]\n",[186,101042,101043],{"class":188,"line":1236},[186,101044,101045],{"class":532}," '''\n",[186,101047,101048],{"class":188,"line":3096},[186,101049,100905],{"class":192},[186,101051,101052,101055,101057,101059,101061],{"class":188,"line":3110},[186,101053,101054],{"class":202},"np.split(aa,[",[186,101056,1697],{"class":206},[186,101058,1988],{"class":202},[186,101060,1930],{"class":206},[186,101062,6123],{"class":202},[186,101064,101065],{"class":188,"line":3115},[186,101066,97195],{"class":192},[186,101068,101069],{"class":188,"line":3121},[186,101070,95359],{"class":532},[186,101072,101073],{"class":188,"line":3142},[186,101074,101015],{"class":532},[186,101076,101077],{"class":188,"line":3147},[186,101078,101020],{"class":532},[186,101080,101081],{"class":188,"line":3161},[186,101082,101025],{"class":532},[186,101084,101085],{"class":188,"line":3166},[186,101086,101087],{"class":532},"        [19, 20, 21, 22, 23, 24],\n",[186,101089,101090],{"class":188,"line":3195},[186,101091,101092],{"class":532},"        [25, 26, 27, 28, 29, 30]]),\n",[186,101094,101095],{"class":188,"line":3200},[186,101096,101097],{"class":532}," array([[31, 32, 33, 34, 35, 36]])]\n",[186,101099,101100],{"class":188,"line":3217},[186,101101,95359],{"class":532},[186,101103,101104],{"class":188,"line":3222},[186,101105,101106],{"class":192},"#axis=1 按照列来分\n",[186,101108,101109,101111,101113,101115,101117,101119,101121],{"class":188,"line":3227},[186,101110,100998],{"class":202},[186,101112,1691],{"class":206},[186,101114,1988],{"class":202},[186,101116,48968],{"class":835},[186,101118,529],{"class":669},[186,101120,1829],{"class":206},[186,101122,1629],{"class":202},[186,101124,101125],{"class":188,"line":3232},[186,101126,97195],{"class":192},[186,101128,101129],{"class":188,"line":3246},[186,101130,95359],{"class":532},[186,101132,101133],{"class":188,"line":3251},[186,101134,101135],{"class":532},"[array([[ 1,  2],\n",[186,101137,101138],{"class":188,"line":4044},[186,101139,101140],{"class":532},"        [ 7,  8],\n",[186,101142,101143],{"class":188,"line":4058},[186,101144,101145],{"class":532},"        [13, 14],\n",[186,101147,101148],{"class":188,"line":4066},[186,101149,101150],{"class":532},"        [19, 20],\n",[186,101152,101153],{"class":188,"line":4071},[186,101154,101155],{"class":532},"        [25, 26],\n",[186,101157,101158],{"class":188,"line":4077},[186,101159,101160],{"class":532},"        [31, 32]]),\n",[186,101162,101163],{"class":188,"line":4083},[186,101164,101165],{"class":532}," array([[ 3,  4],\n",[186,101167,101168],{"class":188,"line":4088},[186,101169,101170],{"class":532},"        [ 9, 10],\n",[186,101172,101173],{"class":188,"line":9411},[186,101174,101175],{"class":532},"        [15, 16],\n",[186,101177,101178],{"class":188,"line":9435},[186,101179,101180],{"class":532},"        [21, 22],\n",[186,101182,101183],{"class":188,"line":9440},[186,101184,101185],{"class":532},"        [27, 28],\n",[186,101187,101188],{"class":188,"line":9446},[186,101189,101190],{"class":532},"        [33, 34]]),\n",[186,101192,101193],{"class":188,"line":9473},[186,101194,101195],{"class":532}," array([[ 5,  6],\n",[186,101197,101198],{"class":188,"line":9478},[186,101199,101200],{"class":532},"        [11, 12],\n",[186,101202,101203],{"class":188,"line":9484},[186,101204,101205],{"class":532},"        [17, 18],\n",[186,101207,101208],{"class":188,"line":9496},[186,101209,101210],{"class":532},"        [23, 24],\n",[186,101212,101213],{"class":188,"line":9508},[186,101214,101215],{"class":532},"        [29, 30],\n",[186,101217,101218],{"class":188,"line":9520},[186,101219,101220],{"class":532},"        [35, 36]])]\n",[186,101222,101223],{"class":188,"line":11179},[186,101224,101045],{"class":532},[186,101226,101227],{"class":188,"line":11204},[186,101228,100905],{"class":192},[186,101230,101231,101233,101235,101237,101239,101241,101243,101245,101247],{"class":188,"line":11227},[186,101232,101054],{"class":202},[186,101234,1829],{"class":206},[186,101236,1988],{"class":202},[186,101238,1697],{"class":206},[186,101240,43063],{"class":202},[186,101242,48968],{"class":835},[186,101244,529],{"class":669},[186,101246,1829],{"class":206},[186,101248,1629],{"class":202},[186,101250,101251],{"class":188,"line":11251},[186,101252,94995],{"class":192},[186,101254,101255],{"class":188,"line":11256},[186,101256,95359],{"class":532},[186,101258,101259],{"class":188,"line":11261},[186,101260,101261],{"class":532},"[array([[ 1],\n",[186,101263,101264],{"class":188,"line":11266},[186,101265,101266],{"class":532},"        [ 7],\n",[186,101268,101269],{"class":188,"line":11275},[186,101270,101271],{"class":532},"        [13],\n",[186,101273,101274],{"class":188,"line":11280},[186,101275,101276],{"class":532},"        [19],\n",[186,101278,101279],{"class":188,"line":11286},[186,101280,101281],{"class":532},"        [25],\n",[186,101283,101284],{"class":188,"line":11307},[186,101285,101286],{"class":532},"        [31]]),\n",[186,101288,101289],{"class":188,"line":11313},[186,101290,101291],{"class":532}," array([[ 2],\n",[186,101293,101294],{"class":188,"line":11327},[186,101295,101296],{"class":532},"        [ 8],\n",[186,101298,101299],{"class":188,"line":11333},[186,101300,101301],{"class":532},"        [14],\n",[186,101303,101304],{"class":188,"line":11360},[186,101305,101306],{"class":532},"        [20],\n",[186,101308,101309],{"class":188,"line":11369},[186,101310,101311],{"class":532},"        [26],\n",[186,101313,101314],{"class":188,"line":11375},[186,101315,101316],{"class":532},"        [32]]),\n",[186,101318,101319],{"class":188,"line":11383},[186,101320,101321],{"class":532}," array([[ 3,  4,  5,  6],\n",[186,101323,101324],{"class":188,"line":11388},[186,101325,101326],{"class":532},"        [ 9, 10, 11, 12],\n",[186,101328,101329],{"class":188,"line":18065},[186,101330,101331],{"class":532},"        [15, 16, 17, 18],\n",[186,101333,101334],{"class":188,"line":18071},[186,101335,101336],{"class":532},"        [21, 22, 23, 24],\n",[186,101338,101339],{"class":188,"line":18094},[186,101340,101341],{"class":532},"        [27, 28, 29, 30],\n",[186,101343,101344],{"class":188,"line":18100},[186,101345,101346],{"class":532},"        [33, 34, 35, 36]])]\n",[186,101348,101349],{"class":188,"line":18123},[186,101350,95359],{"class":532},[186,101352,101353],{"class":188,"line":18137},[186,101354,101355],{"class":192},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[186,101357,101358,101361,101363],{"class":188,"line":18157},[186,101359,101360],{"class":202},"np.vsplit(aa,",[186,101362,1691],{"class":206},[186,101364,1629],{"class":202},[186,101366,101367],{"class":188,"line":18163},[186,101368,94995],{"class":192},[186,101370,101371],{"class":188,"line":18174},[186,101372,95359],{"class":532},[186,101374,101375],{"class":188,"line":18197},[186,101376,101015],{"class":532},[186,101378,101379],{"class":188,"line":18219},[186,101380,101020],{"class":532},[186,101382,101383],{"class":188,"line":18224},[186,101384,101025],{"class":532},[186,101386,101387],{"class":188,"line":18230},[186,101388,101030],{"class":532},[186,101390,101391],{"class":188,"line":18244},[186,101392,101035],{"class":532},[186,101394,101395],{"class":188,"line":18257},[186,101396,101040],{"class":532},[186,101398,101399],{"class":188,"line":18262},[186,101400,95359],{"class":532},[186,101402,101403,101406,101408],{"class":188,"line":18276},[186,101404,101405],{"class":202},"np.hsplit(aa,",[186,101407,1691],{"class":206},[186,101409,1629],{"class":202},[186,101411,101412],{"class":188,"line":18281},[186,101413,94995],{"class":192},[186,101415,101416],{"class":188,"line":18287},[186,101417,95359],{"class":532},[186,101419,101420],{"class":188,"line":18292},[186,101421,101135],{"class":532},[186,101423,101424],{"class":188,"line":18306},[186,101425,101140],{"class":532},[186,101427,101428],{"class":188,"line":18311},[186,101429,101145],{"class":532},[186,101431,101432],{"class":188,"line":18316},[186,101433,101150],{"class":532},[186,101435,101436],{"class":188,"line":18330},[186,101437,101155],{"class":532},[186,101439,101440],{"class":188,"line":18342},[186,101441,101160],{"class":532},[186,101443,101444],{"class":188,"line":18347},[186,101445,101165],{"class":532},[186,101447,101448],{"class":188,"line":18360},[186,101449,101170],{"class":532},[186,101451,101452],{"class":188,"line":18365},[186,101453,101175],{"class":532},[186,101455,101456],{"class":188,"line":18370},[186,101457,101180],{"class":532},[186,101459,101460],{"class":188,"line":18375},[186,101461,101185],{"class":532},[186,101463,101464],{"class":188,"line":18388},[186,101465,101190],{"class":532},[186,101467,101468],{"class":188,"line":18393},[186,101469,101195],{"class":532},[186,101471,101472],{"class":188,"line":34088},[186,101473,101200],{"class":532},[186,101475,101476],{"class":188,"line":34094},[186,101477,101205],{"class":532},[186,101479,101480],{"class":188,"line":34100},[186,101481,101210],{"class":532},[186,101483,101484],{"class":188,"line":34106},[186,101485,101215],{"class":532},[186,101487,101488],{"class":188,"line":34112},[186,101489,101220],{"class":532},[186,101491,101492],{"class":188,"line":34123},[186,101493,95359],{"class":532},[186,101495,101496,101499,101501,101503,101505],{"class":188,"line":34129},[186,101497,101498],{"class":202},"np.vsplit(aa,[",[186,101500,1697],{"class":206},[186,101502,1988],{"class":202},[186,101504,1930],{"class":206},[186,101506,6123],{"class":202},[186,101508,101509],{"class":188,"line":34149},[186,101510,94995],{"class":192},[186,101512,101513],{"class":188,"line":34155},[186,101514,95359],{"class":532},[186,101516,101517],{"class":188,"line":34166},[186,101518,101015],{"class":532},[186,101520,101521],{"class":188,"line":34172},[186,101522,101020],{"class":532},[186,101524,101525],{"class":188,"line":34178},[186,101526,101025],{"class":532},[186,101528,101529],{"class":188,"line":34184},[186,101530,101087],{"class":532},[186,101532,101533],{"class":188,"line":34190},[186,101534,101092],{"class":532},[186,101536,101537],{"class":188,"line":34196},[186,101538,101097],{"class":532},[186,101540,101541],{"class":188,"line":34202},[186,101542,101045],{"class":532},[1524,101544,101545],{},"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":181,"searchDepth":49,"depth":49,"links":101547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100813,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101554,"title":101555,"body":101556,"description":1548,"extension":1549,"meta":102050,"navigation":1551,"path":102051,"seo":102052,"stem":102053,"__hash__":102054},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101557,"toc":102041},[101558,101561,101564,101589,101593,101652,101704,101708,101710,101746,101800,101802,101840,101911,101915,101920,101924,101927,101960,101963,101967,101970,101973,101976,101979,101984,101988,101991,101994,101997,102000,102005,102009,102014,102017,102038],[10,101559,101555],{"id":101560},"_9数学函数",[169,101562,101563],{},"补充回顾：python的列表推导式",[176,101565,101567],{"className":31833,"code":101566,"language":31835,"meta":181,"style":181},"[1\u002Fi for i in a]\n",[183,101568,101569],{"__ignoreMap":181},[186,101570,101571,101573,101575,101577,101580,101582,101584,101586],{"class":188,"line":189},[186,101572,2498],{"class":202},[186,101574,1829],{"class":206},[186,101576,2194],{"class":669},[186,101578,101579],{"class":202},"i ",[186,101581,4491],{"class":669},[186,101583,10901],{"class":202},[186,101585,27500],{"class":669},[186,101587,101588],{"class":202}," a]\n",[14,101590,101592],{"id":101591},"_91-求倒数","9.1 求倒数",[176,101594,101596],{"className":31833,"code":101595,"language":31835,"meta":181,"style":181},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[183,101597,101598,101603,101631,101643],{"__ignoreMap":181},[186,101599,101600],{"class":188,"line":189},[186,101601,101602],{"class":192},"#数组求倒数\n",[186,101604,101605,101607,101609,101611,101613,101615,101617,101619,101621,101623,101625,101627,101629],{"class":188,"line":49},[186,101606,948],{"class":202},[186,101608,529],{"class":669},[186,101610,2498],{"class":202},[186,101612,1829],{"class":206},[186,101614,1988],{"class":202},[186,101616,1697],{"class":206},[186,101618,1988],{"class":202},[186,101620,1691],{"class":206},[186,101622,1988],{"class":202},[186,101624,1904],{"class":206},[186,101626,1988],{"class":202},[186,101628,1930],{"class":206},[186,101630,34701],{"class":202},[186,101632,101633,101635,101637,101640],{"class":188,"line":219},[186,101634,1874],{"class":202},[186,101636,529],{"class":669},[186,101638,101639],{"class":202},"np.array(a)",[186,101641,101642],{"class":192},"#将列表转换为数组\n",[186,101644,101645,101647,101649],{"class":188,"line":225},[186,101646,1829],{"class":206},[186,101648,2194],{"class":669},[186,101650,101651],{"class":202},"b\n",[176,101653,101655],{"className":31833,"code":101654,"language":31835,"meta":181,"style":181},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[183,101656,101657,101685,101694,101699],{"__ignoreMap":181},[186,101658,101659,101661,101663,101665,101667,101669,101671,101673,101675,101677,101679,101681,101683],{"class":188,"line":189},[186,101660,948],{"class":202},[186,101662,529],{"class":669},[186,101664,2498],{"class":202},[186,101666,1829],{"class":206},[186,101668,1988],{"class":202},[186,101670,1697],{"class":206},[186,101672,1988],{"class":202},[186,101674,1691],{"class":206},[186,101676,1988],{"class":202},[186,101678,1904],{"class":206},[186,101680,1988],{"class":202},[186,101682,1930],{"class":206},[186,101684,34701],{"class":202},[186,101686,101687,101689,101691],{"class":188,"line":49},[186,101688,1874],{"class":202},[186,101690,529],{"class":669},[186,101692,101693],{"class":202},"np.array(a)\n",[186,101695,101696],{"class":188,"line":219},[186,101697,101698],{"class":192},"#调用numpy中的函数reciprocal()\n",[186,101700,101701],{"class":188,"line":225},[186,101702,101703],{"class":202},"np.reciprocal(b)\n",[14,101705,101707],{"id":101706},"_92-求平方","9.2 求平方",[169,101709,95961],{},[176,101711,101713],{"className":31833,"code":101712,"language":31835,"meta":181,"style":181},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[183,101714,101715,101720,101725,101741],{"__ignoreMap":181},[186,101716,101717],{"class":188,"line":189},[186,101718,101719],{"class":192},"#square()，求平方\n",[186,101721,101722],{"class":188,"line":49},[186,101723,101724],{"class":192},"#一维数组\n",[186,101726,101727,101729,101731,101733,101735,101737,101739],{"class":188,"line":219},[186,101728,948],{"class":202},[186,101730,529],{"class":669},[186,101732,94433],{"class":202},[186,101734,1829],{"class":206},[186,101736,1988],{"class":202},[186,101738,2056],{"class":206},[186,101740,1629],{"class":202},[186,101742,101743],{"class":188,"line":225},[186,101744,101745],{"class":202},"np.square(a)\n",[176,101747,101749],{"className":31833,"code":101748,"language":31835,"meta":181,"style":181},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[183,101750,101751,101756,101761,101782],{"__ignoreMap":181},[186,101752,101753],{"class":188,"line":189},[186,101754,101755],{"class":192},"#或者通过循环遍历的形式来计算\n",[186,101757,101758],{"class":188,"line":49},[186,101759,101760],{"class":192},"#这是一个列表\n",[186,101762,101763,101766,101768,101770,101772,101774,101776,101779],{"class":188,"line":219},[186,101764,101765],{"class":202},"[i",[186,101767,2065],{"class":669},[186,101769,101579],{"class":202},[186,101771,4491],{"class":669},[186,101773,10901],{"class":202},[186,101775,27500],{"class":669},[186,101777,101778],{"class":202}," a]",[186,101780,101781],{"class":192},"#这个求完之后在数列当中\n",[186,101783,101784,101787,101789,101791,101793,101795,101797],{"class":188,"line":225},[186,101785,101786],{"class":202},"np.array([i",[186,101788,2065],{"class":669},[186,101790,101579],{"class":202},[186,101792,4491],{"class":669},[186,101794,10901],{"class":202},[186,101796,27500],{"class":669},[186,101798,101799],{"class":202}," a])\n",[169,101801,94722],{},[176,101803,101805],{"className":31833,"code":101804,"language":31835,"meta":181,"style":181},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[183,101806,101807,101811,101835],{"__ignoreMap":181},[186,101808,101809],{"class":188,"line":189},[186,101810,94732],{"class":192},[186,101812,101813,101815,101817,101819,101821,101823,101825,101827,101829,101831,101833],{"class":188,"line":49},[186,101814,94737],{"class":202},[186,101816,529],{"class":669},[186,101818,94433],{"class":202},[186,101820,1829],{"class":206},[186,101822,1988],{"class":202},[186,101824,2133],{"class":206},[186,101826,94438],{"class":202},[186,101828,1904],{"class":206},[186,101830,1988],{"class":202},[186,101832,1691],{"class":206},[186,101834,1629],{"class":202},[186,101836,101837],{"class":188,"line":219},[186,101838,101839],{"class":202},"np.square(aa)\n",[176,101841,101843],{"className":31833,"code":101842,"language":31835,"meta":181,"style":181},"#传统的方式\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",[183,101844,101845,101850,101859,101875,101891,101906],{"__ignoreMap":181},[186,101846,101847],{"class":188,"line":189},[186,101848,101849],{"class":192},"#传统的方式\n",[186,101851,101852,101854,101856],{"class":188,"line":49},[186,101853,99618],{"class":202},[186,101855,529],{"class":669},[186,101857,101858],{"class":202},"np.empty_like(aa)\n",[186,101860,101861,101863,101865,101867,101869,101871,101873],{"class":188,"line":219},[186,101862,4491],{"class":669},[186,101864,10901],{"class":202},[186,101866,27500],{"class":669},[186,101868,33898],{"class":206},[186,101870,832],{"class":202},[186,101872,1904],{"class":206},[186,101874,32241],{"class":202},[186,101876,101877,101879,101881,101883,101885,101887,101889],{"class":188,"line":225},[186,101878,4667],{"class":669},[186,101880,10963],{"class":202},[186,101882,27500],{"class":669},[186,101884,33898],{"class":206},[186,101886,832],{"class":202},[186,101888,1691],{"class":206},[186,101890,32241],{"class":202},[186,101892,101893,101896,101898,101901,101903],{"class":188,"line":242},[186,101894,101895],{"class":202},"        bb[i,j]",[186,101897,529],{"class":669},[186,101899,101900],{"class":202},"aa[i,j]",[186,101902,2065],{"class":669},[186,101904,101905],{"class":202},"aa[i,j]\n",[186,101907,101908],{"class":188,"line":248},[186,101909,101910],{"class":202},"bb\n",[14,101912,101914],{"id":101913},"_93-求各元素的符号","9.3 求各元素的符号",[169,101916,101917],{},[164,101918],{"alt":181,"src":101919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101921,101923],{"id":101922},"_94-modf函数","9.4 modf函数",[169,101925,101926],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[176,101928,101930],{"className":31833,"code":101929,"language":31835,"meta":181,"style":181},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[183,101931,101932,101955],{"__ignoreMap":181},[186,101933,101934,101936,101938,101940,101942,101944,101946,101948,101950,101953],{"class":188,"line":189},[186,101935,948],{"class":202},[186,101937,529],{"class":669},[186,101939,94433],{"class":202},[186,101941,2142],{"class":669},[186,101943,2056],{"class":206},[186,101945,1988],{"class":202},[186,101947,2056],{"class":206},[186,101949,1988],{"class":202},[186,101951,101952],{"class":206},"0.3",[186,101954,1629],{"class":202},[186,101956,101957],{"class":188,"line":49},[186,101958,101959],{"class":202},"np.modf(a)\n",[169,101961,101962],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101964,101966],{"id":101965},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[169,101968,101969],{},"np.cell()",[169,101971,101972],{},"np.floor()",[169,101974,101975],{},"np.rint()",[169,101977,101978],{},"对各元素分别向上取整、向下取整、四舍五入",[169,101980,101981],{},[164,101982],{"alt":181,"src":101983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101985,101987],{"id":101986},"_96-around函数","9.6 around()函数",[169,101989,101990],{},"around()函数也可以实现对数的小数位数进行操作",[169,101992,101993],{},"其中的参数：",[169,101995,101996],{},"1.要传的数组",[169,101998,101999],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[169,102001,102002],{},[164,102003],{"alt":181,"src":102004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102006,102008],{"id":102007},"_97-三角函数","9.7 三角函数",[169,102010,102011],{},[164,102012],{"alt":181,"src":102013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[169,102015,102016],{},"引入图像模块非常重要",[176,102018,102020],{"className":31833,"code":102019,"language":31835,"meta":181,"style":181},"from matplotlib import pyplot as plt\n",[183,102021,102022],{"__ignoreMap":181},[186,102023,102024,102026,102029,102031,102034,102036],{"class":188,"line":189},[186,102025,32192],{"class":669},[186,102027,102028],{"class":202}," matplotlib ",[186,102030,31847],{"class":669},[186,102032,102033],{"class":202}," pyplot ",[186,102035,32838],{"class":669},[186,102037,32892],{"class":202},[1524,102039,102040],{},"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":181,"searchDepth":49,"depth":49,"links":102042},[102043,102044,102045,102046,102047,102048,102049],{"id":101591,"depth":49,"text":101592},{"id":101706,"depth":49,"text":101707},{"id":101913,"depth":49,"text":101914},{"id":101922,"depth":49,"text":101923},{"id":101965,"depth":49,"text":101966},{"id":101986,"depth":49,"text":101987},{"id":102007,"depth":49,"text":102008},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101555,"description":1548},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102056,"title":102057,"body":102058,"description":1548,"extension":1549,"meta":102062,"navigation":1551,"path":102063,"seo":102064,"stem":102065,"__hash__":102066},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102059,"toc":102060},[],{"title":181,"searchDepth":49,"depth":49,"links":102061},[],{"category":51874},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102057,"description":1548},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102068,"title":102069,"body":102070,"description":181,"extension":1549,"meta":104078,"navigation":1551,"path":104079,"seo":104080,"stem":104081,"__hash__":104082},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102071,"toc":104054},[102072,102075,102079,102082,102085,102091,102094,102117,102120,102154,102157,102198,102202,102205,102298,102301,102345,102348,102365,102368,102382,102385,102388,102433,102436,102473,102477,102480,102486,102491,102511,102515,102518,102584,102587,102605,102609,102612,102641,102651,102657,102661,102664,102670,102681,102685,102688,102718,102721,103001,103004,103007,103018,103021,103024,103046,103053,103056,103074,103077,103080,103094,103102,103105,103131,103137,103140,103143,103153,103165,103185,103194,103214,103224,103248,103261,103275,103280,103321,103338,103363,103375,103395,103401,103446,103465,103482,103495,103511,103518,103530,103539,103574,103595,103620,103633,103657,103672,103697,103700,103721,103730,103733,103744,103748,103751,103757,103769,103776,103780,103783,103795,103798,103812,103815,103825,103835,103838,103878,103881,103885,103891,103894,103908,103912,103915,103948,103952,103955,103978,103986,103989,103995,104001,104004,104007,104035,104039,104042,104048,104051],[10,102073,102069],{"id":102074},"_1环境安装与第一个-mujoco-程序",[14,102076,102078],{"id":102077},"_1目标说明","1.目标说明",[169,102080,102081],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[169,102083,102084],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[176,102086,102089],{"className":102087,"code":102088,"language":753,"meta":181},[751],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[183,102090,102088],{"__ignoreMap":181},[169,102092,102093],{},"需要掌握:",[34,102095,102096,102099,102102,102107,102112],{},[22,102097,102098],{},"Fedora 44 下 MuJoCo 的系统依赖",[22,102100,102101],{},"Python 虚拟环境创建",[22,102103,102104],{},[183,102105,102106],{},"mujoco.MjModel",[22,102108,102109],{},[183,102110,102111],{},"mujoco.MjData",[22,102113,102114],{},[183,102115,102116],{},"mujoco.mj_step(model, data)",[169,102118,102119],{},"MuJoCo 中最重要的两个对象:",[99,102121,102122,102132],{},[102,102123,102124],{},[105,102125,102126,102129],{},[108,102127,102128],{"align":110},"对象",[108,102130,102131],{"align":110},"含义",[116,102133,102134,102144],{},[105,102135,102136,102141],{},[121,102137,102138],{"align":110},[183,102139,102140],{},"MjModel",[121,102142,102143],{"align":110},"模型结构，来自 XML，基本不随时间变化",[105,102145,102146,102151],{},[121,102147,102148],{"align":110},[183,102149,102150],{},"MjData",[121,102152,102153],{"align":110},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[169,102155,102156],{},"可以先用一个类比理解：",[99,102158,102159,102169],{},[102,102160,102161],{},[105,102162,102163,102166],{},[108,102164,102165],{"align":110},"类比",[108,102167,102168],{"align":110},"MuJoCo 对象",[116,102170,102171,102180,102189],{},[105,102172,102173,102176],{},[121,102174,102175],{"align":110},"游戏地图和角色配置",[121,102177,102178],{"align":110},[183,102179,102140],{},[105,102181,102182,102185],{},[121,102183,102184],{"align":110},"游戏运行到当前帧的状态",[121,102186,102187],{"align":110},[183,102188,102150],{},[105,102190,102191,102194],{},[121,102192,102193],{"align":110},"前进一帧",[121,102195,102196],{"align":110},[183,102197,102116],{},[14,102199,102201],{"id":102200},"_2环境与依赖安装","2.环境与依赖安装",[169,102203,102204],{},"Fedora 44 系统依赖:",[176,102206,102208],{"className":25281,"code":102207,"language":25283,"meta":181,"style":181},"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",[183,102209,102210,102222,102235,102248,102258,102268,102287],{"__ignoreMap":181},[186,102211,102212,102214,102216,102218,102220],{"class":188,"line":189},[186,102213,26035],{"class":198},[186,102215,27772],{"class":532},[186,102217,25293],{"class":532},[186,102219,27857],{"class":206},[186,102221,26137],{"class":206},[186,102223,102224,102227,102230,102233],{"class":188,"line":49},[186,102225,102226],{"class":532},"  python3",[186,102228,102229],{"class":532}," python3-pip",[186,102231,102232],{"class":532}," python3-virtualenv",[186,102234,26137],{"class":206},[186,102236,102237,102240,102243,102246],{"class":188,"line":219},[186,102238,102239],{"class":532},"  mesa-libGL",[186,102241,102242],{"class":532}," mesa-libGLU",[186,102244,102245],{"class":532}," mesa-dri-drivers",[186,102247,26137],{"class":206},[186,102249,102250,102253,102256],{"class":188,"line":225},[186,102251,102252],{"class":532},"  libglvnd-glx",[186,102254,102255],{"class":532}," libglvnd-opengl",[186,102257,26137],{"class":206},[186,102259,102260,102263,102266],{"class":188,"line":242},[186,102261,102262],{"class":532},"  glfw",[186,102264,102265],{"class":532}," glfw-devel",[186,102267,26137],{"class":206},[186,102269,102270,102273,102276,102279,102282,102285],{"class":188,"line":248},[186,102271,102272],{"class":532},"  libX11",[186,102274,102275],{"class":532}," libXcursor",[186,102277,102278],{"class":532}," libXi",[186,102280,102281],{"class":532}," libXinerama",[186,102283,102284],{"class":532}," libXrandr",[186,102286,26137],{"class":206},[186,102288,102289,102292,102295],{"class":188,"line":265},[186,102290,102291],{"class":532},"  gcc",[186,102293,102294],{"class":532}," gcc-c++",[186,102296,102297],{"class":532}," make\n",[169,102299,102300],{},"创建 Python 环境:",[176,102302,102304],{"className":25281,"code":102303,"language":25283,"meta":181,"style":181},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[183,102305,102306,102320,102328],{"__ignoreMap":181},[186,102307,102308,102311,102314,102317],{"class":188,"line":189},[186,102309,102310],{"class":198},"python3",[186,102312,102313],{"class":206}," -m",[186,102315,102316],{"class":532}," venv",[186,102318,102319],{"class":532}," .venv\n",[186,102321,102322,102325],{"class":188,"line":49},[186,102323,102324],{"class":206},"source",[186,102326,102327],{"class":532}," .venv\u002Fbin\u002Factivate\n",[186,102329,102330,102332,102334,102337,102339,102342],{"class":188,"line":219},[186,102331,31835],{"class":198},[186,102333,102313],{"class":206},[186,102335,102336],{"class":532}," pip",[186,102338,25293],{"class":532},[186,102340,102341],{"class":206}," --upgrade",[186,102343,102344],{"class":532}," pip\n",[169,102346,102347],{},"pip 安装:",[176,102349,102351],{"className":25281,"code":102350,"language":25283,"meta":181,"style":181},"pip install \"mujoco>=2.3\" numpy\n",[183,102352,102353],{"__ignoreMap":181},[186,102354,102355,102357,102359,102362],{"class":188,"line":189},[186,102356,25290],{"class":198},[186,102358,25293],{"class":532},[186,102360,102361],{"class":532}," \"mujoco>=2.3\"",[186,102363,102364],{"class":532}," numpy\n",[169,102366,102367],{},"安装完成后，先做最小检查：",[176,102369,102371],{"className":25281,"code":102370,"language":25283,"meta":181,"style":181},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[183,102372,102373],{"__ignoreMap":181},[186,102374,102375,102377,102379],{"class":188,"line":189},[186,102376,31835],{"class":198},[186,102378,31813],{"class":206},[186,102380,102381],{"class":532}," \"import mujoco; print(mujoco.__version__)\"\n",[169,102383,102384],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[169,102386,102387],{},"conda 安装:",[176,102389,102391],{"className":25281,"code":102390,"language":25283,"meta":181,"style":181},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[183,102392,102393,102413,102423],{"__ignoreMap":181},[186,102394,102395,102397,102399,102401,102404,102407,102410],{"class":188,"line":189},[186,102396,31785],{"class":198},[186,102398,30631],{"class":532},[186,102400,26574],{"class":206},[186,102402,102403],{"class":532}," mujoco-study",[186,102405,102406],{"class":532}," python=",[186,102408,102409],{"class":206},"3.10",[186,102411,102412],{"class":206}," -y\n",[186,102414,102415,102417,102420],{"class":188,"line":49},[186,102416,31785],{"class":198},[186,102418,102419],{"class":532}," activate",[186,102421,102422],{"class":532}," mujoco-study\n",[186,102424,102425,102427,102429,102431],{"class":188,"line":219},[186,102426,25290],{"class":198},[186,102428,25293],{"class":532},[186,102430,102361],{"class":532},[186,102432,102364],{"class":532},[169,102434,102435],{},"版本冲突说明:",[34,102437,102438,102444,102454,102463],{},[22,102439,102440,102441,913],{},"不要安装 ",[183,102442,102443],{},"mujoco-py",[22,102445,102446,102447,102449,102450,102453],{},"如果旧项目里同时安装了 ",[183,102448,102443],{}," 和 ",[183,102451,102452],{},"mujoco","，建议新建干净虚拟环境。",[22,102455,102456,102459,102460,913],{},[183,102457,102458],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[183,102461,102462],{},"~\u002F.mujoco\u002Fmujoco210",[22,102464,102465,102466,83971,102469,102472],{},"离屏渲染可能涉及 OpenGL 后端，",[183,102467,102468],{},"MUJOCO_GL=egl",[183,102470,102471],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102474,102476],{"id":102475},"_3核心概念解释","3.核心概念解释",[169,102478,102479],{},"MuJoCo 的基本执行流程:",[176,102481,102484],{"className":102482,"code":102483,"language":753,"meta":181},[751],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[183,102485,102483],{"__ignoreMap":181},[169,102487,102488,102490],{},[183,102489,102140],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[169,102492,102493,102495,102496,1824,102499,1824,102502,1824,102505,1824,102508,913],{},[183,102494,102150],{}," 存放仿真运行时状态，例如 ",[183,102497,102498],{},"data.time",[183,102500,102501],{},"data.qpos",[183,102503,102504],{},"data.qvel",[183,102506,102507],{},"data.ctrl",[183,102509,102510],{},"data.xpos",[29,102512,102514],{"id":102513},"xml-是什么","XML 是什么",[169,102516,102517],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[176,102519,102521],{"className":54514,"code":102520,"language":54516,"meta":181,"style":181},"\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",[183,102522,102523,102545,102576],{"__ignoreMap":181},[186,102524,102525,102527,102529,102531,102533,102535,102538,102540,102543],{"class":188,"line":189},[186,102526,520],{"class":202},[186,102528,53247],{"class":523},[186,102530,16382],{"class":198},[186,102532,529],{"class":202},[186,102534,54937],{"class":532},[186,102536,102537],{"class":198}," pos",[186,102539,529],{"class":202},[186,102541,102542],{"class":532},"\"0 0 1\"",[186,102544,552],{"class":202},[186,102546,102547,102549,102552,102554,102556,102559,102561,102563,102565,102568,102570,102573],{"class":188,"line":49},[186,102548,53591],{"class":202},[186,102550,102551],{"class":523},"geom",[186,102553,16382],{"class":198},[186,102555,529],{"class":202},[186,102557,102558],{"class":532},"\"box_geom\"",[186,102560,55269],{"class":198},[186,102562,529],{"class":202},[186,102564,54937],{"class":532},[186,102566,102567],{"class":198}," size",[186,102569,529],{"class":202},[186,102571,102572],{"class":532},"\"0.1 0.1 0.1\"",[186,102574,102575],{"class":202},"\u002F>\n",[186,102577,102578,102580,102582],{"class":188,"line":219},[186,102579,1470],{"class":202},[186,102581,53247],{"class":523},[186,102583,552],{"class":202},[169,102585,102586],{},"这段意思是：",[34,102588,102589,102595,102602],{},[22,102590,102591,102592,102594],{},"创建一个叫 ",[183,102593,55160],{}," 的刚体。",[22,102596,102597,102598,102601],{},"它初始放在 ",[183,102599,102600],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[22,102603,102604],{},"它里面有一个盒子形状的几何体。",[29,102606,102608],{"id":102607},"timestep-是什么","timestep 是什么",[169,102610,102611],{},"XML 里的：",[176,102613,102615],{"className":54514,"code":102614,"language":54516,"meta":181,"style":181},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[183,102616,102617],{"__ignoreMap":181},[186,102618,102619,102621,102623,102626,102628,102631,102634,102636,102639],{"class":188,"line":189},[186,102620,520],{"class":202},[186,102622,70603],{"class":523},[186,102624,102625],{"class":198}," timestep",[186,102627,529],{"class":202},[186,102629,102630],{"class":532},"\"0.01\"",[186,102632,102633],{"class":198}," gravity",[186,102635,529],{"class":202},[186,102637,102638],{"class":532},"\"0 0 -9.81\"",[186,102640,102575],{"class":202},[169,102642,102643,102644,102647,102648,102650],{},"表示每调用一次 ",[183,102645,102646],{},"mj_step","，仿真时间前进 ",[183,102649,40440],{}," 秒。循环 100 次，大约就是 1 秒：",[176,102652,102655],{"className":102653,"code":102654,"language":753,"meta":181},[751],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[183,102656,102654],{"__ignoreMap":181},[29,102658,102660],{"id":102659},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[169,102662,102663],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[176,102665,102668],{"className":102666,"code":102667,"language":753,"meta":181},[751],"x y z qw qx qy qz\n",[183,102669,102667],{"__ignoreMap":181},[169,102671,102672,102673,102676,102677,102680],{},"表示一个自由刚体的位置和姿态。其中 ",[183,102674,102675],{},"x y z"," 是位置，",[183,102678,102679],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102682,102684],{"id":102683},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[169,102686,102687],{},"新建文件:",[176,102689,102691],{"className":25281,"code":102690,"language":25283,"meta":181,"style":181},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[183,102692,102693,102703,102710],{"__ignoreMap":181},[186,102694,102695,102698,102700],{"class":188,"line":189},[186,102696,102697],{"class":198},"mkdir",[186,102699,30671],{"class":206},[186,102701,102702],{"class":532}," mujoco_tutorial\n",[186,102704,102705,102708],{"class":188,"line":49},[186,102706,102707],{"class":206},"cd",[186,102709,102702],{"class":532},[186,102711,102712,102715],{"class":188,"line":219},[186,102713,102714],{"class":198},"touch",[186,102716,102717],{"class":532}," ch1_first_sim.py\n",[169,102719,102720],{},"写入:",[176,102722,102724],{"className":31833,"code":102723,"language":31835,"meta":181,"style":181},"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",[183,102725,102726,102733,102737,102741,102751,102756,102761,102765,102770,102775,102779,102784,102789,102794,102799,102804,102809,102813,102817,102821,102834,102848,102858,102862,102874,102886,102898,102910,102922,102926,102943,102948,102952,102963,102974,102978,102982,102996],{"__ignoreMap":181},[186,102727,102728,102730],{"class":188,"line":189},[186,102729,31847],{"class":669},[186,102731,102732],{"class":202}," mujoco\n",[186,102734,102735],{"class":188,"line":49},[186,102736,3867],{"emptyLinePlaceholder":1551},[186,102738,102739],{"class":188,"line":219},[186,102740,3867],{"emptyLinePlaceholder":1551},[186,102742,102743,102746,102748],{"class":188,"line":225},[186,102744,102745],{"class":206},"XML",[186,102747,15027],{"class":669},[186,102749,102750],{"class":532}," \"\"\"\n",[186,102752,102753],{"class":188,"line":242},[186,102754,102755],{"class":532},"\u003Cmujoco model=\"first_sim\">\n",[186,102757,102758],{"class":188,"line":248},[186,102759,102760],{"class":532},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[186,102762,102763],{"class":188,"line":265},[186,102764,3867],{"emptyLinePlaceholder":1551},[186,102766,102767],{"class":188,"line":271},[186,102768,102769],{"class":532},"  \u003Cworldbody>\n",[186,102771,102772],{"class":188,"line":288},[186,102773,102774],{"class":532},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[186,102776,102777],{"class":188,"line":294},[186,102778,3867],{"emptyLinePlaceholder":1551},[186,102780,102781],{"class":188,"line":1212},[186,102782,102783],{"class":532},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[186,102785,102786],{"class":188,"line":1223},[186,102787,102788],{"class":532},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[186,102790,102791],{"class":188,"line":1236},[186,102792,102793],{"class":532},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[186,102795,102796],{"class":188,"line":3096},[186,102797,102798],{"class":532},"    \u003C\u002Fbody>\n",[186,102800,102801],{"class":188,"line":3110},[186,102802,102803],{"class":532},"  \u003C\u002Fworldbody>\n",[186,102805,102806],{"class":188,"line":3115},[186,102807,102808],{"class":532},"\u003C\u002Fmujoco>\n",[186,102810,102811],{"class":188,"line":3121},[186,102812,97129],{"class":532},[186,102814,102815],{"class":188,"line":3142},[186,102816,3867],{"emptyLinePlaceholder":1551},[186,102818,102819],{"class":188,"line":3147},[186,102820,3867],{"emptyLinePlaceholder":1551},[186,102822,102823,102825,102827,102830,102832],{"class":188,"line":3161},[186,102824,33402],{"class":669},[186,102826,3440],{"class":198},[186,102828,102829],{"class":202},"() -> ",[186,102831,97117],{"class":206},[186,102833,5205],{"class":202},[186,102835,102836,102839,102841,102844,102846],{"class":188,"line":3166},[186,102837,102838],{"class":202},"    model ",[186,102840,529],{"class":669},[186,102842,102843],{"class":202}," mujoco.MjModel.from_xml_string(",[186,102845,102745],{"class":206},[186,102847,1629],{"class":202},[186,102849,102850,102853,102855],{"class":188,"line":3195},[186,102851,102852],{"class":202},"    data ",[186,102854,529],{"class":669},[186,102856,102857],{"class":202}," mujoco.MjData(model)\n",[186,102859,102860],{"class":188,"line":3200},[186,102861,3867],{"emptyLinePlaceholder":1551},[186,102863,102864,102866,102868,102871],{"class":188,"line":3217},[186,102865,32754],{"class":206},[186,102867,832],{"class":202},[186,102869,102870],{"class":532},"\"nq:\"",[186,102872,102873],{"class":202},", model.nq)\n",[186,102875,102876,102878,102880,102883],{"class":188,"line":3222},[186,102877,32754],{"class":206},[186,102879,832],{"class":202},[186,102881,102882],{"class":532},"\"nv:\"",[186,102884,102885],{"class":202},", model.nv)\n",[186,102887,102888,102890,102892,102895],{"class":188,"line":3227},[186,102889,32754],{"class":206},[186,102891,832],{"class":202},[186,102893,102894],{"class":532},"\"nu:\"",[186,102896,102897],{"class":202},", model.nu)\n",[186,102899,102900,102902,102904,102907],{"class":188,"line":3232},[186,102901,32754],{"class":206},[186,102903,832],{"class":202},[186,102905,102906],{"class":532},"\"initial time:\"",[186,102908,102909],{"class":202},", data.time)\n",[186,102911,102912,102914,102916,102919],{"class":188,"line":3246},[186,102913,32754],{"class":206},[186,102915,832],{"class":202},[186,102917,102918],{"class":532},"\"initial qpos:\"",[186,102920,102921],{"class":202},", data.qpos.copy())\n",[186,102923,102924],{"class":188,"line":3251},[186,102925,3867],{"emptyLinePlaceholder":1551},[186,102927,102928,102930,102933,102935,102937,102939,102941],{"class":188,"line":4044},[186,102929,4667],{"class":669},[186,102931,102932],{"class":202}," _ ",[186,102934,27500],{"class":669},[186,102936,33898],{"class":206},[186,102938,832],{"class":202},[186,102940,1922],{"class":206},[186,102942,32241],{"class":202},[186,102944,102945],{"class":188,"line":4058},[186,102946,102947],{"class":202},"        mujoco.mj_step(model, data)\n",[186,102949,102950],{"class":188,"line":4066},[186,102951,3867],{"emptyLinePlaceholder":1551},[186,102953,102954,102956,102958,102961],{"class":188,"line":4071},[186,102955,32754],{"class":206},[186,102957,832],{"class":202},[186,102959,102960],{"class":532},"\"final time:\"",[186,102962,102909],{"class":202},[186,102964,102965,102967,102969,102972],{"class":188,"line":4077},[186,102966,32754],{"class":206},[186,102968,832],{"class":202},[186,102970,102971],{"class":532},"\"final qpos:\"",[186,102973,102921],{"class":202},[186,102975,102976],{"class":188,"line":4083},[186,102977,3867],{"emptyLinePlaceholder":1551},[186,102979,102980],{"class":188,"line":4088},[186,102981,3867],{"emptyLinePlaceholder":1551},[186,102983,102984,102986,102988,102991,102994],{"class":188,"line":9411},[186,102985,3003],{"class":669},[186,102987,32675],{"class":206},[186,102989,102990],{"class":669}," ==",[186,102992,102993],{"class":532}," \"__main__\"",[186,102995,5205],{"class":202},[186,102997,102998],{"class":188,"line":9435},[186,102999,103000],{"class":202},"    main()\n",[29,103002,103003],{"id":103003},"代码逐段解释",[169,103005,103006],{},"导入库：",[176,103008,103010],{"className":31833,"code":103009,"language":31835,"meta":181,"style":181},"import mujoco\n",[183,103011,103012],{"__ignoreMap":181},[186,103013,103014,103016],{"class":188,"line":189},[186,103015,31847],{"class":669},[186,103017,102732],{"class":202},[169,103019,103020],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[169,103022,103023],{},"定义 XML：",[176,103025,103027],{"className":31833,"code":103026,"language":31835,"meta":181,"style":181},"XML = \"\"\"\n...\n\"\"\"\n",[183,103028,103029,103037,103042],{"__ignoreMap":181},[186,103030,103031,103033,103035],{"class":188,"line":189},[186,103032,102745],{"class":206},[186,103034,15027],{"class":669},[186,103036,102750],{"class":532},[186,103038,103039],{"class":188,"line":49},[186,103040,103041],{"class":532},"...\n",[186,103043,103044],{"class":188,"line":219},[186,103045,97129],{"class":532},[169,103047,103048,103049,103052],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[183,103050,103051],{},"freejoint"," 的方块。",[169,103054,103055],{},"编译模型：",[176,103057,103059],{"className":31833,"code":103058,"language":31835,"meta":181,"style":181},"model = mujoco.MjModel.from_xml_string(XML)\n",[183,103060,103061],{"__ignoreMap":181},[186,103062,103063,103066,103068,103070,103072],{"class":188,"line":189},[186,103064,103065],{"class":202},"model ",[186,103067,529],{"class":669},[186,103069,102843],{"class":202},[186,103071,102745],{"class":206},[186,103073,1629],{"class":202},[169,103075,103076],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[169,103078,103079],{},"创建数据：",[176,103081,103083],{"className":31833,"code":103082,"language":31835,"meta":181,"style":181},"data = mujoco.MjData(model)\n",[183,103084,103085],{"__ignoreMap":181},[186,103086,103087,103090,103092],{"class":188,"line":189},[186,103088,103089],{"class":202},"data ",[186,103091,529],{"class":669},[186,103093,102857],{"class":202},[169,103095,103096,103098,103099,103101],{},[183,103097,34856],{}," 会保存仿真当前状态。刚创建时，时间是 ",[183,103100,1803],{},"，方块还在初始位置。",[169,103103,103104],{},"推进仿真：",[176,103106,103108],{"className":31833,"code":103107,"language":31835,"meta":181,"style":181},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[183,103109,103110,103126],{"__ignoreMap":181},[186,103111,103112,103114,103116,103118,103120,103122,103124],{"class":188,"line":189},[186,103113,4491],{"class":669},[186,103115,102932],{"class":202},[186,103117,27500],{"class":669},[186,103119,33898],{"class":206},[186,103121,832],{"class":202},[186,103123,1922],{"class":206},[186,103125,32241],{"class":202},[186,103127,103128],{"class":188,"line":49},[186,103129,103130],{"class":202},"    mujoco.mj_step(model, data)\n",[169,103132,103133,103134,103136],{},"每次 ",[183,103135,102646],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[29,103138,103139],{"id":103139},"代码逐行细讲",[169,103141,103142],{},"下面把完整代码按新手视角拆开讲。",[176,103144,103145],{"className":31833,"code":103009,"language":31835,"meta":181,"style":181},[183,103146,103147],{"__ignoreMap":181},[186,103148,103149,103151],{"class":188,"line":189},[186,103150,31847],{"class":669},[186,103152,102732],{"class":202},[169,103154,103155,103157,103158,1824,103160,1824,103162,913],{},[183,103156,31847],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[183,103159,102106],{},[183,103161,102111],{},[183,103163,103164],{},"mujoco.mj_step",[176,103166,103167],{"className":31833,"code":103026,"language":31835,"meta":181,"style":181},[183,103168,103169,103177,103181],{"__ignoreMap":181},[186,103170,103171,103173,103175],{"class":188,"line":189},[186,103172,102745],{"class":206},[186,103174,15027],{"class":669},[186,103176,102750],{"class":532},[186,103178,103179],{"class":188,"line":49},[186,103180,103041],{"class":532},[186,103182,103183],{"class":188,"line":219},[186,103184,97129],{"class":532},[169,103186,103187,103189,103190,103193],{},[183,103188,102745],{}," 是一个变量名。右边的三引号 ",[183,103191,103192],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[176,103195,103196],{"className":54514,"code":102755,"language":54516,"meta":181,"style":181},[183,103197,103198],{"__ignoreMap":181},[186,103199,103200,103202,103204,103207,103209,103212],{"class":188,"line":189},[186,103201,520],{"class":202},[186,103203,102452],{"class":523},[186,103205,103206],{"class":198}," model",[186,103208,529],{"class":202},[186,103210,103211],{"class":532},"\"first_sim\"",[186,103213,552],{"class":202},[169,103215,103216,103217,103220,103221,913],{},"这是 XML 的根标签。",[183,103218,103219],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[183,103222,103223],{},"first_sim",[176,103225,103226],{"className":54514,"code":102614,"language":54516,"meta":181,"style":181},[183,103227,103228],{"__ignoreMap":181},[186,103229,103230,103232,103234,103236,103238,103240,103242,103244,103246],{"class":188,"line":189},[186,103231,520],{"class":202},[186,103233,70603],{"class":523},[186,103235,102625],{"class":198},[186,103237,529],{"class":202},[186,103239,102630],{"class":532},[186,103241,102633],{"class":198},[186,103243,529],{"class":202},[186,103245,102638],{"class":532},[186,103247,102575],{"class":202},[169,103249,103250,103252,103253,103256,103257,103260],{},[183,103251,70603],{}," 用来设置仿真参数。",[183,103254,103255],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[183,103258,103259],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[176,103262,103264],{"className":54514,"code":103263,"language":54516,"meta":181,"style":181},"\u003Cworldbody>\n",[183,103265,103266],{"__ignoreMap":181},[186,103267,103268,103270,103273],{"class":188,"line":189},[186,103269,520],{"class":202},[186,103271,103272],{"class":523},"worldbody",[186,103274,552],{"class":202},[169,103276,103277,103279],{},[183,103278,103272],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[176,103281,103283],{"className":54514,"code":103282,"language":54516,"meta":181,"style":181},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[183,103284,103285],{"__ignoreMap":181},[186,103286,103287,103289,103291,103293,103295,103298,103300,103302,103305,103307,103309,103312,103314,103316,103319],{"class":188,"line":189},[186,103288,520],{"class":202},[186,103290,102551],{"class":523},[186,103292,16382],{"class":198},[186,103294,529],{"class":202},[186,103296,103297],{"class":532},"\"floor\"",[186,103299,55269],{"class":198},[186,103301,529],{"class":202},[186,103303,103304],{"class":532},"\"plane\"",[186,103306,102567],{"class":198},[186,103308,529],{"class":202},[186,103310,103311],{"class":532},"\"2 2 0.1\"",[186,103313,80200],{"class":198},[186,103315,529],{"class":202},[186,103317,103318],{"class":532},"\"0.8 0.8 0.8 1\"",[186,103320,102575],{"class":202},[169,103322,103323,103324,103326,103327,103330,103331,103334,103335,103337],{},"这行创建地面。",[183,103325,102551],{}," 是几何体。",[183,103328,103329],{},"name=\"floor\""," 是名字。",[183,103332,103333],{},"type=\"plane\""," 表示平面。",[183,103336,56553],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[176,103339,103341],{"className":54514,"code":103340,"language":54516,"meta":181,"style":181},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[183,103342,103343],{"__ignoreMap":181},[186,103344,103345,103347,103349,103351,103353,103355,103357,103359,103361],{"class":188,"line":189},[186,103346,520],{"class":202},[186,103348,53247],{"class":523},[186,103350,16382],{"class":198},[186,103352,529],{"class":202},[186,103354,54937],{"class":532},[186,103356,102537],{"class":198},[186,103358,529],{"class":202},[186,103360,102542],{"class":532},[186,103362,552],{"class":202},[169,103364,103365,103366,913,103368,103371,103372,103374],{},"这行创建一个刚体，名字叫 ",[183,103367,55160],{},[183,103369,103370],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[183,103373,102600],{},"，也就是离地面 1 米高。",[176,103376,103378],{"className":54514,"code":103377,"language":54516,"meta":181,"style":181},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[183,103379,103380],{"__ignoreMap":181},[186,103381,103382,103384,103386,103388,103390,103393],{"class":188,"line":189},[186,103383,520],{"class":202},[186,103385,103051],{"class":523},[186,103387,16382],{"class":198},[186,103389,529],{"class":202},[186,103391,103392],{"class":532},"\"box_free\"",[186,103394,102575],{"class":202},[169,103396,103397,103398,103400],{},"这行很重要。",[183,103399,103051],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[176,103402,103404],{"className":54514,"code":103403,"language":54516,"meta":181,"style":181},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[183,103405,103406],{"__ignoreMap":181},[186,103407,103408,103410,103412,103414,103416,103418,103420,103422,103424,103426,103428,103430,103433,103435,103437,103439,103441,103444],{"class":188,"line":189},[186,103409,520],{"class":202},[186,103411,102551],{"class":523},[186,103413,16382],{"class":198},[186,103415,529],{"class":202},[186,103417,102558],{"class":532},[186,103419,55269],{"class":198},[186,103421,529],{"class":202},[186,103423,54937],{"class":532},[186,103425,102567],{"class":198},[186,103427,529],{"class":202},[186,103429,102572],{"class":532},[186,103431,103432],{"class":198}," mass",[186,103434,529],{"class":202},[186,103436,5144],{"class":532},[186,103438,80200],{"class":198},[186,103440,529],{"class":202},[186,103442,103443],{"class":532},"\"1 0 0 1\"",[186,103445,102575],{"class":202},[169,103447,103448,103449,103452,103453,103456,103457,103460,103461,103464],{},"这行给 box body 添加一个盒子形状。",[183,103450,103451],{},"type=\"box\""," 表示形状是盒子。",[183,103454,103455],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[183,103458,103459],{},"mass=\"1\""," 表示质量是 1。",[183,103462,103463],{},"rgba=\"1 0 0 1\""," 表示红色。",[176,103466,103468],{"className":31833,"code":103467,"language":31835,"meta":181,"style":181},"def main() -> None:\n",[183,103469,103470],{"__ignoreMap":181},[186,103471,103472,103474,103476,103478,103480],{"class":188,"line":189},[186,103473,33402],{"class":669},[186,103475,3440],{"class":198},[186,103477,102829],{"class":202},[186,103479,97117],{"class":206},[186,103481,5205],{"class":202},[169,103483,103484,103486,103487,103490,103491,103494],{},[183,103485,33402],{}," 用来定义函数。这里定义了一个叫 ",[183,103488,103489],{},"main"," 的函数。",[183,103492,103493],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[176,103496,103497],{"className":31833,"code":103058,"language":31835,"meta":181,"style":181},[183,103498,103499],{"__ignoreMap":181},[186,103500,103501,103503,103505,103507,103509],{"class":188,"line":189},[186,103502,103065],{"class":202},[186,103504,529],{"class":669},[186,103506,102843],{"class":202},[186,103508,102745],{"class":206},[186,103510,1629],{"class":202},[169,103512,103513,103514,103517],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[183,103515,103516],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[176,103519,103520],{"className":31833,"code":103082,"language":31835,"meta":181,"style":181},[183,103521,103522],{"__ignoreMap":181},[186,103523,103524,103526,103528],{"class":188,"line":189},[186,103525,103089],{"class":202},[186,103527,529],{"class":669},[186,103529,102857],{"class":202},[169,103531,103532,103533,103535,103536,103538],{},"这行创建仿真数据。",[183,103534,34856],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[183,103537,34856],{}," 都会变化。",[176,103540,103542],{"className":31833,"code":103541,"language":31835,"meta":181,"style":181},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[183,103543,103544,103554,103564],{"__ignoreMap":181},[186,103545,103546,103548,103550,103552],{"class":188,"line":189},[186,103547,31870],{"class":206},[186,103549,832],{"class":202},[186,103551,102870],{"class":532},[186,103553,102873],{"class":202},[186,103555,103556,103558,103560,103562],{"class":188,"line":49},[186,103557,31870],{"class":206},[186,103559,832],{"class":202},[186,103561,102882],{"class":532},[186,103563,102885],{"class":202},[186,103565,103566,103568,103570,103572],{"class":188,"line":219},[186,103567,31870],{"class":206},[186,103569,832],{"class":202},[186,103571,102894],{"class":532},[186,103573,102897],{"class":202},[169,103575,103576,103578,103579,103582,103583,103586,103587,103590,103591,103594],{},[183,103577,31870],{}," 用来输出信息。",[183,103580,103581],{},"model.nq"," 是位置变量数量，",[183,103584,103585],{},"model.nv"," 是速度变量数量，",[183,103588,103589],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[183,103592,103593],{},"nu"," 是 0。",[176,103596,103598],{"className":31833,"code":103597,"language":31835,"meta":181,"style":181},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[183,103599,103600,103610],{"__ignoreMap":181},[186,103601,103602,103604,103606,103608],{"class":188,"line":189},[186,103603,31870],{"class":206},[186,103605,832],{"class":202},[186,103607,102906],{"class":532},[186,103609,102909],{"class":202},[186,103611,103612,103614,103616,103618],{"class":188,"line":49},[186,103613,31870],{"class":206},[186,103615,832],{"class":202},[186,103617,102918],{"class":532},[186,103619,102921],{"class":202},[169,103621,103622,103623,103625,103626,103628,103629,103632],{},"这里打印初始时间和初始位置。",[183,103624,102498],{}," 一开始是 0。",[183,103627,102501],{}," 是位置数组。",[183,103630,103631],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[176,103634,103635],{"className":31833,"code":103107,"language":31835,"meta":181,"style":181},[183,103636,103637,103653],{"__ignoreMap":181},[186,103638,103639,103641,103643,103645,103647,103649,103651],{"class":188,"line":189},[186,103640,4491],{"class":669},[186,103642,102932],{"class":202},[186,103644,27500],{"class":669},[186,103646,33898],{"class":206},[186,103648,832],{"class":202},[186,103650,1922],{"class":206},[186,103652,32241],{"class":202},[186,103654,103655],{"class":188,"line":49},[186,103656,103130],{"class":202},[169,103658,103659,103661,103662,103665,103666,103668,103669,103671],{},[183,103660,4491],{}," 是循环。",[183,103663,103664],{},"range(100)"," 表示循环 100 次。",[183,103667,2599],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[183,103670,102646],{},"，仿真就前进一步。",[176,103673,103675],{"className":31833,"code":103674,"language":31835,"meta":181,"style":181},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[183,103676,103677,103687],{"__ignoreMap":181},[186,103678,103679,103681,103683,103685],{"class":188,"line":189},[186,103680,31870],{"class":206},[186,103682,832],{"class":202},[186,103684,102960],{"class":532},[186,103686,102909],{"class":202},[186,103688,103689,103691,103693,103695],{"class":188,"line":49},[186,103690,31870],{"class":206},[186,103692,832],{"class":202},[186,103694,102971],{"class":532},[186,103696,102921],{"class":202},[169,103698,103699],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[176,103701,103703],{"className":31833,"code":103702,"language":31835,"meta":181,"style":181},"if __name__ == \"__main__\":\n    main()\n",[183,103704,103705,103717],{"__ignoreMap":181},[186,103706,103707,103709,103711,103713,103715],{"class":188,"line":189},[186,103708,3003],{"class":669},[186,103710,32675],{"class":206},[186,103712,102990],{"class":669},[186,103714,102993],{"class":532},[186,103716,5205],{"class":202},[186,103718,103719],{"class":188,"line":49},[186,103720,103000],{"class":202},[169,103722,103723,103724,103727,103728,913],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[183,103725,103726],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[183,103729,103726],{},[169,103731,103732],{},"运行:",[176,103734,103736],{"className":25281,"code":103735,"language":25283,"meta":181,"style":181},"python ch1_first_sim.py\n",[183,103737,103738],{"__ignoreMap":181},[186,103739,103740,103742],{"class":188,"line":189},[186,103741,31835],{"class":198},[186,103743,102717],{"class":532},[14,103745,103747],{"id":103746},"_5运行结果说明","5.运行结果说明",[169,103749,103750],{},"你应该看到类似输出:",[176,103752,103755],{"className":103753,"code":103754,"language":753,"meta":181},[751],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[183,103756,103754],{"__ignoreMap":181},[169,103758,103759,103761,103762,103765,103766,913],{},[183,103760,103051],{}," 有 7 个位置变量: ",[183,103763,103764],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[183,103767,103768],{},"vx vy vz wx wy wz",[169,103770,103771,103772,103775],{},"你还会看到 ",[183,103773,103774],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103777,103779],{"id":103778},"_6验证步骤","6.验证步骤",[169,103781,103782],{},"确认版本:",[176,103784,103785],{"className":25281,"code":102370,"language":25283,"meta":181,"style":181},[183,103786,103787],{"__ignoreMap":181},[186,103788,103789,103791,103793],{"class":188,"line":189},[186,103790,31835],{"class":198},[186,103792,31813],{"class":206},[186,103794,102381],{"class":532},[169,103796,103797],{},"确认导入的是官方 bindings:",[176,103799,103801],{"className":25281,"code":103800,"language":25283,"meta":181,"style":181},"python -c \"import mujoco; print(mujoco)\"\n",[183,103802,103803],{"__ignoreMap":181},[186,103804,103805,103807,103809],{"class":188,"line":189},[186,103806,31835],{"class":198},[186,103808,31813],{"class":206},[186,103810,103811],{"class":532}," \"import mujoco; print(mujoco)\"\n",[169,103813,103814],{},"运行程序:",[176,103816,103817],{"className":25281,"code":103735,"language":25283,"meta":181,"style":181},[183,103818,103819],{"__ignoreMap":181},[186,103820,103821,103823],{"class":188,"line":189},[186,103822,31835],{"class":198},[186,103824,102717],{"class":532},[169,103826,103827,103828,103831,103832,913],{},"检查 ",[183,103829,103830],{},"final time"," 是否约等于 ",[183,103833,103834],{},"1.0",[169,103836,103837],{},"再做几个小实验：",[34,103839,103840,103850,103858,103871],{},[22,103841,103842,103843,103845,103846,103849],{},"把 ",[183,103844,103370],{}," 改成 ",[183,103847,103848],{},"pos=\"0 0 2\"","，观察初始高度变化。",[22,103851,103842,103852,103845,103854,103857],{},[183,103853,103259],{},[183,103855,103856],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[22,103859,103842,103860,103845,103862,103865,103866,103868,103869,913],{},[183,103861,103255],{},[183,103863,103864],{},"timestep=\"0.005\"","，观察 100 步后的 ",[183,103867,103830],{}," 是否变成约 ",[183,103870,36784],{},[22,103872,103873,103874,103877],{},"删除 ",[183,103875,103876],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[169,103879,103880],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103882,103884],{"id":103883},"_7常见错误与解决方案","7.常见错误与解决方案",[29,103886,103888],{"id":103887},"modulenotfounderror-no-module-named-mujoco",[183,103889,103890],{},"ModuleNotFoundError: No module named 'mujoco'",[169,103892,103893],{},"解决:",[176,103895,103897],{"className":25281,"code":103896,"language":25283,"meta":181,"style":181},"pip install \"mujoco>=2.3\"\n",[183,103898,103899],{"__ignoreMap":181},[186,103900,103901,103903,103905],{"class":188,"line":189},[186,103902,25290],{"class":198},[186,103904,25293],{"class":532},[186,103906,103907],{"class":532}," \"mujoco>=2.3\"\n",[29,103909,103911],{"id":103910},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[169,103913,103914],{},"先安装系统依赖:",[176,103916,103918],{"className":25281,"code":103917,"language":25283,"meta":181,"style":181},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[183,103919,103920],{"__ignoreMap":181},[186,103921,103922,103924,103926,103928,103930,103933,103935,103938,103940,103943,103945],{"class":188,"line":189},[186,103923,26035],{"class":198},[186,103925,27772],{"class":532},[186,103927,25293],{"class":532},[186,103929,27857],{"class":206},[186,103931,103932],{"class":532}," mesa-libGL",[186,103934,102245],{"class":532},[186,103936,103937],{"class":532}," glfw",[186,103939,102265],{"class":532},[186,103941,103942],{"class":532}," libX11",[186,103944,102278],{"class":532},[186,103946,103947],{"class":532}," libXrandr\n",[29,103949,103951],{"id":103950},"xml-解析失败","XML 解析失败",[169,103953,103954],{},"检查:",[34,103956,103957,103960,103963,103969],{},[22,103958,103959],{},"标签是否闭合",[22,103961,103962],{},"属性是否带引号",[22,103964,103965,103966],{},"根节点是否是 ",[183,103967,103968],{},"\u003Cmujoco>",[22,103970,103971,103973,103974,103977],{},[183,103972,53247],{}," 是否放在 ",[183,103975,103976],{},"\u003Cworldbody>"," 内部",[29,103979,103981,103983,103984],{"id":103980},"final-time-不是严格等于-10",[183,103982,103830],{}," 不是严格等于 ",[183,103985,103834],{},[169,103987,103988],{},"这通常不是错误。浮点数计算可能得到：",[176,103990,103993],{"className":103991,"code":103992,"language":753,"meta":181},[751],"1.0000000000000007\n",[183,103994,103992],{"__ignoreMap":181},[169,103996,103997,103998,104000],{},"只要接近 ",[183,103999,103834],{}," 就正常。",[29,104002,104003],{"id":104003},"方块没有掉下来",[169,104005,104006],{},"检查：",[34,104008,104009,104015,104021,104026],{},[22,104010,104011,104012],{},"方块 body 里是否有 ",[183,104013,104014],{},"\u003Cfreejoint\u002F>",[22,104016,104017,104018],{},"重力是否是 ",[183,104019,104020],{},"0 0 -9.81",[22,104022,104023,104024],{},"是否真的调用了 ",[183,104025,102116],{},[22,104027,104028,104029,104031,104032],{},"你看的是否是 ",[183,104030,103774],{},"，不是 ",[183,104033,104034],{},"initial qpos",[14,104036,104038],{"id":104037},"_8本章小结","8.本章小结",[169,104040,104041],{},"本章你已经完成了 MuJoCo 的最小闭环：",[176,104043,104046],{"className":104044,"code":104045,"language":753,"meta":181},[751],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[183,104047,104045],{"__ignoreMap":181},[169,104049,104050],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1524,104052,104053],{},"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":181,"searchDepth":49,"depth":49,"links":104055},[104056,104057,104058,104063,104067,104068,104069,104077],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":104059},[104060,104061,104062],{"id":102513,"depth":219,"text":102514},{"id":102607,"depth":219,"text":102608},{"id":102659,"depth":219,"text":102660},{"id":102683,"depth":49,"text":102684,"children":104064},[104065,104066],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":104070},[104071,104072,104073,104074,104076],{"id":103887,"depth":219,"text":103890},{"id":103910,"depth":219,"text":103911},{"id":103950,"depth":219,"text":103951},{"id":103980,"depth":219,"text":104075},"final time 不是严格等于 1.0",{"id":104003,"depth":219,"text":104003},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102069,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104084,"title":104085,"body":104086,"description":181,"extension":1549,"meta":105742,"navigation":1551,"path":105743,"seo":105744,"stem":105745,"__hash__":105746},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104087,"toc":105718},[104088,104091,104093,104096,104099,104116,104211,104214,104220,104222,104224,104248,104251,104265,104268,104309,104311,104324,104326,104329,104377,104389,104392,104395,104401,104414,104481,104484,104503,104506,104509,104515,104517,104526,104529,104533,104542,104624,104633,104637,104643,104657,104667,104669,104999,105002,105014,105016,105027,105029,105032,105050,105053,105056,105074,105085,105088,105103,105113,105115,105136,105153,105173,105179,105219,105235,105251,105257,105260,105284,105300,105305,105335,105352,105377,105380,105395,105404,105419,105428,105443,105450,105452,105462,105475,105482,105485,105524,105531,105533,105585,105587,105593,105596,105603,105610,105613,105615,105633,105636,105639,105673,105685,105687,105690,105712,105715],[10,104089,104085],{"id":104090},"_2xml-与-mjcf-物理建模基础",[14,104092,102078],{"id":102077},[169,104094,104095],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[169,104097,104098],{},"本章结束后，你应该能看懂一个简单模型里：",[34,104100,104101,104104,104107,104110,104113],{},[22,104102,104103],{},"地面在哪里。",[22,104105,104106],{},"物体初始位置在哪里。",[22,104108,104109],{},"几何体是什么形状。",[22,104111,104112],{},"哪些 body 可以自由运动。",[22,104114,104115],{},"如何用名字在 Python 里找到 XML 中的对象。",[99,104117,104118,104128],{},[102,104119,104120],{},[105,104121,104122,104125],{},[108,104123,104124],{"align":110},"标签",[108,104126,104127],{"align":110},"作用",[116,104129,104130,104139,104149,104158,104168,104178,104191,104201],{},[105,104131,104132,104136],{},[121,104133,104134],{"align":110},[183,104135,103968],{},[121,104137,104138],{"align":110},"根节点",[105,104140,104141,104146],{},[121,104142,104143],{"align":110},[183,104144,104145],{},"\u003Coption>",[121,104147,104148],{"align":110},"仿真参数",[105,104150,104151,104155],{},[121,104152,104153],{"align":110},[183,104154,103976],{},[121,104156,104157],{"align":110},"世界中的物体",[105,104159,104160,104165],{},[121,104161,104162],{"align":110},[183,104163,104164],{},"\u003Cbody>",[121,104166,104167],{"align":110},"刚体",[105,104169,104170,104175],{},[121,104171,104172],{"align":110},[183,104173,104174],{},"\u003Cgeom>",[121,104176,104177],{"align":110},"几何体、碰撞体、可视体",[105,104179,104180,104188],{},[121,104181,104182,26437,104185],{"align":110},[183,104183,104184],{},"\u003Cjoint>",[183,104186,104187],{},"\u003Cfreejoint>",[121,104189,104190],{"align":110},"关节",[105,104192,104193,104198],{},[121,104194,104195],{"align":110},[183,104196,104197],{},"\u003Csite>",[121,104199,104200],{"align":110},"标记点",[105,104202,104203,104208],{},[121,104204,104205],{"align":110},[183,104206,104207],{},"\u003Cactuator>",[121,104209,104210],{"align":110},"控制器",[169,104212,104213],{},"初学时可以先记住：",[176,104215,104218],{"className":104216,"code":104217,"language":753,"meta":181},[751],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[183,104219,104217],{"__ignoreMap":181},[14,104221,102201],{"id":102200},[169,104223,102204],{},[176,104225,104227],{"className":25281,"code":104226,"language":25283,"meta":181,"style":181},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[183,104228,104229],{"__ignoreMap":181},[186,104230,104231,104233,104235,104237,104239,104241,104243,104245],{"class":188,"line":189},[186,104232,26035],{"class":198},[186,104234,27772],{"class":532},[186,104236,25293],{"class":532},[186,104238,27857],{"class":206},[186,104240,103932],{"class":532},[186,104242,102245],{"class":532},[186,104244,103937],{"class":532},[186,104246,104247],{"class":532}," glfw-devel\n",[169,104249,104250],{},"pip:",[176,104252,104253],{"className":25281,"code":102350,"language":25283,"meta":181,"style":181},[183,104254,104255],{"__ignoreMap":181},[186,104256,104257,104259,104261,104263],{"class":188,"line":189},[186,104258,25290],{"class":198},[186,104260,25293],{"class":532},[186,104262,102361],{"class":532},[186,104264,102364],{"class":532},[169,104266,104267],{},"conda:",[176,104269,104271],{"className":25281,"code":104270,"language":25283,"meta":181,"style":181},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[183,104272,104273,104290,104299],{"__ignoreMap":181},[186,104274,104275,104277,104279,104281,104284,104286,104288],{"class":188,"line":189},[186,104276,31785],{"class":198},[186,104278,30631],{"class":532},[186,104280,26574],{"class":206},[186,104282,104283],{"class":532}," mujoco-xml",[186,104285,102406],{"class":532},[186,104287,102409],{"class":206},[186,104289,102412],{"class":206},[186,104291,104292,104294,104296],{"class":188,"line":49},[186,104293,31785],{"class":198},[186,104295,102419],{"class":532},[186,104297,104298],{"class":532}," mujoco-xml\n",[186,104300,104301,104303,104305,104307],{"class":188,"line":219},[186,104302,25290],{"class":198},[186,104304,25293],{"class":532},[186,104306,102361],{"class":532},[186,104308,102364],{"class":532},[169,104310,102435],{},[34,104312,104313,104316,104321],{},[22,104314,104315],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[22,104317,104318,104319,913],{},"本章使用基础标签，适用于 ",[183,104320,102458],{},[22,104322,104323],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104325,102476],{"id":102475},[169,104327,104328],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[176,104330,104332],{"className":54514,"code":104331,"language":54516,"meta":181,"style":181},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[183,104333,104334,104348,104356,104361,104369],{"__ignoreMap":181},[186,104335,104336,104338,104340,104342,104344,104346],{"class":188,"line":189},[186,104337,520],{"class":202},[186,104339,102452],{"class":523},[186,104341,103206],{"class":198},[186,104343,529],{"class":202},[186,104345,64117],{"class":532},[186,104347,552],{"class":202},[186,104349,104350,104352,104354],{"class":188,"line":49},[186,104351,53591],{"class":202},[186,104353,103272],{"class":523},[186,104355,552],{"class":202},[186,104357,104358],{"class":188,"line":219},[186,104359,104360],{"class":202},"    ...\n",[186,104362,104363,104365,104367],{"class":188,"line":225},[186,104364,53864],{"class":202},[186,104366,103272],{"class":523},[186,104368,552],{"class":202},[186,104370,104371,104373,104375],{"class":188,"line":242},[186,104372,1470],{"class":202},[186,104374,102452],{"class":523},[186,104376,552],{"class":202},[169,104378,104379,104381,104382,104384,104385,104388],{},[183,104380,53247],{}," 表示刚体。",[183,104383,102551],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[183,104386,104387],{},"joint"," 表示刚体相对父刚体如何运动。",[29,104390,104391],{"id":104391},"层级结构非常重要",[169,104393,104394],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[176,104396,104399],{"className":104397,"code":104398,"language":753,"meta":181},[751],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[183,104400,104398],{"__ignoreMap":181},[169,104402,104403,102449,104406,104409,104410,104413],{},[183,104404,104405],{},"red_box_geom",[183,104407,104408],{},"box_center"," 都属于 ",[183,104411,104412],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[176,104415,104417],{"className":54514,"code":104416,"language":54516,"meta":181,"style":181},"\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",[183,104418,104419,104439,104453,104473],{"__ignoreMap":181},[186,104420,104421,104423,104425,104427,104429,104431,104433,104435,104437],{"class":188,"line":189},[186,104422,520],{"class":202},[186,104424,53247],{"class":523},[186,104426,16382],{"class":198},[186,104428,529],{"class":202},[186,104430,54937],{"class":532},[186,104432,102537],{"class":198},[186,104434,529],{"class":202},[186,104436,102542],{"class":532},[186,104438,552],{"class":202},[186,104440,104441,104443,104445,104447,104449,104451],{"class":188,"line":49},[186,104442,53591],{"class":202},[186,104444,103051],{"class":523},[186,104446,16382],{"class":198},[186,104448,529],{"class":202},[186,104450,103392],{"class":532},[186,104452,102575],{"class":202},[186,104454,104455,104457,104459,104461,104463,104465,104467,104469,104471],{"class":188,"line":219},[186,104456,53591],{"class":202},[186,104458,102551],{"class":523},[186,104460,55269],{"class":198},[186,104462,529],{"class":202},[186,104464,54937],{"class":532},[186,104466,102567],{"class":198},[186,104468,529],{"class":202},[186,104470,102572],{"class":532},[186,104472,102575],{"class":202},[186,104474,104475,104477,104479],{"class":188,"line":225},[186,104476,1470],{"class":202},[186,104478,53247],{"class":523},[186,104480,552],{"class":202},[169,104482,104483],{},"含义:",[34,104485,104486,104492,104497,104500],{},[22,104487,104488,104489,104491],{},"创建名为 ",[183,104490,55160],{}," 的刚体",[22,104493,104494,104495],{},"初始位置在世界坐标 ",[183,104496,102600],{},[22,104498,104499],{},"它有一个自由关节",[22,104501,104502],{},"它有一个盒子几何体",[29,104504,104505],{"id":104505},"坐标怎么理解",[169,104507,104508],{},"MuJoCo 默认使用三维坐标：",[176,104510,104513],{"className":104511,"code":104512,"language":753,"meta":181},[751],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[183,104514,104512],{"__ignoreMap":181},[169,104516,16095],{},[176,104518,104520],{"className":54514,"code":104519,"language":54516,"meta":181,"style":181},"pos=\"0 0 1\"\n",[183,104521,104522],{"__ignoreMap":181},[186,104523,104524],{"class":188,"line":189},[186,104525,104519],{"class":202},[169,104527,104528],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[29,104530,104532],{"id":104531},"geom-的-size-怎么理解","geom 的 size 怎么理解",[169,104534,104535,104536,83962,104539,104541],{},"不同 ",[183,104537,104538],{},"type",[183,104540,32951],{}," 含义不同：",[99,104543,104544,104559],{},[102,104545,104546],{},[105,104547,104548,104552,104557],{},[108,104549,104550],{"align":110},[183,104551,104538],{},[108,104553,104554,104556],{"align":110},[183,104555,32951],{}," 示例",[108,104558,102131],{"align":110},[116,104560,104561,104575,104590,104609],{},[105,104562,104563,104567,104572],{},[121,104564,104565],{"align":110},[183,104566,55160],{},[121,104568,104569],{"align":110},[183,104570,104571],{},"size=\"0.1 0.2 0.3\"",[121,104573,104574],{"align":110},"x\u002Fy\u002Fz 半边长，不是完整长度",[105,104576,104577,104582,104587],{},[121,104578,104579],{"align":110},[183,104580,104581],{},"sphere",[121,104583,104584],{"align":110},[183,104585,104586],{},"size=\"0.1\"",[121,104588,104589],{"align":110},"球半径",[105,104591,104592,104597,104602],{},[121,104593,104594],{"align":110},[183,104595,104596],{},"capsule",[121,104598,104599],{"align":110},[183,104600,104601],{},"size=\"0.03\"",[121,104603,104604,104605,104608],{"align":110},"胶囊半径，长度常用 ",[183,104606,104607],{},"fromto"," 指定",[105,104610,104611,104616,104621],{},[121,104612,104613],{"align":110},[183,104614,104615],{},"plane",[121,104617,104618],{"align":110},[183,104619,104620],{},"size=\"3 3 0.1\"",[121,104622,104623],{"align":110},"可视平面大小，通常当地面",[169,104625,104626,104627,104629,104630,104632],{},"最容易踩坑的是 box：",[183,104628,103455],{}," 表示边长大约是 ",[183,104631,33492],{},"，因为 MuJoCo 用的是半边长。",[29,104634,104636],{"id":104635},"site-是什么","site 是什么",[169,104638,104639,104642],{},[183,104640,104641],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[34,104644,104645,104648,104651,104654],{},[22,104646,104647],{},"标记机械臂末端。",[22,104649,104650],{},"标记目标位置。",[22,104652,104653],{},"放传感器或相机参考点。",[22,104655,104656],{},"在 Python 中读取某个关键点的世界坐标。",[169,104658,104659,104660,102449,104663,104666],{},"在后面的 Reacher 任务中，",[183,104661,104662],{},"tip",[183,104664,104665],{},"target"," 就会用 site 表示。",[14,104668,102684],{"id":102683},[176,104670,104672],{"className":31833,"code":104671,"language":31835,"meta":181,"style":181},"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",[183,104673,104674,104680,104690,104694,104698,104706,104711,104715,104719,104723,104728,104732,104737,104742,104747,104752,104756,104760,104764,104768,104772,104776,104788,104800,104808,104812,104827,104842,104846,104859,104874,104887,104900,104904,104920,104924,104928,104939,104951,104963,104975,104979,104983,104995],{"__ignoreMap":181},[186,104675,104676,104678],{"class":188,"line":189},[186,104677,31847],{"class":669},[186,104679,102732],{"class":202},[186,104681,104682,104684,104686,104688],{"class":188,"line":49},[186,104683,31847],{"class":669},[186,104685,32835],{"class":202},[186,104687,32838],{"class":669},[186,104689,32841],{"class":202},[186,104691,104692],{"class":188,"line":219},[186,104693,3867],{"emptyLinePlaceholder":1551},[186,104695,104696],{"class":188,"line":225},[186,104697,3867],{"emptyLinePlaceholder":1551},[186,104699,104700,104702,104704],{"class":188,"line":242},[186,104701,102745],{"class":206},[186,104703,15027],{"class":669},[186,104705,102750],{"class":532},[186,104707,104708],{"class":188,"line":248},[186,104709,104710],{"class":532},"\u003Cmujoco model=\"xml_basic\">\n",[186,104712,104713],{"class":188,"line":265},[186,104714,102760],{"class":532},[186,104716,104717],{"class":188,"line":271},[186,104718,3867],{"emptyLinePlaceholder":1551},[186,104720,104721],{"class":188,"line":288},[186,104722,102769],{"class":532},[186,104724,104725],{"class":188,"line":294},[186,104726,104727],{"class":532},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[186,104729,104730],{"class":188,"line":1212},[186,104731,3867],{"emptyLinePlaceholder":1551},[186,104733,104734],{"class":188,"line":1223},[186,104735,104736],{"class":532},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[186,104738,104739],{"class":188,"line":1236},[186,104740,104741],{"class":532},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[186,104743,104744],{"class":188,"line":3096},[186,104745,104746],{"class":532},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[186,104748,104749],{"class":188,"line":3110},[186,104750,104751],{"class":532},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[186,104753,104754],{"class":188,"line":3115},[186,104755,102798],{"class":532},[186,104757,104758],{"class":188,"line":3121},[186,104759,102803],{"class":532},[186,104761,104762],{"class":188,"line":3142},[186,104763,102808],{"class":532},[186,104765,104766],{"class":188,"line":3147},[186,104767,97129],{"class":532},[186,104769,104770],{"class":188,"line":3161},[186,104771,3867],{"emptyLinePlaceholder":1551},[186,104773,104774],{"class":188,"line":3166},[186,104775,3867],{"emptyLinePlaceholder":1551},[186,104777,104778,104780,104782,104784,104786],{"class":188,"line":3195},[186,104779,33402],{"class":669},[186,104781,3440],{"class":198},[186,104783,102829],{"class":202},[186,104785,97117],{"class":206},[186,104787,5205],{"class":202},[186,104789,104790,104792,104794,104796,104798],{"class":188,"line":3200},[186,104791,102838],{"class":202},[186,104793,529],{"class":669},[186,104795,102843],{"class":202},[186,104797,102745],{"class":206},[186,104799,1629],{"class":202},[186,104801,104802,104804,104806],{"class":188,"line":3217},[186,104803,102852],{"class":202},[186,104805,529],{"class":669},[186,104807,102857],{"class":202},[186,104809,104810],{"class":188,"line":3222},[186,104811,3867],{"emptyLinePlaceholder":1551},[186,104813,104814,104817,104819,104822,104825],{"class":188,"line":3227},[186,104815,104816],{"class":202},"    box_body_id ",[186,104818,529],{"class":669},[186,104820,104821],{"class":202}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[186,104823,104824],{"class":532},"\"red_box\"",[186,104826,1629],{"class":202},[186,104828,104829,104832,104834,104837,104840],{"class":188,"line":3232},[186,104830,104831],{"class":202},"    site_id ",[186,104833,529],{"class":669},[186,104835,104836],{"class":202}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[186,104838,104839],{"class":532},"\"box_center\"",[186,104841,1629],{"class":202},[186,104843,104844],{"class":188,"line":3246},[186,104845,3867],{"emptyLinePlaceholder":1551},[186,104847,104848,104850,104853,104855,104857],{"class":188,"line":3251},[186,104849,4567],{"class":669},[186,104851,104852],{"class":202}," box_body_id ",[186,104854,520],{"class":669},[186,104856,5559],{"class":206},[186,104858,5205],{"class":202},[186,104860,104861,104864,104867,104869,104872],{"class":188,"line":4044},[186,104862,104863],{"class":669},"        raise",[186,104865,104866],{"class":206}," RuntimeError",[186,104868,832],{"class":202},[186,104870,104871],{"class":532},"\"body red_box not found\"",[186,104873,1629],{"class":202},[186,104875,104876,104878,104881,104883,104885],{"class":188,"line":4058},[186,104877,4567],{"class":669},[186,104879,104880],{"class":202}," site_id ",[186,104882,520],{"class":669},[186,104884,5559],{"class":206},[186,104886,5205],{"class":202},[186,104888,104889,104891,104893,104895,104898],{"class":188,"line":4066},[186,104890,104863],{"class":669},[186,104892,104866],{"class":206},[186,104894,832],{"class":202},[186,104896,104897],{"class":532},"\"site box_center not found\"",[186,104899,1629],{"class":202},[186,104901,104902],{"class":188,"line":4071},[186,104903,3867],{"emptyLinePlaceholder":1551},[186,104905,104906,104908,104910,104912,104914,104916,104918],{"class":188,"line":4077},[186,104907,4667],{"class":669},[186,104909,102932],{"class":202},[186,104911,27500],{"class":669},[186,104913,33898],{"class":206},[186,104915,832],{"class":202},[186,104917,3190],{"class":206},[186,104919,32241],{"class":202},[186,104921,104922],{"class":188,"line":4083},[186,104923,102947],{"class":202},[186,104925,104926],{"class":188,"line":4088},[186,104927,3867],{"emptyLinePlaceholder":1551},[186,104929,104930,104932,104934,104937],{"class":188,"line":9411},[186,104931,32754],{"class":206},[186,104933,832],{"class":202},[186,104935,104936],{"class":532},"\"simulation time:\"",[186,104938,102909],{"class":202},[186,104940,104941,104943,104945,104948],{"class":188,"line":9435},[186,104942,32754],{"class":206},[186,104944,832],{"class":202},[186,104946,104947],{"class":532},"\"box body position:\"",[186,104949,104950],{"class":202},", data.xpos[box_body_id].copy())\n",[186,104952,104953,104955,104957,104960],{"class":188,"line":9440},[186,104954,32754],{"class":206},[186,104956,832],{"class":202},[186,104958,104959],{"class":532},"\"site position:\"",[186,104961,104962],{"class":202},", data.site_xpos[site_id].copy())\n",[186,104964,104965,104967,104969,104972],{"class":188,"line":9446},[186,104966,32754],{"class":206},[186,104968,832],{"class":202},[186,104970,104971],{"class":532},"\"box qpos:\"",[186,104973,104974],{"class":202},", np.array(data.qpos))\n",[186,104976,104977],{"class":188,"line":9473},[186,104978,3867],{"emptyLinePlaceholder":1551},[186,104980,104981],{"class":188,"line":9478},[186,104982,3867],{"emptyLinePlaceholder":1551},[186,104984,104985,104987,104989,104991,104993],{"class":188,"line":9484},[186,104986,3003],{"class":669},[186,104988,32675],{"class":206},[186,104990,102990],{"class":669},[186,104992,102993],{"class":532},[186,104994,5205],{"class":202},[186,104996,104997],{"class":188,"line":9496},[186,104998,103000],{"class":202},[169,105000,105001],{},"保存为：",[176,105003,105005],{"className":25281,"code":105004,"language":25283,"meta":181,"style":181},"touch ch2_xml_basic.py\n",[183,105006,105007],{"__ignoreMap":181},[186,105008,105009,105011],{"class":188,"line":189},[186,105010,102714],{"class":198},[186,105012,105013],{"class":532}," ch2_xml_basic.py\n",[169,105015,103732],{},[176,105017,105019],{"className":25281,"code":105018,"language":25283,"meta":181,"style":181},"python ch2_xml_basic.py\n",[183,105020,105021],{"__ignoreMap":181},[186,105022,105023,105025],{"class":188,"line":189},[186,105024,31835],{"class":198},[186,105026,105013],{"class":532},[29,105028,103003],{"id":103003},[169,105030,105031],{},"用名字查找 body：",[176,105033,105035],{"className":31833,"code":105034,"language":31835,"meta":181,"style":181},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[183,105036,105037],{"__ignoreMap":181},[186,105038,105039,105042,105044,105046,105048],{"class":188,"line":189},[186,105040,105041],{"class":202},"box_body_id ",[186,105043,529],{"class":669},[186,105045,104821],{"class":202},[186,105047,104824],{"class":532},[186,105049,1629],{"class":202},[169,105051,105052],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[169,105054,105055],{},"用名字查找 site：",[176,105057,105059],{"className":31833,"code":105058,"language":31835,"meta":181,"style":181},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[183,105060,105061],{"__ignoreMap":181},[186,105062,105063,105066,105068,105070,105072],{"class":188,"line":189},[186,105064,105065],{"class":202},"site_id ",[186,105067,529],{"class":669},[186,105069,104836],{"class":202},[186,105071,104839],{"class":532},[186,105073,1629],{"class":202},[169,105075,105076,105077,105080,105081,105084],{},"注意第二个参数是对象类型。查 body 就用 ",[183,105078,105079],{},"mjOBJ_BODY","，查 site 就用 ",[183,105082,105083],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[169,105086,105087],{},"读取世界坐标：",[176,105089,105091],{"className":31833,"code":105090,"language":31835,"meta":181,"style":181},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[183,105092,105093,105098],{"__ignoreMap":181},[186,105094,105095],{"class":188,"line":189},[186,105096,105097],{"class":202},"data.xpos[box_body_id]\n",[186,105099,105100],{"class":188,"line":49},[186,105101,105102],{"class":202},"data.site_xpos[site_id]\n",[169,105104,105105,105108,105109,105112],{},[183,105106,105107],{},"xpos"," 是 body 的世界坐标，",[183,105110,105111],{},"site_xpos"," 是 site 的世界坐标。",[29,105114,103139],{"id":103139},[176,105116,105118],{"className":31833,"code":105117,"language":31835,"meta":181,"style":181},"import mujoco\nimport numpy as np\n",[183,105119,105120,105126],{"__ignoreMap":181},[186,105121,105122,105124],{"class":188,"line":189},[186,105123,31847],{"class":669},[186,105125,102732],{"class":202},[186,105127,105128,105130,105132,105134],{"class":188,"line":49},[186,105129,31847],{"class":669},[186,105131,32835],{"class":202},[186,105133,32838],{"class":669},[186,105135,32841],{"class":202},[169,105137,105138,105139,105142,105143,105146,105147,1824,105150,913],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[183,105140,105141],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[183,105144,105145],{},"as np"," 是习惯写法，后面就可以写 ",[183,105148,105149],{},"np.array(...)",[183,105151,105152],{},"np.round(...)",[176,105154,105155],{"className":31833,"code":103026,"language":31835,"meta":181,"style":181},[183,105156,105157,105165,105169],{"__ignoreMap":181},[186,105158,105159,105161,105163],{"class":188,"line":189},[186,105160,102745],{"class":206},[186,105162,15027],{"class":669},[186,105164,102750],{"class":532},[186,105166,105167],{"class":188,"line":49},[186,105168,103041],{"class":532},[186,105170,105171],{"class":188,"line":219},[186,105172,97129],{"class":532},[169,105174,105175,105176,913],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[183,105177,105178],{},"mujoco.MjModel.from_xml_string(XML)",[176,105180,105182],{"className":54514,"code":105181,"language":54516,"meta":181,"style":181},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[183,105183,105184],{"__ignoreMap":181},[186,105185,105186,105188,105190,105192,105194,105196,105198,105200,105203,105205,105207,105210,105212,105214,105217],{"class":188,"line":189},[186,105187,520],{"class":202},[186,105189,104641],{"class":523},[186,105191,16382],{"class":198},[186,105193,529],{"class":202},[186,105195,104839],{"class":532},[186,105197,102537],{"class":198},[186,105199,529],{"class":202},[186,105201,105202],{"class":532},"\"0 0 0\"",[186,105204,102567],{"class":198},[186,105206,529],{"class":202},[186,105208,105209],{"class":532},"\"0.03\"",[186,105211,80200],{"class":198},[186,105213,529],{"class":202},[186,105215,105216],{"class":532},"\"0 1 0 1\"",[186,105218,102575],{"class":202},[169,105220,105221,105223,105224,105227,105228,105230,105231,105234],{},[183,105222,104641],{}," 是标记点。",[183,105225,105226],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[183,105229,104601],{}," 表示显示出来的小球大小。",[183,105232,105233],{},"rgba=\"0 1 0 1\""," 表示绿色。",[176,105236,105237],{"className":31833,"code":105034,"language":31835,"meta":181,"style":181},[183,105238,105239],{"__ignoreMap":181},[186,105240,105241,105243,105245,105247,105249],{"class":188,"line":189},[186,105242,105041],{"class":202},[186,105244,529],{"class":669},[186,105246,104821],{"class":202},[186,105248,104824],{"class":532},[186,105250,1629],{"class":202},[169,105252,105253,105254,105256],{},"这行的作用是：根据名字 ",[183,105255,104824],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[169,105258,105259],{},"拆开看：",[34,105261,105262,105268,105273,105279],{},[22,105263,105264,105267],{},[183,105265,105266],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[22,105269,105270,105272],{},[183,105271,103516],{}," 是被查询的模型。",[22,105274,105275,105278],{},[183,105276,105277],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[22,105280,105281,105283],{},[183,105282,104824],{}," 是 XML 里写的名字。",[176,105285,105286],{"className":31833,"code":105058,"language":31835,"meta":181,"style":181},[183,105287,105288],{"__ignoreMap":181},[186,105289,105290,105292,105294,105296,105298],{"class":188,"line":189},[186,105291,105065],{"class":202},[186,105293,529],{"class":669},[186,105295,104836],{"class":202},[186,105297,104839],{"class":532},[186,105299,1629],{"class":202},[169,105301,105302,105303,913],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[183,105304,104839],{},[176,105306,105308],{"className":31833,"code":105307,"language":31835,"meta":181,"style":181},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[183,105309,105310,105322],{"__ignoreMap":181},[186,105311,105312,105314,105316,105318,105320],{"class":188,"line":189},[186,105313,3003],{"class":669},[186,105315,104852],{"class":202},[186,105317,520],{"class":669},[186,105319,5559],{"class":206},[186,105321,5205],{"class":202},[186,105323,105324,105327,105329,105331,105333],{"class":188,"line":49},[186,105325,105326],{"class":669},"    raise",[186,105328,104866],{"class":206},[186,105330,832],{"class":202},[186,105332,104871],{"class":532},[186,105334,1629],{"class":202},[169,105336,105337,105339,105340,105343,105344,105347,105348,105351],{},[183,105338,3003],{}," 是条件判断。",[183,105341,105342],{},"mj_name2id"," 找不到对象时会返回 ",[183,105345,105346],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[183,105349,105350],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[176,105353,105355],{"className":31833,"code":105354,"language":31835,"meta":181,"style":181},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[183,105356,105357,105373],{"__ignoreMap":181},[186,105358,105359,105361,105363,105365,105367,105369,105371],{"class":188,"line":189},[186,105360,4491],{"class":669},[186,105362,102932],{"class":202},[186,105364,27500],{"class":669},[186,105366,33898],{"class":206},[186,105368,832],{"class":202},[186,105370,3190],{"class":206},[186,105372,32241],{"class":202},[186,105374,105375],{"class":188,"line":49},[186,105376,103130],{"class":202},[169,105378,105379],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[176,105381,105383],{"className":31833,"code":105382,"language":31835,"meta":181,"style":181},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[183,105384,105385],{"__ignoreMap":181},[186,105386,105387,105389,105391,105393],{"class":188,"line":189},[186,105388,31870],{"class":206},[186,105390,832],{"class":202},[186,105392,104947],{"class":532},[186,105394,104950],{"class":202},[169,105396,105397,105399,105400,105403],{},[183,105398,102510],{}," 保存所有 body 的世界坐标。",[183,105401,105402],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[176,105405,105407],{"className":31833,"code":105406,"language":31835,"meta":181,"style":181},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[183,105408,105409],{"__ignoreMap":181},[186,105410,105411,105413,105415,105417],{"class":188,"line":189},[186,105412,31870],{"class":206},[186,105414,832],{"class":202},[186,105416,104959],{"class":532},[186,105418,104962],{"class":202},[169,105420,105421,105424,105425,105427],{},[183,105422,105423],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[183,105426,104408],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[176,105429,105431],{"className":31833,"code":105430,"language":31835,"meta":181,"style":181},"print(\"box qpos:\", np.array(data.qpos))\n",[183,105432,105433],{"__ignoreMap":181},[186,105434,105435,105437,105439,105441],{"class":188,"line":189},[186,105436,31870],{"class":206},[186,105438,832],{"class":202},[186,105440,104971],{"class":532},[186,105442,104974],{"class":202},[169,105444,105445,105446,105449],{},"这里打印广义位置数组。",[183,105447,105448],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105451,103747],{"id":103746},[169,105453,105454,105455,105458,105459,913],{},"程序会输出 ",[183,105456,105457],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[183,105460,105461],{},"qpos",[169,105463,105464,105466,105467,105470,105471,105474],{},[183,105465,105402],{}," 是 body 的世界坐标位置。",[183,105468,105469],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[183,105472,105473],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[169,105476,83654,105477,83962,105479,105481],{},[183,105478,104408],{},[183,105480,105226],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[169,105483,105484],{},"如果你把 site 改成：",[176,105486,105488],{"className":54514,"code":105487,"language":54516,"meta":181,"style":181},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[183,105489,105490],{"__ignoreMap":181},[186,105491,105492,105494,105496,105498,105500,105503,105505,105507,105510,105512,105514,105516,105518,105520,105522],{"class":188,"line":189},[186,105493,520],{"class":202},[186,105495,104641],{"class":523},[186,105497,16382],{"class":198},[186,105499,529],{"class":202},[186,105501,105502],{"class":532},"\"box_top\"",[186,105504,102537],{"class":198},[186,105506,529],{"class":202},[186,105508,105509],{"class":532},"\"0 0 0.15\"",[186,105511,102567],{"class":198},[186,105513,529],{"class":202},[186,105515,105209],{"class":532},[186,105517,80200],{"class":198},[186,105519,529],{"class":202},[186,105521,105216],{"class":532},[186,105523,102575],{"class":202},[169,105525,105526,105527,105530],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[183,105528,105529],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105532,103779],{"id":103778},[34,105534,105535,105544,105547,105554,105560,105571],{},[22,105536,103842,105537,105539,105540,103845,105542,913],{},[183,105538,104412],{}," 的初始高度从 ",[183,105541,1829],{},[183,105543,1697],{},[22,105545,105546],{},"重新运行程序。",[22,105548,105549,105550,105553],{},"观察 ",[183,105551,105552],{},"box qpos"," 和最终位置是否变化。",[22,105555,105556,105557,105559],{},"故意把 ",[183,105558,104641],{}," 名称改错，确认程序能报错。",[22,105561,103842,105562,105564,105565,103845,105567,105570],{},[183,105563,102551],{}," 的颜色 ",[183,105566,103463],{},[183,105568,105569],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[22,105572,103842,105573,83962,105575,103845,105578,105581,105582,105584],{},[183,105574,104408],{},[183,105576,105577],{},"pos",[183,105579,105580],{},"0 0 0.2","，观察 ",[183,105583,105529],{}," 如何变化。",[14,105586,103884],{"id":103883},[29,105588,105590],{"id":105589},"xml-error-schema-violation",[183,105591,105592],{},"XML Error: Schema violation",[169,105594,105595],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[29,105597,105599,82722,105601],{"id":105598},"mj_name2id-返回-1",[183,105600,105342],{},[183,105602,105346],{},[169,105604,105605,105606,105609],{},"说明名字没有找到。检查 XML 中 ",[183,105607,105608],{},"name=\"...\"","，并确认对象类型正确。",[29,105611,105612],{"id":105612},"物体不下落",[169,105614,103954],{},[34,105616,105617,105622,105627],{},[22,105618,105619,105620],{},"body 是否有 ",[183,105621,103051],{},[22,105623,105624,105625],{},"gravity 是否为 ",[183,105626,104020],{},[22,105628,105629,105630,105632],{},"body 是否被固定在 ",[183,105631,103272],{}," 中",[29,105634,105635],{"id":105635},"坐标看起来不符合预期",[169,105637,105638],{},"先区分两种坐标：",[99,105640,105641,105650],{},[102,105642,105643],{},[105,105644,105645,105648],{},[108,105646,105647],{"align":110},"坐标",[108,105649,102131],{"align":110},[116,105651,105652,105662],{},[105,105653,105654,105659],{},[121,105655,105656,105657],{"align":110},"XML 里的 ",[183,105658,105577],{},[121,105660,105661],{"align":110},"相对父 body 的局部坐标",[105,105663,105664,105670],{},[121,105665,105666,26437,105668],{"align":110},[183,105667,102510],{},[183,105669,105423],{},[121,105671,105672],{"align":110},"仿真更新后的世界坐标",[169,105674,105675,105676,105678,105679,83971,105682,105684],{},"如果你修改了 ",[183,105677,102501],{},"，但还没调用 ",[183,105680,105681],{},"mj_forward",[183,105683,102646],{},"，世界坐标可能还没有更新。",[14,105686,104038],{"id":104037},[169,105688,105689],{},"MJCF 建模先掌握四件事：",[34,105691,105692,105697,105702,105707],{},[22,105693,105694,105696],{},[183,105695,53247],{}," 表示刚体层级。",[22,105698,105699,105701],{},[183,105700,102551],{}," 表示形状、碰撞和质量。",[22,105703,105704,105706],{},[183,105705,104387],{}," 决定 body 能不能动、怎么动。",[22,105708,105709,105711],{},[183,105710,104641],{}," 用来标记关键点，方便 Python 读取位置。",[169,105713,105714],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1524,105716,105717],{},"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":181,"searchDepth":49,"depth":49,"links":105719},[105720,105721,105722,105728,105732,105733,105734,105741],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":105723},[105724,105725,105726,105727],{"id":104391,"depth":219,"text":104391},{"id":104505,"depth":219,"text":104505},{"id":104531,"depth":219,"text":104532},{"id":104635,"depth":219,"text":104636},{"id":102683,"depth":49,"text":102684,"children":105729},[105730,105731],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":105735},[105736,105737,105739,105740],{"id":105589,"depth":219,"text":105592},{"id":105598,"depth":219,"text":105738},"mj_name2id 返回 -1",{"id":105612,"depth":219,"text":105612},{"id":105635,"depth":219,"text":105635},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104085,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105748,"title":105749,"body":105750,"description":181,"extension":1549,"meta":107245,"navigation":1551,"path":107246,"seo":107247,"stem":107248,"__hash__":107249},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105751,"toc":107217},[105752,105755,105757,105760,105763,105801,105804,105810,105813,105815,105817,105844,105846,105860,105862,105903,105905,105929,105931,105934,105943,105952,105955,105964,105972,105981,105984,105994,105997,106049,106056,106062,106070,106118,106121,106140,106143,106151,106155,106164,106197,106199,106547,106549,106561,106563,106574,106576,106579,106600,106606,106609,106634,106644,106647,106655,106658,106661,106682,106693,106695,106715,106718,106739,106748,106767,106773,106798,106801,106815,106822,106846,106849,106857,106866,106882,106894,106902,106911,106913,106916,106940,106945,106948,106970,106972,107011,107013,107020,107022,107030,107033,107036,107048,107089,107096,107107,107114,107117,107166,107169,107172,107178,107180,107185,107211,107214],[10,105753,105749],{"id":105754},"_3python-控制接口读取状态与推进仿真",[14,105756,102078],{"id":102077},[169,105758,105759],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[169,105761,105762],{},"你将学习:",[34,105764,105765,105770,105775,105779,105784,105795],{},[22,105766,105767],{},[183,105768,105769],{},"MjModel.from_xml_string",[22,105771,105772],{},[183,105773,105774],{},"MjData(model)",[22,105776,105777],{},[183,105778,102646],{},[22,105780,105781],{},[183,105782,105783],{},"mj_resetData",[22,105785,105786,105787,1824,105789,1824,105792],{},"读取 ",[183,105788,105461],{},[183,105790,105791],{},"qvel",[183,105793,105794],{},"ctrl",[22,105796,105797,105798],{},"使用 ",[183,105799,105800],{},"model.opt.timestep",[169,105802,105803],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[176,105805,105808],{"className":105806,"code":105807,"language":753,"meta":181},[751],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[183,105809,105807],{"__ignoreMap":181},[169,105811,105812],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105814,102201],{"id":102200},[169,105816,102204],{},[176,105818,105820],{"className":25281,"code":105819,"language":25283,"meta":181,"style":181},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[183,105821,105822],{"__ignoreMap":181},[186,105823,105824,105826,105828,105830,105832,105835,105837,105839,105841],{"class":188,"line":189},[186,105825,26035],{"class":198},[186,105827,27772],{"class":532},[186,105829,25293],{"class":532},[186,105831,27857],{"class":206},[186,105833,105834],{"class":532}," python3",[186,105836,102229],{"class":532},[186,105838,103932],{"class":532},[186,105840,102245],{"class":532},[186,105842,105843],{"class":532}," glfw\n",[169,105845,104250],{},[176,105847,105848],{"className":25281,"code":102350,"language":25283,"meta":181,"style":181},[183,105849,105850],{"__ignoreMap":181},[186,105851,105852,105854,105856,105858],{"class":188,"line":189},[186,105853,25290],{"class":198},[186,105855,25293],{"class":532},[186,105857,102361],{"class":532},[186,105859,102364],{"class":532},[169,105861,104267],{},[176,105863,105865],{"className":25281,"code":105864,"language":25283,"meta":181,"style":181},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[183,105866,105867,105884,105893],{"__ignoreMap":181},[186,105868,105869,105871,105873,105875,105878,105880,105882],{"class":188,"line":189},[186,105870,31785],{"class":198},[186,105872,30631],{"class":532},[186,105874,26574],{"class":206},[186,105876,105877],{"class":532}," mujoco-python-api",[186,105879,102406],{"class":532},[186,105881,102409],{"class":206},[186,105883,102412],{"class":206},[186,105885,105886,105888,105890],{"class":188,"line":49},[186,105887,31785],{"class":198},[186,105889,102419],{"class":532},[186,105891,105892],{"class":532}," mujoco-python-api\n",[186,105894,105895,105897,105899,105901],{"class":188,"line":219},[186,105896,25290],{"class":198},[186,105898,25293],{"class":532},[186,105900,102361],{"class":532},[186,105902,102364],{"class":532},[169,105904,102435],{},[34,105906,105907,105914,105923],{},[22,105908,105909,102449,105911,105913],{},[183,105910,102106],{},[183,105912,102111],{}," 是官方 Python bindings 的类名。",[22,105915,105916,105917,105920,105921,913],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[183,105918,105919],{},"mjModel"," 在 Python 中是 ",[183,105922,102140],{},[22,105924,105925,105926,913],{},"不要使用 ",[183,105927,105928],{},"sim = mujoco_py.MjSim(...)",[14,105930,102476],{"id":102475},[169,105932,105933],{},"仿真推进核心代码:",[176,105935,105937],{"className":31833,"code":105936,"language":31835,"meta":181,"style":181},"mujoco.mj_step(model, data)\n",[183,105938,105939],{"__ignoreMap":181},[186,105940,105941],{"class":188,"line":189},[186,105942,105936],{"class":202},[169,105944,105945,105946,1824,105948,1824,105950,913],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[183,105947,102501],{},[183,105949,102504],{},[183,105951,102498],{},[169,105953,105954],{},"重置仿真:",[176,105956,105958],{"className":31833,"code":105957,"language":31835,"meta":181,"style":181},"mujoco.mj_resetData(model, data)\n",[183,105959,105960],{"__ignoreMap":181},[186,105961,105962],{"class":188,"line":189},[186,105963,105957],{"class":202},[169,105965,105966,105967,83971,105969,105971],{},"如果手动修改了 ",[183,105968,102501],{},[183,105970,102504],{},"，通常应调用:",[176,105973,105975],{"className":31833,"code":105974,"language":31835,"meta":181,"style":181},"mujoco.mj_forward(model, data)\n",[183,105976,105977],{"__ignoreMap":181},[186,105978,105979],{"class":188,"line":189},[186,105980,105974],{"class":202},[169,105982,105983],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[29,105985,105987,1824,105989,1824,105991,105993],{"id":105986},"qposqvelctrl-是什么",[183,105988,105461],{},[183,105990,105791],{},[183,105992,105794],{}," 是什么",[169,105995,105996],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[99,105998,105999,106011],{},[102,106000,106001],{},[105,106002,106003,106006,106008],{},[108,106004,106005],{"align":110},"字段",[108,106007,102131],{"align":110},[108,106009,106010],{"align":110},"谁来修改",[116,106012,106013,106025,106037],{},[105,106014,106015,106019,106022],{},[121,106016,106017],{"align":110},[183,106018,102501],{},[121,106020,106021],{"align":110},"广义位置，例如小车位置、关节角、自由物体位置姿态",[121,106023,106024],{"align":110},"MuJoCo 更新，也可以手动设置初始状态",[105,106026,106027,106031,106034],{},[121,106028,106029],{"align":110},[183,106030,102504],{},[121,106032,106033],{"align":110},"广义速度，例如小车速度、关节角速度",[121,106035,106036],{"align":110},"MuJoCo 更新，也可以手动清零",[105,106038,106039,106043,106046],{},[121,106040,106041],{"align":110},[183,106042,102507],{},[121,106044,106045],{"align":110},"actuator 的控制输入",[121,106047,106048],{"align":110},"主要由你的控制代码写入",[169,106050,10488,106051,102449,106053,106055],{},[183,106052,105461],{},[183,106054,105791],{}," 不一定同维。自由刚体就是典型例子：",[176,106057,106060],{"className":106058,"code":106059,"language":753,"meta":181},[751],"freejoint: qpos 7 维，qvel 6 维\n",[183,106061,106059],{"__ignoreMap":181},[29,106063,106065,102449,106067,106069],{"id":106064},"mj_step-和-mj_forward-的区别",[183,106066,102646],{},[183,106068,105681],{}," 的区别",[99,106071,106072,106085],{},[102,106073,106074],{},[105,106075,106076,106079,106082],{},[108,106077,106078],{"align":110},"函数",[108,106080,106081],{"align":110},"是否推进时间",[108,106083,106084],{"align":110},"什么时候用",[116,106086,106087,106100],{},[105,106088,106089,106094,106097],{},[121,106090,106091],{"align":110},[183,106092,106093],{},"mj_step(model, data)",[121,106095,106096],{"align":110},"是",[121,106098,106099],{"align":110},"正常仿真循环，每调用一次前进一步",[105,106101,106102,106107,106110],{},[121,106103,106104],{"align":110},[183,106105,106106],{},"mj_forward(model, data)",[121,106108,106109],{"align":110},"否",[121,106111,106112,106113,1824,106115,106117],{"align":110},"手动改了 ",[183,106114,105461],{},[183,106116,105791],{}," 后，刷新派生量",[169,106119,106120],{},"例如你写：",[176,106122,106124],{"className":31833,"code":106123,"language":31835,"meta":181,"style":181},"data.qpos[2] = 2.0\n",[183,106125,106126],{"__ignoreMap":181},[186,106127,106128,106131,106133,106135,106137],{"class":188,"line":189},[186,106129,106130],{"class":202},"data.qpos[",[186,106132,1697],{"class":206},[186,106134,5909],{"class":202},[186,106136,529],{"class":669},[186,106138,106139],{"class":206}," 2.0\n",[169,106141,106142],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[176,106144,106145],{"className":31833,"code":105974,"language":31835,"meta":181,"style":181},[183,106146,106147],{"__ignoreMap":181},[186,106148,106149],{"class":188,"line":189},[186,106150,105974],{"class":202},[29,106152,106154],{"id":106153},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[169,106156,106157,106160,106161,106163],{},[183,106158,106159],{},"mujoco.mj_resetData(model, data)"," 会把 ",[183,106162,34856],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[176,106165,106167],{"className":31833,"code":106166,"language":31835,"meta":181,"style":181},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[183,106168,106169,106173,106183,106193],{"__ignoreMap":181},[186,106170,106171],{"class":188,"line":189},[186,106172,105957],{"class":202},[186,106174,106175,106178,106180],{"class":188,"line":49},[186,106176,106177],{"class":202},"data.qpos[:] ",[186,106179,529],{"class":669},[186,106181,106182],{"class":202}," random_qpos\n",[186,106184,106185,106188,106190],{"class":188,"line":219},[186,106186,106187],{"class":202},"data.qvel[:] ",[186,106189,529],{"class":669},[186,106191,106192],{"class":206}," 0.0\n",[186,106194,106195],{"class":188,"line":225},[186,106196,105974],{"class":202},[14,106198,102684],{"id":102683},[176,106200,106202],{"className":31833,"code":106201,"language":31835,"meta":181,"style":181},"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",[183,106203,106204,106210,106220,106224,106228,106236,106241,106245,106249,106253,106258,106262,106267,106272,106277,106281,106285,106289,106293,106297,106301,106320,106327,106339,106350,106366,106382,106386,106390,106402,106414,106422,106426,106437,106441,106457,106461,106465,106474,106478,106483,106492,106496,106509,106514,106523,106527,106531,106543],{"__ignoreMap":181},[186,106205,106206,106208],{"class":188,"line":189},[186,106207,31847],{"class":669},[186,106209,102732],{"class":202},[186,106211,106212,106214,106216,106218],{"class":188,"line":49},[186,106213,31847],{"class":669},[186,106215,32835],{"class":202},[186,106217,32838],{"class":669},[186,106219,32841],{"class":202},[186,106221,106222],{"class":188,"line":219},[186,106223,3867],{"emptyLinePlaceholder":1551},[186,106225,106226],{"class":188,"line":225},[186,106227,3867],{"emptyLinePlaceholder":1551},[186,106229,106230,106232,106234],{"class":188,"line":242},[186,106231,102745],{"class":206},[186,106233,15027],{"class":669},[186,106235,102750],{"class":532},[186,106237,106238],{"class":188,"line":248},[186,106239,106240],{"class":532},"\u003Cmujoco model=\"state_api\">\n",[186,106242,106243],{"class":188,"line":265},[186,106244,102760],{"class":532},[186,106246,106247],{"class":188,"line":271},[186,106248,3867],{"emptyLinePlaceholder":1551},[186,106250,106251],{"class":188,"line":288},[186,106252,102769],{"class":532},[186,106254,106255],{"class":188,"line":294},[186,106256,106257],{"class":532},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[186,106259,106260],{"class":188,"line":1212},[186,106261,3867],{"emptyLinePlaceholder":1551},[186,106263,106264],{"class":188,"line":1223},[186,106265,106266],{"class":532},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[186,106268,106269],{"class":188,"line":1236},[186,106270,106271],{"class":532},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[186,106273,106274],{"class":188,"line":3096},[186,106275,106276],{"class":532},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[186,106278,106279],{"class":188,"line":3110},[186,106280,102798],{"class":532},[186,106282,106283],{"class":188,"line":3115},[186,106284,102803],{"class":532},[186,106286,106287],{"class":188,"line":3121},[186,106288,102808],{"class":532},[186,106290,106291],{"class":188,"line":3142},[186,106292,97129],{"class":532},[186,106294,106295],{"class":188,"line":3147},[186,106296,3867],{"emptyLinePlaceholder":1551},[186,106298,106299],{"class":188,"line":3161},[186,106300,3867],{"emptyLinePlaceholder":1551},[186,106302,106303,106305,106308,106311,106313,106316,106318],{"class":188,"line":3166},[186,106304,33402],{"class":669},[186,106306,106307],{"class":198}," print_state",[186,106309,106310],{"class":202},"(prefix: ",[186,106312,2775],{"class":206},[186,106314,106315],{"class":202},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[186,106317,97117],{"class":206},[186,106319,5205],{"class":202},[186,106321,106322,106324],{"class":188,"line":3195},[186,106323,32754],{"class":206},[186,106325,106326],{"class":202},"(prefix)\n",[186,106328,106329,106331,106333,106336],{"class":188,"line":3200},[186,106330,32754],{"class":206},[186,106332,832],{"class":202},[186,106334,106335],{"class":532},"\"  timestep:\"",[186,106337,106338],{"class":202},", model.opt.timestep)\n",[186,106340,106341,106343,106345,106348],{"class":188,"line":3217},[186,106342,32754],{"class":206},[186,106344,832],{"class":202},[186,106346,106347],{"class":532},"\"  time:\"",[186,106349,102909],{"class":202},[186,106351,106352,106354,106356,106359,106362,106364],{"class":188,"line":3222},[186,106353,32754],{"class":206},[186,106355,832],{"class":202},[186,106357,106358],{"class":532},"\"  qpos:\"",[186,106360,106361],{"class":202},", np.round(data.qpos.copy(), ",[186,106363,1904],{"class":206},[186,106365,31952],{"class":202},[186,106367,106368,106370,106372,106375,106378,106380],{"class":188,"line":3227},[186,106369,32754],{"class":206},[186,106371,832],{"class":202},[186,106373,106374],{"class":532},"\"  qvel:\"",[186,106376,106377],{"class":202},", np.round(data.qvel.copy(), ",[186,106379,1904],{"class":206},[186,106381,31952],{"class":202},[186,106383,106384],{"class":188,"line":3232},[186,106385,3867],{"emptyLinePlaceholder":1551},[186,106387,106388],{"class":188,"line":3246},[186,106389,3867],{"emptyLinePlaceholder":1551},[186,106391,106392,106394,106396,106398,106400],{"class":188,"line":3251},[186,106393,33402],{"class":669},[186,106395,3440],{"class":198},[186,106397,102829],{"class":202},[186,106399,97117],{"class":206},[186,106401,5205],{"class":202},[186,106403,106404,106406,106408,106410,106412],{"class":188,"line":4044},[186,106405,102838],{"class":202},[186,106407,529],{"class":669},[186,106409,102843],{"class":202},[186,106411,102745],{"class":206},[186,106413,1629],{"class":202},[186,106415,106416,106418,106420],{"class":188,"line":4058},[186,106417,102852],{"class":202},[186,106419,529],{"class":669},[186,106421,102857],{"class":202},[186,106423,106424],{"class":188,"line":4066},[186,106425,3867],{"emptyLinePlaceholder":1551},[186,106427,106428,106431,106434],{"class":188,"line":4071},[186,106429,106430],{"class":202},"    print_state(",[186,106432,106433],{"class":532},"\"initial\"",[186,106435,106436],{"class":202},", model, data)\n",[186,106438,106439],{"class":188,"line":4077},[186,106440,3867],{"emptyLinePlaceholder":1551},[186,106442,106443,106445,106447,106449,106451,106453,106455],{"class":188,"line":4083},[186,106444,4667],{"class":669},[186,106446,102932],{"class":202},[186,106448,27500],{"class":669},[186,106450,33898],{"class":206},[186,106452,832],{"class":202},[186,106454,666],{"class":206},[186,106456,32241],{"class":202},[186,106458,106459],{"class":188,"line":4088},[186,106460,102947],{"class":202},[186,106462,106463],{"class":188,"line":9411},[186,106464,3867],{"emptyLinePlaceholder":1551},[186,106466,106467,106469,106472],{"class":188,"line":9435},[186,106468,106430],{"class":202},[186,106470,106471],{"class":532},"\"after 50 steps\"",[186,106473,106436],{"class":202},[186,106475,106476],{"class":188,"line":9440},[186,106477,3867],{"emptyLinePlaceholder":1551},[186,106479,106480],{"class":188,"line":9446},[186,106481,106482],{"class":202},"    mujoco.mj_resetData(model, data)\n",[186,106484,106485,106487,106490],{"class":188,"line":9473},[186,106486,106430],{"class":202},[186,106488,106489],{"class":532},"\"after reset\"",[186,106491,106436],{"class":202},[186,106493,106494],{"class":188,"line":9478},[186,106495,3867],{"emptyLinePlaceholder":1551},[186,106497,106498,106501,106503,106505,106507],{"class":188,"line":9484},[186,106499,106500],{"class":202},"    data.qpos[",[186,106502,1697],{"class":206},[186,106504,5909],{"class":202},[186,106506,529],{"class":669},[186,106508,106139],{"class":206},[186,106510,106511],{"class":188,"line":9496},[186,106512,106513],{"class":202},"    mujoco.mj_forward(model, data)\n",[186,106515,106516,106518,106521],{"class":188,"line":9508},[186,106517,106430],{"class":202},[186,106519,106520],{"class":532},"\"after manual qpos edit\"",[186,106522,106436],{"class":202},[186,106524,106525],{"class":188,"line":9520},[186,106526,3867],{"emptyLinePlaceholder":1551},[186,106528,106529],{"class":188,"line":11179},[186,106530,3867],{"emptyLinePlaceholder":1551},[186,106532,106533,106535,106537,106539,106541],{"class":188,"line":11204},[186,106534,3003],{"class":669},[186,106536,32675],{"class":206},[186,106538,102990],{"class":669},[186,106540,102993],{"class":532},[186,106542,5205],{"class":202},[186,106544,106545],{"class":188,"line":11227},[186,106546,103000],{"class":202},[169,106548,105001],{},[176,106550,106552],{"className":25281,"code":106551,"language":25283,"meta":181,"style":181},"touch ch3_python_state.py\n",[183,106553,106554],{"__ignoreMap":181},[186,106555,106556,106558],{"class":188,"line":189},[186,106557,102714],{"class":198},[186,106559,106560],{"class":532}," ch3_python_state.py\n",[169,106562,103732],{},[176,106564,106566],{"className":25281,"code":106565,"language":25283,"meta":181,"style":181},"python ch3_python_state.py\n",[183,106567,106568],{"__ignoreMap":181},[186,106569,106570,106572],{"class":188,"line":189},[186,106571,31835],{"class":198},[186,106573,106560],{"class":532},[29,106575,103003],{"id":103003},[169,106577,106578],{},"打印状态的函数：",[176,106580,106582],{"className":31833,"code":106581,"language":31835,"meta":181,"style":181},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[183,106583,106584],{"__ignoreMap":181},[186,106585,106586,106588,106590,106592,106594,106596,106598],{"class":188,"line":189},[186,106587,33402],{"class":669},[186,106589,106307],{"class":198},[186,106591,106310],{"class":202},[186,106593,2775],{"class":206},[186,106595,106315],{"class":202},[186,106597,97117],{"class":206},[186,106599,5205],{"class":202},[169,106601,106602,106603,106605],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[183,106604,34856],{}," 里发生了什么。",[169,106607,106608],{},"推进 50 步：",[176,106610,106612],{"className":31833,"code":106611,"language":31835,"meta":181,"style":181},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[183,106613,106614,106630],{"__ignoreMap":181},[186,106615,106616,106618,106620,106622,106624,106626,106628],{"class":188,"line":189},[186,106617,4491],{"class":669},[186,106619,102932],{"class":202},[186,106621,27500],{"class":669},[186,106623,33898],{"class":206},[186,106625,832],{"class":202},[186,106627,666],{"class":206},[186,106629,32241],{"class":202},[186,106631,106632],{"class":188,"line":49},[186,106633,103130],{"class":202},[169,106635,106636,106637,106640,106641,106643],{},"由于 ",[183,106638,106639],{},"timestep=0.01","，所以 50 步后时间约为 ",[183,106642,36784],{}," 秒。",[169,106645,106646],{},"重置：",[176,106648,106649],{"className":31833,"code":105957,"language":31835,"meta":181,"style":181},[183,106650,106651],{"__ignoreMap":181},[186,106652,106653],{"class":188,"line":189},[186,106654,105957],{"class":202},[169,106656,106657],{},"这会把时间、位置、速度恢复到初始状态。",[169,106659,106660],{},"手动改高度：",[176,106662,106664],{"className":31833,"code":106663,"language":31835,"meta":181,"style":181},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[183,106665,106666,106678],{"__ignoreMap":181},[186,106667,106668,106670,106672,106674,106676],{"class":188,"line":189},[186,106669,106130],{"class":202},[186,106671,1697],{"class":206},[186,106673,5909],{"class":202},[186,106675,529],{"class":669},[186,106677,106139],{"class":206},[186,106679,106680],{"class":188,"line":49},[186,106681,105974],{"class":202},[169,106683,106684,106685,106688,106689,106692],{},"这个例子里 ",[183,106686,106687],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[183,106690,106691],{},"2.0"," 表示把小球放到更高的位置。",[29,106694,103139],{"id":103139},[176,106696,106697],{"className":31833,"code":106581,"language":31835,"meta":181,"style":181},[183,106698,106699],{"__ignoreMap":181},[186,106700,106701,106703,106705,106707,106709,106711,106713],{"class":188,"line":189},[186,106702,33402],{"class":669},[186,106704,106307],{"class":198},[186,106706,106310],{"class":202},[186,106708,2775],{"class":206},[186,106710,106315],{"class":202},[186,106712,97117],{"class":206},[186,106714,5205],{"class":202},[169,106716,106717],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[34,106719,106720,106729,106734],{},[22,106721,106722,106725,106726,106728],{},[183,106723,106724],{},"prefix","：一段文字，比如 ",[183,106727,106433],{},"，用来说明现在打印的是哪个阶段。",[22,106730,106731,106733],{},[183,106732,103516],{},"：MuJoCo 模型。",[22,106735,106736,106738],{},[183,106737,34856],{},"：MuJoCo 当前状态。",[169,106740,106741,1824,106744,106747],{},[183,106742,106743],{},"prefix: str",[183,106745,106746],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[176,106749,106751],{"className":31833,"code":106750,"language":31835,"meta":181,"style":181},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[183,106752,106753],{"__ignoreMap":181},[186,106754,106755,106757,106759,106761,106763,106765],{"class":188,"line":189},[186,106756,31870],{"class":206},[186,106758,832],{"class":202},[186,106760,106358],{"class":532},[186,106762,106361],{"class":202},[186,106764,1904],{"class":206},[186,106766,31952],{"class":202},[169,106768,106769,106772],{},[183,106770,106771],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[176,106774,106776],{"className":31833,"code":106775,"language":31835,"meta":181,"style":181},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[183,106777,106778,106790],{"__ignoreMap":181},[186,106779,106780,106782,106784,106786,106788],{"class":188,"line":189},[186,106781,103065],{"class":202},[186,106783,529],{"class":669},[186,106785,102843],{"class":202},[186,106787,102745],{"class":206},[186,106789,1629],{"class":202},[186,106791,106792,106794,106796],{"class":188,"line":49},[186,106793,103089],{"class":202},[186,106795,529],{"class":669},[186,106797,102857],{"class":202},[169,106799,106800],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[176,106802,106804],{"className":31833,"code":106803,"language":31835,"meta":181,"style":181},"print_state(\"initial\", model, data)\n",[183,106805,106806],{"__ignoreMap":181},[186,106807,106808,106811,106813],{"class":188,"line":189},[186,106809,106810],{"class":202},"print_state(",[186,106812,106433],{"class":532},[186,106814,106436],{"class":202},[169,106816,106817,106818,106821],{},"调用刚才定义的 ",[183,106819,106820],{},"print_state"," 函数，打印初始状态。",[176,106823,106824],{"className":31833,"code":106611,"language":31835,"meta":181,"style":181},[183,106825,106826,106842],{"__ignoreMap":181},[186,106827,106828,106830,106832,106834,106836,106838,106840],{"class":188,"line":189},[186,106829,4491],{"class":669},[186,106831,102932],{"class":202},[186,106833,27500],{"class":669},[186,106835,33898],{"class":206},[186,106837,832],{"class":202},[186,106839,666],{"class":206},[186,106841,32241],{"class":202},[186,106843,106844],{"class":188,"line":49},[186,106845,103130],{"class":202},[169,106847,106848],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[176,106850,106851],{"className":31833,"code":105957,"language":31835,"meta":181,"style":181},[183,106852,106853],{"__ignoreMap":181},[186,106854,106855],{"class":188,"line":189},[186,106856,105957],{"class":202},[169,106858,106859,106860,106862,106863,106865],{},"重置 ",[183,106861,34856],{},"。注意它不会重新创建 ",[183,106864,103516],{},"，因为模型结构没有变，只是状态回到初始值。",[176,106867,106868],{"className":31833,"code":106123,"language":31835,"meta":181,"style":181},[183,106869,106870],{"__ignoreMap":181},[186,106871,106872,106874,106876,106878,106880],{"class":188,"line":189},[186,106873,106130],{"class":202},[186,106875,1697],{"class":206},[186,106877,5909],{"class":202},[186,106879,529],{"class":669},[186,106881,106139],{"class":206},[169,106883,106884,106885,1824,106888,1824,106891,106893],{},"这行是“手动改状态”。在 freejoint 中，",[183,106886,106887],{},"qpos[0]",[183,106889,106890],{},"qpos[1]",[183,106892,106687],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[176,106895,106896],{"className":31833,"code":105974,"language":31835,"meta":181,"style":181},[183,106897,106898],{"__ignoreMap":181},[186,106899,106900],{"class":188,"line":189},[186,106901,105974],{"class":202},[169,106903,106904,106905,106907,106908,106910],{},"手动改完 ",[183,106906,105461],{}," 后，调用 ",[183,106909,105681],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106912,103747],{"id":103746},[169,106914,106915],{},"你会看到:",[34,106917,106918,106923,106928,106931],{},[22,106919,106920,106921],{},"初始时间为 ",[183,106922,1803],{},[22,106924,106925,106926],{},"50 步后时间约为 ",[183,106927,36784],{},[22,106929,106930],{},"reset 后状态恢复",[22,106932,106933,106934,106937,106938],{},"手动修改 ",[183,106935,106936],{},"data.qpos[2]"," 后，小球高度变为 ",[183,106939,106691],{},[169,106941,106942,106944],{},[183,106943,106687],{}," 在这个例子中表示自由刚体的 z 坐标。",[169,106946,106947],{},"输出里可以重点看三件事：",[34,106949,106950,106958,106963],{},[22,106951,106952,106954,106955,106957],{},[183,106953,3854],{}," 是否随着 ",[183,106956,102646],{}," 增加。",[22,106959,106960,106962],{},[183,106961,105461],{}," 的 z 坐标是否因为下落而变化。",[22,106964,106965,106967,106968,913],{},[183,106966,105783],{}," 后时间是否回到 ",[183,106969,1803],{},[14,106971,103779],{"id":103778},[34,106973,106974,106980,106986,106992,106995,107004],{},[22,106975,106976,106977,913],{},"修改 timestep 为 ",[183,106978,106979],{},"0.005",[22,106981,106982,106983,913],{},"重新运行，检查 50 步后时间是否约为 ",[183,106984,106985],{},"0.25",[22,106987,106988,106989,913],{},"修改重力为 ",[183,106990,106991],{},"0 0 -1.0",[22,106993,106994],{},"观察小球下降速度是否变慢。",[22,106996,103842,106997,103845,107000,107003],{},[183,106998,106999],{},"data.qpos[2] = 2.0",[183,107001,107002],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[22,107005,107006,107007,107010],{},"注释掉 ",[183,107008,107009],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107012,103884],{"id":103883},[29,107014,107016,107017,107019],{"id":107015},"修改-dataqpos-后位置没有更新","修改 ",[183,107018,102501],{}," 后位置没有更新",[169,107021,103893],{},[176,107023,107024],{"className":31833,"code":105974,"language":31835,"meta":181,"style":181},[183,107025,107026],{"__ignoreMap":181},[186,107027,107028],{"class":188,"line":189},[186,107029,105974],{"class":202},[29,107031,107032],{"id":107032},"数组维度看不懂",[169,107034,107035],{},"打印模型维度:",[176,107037,107039],{"className":31833,"code":107038,"language":31835,"meta":181,"style":181},"print(model.nq, model.nv, model.nu)\n",[183,107040,107041],{"__ignoreMap":181},[186,107042,107043,107045],{"class":188,"line":189},[186,107044,31870],{"class":206},[186,107046,107047],{"class":202},"(model.nq, model.nv, model.nu)\n",[99,107049,107050,107058],{},[102,107051,107052],{},[105,107053,107054,107056],{},[108,107055,106005],{"align":110},[108,107057,102131],{"align":110},[116,107059,107060,107070,107080],{},[105,107061,107062,107067],{},[121,107063,107064],{"align":110},[183,107065,107066],{},"nq",[121,107068,107069],{"align":110},"位置变量数量",[105,107071,107072,107077],{},[121,107073,107074],{"align":110},[183,107075,107076],{},"nv",[121,107078,107079],{"align":110},"速度变量数量",[105,107081,107082,107086],{},[121,107083,107084],{"align":110},[183,107085,103593],{},[121,107087,107088],{"align":110},"控制输入数量",[29,107090,107092,107093,107095],{"id":107091},"误以为-qpos-一定等于关节数","误以为 ",[183,107094,105461],{}," 一定等于关节数",[169,107097,107098,107099,83962,107101,107103,107104,107106],{},"不是。例如 ",[183,107100,103051],{},[183,107102,105461],{}," 是 7 维，但 ",[183,107105,105791],{}," 是 6 维。",[29,107108,107110,107111,107113],{"id":107109},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[183,107112,105461],{}," 的第几位",[169,107115,107116],{},"初学时可以先打印：",[176,107118,107120],{"className":31833,"code":107119,"language":31835,"meta":181,"style":181},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[183,107121,107122,107132,107142,107154],{"__ignoreMap":181},[186,107123,107124,107126,107128,107130],{"class":188,"line":189},[186,107125,31870],{"class":206},[186,107127,832],{"class":202},[186,107129,102870],{"class":532},[186,107131,102873],{"class":202},[186,107133,107134,107136,107138,107140],{"class":188,"line":49},[186,107135,31870],{"class":206},[186,107137,832],{"class":202},[186,107139,102882],{"class":532},[186,107141,102885],{"class":202},[186,107143,107144,107146,107148,107151],{"class":188,"line":219},[186,107145,31870],{"class":206},[186,107147,832],{"class":202},[186,107149,107150],{"class":532},"\"qpos:\"",[186,107152,107153],{"class":202},", data.qpos)\n",[186,107155,107156,107158,107160,107163],{"class":188,"line":225},[186,107157,31870],{"class":206},[186,107159,832],{"class":202},[186,107161,107162],{"class":532},"\"qvel:\"",[186,107164,107165],{"class":202},", data.qvel)\n",[169,107167,107168],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[29,107170,107171],{"id":107171},"仿真结果每次都一样",[169,107173,107174,107175,107177],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[183,107176,105461],{},"、目标点或控制输入。",[14,107179,104038],{"id":104037},[169,107181,107182,107183,26077],{},"Python 控制 MuJoCo 的核心就是读写 ",[183,107184,34856],{},[34,107186,107187,107195,107200,107205],{},[22,107188,107189,107190,102449,107192,107194],{},"用 ",[183,107191,102501],{},[183,107193,102504],{}," 读取状态。",[22,107196,107189,107197,107199],{},[183,107198,102507],{}," 写入控制。",[22,107201,107189,107202,107204],{},[183,107203,102646],{}," 推进时间。",[22,107206,107207,107208,107210],{},"手动改状态后用 ",[183,107209,105681],{}," 刷新派生量。",[169,107212,107213],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1524,107215,107216],{},"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":181,"searchDepth":49,"depth":49,"links":107218},[107219,107220,107221,107228,107232,107233,107234,107244],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":107222},[107223,107225,107227],{"id":105986,"depth":219,"text":107224},"qpos、qvel、ctrl 是什么",{"id":106064,"depth":219,"text":107226},"mj_step 和 mj_forward 的区别",{"id":106153,"depth":219,"text":106154},{"id":102683,"depth":49,"text":102684,"children":107229},[107230,107231],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":107235},[107236,107238,107239,107241,107243],{"id":107015,"depth":219,"text":107237},"修改 data.qpos 后位置没有更新",{"id":107032,"depth":219,"text":107032},{"id":107091,"depth":219,"text":107240},"误以为 qpos 一定等于关节数",{"id":107109,"depth":219,"text":107242},"不知道某个元素在 qpos 的第几位",{"id":107171,"depth":219,"text":107171},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105749,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107251,"title":107252,"body":107253,"description":181,"extension":1549,"meta":108943,"navigation":1551,"path":108944,"seo":108945,"stem":108946,"__hash__":108947},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107254,"toc":108919},[107255,107258,107260,107263,107265,107290,107293,107312,107315,107317,107319,107343,107345,107359,107361,107402,107404,107428,107430,107433,107467,107469,107482,107485,107553,107562,107566,107569,107603,107609,107612,107616,107655,107658,107678,107682,107725,107727,107756,107759,107765,107768,107770,108164,108166,108178,108180,108191,108193,108196,108225,108233,108236,108271,108274,108276,108284,108287,108289,108300,108310,108330,108333,108369,108381,108429,108448,108490,108503,108531,108536,108557,108567,108585,108588,108622,108625,108645,108648,108667,108673,108675,108678,108684,108690,108700,108703,108709,108718,108720,108766,108768,108774,108780,108783,108786,108806,108809,108815,108821,108823,108846,108849,108852,108861,108864,108902,108904,108907,108913,108916],[10,107256,107252],{"id":107257},"_4关节actuator-与力控制",[14,107259,102078],{"id":102077},[169,107261,107262],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[169,107264,105762],{},[34,107266,107267,107273,107278,107282,107287],{},[22,107268,107269,107272],{},[183,107270,107271],{},"hinge"," 关节",[22,107274,107275],{},[183,107276,107277],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[22,107279,107280],{},[183,107281,102507],{},[22,107283,107284],{},[183,107285,107286],{},"ctrlrange",[22,107288,107289],{},"读取关节角和角速度",[169,107291,107292],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[176,107294,107296],{"className":31833,"code":107295,"language":31835,"meta":181,"style":181},"data.ctrl[0] = ...\n",[183,107297,107298],{"__ignoreMap":181},[186,107299,107300,107303,107305,107307,107309],{"class":188,"line":189},[186,107301,107302],{"class":202},"data.ctrl[",[186,107304,1803],{"class":206},[186,107306,5909],{"class":202},[186,107308,529],{"class":669},[186,107310,107311],{"class":206}," ...\n",[169,107313,107314],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107316,102201],{"id":102200},[169,107318,102204],{},[176,107320,107321],{"className":25281,"code":105819,"language":25283,"meta":181,"style":181},[183,107322,107323],{"__ignoreMap":181},[186,107324,107325,107327,107329,107331,107333,107335,107337,107339,107341],{"class":188,"line":189},[186,107326,26035],{"class":198},[186,107328,27772],{"class":532},[186,107330,25293],{"class":532},[186,107332,27857],{"class":206},[186,107334,105834],{"class":532},[186,107336,102229],{"class":532},[186,107338,103932],{"class":532},[186,107340,102245],{"class":532},[186,107342,105843],{"class":532},[169,107344,104250],{},[176,107346,107347],{"className":25281,"code":102350,"language":25283,"meta":181,"style":181},[183,107348,107349],{"__ignoreMap":181},[186,107350,107351,107353,107355,107357],{"class":188,"line":189},[186,107352,25290],{"class":198},[186,107354,25293],{"class":532},[186,107356,102361],{"class":532},[186,107358,102364],{"class":532},[169,107360,104267],{},[176,107362,107364],{"className":25281,"code":107363,"language":25283,"meta":181,"style":181},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[183,107365,107366,107383,107392],{"__ignoreMap":181},[186,107367,107368,107370,107372,107374,107377,107379,107381],{"class":188,"line":189},[186,107369,31785],{"class":198},[186,107371,30631],{"class":532},[186,107373,26574],{"class":206},[186,107375,107376],{"class":532}," mujoco-control",[186,107378,102406],{"class":532},[186,107380,102409],{"class":206},[186,107382,102412],{"class":206},[186,107384,107385,107387,107389],{"class":188,"line":49},[186,107386,31785],{"class":198},[186,107388,102419],{"class":532},[186,107390,107391],{"class":532}," mujoco-control\n",[186,107393,107394,107396,107398,107400],{"class":188,"line":219},[186,107395,25290],{"class":198},[186,107397,25293],{"class":532},[186,107399,102361],{"class":532},[186,107401,102364],{"class":532},[169,107403,102435],{},[34,107405,107406,107412,107419,107425],{},[22,107407,107408,107411],{},[183,107409,107410],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[22,107413,107414,107416,107417,913],{},[183,107415,102507],{}," 长度等于 ",[183,107418,103589],{},[22,107420,83654,107421,107424],{},[183,107422,107423],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[22,107426,107427],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107429,102476],{"id":102475},[169,107431,107432],{},"关节决定 body 如何运动:",[176,107434,107436],{"className":54514,"code":107435,"language":54516,"meta":181,"style":181},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[183,107437,107438],{"__ignoreMap":181},[186,107439,107440,107442,107444,107446,107448,107451,107453,107455,107457,107460,107462,107465],{"class":188,"line":189},[186,107441,520],{"class":202},[186,107443,104387],{"class":523},[186,107445,16382],{"class":198},[186,107447,529],{"class":202},[186,107449,107450],{"class":532},"\"hinge\"",[186,107452,55269],{"class":198},[186,107454,529],{"class":202},[186,107456,107450],{"class":532},[186,107458,107459],{"class":198}," axis",[186,107461,529],{"class":202},[186,107463,107464],{"class":532},"\"0 1 0\"",[186,107466,102575],{"class":202},[169,107468,104483],{},[34,107470,107471,107476,107479],{},[22,107472,107473,107474],{},"名字是 ",[183,107475,107271],{},[22,107477,107478],{},"类型是旋转关节",[22,107480,107481],{},"绕 y 轴旋转",[169,107483,107484],{},"actuator 决定如何施加控制:",[176,107486,107488],{"className":54514,"code":107487,"language":54516,"meta":181,"style":181},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[183,107489,107490,107499,107545],{"__ignoreMap":181},[186,107491,107492,107494,107497],{"class":188,"line":189},[186,107493,520],{"class":202},[186,107495,107496],{"class":523},"actuator",[186,107498,552],{"class":202},[186,107500,107501,107503,107506,107508,107510,107513,107516,107518,107520,107523,107525,107527,107530,107532,107535,107538,107540,107543],{"class":188,"line":49},[186,107502,53591],{"class":202},[186,107504,107505],{"class":523},"motor",[186,107507,16382],{"class":198},[186,107509,529],{"class":202},[186,107511,107512],{"class":532},"\"hinge_motor\"",[186,107514,107515],{"class":198}," joint",[186,107517,529],{"class":202},[186,107519,107450],{"class":532},[186,107521,107522],{"class":198}," gear",[186,107524,529],{"class":202},[186,107526,5144],{"class":532},[186,107528,107529],{"class":198}," ctrlrange",[186,107531,529],{"class":202},[186,107533,107534],{"class":532},"\"-2 2\"",[186,107536,107537],{"class":198}," ctrllimited",[186,107539,529],{"class":202},[186,107541,107542],{"class":532},"\"true\"",[186,107544,102575],{"class":202},[186,107546,107547,107549,107551],{"class":188,"line":219},[186,107548,1470],{"class":202},[186,107550,107496],{"class":523},[186,107552,552],{"class":202},[169,107554,107555,107558,107559,913],{},[183,107556,107557],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[183,107560,107561],{},"[-2, 2]",[29,107563,107565],{"id":107564},"joint-和-actuator-的关系","joint 和 actuator 的关系",[169,107567,107568],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[99,107570,107571,107581],{},[102,107572,107573],{},[105,107574,107575,107577,107579],{},[108,107576,27211],{"align":110},[108,107578,104127],{"align":110},[108,107580,102165],{"align":110},[116,107582,107583,107593],{},[105,107584,107585,107587,107590],{},[121,107586,104387],{"align":110},[121,107588,107589],{"align":110},"定义能怎么动",[121,107591,107592],{"align":110},"门轴允许门旋转",[105,107594,107595,107597,107600],{},[121,107596,107496],{"align":110},[121,107598,107599],{"align":110},"定义怎么施力或控制",[121,107601,107602],{"align":110},"人推门、马达带动门",[169,107604,107605,107606,107608],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[183,107607,102507],{}," 主动控制它。",[169,107610,107611],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[29,107613,107615],{"id":107614},"hinge-joint","hinge joint",[176,107617,107619],{"className":54514,"code":107618,"language":54516,"meta":181,"style":181},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[183,107620,107621],{"__ignoreMap":181},[186,107622,107623,107625,107627,107629,107631,107633,107635,107637,107639,107641,107643,107645,107648,107650,107653],{"class":188,"line":189},[186,107624,520],{"class":202},[186,107626,104387],{"class":523},[186,107628,16382],{"class":198},[186,107630,529],{"class":202},[186,107632,107450],{"class":532},[186,107634,55269],{"class":198},[186,107636,529],{"class":202},[186,107638,107450],{"class":532},[186,107640,107459],{"class":198},[186,107642,529],{"class":202},[186,107644,107464],{"class":532},[186,107646,107647],{"class":198}," damping",[186,107649,529],{"class":202},[186,107651,107652],{"class":532},"\"0.1\"",[186,107654,102575],{"class":202},[169,107656,107657],{},"含义：",[34,107659,107660,107666,107672],{},[22,107661,107662,107665],{},[183,107663,107664],{},"type=\"hinge\"","：只能绕一个轴旋转。",[22,107667,107668,107671],{},[183,107669,107670],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[22,107673,107674,107677],{},[183,107675,107676],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[29,107679,107681],{"id":107680},"motor-actuator","motor actuator",[176,107683,107685],{"className":54514,"code":107684,"language":54516,"meta":181,"style":181},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[183,107686,107687],{"__ignoreMap":181},[186,107688,107689,107691,107693,107695,107697,107699,107701,107703,107705,107707,107709,107711,107713,107715,107717,107719,107721,107723],{"class":188,"line":189},[186,107690,520],{"class":202},[186,107692,107505],{"class":523},[186,107694,16382],{"class":198},[186,107696,529],{"class":202},[186,107698,107512],{"class":532},[186,107700,107515],{"class":198},[186,107702,529],{"class":202},[186,107704,107450],{"class":532},[186,107706,107522],{"class":198},[186,107708,529],{"class":202},[186,107710,5144],{"class":532},[186,107712,107529],{"class":198},[186,107714,529],{"class":202},[186,107716,107534],{"class":532},[186,107718,107537],{"class":198},[186,107720,529],{"class":202},[186,107722,107542],{"class":532},[186,107724,102575],{"class":202},[169,107726,107657],{},[34,107728,107729,107738,107744,107750],{},[22,107730,107731,107734,107735,107737],{},[183,107732,107733],{},"joint=\"hinge\"","：这个电机作用在名为 ",[183,107736,107271],{}," 的关节上。",[22,107739,107740,107743],{},[183,107741,107742],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[22,107745,107746,107749],{},[183,107747,107748],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[22,107751,107752,107755],{},[183,107753,107754],{},"ctrllimited=\"true\"","：启用控制范围限制。",[169,107757,107758],{},"简单理解：",[176,107760,107763],{"className":107761,"code":107762,"language":753,"meta":181},[751],"实际施加效果 ≈ data.ctrl[0] * gear\n",[183,107764,107762],{"__ignoreMap":181},[169,107766,107767],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107769,102684],{"id":102683},[176,107771,107773],{"className":31833,"code":107772,"language":31835,"meta":181,"style":181},"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",[183,107774,107775,107782,107786,107792,107802,107806,107810,107818,107823,107828,107832,107836,107841,107846,107850,107855,107860,107865,107870,107874,107878,107882,107887,107892,107897,107901,107905,107909,107913,107925,107937,107945,107949,107959,107969,107979,107983,107996,108009,108013,108030,108044,108079,108083,108087,108098,108113,108128,108140,108144,108148,108160],{"__ignoreMap":181},[186,107776,107777,107779],{"class":188,"line":189},[186,107778,31847],{"class":669},[186,107780,107781],{"class":202}," math\n",[186,107783,107784],{"class":188,"line":49},[186,107785,3867],{"emptyLinePlaceholder":1551},[186,107787,107788,107790],{"class":188,"line":219},[186,107789,31847],{"class":669},[186,107791,102732],{"class":202},[186,107793,107794,107796,107798,107800],{"class":188,"line":225},[186,107795,31847],{"class":669},[186,107797,32835],{"class":202},[186,107799,32838],{"class":669},[186,107801,32841],{"class":202},[186,107803,107804],{"class":188,"line":242},[186,107805,3867],{"emptyLinePlaceholder":1551},[186,107807,107808],{"class":188,"line":248},[186,107809,3867],{"emptyLinePlaceholder":1551},[186,107811,107812,107814,107816],{"class":188,"line":265},[186,107813,102745],{"class":206},[186,107815,15027],{"class":669},[186,107817,102750],{"class":532},[186,107819,107820],{"class":188,"line":271},[186,107821,107822],{"class":532},"\u003Cmujoco model=\"one_link_motor\">\n",[186,107824,107825],{"class":188,"line":288},[186,107826,107827],{"class":532},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[186,107829,107830],{"class":188,"line":294},[186,107831,3867],{"emptyLinePlaceholder":1551},[186,107833,107834],{"class":188,"line":1212},[186,107835,102769],{"class":532},[186,107837,107838],{"class":188,"line":1223},[186,107839,107840],{"class":532},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[186,107842,107843],{"class":188,"line":1236},[186,107844,107845],{"class":532},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[186,107847,107848],{"class":188,"line":3096},[186,107849,3867],{"emptyLinePlaceholder":1551},[186,107851,107852],{"class":188,"line":3110},[186,107853,107854],{"class":532},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[186,107856,107857],{"class":188,"line":3115},[186,107858,107859],{"class":532},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[186,107861,107862],{"class":188,"line":3121},[186,107863,107864],{"class":532},"        \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",[186,107866,107867],{"class":188,"line":3142},[186,107868,107869],{"class":532},"      \u003C\u002Fbody>\n",[186,107871,107872],{"class":188,"line":3147},[186,107873,102798],{"class":532},[186,107875,107876],{"class":188,"line":3161},[186,107877,102803],{"class":532},[186,107879,107880],{"class":188,"line":3166},[186,107881,3867],{"emptyLinePlaceholder":1551},[186,107883,107884],{"class":188,"line":3195},[186,107885,107886],{"class":532},"  \u003Cactuator>\n",[186,107888,107889],{"class":188,"line":3200},[186,107890,107891],{"class":532},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[186,107893,107894],{"class":188,"line":3217},[186,107895,107896],{"class":532},"  \u003C\u002Factuator>\n",[186,107898,107899],{"class":188,"line":3222},[186,107900,102808],{"class":532},[186,107902,107903],{"class":188,"line":3227},[186,107904,97129],{"class":532},[186,107906,107907],{"class":188,"line":3232},[186,107908,3867],{"emptyLinePlaceholder":1551},[186,107910,107911],{"class":188,"line":3246},[186,107912,3867],{"emptyLinePlaceholder":1551},[186,107914,107915,107917,107919,107921,107923],{"class":188,"line":3251},[186,107916,33402],{"class":669},[186,107918,3440],{"class":198},[186,107920,102829],{"class":202},[186,107922,97117],{"class":206},[186,107924,5205],{"class":202},[186,107926,107927,107929,107931,107933,107935],{"class":188,"line":4044},[186,107928,102838],{"class":202},[186,107930,529],{"class":669},[186,107932,102843],{"class":202},[186,107934,102745],{"class":206},[186,107936,1629],{"class":202},[186,107938,107939,107941,107943],{"class":188,"line":4058},[186,107940,102852],{"class":202},[186,107942,529],{"class":669},[186,107944,102857],{"class":202},[186,107946,107947],{"class":188,"line":4066},[186,107948,3867],{"emptyLinePlaceholder":1551},[186,107950,107951,107953,107955,107957],{"class":188,"line":4071},[186,107952,32754],{"class":206},[186,107954,832],{"class":202},[186,107956,102870],{"class":532},[186,107958,102873],{"class":202},[186,107960,107961,107963,107965,107967],{"class":188,"line":4077},[186,107962,32754],{"class":206},[186,107964,832],{"class":202},[186,107966,102882],{"class":532},[186,107968,102885],{"class":202},[186,107970,107971,107973,107975,107977],{"class":188,"line":4083},[186,107972,32754],{"class":206},[186,107974,832],{"class":202},[186,107976,102894],{"class":532},[186,107978,102897],{"class":202},[186,107980,107981],{"class":188,"line":4088},[186,107982,3867],{"emptyLinePlaceholder":1551},[186,107984,107985,107987,107990,107992,107994],{"class":188,"line":9411},[186,107986,4567],{"class":669},[186,107988,107989],{"class":202}," model.nu ",[186,107991,22409],{"class":669},[186,107993,26577],{"class":206},[186,107995,5205],{"class":202},[186,107997,107998,108000,108002,108004,108007],{"class":188,"line":9435},[186,107999,104863],{"class":669},[186,108001,104866],{"class":206},[186,108003,832],{"class":202},[186,108005,108006],{"class":532},"\"expected exactly one actuator\"",[186,108008,1629],{"class":202},[186,108010,108011],{"class":188,"line":9440},[186,108012,3867],{"emptyLinePlaceholder":1551},[186,108014,108015,108017,108019,108021,108023,108025,108028],{"class":188,"line":9446},[186,108016,4667],{"class":669},[186,108018,33071],{"class":202},[186,108020,27500],{"class":669},[186,108022,33898],{"class":206},[186,108024,832],{"class":202},[186,108026,108027],{"class":206},"2000",[186,108029,32241],{"class":202},[186,108031,108032,108035,108037,108039,108041],{"class":188,"line":9473},[186,108033,108034],{"class":202},"        t ",[186,108036,529],{"class":669},[186,108038,33071],{"class":202},[186,108040,2065],{"class":669},[186,108042,108043],{"class":202}," model.opt.timestep\n",[186,108045,108046,108049,108051,108053,108055,108058,108060,108063,108065,108067,108070,108072,108074,108076],{"class":188,"line":9478},[186,108047,108048],{"class":202},"        data.ctrl[",[186,108050,1803],{"class":206},[186,108052,5909],{"class":202},[186,108054,529],{"class":669},[186,108056,108057],{"class":206}," 1.5",[186,108059,7981],{"class":669},[186,108061,108062],{"class":202}," math.sin(",[186,108064,106691],{"class":206},[186,108066,7981],{"class":669},[186,108068,108069],{"class":202}," math.pi ",[186,108071,2065],{"class":669},[186,108073,63305],{"class":206},[186,108075,7981],{"class":669},[186,108077,108078],{"class":202}," t)\n",[186,108080,108081],{"class":188,"line":9484},[186,108082,102947],{"class":202},[186,108084,108085],{"class":188,"line":9496},[186,108086,3867],{"emptyLinePlaceholder":1551},[186,108088,108089,108091,108093,108096],{"class":188,"line":9508},[186,108090,32754],{"class":206},[186,108092,832],{"class":202},[186,108094,108095],{"class":532},"\"time:\"",[186,108097,102909],{"class":202},[186,108099,108100,108102,108104,108107,108109,108111],{"class":188,"line":9520},[186,108101,32754],{"class":206},[186,108103,832],{"class":202},[186,108105,108106],{"class":532},"\"joint qpos:\"",[186,108108,106361],{"class":202},[186,108110,1904],{"class":206},[186,108112,31952],{"class":202},[186,108114,108115,108117,108119,108122,108124,108126],{"class":188,"line":11179},[186,108116,32754],{"class":206},[186,108118,832],{"class":202},[186,108120,108121],{"class":532},"\"joint qvel:\"",[186,108123,106377],{"class":202},[186,108125,1904],{"class":206},[186,108127,31952],{"class":202},[186,108129,108130,108132,108134,108137],{"class":188,"line":11204},[186,108131,32754],{"class":206},[186,108133,832],{"class":202},[186,108135,108136],{"class":532},"\"last ctrl:\"",[186,108138,108139],{"class":202},", data.ctrl.copy())\n",[186,108141,108142],{"class":188,"line":11227},[186,108143,3867],{"emptyLinePlaceholder":1551},[186,108145,108146],{"class":188,"line":11251},[186,108147,3867],{"emptyLinePlaceholder":1551},[186,108149,108150,108152,108154,108156,108158],{"class":188,"line":11256},[186,108151,3003],{"class":669},[186,108153,32675],{"class":206},[186,108155,102990],{"class":669},[186,108157,102993],{"class":532},[186,108159,5205],{"class":202},[186,108161,108162],{"class":188,"line":11261},[186,108163,103000],{"class":202},[169,108165,105001],{},[176,108167,108169],{"className":25281,"code":108168,"language":25283,"meta":181,"style":181},"touch ch4_joint_motor.py\n",[183,108170,108171],{"__ignoreMap":181},[186,108172,108173,108175],{"class":188,"line":189},[186,108174,102714],{"class":198},[186,108176,108177],{"class":532}," ch4_joint_motor.py\n",[169,108179,103732],{},[176,108181,108183],{"className":25281,"code":108182,"language":25283,"meta":181,"style":181},"python ch4_joint_motor.py\n",[183,108184,108185],{"__ignoreMap":181},[186,108186,108187,108189],{"class":188,"line":189},[186,108188,31835],{"class":198},[186,108190,108177],{"class":532},[29,108192,103003],{"id":103003},[169,108194,108195],{},"检查 actuator 数量：",[176,108197,108199],{"className":31833,"code":108198,"language":31835,"meta":181,"style":181},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[183,108200,108201,108213],{"__ignoreMap":181},[186,108202,108203,108205,108207,108209,108211],{"class":188,"line":189},[186,108204,3003],{"class":669},[186,108206,107989],{"class":202},[186,108208,22409],{"class":669},[186,108210,26577],{"class":206},[186,108212,5205],{"class":202},[186,108214,108215,108217,108219,108221,108223],{"class":188,"line":49},[186,108216,105326],{"class":669},[186,108218,104866],{"class":206},[186,108220,832],{"class":202},[186,108222,108006],{"class":532},[186,108224,1629],{"class":202},[169,108226,108227,108229,108230,108232],{},[183,108228,103589],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[183,108231,102507],{}," 长度应该是 1。",[169,108234,108235],{},"产生正弦控制信号：",[176,108237,108239],{"className":31833,"code":108238,"language":31835,"meta":181,"style":181},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[183,108240,108241],{"__ignoreMap":181},[186,108242,108243,108245,108247,108249,108251,108253,108255,108257,108259,108261,108263,108265,108267,108269],{"class":188,"line":189},[186,108244,107302],{"class":202},[186,108246,1803],{"class":206},[186,108248,5909],{"class":202},[186,108250,529],{"class":669},[186,108252,108057],{"class":206},[186,108254,7981],{"class":669},[186,108256,108062],{"class":202},[186,108258,106691],{"class":206},[186,108260,7981],{"class":669},[186,108262,108069],{"class":202},[186,108264,2065],{"class":669},[186,108266,63305],{"class":206},[186,108268,7981],{"class":669},[186,108270,108078],{"class":202},[169,108272,108273],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[169,108275,103104],{},[176,108277,108278],{"className":31833,"code":105936,"language":31835,"meta":181,"style":181},[183,108279,108280],{"__ignoreMap":181},[186,108281,108282],{"class":188,"line":189},[186,108283,105936],{"class":202},[169,108285,108286],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[29,108288,103139],{"id":103139},[176,108290,108292],{"className":31833,"code":108291,"language":31835,"meta":181,"style":181},"import math\n",[183,108293,108294],{"__ignoreMap":181},[186,108295,108296,108298],{"class":188,"line":189},[186,108297,31847],{"class":669},[186,108299,107781],{"class":202},[169,108301,108302,108303,102449,108306,108309],{},"导入 Python 标准库里的数学模块。后面要用 ",[183,108304,108305],{},"math.sin",[183,108307,108308],{},"math.pi"," 生成周期变化的控制信号。",[176,108311,108312],{"className":31833,"code":105117,"language":31835,"meta":181,"style":181},[183,108313,108314,108320],{"__ignoreMap":181},[186,108315,108316,108318],{"class":188,"line":189},[186,108317,31847],{"class":669},[186,108319,102732],{"class":202},[186,108321,108322,108324,108326,108328],{"class":188,"line":49},[186,108323,31847],{"class":669},[186,108325,32835],{"class":202},[186,108327,32838],{"class":669},[186,108329,32841],{"class":202},[169,108331,108332],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[176,108334,108335],{"className":54514,"code":107618,"language":54516,"meta":181,"style":181},[183,108336,108337],{"__ignoreMap":181},[186,108338,108339,108341,108343,108345,108347,108349,108351,108353,108355,108357,108359,108361,108363,108365,108367],{"class":188,"line":189},[186,108340,520],{"class":202},[186,108342,104387],{"class":523},[186,108344,16382],{"class":198},[186,108346,529],{"class":202},[186,108348,107450],{"class":532},[186,108350,55269],{"class":198},[186,108352,529],{"class":202},[186,108354,107450],{"class":532},[186,108356,107459],{"class":198},[186,108358,529],{"class":202},[186,108360,107464],{"class":532},[186,108362,107647],{"class":198},[186,108364,529],{"class":202},[186,108366,107652],{"class":532},[186,108368,102575],{"class":202},[169,108370,108371,108372,108374,108375,108377,108378,108380],{},"这行定义关节。",[183,108373,107271],{}," 表示旋转关节。",[183,108376,107670],{}," 表示绕 y 轴旋转。",[183,108379,107676],{}," 表示有一点阻尼，运动不会完全无损耗。",[176,108382,108384],{"className":54514,"code":108383,"language":54516,"meta":181,"style":181},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[183,108385,108386],{"__ignoreMap":181},[186,108387,108388,108390,108392,108394,108396,108399,108401,108403,108406,108409,108411,108414,108416,108418,108420,108422,108424,108427],{"class":188,"line":189},[186,108389,520],{"class":202},[186,108391,102551],{"class":523},[186,108393,16382],{"class":198},[186,108395,529],{"class":202},[186,108397,108398],{"class":532},"\"link_geom\"",[186,108400,55269],{"class":198},[186,108402,529],{"class":202},[186,108404,108405],{"class":532},"\"capsule\"",[186,108407,108408],{"class":198}," fromto",[186,108410,529],{"class":202},[186,108412,108413],{"class":532},"\"0 0 0 0 0 0.5\"",[186,108415,102567],{"class":198},[186,108417,529],{"class":202},[186,108419,105209],{"class":532},[186,108421,103432],{"class":198},[186,108423,529],{"class":202},[186,108425,108426],{"class":532},"\"0.5\"",[186,108428,102575],{"class":202},[169,108430,108431,108432,108434,108435,108437,108438,108441,108442,913,108445,108447],{},"这行定义摆杆的形状。",[183,108433,104596],{}," 是胶囊体，适合表示杆子。",[183,108436,104607],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[183,108439,108440],{},"(0,0,0)"," 延伸到 ",[183,108443,108444],{},"(0,0,0.5)",[183,108446,104601],{}," 是半径。",[176,108449,108450],{"className":54514,"code":107684,"language":54516,"meta":181,"style":181},[183,108451,108452],{"__ignoreMap":181},[186,108453,108454,108456,108458,108460,108462,108464,108466,108468,108470,108472,108474,108476,108478,108480,108482,108484,108486,108488],{"class":188,"line":189},[186,108455,520],{"class":202},[186,108457,107505],{"class":523},[186,108459,16382],{"class":198},[186,108461,529],{"class":202},[186,108463,107512],{"class":532},[186,108465,107515],{"class":198},[186,108467,529],{"class":202},[186,108469,107450],{"class":532},[186,108471,107522],{"class":198},[186,108473,529],{"class":202},[186,108475,5144],{"class":532},[186,108477,107529],{"class":198},[186,108479,529],{"class":202},[186,108481,107534],{"class":532},[186,108483,107537],{"class":198},[186,108485,529],{"class":202},[186,108487,107542],{"class":532},[186,108489,102575],{"class":202},[169,108491,108492,108493,108495,108496,108499,108500,108502],{},"这行定义电机。它作用在 ",[183,108494,107271],{}," 关节上。",[183,108497,108498],{},"gear"," 可以理解成放大倍数。",[183,108501,107286],{}," 限制控制输入范围。",[176,108504,108505],{"className":31833,"code":108198,"language":31835,"meta":181,"style":181},[183,108506,108507,108519],{"__ignoreMap":181},[186,108508,108509,108511,108513,108515,108517],{"class":188,"line":189},[186,108510,3003],{"class":669},[186,108512,107989],{"class":202},[186,108514,22409],{"class":669},[186,108516,26577],{"class":206},[186,108518,5205],{"class":202},[186,108520,108521,108523,108525,108527,108529],{"class":188,"line":49},[186,108522,105326],{"class":669},[186,108524,104866],{"class":206},[186,108526,832],{"class":202},[186,108528,108006],{"class":532},[186,108530,1629],{"class":202},[169,108532,108533,108535],{},[183,108534,103589],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[176,108537,108539],{"className":31833,"code":108538,"language":31835,"meta":181,"style":181},"for step in range(2000):\n",[183,108540,108541],{"__ignoreMap":181},[186,108542,108543,108545,108547,108549,108551,108553,108555],{"class":188,"line":189},[186,108544,4491],{"class":669},[186,108546,33071],{"class":202},[186,108548,27500],{"class":669},[186,108550,33898],{"class":206},[186,108552,832],{"class":202},[186,108554,108027],{"class":206},[186,108556,32241],{"class":202},[169,108558,108559,108560,108562,108563,108566],{},"循环 2000 步。这里没有用 ",[183,108561,2599],{},"，而是用 ",[183,108564,108565],{},"step","，因为后面要用当前步数计算时间。",[176,108568,108570],{"className":31833,"code":108569,"language":31835,"meta":181,"style":181},"t = step * model.opt.timestep\n",[183,108571,108572],{"__ignoreMap":181},[186,108573,108574,108577,108579,108581,108583],{"class":188,"line":189},[186,108575,108576],{"class":202},"t ",[186,108578,529],{"class":669},[186,108580,33071],{"class":202},[186,108582,2065],{"class":669},[186,108584,108043],{"class":202},[169,108586,108587],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[176,108589,108590],{"className":31833,"code":108238,"language":31835,"meta":181,"style":181},[183,108591,108592],{"__ignoreMap":181},[186,108593,108594,108596,108598,108600,108602,108604,108606,108608,108610,108612,108614,108616,108618,108620],{"class":188,"line":189},[186,108595,107302],{"class":202},[186,108597,1803],{"class":206},[186,108599,5909],{"class":202},[186,108601,529],{"class":669},[186,108603,108057],{"class":206},[186,108605,7981],{"class":669},[186,108607,108062],{"class":202},[186,108609,106691],{"class":206},[186,108611,7981],{"class":669},[186,108613,108069],{"class":202},[186,108615,2065],{"class":669},[186,108617,63305],{"class":206},[186,108619,7981],{"class":669},[186,108621,108078],{"class":202},[169,108623,108624],{},"这行给电机输入一个正弦波。拆开看：",[34,108626,108627,108633,108639],{},[22,108628,108629,108632],{},[183,108630,108631],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[22,108634,108635,108638],{},[183,108636,108637],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[22,108640,108641,108644],{},[183,108642,108643],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[169,108646,108647],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[176,108649,108651],{"className":31833,"code":108650,"language":31835,"meta":181,"style":181},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[183,108652,108653],{"__ignoreMap":181},[186,108654,108655,108657,108659,108661,108663,108665],{"class":188,"line":189},[186,108656,31870],{"class":206},[186,108658,832],{"class":202},[186,108660,108106],{"class":532},[186,108662,106361],{"class":202},[186,108664,1904],{"class":206},[186,108666,31952],{"class":202},[169,108668,108669,108670,108672],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[183,108671,102501],{}," 只有一个数。",[14,108674,103747],{"id":103746},[169,108676,108677],{},"输出类似:",[176,108679,108682],{"className":108680,"code":108681,"language":753,"meta":181},[751],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[183,108683,108681],{"__ignoreMap":181},[169,108685,108686,108687,108689],{},"这里 ",[183,108688,107557],{}," 是电机输入。",[169,108691,108692,108695,108696,108699],{},[183,108693,108694],{},"joint qpos"," 是关节角度，单位通常是弧度。",[183,108697,108698],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[169,108701,108702],{},"角度单位提示：",[176,108704,108707],{"className":108705,"code":108706,"language":753,"meta":181},[751],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[183,108708,108706],{"__ignoreMap":181},[169,108710,108711,108712,108714,108715,108717],{},"如果你看到 ",[183,108713,105461],{}," 是 ",[183,108716,36784],{},"，大约就是 28.6 度。",[14,108719,103779],{"id":103778},[34,108721,108722,108729,108732,108739,108742,108750,108758],{},[22,108723,103842,108724,103845,108726,913],{},[183,108725,107742],{},[183,108727,108728],{},"gear=\"5\"",[22,108730,108731],{},"重新运行，观察关节运动是否更剧烈。",[22,108733,103842,108734,103845,108736,913],{},[183,108735,107286],{},[183,108737,108738],{},"-0.2 0.2",[22,108740,108741],{},"重新运行，观察控制能力是否变弱。",[22,108743,108744,108745,108747,108748,913],{},"去掉 actuator，确认 ",[183,108746,103589],{}," 变成 ",[183,108749,1803],{},[22,108751,103842,108752,103845,108754,108757],{},[183,108753,107676],{},[183,108755,108756],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[22,108759,103842,108760,103845,108762,108765],{},[183,108761,107670],{},[183,108763,108764],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108767,103884],{"id":103883},[29,108769,108771],{"id":108770},"indexerror-index-0-is-out-of-bounds",[183,108772,108773],{},"IndexError: index 0 is out of bounds",[169,108775,108776,108777,108779],{},"原因是 ",[183,108778,107423],{},"，没有 actuator。",[29,108781,108782],{"id":108782},"关节几乎不动",[169,108784,108785],{},"可能原因:",[34,108787,108788,108793,108797,108803],{},[22,108789,108790,108792],{},[183,108791,108498],{}," 太小",[22,108794,108795,108792],{},[183,108796,107286],{},[22,108798,108799,108802],{},[183,108800,108801],{},"damping"," 太大",[22,108804,108805],{},"重力方向导致运动不明显",[29,108807,108808],{"id":108808},"模型编译失败",[169,108810,108811,108812,108814],{},"检查 actuator 引用的 ",[183,108813,107733],{}," 是否存在，joint 名称是否拼写一致。",[29,108816,108818,108820],{"id":108817},"datactrl0-写了但没有效果",[183,108819,107557],{}," 写了但没有效果",[169,108822,104006],{},[34,108824,108825,108830,108833,108838,108843],{},[22,108826,108827,108829],{},[183,108828,103589],{}," 是否大于 0。",[22,108831,108832],{},"motor 是否引用了正确 joint。",[22,108834,108835,108837],{},[183,108836,108498],{}," 是否太小。",[22,108839,108840,108842],{},[183,108841,107286],{}," 是否把输入限制得太小。",[22,108844,108845],{},"body 是否真的有可动 joint。",[29,108847,108848],{"id":108848},"控制输入超过范围会怎样",[169,108850,108851],{},"如果设置了：",[176,108853,108855],{"className":54514,"code":108854,"language":54516,"meta":181,"style":181},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[183,108856,108857],{"__ignoreMap":181},[186,108858,108859],{"class":188,"line":189},[186,108860,108854],{"class":202},[169,108862,108863],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[176,108865,108867],{"className":31833,"code":108866,"language":31835,"meta":181,"style":181},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[183,108868,108869,108889],{"__ignoreMap":181},[186,108870,108871,108874,108876,108879,108881,108883,108885,108887],{"class":188,"line":189},[186,108872,108873],{"class":202},"action ",[186,108875,529],{"class":669},[186,108877,108878],{"class":202}," np.clip(action, ",[186,108880,2142],{"class":669},[186,108882,106691],{"class":206},[186,108884,13898],{"class":202},[186,108886,106691],{"class":206},[186,108888,1629],{"class":202},[186,108890,108891,108893,108895,108897,108899],{"class":188,"line":49},[186,108892,107302],{"class":202},[186,108894,1803],{"class":206},[186,108896,5909],{"class":202},[186,108898,529],{"class":669},[186,108900,108901],{"class":202}," action\n",[14,108903,104038],{"id":104037},[169,108905,108906],{},"这一章建立了控制任务的基本形式：",[176,108908,108911],{"className":108909,"code":108910,"language":753,"meta":181},[751],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[183,108912,108910],{"__ignoreMap":181},[169,108914,108915],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1524,108917,108918],{},"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":181,"searchDepth":49,"depth":49,"links":108920},[108921,108922,108923,108928,108932,108933,108934,108942],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":108924},[108925,108926,108927],{"id":107564,"depth":219,"text":107565},{"id":107614,"depth":219,"text":107615},{"id":107680,"depth":219,"text":107681},{"id":102683,"depth":49,"text":102684,"children":108929},[108930,108931],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":108935},[108936,108937,108938,108939,108941],{"id":108770,"depth":219,"text":108773},{"id":108782,"depth":219,"text":108782},{"id":108808,"depth":219,"text":108808},{"id":108817,"depth":219,"text":108940},"data.ctrl[0] 写了但没有效果",{"id":108848,"depth":219,"text":108848},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107252,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108949,"title":108950,"body":108951,"description":181,"extension":1549,"meta":110860,"navigation":1551,"path":110861,"seo":110862,"stem":110863,"__hash__":110864},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108952,"toc":110836},[108953,108956,108958,108961,108969,108972,108989,108992,109017,109020,109066,109068,109070,109125,109127,109146,109148,109191,109194,109211,109214,109230,109240,109247,109249,109252,109255,109289,109292,109340,109344,109347,109361,109370,109374,109377,109402,109405,109409,109422,109425,109431,109434,109449,109451,109454,109714,109716,109728,109731,110043,110045,110057,110059,110062,110077,110082,110085,110107,110110,110113,110147,110150,110154,110165,110168,110185,110188,110202,110209,110229,110236,110250,110253,110265,110280,110300,110303,110325,110328,110332,110347,110358,110373,110376,110406,110422,110451,110459,110483,110486,110504,110514,110526,110533,110542,110548,110557,110560,110562,110571,110574,110589,110591,110594,110605,110608,110619,110622,110640,110642,110659,110662,110690,110692,110696,110699,110729,110735,110738,110742,110750,110753,110755,110776,110779,110782,110798,110801,110817,110819,110822,110833],[10,108954,108950],{"id":108955},"_5viewer-可视化与-renderer-离屏渲染",[14,108957,102078],{"id":102077},[169,108959,108960],{},"本章掌握两类可视化方式:",[34,108962,108963,108966],{},[22,108964,108965],{},"交互式 viewer: 适合人工观察仿真",[22,108967,108968],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[169,108970,108971],{},"使用官方接口:",[176,108973,108975],{"className":31833,"code":108974,"language":31835,"meta":181,"style":181},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[183,108976,108977,108984],{"__ignoreMap":181},[186,108978,108979,108981],{"class":188,"line":189},[186,108980,31847],{"class":669},[186,108982,108983],{"class":202}," mujoco.viewer\n",[186,108985,108986],{"class":188,"line":49},[186,108987,108988],{"class":202},"mujoco.viewer.launch_passive(model, data)\n",[169,108990,108991],{},"以及:",[176,108993,108995],{"className":31833,"code":108994,"language":31835,"meta":181,"style":181},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[183,108996,108997,109007],{"__ignoreMap":181},[186,108998,108999,109002,109004],{"class":188,"line":189},[186,109000,109001],{"class":202},"renderer ",[186,109003,529],{"class":669},[186,109005,109006],{"class":202}," mujoco.Renderer(model)\n",[186,109008,109009,109012,109014],{"class":188,"line":49},[186,109010,109011],{"class":202},"image ",[186,109013,529],{"class":669},[186,109015,109016],{"class":202}," renderer.render()\n",[169,109018,109019],{},"新手建议先理解二者区别：",[99,109021,109022,109038],{},[102,109023,109024],{},[105,109025,109026,109029,109032,109035],{},[108,109027,109028],{"align":110},"工具",[108,109030,109031],{"align":110},"用途",[108,109033,109034],{"align":110},"是否打开窗口",[108,109036,109037],{"align":110},"常见场景",[116,109039,109040,109053],{},[105,109041,109042,109045,109048,109050],{},[121,109043,109044],{"align":110},"Viewer",[121,109046,109047],{"align":110},"人眼实时观察仿真",[121,109049,106096],{"align":110},[121,109051,109052],{"align":110},"调试模型、看控制效果",[105,109054,109055,109058,109061,109063],{},[121,109056,109057],{"align":110},"Renderer",[121,109059,109060],{"align":110},"生成图像数组",[121,109062,106109],{"align":110},[121,109064,109065],{"align":110},"保存图片、训练视觉策略、服务器批量采集",[14,109067,102201],{"id":102200},[169,109069,102204],{},[176,109071,109073],{"className":25281,"code":109072,"language":25283,"meta":181,"style":181},"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",[183,109074,109075,109087,109097,109105,109113],{"__ignoreMap":181},[186,109076,109077,109079,109081,109083,109085],{"class":188,"line":189},[186,109078,26035],{"class":198},[186,109080,27772],{"class":532},[186,109082,25293],{"class":532},[186,109084,27857],{"class":206},[186,109086,26137],{"class":206},[186,109088,109089,109091,109093,109095],{"class":188,"line":49},[186,109090,102239],{"class":532},[186,109092,102242],{"class":532},[186,109094,102245],{"class":532},[186,109096,26137],{"class":206},[186,109098,109099,109101,109103],{"class":188,"line":219},[186,109100,102252],{"class":532},[186,109102,102255],{"class":532},[186,109104,26137],{"class":206},[186,109106,109107,109109,109111],{"class":188,"line":225},[186,109108,102262],{"class":532},[186,109110,102265],{"class":532},[186,109112,26137],{"class":206},[186,109114,109115,109117,109119,109121,109123],{"class":188,"line":242},[186,109116,102272],{"class":532},[186,109118,102275],{"class":532},[186,109120,102278],{"class":532},[186,109122,102281],{"class":532},[186,109124,103947],{"class":532},[169,109126,104250],{},[176,109128,109130],{"className":25281,"code":109129,"language":25283,"meta":181,"style":181},"pip install \"mujoco>=2.3\" numpy pillow\n",[183,109131,109132],{"__ignoreMap":181},[186,109133,109134,109136,109138,109140,109143],{"class":188,"line":189},[186,109135,25290],{"class":198},[186,109137,25293],{"class":532},[186,109139,102361],{"class":532},[186,109141,109142],{"class":532}," numpy",[186,109144,109145],{"class":532}," pillow\n",[169,109147,104267],{},[176,109149,109151],{"className":25281,"code":109150,"language":25283,"meta":181,"style":181},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[183,109152,109153,109170,109179],{"__ignoreMap":181},[186,109154,109155,109157,109159,109161,109164,109166,109168],{"class":188,"line":189},[186,109156,31785],{"class":198},[186,109158,30631],{"class":532},[186,109160,26574],{"class":206},[186,109162,109163],{"class":532}," mujoco-render",[186,109165,102406],{"class":532},[186,109167,102409],{"class":206},[186,109169,102412],{"class":206},[186,109171,109172,109174,109176],{"class":188,"line":49},[186,109173,31785],{"class":198},[186,109175,102419],{"class":532},[186,109177,109178],{"class":532}," mujoco-render\n",[186,109180,109181,109183,109185,109187,109189],{"class":188,"line":219},[186,109182,25290],{"class":198},[186,109184,25293],{"class":532},[186,109186,102361],{"class":532},[186,109188,109142],{"class":532},[186,109190,109145],{"class":532},[169,109192,109193],{},"离屏渲染后端:",[176,109195,109197],{"className":25281,"code":109196,"language":25283,"meta":181,"style":181},"export MUJOCO_GL=egl\n",[183,109198,109199],{"__ignoreMap":181},[186,109200,109201,109203,109206,109208],{"class":188,"line":189},[186,109202,26501],{"class":669},[186,109204,109205],{"class":202}," MUJOCO_GL",[186,109207,529],{"class":669},[186,109209,109210],{"class":202},"egl\n",[169,109212,109213],{},"或:",[176,109215,109217],{"className":25281,"code":109216,"language":25283,"meta":181,"style":181},"export MUJOCO_GL=osmesa\n",[183,109218,109219],{"__ignoreMap":181},[186,109220,109221,109223,109225,109227],{"class":188,"line":189},[186,109222,26501],{"class":669},[186,109224,109205],{"class":202},[186,109226,529],{"class":669},[186,109228,109229],{"class":202},"osmesa\n",[169,109231,109232,109233,109236,109237,913],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[183,109234,109235],{},"egl"," 失败，再尝试 ",[183,109238,109239],{},"osmesa",[169,109241,109242,109243,109246],{},"如果你在本机桌面环境运行，通常先不要设置 ",[183,109244,109245],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109248,102476],{"id":102475},[169,109250,109251],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[169,109253,109254],{},"典型 viewer 流程:",[176,109256,109258],{"className":31833,"code":109257,"language":31835,"meta":181,"style":181},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[183,109259,109260,109273,109280,109284],{"__ignoreMap":181},[186,109261,109262,109265,109268,109270],{"class":188,"line":189},[186,109263,109264],{"class":669},"with",[186,109266,109267],{"class":202}," mujoco.viewer.launch_passive(model, data) ",[186,109269,32838],{"class":669},[186,109271,109272],{"class":202}," viewer:\n",[186,109274,109275,109277],{"class":188,"line":49},[186,109276,3718],{"class":669},[186,109278,109279],{"class":202}," viewer.is_running():\n",[186,109281,109282],{"class":188,"line":219},[186,109283,102947],{"class":202},[186,109285,109286],{"class":188,"line":225},[186,109287,109288],{"class":202},"        viewer.sync()\n",[169,109290,109291],{},"典型 renderer 流程:",[176,109293,109295],{"className":31833,"code":109294,"language":31835,"meta":181,"style":181},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[183,109296,109297,109323,109327,109332],{"__ignoreMap":181},[186,109298,109299,109301,109303,109306,109308,109310,109312,109314,109316,109318,109321],{"class":188,"line":189},[186,109300,109001],{"class":202},[186,109302,529],{"class":669},[186,109304,109305],{"class":202}," mujoco.Renderer(model, ",[186,109307,26440],{"class":835},[186,109309,529],{"class":669},[186,109311,43796],{"class":206},[186,109313,13898],{"class":202},[186,109315,26436],{"class":835},[186,109317,529],{"class":669},[186,109319,109320],{"class":206},"640",[186,109322,1629],{"class":202},[186,109324,109325],{"class":188,"line":49},[186,109326,105936],{"class":202},[186,109328,109329],{"class":188,"line":219},[186,109330,109331],{"class":202},"renderer.update_scene(data)\n",[186,109333,109334,109336,109338],{"class":188,"line":225},[186,109335,109011],{"class":202},[186,109337,529],{"class":669},[186,109339,109016],{"class":202},[29,109341,109343],{"id":109342},"viewer-的同步逻辑","viewer 的同步逻辑",[169,109345,109346],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[176,109348,109350],{"className":31833,"code":109349,"language":31835,"meta":181,"style":181},"mujoco.mj_step(model, data)\nviewer.sync()\n",[183,109351,109352,109356],{"__ignoreMap":181},[186,109353,109354],{"class":188,"line":189},[186,109355,105936],{"class":202},[186,109357,109358],{"class":188,"line":49},[186,109359,109360],{"class":202},"viewer.sync()\n",[169,109362,109363,109365,109366,109369],{},[183,109364,102646],{}," 负责算物理，",[183,109367,109368],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[29,109371,109373],{"id":109372},"为什么要-sleep","为什么要 sleep",[169,109375,109376],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[176,109378,109380],{"className":31833,"code":109379,"language":31835,"meta":181,"style":181},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[183,109381,109382],{"__ignoreMap":181},[186,109383,109384,109387,109389,109392,109394,109397,109399],{"class":188,"line":189},[186,109385,109386],{"class":202},"sleep_time ",[186,109388,529],{"class":669},[186,109390,109391],{"class":202}," model.opt.timestep ",[186,109393,2142],{"class":669},[186,109395,109396],{"class":202}," (time.time() ",[186,109398,2142],{"class":669},[186,109400,109401],{"class":202}," step_start)\n",[169,109403,109404],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[29,109406,109408],{"id":109407},"renderer-输出是什么","renderer 输出是什么",[176,109410,109412],{"className":31833,"code":109411,"language":31835,"meta":181,"style":181},"image = renderer.render()\n",[183,109413,109414],{"__ignoreMap":181},[186,109415,109416,109418,109420],{"class":188,"line":189},[186,109417,109011],{"class":202},[186,109419,529],{"class":669},[186,109421,109016],{"class":202},[169,109423,109424],{},"得到的是 NumPy 数组，形状通常是：",[176,109426,109429],{"className":109427,"code":109428,"language":753,"meta":181},[751],"(height, width, 3)\n",[183,109430,109428],{"__ignoreMap":181},[169,109432,109433],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[176,109435,109437],{"className":31833,"code":109436,"language":31835,"meta":181,"style":181},"Image.fromarray(image).save(\"render_output.png\")\n",[183,109438,109439],{"__ignoreMap":181},[186,109440,109441,109444,109447],{"class":188,"line":189},[186,109442,109443],{"class":202},"Image.fromarray(image).save(",[186,109445,109446],{"class":532},"\"render_output.png\"",[186,109448,1629],{"class":202},[14,109450,102684],{"id":102683},[169,109452,109453],{},"交互式 Viewer:",[176,109455,109457],{"className":31833,"code":109456,"language":31835,"meta":181,"style":181},"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",[183,109458,109459,109465,109469,109475,109481,109485,109489,109497,109502,109506,109510,109514,109519,109524,109528,109532,109536,109541,109545,109549,109553,109557,109561,109565,109577,109589,109597,109601,109611,109631,109641,109646,109651,109655,109672,109685,109690,109694,109698,109710],{"__ignoreMap":181},[186,109460,109461,109463],{"class":188,"line":189},[186,109462,31847],{"class":669},[186,109464,33284],{"class":202},[186,109466,109467],{"class":188,"line":49},[186,109468,3867],{"emptyLinePlaceholder":1551},[186,109470,109471,109473],{"class":188,"line":219},[186,109472,31847],{"class":669},[186,109474,102732],{"class":202},[186,109476,109477,109479],{"class":188,"line":225},[186,109478,31847],{"class":669},[186,109480,108983],{"class":202},[186,109482,109483],{"class":188,"line":242},[186,109484,3867],{"emptyLinePlaceholder":1551},[186,109486,109487],{"class":188,"line":248},[186,109488,3867],{"emptyLinePlaceholder":1551},[186,109490,109491,109493,109495],{"class":188,"line":265},[186,109492,102745],{"class":206},[186,109494,15027],{"class":669},[186,109496,102750],{"class":532},[186,109498,109499],{"class":188,"line":271},[186,109500,109501],{"class":532},"\u003Cmujoco model=\"viewer_demo\">\n",[186,109503,109504],{"class":188,"line":288},[186,109505,102760],{"class":532},[186,109507,109508],{"class":188,"line":294},[186,109509,3867],{"emptyLinePlaceholder":1551},[186,109511,109512],{"class":188,"line":1212},[186,109513,102769],{"class":532},[186,109515,109516],{"class":188,"line":1223},[186,109517,109518],{"class":532},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[186,109520,109521],{"class":188,"line":1236},[186,109522,109523],{"class":532},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[186,109525,109526],{"class":188,"line":3096},[186,109527,3867],{"emptyLinePlaceholder":1551},[186,109529,109530],{"class":188,"line":3110},[186,109531,102783],{"class":532},[186,109533,109534],{"class":188,"line":3115},[186,109535,102788],{"class":532},[186,109537,109538],{"class":188,"line":3121},[186,109539,109540],{"class":532},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[186,109542,109543],{"class":188,"line":3142},[186,109544,102798],{"class":532},[186,109546,109547],{"class":188,"line":3147},[186,109548,102803],{"class":532},[186,109550,109551],{"class":188,"line":3161},[186,109552,102808],{"class":532},[186,109554,109555],{"class":188,"line":3166},[186,109556,97129],{"class":532},[186,109558,109559],{"class":188,"line":3195},[186,109560,3867],{"emptyLinePlaceholder":1551},[186,109562,109563],{"class":188,"line":3200},[186,109564,3867],{"emptyLinePlaceholder":1551},[186,109566,109567,109569,109571,109573,109575],{"class":188,"line":3217},[186,109568,33402],{"class":669},[186,109570,3440],{"class":198},[186,109572,102829],{"class":202},[186,109574,97117],{"class":206},[186,109576,5205],{"class":202},[186,109578,109579,109581,109583,109585,109587],{"class":188,"line":3222},[186,109580,102838],{"class":202},[186,109582,529],{"class":669},[186,109584,102843],{"class":202},[186,109586,102745],{"class":206},[186,109588,1629],{"class":202},[186,109590,109591,109593,109595],{"class":188,"line":3227},[186,109592,102852],{"class":202},[186,109594,529],{"class":669},[186,109596,102857],{"class":202},[186,109598,109599],{"class":188,"line":3232},[186,109600,3867],{"emptyLinePlaceholder":1551},[186,109602,109603,109605,109607,109609],{"class":188,"line":3246},[186,109604,35633],{"class":669},[186,109606,109267],{"class":202},[186,109608,32838],{"class":669},[186,109610,109272],{"class":202},[186,109612,109613,109616,109619,109621,109624,109626,109629],{"class":188,"line":3251},[186,109614,109615],{"class":669},"        while",[186,109617,109618],{"class":202}," viewer.is_running() ",[186,109620,31917],{"class":669},[186,109622,109623],{"class":202}," data.time ",[186,109625,520],{"class":669},[186,109627,109628],{"class":206}," 5.0",[186,109630,5205],{"class":202},[186,109632,109633,109636,109638],{"class":188,"line":4044},[186,109634,109635],{"class":202},"            step_start ",[186,109637,529],{"class":669},[186,109639,109640],{"class":202}," time.time()\n",[186,109642,109643],{"class":188,"line":4058},[186,109644,109645],{"class":202},"            mujoco.mj_step(model, data)\n",[186,109647,109648],{"class":188,"line":4066},[186,109649,109650],{"class":202},"            viewer.sync()\n",[186,109652,109653],{"class":188,"line":4071},[186,109654,3867],{"emptyLinePlaceholder":1551},[186,109656,109657,109660,109662,109664,109666,109668,109670],{"class":188,"line":4077},[186,109658,109659],{"class":202},"            sleep_time ",[186,109661,529],{"class":669},[186,109663,109391],{"class":202},[186,109665,2142],{"class":669},[186,109667,109396],{"class":202},[186,109669,2142],{"class":669},[186,109671,109401],{"class":202},[186,109673,109674,109676,109679,109681,109683],{"class":188,"line":4083},[186,109675,6108],{"class":669},[186,109677,109678],{"class":202}," sleep_time ",[186,109680,2567],{"class":669},[186,109682,5559],{"class":206},[186,109684,5205],{"class":202},[186,109686,109687],{"class":188,"line":4088},[186,109688,109689],{"class":202},"                time.sleep(sleep_time)\n",[186,109691,109692],{"class":188,"line":9411},[186,109693,3867],{"emptyLinePlaceholder":1551},[186,109695,109696],{"class":188,"line":9435},[186,109697,3867],{"emptyLinePlaceholder":1551},[186,109699,109700,109702,109704,109706,109708],{"class":188,"line":9440},[186,109701,3003],{"class":669},[186,109703,32675],{"class":206},[186,109705,102990],{"class":669},[186,109707,102993],{"class":532},[186,109709,5205],{"class":202},[186,109711,109712],{"class":188,"line":9446},[186,109713,103000],{"class":202},[169,109715,105001],{},[176,109717,109719],{"className":25281,"code":109718,"language":25283,"meta":181,"style":181},"touch ch5_viewer.py\n",[183,109720,109721],{"__ignoreMap":181},[186,109722,109723,109725],{"class":188,"line":189},[186,109724,102714],{"class":198},[186,109726,109727],{"class":532}," ch5_viewer.py\n",[169,109729,109730],{},"离屏 Renderer 保存图片:",[176,109732,109734],{"className":31833,"code":109733,"language":31835,"meta":181,"style":181},"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",[183,109735,109736,109748,109752,109758,109768,109772,109776,109784,109789,109793,109797,109801,109805,109810,109814,109818,109822,109826,109830,109834,109838,109842,109846,109850,109854,109866,109878,109886,109911,109915,109931,109935,109939,109954,109963,109967,109981,109986,109991,109995,110007,110019,110023,110027,110039],{"__ignoreMap":181},[186,109737,109738,109740,109743,109745],{"class":188,"line":189},[186,109739,32192],{"class":669},[186,109741,109742],{"class":202}," pathlib ",[186,109744,31847],{"class":669},[186,109746,109747],{"class":202}," Path\n",[186,109749,109750],{"class":188,"line":49},[186,109751,3867],{"emptyLinePlaceholder":1551},[186,109753,109754,109756],{"class":188,"line":219},[186,109755,31847],{"class":669},[186,109757,102732],{"class":202},[186,109759,109760,109762,109764,109766],{"class":188,"line":225},[186,109761,32192],{"class":669},[186,109763,48717],{"class":206},[186,109765,48720],{"class":669},[186,109767,48723],{"class":202},[186,109769,109770],{"class":188,"line":242},[186,109771,3867],{"emptyLinePlaceholder":1551},[186,109773,109774],{"class":188,"line":248},[186,109775,3867],{"emptyLinePlaceholder":1551},[186,109777,109778,109780,109782],{"class":188,"line":265},[186,109779,102745],{"class":206},[186,109781,15027],{"class":669},[186,109783,102750],{"class":532},[186,109785,109786],{"class":188,"line":271},[186,109787,109788],{"class":532},"\u003Cmujoco model=\"renderer_demo\">\n",[186,109790,109791],{"class":188,"line":288},[186,109792,102760],{"class":532},[186,109794,109795],{"class":188,"line":294},[186,109796,3867],{"emptyLinePlaceholder":1551},[186,109798,109799],{"class":188,"line":1212},[186,109800,102769],{"class":532},[186,109802,109803],{"class":188,"line":1223},[186,109804,109518],{"class":532},[186,109806,109807],{"class":188,"line":1236},[186,109808,109809],{"class":532},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[186,109811,109812],{"class":188,"line":3096},[186,109813,109523],{"class":532},[186,109815,109816],{"class":188,"line":3110},[186,109817,3867],{"emptyLinePlaceholder":1551},[186,109819,109820],{"class":188,"line":3115},[186,109821,102783],{"class":532},[186,109823,109824],{"class":188,"line":3121},[186,109825,102788],{"class":532},[186,109827,109828],{"class":188,"line":3142},[186,109829,109540],{"class":532},[186,109831,109832],{"class":188,"line":3147},[186,109833,102798],{"class":532},[186,109835,109836],{"class":188,"line":3161},[186,109837,102803],{"class":532},[186,109839,109840],{"class":188,"line":3166},[186,109841,102808],{"class":532},[186,109843,109844],{"class":188,"line":3195},[186,109845,97129],{"class":532},[186,109847,109848],{"class":188,"line":3200},[186,109849,3867],{"emptyLinePlaceholder":1551},[186,109851,109852],{"class":188,"line":3217},[186,109853,3867],{"emptyLinePlaceholder":1551},[186,109855,109856,109858,109860,109862,109864],{"class":188,"line":3222},[186,109857,33402],{"class":669},[186,109859,3440],{"class":198},[186,109861,102829],{"class":202},[186,109863,97117],{"class":206},[186,109865,5205],{"class":202},[186,109867,109868,109870,109872,109874,109876],{"class":188,"line":3227},[186,109869,102838],{"class":202},[186,109871,529],{"class":669},[186,109873,102843],{"class":202},[186,109875,102745],{"class":206},[186,109877,1629],{"class":202},[186,109879,109880,109882,109884],{"class":188,"line":3232},[186,109881,102852],{"class":202},[186,109883,529],{"class":669},[186,109885,102857],{"class":202},[186,109887,109888,109891,109893,109895,109897,109899,109901,109903,109905,109907,109909],{"class":188,"line":3246},[186,109889,109890],{"class":202},"    renderer ",[186,109892,529],{"class":669},[186,109894,109305],{"class":202},[186,109896,26440],{"class":835},[186,109898,529],{"class":669},[186,109900,43796],{"class":206},[186,109902,13898],{"class":202},[186,109904,26436],{"class":835},[186,109906,529],{"class":669},[186,109908,109320],{"class":206},[186,109910,1629],{"class":202},[186,109912,109913],{"class":188,"line":3251},[186,109914,3867],{"emptyLinePlaceholder":1551},[186,109916,109917,109919,109921,109923,109925,109927,109929],{"class":188,"line":4044},[186,109918,4667],{"class":669},[186,109920,102932],{"class":202},[186,109922,27500],{"class":669},[186,109924,33898],{"class":206},[186,109926,832],{"class":202},[186,109928,1922],{"class":206},[186,109930,32241],{"class":202},[186,109932,109933],{"class":188,"line":4058},[186,109934,102947],{"class":202},[186,109936,109937],{"class":188,"line":4066},[186,109938,3867],{"emptyLinePlaceholder":1551},[186,109940,109941,109944,109947,109949,109952],{"class":188,"line":4071},[186,109942,109943],{"class":202},"    renderer.update_scene(data, ",[186,109945,109946],{"class":835},"camera",[186,109948,529],{"class":669},[186,109950,109951],{"class":532},"\"fixed_camera\"",[186,109953,1629],{"class":202},[186,109955,109956,109959,109961],{"class":188,"line":4077},[186,109957,109958],{"class":202},"    image ",[186,109960,529],{"class":669},[186,109962,109016],{"class":202},[186,109964,109965],{"class":188,"line":4083},[186,109966,3867],{"emptyLinePlaceholder":1551},[186,109968,109969,109972,109974,109977,109979],{"class":188,"line":4088},[186,109970,109971],{"class":202},"    output_path ",[186,109973,529],{"class":669},[186,109975,109976],{"class":202}," Path(",[186,109978,109446],{"class":532},[186,109980,1629],{"class":202},[186,109982,109983],{"class":188,"line":9411},[186,109984,109985],{"class":202},"    Image.fromarray(image).save(output_path)\n",[186,109987,109988],{"class":188,"line":9435},[186,109989,109990],{"class":202},"    renderer.close()\n",[186,109992,109993],{"class":188,"line":9440},[186,109994,3867],{"emptyLinePlaceholder":1551},[186,109996,109997,109999,110001,110004],{"class":188,"line":9446},[186,109998,32754],{"class":206},[186,110000,832],{"class":202},[186,110002,110003],{"class":532},"\"saved:\"",[186,110005,110006],{"class":202},", output_path.resolve())\n",[186,110008,110009,110011,110013,110016],{"class":188,"line":9473},[186,110010,32754],{"class":206},[186,110012,832],{"class":202},[186,110014,110015],{"class":532},"\"image shape:\"",[186,110017,110018],{"class":202},", image.shape)\n",[186,110020,110021],{"class":188,"line":9478},[186,110022,3867],{"emptyLinePlaceholder":1551},[186,110024,110025],{"class":188,"line":9484},[186,110026,3867],{"emptyLinePlaceholder":1551},[186,110028,110029,110031,110033,110035,110037],{"class":188,"line":9496},[186,110030,3003],{"class":669},[186,110032,32675],{"class":206},[186,110034,102990],{"class":669},[186,110036,102993],{"class":532},[186,110038,5205],{"class":202},[186,110040,110041],{"class":188,"line":9508},[186,110042,103000],{"class":202},[169,110044,105001],{},[176,110046,110048],{"className":25281,"code":110047,"language":25283,"meta":181,"style":181},"touch ch5_renderer.py\n",[183,110049,110050],{"__ignoreMap":181},[186,110051,110052,110054],{"class":188,"line":189},[186,110053,102714],{"class":198},[186,110055,110056],{"class":532}," ch5_renderer.py\n",[29,110058,103003],{"id":103003},[169,110060,110061],{},"viewer 上下文：",[176,110063,110065],{"className":31833,"code":110064,"language":31835,"meta":181,"style":181},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[183,110066,110067],{"__ignoreMap":181},[186,110068,110069,110071,110073,110075],{"class":188,"line":189},[186,110070,109264],{"class":669},[186,110072,109267],{"class":202},[186,110074,32838],{"class":669},[186,110076,109272],{"class":202},[169,110078,110079,110081],{},[183,110080,109264],{}," 语句会创建窗口，并在退出时自动清理资源。",[169,110083,110084],{},"窗口循环：",[176,110086,110088],{"className":31833,"code":110087,"language":31835,"meta":181,"style":181},"while viewer.is_running() and data.time \u003C 5.0:\n",[183,110089,110090],{"__ignoreMap":181},[186,110091,110092,110095,110097,110099,110101,110103,110105],{"class":188,"line":189},[186,110093,110094],{"class":669},"while",[186,110096,109618],{"class":202},[186,110098,31917],{"class":669},[186,110100,109623],{"class":202},[186,110102,520],{"class":669},[186,110104,109628],{"class":206},[186,110106,5205],{"class":202},[169,110108,110109],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[169,110111,110112],{},"固定相机：",[176,110114,110116],{"className":54514,"code":110115,"language":54516,"meta":181,"style":181},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[183,110117,110118],{"__ignoreMap":181},[186,110119,110120,110122,110124,110126,110128,110130,110132,110134,110137,110140,110142,110145],{"class":188,"line":189},[186,110121,520],{"class":202},[186,110123,109946],{"class":523},[186,110125,16382],{"class":198},[186,110127,529],{"class":202},[186,110129,109951],{"class":532},[186,110131,102537],{"class":198},[186,110133,529],{"class":202},[186,110135,110136],{"class":532},"\"1.5 -2.0 1.2\"",[186,110138,110139],{"class":198}," xyaxes",[186,110141,529],{"class":202},[186,110143,110144],{"class":532},"\"1 0.75 0 0 0 1\"",[186,110146,102575],{"class":202},[169,110148,110149],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[29,110151,110153],{"id":110152},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[176,110155,110157],{"className":31833,"code":110156,"language":31835,"meta":181,"style":181},"import time\n",[183,110158,110159],{"__ignoreMap":181},[186,110160,110161,110163],{"class":188,"line":189},[186,110162,31847],{"class":669},[186,110164,33284],{"class":202},[169,110166,110167],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[176,110169,110171],{"className":31833,"code":110170,"language":31835,"meta":181,"style":181},"import mujoco\nimport mujoco.viewer\n",[183,110172,110173,110179],{"__ignoreMap":181},[186,110174,110175,110177],{"class":188,"line":189},[186,110176,31847],{"class":669},[186,110178,102732],{"class":202},[186,110180,110181,110183],{"class":188,"line":49},[186,110182,31847],{"class":669},[186,110184,108983],{"class":202},[169,110186,110187],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[176,110189,110190],{"className":31833,"code":110064,"language":31835,"meta":181,"style":181},[183,110191,110192],{"__ignoreMap":181},[186,110193,110194,110196,110198,110200],{"class":188,"line":189},[186,110195,109264],{"class":669},[186,110197,109267],{"class":202},[186,110199,32838],{"class":669},[186,110201,109272],{"class":202},[169,110203,110204,110205,110208],{},"打开一个 viewer 窗口。",[183,110206,110207],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[176,110210,110211],{"className":31833,"code":110087,"language":31835,"meta":181,"style":181},[183,110212,110213],{"__ignoreMap":181},[186,110214,110215,110217,110219,110221,110223,110225,110227],{"class":188,"line":189},[186,110216,110094],{"class":669},[186,110218,109618],{"class":202},[186,110220,31917],{"class":669},[186,110222,109623],{"class":202},[186,110224,520],{"class":669},[186,110226,109628],{"class":206},[186,110228,5205],{"class":202},[169,110230,110231,110232,110235],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[183,110233,110234],{},"viewer.is_running()"," 会变成 false，循环结束。",[176,110237,110239],{"className":31833,"code":110238,"language":31835,"meta":181,"style":181},"step_start = time.time()\n",[183,110240,110241],{"__ignoreMap":181},[186,110242,110243,110246,110248],{"class":188,"line":189},[186,110244,110245],{"class":202},"step_start ",[186,110247,529],{"class":669},[186,110249,109640],{"class":202},[169,110251,110252],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[176,110254,110255],{"className":31833,"code":109349,"language":31835,"meta":181,"style":181},[183,110256,110257,110261],{"__ignoreMap":181},[186,110258,110259],{"class":188,"line":189},[186,110260,105936],{"class":202},[186,110262,110263],{"class":188,"line":49},[186,110264,109360],{"class":202},[169,110266,110267,110269,110270,110272,110273,110275,110276,110279],{},[183,110268,102646],{}," 推进物理仿真。",[183,110271,109368],{}," 把最新的 ",[183,110274,34856],{}," 同步到窗口里显示。没有 ",[183,110277,110278],{},"sync()","，窗口可能看不到最新状态。",[176,110281,110282],{"className":31833,"code":109379,"language":31835,"meta":181,"style":181},[183,110283,110284],{"__ignoreMap":181},[186,110285,110286,110288,110290,110292,110294,110296,110298],{"class":188,"line":189},[186,110287,109386],{"class":202},[186,110289,529],{"class":669},[186,110291,109391],{"class":202},[186,110293,2142],{"class":669},[186,110295,109396],{"class":202},[186,110297,2142],{"class":669},[186,110299,109401],{"class":202},[169,110301,110302],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[176,110304,110306],{"className":31833,"code":110305,"language":31835,"meta":181,"style":181},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[183,110307,110308,110320],{"__ignoreMap":181},[186,110309,110310,110312,110314,110316,110318],{"class":188,"line":189},[186,110311,3003],{"class":669},[186,110313,109678],{"class":202},[186,110315,2567],{"class":669},[186,110317,5559],{"class":206},[186,110319,5205],{"class":202},[186,110321,110322],{"class":188,"line":49},[186,110323,110324],{"class":202},"    time.sleep(sleep_time)\n",[169,110326,110327],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[29,110329,110331],{"id":110330},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[176,110333,110335],{"className":31833,"code":110334,"language":31835,"meta":181,"style":181},"from pathlib import Path\n",[183,110336,110337],{"__ignoreMap":181},[186,110338,110339,110341,110343,110345],{"class":188,"line":189},[186,110340,32192],{"class":669},[186,110342,109742],{"class":202},[186,110344,31847],{"class":669},[186,110346,109747],{"class":202},[169,110348,110349,110350,110353,110354,110357],{},"导入 ",[183,110351,110352],{},"Path","，用来处理文件路径。相比直接写字符串，",[183,110355,110356],{},"Path(\"render_output.png\")"," 更清晰。",[176,110359,110361],{"className":31833,"code":110360,"language":31835,"meta":181,"style":181},"from PIL import Image\n",[183,110362,110363],{"__ignoreMap":181},[186,110364,110365,110367,110369,110371],{"class":188,"line":189},[186,110366,32192],{"class":669},[186,110368,48717],{"class":206},[186,110370,48720],{"class":669},[186,110372,48723],{"class":202},[169,110374,110375],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[176,110377,110378],{"className":54514,"code":110115,"language":54516,"meta":181,"style":181},[183,110379,110380],{"__ignoreMap":181},[186,110381,110382,110384,110386,110388,110390,110392,110394,110396,110398,110400,110402,110404],{"class":188,"line":189},[186,110383,520],{"class":202},[186,110385,109946],{"class":523},[186,110387,16382],{"class":198},[186,110389,529],{"class":202},[186,110391,109951],{"class":532},[186,110393,102537],{"class":198},[186,110395,529],{"class":202},[186,110397,110136],{"class":532},[186,110399,110139],{"class":198},[186,110401,529],{"class":202},[186,110403,110144],{"class":532},[186,110405,102575],{"class":202},[169,110407,110408,110409,110411,110412,110414,110415,110418,110419,110421],{},"定义一个相机。",[183,110410,81242],{}," 是相机名字。",[183,110413,105577],{}," 是相机在世界里的位置。",[183,110416,110417],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[183,110420,105577],{}," 来调视角。",[176,110423,110425],{"className":31833,"code":110424,"language":31835,"meta":181,"style":181},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[183,110426,110427],{"__ignoreMap":181},[186,110428,110429,110431,110433,110435,110437,110439,110441,110443,110445,110447,110449],{"class":188,"line":189},[186,110430,109001],{"class":202},[186,110432,529],{"class":669},[186,110434,109305],{"class":202},[186,110436,26440],{"class":835},[186,110438,529],{"class":669},[186,110440,43796],{"class":206},[186,110442,13898],{"class":202},[186,110444,26436],{"class":835},[186,110446,529],{"class":669},[186,110448,109320],{"class":206},[186,110450,1629],{"class":202},[169,110452,110453,110454,102449,110456,110458],{},"创建离屏渲染器。",[183,110455,26440],{},[183,110457,26436],{}," 决定输出图片大小。",[176,110460,110461],{"className":31833,"code":103107,"language":31835,"meta":181,"style":181},[183,110462,110463,110479],{"__ignoreMap":181},[186,110464,110465,110467,110469,110471,110473,110475,110477],{"class":188,"line":189},[186,110466,4491],{"class":669},[186,110468,102932],{"class":202},[186,110470,27500],{"class":669},[186,110472,33898],{"class":206},[186,110474,832],{"class":202},[186,110476,1922],{"class":206},[186,110478,32241],{"class":202},[186,110480,110481],{"class":188,"line":49},[186,110482,103130],{"class":202},[169,110484,110485],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[176,110487,110489],{"className":31833,"code":110488,"language":31835,"meta":181,"style":181},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[183,110490,110491],{"__ignoreMap":181},[186,110492,110493,110496,110498,110500,110502],{"class":188,"line":189},[186,110494,110495],{"class":202},"renderer.update_scene(data, ",[186,110497,109946],{"class":835},[186,110499,529],{"class":669},[186,110501,109951],{"class":532},[186,110503,1629],{"class":202},[169,110505,110506,110507,110509,110510,110513],{},"告诉 renderer：用当前 ",[183,110508,34856],{}," 的状态更新画面，并使用名为 ",[183,110511,110512],{},"fixed_camera"," 的相机视角。",[176,110515,110516],{"className":31833,"code":109411,"language":31835,"meta":181,"style":181},[183,110517,110518],{"__ignoreMap":181},[186,110519,110520,110522,110524],{"class":188,"line":189},[186,110521,109011],{"class":202},[186,110523,529],{"class":669},[186,110525,109016],{"class":202},[169,110527,110528,110529,110532],{},"真正渲染出图像。",[183,110530,110531],{},"image"," 是一个 NumPy 数组，不是文件。",[176,110534,110536],{"className":31833,"code":110535,"language":31835,"meta":181,"style":181},"Image.fromarray(image).save(output_path)\n",[183,110537,110538],{"__ignoreMap":181},[186,110539,110540],{"class":188,"line":189},[186,110541,110535],{"class":202},[169,110543,110544,110545,913],{},"把数组转换成图片，并保存到 ",[183,110546,110547],{},"render_output.png",[176,110549,110551],{"className":31833,"code":110550,"language":31835,"meta":181,"style":181},"renderer.close()\n",[183,110552,110553],{"__ignoreMap":181},[186,110554,110555],{"class":188,"line":189},[186,110556,110550],{"class":202},[169,110558,110559],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110561,103747],{"id":103746},[169,110563,110564,110565,110567,110568,913],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[183,110566,110547],{},"，并输出图像数组形状，例如 ",[183,110569,110570],{},"(480, 640, 3)",[169,110572,110573],{},"如果图片里看不到方块，先检查：",[34,110575,110576,110579,110582],{},[22,110577,110578],{},"方块是否掉到相机视野外。",[22,110580,110581],{},"camera 位置是否合理。",[22,110583,110584,110585,110588],{},"是否在 ",[183,110586,110587],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110590,103779],{"id":103778},[169,110592,110593],{},"运行 viewer:",[176,110595,110597],{"className":25281,"code":110596,"language":25283,"meta":181,"style":181},"python ch5_viewer.py\n",[183,110598,110599],{"__ignoreMap":181},[186,110600,110601,110603],{"class":188,"line":189},[186,110602,31835],{"class":198},[186,110604,109727],{"class":532},[169,110606,110607],{},"运行 renderer:",[176,110609,110611],{"className":25281,"code":110610,"language":25283,"meta":181,"style":181},"python ch5_renderer.py\n",[183,110612,110613],{"__ignoreMap":181},[186,110614,110615,110617],{"class":188,"line":189},[186,110616,31835],{"class":198},[186,110618,110056],{"class":532},[169,110620,110621],{},"如果在服务器上运行:",[176,110623,110625],{"className":25281,"code":110624,"language":25283,"meta":181,"style":181},"MUJOCO_GL=egl python ch5_renderer.py\n",[183,110626,110627],{"__ignoreMap":181},[186,110628,110629,110631,110633,110635,110638],{"class":188,"line":189},[186,110630,109245],{"class":202},[186,110632,529],{"class":669},[186,110634,109235],{"class":532},[186,110636,110637],{"class":198}," python",[186,110639,110056],{"class":532},[169,110641,109213],{},[176,110643,110645],{"className":25281,"code":110644,"language":25283,"meta":181,"style":181},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[183,110646,110647],{"__ignoreMap":181},[186,110648,110649,110651,110653,110655,110657],{"class":188,"line":189},[186,110650,109245],{"class":202},[186,110652,529],{"class":669},[186,110654,109239],{"class":532},[186,110656,110637],{"class":198},[186,110658,110056],{"class":532},[169,110660,110661],{},"再做几个练习：",[34,110663,110664,110671,110674,110680],{},[22,110665,110666,110667,110670],{},"把 renderer 分辨率改成 ",[183,110668,110669],{},"height=240, width=320","，观察输出 shape。",[22,110672,110673],{},"把方块颜色改成蓝色，重新保存图片。",[22,110675,110676,110677,110679],{},"把相机 ",[183,110678,105577],{}," 改远一点，观察画面中物体是否变小。",[22,110681,110682,110683,103845,110686,110689],{},"把 viewer 示例中的 ",[183,110684,110685],{},"data.time \u003C 5.0",[183,110687,110688],{},"data.time \u003C 20.0","，观察更长时间。",[14,110691,103884],{"id":103883},[29,110693,110695],{"id":110694},"viewer-窗口打不开","viewer 窗口打不开",[169,110697,110698],{},"安装:",[176,110700,110702],{"className":25281,"code":110701,"language":25283,"meta":181,"style":181},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[183,110703,110704],{"__ignoreMap":181},[186,110705,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726],{"class":188,"line":189},[186,110707,26035],{"class":198},[186,110709,27772],{"class":532},[186,110711,25293],{"class":532},[186,110713,27857],{"class":206},[186,110715,103937],{"class":532},[186,110717,102265],{"class":532},[186,110719,103942],{"class":532},[186,110721,102278],{"class":532},[186,110723,102284],{"class":532},[186,110725,102275],{"class":532},[186,110727,110728],{"class":532}," libXinerama\n",[29,110730,110732],{"id":110731},"glfwerror",[183,110733,110734],{},"GLFWError",[169,110736,110737],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[29,110739,110741],{"id":110740},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[169,110743,110744,110745,83971,110747,110749],{},"尝试 ",[183,110746,102468],{},[183,110748,102471],{},"。可能存在版本差异。",[29,110751,110752],{"id":110752},"保存图片是黑的",[169,110754,104006],{},[34,110756,110757,110760,110763,110773],{},[22,110758,110759],{},"XML 里是否有 light。",[22,110761,110762],{},"相机是否对着模型。",[22,110764,110765,110766,110769,110770,913],{},"是否先 ",[183,110767,110768],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[183,110771,110772],{},"renderer.render()",[22,110774,110775],{},"物体是否已经掉出视野。",[29,110777,110778],{"id":110778},"远程服务器没有显示器",[169,110780,110781],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[176,110783,110784],{"className":25281,"code":110624,"language":25283,"meta":181,"style":181},[183,110785,110786],{"__ignoreMap":181},[186,110787,110788,110790,110792,110794,110796],{"class":188,"line":189},[186,110789,109245],{"class":202},[186,110791,529],{"class":669},[186,110793,109235],{"class":532},[186,110795,110637],{"class":198},[186,110797,110056],{"class":532},[169,110799,110800],{},"如果 EGL 不可用，再尝试：",[176,110802,110803],{"className":25281,"code":110644,"language":25283,"meta":181,"style":181},[183,110804,110805],{"__ignoreMap":181},[186,110806,110807,110809,110811,110813,110815],{"class":188,"line":189},[186,110808,109245],{"class":202},[186,110810,529],{"class":669},[186,110812,109239],{"class":532},[186,110814,110637],{"class":198},[186,110816,110056],{"class":532},[14,110818,104038],{"id":104037},[169,110820,110821],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[34,110823,110824,110827,110830],{},[22,110825,110826],{},"先用 viewer 看模型和控制是否正常。",[22,110828,110829],{},"再用 renderer 保存图片或构造视觉观测。",[22,110831,110832],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1524,110834,110835],{},"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":181,"searchDepth":49,"depth":49,"links":110837},[110838,110839,110840,110845,110850,110851,110852,110859],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":110841},[110842,110843,110844],{"id":109342,"depth":219,"text":109343},{"id":109372,"depth":219,"text":109373},{"id":109407,"depth":219,"text":109408},{"id":102683,"depth":49,"text":102684,"children":110846},[110847,110848,110849],{"id":103003,"depth":219,"text":103003},{"id":110152,"depth":219,"text":110153},{"id":110330,"depth":219,"text":110331},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":110853},[110854,110855,110856,110857,110858],{"id":110694,"depth":219,"text":110695},{"id":110731,"depth":219,"text":110734},{"id":110740,"depth":219,"text":110741},{"id":110752,"depth":219,"text":110752},{"id":110778,"depth":219,"text":110778},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108950,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110866,"title":110867,"body":110868,"description":181,"extension":1549,"meta":112779,"navigation":1551,"path":112780,"seo":112781,"stem":112782,"__hash__":112783},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110869,"toc":112755},[110870,110873,110875,110878,110880,110899,110902,110908,110911,110913,110915,110939,110941,110955,110957,110998,111000,111011,111013,111016,111022,111025,111059,111062,111094,111097,111129,111133,111136,111176,111179,111185,111188,111194,111198,111201,111207,111210,111214,111217,111257,111259,111272,111275,111277,111859,111861,111873,111876,111887,111889,111892,111911,111923,111926,111947,111950,111953,111996,111999,112002,112022,112029,112031,112049,112064,112067,112073,112076,112082,112099,112106,112137,112148,112182,112193,112210,112219,112227,112232,112246,112249,112270,112276,112290,112295,112325,112335,112360,112368,112391,112394,112410,112413,112421,112427,112449,112462,112483,112492,112531,112542,112544,112547,112553,112556,112559,112565,112568,112588,112591,112593,112632,112634,112637,112645,112648,112651,112678,112681,112691,112697,112700,112706,112708,112714,112718,112721,112723,112726,112750,112753],[10,110871,110867],{"id":110872},"_6控制任务cartpole",[14,110874,102078],{"id":102077},[169,110876,110877],{},"本章搭建一个最小 Cartpole 控制任务。",[169,110879,105762],{},[34,110881,110882,110885,110887,110890,110893,110896],{},[22,110883,110884],{},"slide joint",[22,110886,107615],{},[22,110888,110889],{},"cart force actuator",[22,110891,110892],{},"状态观测",[22,110894,110895],{},"简单控制循环",[22,110897,110898],{},"reward 设计雏形",[169,110900,110901],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[176,110903,110906],{"className":110904,"code":110905,"language":753,"meta":181},[751],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[183,110907,110905],{"__ignoreMap":181},[169,110909,110910],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110912,102201],{"id":102200},[169,110914,102204],{},[176,110916,110917],{"className":25281,"code":105819,"language":25283,"meta":181,"style":181},[183,110918,110919],{"__ignoreMap":181},[186,110920,110921,110923,110925,110927,110929,110931,110933,110935,110937],{"class":188,"line":189},[186,110922,26035],{"class":198},[186,110924,27772],{"class":532},[186,110926,25293],{"class":532},[186,110928,27857],{"class":206},[186,110930,105834],{"class":532},[186,110932,102229],{"class":532},[186,110934,103932],{"class":532},[186,110936,102245],{"class":532},[186,110938,105843],{"class":532},[169,110940,104250],{},[176,110942,110943],{"className":25281,"code":102350,"language":25283,"meta":181,"style":181},[183,110944,110945],{"__ignoreMap":181},[186,110946,110947,110949,110951,110953],{"class":188,"line":189},[186,110948,25290],{"class":198},[186,110950,25293],{"class":532},[186,110952,102361],{"class":532},[186,110954,102364],{"class":532},[169,110956,104267],{},[176,110958,110960],{"className":25281,"code":110959,"language":25283,"meta":181,"style":181},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[183,110961,110962,110979,110988],{"__ignoreMap":181},[186,110963,110964,110966,110968,110970,110973,110975,110977],{"class":188,"line":189},[186,110965,31785],{"class":198},[186,110967,30631],{"class":532},[186,110969,26574],{"class":206},[186,110971,110972],{"class":532}," mujoco-cartpole",[186,110974,102406],{"class":532},[186,110976,102409],{"class":206},[186,110978,102412],{"class":206},[186,110980,110981,110983,110985],{"class":188,"line":49},[186,110982,31785],{"class":198},[186,110984,102419],{"class":532},[186,110986,110987],{"class":532}," mujoco-cartpole\n",[186,110989,110990,110992,110994,110996],{"class":188,"line":219},[186,110991,25290],{"class":198},[186,110993,25293],{"class":532},[186,110995,102361],{"class":532},[186,110997,102364],{"class":532},[169,110999,102435],{},[34,111001,111002,111005,111008],{},[22,111003,111004],{},"本章不依赖 Gymnasium。",[22,111006,111007],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[22,111009,111010],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111012,102476],{"id":102475},[169,111014,111015],{},"Cartpole 的模型结构:",[176,111017,111020],{"className":111018,"code":111019,"language":753,"meta":181},[751],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[183,111021,111019],{"__ignoreMap":181},[169,111023,111024],{},"小车通过 slide joint 左右移动:",[176,111026,111028],{"className":54514,"code":111027,"language":54516,"meta":181,"style":181},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[183,111029,111030],{"__ignoreMap":181},[186,111031,111032,111034,111036,111038,111040,111043,111045,111047,111050,111052,111054,111057],{"class":188,"line":189},[186,111033,520],{"class":202},[186,111035,104387],{"class":523},[186,111037,16382],{"class":198},[186,111039,529],{"class":202},[186,111041,111042],{"class":532},"\"cart_x\"",[186,111044,55269],{"class":198},[186,111046,529],{"class":202},[186,111048,111049],{"class":532},"\"slide\"",[186,111051,107459],{"class":198},[186,111053,529],{"class":202},[186,111055,111056],{"class":532},"\"1 0 0\"",[186,111058,102575],{"class":202},[169,111060,111061],{},"杆子通过 hinge joint 旋转:",[176,111063,111065],{"className":54514,"code":111064,"language":54516,"meta":181,"style":181},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[183,111066,111067],{"__ignoreMap":181},[186,111068,111069,111071,111073,111075,111077,111080,111082,111084,111086,111088,111090,111092],{"class":188,"line":189},[186,111070,520],{"class":202},[186,111072,104387],{"class":523},[186,111074,16382],{"class":198},[186,111076,529],{"class":202},[186,111078,111079],{"class":532},"\"pole_hinge\"",[186,111081,55269],{"class":198},[186,111083,529],{"class":202},[186,111085,107450],{"class":532},[186,111087,107459],{"class":198},[186,111089,529],{"class":202},[186,111091,107464],{"class":532},[186,111093,102575],{"class":202},[169,111095,111096],{},"控制力作用在小车 slide joint 上:",[176,111098,111100],{"className":54514,"code":111099,"language":54516,"meta":181,"style":181},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[183,111101,111102],{"__ignoreMap":181},[186,111103,111104,111106,111108,111110,111112,111115,111117,111119,111121,111123,111125,111127],{"class":188,"line":189},[186,111105,520],{"class":202},[186,111107,107505],{"class":523},[186,111109,16382],{"class":198},[186,111111,529],{"class":202},[186,111113,111114],{"class":532},"\"cart_motor\"",[186,111116,107515],{"class":198},[186,111118,529],{"class":202},[186,111120,111042],{"class":532},[186,111122,107522],{"class":198},[186,111124,529],{"class":202},[186,111126,55761],{"class":532},[186,111128,102575],{"class":202},[29,111130,111132],{"id":111131},"cartpole-的状态是什么","Cartpole 的状态是什么",[169,111134,111135],{},"这个简化模型有两个关节：",[99,111137,111138,111149],{},[102,111139,111140],{},[105,111141,111142,111144,111146],{},[108,111143,104190],{"align":110},[108,111145,25197],{"align":110},[108,111147,111148],{"align":110},"对应状态",[116,111150,111151,111164],{},[105,111152,111153,111158,111161],{},[121,111154,111155],{"align":110},[183,111156,111157],{},"cart_x",[121,111159,111160],{"align":110},"slide",[121,111162,111163],{"align":110},"小车 x 位置",[105,111165,111166,111171,111173],{},[121,111167,111168],{"align":110},[183,111169,111170],{},"pole_hinge",[121,111172,107271],{"align":110},[121,111174,111175],{"align":110},"杆子角度",[169,111177,111178],{},"所以：",[176,111180,111183],{"className":111181,"code":111182,"language":753,"meta":181},[751],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[183,111184,111182],{"__ignoreMap":181},[169,111186,111187],{},"把它们拼起来就是观测：",[176,111189,111192],{"className":111190,"code":111191,"language":753,"meta":181},[751],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[183,111193,111191],{"__ignoreMap":181},[29,111195,111197],{"id":111196},"action-是什么","action 是什么",[169,111199,111200],{},"本章只有一个 actuator：",[176,111202,111205],{"className":111203,"code":111204,"language":753,"meta":181},[751],"data.ctrl[0] = action\n",[183,111206,111204],{"__ignoreMap":181},[169,111208,111209],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[29,111211,111213],{"id":111212},"reward-是什么","reward 是什么",[169,111215,111216],{},"奖励函数：",[176,111218,111220],{"className":31833,"code":111219,"language":31835,"meta":181,"style":181},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[183,111221,111222],{"__ignoreMap":181},[186,111223,111224,111226,111229,111231,111233,111235,111238,111240,111243,111245,111247,111249,111252,111254],{"class":188,"line":189},[186,111225,18507],{"class":669},[186,111227,111228],{"class":206}," float",[186,111230,832],{"class":202},[186,111232,103834],{"class":206},[186,111234,53718],{"class":669},[186,111236,111237],{"class":206}," 0.1",[186,111239,7981],{"class":669},[186,111241,111242],{"class":202}," cart_x ",[186,111244,2065],{"class":669},[186,111246,111242],{"class":202},[186,111248,2142],{"class":669},[186,111250,111251],{"class":202}," pole_angle ",[186,111253,2065],{"class":669},[186,111255,111256],{"class":202}," pole_angle)\n",[169,111258,107657],{},[34,111260,111261,111266,111269],{},[22,111262,111263,111264,913],{},"基础奖励是 ",[183,111265,103834],{},[22,111267,111268],{},"小车离中心越远，扣分越多。",[22,111270,111271],{},"杆子角度越大，扣分越多。",[169,111273,111274],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111276,102684],{"id":102683},[176,111278,111280],{"className":31833,"code":111279,"language":31835,"meta":181,"style":181},"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",[183,111281,111282,111288,111298,111302,111306,111314,111319,111323,111327,111331,111336,111340,111345,111350,111355,111359,111364,111369,111374,111378,111382,111386,111390,111394,111399,111403,111407,111411,111415,111419,111429,111436,111440,111444,111458,111472,111485,111515,111519,111523,111535,111547,111555,111559,111572,111576,111580,111589,111593,111609,111619,111632,111645,111649,111672,111690,111694,111706,111710,111714,111724,111734,111738,111754,111795,111799,111819,111835,111839,111843,111855],{"__ignoreMap":181},[186,111283,111284,111286],{"class":188,"line":189},[186,111285,31847],{"class":669},[186,111287,102732],{"class":202},[186,111289,111290,111292,111294,111296],{"class":188,"line":49},[186,111291,31847],{"class":669},[186,111293,32835],{"class":202},[186,111295,32838],{"class":669},[186,111297,32841],{"class":202},[186,111299,111300],{"class":188,"line":219},[186,111301,3867],{"emptyLinePlaceholder":1551},[186,111303,111304],{"class":188,"line":225},[186,111305,3867],{"emptyLinePlaceholder":1551},[186,111307,111308,111310,111312],{"class":188,"line":242},[186,111309,102745],{"class":206},[186,111311,15027],{"class":669},[186,111313,102750],{"class":532},[186,111315,111316],{"class":188,"line":248},[186,111317,111318],{"class":532},"\u003Cmujoco model=\"cartpole\">\n",[186,111320,111321],{"class":188,"line":265},[186,111322,102760],{"class":532},[186,111324,111325],{"class":188,"line":271},[186,111326,3867],{"emptyLinePlaceholder":1551},[186,111328,111329],{"class":188,"line":288},[186,111330,102769],{"class":532},[186,111332,111333],{"class":188,"line":294},[186,111334,111335],{"class":532},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[186,111337,111338],{"class":188,"line":1212},[186,111339,3867],{"emptyLinePlaceholder":1551},[186,111341,111342],{"class":188,"line":1223},[186,111343,111344],{"class":532},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[186,111346,111347],{"class":188,"line":1236},[186,111348,111349],{"class":532},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[186,111351,111352],{"class":188,"line":3096},[186,111353,111354],{"class":532},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[186,111356,111357],{"class":188,"line":3110},[186,111358,3867],{"emptyLinePlaceholder":1551},[186,111360,111361],{"class":188,"line":3115},[186,111362,111363],{"class":532},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[186,111365,111366],{"class":188,"line":3121},[186,111367,111368],{"class":532},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[186,111370,111371],{"class":188,"line":3142},[186,111372,111373],{"class":532},"        \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",[186,111375,111376],{"class":188,"line":3147},[186,111377,107869],{"class":532},[186,111379,111380],{"class":188,"line":3161},[186,111381,102798],{"class":532},[186,111383,111384],{"class":188,"line":3166},[186,111385,102803],{"class":532},[186,111387,111388],{"class":188,"line":3195},[186,111389,3867],{"emptyLinePlaceholder":1551},[186,111391,111392],{"class":188,"line":3200},[186,111393,107886],{"class":532},[186,111395,111396],{"class":188,"line":3217},[186,111397,111398],{"class":532},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[186,111400,111401],{"class":188,"line":3222},[186,111402,107896],{"class":532},[186,111404,111405],{"class":188,"line":3227},[186,111406,102808],{"class":532},[186,111408,111409],{"class":188,"line":3232},[186,111410,97129],{"class":532},[186,111412,111413],{"class":188,"line":3246},[186,111414,3867],{"emptyLinePlaceholder":1551},[186,111416,111417],{"class":188,"line":3251},[186,111418,3867],{"emptyLinePlaceholder":1551},[186,111420,111421,111423,111426],{"class":188,"line":4044},[186,111422,33402],{"class":669},[186,111424,111425],{"class":198}," get_observation",[186,111427,111428],{"class":202},"(data: mujoco.MjData) -> np.ndarray:\n",[186,111430,111431,111433],{"class":188,"line":4058},[186,111432,5556],{"class":669},[186,111434,111435],{"class":202}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[186,111437,111438],{"class":188,"line":4066},[186,111439,3867],{"emptyLinePlaceholder":1551},[186,111441,111442],{"class":188,"line":4071},[186,111443,3867],{"emptyLinePlaceholder":1551},[186,111445,111446,111448,111451,111454,111456],{"class":188,"line":4077},[186,111447,33402],{"class":669},[186,111449,111450],{"class":198}," compute_reward",[186,111452,111453],{"class":202},"(obs: np.ndarray) -> ",[186,111455,1662],{"class":206},[186,111457,5205],{"class":202},[186,111459,111460,111463,111465,111468,111470],{"class":188,"line":4083},[186,111461,111462],{"class":202},"    cart_x ",[186,111464,529],{"class":669},[186,111466,111467],{"class":202}," obs[",[186,111469,1803],{"class":206},[186,111471,34701],{"class":202},[186,111473,111474,111477,111479,111481,111483],{"class":188,"line":4088},[186,111475,111476],{"class":202},"    pole_angle ",[186,111478,529],{"class":669},[186,111480,111467],{"class":202},[186,111482,1829],{"class":206},[186,111484,34701],{"class":202},[186,111486,111487,111489,111491,111493,111495,111497,111499,111501,111503,111505,111507,111509,111511,111513],{"class":188,"line":9411},[186,111488,5556],{"class":669},[186,111490,111228],{"class":206},[186,111492,832],{"class":202},[186,111494,103834],{"class":206},[186,111496,53718],{"class":669},[186,111498,111237],{"class":206},[186,111500,7981],{"class":669},[186,111502,111242],{"class":202},[186,111504,2065],{"class":669},[186,111506,111242],{"class":202},[186,111508,2142],{"class":669},[186,111510,111251],{"class":202},[186,111512,2065],{"class":669},[186,111514,111256],{"class":202},[186,111516,111517],{"class":188,"line":9435},[186,111518,3867],{"emptyLinePlaceholder":1551},[186,111520,111521],{"class":188,"line":9440},[186,111522,3867],{"emptyLinePlaceholder":1551},[186,111524,111525,111527,111529,111531,111533],{"class":188,"line":9446},[186,111526,33402],{"class":669},[186,111528,3440],{"class":198},[186,111530,102829],{"class":202},[186,111532,97117],{"class":206},[186,111534,5205],{"class":202},[186,111536,111537,111539,111541,111543,111545],{"class":188,"line":9473},[186,111538,102838],{"class":202},[186,111540,529],{"class":669},[186,111542,102843],{"class":202},[186,111544,102745],{"class":206},[186,111546,1629],{"class":202},[186,111548,111549,111551,111553],{"class":188,"line":9478},[186,111550,102852],{"class":202},[186,111552,529],{"class":669},[186,111554,102857],{"class":202},[186,111556,111557],{"class":188,"line":9484},[186,111558,3867],{"emptyLinePlaceholder":1551},[186,111560,111561,111563,111565,111567,111569],{"class":188,"line":9496},[186,111562,106500],{"class":202},[186,111564,1829],{"class":206},[186,111566,5909],{"class":202},[186,111568,529],{"class":669},[186,111570,111571],{"class":206}," 0.1\n",[186,111573,111574],{"class":188,"line":9508},[186,111575,106513],{"class":202},[186,111577,111578],{"class":188,"line":9520},[186,111579,3867],{"emptyLinePlaceholder":1551},[186,111581,111582,111585,111587],{"class":188,"line":11179},[186,111583,111584],{"class":202},"    total_reward ",[186,111586,529],{"class":669},[186,111588,106192],{"class":206},[186,111590,111591],{"class":188,"line":11204},[186,111592,3867],{"emptyLinePlaceholder":1551},[186,111594,111595,111597,111599,111601,111603,111605,111607],{"class":188,"line":11227},[186,111596,4667],{"class":669},[186,111598,33071],{"class":202},[186,111600,27500],{"class":669},[186,111602,33898],{"class":206},[186,111604,832],{"class":202},[186,111606,7873],{"class":206},[186,111608,32241],{"class":202},[186,111610,111611,111614,111616],{"class":188,"line":11251},[186,111612,111613],{"class":202},"        obs ",[186,111615,529],{"class":669},[186,111617,111618],{"class":202}," get_observation(data)\n",[186,111620,111621,111624,111626,111628,111630],{"class":188,"line":11256},[186,111622,111623],{"class":202},"        pole_angle ",[186,111625,529],{"class":669},[186,111627,111467],{"class":202},[186,111629,1829],{"class":206},[186,111631,34701],{"class":202},[186,111633,111634,111637,111639,111641,111643],{"class":188,"line":11261},[186,111635,111636],{"class":202},"        pole_angular_velocity ",[186,111638,529],{"class":669},[186,111640,111467],{"class":202},[186,111642,1691],{"class":206},[186,111644,34701],{"class":202},[186,111646,111647],{"class":188,"line":11266},[186,111648,3867],{"emptyLinePlaceholder":1551},[186,111650,111651,111654,111656,111659,111661,111663,111665,111667,111669],{"class":188,"line":11275},[186,111652,111653],{"class":202},"        action ",[186,111655,529],{"class":669},[186,111657,111658],{"class":206}," 2.0",[186,111660,7981],{"class":669},[186,111662,111251],{"class":202},[186,111664,2091],{"class":669},[186,111666,63305],{"class":206},[186,111668,7981],{"class":669},[186,111670,111671],{"class":202}," pole_angular_velocity\n",[186,111673,111674,111676,111678,111680,111682,111684,111686,111688],{"class":188,"line":11280},[186,111675,111653],{"class":202},[186,111677,529],{"class":669},[186,111679,108878],{"class":202},[186,111681,2142],{"class":669},[186,111683,103834],{"class":206},[186,111685,13898],{"class":202},[186,111687,103834],{"class":206},[186,111689,1629],{"class":202},[186,111691,111692],{"class":188,"line":11286},[186,111693,3867],{"emptyLinePlaceholder":1551},[186,111695,111696,111698,111700,111702,111704],{"class":188,"line":11307},[186,111697,108048],{"class":202},[186,111699,1803],{"class":206},[186,111701,5909],{"class":202},[186,111703,529],{"class":669},[186,111705,108901],{"class":202},[186,111707,111708],{"class":188,"line":11313},[186,111709,102947],{"class":202},[186,111711,111712],{"class":188,"line":11327},[186,111713,3867],{"emptyLinePlaceholder":1551},[186,111715,111716,111719,111721],{"class":188,"line":11333},[186,111717,111718],{"class":202},"        reward ",[186,111720,529],{"class":669},[186,111722,111723],{"class":202}," compute_reward(get_observation(data))\n",[186,111725,111726,111729,111731],{"class":188,"line":11360},[186,111727,111728],{"class":202},"        total_reward ",[186,111730,10940],{"class":669},[186,111732,111733],{"class":202}," reward\n",[186,111735,111736],{"class":188,"line":11369},[186,111737,3867],{"emptyLinePlaceholder":1551},[186,111739,111740,111742,111744,111746,111748,111750,111752],{"class":188,"line":11375},[186,111741,3964],{"class":669},[186,111743,33071],{"class":202},[186,111745,670],{"class":669},[186,111747,7217],{"class":206},[186,111749,102990],{"class":669},[186,111751,5559],{"class":206},[186,111753,5205],{"class":202},[186,111755,111756,111758,111760,111763,111766,111769,111772,111774,111777,111780,111782,111784,111786,111788,111791,111793],{"class":188,"line":11383},[186,111757,36105],{"class":206},[186,111759,832],{"class":202},[186,111761,111762],{"class":532},"\"step:\"",[186,111764,111765],{"class":202},", step, ",[186,111767,111768],{"class":532},"\"obs:\"",[186,111770,111771],{"class":202},", np.round(obs, ",[186,111773,1691],{"class":206},[186,111775,111776],{"class":202},"), ",[186,111778,111779],{"class":532},"\"action:\"",[186,111781,13898],{"class":202},[186,111783,33473],{"class":206},[186,111785,832],{"class":202},[186,111787,1662],{"class":206},[186,111789,111790],{"class":202},"(action), ",[186,111792,1691],{"class":206},[186,111794,31952],{"class":202},[186,111796,111797],{"class":188,"line":11388},[186,111798,3867],{"emptyLinePlaceholder":1551},[186,111800,111801,111803,111805,111808,111810,111812,111815,111817],{"class":188,"line":18065},[186,111802,32754],{"class":206},[186,111804,832],{"class":202},[186,111806,111807],{"class":532},"\"total_reward:\"",[186,111809,13898],{"class":202},[186,111811,33473],{"class":206},[186,111813,111814],{"class":202},"(total_reward, ",[186,111816,1691],{"class":206},[186,111818,31952],{"class":202},[186,111820,111821,111823,111825,111828,111831,111833],{"class":188,"line":18071},[186,111822,32754],{"class":206},[186,111824,832],{"class":202},[186,111826,111827],{"class":532},"\"final obs:\"",[186,111829,111830],{"class":202},", np.round(get_observation(data), ",[186,111832,1691],{"class":206},[186,111834,31952],{"class":202},[186,111836,111837],{"class":188,"line":18094},[186,111838,3867],{"emptyLinePlaceholder":1551},[186,111840,111841],{"class":188,"line":18100},[186,111842,3867],{"emptyLinePlaceholder":1551},[186,111844,111845,111847,111849,111851,111853],{"class":188,"line":18123},[186,111846,3003],{"class":669},[186,111848,32675],{"class":206},[186,111850,102990],{"class":669},[186,111852,102993],{"class":532},[186,111854,5205],{"class":202},[186,111856,111857],{"class":188,"line":18137},[186,111858,103000],{"class":202},[169,111860,105001],{},[176,111862,111864],{"className":25281,"code":111863,"language":25283,"meta":181,"style":181},"touch ch6_cartpole.py\n",[183,111865,111866],{"__ignoreMap":181},[186,111867,111868,111870],{"class":188,"line":189},[186,111869,102714],{"class":198},[186,111871,111872],{"class":532}," ch6_cartpole.py\n",[169,111874,111875],{},"运行：",[176,111877,111879],{"className":25281,"code":111878,"language":25283,"meta":181,"style":181},"python ch6_cartpole.py\n",[183,111880,111881],{"__ignoreMap":181},[186,111882,111883,111885],{"class":188,"line":189},[186,111884,31835],{"class":198},[186,111886,111872],{"class":532},[29,111888,103003],{"id":103003},[169,111890,111891],{},"构造观测：",[176,111893,111895],{"className":31833,"code":111894,"language":31835,"meta":181,"style":181},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[183,111896,111897,111905],{"__ignoreMap":181},[186,111898,111899,111901,111903],{"class":188,"line":189},[186,111900,33402],{"class":669},[186,111902,111425],{"class":198},[186,111904,111428],{"class":202},[186,111906,111907,111909],{"class":188,"line":49},[186,111908,5556],{"class":669},[186,111910,111435],{"class":202},[169,111912,111913,111916,111917,111919,111920,111922],{},[183,111914,111915],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[183,111918,105461],{}," 2 维，",[183,111921,105791],{}," 2 维，所以 obs 是 4 维。",[169,111924,111925],{},"设置初始角度：",[176,111927,111929],{"className":31833,"code":111928,"language":31835,"meta":181,"style":181},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[183,111930,111931,111943],{"__ignoreMap":181},[186,111932,111933,111935,111937,111939,111941],{"class":188,"line":189},[186,111934,106130],{"class":202},[186,111936,1829],{"class":206},[186,111938,5909],{"class":202},[186,111940,529],{"class":669},[186,111942,111571],{"class":206},[186,111944,111945],{"class":188,"line":49},[186,111946,105974],{"class":202},[169,111948,111949],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[169,111951,111952],{},"简单反馈控制：",[176,111954,111956],{"className":31833,"code":111955,"language":31835,"meta":181,"style":181},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[183,111957,111958,111978],{"__ignoreMap":181},[186,111959,111960,111962,111964,111966,111968,111970,111972,111974,111976],{"class":188,"line":189},[186,111961,108873],{"class":202},[186,111963,529],{"class":669},[186,111965,111658],{"class":206},[186,111967,7981],{"class":669},[186,111969,111251],{"class":202},[186,111971,2091],{"class":669},[186,111973,63305],{"class":206},[186,111975,7981],{"class":669},[186,111977,111671],{"class":202},[186,111979,111980,111982,111984,111986,111988,111990,111992,111994],{"class":188,"line":49},[186,111981,108873],{"class":202},[186,111983,529],{"class":669},[186,111985,108878],{"class":202},[186,111987,2142],{"class":669},[186,111989,103834],{"class":206},[186,111991,13898],{"class":202},[186,111993,103834],{"class":206},[186,111995,1629],{"class":202},[169,111997,111998],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[169,112000,112001],{},"限制动作：",[176,112003,112005],{"className":31833,"code":112004,"language":31835,"meta":181,"style":181},"np.clip(action, -1.0, 1.0)\n",[183,112006,112007],{"__ignoreMap":181},[186,112008,112009,112012,112014,112016,112018,112020],{"class":188,"line":189},[186,112010,112011],{"class":202},"np.clip(action, ",[186,112013,2142],{"class":669},[186,112015,103834],{"class":206},[186,112017,13898],{"class":202},[186,112019,103834],{"class":206},[186,112021,1629],{"class":202},[169,112023,112024,112025,112028],{},"因为 XML 里 ",[183,112026,112027],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[29,112030,103139],{"id":103139},[176,112032,112033],{"className":31833,"code":111894,"language":31835,"meta":181,"style":181},[183,112034,112035,112043],{"__ignoreMap":181},[186,112036,112037,112039,112041],{"class":188,"line":189},[186,112038,33402],{"class":669},[186,112040,111425],{"class":198},[186,112042,111428],{"class":202},[186,112044,112045,112047],{"class":188,"line":49},[186,112046,5556],{"class":669},[186,112048,111435],{"class":202},[169,112050,112051,112052,112055,112056,112059,112060,112063],{},"这段定义了一个函数，用来获取当前观测。",[183,112053,112054],{},"data.qpos.copy()"," 是位置数组副本，",[183,112057,112058],{},"data.qvel.copy()"," 是速度数组副本。",[183,112061,112062],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[169,112065,112066],{},"在本章模型里：",[176,112068,112071],{"className":112069,"code":112070,"language":753,"meta":181},[751],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[183,112072,112070],{"__ignoreMap":181},[169,112074,112075],{},"所以返回的 obs 是：",[176,112077,112080],{"className":112078,"code":112079,"language":753,"meta":181},[751],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[183,112081,112079],{"__ignoreMap":181},[176,112083,112085],{"className":31833,"code":112084,"language":31835,"meta":181,"style":181},"def compute_reward(obs: np.ndarray) -> float:\n",[183,112086,112087],{"__ignoreMap":181},[186,112088,112089,112091,112093,112095,112097],{"class":188,"line":189},[186,112090,33402],{"class":669},[186,112092,111450],{"class":198},[186,112094,111453],{"class":202},[186,112096,1662],{"class":206},[186,112098,5205],{"class":202},[169,112100,112101,112102,112105],{},"这行定义奖励函数。输入是观测 ",[183,112103,112104],{},"obs","，输出是一个浮点数奖励。",[176,112107,112109],{"className":31833,"code":112108,"language":31835,"meta":181,"style":181},"cart_x = obs[0]\npole_angle = obs[1]\n",[183,112110,112111,112124],{"__ignoreMap":181},[186,112112,112113,112116,112118,112120,112122],{"class":188,"line":189},[186,112114,112115],{"class":202},"cart_x ",[186,112117,529],{"class":669},[186,112119,111467],{"class":202},[186,112121,1803],{"class":206},[186,112123,34701],{"class":202},[186,112125,112126,112129,112131,112133,112135],{"class":188,"line":49},[186,112127,112128],{"class":202},"pole_angle ",[186,112130,529],{"class":669},[186,112132,111467],{"class":202},[186,112134,1829],{"class":206},[186,112136,34701],{"class":202},[169,112138,112139,112140,112143,112144,112147],{},"数组索引从 0 开始。",[183,112141,112142],{},"obs[0]"," 是第一个元素，也就是小车位置。",[183,112145,112146],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[176,112149,112150],{"className":31833,"code":111219,"language":31835,"meta":181,"style":181},[183,112151,112152],{"__ignoreMap":181},[186,112153,112154,112156,112158,112160,112162,112164,112166,112168,112170,112172,112174,112176,112178,112180],{"class":188,"line":189},[186,112155,18507],{"class":669},[186,112157,111228],{"class":206},[186,112159,832],{"class":202},[186,112161,103834],{"class":206},[186,112163,53718],{"class":669},[186,112165,111237],{"class":206},[186,112167,7981],{"class":669},[186,112169,111242],{"class":202},[186,112171,2065],{"class":669},[186,112173,111242],{"class":202},[186,112175,2142],{"class":669},[186,112177,111251],{"class":202},[186,112179,2065],{"class":669},[186,112181,111256],{"class":202},[169,112183,112184,112185,112188,112189,112192],{},"这行计算奖励。",[183,112186,112187],{},"cart_x * cart_x"," 是小车位置的平方，",[183,112190,112191],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[176,112194,112196],{"className":31833,"code":112195,"language":31835,"meta":181,"style":181},"data.qpos[1] = 0.1\n",[183,112197,112198],{"__ignoreMap":181},[186,112199,112200,112202,112204,112206,112208],{"class":188,"line":189},[186,112201,106130],{"class":202},[186,112203,1829],{"class":206},[186,112205,5909],{"class":202},[186,112207,529],{"class":669},[186,112209,111571],{"class":206},[169,112211,112212,112213,112215,112216,112218],{},"手动设置杆子的初始角度。因为 ",[183,112214,106887],{}," 是小车位置，",[183,112217,106890],{}," 是杆子角度，所以这里改的是杆子。",[176,112220,112221],{"className":31833,"code":105974,"language":31835,"meta":181,"style":181},[183,112222,112223],{"__ignoreMap":181},[186,112224,112225],{"class":188,"line":189},[186,112226,105974],{"class":202},[169,112228,106933,112229,112231],{},[183,112230,105461],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[176,112233,112235],{"className":31833,"code":112234,"language":31835,"meta":181,"style":181},"total_reward = 0.0\n",[183,112236,112237],{"__ignoreMap":181},[186,112238,112239,112242,112244],{"class":188,"line":189},[186,112240,112241],{"class":202},"total_reward ",[186,112243,529],{"class":669},[186,112245,106192],{"class":206},[169,112247,112248],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[176,112250,112252],{"className":31833,"code":112251,"language":31835,"meta":181,"style":181},"for step in range(1000):\n",[183,112253,112254],{"__ignoreMap":181},[186,112255,112256,112258,112260,112262,112264,112266,112268],{"class":188,"line":189},[186,112257,4491],{"class":669},[186,112259,33071],{"class":202},[186,112261,27500],{"class":669},[186,112263,33898],{"class":206},[186,112265,832],{"class":202},[186,112267,7873],{"class":206},[186,112269,32241],{"class":202},[169,112271,112272,112273,112275],{},"循环 1000 步。",[183,112274,108565],{}," 是当前步数，从 0 到 999。",[176,112277,112279],{"className":31833,"code":112278,"language":31835,"meta":181,"style":181},"obs = get_observation(data)\n",[183,112280,112281],{"__ignoreMap":181},[186,112282,112283,112286,112288],{"class":188,"line":189},[186,112284,112285],{"class":202},"obs ",[186,112287,529],{"class":669},[186,112289,111618],{"class":202},[169,112291,112292,112293,913],{},"读取当前状态，保存到 ",[183,112294,112104],{},[176,112296,112298],{"className":31833,"code":112297,"language":31835,"meta":181,"style":181},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[183,112299,112300,112312],{"__ignoreMap":181},[186,112301,112302,112304,112306,112308,112310],{"class":188,"line":189},[186,112303,112128],{"class":202},[186,112305,529],{"class":669},[186,112307,111467],{"class":202},[186,112309,1829],{"class":206},[186,112311,34701],{"class":202},[186,112313,112314,112317,112319,112321,112323],{"class":188,"line":49},[186,112315,112316],{"class":202},"pole_angular_velocity ",[186,112318,529],{"class":669},[186,112320,111467],{"class":202},[186,112322,1691],{"class":206},[186,112324,34701],{"class":202},[169,112326,112327,112328,112331,112332,913],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[183,112329,112330],{},"obs[3]","？因为 obs 的顺序是 ",[183,112333,112334],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[176,112336,112338],{"className":31833,"code":112337,"language":31835,"meta":181,"style":181},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[183,112339,112340],{"__ignoreMap":181},[186,112341,112342,112344,112346,112348,112350,112352,112354,112356,112358],{"class":188,"line":189},[186,112343,108873],{"class":202},[186,112345,529],{"class":669},[186,112347,111658],{"class":206},[186,112349,7981],{"class":669},[186,112351,111251],{"class":202},[186,112353,2091],{"class":669},[186,112355,63305],{"class":206},[186,112357,7981],{"class":669},[186,112359,111671],{"class":202},[169,112361,112362,112363,102449,112365,112367],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[183,112364,106691],{},[183,112366,36784],{}," 是人为设置的系数，不是固定公式。",[176,112369,112371],{"className":31833,"code":112370,"language":31835,"meta":181,"style":181},"action = np.clip(action, -1.0, 1.0)\n",[183,112372,112373],{"__ignoreMap":181},[186,112374,112375,112377,112379,112381,112383,112385,112387,112389],{"class":188,"line":189},[186,112376,108873],{"class":202},[186,112378,529],{"class":669},[186,112380,108878],{"class":202},[186,112382,2142],{"class":669},[186,112384,103834],{"class":206},[186,112386,13898],{"class":202},[186,112388,103834],{"class":206},[186,112390,1629],{"class":202},[169,112392,112393],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[176,112395,112396],{"className":31833,"code":111204,"language":31835,"meta":181,"style":181},[183,112397,112398],{"__ignoreMap":181},[186,112399,112400,112402,112404,112406,112408],{"class":188,"line":189},[186,112401,107302],{"class":202},[186,112403,1803],{"class":206},[186,112405,5909],{"class":202},[186,112407,529],{"class":669},[186,112409,108901],{"class":202},[169,112411,112412],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[176,112414,112415],{"className":31833,"code":105936,"language":31835,"meta":181,"style":181},[183,112416,112417],{"__ignoreMap":181},[186,112418,112419],{"class":188,"line":189},[186,112420,105936],{"class":202},[169,112422,112423,112424,112426],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[183,112425,107557],{}," 计算小车和杆子的下一刻状态。",[176,112428,112430],{"className":31833,"code":112429,"language":31835,"meta":181,"style":181},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[183,112431,112432,112441],{"__ignoreMap":181},[186,112433,112434,112437,112439],{"class":188,"line":189},[186,112435,112436],{"class":202},"reward ",[186,112438,529],{"class":669},[186,112440,111723],{"class":202},[186,112442,112443,112445,112447],{"class":188,"line":49},[186,112444,112241],{"class":202},[186,112446,10940],{"class":669},[186,112448,111733],{"class":202},[169,112450,112451,112452,112454,112455,112458,112459,913],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[183,112453,10940],{}," 是简写，",[183,112456,112457],{},"total_reward += reward"," 等价于 ",[183,112460,112461],{},"total_reward = total_reward + reward",[176,112463,112465],{"className":31833,"code":112464,"language":31835,"meta":181,"style":181},"if step % 100 == 0:\n",[183,112466,112467],{"__ignoreMap":181},[186,112468,112469,112471,112473,112475,112477,112479,112481],{"class":188,"line":189},[186,112470,3003],{"class":669},[186,112472,33071],{"class":202},[186,112474,670],{"class":669},[186,112476,7217],{"class":206},[186,112478,102990],{"class":669},[186,112480,5559],{"class":206},[186,112482,5205],{"class":202},[169,112484,112485,112487,112488,112491],{},[183,112486,670],{}," 是取余数。",[183,112489,112490],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[176,112493,112495],{"className":31833,"code":112494,"language":31835,"meta":181,"style":181},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[183,112496,112497],{"__ignoreMap":181},[186,112498,112499,112501,112503,112505,112507,112509,112511,112513,112515,112517,112519,112521,112523,112525,112527,112529],{"class":188,"line":189},[186,112500,31870],{"class":206},[186,112502,832],{"class":202},[186,112504,111762],{"class":532},[186,112506,111765],{"class":202},[186,112508,111768],{"class":532},[186,112510,111771],{"class":202},[186,112512,1691],{"class":206},[186,112514,111776],{"class":202},[186,112516,111779],{"class":532},[186,112518,13898],{"class":202},[186,112520,33473],{"class":206},[186,112522,832],{"class":202},[186,112524,1662],{"class":206},[186,112526,111790],{"class":202},[186,112528,1691],{"class":206},[186,112530,31952],{"class":202},[169,112532,112533,112534,112537,112538,112541],{},"打印当前步数、观测和动作。",[183,112535,112536],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[183,112539,112540],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112543,103747],{"id":103746},[169,112545,112546],{},"观测向量:",[176,112548,112551],{"className":112549,"code":112550,"language":753,"meta":181},[751],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[183,112552,112550],{"__ignoreMap":181},[169,112554,112555],{},"控制器是教学用的简单线性反馈，不保证最优。",[169,112557,112558],{},"每隔 100 步会打印一次：",[176,112560,112563],{"className":112561,"code":112562,"language":753,"meta":181},[751],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[183,112564,112562],{"__ignoreMap":181},[169,112566,112567],{},"重点观察：",[34,112569,112570,112576,112581],{},[22,112571,112572,112575],{},[183,112573,112574],{},"pole_angle"," 是否越来越大。",[22,112577,112578,112580],{},[183,112579,111157],{}," 是否跑得太远。",[22,112582,112583,112584,83971,112586,913],{},"action 是否经常被 clip 到 ",[183,112585,105346],{},[183,112587,1829],{},[169,112589,112590],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112592,103779],{"id":103778},[34,112594,112595,112601,112604,112610,112620,112626,112629],{},[22,112596,112597,112598,913],{},"把初始角度改为 ",[183,112599,112600],{},"data.qpos[1] = 0.3",[22,112602,112603],{},"重新运行，观察控制是否变差。",[22,112605,112606,112607,112609],{},"把 actuator ",[183,112608,108498],{}," 改小。",[22,112611,112612,112613,112616,112617,913],{},"打印 ",[183,112614,112615],{},"model.nq, model.nv, model.nu","，应为 ",[183,112618,112619],{},"2 2 1",[22,112621,112622,112623,112625],{},"把 reward 里的 ",[183,112624,112191],{}," 系数改大，观察总奖励变化。",[22,112627,112628],{},"把控制器改成反号，观察杆子是否更容易倒。",[22,112630,112631],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112633,103884],{"id":103883},[29,112635,112636],{"id":112636},"杆子方向和预期不一致",[169,112638,103827,112639,112641,112642,112644],{},[183,112640,107670],{}," 和 capsule 的 ",[183,112643,104607],{},"，必要时用 viewer 可视化确认。",[29,112646,112647],{"id":112647},"控制器越控越倒",[169,112649,112650],{},"说明反馈符号可能反了，尝试:",[176,112652,112654],{"className":31833,"code":112653,"language":31835,"meta":181,"style":181},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[183,112655,112656],{"__ignoreMap":181},[186,112657,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676],{"class":188,"line":189},[186,112659,108873],{"class":202},[186,112661,529],{"class":669},[186,112663,53718],{"class":669},[186,112665,106691],{"class":206},[186,112667,7981],{"class":669},[186,112669,111251],{"class":202},[186,112671,2142],{"class":669},[186,112673,63305],{"class":206},[186,112675,7981],{"class":669},[186,112677,111671],{"class":202},[29,112679,112680],{"id":112680},"小车飞走",[169,112682,112683,112684,112686,112687,112690],{},"降低 ",[183,112685,108498],{}," 或缩小 ",[183,112688,112689],{},"action"," 的 clip 范围。",[29,112692,112694,112696],{"id":112693},"obs3-为什么是杆子角速度",[183,112695,112330],{}," 为什么是杆子角速度",[169,112698,112699],{},"因为这个模型里：",[176,112701,112704],{"className":112702,"code":112703,"language":753,"meta":181},[751],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[183,112705,112703],{"__ignoreMap":181},[169,112707,111178],{},[176,112709,112712],{"className":112710,"code":112711,"language":753,"meta":181},[751],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[183,112713,112711],{"__ignoreMap":181},[29,112715,112717],{"id":112716},"reward-变成负数是否错误","reward 变成负数是否错误",[169,112719,112720],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112722,104038],{"id":104037},[169,112724,112725],{},"一个控制任务通常包含：",[34,112727,112728,112731,112739,112744,112747],{},[22,112729,112730],{},"模型：Cartpole 的 body、joint、actuator。",[22,112732,112733,112734,1824,112736,112738],{},"观测：从 ",[183,112735,105461],{},[183,112737,105791],{}," 里取状态。",[22,112740,112741,112742,913],{},"动作：写入 ",[183,112743,102507],{},[22,112745,112746],{},"奖励：根据任务目标打分。",[22,112748,112749],{},"循环：obs -> action -> step -> reward。",[169,112751,112752],{},"这就是后面 Gymnasium 环境的基本骨架。",[1524,112754,105717],{},{"title":181,"searchDepth":49,"depth":49,"links":112756},[112757,112758,112759,112764,112768,112769,112770,112778],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":112760},[112761,112762,112763],{"id":111131,"depth":219,"text":111132},{"id":111196,"depth":219,"text":111197},{"id":111212,"depth":219,"text":111213},{"id":102683,"depth":49,"text":102684,"children":112765},[112766,112767],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":112771},[112772,112773,112774,112775,112777],{"id":112636,"depth":219,"text":112636},{"id":112647,"depth":219,"text":112647},{"id":112680,"depth":219,"text":112680},{"id":112693,"depth":219,"text":112776},"obs[3] 为什么是杆子角速度",{"id":112716,"depth":219,"text":112717},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110867,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112785,"title":112786,"body":112787,"description":181,"extension":1549,"meta":114801,"navigation":1551,"path":114802,"seo":114803,"stem":114804,"__hash__":114805},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112788,"toc":114777},[112789,112792,112794,112797,112799,112816,112819,112822,112828,112831,112833,112835,112859,112861,112875,112877,112918,112920,112938,112940,112943,112949,112952,112980,112984,112990,113015,113018,113049,113056,113059,113062,113068,113071,113077,113080,113086,113090,113093,113118,113121,113123,113883,113885,113897,113899,113910,113912,113915,113932,113935,113937,113948,113951,113953,113999,114002,114015,114018,114100,114103,114105,114121,114131,114144,114147,114186,114196,114207,114217,114230,114233,114262,114265,114275,114278,114284,114301,114312,114314,114320,114337,114348,114369,114372,114384,114387,114408,114411,114419,114427,114444,114447,114516,114523,114531,114534,114547,114554,114556,114559,114565,114568,114571,114577,114583,114585,114625,114627,114633,114642,114645,114647,114667,114670,114673,114679,114683,114685,114712,114715,114718,114745,114751,114754,114757,114759,114762,114765,114771,114774],[10,112790,112786],{"id":112791},"_7控制任务reacher-机械臂到达目标",[14,112793,102078],{"id":102077},[169,112795,112796],{},"本章搭建一个二维两关节 reacher 任务。",[169,112798,105762],{},[34,112800,112801,112804,112807,112810,112813],{},[22,112802,112803],{},"两个 hinge joint",[22,112805,112806],{},"两个 motor actuator",[22,112808,112809],{},"site 作为末端点和目标点",[22,112811,112812],{},"根据末端和目标距离设计 reward",[22,112814,112815],{},"构造机械臂任务的基本形式",[169,112817,112818],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[169,112820,112821],{},"Reacher 任务可以理解为：",[176,112823,112826],{"className":112824,"code":112825,"language":753,"meta":181},[751],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[183,112827,112825],{"__ignoreMap":181},[169,112829,112830],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112832,102201],{"id":102200},[169,112834,102204],{},[176,112836,112837],{"className":25281,"code":105819,"language":25283,"meta":181,"style":181},[183,112838,112839],{"__ignoreMap":181},[186,112840,112841,112843,112845,112847,112849,112851,112853,112855,112857],{"class":188,"line":189},[186,112842,26035],{"class":198},[186,112844,27772],{"class":532},[186,112846,25293],{"class":532},[186,112848,27857],{"class":206},[186,112850,105834],{"class":532},[186,112852,102229],{"class":532},[186,112854,103932],{"class":532},[186,112856,102245],{"class":532},[186,112858,105843],{"class":532},[169,112860,104250],{},[176,112862,112863],{"className":25281,"code":102350,"language":25283,"meta":181,"style":181},[183,112864,112865],{"__ignoreMap":181},[186,112866,112867,112869,112871,112873],{"class":188,"line":189},[186,112868,25290],{"class":198},[186,112870,25293],{"class":532},[186,112872,102361],{"class":532},[186,112874,102364],{"class":532},[169,112876,104267],{},[176,112878,112880],{"className":25281,"code":112879,"language":25283,"meta":181,"style":181},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[183,112881,112882,112899,112908],{"__ignoreMap":181},[186,112883,112884,112886,112888,112890,112893,112895,112897],{"class":188,"line":189},[186,112885,31785],{"class":198},[186,112887,30631],{"class":532},[186,112889,26574],{"class":206},[186,112891,112892],{"class":532}," mujoco-reacher",[186,112894,102406],{"class":532},[186,112896,102409],{"class":206},[186,112898,102412],{"class":206},[186,112900,112901,112903,112905],{"class":188,"line":49},[186,112902,31785],{"class":198},[186,112904,102419],{"class":532},[186,112906,112907],{"class":532}," mujoco-reacher\n",[186,112909,112910,112912,112914,112916],{"class":188,"line":219},[186,112911,25290],{"class":198},[186,112913,25293],{"class":532},[186,112915,102361],{"class":532},[186,112917,102364],{"class":532},[169,112919,102435],{},[34,112921,112922,112925,112928],{},[22,112923,112924],{},"本章使用低维状态，不使用图像输入。",[22,112926,112927],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[22,112929,112930,112931,1824,112933,1824,112935,112937],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[183,112932,105461],{},[183,112934,105791],{},[183,112936,105111],{}," 的方法一致。",[14,112939,102476],{"id":102475},[169,112941,112942],{},"Reacher 任务核心:",[176,112944,112947],{"className":112945,"code":112946,"language":753,"meta":181},[751],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[183,112948,112946],{"__ignoreMap":181},[169,112950,112951],{},"读取 site 世界坐标:",[176,112953,112955],{"className":31833,"code":112954,"language":31835,"meta":181,"style":181},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[183,112956,112957,112970],{"__ignoreMap":181},[186,112958,112959,112961,112963,112965,112968],{"class":188,"line":189},[186,112960,105065],{"class":202},[186,112962,529],{"class":669},[186,112964,104836],{"class":202},[186,112966,112967],{"class":532},"\"tip\"",[186,112969,1629],{"class":202},[186,112971,112972,112975,112977],{"class":188,"line":49},[186,112973,112974],{"class":202},"tip_pos ",[186,112976,529],{"class":669},[186,112978,112979],{"class":202}," data.site_xpos[site_id]\n",[29,112981,112983],{"id":112982},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[169,112985,112986,112987,112989],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[183,112988,105461],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[176,112991,112993],{"className":31833,"code":112992,"language":31835,"meta":181,"style":181},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[183,112994,112995,113005],{"__ignoreMap":181},[186,112996,112997,113000,113002],{"class":188,"line":189},[186,112998,112999],{"class":202},"tip ",[186,113001,529],{"class":669},[186,113003,113004],{"class":202}," data.site_xpos[tip_site_id]\n",[186,113006,113007,113010,113012],{"class":188,"line":49},[186,113008,113009],{"class":202},"target ",[186,113011,529],{"class":669},[186,113013,113014],{"class":202}," data.site_xpos[target_site_id]\n",[169,113016,113017],{},"这样 reward 就很容易写：",[176,113019,113021],{"className":31833,"code":113020,"language":31835,"meta":181,"style":181},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[183,113022,113023,113038],{"__ignoreMap":181},[186,113024,113025,113028,113030,113033,113035],{"class":188,"line":189},[186,113026,113027],{"class":202},"dist ",[186,113029,529],{"class":669},[186,113031,113032],{"class":202}," np.linalg.norm(tip ",[186,113034,2142],{"class":669},[186,113036,113037],{"class":202}," target)\n",[186,113039,113040,113042,113044,113046],{"class":188,"line":49},[186,113041,112436],{"class":202},[186,113043,529],{"class":669},[186,113045,53718],{"class":669},[186,113047,113048],{"class":202},"dist\n",[169,113050,113051,113052,113055],{},"距离越小，",[183,113053,113054],{},"-dist"," 越接近 0，奖励越高。",[29,113057,113058],{"id":113058},"两关节机械臂的状态",[169,113060,113061],{},"这个模型有两个 hinge joint：",[176,113063,113066],{"className":113064,"code":113065,"language":753,"meta":181},[751],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[183,113067,113065],{"__ignoreMap":181},[169,113069,113070],{},"再加上末端和目标位置：",[176,113072,113075],{"className":113073,"code":113074,"language":753,"meta":181},[751],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[183,113076,113074],{"__ignoreMap":181},[169,113078,113079],{},"总维度：",[176,113081,113084],{"className":113082,"code":113083,"language":753,"meta":181},[751],"2 + 2 + 3 + 3 = 10\n",[183,113085,113083],{"__ignoreMap":181},[29,113087,113089],{"id":113088},"为什么-gravity-是-0","为什么 gravity 是 0",[169,113091,113092],{},"本章把重力设为：",[176,113094,113096],{"className":54514,"code":113095,"language":54516,"meta":181,"style":181},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[183,113097,113098],{"__ignoreMap":181},[186,113099,113100,113102,113104,113106,113108,113110,113112,113114,113116],{"class":188,"line":189},[186,113101,520],{"class":202},[186,113103,70603],{"class":523},[186,113105,102625],{"class":198},[186,113107,529],{"class":202},[186,113109,102630],{"class":532},[186,113111,102633],{"class":198},[186,113113,529],{"class":202},[186,113115,105202],{"class":532},[186,113117,102575],{"class":202},[169,113119,113120],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113122,102684],{"id":102683},[176,113124,113126],{"className":31833,"code":113125,"language":31835,"meta":181,"style":181},"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",[183,113127,113128,113134,113144,113148,113152,113160,113165,113170,113174,113178,113183,113188,113192,113197,113202,113207,113211,113216,113221,113226,113231,113235,113239,113243,113247,113251,113256,113261,113265,113269,113273,113277,113281,113296,113305,113317,113340,113347,113351,113355,113365,113379,113393,113400,113404,113408,113422,113434,113446,113459,113474,113491,113495,113499,113511,113523,113531,113539,113543,113559,113564,113577,113590,113605,113609,113644,113676,113680,113684,113693,113697,113713,113723,113734,113750,113766,113782,113798,113802,113820,113840,113859,113863,113867,113879],{"__ignoreMap":181},[186,113129,113130,113132],{"class":188,"line":189},[186,113131,31847],{"class":669},[186,113133,102732],{"class":202},[186,113135,113136,113138,113140,113142],{"class":188,"line":49},[186,113137,31847],{"class":669},[186,113139,32835],{"class":202},[186,113141,32838],{"class":669},[186,113143,32841],{"class":202},[186,113145,113146],{"class":188,"line":219},[186,113147,3867],{"emptyLinePlaceholder":1551},[186,113149,113150],{"class":188,"line":225},[186,113151,3867],{"emptyLinePlaceholder":1551},[186,113153,113154,113156,113158],{"class":188,"line":242},[186,113155,102745],{"class":206},[186,113157,15027],{"class":669},[186,113159,102750],{"class":532},[186,113161,113162],{"class":188,"line":248},[186,113163,113164],{"class":532},"\u003Cmujoco model=\"two_link_reacher\">\n",[186,113166,113167],{"class":188,"line":265},[186,113168,113169],{"class":532},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[186,113171,113172],{"class":188,"line":271},[186,113173,3867],{"emptyLinePlaceholder":1551},[186,113175,113176],{"class":188,"line":288},[186,113177,102769],{"class":532},[186,113179,113180],{"class":188,"line":294},[186,113181,113182],{"class":532},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[186,113184,113185],{"class":188,"line":1212},[186,113186,113187],{"class":532},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[186,113189,113190],{"class":188,"line":1223},[186,113191,3867],{"emptyLinePlaceholder":1551},[186,113193,113194],{"class":188,"line":1236},[186,113195,113196],{"class":532},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[186,113198,113199],{"class":188,"line":3096},[186,113200,113201],{"class":532},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[186,113203,113204],{"class":188,"line":3110},[186,113205,113206],{"class":532},"      \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",[186,113208,113209],{"class":188,"line":3115},[186,113210,3867],{"emptyLinePlaceholder":1551},[186,113212,113213],{"class":188,"line":3121},[186,113214,113215],{"class":532},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[186,113217,113218],{"class":188,"line":3142},[186,113219,113220],{"class":532},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[186,113222,113223],{"class":188,"line":3147},[186,113224,113225],{"class":532},"        \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",[186,113227,113228],{"class":188,"line":3161},[186,113229,113230],{"class":532},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[186,113232,113233],{"class":188,"line":3166},[186,113234,107869],{"class":532},[186,113236,113237],{"class":188,"line":3195},[186,113238,102798],{"class":532},[186,113240,113241],{"class":188,"line":3200},[186,113242,102803],{"class":532},[186,113244,113245],{"class":188,"line":3217},[186,113246,3867],{"emptyLinePlaceholder":1551},[186,113248,113249],{"class":188,"line":3222},[186,113250,107886],{"class":532},[186,113252,113253],{"class":188,"line":3227},[186,113254,113255],{"class":532},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[186,113257,113258],{"class":188,"line":3232},[186,113259,113260],{"class":532},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[186,113262,113263],{"class":188,"line":3246},[186,113264,107896],{"class":532},[186,113266,113267],{"class":188,"line":3251},[186,113268,102808],{"class":532},[186,113270,113271],{"class":188,"line":4044},[186,113272,97129],{"class":532},[186,113274,113275],{"class":188,"line":4058},[186,113276,3867],{"emptyLinePlaceholder":1551},[186,113278,113279],{"class":188,"line":4066},[186,113280,3867],{"emptyLinePlaceholder":1551},[186,113282,113283,113285,113288,113291,113293],{"class":188,"line":4071},[186,113284,33402],{"class":669},[186,113286,113287],{"class":198}," site_position",[186,113289,113290],{"class":202},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[186,113292,2775],{"class":206},[186,113294,113295],{"class":202},") -> np.ndarray:\n",[186,113297,113298,113300,113302],{"class":188,"line":4077},[186,113299,104831],{"class":202},[186,113301,529],{"class":669},[186,113303,113304],{"class":202}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[186,113306,113307,113309,113311,113313,113315],{"class":188,"line":4083},[186,113308,4567],{"class":669},[186,113310,104880],{"class":202},[186,113312,520],{"class":669},[186,113314,5559],{"class":206},[186,113316,5205],{"class":202},[186,113318,113319,113321,113323,113325,113327,113330,113332,113334,113336,113338],{"class":188,"line":4088},[186,113320,104863],{"class":669},[186,113322,104866],{"class":206},[186,113324,832],{"class":202},[186,113326,1673],{"class":669},[186,113328,113329],{"class":532},"\"site not found: ",[186,113331,2504],{"class":206},[186,113333,81242],{"class":202},[186,113335,2553],{"class":206},[186,113337,1862],{"class":532},[186,113339,1629],{"class":202},[186,113341,113342,113344],{"class":188,"line":9411},[186,113343,5556],{"class":669},[186,113345,113346],{"class":202}," data.site_xpos[site_id].copy()\n",[186,113348,113349],{"class":188,"line":9435},[186,113350,3867],{"emptyLinePlaceholder":1551},[186,113352,113353],{"class":188,"line":9440},[186,113354,3867],{"emptyLinePlaceholder":1551},[186,113356,113357,113359,113362],{"class":188,"line":9446},[186,113358,33402],{"class":669},[186,113360,113361],{"class":198}," get_obs",[186,113363,113364],{"class":202},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[186,113366,113367,113370,113372,113375,113377],{"class":188,"line":9473},[186,113368,113369],{"class":202},"    tip ",[186,113371,529],{"class":669},[186,113373,113374],{"class":202}," site_position(model, data, ",[186,113376,112967],{"class":532},[186,113378,1629],{"class":202},[186,113380,113381,113384,113386,113388,113391],{"class":188,"line":9478},[186,113382,113383],{"class":202},"    target ",[186,113385,529],{"class":669},[186,113387,113374],{"class":202},[186,113389,113390],{"class":532},"\"target\"",[186,113392,1629],{"class":202},[186,113394,113395,113397],{"class":188,"line":9484},[186,113396,5556],{"class":669},[186,113398,113399],{"class":202}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[186,113401,113402],{"class":188,"line":9496},[186,113403,3867],{"emptyLinePlaceholder":1551},[186,113405,113406],{"class":188,"line":9508},[186,113407,3867],{"emptyLinePlaceholder":1551},[186,113409,113410,113412,113415,113418,113420],{"class":188,"line":9520},[186,113411,33402],{"class":669},[186,113413,113414],{"class":198}," reward",[186,113416,113417],{"class":202},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[186,113419,1662],{"class":206},[186,113421,5205],{"class":202},[186,113423,113424,113426,113428,113430,113432],{"class":188,"line":11179},[186,113425,113369],{"class":202},[186,113427,529],{"class":669},[186,113429,113374],{"class":202},[186,113431,112967],{"class":532},[186,113433,1629],{"class":202},[186,113435,113436,113438,113440,113442,113444],{"class":188,"line":11204},[186,113437,113383],{"class":202},[186,113439,529],{"class":669},[186,113441,113374],{"class":202},[186,113443,113390],{"class":532},[186,113445,1629],{"class":202},[186,113447,113448,113451,113453,113455,113457],{"class":188,"line":11227},[186,113449,113450],{"class":202},"    dist ",[186,113452,529],{"class":669},[186,113454,113032],{"class":202},[186,113456,2142],{"class":669},[186,113458,113037],{"class":202},[186,113460,113461,113464,113466,113469,113471],{"class":188,"line":11251},[186,113462,113463],{"class":202},"    control_cost ",[186,113465,529],{"class":669},[186,113467,113468],{"class":206}," 0.01",[186,113470,7981],{"class":669},[186,113472,113473],{"class":202}," np.sum(np.square(data.ctrl))\n",[186,113475,113476,113478,113480,113482,113484,113486,113488],{"class":188,"line":11256},[186,113477,5556],{"class":669},[186,113479,111228],{"class":206},[186,113481,832],{"class":202},[186,113483,2142],{"class":669},[186,113485,113027],{"class":202},[186,113487,2142],{"class":669},[186,113489,113490],{"class":202}," control_cost)\n",[186,113492,113493],{"class":188,"line":11261},[186,113494,3867],{"emptyLinePlaceholder":1551},[186,113496,113497],{"class":188,"line":11266},[186,113498,3867],{"emptyLinePlaceholder":1551},[186,113500,113501,113503,113505,113507,113509],{"class":188,"line":11275},[186,113502,33402],{"class":669},[186,113504,3440],{"class":198},[186,113506,102829],{"class":202},[186,113508,97117],{"class":206},[186,113510,5205],{"class":202},[186,113512,113513,113515,113517,113519,113521],{"class":188,"line":11280},[186,113514,102838],{"class":202},[186,113516,529],{"class":669},[186,113518,102843],{"class":202},[186,113520,102745],{"class":206},[186,113522,1629],{"class":202},[186,113524,113525,113527,113529],{"class":188,"line":11286},[186,113526,102852],{"class":202},[186,113528,529],{"class":669},[186,113530,102857],{"class":202},[186,113532,113533,113535,113537],{"class":188,"line":11307},[186,113534,111584],{"class":202},[186,113536,529],{"class":669},[186,113538,106192],{"class":206},[186,113540,113541],{"class":188,"line":11313},[186,113542,3867],{"emptyLinePlaceholder":1551},[186,113544,113545,113547,113549,113551,113553,113555,113557],{"class":188,"line":11327},[186,113546,4667],{"class":669},[186,113548,33071],{"class":202},[186,113550,27500],{"class":669},[186,113552,33898],{"class":206},[186,113554,832],{"class":202},[186,113556,66511],{"class":206},[186,113558,32241],{"class":202},[186,113560,113561],{"class":188,"line":11333},[186,113562,113563],{"class":202},"        mujoco.mj_forward(model, data)\n",[186,113565,113566,113569,113571,113573,113575],{"class":188,"line":11360},[186,113567,113568],{"class":202},"        tip ",[186,113570,529],{"class":669},[186,113572,113374],{"class":202},[186,113574,112967],{"class":532},[186,113576,1629],{"class":202},[186,113578,113579,113582,113584,113586,113588],{"class":188,"line":11369},[186,113580,113581],{"class":202},"        target ",[186,113583,529],{"class":669},[186,113585,113374],{"class":202},[186,113587,113390],{"class":532},[186,113589,1629],{"class":202},[186,113591,113592,113595,113597,113600,113602],{"class":188,"line":11375},[186,113593,113594],{"class":202},"        error ",[186,113596,529],{"class":669},[186,113598,113599],{"class":202}," target ",[186,113601,2142],{"class":669},[186,113603,113604],{"class":202}," tip\n",[186,113606,113607],{"class":188,"line":11383},[186,113608,3867],{"emptyLinePlaceholder":1551},[186,113610,113611,113613,113615,113617,113619,113622,113624,113626,113629,113631,113634,113636,113638,113640,113642],{"class":188,"line":11388},[186,113612,108048],{"class":202},[186,113614,1803],{"class":206},[186,113616,5909],{"class":202},[186,113618,529],{"class":669},[186,113620,113621],{"class":202}," np.clip(",[186,113623,106691],{"class":206},[186,113625,7981],{"class":669},[186,113627,113628],{"class":202}," error[",[186,113630,1697],{"class":206},[186,113632,113633],{"class":202},"], ",[186,113635,2142],{"class":669},[186,113637,103834],{"class":206},[186,113639,13898],{"class":202},[186,113641,103834],{"class":206},[186,113643,1629],{"class":202},[186,113645,113646,113648,113650,113652,113654,113656,113658,113660,113662,113664,113666,113668,113670,113672,113674],{"class":188,"line":18065},[186,113647,108048],{"class":202},[186,113649,1829],{"class":206},[186,113651,5909],{"class":202},[186,113653,529],{"class":669},[186,113655,113621],{"class":202},[186,113657,106691],{"class":206},[186,113659,7981],{"class":669},[186,113661,113628],{"class":202},[186,113663,1803],{"class":206},[186,113665,113633],{"class":202},[186,113667,2142],{"class":669},[186,113669,103834],{"class":206},[186,113671,13898],{"class":202},[186,113673,103834],{"class":206},[186,113675,1629],{"class":202},[186,113677,113678],{"class":188,"line":18071},[186,113679,3867],{"emptyLinePlaceholder":1551},[186,113681,113682],{"class":188,"line":18094},[186,113683,102947],{"class":202},[186,113685,113686,113688,113690],{"class":188,"line":18100},[186,113687,111728],{"class":202},[186,113689,10940],{"class":669},[186,113691,113692],{"class":202}," reward(model, data)\n",[186,113694,113695],{"class":188,"line":18123},[186,113696,3867],{"emptyLinePlaceholder":1551},[186,113698,113699,113701,113703,113705,113707,113709,113711],{"class":188,"line":18137},[186,113700,3964],{"class":669},[186,113702,33071],{"class":202},[186,113704,670],{"class":669},[186,113706,7217],{"class":206},[186,113708,102990],{"class":669},[186,113710,5559],{"class":206},[186,113712,5205],{"class":202},[186,113714,113715,113718,113720],{"class":188,"line":18157},[186,113716,113717],{"class":202},"            obs ",[186,113719,529],{"class":669},[186,113721,113722],{"class":202}," get_obs(model, data)\n",[186,113724,113725,113727,113729,113731],{"class":188,"line":18163},[186,113726,36105],{"class":206},[186,113728,832],{"class":202},[186,113730,111762],{"class":532},[186,113732,113733],{"class":202},", step)\n",[186,113735,113736,113738,113740,113743,113746,113748],{"class":188,"line":18174},[186,113737,36105],{"class":206},[186,113739,832],{"class":202},[186,113741,113742],{"class":532},"\"  tip:\"",[186,113744,113745],{"class":202},", np.round(tip, ",[186,113747,1691],{"class":206},[186,113749,31952],{"class":202},[186,113751,113752,113754,113756,113759,113762,113764],{"class":188,"line":18197},[186,113753,36105],{"class":206},[186,113755,832],{"class":202},[186,113757,113758],{"class":532},"\"  target:\"",[186,113760,113761],{"class":202},", np.round(target, ",[186,113763,1691],{"class":206},[186,113765,31952],{"class":202},[186,113767,113768,113770,113772,113775,113778,113780],{"class":188,"line":18219},[186,113769,36105],{"class":206},[186,113771,832],{"class":202},[186,113773,113774],{"class":532},"\"  ctrl:\"",[186,113776,113777],{"class":202},", np.round(data.ctrl.copy(), ",[186,113779,1691],{"class":206},[186,113781,31952],{"class":202},[186,113783,113784,113786,113788,113791,113794,113796],{"class":188,"line":18224},[186,113785,36105],{"class":206},[186,113787,832],{"class":202},[186,113789,113790],{"class":532},"\"  obs_dim:\"",[186,113792,113793],{"class":202},", obs.shape[",[186,113795,1803],{"class":206},[186,113797,6123],{"class":202},[186,113799,113800],{"class":188,"line":18230},[186,113801,3867],{"emptyLinePlaceholder":1551},[186,113803,113804,113806,113808,113810,113812,113814,113816,113818],{"class":188,"line":18244},[186,113805,32754],{"class":206},[186,113807,832],{"class":202},[186,113809,111807],{"class":532},[186,113811,13898],{"class":202},[186,113813,33473],{"class":206},[186,113815,111814],{"class":202},[186,113817,1691],{"class":206},[186,113819,31952],{"class":202},[186,113821,113822,113824,113826,113829,113832,113834,113836,113838],{"class":188,"line":18257},[186,113823,32754],{"class":206},[186,113825,832],{"class":202},[186,113827,113828],{"class":532},"\"final tip:\"",[186,113830,113831],{"class":202},", np.round(site_position(model, data, ",[186,113833,112967],{"class":532},[186,113835,111776],{"class":202},[186,113837,1691],{"class":206},[186,113839,31952],{"class":202},[186,113841,113842,113844,113846,113849,113851,113853,113855,113857],{"class":188,"line":18262},[186,113843,32754],{"class":206},[186,113845,832],{"class":202},[186,113847,113848],{"class":532},"\"target:\"",[186,113850,113831],{"class":202},[186,113852,113390],{"class":532},[186,113854,111776],{"class":202},[186,113856,1691],{"class":206},[186,113858,31952],{"class":202},[186,113860,113861],{"class":188,"line":18276},[186,113862,3867],{"emptyLinePlaceholder":1551},[186,113864,113865],{"class":188,"line":18281},[186,113866,3867],{"emptyLinePlaceholder":1551},[186,113868,113869,113871,113873,113875,113877],{"class":188,"line":18287},[186,113870,3003],{"class":669},[186,113872,32675],{"class":206},[186,113874,102990],{"class":669},[186,113876,102993],{"class":532},[186,113878,5205],{"class":202},[186,113880,113881],{"class":188,"line":18292},[186,113882,103000],{"class":202},[169,113884,105001],{},[176,113886,113888],{"className":25281,"code":113887,"language":25283,"meta":181,"style":181},"touch ch7_reacher.py\n",[183,113889,113890],{"__ignoreMap":181},[186,113891,113892,113894],{"class":188,"line":189},[186,113893,102714],{"class":198},[186,113895,113896],{"class":532}," ch7_reacher.py\n",[169,113898,111875],{},[176,113900,113902],{"className":25281,"code":113901,"language":25283,"meta":181,"style":181},"python ch7_reacher.py\n",[183,113903,113904],{"__ignoreMap":181},[186,113905,113906,113908],{"class":188,"line":189},[186,113907,31835],{"class":198},[186,113909,113896],{"class":532},[29,113911,103003],{"id":103003},[169,113913,113914],{},"读取 site 坐标：",[176,113916,113918],{"className":31833,"code":113917,"language":31835,"meta":181,"style":181},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[183,113919,113920],{"__ignoreMap":181},[186,113921,113922,113924,113926,113928,113930],{"class":188,"line":189},[186,113923,33402],{"class":669},[186,113925,113287],{"class":198},[186,113927,113290],{"class":202},[186,113929,2775],{"class":206},[186,113931,113295],{"class":202},[169,113933,113934],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[169,113936,111891],{},[176,113938,113940],{"className":31833,"code":113939,"language":31835,"meta":181,"style":181},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[183,113941,113942],{"__ignoreMap":181},[186,113943,113944,113946],{"class":188,"line":189},[186,113945,18507],{"class":669},[186,113947,113399],{"class":202},[169,113949,113950],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[169,113952,111216],{},[176,113954,113956],{"className":31833,"code":113955,"language":31835,"meta":181,"style":181},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[183,113957,113958,113970,113983],{"__ignoreMap":181},[186,113959,113960,113962,113964,113966,113968],{"class":188,"line":189},[186,113961,113027],{"class":202},[186,113963,529],{"class":669},[186,113965,113032],{"class":202},[186,113967,2142],{"class":669},[186,113969,113037],{"class":202},[186,113971,113972,113975,113977,113979,113981],{"class":188,"line":49},[186,113973,113974],{"class":202},"control_cost ",[186,113976,529],{"class":669},[186,113978,113468],{"class":206},[186,113980,7981],{"class":669},[186,113982,113473],{"class":202},[186,113984,113985,113987,113989,113991,113993,113995,113997],{"class":188,"line":219},[186,113986,18507],{"class":669},[186,113988,111228],{"class":206},[186,113990,832],{"class":202},[186,113992,2142],{"class":669},[186,113994,113027],{"class":202},[186,113996,2142],{"class":669},[186,113998,113490],{"class":202},[169,114000,114001],{},"奖励由两部分组成：",[34,114003,114004,114009],{},[22,114005,114006,114008],{},[183,114007,113054],{},"：末端离目标越远，奖励越低。",[22,114010,114011,114014],{},[183,114012,114013],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[169,114016,114017],{},"简单控制器：",[176,114019,114021],{"className":31833,"code":114020,"language":31835,"meta":181,"style":181},"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",[183,114022,114023,114036,114068],{"__ignoreMap":181},[186,114024,114025,114028,114030,114032,114034],{"class":188,"line":189},[186,114026,114027],{"class":202},"error ",[186,114029,529],{"class":669},[186,114031,113599],{"class":202},[186,114033,2142],{"class":669},[186,114035,113604],{"class":202},[186,114037,114038,114040,114042,114044,114046,114048,114050,114052,114054,114056,114058,114060,114062,114064,114066],{"class":188,"line":49},[186,114039,107302],{"class":202},[186,114041,1803],{"class":206},[186,114043,5909],{"class":202},[186,114045,529],{"class":669},[186,114047,113621],{"class":202},[186,114049,106691],{"class":206},[186,114051,7981],{"class":669},[186,114053,113628],{"class":202},[186,114055,1697],{"class":206},[186,114057,113633],{"class":202},[186,114059,2142],{"class":669},[186,114061,103834],{"class":206},[186,114063,13898],{"class":202},[186,114065,103834],{"class":206},[186,114067,1629],{"class":202},[186,114069,114070,114072,114074,114076,114078,114080,114082,114084,114086,114088,114090,114092,114094,114096,114098],{"class":188,"line":219},[186,114071,107302],{"class":202},[186,114073,1829],{"class":206},[186,114075,5909],{"class":202},[186,114077,529],{"class":669},[186,114079,113621],{"class":202},[186,114081,106691],{"class":206},[186,114083,7981],{"class":669},[186,114085,113628],{"class":202},[186,114087,1803],{"class":206},[186,114089,113633],{"class":202},[186,114091,2142],{"class":669},[186,114093,103834],{"class":206},[186,114095,13898],{"class":202},[186,114097,103834],{"class":206},[186,114099,1629],{"class":202},[169,114101,114102],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[29,114104,103139],{"id":103139},[176,114106,114107],{"className":31833,"code":113917,"language":31835,"meta":181,"style":181},[183,114108,114109],{"__ignoreMap":181},[186,114110,114111,114113,114115,114117,114119],{"class":188,"line":189},[186,114112,33402],{"class":669},[186,114114,113287],{"class":198},[186,114116,113290],{"class":202},[186,114118,2775],{"class":206},[186,114120,113295],{"class":202},[169,114122,114123,114124,114126,114127,83971,114129,913],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[183,114125,81242],{}," 是 site 的名字，比如 ",[183,114128,112967],{},[183,114130,113390],{},[176,114132,114134],{"className":31833,"code":114133,"language":31835,"meta":181,"style":181},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[183,114135,114136],{"__ignoreMap":181},[186,114137,114138,114140,114142],{"class":188,"line":189},[186,114139,105065],{"class":202},[186,114141,529],{"class":669},[186,114143,113304],{"class":202},[169,114145,114146],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[176,114148,114150],{"className":31833,"code":114149,"language":31835,"meta":181,"style":181},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[183,114151,114152,114164],{"__ignoreMap":181},[186,114153,114154,114156,114158,114160,114162],{"class":188,"line":189},[186,114155,3003],{"class":669},[186,114157,104880],{"class":202},[186,114159,520],{"class":669},[186,114161,5559],{"class":206},[186,114163,5205],{"class":202},[186,114165,114166,114168,114170,114172,114174,114176,114178,114180,114182,114184],{"class":188,"line":49},[186,114167,105326],{"class":669},[186,114169,104866],{"class":206},[186,114171,832],{"class":202},[186,114173,1673],{"class":669},[186,114175,113329],{"class":532},[186,114177,2504],{"class":206},[186,114179,81242],{"class":202},[186,114181,2553],{"class":206},[186,114183,1862],{"class":532},[186,114185,1629],{"class":202},[169,114187,114188,114189,114192,114193,114195],{},"如果 site 没找到，就主动报错。",[183,114190,114191],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[183,114194,81242],{}," 的值放进字符串里。",[176,114197,114199],{"className":31833,"code":114198,"language":31835,"meta":181,"style":181},"return data.site_xpos[site_id].copy()\n",[183,114200,114201],{"__ignoreMap":181},[186,114202,114203,114205],{"class":188,"line":189},[186,114204,18507],{"class":669},[186,114206,113346],{"class":202},[169,114208,114209,114210,114212,114213,114216],{},"返回这个 site 的世界坐标。",[183,114211,105111],{}," 里的每一行都是一个 site 的 ",[183,114214,114215],{},"(x, y, z)"," 坐标。",[176,114218,114220],{"className":31833,"code":114219,"language":31835,"meta":181,"style":181},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[183,114221,114222],{"__ignoreMap":181},[186,114223,114224,114226,114228],{"class":188,"line":189},[186,114225,33402],{"class":669},[186,114227,113361],{"class":198},[186,114229,113364],{"class":202},[169,114231,114232],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[176,114234,114236],{"className":31833,"code":114235,"language":31835,"meta":181,"style":181},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[183,114237,114238,114250],{"__ignoreMap":181},[186,114239,114240,114242,114244,114246,114248],{"class":188,"line":189},[186,114241,112999],{"class":202},[186,114243,529],{"class":669},[186,114245,113374],{"class":202},[186,114247,112967],{"class":532},[186,114249,1629],{"class":202},[186,114251,114252,114254,114256,114258,114260],{"class":188,"line":49},[186,114253,113009],{"class":202},[186,114255,529],{"class":669},[186,114257,113374],{"class":202},[186,114259,113390],{"class":532},[186,114261,1629],{"class":202},[169,114263,114264],{},"分别读取末端点和目标点的世界坐标。",[176,114266,114267],{"className":31833,"code":113939,"language":31835,"meta":181,"style":181},[183,114268,114269],{"__ignoreMap":181},[186,114270,114271,114273],{"class":188,"line":189},[186,114272,18507],{"class":669},[186,114274,113399],{"class":202},[169,114276,114277],{},"把四部分拼成一个观测数组：",[176,114279,114282],{"className":114280,"code":114281,"language":753,"meta":181},[751],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[183,114283,114281],{"__ignoreMap":181},[176,114285,114287],{"className":31833,"code":114286,"language":31835,"meta":181,"style":181},"dist = np.linalg.norm(tip - target)\n",[183,114288,114289],{"__ignoreMap":181},[186,114290,114291,114293,114295,114297,114299],{"class":188,"line":189},[186,114292,113027],{"class":202},[186,114294,529],{"class":669},[186,114296,113032],{"class":202},[186,114298,2142],{"class":669},[186,114300,113037],{"class":202},[169,114302,114303,114304,114307,114308,114311],{},"计算 tip 到 target 的距离。",[183,114305,114306],{},"tip - target"," 得到一个三维向量，",[183,114309,114310],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[169,114313,16095],{},[176,114315,114318],{"className":114316,"code":114317,"language":753,"meta":181},[751],"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",[183,114319,114317],{"__ignoreMap":181},[176,114321,114323],{"className":31833,"code":114322,"language":31835,"meta":181,"style":181},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[183,114324,114325],{"__ignoreMap":181},[186,114326,114327,114329,114331,114333,114335],{"class":188,"line":189},[186,114328,113974],{"class":202},[186,114330,529],{"class":669},[186,114332,113468],{"class":206},[186,114334,7981],{"class":669},[186,114336,113473],{"class":202},[169,114338,114339,114340,114343,114344,114347],{},"计算动作惩罚。",[183,114341,114342],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[183,114345,114346],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[176,114349,114351],{"className":31833,"code":114350,"language":31835,"meta":181,"style":181},"return float(-dist - control_cost)\n",[183,114352,114353],{"__ignoreMap":181},[186,114354,114355,114357,114359,114361,114363,114365,114367],{"class":188,"line":189},[186,114356,18507],{"class":669},[186,114358,111228],{"class":206},[186,114360,832],{"class":202},[186,114362,2142],{"class":669},[186,114364,113027],{"class":202},[186,114366,2142],{"class":669},[186,114368,113490],{"class":202},[169,114370,114371],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[176,114373,114374],{"className":31833,"code":112234,"language":31835,"meta":181,"style":181},[183,114375,114376],{"__ignoreMap":181},[186,114377,114378,114380,114382],{"class":188,"line":189},[186,114379,112241],{"class":202},[186,114381,529],{"class":669},[186,114383,106192],{"class":206},[169,114385,114386],{},"累计奖励变量，记录整个运行过程的总分。",[176,114388,114390],{"className":31833,"code":114389,"language":31835,"meta":181,"style":181},"for step in range(500):\n",[183,114391,114392],{"__ignoreMap":181},[186,114393,114394,114396,114398,114400,114402,114404,114406],{"class":188,"line":189},[186,114395,4491],{"class":669},[186,114397,33071],{"class":202},[186,114399,27500],{"class":669},[186,114401,33898],{"class":206},[186,114403,832],{"class":202},[186,114405,66511],{"class":206},[186,114407,32241],{"class":202},[169,114409,114410],{},"运行 500 个控制步。",[176,114412,114413],{"className":31833,"code":105974,"language":31835,"meta":181,"style":181},[183,114414,114415],{"__ignoreMap":181},[186,114416,114417],{"class":188,"line":189},[186,114418,105974],{"class":202},[169,114420,114421,114422,102449,114424,114426],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[183,114423,104662],{},[183,114425,104665],{}," 是当前状态下的坐标。",[176,114428,114430],{"className":31833,"code":114429,"language":31835,"meta":181,"style":181},"error = target - tip\n",[183,114431,114432],{"__ignoreMap":181},[186,114433,114434,114436,114438,114440,114442],{"class":188,"line":189},[186,114435,114027],{"class":202},[186,114437,529],{"class":669},[186,114439,113599],{"class":202},[186,114441,2142],{"class":669},[186,114443,113604],{"class":202},[169,114445,114446],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[176,114448,114450],{"className":31833,"code":114449,"language":31835,"meta":181,"style":181},"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",[183,114451,114452,114484],{"__ignoreMap":181},[186,114453,114454,114456,114458,114460,114462,114464,114466,114468,114470,114472,114474,114476,114478,114480,114482],{"class":188,"line":189},[186,114455,107302],{"class":202},[186,114457,1803],{"class":206},[186,114459,5909],{"class":202},[186,114461,529],{"class":669},[186,114463,113621],{"class":202},[186,114465,106691],{"class":206},[186,114467,7981],{"class":669},[186,114469,113628],{"class":202},[186,114471,1697],{"class":206},[186,114473,113633],{"class":202},[186,114475,2142],{"class":669},[186,114477,103834],{"class":206},[186,114479,13898],{"class":202},[186,114481,103834],{"class":206},[186,114483,1629],{"class":202},[186,114485,114486,114488,114490,114492,114494,114496,114498,114500,114502,114504,114506,114508,114510,114512,114514],{"class":188,"line":49},[186,114487,107302],{"class":202},[186,114489,1829],{"class":206},[186,114491,5909],{"class":202},[186,114493,529],{"class":669},[186,114495,113621],{"class":202},[186,114497,106691],{"class":206},[186,114499,7981],{"class":669},[186,114501,113628],{"class":202},[186,114503,1803],{"class":206},[186,114505,113633],{"class":202},[186,114507,2142],{"class":669},[186,114509,103834],{"class":206},[186,114511,13898],{"class":202},[186,114513,103834],{"class":206},[186,114515,1629],{"class":202},[169,114517,114518,114519,114522],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[183,114520,114521],{},"error -> ctrl -> step"," 的流程。",[176,114524,114525],{"className":31833,"code":105936,"language":31835,"meta":181,"style":181},[183,114526,114527],{"__ignoreMap":181},[186,114528,114529],{"class":188,"line":189},[186,114530,105936],{"class":202},[169,114532,114533],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[176,114535,114537],{"className":31833,"code":114536,"language":31835,"meta":181,"style":181},"obs = get_obs(model, data)\n",[183,114538,114539],{"__ignoreMap":181},[186,114540,114541,114543,114545],{"class":188,"line":189},[186,114542,112285],{"class":202},[186,114544,529],{"class":669},[186,114546,113722],{"class":202},[169,114548,114549,114550,114553],{},"读取最新观测。后面打印 ",[183,114551,114552],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114555,103747],{"id":103746},[169,114557,114558],{},"观测维度为:",[176,114560,114563],{"className":114561,"code":114562,"language":753,"meta":181},[751],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[183,114564,114562],{"__ignoreMap":181},[169,114566,114567],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[169,114569,114570],{},"程序每 100 步打印：",[176,114572,114575],{"className":114573,"code":114574,"language":753,"meta":181},[751],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[183,114576,114574],{"__ignoreMap":181},[169,114578,114579,114580,114582],{},"如果控制有效，你应该看到最终 ",[183,114581,104662],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114584,103779],{"id":103778},[34,114586,114587,114590,114593,114599,114605,114612,114622],{},[22,114588,114589],{},"修改目标点位置。",[22,114591,114592],{},"重新运行，观察最终 tip 是否变化。",[22,114594,114595,114596,114598],{},"把 gravity 改成 ",[183,114597,104020],{},"，观察控制是否变差。",[22,114600,112612,114601,112616,114603,913],{},[183,114602,103589],{},[183,114604,1697],{},[22,114606,103842,114607,103845,114609,114611],{},[183,114608,112027],{},[183,114610,108738],{},"，观察机械臂是否更难移动。",[22,114613,103842,114614,83962,114616,103845,114618,114621],{},[183,114615,104665],{},[183,114617,105577],{},[183,114619,114620],{},"0.2 0 0.6","，观察 reward 和 final tip。",[22,114623,114624],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114626,103884],{"id":103883},[29,114628,114630],{"id":114629},"site-not-found",[183,114631,114632],{},"site not found",[169,114634,114635,114636,102449,114639,913],{},"检查 XML 中是否有 ",[183,114637,114638],{},"site name=\"tip\"",[183,114640,114641],{},"site name=\"target\"",[29,114643,114644],{"id":114644},"机械臂完全不动",[169,114646,103954],{},[34,114648,114649,114654,114657,114662],{},[22,114650,114651,114653],{},[183,114652,103589],{}," 是否为 2",[22,114655,114656],{},"actuator 是否引用正确 joint",[22,114658,114659,114661],{},[183,114660,102507],{}," 是否被赋值",[22,114663,114664,114665],{},"是否执行了 ",[183,114666,102116],{},[29,114668,114669],{"id":114669},"控制效果不好",[169,114671,114672],{},"正常。本章重点不是控制器最优，而是任务结构:",[176,114674,114677],{"className":114675,"code":114676,"language":753,"meta":181},[751],"obs → action → mj_step → reward → next_obs\n",[183,114678,114676],{"__ignoreMap":181},[29,114680,114682],{"id":114681},"tip-坐标不变化","tip 坐标不变化",[169,114684,104006],{},[34,114686,114687,114692,114700,114709],{},[22,114688,114689,114690,913],{},"是否每步调用了 ",[183,114691,102116],{},[22,114693,114694,114695,102449,114697,913],{},"是否写入了 ",[183,114696,107557],{},[183,114698,114699],{},"data.ctrl[1]",[22,114701,114702,114703,1824,114706,913],{},"actuator 是否正确引用 ",[183,114704,114705],{},"joint1",[183,114707,114708],{},"joint2",[22,114710,114711],{},"控制输入是否太小。",[29,114713,114714],{"id":114714},"目标点不会动",[169,114716,114717],{},"本章的 target 是固定 site：",[176,114719,114721],{"className":54514,"code":114720,"language":54516,"meta":181,"style":181},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[183,114722,114723],{"__ignoreMap":181},[186,114724,114725,114727,114729,114731,114733,114735,114737,114739,114742],{"class":188,"line":189},[186,114726,520],{"class":202},[186,114728,104641],{"class":523},[186,114730,16382],{"class":198},[186,114732,529],{"class":202},[186,114734,113390],{"class":532},[186,114736,102537],{"class":198},[186,114738,529],{"class":202},[186,114740,114741],{"class":532},"\"0.5 0 0.4\"",[186,114743,114744],{"class":202}," ...\u002F>\n",[169,114746,114747,114748,114750],{},"它直接挂在 ",[183,114749,103272],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[29,114752,114753],{"id":114753},"机械臂不像真实机械臂",[169,114755,114756],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114758,104038],{"id":104037},[169,114760,114761],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[169,114763,114764],{},"核心公式：",[176,114766,114769],{"className":114767,"code":114768,"language":753,"meta":181},[751],"distance = ||tip - target||\nreward = -distance - action_cost\n",[183,114770,114768],{"__ignoreMap":181},[169,114772,114773],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1524,114775,114776],{},"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":181,"searchDepth":49,"depth":49,"links":114778},[114779,114780,114781,114786,114790,114791,114792,114800],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":114782},[114783,114784,114785],{"id":112982,"depth":219,"text":112983},{"id":113058,"depth":219,"text":113058},{"id":113088,"depth":219,"text":113089},{"id":102683,"depth":49,"text":102684,"children":114787},[114788,114789],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":114793},[114794,114795,114796,114797,114798,114799],{"id":114629,"depth":219,"text":114632},{"id":114644,"depth":219,"text":114644},{"id":114669,"depth":219,"text":114669},{"id":114681,"depth":219,"text":114682},{"id":114714,"depth":219,"text":114714},{"id":114753,"depth":219,"text":114753},{"id":104037,"depth":49,"text":104038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112786,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114807,"title":114808,"body":114809,"description":181,"extension":1549,"meta":118271,"navigation":1551,"path":118272,"seo":118273,"stem":118274,"__hash__":118275},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114810,"toc":118242},[114811,114814,114816,114819,114822,114847,114850,114856,114859,114865,114867,114869,114893,114895,114913,114915,114958,114960,114987,114989,114992,115044,115047,115053,115062,115065,115103,115106,115145,115148,115156,115163,115166,115172,115174,115228,115235,115280,115283,115287,115303,115313,115315,116576,116578,116590,116592,116603,116605,116608,116629,116632,116635,116668,116674,116677,116710,116713,116716,116757,116762,116776,116779,116792,116797,116820,116822,116837,116847,116862,116869,116889,116904,116922,116925,116942,116950,116966,116972,117004,117017,117049,117059,117094,117108,117154,117168,117210,117221,117234,117240,117273,117276,117303,117313,117353,117363,117380,117387,117405,117408,117449,117462,117477,117480,117503,117506,117518,117521,117540,117545,117566,117569,117584,117587,117621,117633,117648,117651,117676,117679,117698,117701,117733,117736,117760,117766,117796,117803,117816,117819,117821,117823,117829,117832,117835,117847,117850,117852,117906,117908,117912,117918,117927,117930,117937,117939,117962,117965,117969,117971,117989,117995,117997,118030,118033,118039,118043,118046,118066,118071,118075,118082,118102,118107,118111,118114,118134,118137,118223,118227,118230,118236,118239],[10,114812,114808],{"id":114813},"_8gymnasium-风格强化学习接口基础",[14,114815,102078],{"id":102077},[169,114817,114818],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[169,114820,114821],{},"你将实现:",[176,114823,114825],{"className":31833,"code":114824,"language":31835,"meta":181,"style":181},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[183,114826,114827,114837],{"__ignoreMap":181},[186,114828,114829,114832,114834],{"class":188,"line":189},[186,114830,114831],{"class":202},"obs, info ",[186,114833,529],{"class":669},[186,114835,114836],{"class":202}," env.reset()\n",[186,114838,114839,114842,114844],{"class":188,"line":49},[186,114840,114841],{"class":202},"obs, reward, terminated, truncated, info ",[186,114843,529],{"class":669},[186,114845,114846],{"class":202}," env.step(action)\n",[169,114848,114849],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[169,114851,114852,114853,114855],{},"前面章节的代码都是“脚本式”的：在 ",[183,114854,103726],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[169,114857,114858],{},"可以先记住 Gymnasium 环境的核心交互：",[176,114860,114863],{"className":114861,"code":114862,"language":753,"meta":181},[751],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[183,114864,114862],{"__ignoreMap":181},[14,114866,102201],{"id":102200},[169,114868,102204],{},[176,114870,114871],{"className":25281,"code":105819,"language":25283,"meta":181,"style":181},[183,114872,114873],{"__ignoreMap":181},[186,114874,114875,114877,114879,114881,114883,114885,114887,114889,114891],{"class":188,"line":189},[186,114876,26035],{"class":198},[186,114878,27772],{"class":532},[186,114880,25293],{"class":532},[186,114882,27857],{"class":206},[186,114884,105834],{"class":532},[186,114886,102229],{"class":532},[186,114888,103932],{"class":532},[186,114890,102245],{"class":532},[186,114892,105843],{"class":532},[169,114894,104250],{},[176,114896,114898],{"className":25281,"code":114897,"language":25283,"meta":181,"style":181},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[183,114899,114900],{"__ignoreMap":181},[186,114901,114902,114904,114906,114908,114910],{"class":188,"line":189},[186,114903,25290],{"class":198},[186,114905,25293],{"class":532},[186,114907,102361],{"class":532},[186,114909,109142],{"class":532},[186,114911,114912],{"class":532}," gymnasium\n",[169,114914,104267],{},[176,114916,114918],{"className":25281,"code":114917,"language":25283,"meta":181,"style":181},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[183,114919,114920,114937,114946],{"__ignoreMap":181},[186,114921,114922,114924,114926,114928,114931,114933,114935],{"class":188,"line":189},[186,114923,31785],{"class":198},[186,114925,30631],{"class":532},[186,114927,26574],{"class":206},[186,114929,114930],{"class":532}," mujoco-gym-api",[186,114932,102406],{"class":532},[186,114934,102409],{"class":206},[186,114936,102412],{"class":206},[186,114938,114939,114941,114943],{"class":188,"line":49},[186,114940,31785],{"class":198},[186,114942,102419],{"class":532},[186,114944,114945],{"class":532}," mujoco-gym-api\n",[186,114947,114948,114950,114952,114954,114956],{"class":188,"line":219},[186,114949,25290],{"class":198},[186,114951,25293],{"class":532},[186,114953,102361],{"class":532},[186,114955,109142],{"class":532},[186,114957,114912],{"class":532},[169,114959,102435],{},[34,114961,114962,114972,114975,114981],{},[22,114963,114964,114965,114968,114969,913],{},"本章使用 ",[183,114966,114967],{},"gymnasium","，不是旧版 ",[183,114970,114971],{},"gym",[22,114973,114974],{},"Gymnasium API 与旧 Gym API 有差异。",[22,114976,114977,114978,913],{},"旧 Gym 常见返回值是 4 个: ",[183,114979,114980],{},"obs, reward, done, info",[22,114982,114983,114984,913],{},"Gymnasium 返回值是 5 个: ",[183,114985,114986],{},"obs, reward, terminated, truncated, info",[14,114988,102476],{"id":102475},[169,114990,114991],{},"强化学习环境接口包含:",[99,114993,114994,115003],{},[102,114995,114996],{},[105,114997,114998,115001],{},[108,114999,115000],{"align":110},"方法",[108,115002,104127],{"align":110},[116,115004,115005,115015,115025,115035],{},[105,115006,115007,115012],{},[121,115008,115009],{"align":110},[183,115010,115011],{},"reset()",[121,115013,115014],{"align":110},"重置环境",[105,115016,115017,115022],{},[121,115018,115019],{"align":110},[183,115020,115021],{},"step(action)",[121,115023,115024],{"align":110},"执行动作",[105,115026,115027,115032],{},[121,115028,115029],{"align":110},[183,115030,115031],{},"observation_space",[121,115033,115034],{"align":110},"观测空间",[105,115036,115037,115042],{},[121,115038,115039],{"align":110},[183,115040,115041],{},"action_space",[121,115043,25115],{"align":110},[169,115045,115046],{},"一个最小环境需要完成:",[176,115048,115051],{"className":115049,"code":115050,"language":753,"meta":181},[751],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[183,115052,115050],{"__ignoreMap":181},[29,115054,115056,102449,115059,106069],{"id":115055},"terminated-和-truncated-的区别",[183,115057,115058],{},"terminated",[183,115060,115061],{},"truncated",[169,115063,115064],{},"Gymnasium 把“结束”拆成两个概念：",[99,115066,115067,115077],{},[102,115068,115069],{},[105,115070,115071,115073,115075],{},[108,115072,106005],{"align":110},[108,115074,102131],{"align":110},[108,115076,22648],{"align":110},[116,115078,115079,115091],{},[105,115080,115081,115085,115088],{},[121,115082,115083],{"align":110},[183,115084,115058],{},[121,115086,115087],{"align":110},"任务自然结束",[121,115089,115090],{"align":110},"机械臂到达目标、机器人摔倒",[105,115092,115093,115097,115100],{},[121,115094,115095],{"align":110},[183,115096,115061],{},[121,115098,115099],{"align":110},"因外部限制截断",[121,115101,115102],{"align":110},"达到最大步数、时间限制",[169,115104,115105],{},"本章中：",[176,115107,115109],{"className":31833,"code":115108,"language":31835,"meta":181,"style":181},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[183,115110,115111,115126],{"__ignoreMap":181},[186,115112,115113,115116,115118,115121,115123],{"class":188,"line":189},[186,115114,115115],{"class":202},"terminated ",[186,115117,529],{"class":669},[186,115119,115120],{"class":202}," dist ",[186,115122,520],{"class":669},[186,115124,115125],{"class":206}," 0.05\n",[186,115127,115128,115131,115133,115135,115138,115140,115142],{"class":188,"line":49},[186,115129,115130],{"class":202},"truncated ",[186,115132,529],{"class":669},[186,115134,40327],{"class":206},[186,115136,115137],{"class":202},".steps ",[186,115139,3178],{"class":669},[186,115141,40327],{"class":206},[186,115143,115144],{"class":202},".max_steps\n",[169,115146,115147],{},"也就是：",[34,115149,115150,115153],{},[22,115151,115152],{},"末端距离目标小于 0.05，任务成功结束。",[22,115154,115155],{},"步数超过上限，episode 被截断。",[29,115157,115159,102449,115161],{"id":115158},"observation_space-和-action_space",[183,115160,115031],{},[183,115162,115041],{},[169,115164,115165],{},"这两个对象告诉算法：",[176,115167,115170],{"className":115168,"code":115169,"language":753,"meta":181},[751],"观测长什么样\n动作允许多大\n",[183,115171,115169],{"__ignoreMap":181},[169,115173,16095],{},[176,115175,115177],{"className":31833,"code":115176,"language":31835,"meta":181,"style":181},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[183,115178,115179],{"__ignoreMap":181},[186,115180,115181,115183,115186,115188,115191,115194,115197,115199,115201,115204,115206,115208,115210,115212,115214,115216,115218,115221,115223,115225],{"class":188,"line":189},[186,115182,32278],{"class":206},[186,115184,115185],{"class":202},".action_space ",[186,115187,529],{"class":669},[186,115189,115190],{"class":202}," spaces.Box(",[186,115192,115193],{"class":835},"low",[186,115195,115196],{"class":669},"=-",[186,115198,103834],{"class":206},[186,115200,13898],{"class":202},[186,115202,115203],{"class":835},"high",[186,115205,529],{"class":669},[186,115207,103834],{"class":206},[186,115209,13898],{"class":202},[186,115211,97394],{"class":835},[186,115213,529],{"class":669},[186,115215,832],{"class":202},[186,115217,1697],{"class":206},[186,115219,115220],{"class":202},",), ",[186,115222,94931],{"class":835},[186,115224,529],{"class":669},[186,115226,115227],{"class":202},"np.float32)\n",[169,115229,115230,115231,115234],{},"表示动作是 2 维数组，每个值都在 ",[183,115232,115233],{},"[-1, 1]"," 范围内。",[176,115236,115238],{"className":31833,"code":115237,"language":31835,"meta":181,"style":181},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[183,115239,115240],{"__ignoreMap":181},[186,115241,115242,115244,115247,115249,115251,115253,115255,115258,115260,115262,115264,115266,115268,115270,115272,115274,115276,115278],{"class":188,"line":189},[186,115243,32278],{"class":206},[186,115245,115246],{"class":202},".observation_space ",[186,115248,529],{"class":669},[186,115250,115190],{"class":202},[186,115252,115193],{"class":835},[186,115254,115196],{"class":669},[186,115256,115257],{"class":202},"np.inf, ",[186,115259,115203],{"class":835},[186,115261,529],{"class":669},[186,115263,115257],{"class":202},[186,115265,97394],{"class":835},[186,115267,529],{"class":669},[186,115269,832],{"class":202},[186,115271,2056],{"class":206},[186,115273,115220],{"class":202},[186,115275,94931],{"class":835},[186,115277,529],{"class":669},[186,115279,115227],{"class":202},[169,115281,115282],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[29,115284,115286],{"id":115285},"frame_skip-是什么","frame_skip 是什么",[176,115288,115290],{"className":31833,"code":115289,"language":31835,"meta":181,"style":181},"self.frame_skip = 5\n",[183,115291,115292],{"__ignoreMap":181},[186,115293,115294,115296,115299,115301],{"class":188,"line":189},[186,115295,32278],{"class":206},[186,115297,115298],{"class":202},".frame_skip ",[186,115300,529],{"class":669},[186,115302,55872],{"class":206},[169,115304,115305,115306,115309,115310,115312],{},"表示外部调用一次 ",[183,115307,115308],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[183,115311,102646],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115314,102684],{"id":102683},[176,115316,115318],{"className":31833,"code":115317,"language":31835,"meta":181,"style":181},"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",[183,115319,115320,115332,115338,115348,115359,115363,115367,115375,115380,115384,115388,115392,115396,115400,115404,115408,115413,115417,115421,115425,115430,115434,115438,115442,115446,115450,115454,115458,115462,115466,115470,115474,115478,115482,115500,115515,115519,115532,115542,115557,115574,115578,115599,115618,115643,115657,115661,115671,115683,115693,115697,115739,115777,115781,115791,115807,115822,115841,115848,115852,115865,115880,115895,115908,115927,115943,115947,115988,116003,116018,116022,116061,116072,116085,116089,116099,116108,116112,116122,116137,116155,116159,116170,116187,116200,116204,116214,116218,116229,116240,116244,116258,116272,116288,116292,116305,116322,116337,116344,116348,116352,116364,116374,116392,116404,116416,116420,116428,116444,116453,116462,116470,116512,116525,116530,116534,116552,116556,116560,116572],{"__ignoreMap":181},[186,115321,115322,115324,115327,115329],{"class":188,"line":189},[186,115323,31847],{"class":669},[186,115325,115326],{"class":202}," gymnasium ",[186,115328,32838],{"class":669},[186,115330,115331],{"class":202}," gym\n",[186,115333,115334,115336],{"class":188,"line":49},[186,115335,31847],{"class":669},[186,115337,102732],{"class":202},[186,115339,115340,115342,115344,115346],{"class":188,"line":219},[186,115341,31847],{"class":669},[186,115343,32835],{"class":202},[186,115345,32838],{"class":669},[186,115347,32841],{"class":202},[186,115349,115350,115352,115354,115356],{"class":188,"line":225},[186,115351,32192],{"class":669},[186,115353,115326],{"class":202},[186,115355,31847],{"class":669},[186,115357,115358],{"class":202}," spaces\n",[186,115360,115361],{"class":188,"line":242},[186,115362,3867],{"emptyLinePlaceholder":1551},[186,115364,115365],{"class":188,"line":248},[186,115366,3867],{"emptyLinePlaceholder":1551},[186,115368,115369,115371,115373],{"class":188,"line":265},[186,115370,102745],{"class":206},[186,115372,15027],{"class":669},[186,115374,102750],{"class":532},[186,115376,115377],{"class":188,"line":271},[186,115378,115379],{"class":532},"\u003Cmujoco model=\"gym_reacher\">\n",[186,115381,115382],{"class":188,"line":288},[186,115383,113169],{"class":532},[186,115385,115386],{"class":188,"line":294},[186,115387,3867],{"emptyLinePlaceholder":1551},[186,115389,115390],{"class":188,"line":1212},[186,115391,102769],{"class":532},[186,115393,115394],{"class":188,"line":1223},[186,115395,113187],{"class":532},[186,115397,115398],{"class":188,"line":1236},[186,115399,3867],{"emptyLinePlaceholder":1551},[186,115401,115402],{"class":188,"line":3096},[186,115403,113196],{"class":532},[186,115405,115406],{"class":188,"line":3110},[186,115407,113201],{"class":532},[186,115409,115410],{"class":188,"line":3115},[186,115411,115412],{"class":532},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[186,115414,115415],{"class":188,"line":3121},[186,115416,3867],{"emptyLinePlaceholder":1551},[186,115418,115419],{"class":188,"line":3142},[186,115420,113215],{"class":532},[186,115422,115423],{"class":188,"line":3147},[186,115424,113220],{"class":532},[186,115426,115427],{"class":188,"line":3161},[186,115428,115429],{"class":532},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[186,115431,115432],{"class":188,"line":3166},[186,115433,113230],{"class":532},[186,115435,115436],{"class":188,"line":3195},[186,115437,107869],{"class":532},[186,115439,115440],{"class":188,"line":3200},[186,115441,102798],{"class":532},[186,115443,115444],{"class":188,"line":3217},[186,115445,102803],{"class":532},[186,115447,115448],{"class":188,"line":3222},[186,115449,3867],{"emptyLinePlaceholder":1551},[186,115451,115452],{"class":188,"line":3227},[186,115453,107886],{"class":532},[186,115455,115456],{"class":188,"line":3232},[186,115457,113255],{"class":532},[186,115459,115460],{"class":188,"line":3246},[186,115461,113260],{"class":532},[186,115463,115464],{"class":188,"line":3251},[186,115465,107896],{"class":532},[186,115467,115468],{"class":188,"line":4044},[186,115469,102808],{"class":532},[186,115471,115472],{"class":188,"line":4058},[186,115473,97129],{"class":532},[186,115475,115476],{"class":188,"line":4066},[186,115477,3867],{"emptyLinePlaceholder":1551},[186,115479,115480],{"class":188,"line":4071},[186,115481,3867],{"emptyLinePlaceholder":1551},[186,115483,115484,115486,115489,115491,115493,115495,115498],{"class":188,"line":4077},[186,115485,16156],{"class":669},[186,115487,115488],{"class":198}," ReacherEnv",[186,115490,832],{"class":202},[186,115492,114971],{"class":198},[186,115494,2168],{"class":202},[186,115496,115497],{"class":198},"Env",[186,115499,32241],{"class":202},[186,115501,115502,115505,115507,115509,115512],{"class":188,"line":4083},[186,115503,115504],{"class":202},"    metadata ",[186,115506,529],{"class":669},[186,115508,5914],{"class":202},[186,115510,115511],{"class":532},"\"render_modes\"",[186,115513,115514],{"class":202},": []}\n",[186,115516,115517],{"class":188,"line":4088},[186,115518,3867],{"emptyLinePlaceholder":1551},[186,115520,115521,115523,115525,115528,115530],{"class":188,"line":9411},[186,115522,32256],{"class":669},[186,115524,32259],{"class":206},[186,115526,115527],{"class":202},"(self) -> ",[186,115529,97117],{"class":206},[186,115531,5205],{"class":202},[186,115533,115534,115536,115538,115540],{"class":188,"line":9435},[186,115535,32272],{"class":206},[186,115537,18722],{"class":202},[186,115539,32284],{"class":206},[186,115541,3443],{"class":202},[186,115543,115544,115546,115549,115551,115553,115555],{"class":188,"line":9440},[186,115545,32300],{"class":206},[186,115547,115548],{"class":202},".model ",[186,115550,529],{"class":669},[186,115552,102843],{"class":202},[186,115554,102745],{"class":206},[186,115556,1629],{"class":202},[186,115558,115559,115561,115564,115566,115569,115571],{"class":188,"line":9446},[186,115560,32300],{"class":206},[186,115562,115563],{"class":202},".data ",[186,115565,529],{"class":669},[186,115567,115568],{"class":202}," mujoco.MjData(",[186,115570,32278],{"class":206},[186,115572,115573],{"class":202},".model)\n",[186,115575,115576],{"class":188,"line":9473},[186,115577,3867],{"emptyLinePlaceholder":1551},[186,115579,115580,115582,115585,115587,115590,115592,115595,115597],{"class":188,"line":9478},[186,115581,32300],{"class":206},[186,115583,115584],{"class":202},".tip_site_id ",[186,115586,529],{"class":669},[186,115588,115589],{"class":202}," mujoco.mj_name2id(",[186,115591,32278],{"class":206},[186,115593,115594],{"class":202},".model, mujoco.mjtObj.mjOBJ_SITE, ",[186,115596,112967],{"class":532},[186,115598,1629],{"class":202},[186,115600,115601,115603,115606,115608,115610,115612,115614,115616],{"class":188,"line":9484},[186,115602,32300],{"class":206},[186,115604,115605],{"class":202},".target_site_id ",[186,115607,529],{"class":669},[186,115609,115589],{"class":202},[186,115611,32278],{"class":206},[186,115613,115594],{"class":202},[186,115615,113390],{"class":532},[186,115617,1629],{"class":202},[186,115619,115620,115622,115624,115626,115628,115630,115633,115635,115637,115639,115641],{"class":188,"line":9496},[186,115621,3964],{"class":669},[186,115623,40327],{"class":206},[186,115625,115584],{"class":202},[186,115627,520],{"class":669},[186,115629,5559],{"class":206},[186,115631,115632],{"class":669}," or",[186,115634,40327],{"class":206},[186,115636,115605],{"class":202},[186,115638,520],{"class":669},[186,115640,5559],{"class":206},[186,115642,5205],{"class":202},[186,115644,115645,115648,115650,115652,115655],{"class":188,"line":9508},[186,115646,115647],{"class":669},"            raise",[186,115649,104866],{"class":206},[186,115651,832],{"class":202},[186,115653,115654],{"class":532},"\"required sites not found\"",[186,115656,1629],{"class":202},[186,115658,115659],{"class":188,"line":9520},[186,115660,3867],{"emptyLinePlaceholder":1551},[186,115662,115663,115665,115667,115669],{"class":188,"line":11179},[186,115664,32300],{"class":206},[186,115666,115298],{"class":202},[186,115668,529],{"class":669},[186,115670,55872],{"class":206},[186,115672,115673,115675,115678,115680],{"class":188,"line":11204},[186,115674,32300],{"class":206},[186,115676,115677],{"class":202},".max_steps ",[186,115679,529],{"class":669},[186,115681,115682],{"class":206}," 200\n",[186,115684,115685,115687,115689,115691],{"class":188,"line":11227},[186,115686,32300],{"class":206},[186,115688,115137],{"class":202},[186,115690,529],{"class":669},[186,115692,48787],{"class":206},[186,115694,115695],{"class":188,"line":11251},[186,115696,3867],{"emptyLinePlaceholder":1551},[186,115698,115699,115701,115703,115705,115707,115709,115711,115713,115715,115717,115719,115721,115723,115725,115727,115729,115731,115733,115735,115737],{"class":188,"line":11256},[186,115700,32300],{"class":206},[186,115702,115185],{"class":202},[186,115704,529],{"class":669},[186,115706,115190],{"class":202},[186,115708,115193],{"class":835},[186,115710,115196],{"class":669},[186,115712,103834],{"class":206},[186,115714,13898],{"class":202},[186,115716,115203],{"class":835},[186,115718,529],{"class":669},[186,115720,103834],{"class":206},[186,115722,13898],{"class":202},[186,115724,97394],{"class":835},[186,115726,529],{"class":669},[186,115728,832],{"class":202},[186,115730,1697],{"class":206},[186,115732,115220],{"class":202},[186,115734,94931],{"class":835},[186,115736,529],{"class":669},[186,115738,115227],{"class":202},[186,115740,115741,115743,115745,115747,115749,115751,115753,115755,115757,115759,115761,115763,115765,115767,115769,115771,115773,115775],{"class":188,"line":11261},[186,115742,32300],{"class":206},[186,115744,115246],{"class":202},[186,115746,529],{"class":669},[186,115748,115190],{"class":202},[186,115750,115193],{"class":835},[186,115752,115196],{"class":669},[186,115754,115257],{"class":202},[186,115756,115203],{"class":835},[186,115758,529],{"class":669},[186,115760,115257],{"class":202},[186,115762,97394],{"class":835},[186,115764,529],{"class":669},[186,115766,832],{"class":202},[186,115768,2056],{"class":206},[186,115770,115220],{"class":202},[186,115772,94931],{"class":835},[186,115774,529],{"class":669},[186,115776,115227],{"class":202},[186,115778,115779],{"class":188,"line":11266},[186,115780,3867],{"emptyLinePlaceholder":1551},[186,115782,115783,115785,115788],{"class":188,"line":11275},[186,115784,32256],{"class":669},[186,115786,115787],{"class":198}," _get_obs",[186,115789,115790],{"class":202},"(self) -> np.ndarray:\n",[186,115792,115793,115795,115797,115799,115802,115804],{"class":188,"line":11280},[186,115794,113568],{"class":202},[186,115796,529],{"class":669},[186,115798,40327],{"class":206},[186,115800,115801],{"class":202},".data.site_xpos[",[186,115803,32278],{"class":206},[186,115805,115806],{"class":202},".tip_site_id].copy()\n",[186,115808,115809,115811,115813,115815,115817,115819],{"class":188,"line":11286},[186,115810,113581],{"class":202},[186,115812,529],{"class":669},[186,115814,40327],{"class":206},[186,115816,115801],{"class":202},[186,115818,32278],{"class":206},[186,115820,115821],{"class":202},".target_site_id].copy()\n",[186,115823,115824,115826,115828,115831,115833,115836,115838],{"class":188,"line":11307},[186,115825,111613],{"class":202},[186,115827,529],{"class":669},[186,115829,115830],{"class":202}," np.concatenate([",[186,115832,32278],{"class":206},[186,115834,115835],{"class":202},".data.qpos.copy(), ",[186,115837,32278],{"class":206},[186,115839,115840],{"class":202},".data.qvel.copy(), tip, target])\n",[186,115842,115843,115845],{"class":188,"line":11313},[186,115844,16214],{"class":669},[186,115846,115847],{"class":202}," obs.astype(np.float32)\n",[186,115849,115850],{"class":188,"line":11327},[186,115851,3867],{"emptyLinePlaceholder":1551},[186,115853,115854,115856,115859,115861,115863],{"class":188,"line":11333},[186,115855,32256],{"class":669},[186,115857,115858],{"class":198}," _get_reward",[186,115860,115527],{"class":202},[186,115862,1662],{"class":206},[186,115864,5205],{"class":202},[186,115866,115867,115869,115871,115873,115875,115877],{"class":188,"line":11360},[186,115868,113568],{"class":202},[186,115870,529],{"class":669},[186,115872,40327],{"class":206},[186,115874,115801],{"class":202},[186,115876,32278],{"class":206},[186,115878,115879],{"class":202},".tip_site_id]\n",[186,115881,115882,115884,115886,115888,115890,115892],{"class":188,"line":11369},[186,115883,113581],{"class":202},[186,115885,529],{"class":669},[186,115887,40327],{"class":206},[186,115889,115801],{"class":202},[186,115891,32278],{"class":206},[186,115893,115894],{"class":202},".target_site_id]\n",[186,115896,115897,115900,115902,115904,115906],{"class":188,"line":11375},[186,115898,115899],{"class":202},"        dist ",[186,115901,529],{"class":669},[186,115903,113032],{"class":202},[186,115905,2142],{"class":669},[186,115907,113037],{"class":202},[186,115909,115910,115913,115915,115917,115919,115922,115924],{"class":188,"line":11383},[186,115911,115912],{"class":202},"        control_cost ",[186,115914,529],{"class":669},[186,115916,113468],{"class":206},[186,115918,7981],{"class":669},[186,115920,115921],{"class":202}," np.sum(np.square(",[186,115923,32278],{"class":206},[186,115925,115926],{"class":202},".data.ctrl))\n",[186,115928,115929,115931,115933,115935,115937,115939,115941],{"class":188,"line":11388},[186,115930,16214],{"class":669},[186,115932,111228],{"class":206},[186,115934,832],{"class":202},[186,115936,2142],{"class":669},[186,115938,113027],{"class":202},[186,115940,2142],{"class":669},[186,115942,113490],{"class":202},[186,115944,115945],{"class":188,"line":18065},[186,115946,3867],{"emptyLinePlaceholder":1551},[186,115948,115949,115951,115954,115957,115959,115962,115964,115966,115968,115970,115972,115975,115978,115980,115982,115984,115986],{"class":188,"line":18071},[186,115950,32256],{"class":669},[186,115952,115953],{"class":198}," reset",[186,115955,115956],{"class":202},"(self, ",[186,115958,2065],{"class":669},[186,115960,115961],{"class":202},", seed: ",[186,115963,1626],{"class":206},[186,115965,26568],{"class":669},[186,115967,40387],{"class":206},[186,115969,15027],{"class":669},[186,115971,40387],{"class":206},[186,115973,115974],{"class":202},", options: ",[186,115976,115977],{"class":206},"dict",[186,115979,26568],{"class":669},[186,115981,40387],{"class":206},[186,115983,15027],{"class":669},[186,115985,40387],{"class":206},[186,115987,32241],{"class":202},[186,115989,115990,115992,115995,115998,116000],{"class":188,"line":18094},[186,115991,32272],{"class":206},[186,115993,115994],{"class":202},"().reset(",[186,115996,115997],{"class":835},"seed",[186,115999,529],{"class":669},[186,116001,116002],{"class":202},"seed)\n",[186,116004,116005,116008,116010,116013,116015],{"class":188,"line":18100},[186,116006,116007],{"class":202},"        mujoco.mj_resetData(",[186,116009,32278],{"class":206},[186,116011,116012],{"class":202},".model, ",[186,116014,32278],{"class":206},[186,116016,116017],{"class":202},".data)\n",[186,116019,116020],{"class":188,"line":18123},[186,116021,3867],{"emptyLinePlaceholder":1551},[186,116023,116024,116026,116029,116031,116033,116036,116038,116040,116042,116044,116046,116048,116050,116052,116054,116056,116058],{"class":188,"line":18137},[186,116025,32300],{"class":206},[186,116027,116028],{"class":202},".data.qpos[:] ",[186,116030,529],{"class":669},[186,116032,40327],{"class":206},[186,116034,116035],{"class":202},".np_random.uniform(",[186,116037,115193],{"class":835},[186,116039,115196],{"class":669},[186,116041,87642],{"class":206},[186,116043,13898],{"class":202},[186,116045,115203],{"class":835},[186,116047,529],{"class":669},[186,116049,87642],{"class":206},[186,116051,13898],{"class":202},[186,116053,32951],{"class":835},[186,116055,529],{"class":669},[186,116057,32278],{"class":206},[186,116059,116060],{"class":202},".model.nq)\n",[186,116062,116063,116065,116068,116070],{"class":188,"line":18157},[186,116064,32300],{"class":206},[186,116066,116067],{"class":202},".data.qvel[:] ",[186,116069,529],{"class":669},[186,116071,106192],{"class":206},[186,116073,116074,116077,116079,116081,116083],{"class":188,"line":18163},[186,116075,116076],{"class":202},"        mujoco.mj_forward(",[186,116078,32278],{"class":206},[186,116080,116012],{"class":202},[186,116082,32278],{"class":206},[186,116084,116017],{"class":202},[186,116086,116087],{"class":188,"line":18174},[186,116088,3867],{"emptyLinePlaceholder":1551},[186,116090,116091,116093,116095,116097],{"class":188,"line":18197},[186,116092,32300],{"class":206},[186,116094,115137],{"class":202},[186,116096,529],{"class":669},[186,116098,48787],{"class":206},[186,116100,116101,116103,116105],{"class":188,"line":18219},[186,116102,16214],{"class":669},[186,116104,40327],{"class":206},[186,116106,116107],{"class":202},"._get_obs(), {}\n",[186,116109,116110],{"class":188,"line":18224},[186,116111,3867],{"emptyLinePlaceholder":1551},[186,116113,116114,116116,116119],{"class":188,"line":18230},[186,116115,32256],{"class":669},[186,116117,116118],{"class":198}," step",[186,116120,116121],{"class":202},"(self, action):\n",[186,116123,116124,116126,116128,116131,116133,116135],{"class":188,"line":18244},[186,116125,111653],{"class":202},[186,116127,529],{"class":669},[186,116129,116130],{"class":202}," np.asarray(action, ",[186,116132,94931],{"class":835},[186,116134,529],{"class":669},[186,116136,115227],{"class":202},[186,116138,116139,116141,116143,116145,116147,116150,116152],{"class":188,"line":18257},[186,116140,111653],{"class":202},[186,116142,529],{"class":669},[186,116144,108878],{"class":202},[186,116146,32278],{"class":206},[186,116148,116149],{"class":202},".action_space.low, ",[186,116151,32278],{"class":206},[186,116153,116154],{"class":202},".action_space.high)\n",[186,116156,116157],{"class":188,"line":18262},[186,116158,3867],{"emptyLinePlaceholder":1551},[186,116160,116161,116163,116166,116168],{"class":188,"line":18276},[186,116162,32300],{"class":206},[186,116164,116165],{"class":202},".data.ctrl[:] ",[186,116167,529],{"class":669},[186,116169,108901],{"class":202},[186,116171,116172,116174,116176,116178,116180,116182,116184],{"class":188,"line":18281},[186,116173,4869],{"class":669},[186,116175,102932],{"class":202},[186,116177,27500],{"class":669},[186,116179,33898],{"class":206},[186,116181,832],{"class":202},[186,116183,32278],{"class":206},[186,116185,116186],{"class":202},".frame_skip):\n",[186,116188,116189,116192,116194,116196,116198],{"class":188,"line":18287},[186,116190,116191],{"class":202},"            mujoco.mj_step(",[186,116193,32278],{"class":206},[186,116195,116012],{"class":202},[186,116197,32278],{"class":206},[186,116199,116017],{"class":202},[186,116201,116202],{"class":188,"line":18292},[186,116203,3867],{"emptyLinePlaceholder":1551},[186,116205,116206,116208,116210,116212],{"class":188,"line":18306},[186,116207,32300],{"class":206},[186,116209,115137],{"class":202},[186,116211,10940],{"class":669},[186,116213,57140],{"class":206},[186,116215,116216],{"class":188,"line":18311},[186,116217,3867],{"emptyLinePlaceholder":1551},[186,116219,116220,116222,116224,116226],{"class":188,"line":18316},[186,116221,111613],{"class":202},[186,116223,529],{"class":669},[186,116225,40327],{"class":206},[186,116227,116228],{"class":202},"._get_obs()\n",[186,116230,116231,116233,116235,116237],{"class":188,"line":18330},[186,116232,111718],{"class":202},[186,116234,529],{"class":669},[186,116236,40327],{"class":206},[186,116238,116239],{"class":202},"._get_reward()\n",[186,116241,116242],{"class":188,"line":18342},[186,116243,3867],{"emptyLinePlaceholder":1551},[186,116245,116246,116248,116250,116252,116254,116256],{"class":188,"line":18347},[186,116247,113568],{"class":202},[186,116249,529],{"class":669},[186,116251,40327],{"class":206},[186,116253,115801],{"class":202},[186,116255,32278],{"class":206},[186,116257,115879],{"class":202},[186,116259,116260,116262,116264,116266,116268,116270],{"class":188,"line":18360},[186,116261,113581],{"class":202},[186,116263,529],{"class":669},[186,116265,40327],{"class":206},[186,116267,115801],{"class":202},[186,116269,32278],{"class":206},[186,116271,115894],{"class":202},[186,116273,116274,116276,116278,116280,116283,116285],{"class":188,"line":18365},[186,116275,115899],{"class":202},[186,116277,529],{"class":669},[186,116279,111228],{"class":206},[186,116281,116282],{"class":202},"(np.linalg.norm(tip ",[186,116284,2142],{"class":669},[186,116286,116287],{"class":202}," target))\n",[186,116289,116290],{"class":188,"line":18370},[186,116291,3867],{"emptyLinePlaceholder":1551},[186,116293,116294,116297,116299,116301,116303],{"class":188,"line":18375},[186,116295,116296],{"class":202},"        terminated ",[186,116298,529],{"class":669},[186,116300,115120],{"class":202},[186,116302,520],{"class":669},[186,116304,115125],{"class":206},[186,116306,116307,116310,116312,116314,116316,116318,116320],{"class":188,"line":18388},[186,116308,116309],{"class":202},"        truncated ",[186,116311,529],{"class":669},[186,116313,40327],{"class":206},[186,116315,115137],{"class":202},[186,116317,3178],{"class":669},[186,116319,40327],{"class":206},[186,116321,115144],{"class":202},[186,116323,116324,116327,116329,116331,116334],{"class":188,"line":18393},[186,116325,116326],{"class":202},"        info ",[186,116328,529],{"class":669},[186,116330,5914],{"class":202},[186,116332,116333],{"class":532},"\"distance\"",[186,116335,116336],{"class":202},": dist}\n",[186,116338,116339,116341],{"class":188,"line":34088},[186,116340,16214],{"class":669},[186,116342,116343],{"class":202}," obs, reward, terminated, truncated, info\n",[186,116345,116346],{"class":188,"line":34094},[186,116347,3867],{"emptyLinePlaceholder":1551},[186,116349,116350],{"class":188,"line":34100},[186,116351,3867],{"emptyLinePlaceholder":1551},[186,116353,116354,116356,116358,116360,116362],{"class":188,"line":34106},[186,116355,33402],{"class":669},[186,116357,3440],{"class":198},[186,116359,102829],{"class":202},[186,116361,97117],{"class":206},[186,116363,5205],{"class":202},[186,116365,116366,116369,116371],{"class":188,"line":34112},[186,116367,116368],{"class":202},"    env ",[186,116370,529],{"class":669},[186,116372,116373],{"class":202}," ReacherEnv()\n",[186,116375,116376,116379,116381,116384,116386,116388,116390],{"class":188,"line":34123},[186,116377,116378],{"class":202},"    obs, info ",[186,116380,529],{"class":669},[186,116382,116383],{"class":202}," env.reset(",[186,116385,115997],{"class":835},[186,116387,529],{"class":669},[186,116389,1803],{"class":206},[186,116391,1629],{"class":202},[186,116393,116394,116396,116398,116401],{"class":188,"line":34129},[186,116395,32754],{"class":206},[186,116397,832],{"class":202},[186,116399,116400],{"class":532},"\"initial obs shape:\"",[186,116402,116403],{"class":202},", obs.shape)\n",[186,116405,116406,116408,116410,116413],{"class":188,"line":34149},[186,116407,32754],{"class":206},[186,116409,832],{"class":202},[186,116411,116412],{"class":532},"\"initial info:\"",[186,116414,116415],{"class":202},", info)\n",[186,116417,116418],{"class":188,"line":34155},[186,116419,3867],{"emptyLinePlaceholder":1551},[186,116421,116422,116424,116426],{"class":188,"line":34166},[186,116423,111584],{"class":202},[186,116425,529],{"class":669},[186,116427,106192],{"class":206},[186,116429,116430,116432,116434,116436,116438,116440,116442],{"class":188,"line":34172},[186,116431,4667],{"class":669},[186,116433,33071],{"class":202},[186,116435,27500],{"class":669},[186,116437,33898],{"class":206},[186,116439,832],{"class":202},[186,116441,801],{"class":206},[186,116443,32241],{"class":202},[186,116445,116446,116448,116450],{"class":188,"line":34178},[186,116447,111653],{"class":202},[186,116449,529],{"class":669},[186,116451,116452],{"class":202}," env.action_space.sample()\n",[186,116454,116455,116458,116460],{"class":188,"line":34184},[186,116456,116457],{"class":202},"        obs, reward, terminated, truncated, info ",[186,116459,529],{"class":669},[186,116461,114846],{"class":202},[186,116463,116464,116466,116468],{"class":188,"line":34190},[186,116465,111728],{"class":202},[186,116467,10940],{"class":669},[186,116469,111733],{"class":202},[186,116471,116472,116474,116476,116478,116480,116483,116485,116487,116490,116492,116494,116497,116499,116501,116504,116506,116508,116510],{"class":188,"line":34196},[186,116473,33906],{"class":206},[186,116475,832],{"class":202},[186,116477,111762],{"class":532},[186,116479,111765],{"class":202},[186,116481,116482],{"class":532},"\"reward:\"",[186,116484,13898],{"class":202},[186,116486,33473],{"class":206},[186,116488,116489],{"class":202},"(reward, ",[186,116491,1691],{"class":206},[186,116493,111776],{"class":202},[186,116495,116496],{"class":532},"\"distance:\"",[186,116498,13898],{"class":202},[186,116500,33473],{"class":206},[186,116502,116503],{"class":202},"(info[",[186,116505,116333],{"class":532},[186,116507,113633],{"class":202},[186,116509,1691],{"class":206},[186,116511,31952],{"class":202},[186,116513,116514,116516,116519,116522],{"class":188,"line":34202},[186,116515,3964],{"class":669},[186,116517,116518],{"class":202}," terminated ",[186,116520,116521],{"class":669},"or",[186,116523,116524],{"class":202}," truncated:\n",[186,116526,116527],{"class":188,"line":34208},[186,116528,116529],{"class":669},"            break\n",[186,116531,116532],{"class":188,"line":34228},[186,116533,3867],{"emptyLinePlaceholder":1551},[186,116535,116536,116538,116540,116542,116544,116546,116548,116550],{"class":188,"line":34234},[186,116537,32754],{"class":206},[186,116539,832],{"class":202},[186,116541,111807],{"class":532},[186,116543,13898],{"class":202},[186,116545,33473],{"class":206},[186,116547,111814],{"class":202},[186,116549,1691],{"class":206},[186,116551,31952],{"class":202},[186,116553,116554],{"class":188,"line":34250},[186,116555,3867],{"emptyLinePlaceholder":1551},[186,116557,116558],{"class":188,"line":34256},[186,116559,3867],{"emptyLinePlaceholder":1551},[186,116561,116562,116564,116566,116568,116570],{"class":188,"line":34270},[186,116563,3003],{"class":669},[186,116565,32675],{"class":206},[186,116567,102990],{"class":669},[186,116569,102993],{"class":532},[186,116571,5205],{"class":202},[186,116573,116574],{"class":188,"line":34276},[186,116575,103000],{"class":202},[169,116577,105001],{},[176,116579,116581],{"className":25281,"code":116580,"language":25283,"meta":181,"style":181},"touch ch8_gym_env.py\n",[183,116582,116583],{"__ignoreMap":181},[186,116584,116585,116587],{"class":188,"line":189},[186,116586,102714],{"class":198},[186,116588,116589],{"class":532}," ch8_gym_env.py\n",[169,116591,111875],{},[176,116593,116595],{"className":25281,"code":116594,"language":25283,"meta":181,"style":181},"python ch8_gym_env.py\n",[183,116596,116597],{"__ignoreMap":181},[186,116598,116599,116601],{"class":188,"line":189},[186,116600,31835],{"class":198},[186,116602,116589],{"class":532},[29,116604,103003],{"id":103003},[169,116606,116607],{},"继承 Gymnasium 环境：",[176,116609,116611],{"className":31833,"code":116610,"language":31835,"meta":181,"style":181},"class ReacherEnv(gym.Env):\n",[183,116612,116613],{"__ignoreMap":181},[186,116614,116615,116617,116619,116621,116623,116625,116627],{"class":188,"line":189},[186,116616,16156],{"class":669},[186,116618,115488],{"class":198},[186,116620,832],{"class":202},[186,116622,114971],{"class":198},[186,116624,2168],{"class":202},[186,116626,115497],{"class":198},[186,116628,32241],{"class":202},[169,116630,116631],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[169,116633,116634],{},"初始化模型：",[176,116636,116638],{"className":31833,"code":116637,"language":31835,"meta":181,"style":181},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[183,116639,116640,116654],{"__ignoreMap":181},[186,116641,116642,116644,116646,116648,116650,116652],{"class":188,"line":189},[186,116643,32278],{"class":206},[186,116645,115548],{"class":202},[186,116647,529],{"class":669},[186,116649,102843],{"class":202},[186,116651,102745],{"class":206},[186,116653,1629],{"class":202},[186,116655,116656,116658,116660,116662,116664,116666],{"class":188,"line":49},[186,116657,32278],{"class":206},[186,116659,115563],{"class":202},[186,116661,529],{"class":669},[186,116663,115568],{"class":202},[186,116665,32278],{"class":206},[186,116667,115573],{"class":202},[169,116669,116670,116671,116673],{},"这和前面章节一样，只是现在放到了类的 ",[183,116672,32284],{}," 里。",[169,116675,116676],{},"缓存 site ID：",[176,116678,116680],{"className":31833,"code":116679,"language":31835,"meta":181,"style":181},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[183,116681,116682,116696],{"__ignoreMap":181},[186,116683,116684,116686,116688,116690,116692,116694],{"class":188,"line":189},[186,116685,32278],{"class":206},[186,116687,115584],{"class":202},[186,116689,529],{"class":669},[186,116691,115589],{"class":202},[186,116693,90985],{"class":206},[186,116695,1629],{"class":202},[186,116697,116698,116700,116702,116704,116706,116708],{"class":188,"line":49},[186,116699,32278],{"class":206},[186,116701,115605],{"class":202},[186,116703,529],{"class":669},[186,116705,115589],{"class":202},[186,116707,90985],{"class":206},[186,116709,1629],{"class":202},[169,116711,116712],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[169,116714,116715],{},"reset：",[176,116717,116719],{"className":31833,"code":116718,"language":31835,"meta":181,"style":181},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[183,116720,116721],{"__ignoreMap":181},[186,116722,116723,116725,116727,116729,116731,116733,116735,116737,116739,116741,116743,116745,116747,116749,116751,116753,116755],{"class":188,"line":189},[186,116724,33402],{"class":669},[186,116726,115953],{"class":198},[186,116728,115956],{"class":202},[186,116730,2065],{"class":669},[186,116732,115961],{"class":202},[186,116734,1626],{"class":206},[186,116736,26568],{"class":669},[186,116738,40387],{"class":206},[186,116740,15027],{"class":669},[186,116742,40387],{"class":206},[186,116744,115974],{"class":202},[186,116746,115977],{"class":206},[186,116748,26568],{"class":669},[186,116750,40387],{"class":206},[186,116752,15027],{"class":669},[186,116754,40387],{"class":206},[186,116756,32241],{"class":202},[169,116758,116759,116761],{},[183,116760,71493],{}," 做四件事：",[34,116763,116764,116767,116770,116773],{},[22,116765,116766],{},"设置随机种子。",[22,116768,116769],{},"重置 MuJoCo data。",[22,116771,116772],{},"随机初始化关节角。",[22,116774,116775],{},"返回初始观测和 info。",[169,116777,116778],{},"step：",[176,116780,116782],{"className":31833,"code":116781,"language":31835,"meta":181,"style":181},"def step(self, action):\n",[183,116783,116784],{"__ignoreMap":181},[186,116785,116786,116788,116790],{"class":188,"line":189},[186,116787,33402],{"class":669},[186,116789,116118],{"class":198},[186,116791,116121],{"class":202},[169,116793,116794,116796],{},[183,116795,108565],{}," 做六件事：",[34,116798,116799,116802,116808,116811,116814,116817],{},[22,116800,116801],{},"检查并裁剪 action。",[22,116803,116804,116805,913],{},"写入 ",[183,116806,116807],{},"self.data.ctrl",[22,116809,116810],{},"连续推进若干个 MuJoCo 物理步。",[22,116812,116813],{},"计算新观测。",[22,116815,116816],{},"计算奖励和结束条件。",[22,116818,116819],{},"返回 Gymnasium 标准五元组。",[29,116821,103139],{"id":103139},[176,116823,116825],{"className":31833,"code":116824,"language":31835,"meta":181,"style":181},"import gymnasium as gym\n",[183,116826,116827],{"__ignoreMap":181},[186,116828,116829,116831,116833,116835],{"class":188,"line":189},[186,116830,31847],{"class":669},[186,116832,115326],{"class":202},[186,116834,32838],{"class":669},[186,116836,115331],{"class":202},[169,116838,116839,116840,116842,116843,116846],{},"导入 Gymnasium，并起别名 ",[183,116841,114971],{},"。后面写 ",[183,116844,116845],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[176,116848,116850],{"className":31833,"code":116849,"language":31835,"meta":181,"style":181},"from gymnasium import spaces\n",[183,116851,116852],{"__ignoreMap":181},[186,116853,116854,116856,116858,116860],{"class":188,"line":189},[186,116855,32192],{"class":669},[186,116857,115326],{"class":202},[186,116859,31847],{"class":669},[186,116861,115358],{"class":202},[169,116863,116864,116865,116868],{},"导入空间定义工具。",[183,116866,116867],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[176,116870,116871],{"className":31833,"code":116610,"language":31835,"meta":181,"style":181},[183,116872,116873],{"__ignoreMap":181},[186,116874,116875,116877,116879,116881,116883,116885,116887],{"class":188,"line":189},[186,116876,16156],{"class":669},[186,116878,115488],{"class":198},[186,116880,832],{"class":202},[186,116882,114971],{"class":198},[186,116884,2168],{"class":202},[186,116886,115497],{"class":198},[186,116888,32241],{"class":202},[169,116890,116891,116892,116895,116896,116898,116899,102449,116901,116903],{},"定义一个类，名字叫 ",[183,116893,116894],{},"ReacherEnv","。括号里的 ",[183,116897,116845],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[183,116900,71493],{},[183,116902,108565],{}," 这两个核心方法。",[176,116905,116907],{"className":31833,"code":116906,"language":31835,"meta":181,"style":181},"metadata = {\"render_modes\": []}\n",[183,116908,116909],{"__ignoreMap":181},[186,116910,116911,116914,116916,116918,116920],{"class":188,"line":189},[186,116912,116913],{"class":202},"metadata ",[186,116915,529],{"class":669},[186,116917,5914],{"class":202},[186,116919,115511],{"class":532},[186,116921,115514],{"class":202},[169,116923,116924],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[176,116926,116928],{"className":31833,"code":116927,"language":31835,"meta":181,"style":181},"def __init__(self) -> None:\n",[183,116929,116930],{"__ignoreMap":181},[186,116931,116932,116934,116936,116938,116940],{"class":188,"line":189},[186,116933,33402],{"class":669},[186,116935,32259],{"class":206},[186,116937,115527],{"class":202},[186,116939,97117],{"class":206},[186,116941,5205],{"class":202},[169,116943,116944,116946,116947,913],{},[183,116945,32284],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[183,116948,116949],{},"env = ReacherEnv()",[176,116951,116953],{"className":31833,"code":116952,"language":31835,"meta":181,"style":181},"super().__init__()\n",[183,116954,116955],{"__ignoreMap":181},[186,116956,116957,116960,116962,116964],{"class":188,"line":189},[186,116958,116959],{"class":206},"super",[186,116961,18722],{"class":202},[186,116963,32284],{"class":206},[186,116965,3443],{"class":202},[169,116967,116968,116969,116971],{},"调用父类 ",[183,116970,116845],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[176,116973,116974],{"className":31833,"code":116637,"language":31835,"meta":181,"style":181},[183,116975,116976,116990],{"__ignoreMap":181},[186,116977,116978,116980,116982,116984,116986,116988],{"class":188,"line":189},[186,116979,32278],{"class":206},[186,116981,115548],{"class":202},[186,116983,529],{"class":669},[186,116985,102843],{"class":202},[186,116987,102745],{"class":206},[186,116989,1629],{"class":202},[186,116991,116992,116994,116996,116998,117000,117002],{"class":188,"line":49},[186,116993,32278],{"class":206},[186,116995,115563],{"class":202},[186,116997,529],{"class":669},[186,116999,115568],{"class":202},[186,117001,32278],{"class":206},[186,117003,115573],{"class":202},[169,117005,117006,117007,117009,117010,102449,117013,117016],{},"把 MuJoCo 模型和状态保存到 ",[183,117008,32278],{}," 上。",[183,117011,117012],{},"self.model",[183,117014,117015],{},"self.data"," 表示这个环境对象自己的模型和状态。",[176,117018,117019],{"className":31833,"code":116679,"language":31835,"meta":181,"style":181},[183,117020,117021,117035],{"__ignoreMap":181},[186,117022,117023,117025,117027,117029,117031,117033],{"class":188,"line":189},[186,117024,32278],{"class":206},[186,117026,115584],{"class":202},[186,117028,529],{"class":669},[186,117030,115589],{"class":202},[186,117032,90985],{"class":206},[186,117034,1629],{"class":202},[186,117036,117037,117039,117041,117043,117045,117047],{"class":188,"line":49},[186,117038,32278],{"class":206},[186,117040,115605],{"class":202},[186,117042,529],{"class":669},[186,117044,115589],{"class":202},[186,117046,90985],{"class":206},[186,117048,1629],{"class":202},[169,117050,117051,117052,102449,117055,117058],{},"提前查好 tip 和 target 的 site ID。这样 ",[183,117053,117054],{},"_get_obs",[183,117056,117057],{},"_get_reward"," 里就不用每次按名字查找。",[176,117060,117062],{"className":31833,"code":117061,"language":31835,"meta":181,"style":181},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[183,117063,117064,117074,117084],{"__ignoreMap":181},[186,117065,117066,117068,117070,117072],{"class":188,"line":189},[186,117067,32278],{"class":206},[186,117069,115298],{"class":202},[186,117071,529],{"class":669},[186,117073,55872],{"class":206},[186,117075,117076,117078,117080,117082],{"class":188,"line":49},[186,117077,32278],{"class":206},[186,117079,115677],{"class":202},[186,117081,529],{"class":669},[186,117083,115682],{"class":206},[186,117085,117086,117088,117090,117092],{"class":188,"line":219},[186,117087,32278],{"class":206},[186,117089,115137],{"class":202},[186,117091,529],{"class":669},[186,117093,48787],{"class":206},[169,117095,117096,117099,117100,117103,117104,117107],{},[183,117097,117098],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[183,117101,117102],{},"max_steps"," 是一个 episode 最多运行多少步。",[183,117105,117106],{},"steps"," 记录当前 episode 已经走了多少步。",[176,117109,117110],{"className":31833,"code":115176,"language":31835,"meta":181,"style":181},[183,117111,117112],{"__ignoreMap":181},[186,117113,117114,117116,117118,117120,117122,117124,117126,117128,117130,117132,117134,117136,117138,117140,117142,117144,117146,117148,117150,117152],{"class":188,"line":189},[186,117115,32278],{"class":206},[186,117117,115185],{"class":202},[186,117119,529],{"class":669},[186,117121,115190],{"class":202},[186,117123,115193],{"class":835},[186,117125,115196],{"class":669},[186,117127,103834],{"class":206},[186,117129,13898],{"class":202},[186,117131,115203],{"class":835},[186,117133,529],{"class":669},[186,117135,103834],{"class":206},[186,117137,13898],{"class":202},[186,117139,97394],{"class":835},[186,117141,529],{"class":669},[186,117143,832],{"class":202},[186,117145,1697],{"class":206},[186,117147,115220],{"class":202},[186,117149,94931],{"class":835},[186,117151,529],{"class":669},[186,117153,115227],{"class":202},[169,117155,117156,117157,117160,117161,102449,117164,117167],{},"定义动作空间。",[183,117158,117159],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[183,117162,117163],{},"low=-1.0",[183,117165,117166],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[176,117169,117170],{"className":31833,"code":115237,"language":31835,"meta":181,"style":181},[183,117171,117172],{"__ignoreMap":181},[186,117173,117174,117176,117178,117180,117182,117184,117186,117188,117190,117192,117194,117196,117198,117200,117202,117204,117206,117208],{"class":188,"line":189},[186,117175,32278],{"class":206},[186,117177,115246],{"class":202},[186,117179,529],{"class":669},[186,117181,115190],{"class":202},[186,117183,115193],{"class":835},[186,117185,115196],{"class":669},[186,117187,115257],{"class":202},[186,117189,115203],{"class":835},[186,117191,529],{"class":669},[186,117193,115257],{"class":202},[186,117195,97394],{"class":835},[186,117197,529],{"class":669},[186,117199,832],{"class":202},[186,117201,2056],{"class":206},[186,117203,115220],{"class":202},[186,117205,94931],{"class":835},[186,117207,529],{"class":669},[186,117209,115227],{"class":202},[169,117211,117212,117213,117216,117217,117220],{},"定义观测空间。",[183,117214,117215],{},"shape=(10,)"," 表示观测是 10 个数。",[183,117218,117219],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[176,117222,117224],{"className":31833,"code":117223,"language":31835,"meta":181,"style":181},"def _get_obs(self) -> np.ndarray:\n",[183,117225,117226],{"__ignoreMap":181},[186,117227,117228,117230,117232],{"class":188,"line":189},[186,117229,33402],{"class":669},[186,117231,115787],{"class":198},[186,117233,115790],{"class":202},[169,117235,117236,117237,117239],{},"定义内部函数，用来生成观测。函数名前面的 ",[183,117238,2599],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[176,117241,117243],{"className":31833,"code":117242,"language":31835,"meta":181,"style":181},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[183,117244,117245,117259],{"__ignoreMap":181},[186,117246,117247,117249,117251,117253,117255,117257],{"class":188,"line":189},[186,117248,112999],{"class":202},[186,117250,529],{"class":669},[186,117252,40327],{"class":206},[186,117254,115801],{"class":202},[186,117256,32278],{"class":206},[186,117258,115806],{"class":202},[186,117260,117261,117263,117265,117267,117269,117271],{"class":188,"line":49},[186,117262,113009],{"class":202},[186,117264,529],{"class":669},[186,117266,40327],{"class":206},[186,117268,115801],{"class":202},[186,117270,32278],{"class":206},[186,117272,115821],{"class":202},[169,117274,117275],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[176,117277,117279],{"className":31833,"code":117278,"language":31835,"meta":181,"style":181},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[183,117280,117281,117297],{"__ignoreMap":181},[186,117282,117283,117285,117287,117289,117291,117293,117295],{"class":188,"line":189},[186,117284,112285],{"class":202},[186,117286,529],{"class":669},[186,117288,115830],{"class":202},[186,117290,32278],{"class":206},[186,117292,115835],{"class":202},[186,117294,32278],{"class":206},[186,117296,115840],{"class":202},[186,117298,117299,117301],{"class":188,"line":49},[186,117300,18507],{"class":669},[186,117302,115847],{"class":202},[169,117304,117305,117306,117309,117310,117312],{},"拼接观测，并转换成 ",[183,117307,117308],{},"float32","。很多强化学习库默认使用 ",[183,117311,117308],{},"，所以这里主动转换。",[176,117314,117315],{"className":31833,"code":116718,"language":31835,"meta":181,"style":181},[183,117316,117317],{"__ignoreMap":181},[186,117318,117319,117321,117323,117325,117327,117329,117331,117333,117335,117337,117339,117341,117343,117345,117347,117349,117351],{"class":188,"line":189},[186,117320,33402],{"class":669},[186,117322,115953],{"class":198},[186,117324,115956],{"class":202},[186,117326,2065],{"class":669},[186,117328,115961],{"class":202},[186,117330,1626],{"class":206},[186,117332,26568],{"class":669},[186,117334,40387],{"class":206},[186,117336,15027],{"class":669},[186,117338,40387],{"class":206},[186,117340,115974],{"class":202},[186,117342,115977],{"class":206},[186,117344,26568],{"class":669},[186,117346,40387],{"class":206},[186,117348,15027],{"class":669},[186,117350,40387],{"class":206},[186,117352,32241],{"class":202},[169,117354,117355,117356,117358,117359,117362],{},"定义 reset。",[183,117357,115997],{}," 用来控制随机数，保证实验可以复现。",[183,117360,117361],{},"options"," 用来接收额外配置，本章暂时不用。",[176,117364,117366],{"className":31833,"code":117365,"language":31835,"meta":181,"style":181},"super().reset(seed=seed)\n",[183,117367,117368],{"__ignoreMap":181},[186,117369,117370,117372,117374,117376,117378],{"class":188,"line":189},[186,117371,116959],{"class":206},[186,117373,115994],{"class":202},[186,117375,115997],{"class":835},[186,117377,529],{"class":669},[186,117379,116002],{"class":202},[169,117381,117382,117383,117386],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[183,117384,117385],{},"self.np_random"," 生成可复现的随机数。",[176,117388,117390],{"className":31833,"code":117389,"language":31835,"meta":181,"style":181},"mujoco.mj_resetData(self.model, self.data)\n",[183,117391,117392],{"__ignoreMap":181},[186,117393,117394,117397,117399,117401,117403],{"class":188,"line":189},[186,117395,117396],{"class":202},"mujoco.mj_resetData(",[186,117398,32278],{"class":206},[186,117400,116012],{"class":202},[186,117402,32278],{"class":206},[186,117404,116017],{"class":202},[169,117406,117407],{},"把 MuJoCo 状态重置到默认状态。",[176,117409,117411],{"className":31833,"code":117410,"language":31835,"meta":181,"style":181},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[183,117412,117413],{"__ignoreMap":181},[186,117414,117415,117417,117419,117421,117423,117425,117427,117429,117431,117433,117435,117437,117439,117441,117443,117445,117447],{"class":188,"line":189},[186,117416,32278],{"class":206},[186,117418,116028],{"class":202},[186,117420,529],{"class":669},[186,117422,40327],{"class":206},[186,117424,116035],{"class":202},[186,117426,115193],{"class":835},[186,117428,115196],{"class":669},[186,117430,87642],{"class":206},[186,117432,13898],{"class":202},[186,117434,115203],{"class":835},[186,117436,529],{"class":669},[186,117438,87642],{"class":206},[186,117440,13898],{"class":202},[186,117442,32951],{"class":835},[186,117444,529],{"class":669},[186,117446,32278],{"class":206},[186,117448,116060],{"class":202},[169,117450,116772,117451,117454,117455,117458,117459,117461],{},[183,117452,117453],{},"[:]"," 表示修改整个数组。",[183,117456,117457],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[183,117460,103581],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[176,117463,117465],{"className":31833,"code":117464,"language":31835,"meta":181,"style":181},"self.data.qvel[:] = 0.0\n",[183,117466,117467],{"__ignoreMap":181},[186,117468,117469,117471,117473,117475],{"class":188,"line":189},[186,117470,32278],{"class":206},[186,117472,116067],{"class":202},[186,117474,529],{"class":669},[186,117476,106192],{"class":206},[169,117478,117479],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[176,117481,117483],{"className":31833,"code":117482,"language":31835,"meta":181,"style":181},"self.steps = 0\nreturn self._get_obs(), {}\n",[183,117484,117485,117495],{"__ignoreMap":181},[186,117486,117487,117489,117491,117493],{"class":188,"line":189},[186,117488,32278],{"class":206},[186,117490,115137],{"class":202},[186,117492,529],{"class":669},[186,117494,48787],{"class":206},[186,117496,117497,117499,117501],{"class":188,"line":49},[186,117498,18507],{"class":669},[186,117500,40327],{"class":206},[186,117502,116107],{"class":202},[169,117504,117505],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[176,117507,117508],{"className":31833,"code":116781,"language":31835,"meta":181,"style":181},[183,117509,117510],{"__ignoreMap":181},[186,117511,117512,117514,117516],{"class":188,"line":189},[186,117513,33402],{"class":669},[186,117515,116118],{"class":198},[186,117517,116121],{"class":202},[169,117519,117520],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[176,117522,117524],{"className":31833,"code":117523,"language":31835,"meta":181,"style":181},"action = np.asarray(action, dtype=np.float32)\n",[183,117525,117526],{"__ignoreMap":181},[186,117527,117528,117530,117532,117534,117536,117538],{"class":188,"line":189},[186,117529,108873],{"class":202},[186,117531,529],{"class":669},[186,117533,116130],{"class":202},[186,117535,94931],{"class":835},[186,117537,529],{"class":669},[186,117539,115227],{"class":202},[169,117541,117542,117543,913],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[183,117544,117308],{},[176,117546,117548],{"className":31833,"code":117547,"language":31835,"meta":181,"style":181},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[183,117549,117550],{"__ignoreMap":181},[186,117551,117552,117554,117556,117558,117560,117562,117564],{"class":188,"line":189},[186,117553,108873],{"class":202},[186,117555,529],{"class":669},[186,117557,108878],{"class":202},[186,117559,32278],{"class":206},[186,117561,116149],{"class":202},[186,117563,32278],{"class":206},[186,117565,116154],{"class":202},[169,117567,117568],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[176,117570,117572],{"className":31833,"code":117571,"language":31835,"meta":181,"style":181},"self.data.ctrl[:] = action\n",[183,117573,117574],{"__ignoreMap":181},[186,117575,117576,117578,117580,117582],{"class":188,"line":189},[186,117577,32278],{"class":206},[186,117579,116165],{"class":202},[186,117581,529],{"class":669},[186,117583,108901],{"class":202},[169,117585,117586],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[176,117588,117590],{"className":31833,"code":117589,"language":31835,"meta":181,"style":181},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[183,117591,117592,117608],{"__ignoreMap":181},[186,117593,117594,117596,117598,117600,117602,117604,117606],{"class":188,"line":189},[186,117595,4491],{"class":669},[186,117597,102932],{"class":202},[186,117599,27500],{"class":669},[186,117601,33898],{"class":206},[186,117603,832],{"class":202},[186,117605,32278],{"class":206},[186,117607,116186],{"class":202},[186,117609,117610,117613,117615,117617,117619],{"class":188,"line":49},[186,117611,117612],{"class":202},"    mujoco.mj_step(",[186,117614,32278],{"class":206},[186,117616,116012],{"class":202},[186,117618,32278],{"class":206},[186,117620,116017],{"class":202},[169,117622,117623,117624,117627,117628,117630,117631,913],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[183,117625,117626],{},"frame_skip=5","，所以外部调用一次 ",[183,117629,115308],{},"，内部实际执行 5 次 ",[183,117632,102646],{},[176,117634,117636],{"className":31833,"code":117635,"language":31835,"meta":181,"style":181},"self.steps += 1\n",[183,117637,117638],{"__ignoreMap":181},[186,117639,117640,117642,117644,117646],{"class":188,"line":189},[186,117641,32278],{"class":206},[186,117643,115137],{"class":202},[186,117645,10940],{"class":669},[186,117647,57140],{"class":206},[169,117649,117650],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[176,117652,117654],{"className":31833,"code":117653,"language":31835,"meta":181,"style":181},"obs = self._get_obs()\nreward = self._get_reward()\n",[183,117655,117656,117666],{"__ignoreMap":181},[186,117657,117658,117660,117662,117664],{"class":188,"line":189},[186,117659,112285],{"class":202},[186,117661,529],{"class":669},[186,117663,40327],{"class":206},[186,117665,116228],{"class":202},[186,117667,117668,117670,117672,117674],{"class":188,"line":49},[186,117669,112436],{"class":202},[186,117671,529],{"class":669},[186,117673,40327],{"class":206},[186,117675,116239],{"class":202},[169,117677,117678],{},"计算新的观测和奖励。",[176,117680,117682],{"className":31833,"code":117681,"language":31835,"meta":181,"style":181},"dist = float(np.linalg.norm(tip - target))\n",[183,117683,117684],{"__ignoreMap":181},[186,117685,117686,117688,117690,117692,117694,117696],{"class":188,"line":189},[186,117687,113027],{"class":202},[186,117689,529],{"class":669},[186,117691,111228],{"class":206},[186,117693,116282],{"class":202},[186,117695,2142],{"class":669},[186,117697,116287],{"class":202},[169,117699,117700],{},"计算末端到目标的距离，并转换成 Python float。",[176,117702,117703],{"className":31833,"code":115108,"language":31835,"meta":181,"style":181},[183,117704,117705,117717],{"__ignoreMap":181},[186,117706,117707,117709,117711,117713,117715],{"class":188,"line":189},[186,117708,115115],{"class":202},[186,117710,529],{"class":669},[186,117712,115120],{"class":202},[186,117714,520],{"class":669},[186,117716,115125],{"class":206},[186,117718,117719,117721,117723,117725,117727,117729,117731],{"class":188,"line":49},[186,117720,115130],{"class":202},[186,117722,529],{"class":669},[186,117724,40327],{"class":206},[186,117726,115137],{"class":202},[186,117728,3178],{"class":669},[186,117730,40327],{"class":206},[186,117732,115144],{"class":202},[169,117734,117735],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[176,117737,117739],{"className":31833,"code":117738,"language":31835,"meta":181,"style":181},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[183,117740,117741,117754],{"__ignoreMap":181},[186,117742,117743,117746,117748,117750,117752],{"class":188,"line":189},[186,117744,117745],{"class":202},"info ",[186,117747,529],{"class":669},[186,117749,5914],{"class":202},[186,117751,116333],{"class":532},[186,117753,116336],{"class":202},[186,117755,117756,117758],{"class":188,"line":49},[186,117757,18507],{"class":669},[186,117759,116343],{"class":202},[169,117761,117762,117765],{},[183,117763,117764],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[176,117767,117769],{"className":31833,"code":117768,"language":31835,"meta":181,"style":181},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[183,117770,117771,117780],{"__ignoreMap":181},[186,117772,117773,117776,117778],{"class":188,"line":189},[186,117774,117775],{"class":202},"env ",[186,117777,529],{"class":669},[186,117779,116373],{"class":202},[186,117781,117782,117784,117786,117788,117790,117792,117794],{"class":188,"line":49},[186,117783,114831],{"class":202},[186,117785,529],{"class":669},[186,117787,116383],{"class":202},[186,117789,115997],{"class":835},[186,117791,529],{"class":669},[186,117793,1803],{"class":206},[186,117795,1629],{"class":202},[169,117797,117798,117799,117802],{},"创建环境并重置。",[183,117800,117801],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[176,117804,117806],{"className":31833,"code":117805,"language":31835,"meta":181,"style":181},"action = env.action_space.sample()\n",[183,117807,117808],{"__ignoreMap":181},[186,117809,117810,117812,117814],{"class":188,"line":189},[186,117811,108873],{"class":202},[186,117813,529],{"class":669},[186,117815,116452],{"class":202},[169,117817,117818],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117820,103747],{"id":103746},[169,117822,106915],{},[176,117824,117827],{"className":117825,"code":117826,"language":753,"meta":181},[751],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[183,117828,117826],{"__ignoreMap":181},[169,117830,117831],{},"这个环境已经具备强化学习环境的基本结构。",[169,117833,117834],{},"主函数里使用随机动作：",[176,117836,117837],{"className":31833,"code":117805,"language":31835,"meta":181,"style":181},[183,117838,117839],{"__ignoreMap":181},[186,117840,117841,117843,117845],{"class":188,"line":189},[186,117842,108873],{"class":202},[186,117844,529],{"class":669},[186,117846,116452],{"class":202},[169,117848,117849],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117851,103779],{"id":103778},[34,117853,117854,117857,117863,117872,117881,117890,117896],{},[22,117855,117856],{},"运行程序。",[22,117858,117859,117860,913],{},"确认 ",[183,117861,117862],{},"obs.shape == (10,)",[22,117864,112612,117865,117868,117869,913],{},[183,117866,117867],{},"env.action_space","，应类似 ",[183,117870,117871],{},"Box(-1.0, 1.0, (2,), float32)",[22,117873,107016,117874,117877,117878,913],{},[183,117875,117876],{},"self.max_steps = 10","，确认环境会更快 ",[183,117879,117880],{},"truncated=True",[22,117882,103842,117883,103845,117886,117889],{},[183,117884,117885],{},"terminated = dist \u003C 0.05",[183,117887,117888],{},"dist \u003C 0.2","，观察是否更容易结束。",[22,117891,103842,117892,117895],{},[183,117893,117894],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[22,117897,117898,117899,117901,117902,117905],{},"在 ",[183,117900,117764],{}," 里加入 ",[183,117903,117904],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117907,103884],{"id":103883},[29,117909,117911],{"id":117910},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[169,117913,117914,117915,117917],{},"Gymnasium 的 ",[183,117916,108565],{}," 返回 5 个值:",[176,117919,117921],{"className":31833,"code":117920,"language":31835,"meta":181,"style":181},"obs, reward, terminated, truncated, info\n",[183,117922,117923],{"__ignoreMap":181},[186,117924,117925],{"class":188,"line":189},[186,117926,117920],{"class":202},[169,117928,117929],{},"不是旧 Gym 的 4 个值。",[29,117931,117933,117936],{"id":117932},"datactrl-action-维度错误",[183,117934,117935],{},"data.ctrl[:] = action"," 维度错误",[169,117938,103954],{},[176,117940,117942],{"className":31833,"code":117941,"language":31835,"meta":181,"style":181},"print(self.model.nu)\nprint(action.shape)\n",[183,117943,117944,117955],{"__ignoreMap":181},[186,117945,117946,117948,117950,117952],{"class":188,"line":189},[186,117947,31870],{"class":206},[186,117949,832],{"class":202},[186,117951,32278],{"class":206},[186,117953,117954],{"class":202},".model.nu)\n",[186,117956,117957,117959],{"class":188,"line":49},[186,117958,31870],{"class":206},[186,117960,117961],{"class":202},"(action.shape)\n",[169,117963,117964],{},"两者必须匹配。",[29,117966,117968],{"id":117967},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[169,117970,103893],{},[176,117972,117974],{"className":31833,"code":117973,"language":31835,"meta":181,"style":181},"mujoco.mj_forward(self.model, self.data)\n",[183,117975,117976],{"__ignoreMap":181},[186,117977,117978,117981,117983,117985,117987],{"class":188,"line":189},[186,117979,117980],{"class":202},"mujoco.mj_forward(",[186,117982,32278],{"class":206},[186,117984,116012],{"class":202},[186,117986,32278],{"class":206},[186,117988,116017],{"class":202},[29,117990,117992,117994],{"id":117991},"observation_space-维度和-obs-不一致",[183,117993,115031],{}," 维度和 obs 不一致",[169,117996,104006],{},[176,117998,118000],{"className":31833,"code":117999,"language":31835,"meta":181,"style":181},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[183,118001,118002,118012,118019],{"__ignoreMap":181},[186,118003,118004,118006,118008,118010],{"class":188,"line":189},[186,118005,112285],{"class":202},[186,118007,529],{"class":669},[186,118009,40327],{"class":206},[186,118011,116228],{"class":202},[186,118013,118014,118016],{"class":188,"line":49},[186,118015,31870],{"class":206},[186,118017,118018],{"class":202},"(obs.shape)\n",[186,118020,118021,118023,118025,118027],{"class":188,"line":219},[186,118022,31870],{"class":206},[186,118024,832],{"class":202},[186,118026,32278],{"class":206},[186,118028,118029],{"class":202},".observation_space.shape)\n",[169,118031,118032],{},"两者必须一致。本章观测是：",[176,118034,118037],{"className":118035,"code":118036,"language":753,"meta":181},[751],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[183,118038,118036],{"__ignoreMap":181},[29,118040,118042],{"id":118041},"action-超过范围","action 超过范围",[169,118044,118045],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[176,118047,118048],{"className":31833,"code":117547,"language":31835,"meta":181,"style":181},[183,118049,118050],{"__ignoreMap":181},[186,118051,118052,118054,118056,118058,118060,118062,118064],{"class":188,"line":189},[186,118053,108873],{"class":202},[186,118055,529],{"class":669},[186,118057,108878],{"class":202},[186,118059,32278],{"class":206},[186,118061,116149],{"class":202},[186,118063,32278],{"class":206},[186,118065,116154],{"class":202},[169,118067,118068,118069,913],{},"这能避免无效动作直接写入 ",[183,118070,102507],{},[29,118072,118074],{"id":118073},"忘记返回-info","忘记返回 info",[169,118076,117914,118077,102449,118079,118081],{},[183,118078,71493],{},[183,118080,108565],{}," 都会返回 info：",[176,118083,118084],{"className":31833,"code":114824,"language":31835,"meta":181,"style":181},[183,118085,118086,118094],{"__ignoreMap":181},[186,118087,118088,118090,118092],{"class":188,"line":189},[186,118089,114831],{"class":202},[186,118091,529],{"class":669},[186,118093,114836],{"class":202},[186,118095,118096,118098,118100],{"class":188,"line":49},[186,118097,114841],{"class":202},[186,118099,529],{"class":669},[186,118101,114846],{"class":202},[169,118103,118104,118105,913],{},"即使暂时没有额外信息，也返回 ",[183,118106,33914],{},[14,118108,118110],{"id":118109},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[169,118112,118113],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[34,118115,118116,118119,118122,118125,118128,118131],{},[22,118117,118118],{},"更稳定的 reward。",[22,118120,118121],{},"合理的 episode 长度。",[22,118123,118124],{},"可重复的随机目标采样。",[22,118126,118127],{},"render 接口。",[22,118129,118130],{},"环境注册代码。",[22,118132,118133],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[169,118135,118136],{},"如果只是自己写训练循环，最小形式是：",[176,118138,118140],{"className":31833,"code":118139,"language":31835,"meta":181,"style":181},"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",[183,118141,118142,118150,118166,118170,118186,118195,118204,118214],{"__ignoreMap":181},[186,118143,118144,118146,118148],{"class":188,"line":189},[186,118145,117775],{"class":202},[186,118147,529],{"class":669},[186,118149,116373],{"class":202},[186,118151,118152,118154,118156,118158,118160,118162,118164],{"class":188,"line":49},[186,118153,114831],{"class":202},[186,118155,529],{"class":669},[186,118157,116383],{"class":202},[186,118159,115997],{"class":835},[186,118161,529],{"class":669},[186,118163,1803],{"class":206},[186,118165,1629],{"class":202},[186,118167,118168],{"class":188,"line":219},[186,118169,3867],{"emptyLinePlaceholder":1551},[186,118171,118172,118174,118176,118178,118180,118182,118184],{"class":188,"line":225},[186,118173,4491],{"class":669},[186,118175,102932],{"class":202},[186,118177,27500],{"class":669},[186,118179,33898],{"class":206},[186,118181,832],{"class":202},[186,118183,7873],{"class":206},[186,118185,32241],{"class":202},[186,118187,118188,118191,118193],{"class":188,"line":242},[186,118189,118190],{"class":202},"    action ",[186,118192,529],{"class":669},[186,118194,116452],{"class":202},[186,118196,118197,118200,118202],{"class":188,"line":248},[186,118198,118199],{"class":202},"    obs, reward, terminated, truncated, info ",[186,118201,529],{"class":669},[186,118203,114846],{"class":202},[186,118205,118206,118208,118210,118212],{"class":188,"line":265},[186,118207,4567],{"class":669},[186,118209,116518],{"class":202},[186,118211,116521],{"class":669},[186,118213,116524],{"class":202},[186,118215,118216,118219,118221],{"class":188,"line":271},[186,118217,118218],{"class":202},"        obs, info ",[186,118220,529],{"class":669},[186,118222,114836],{"class":202},[14,118224,118226],{"id":118225},"_9本章小结","9.本章小结",[169,118228,118229],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[176,118231,118234],{"className":118232,"code":118233,"language":753,"meta":181},[751],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[183,118235,118233],{"__ignoreMap":181},[169,118237,118238],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1524,118240,118241],{},"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":181,"searchDepth":49,"depth":49,"links":118243},[118244,118245,118246,118253,118257,118258,118259,118269,118270],{"id":102077,"depth":49,"text":102078},{"id":102200,"depth":49,"text":102201},{"id":102475,"depth":49,"text":102476,"children":118247},[118248,118250,118252],{"id":115055,"depth":219,"text":118249},"terminated 和 truncated 的区别",{"id":115158,"depth":219,"text":118251},"observation_space 和 action_space",{"id":115285,"depth":219,"text":115286},{"id":102683,"depth":49,"text":102684,"children":118254},[118255,118256],{"id":103003,"depth":219,"text":103003},{"id":103139,"depth":219,"text":103139},{"id":103746,"depth":49,"text":103747},{"id":103778,"depth":49,"text":103779},{"id":103883,"depth":49,"text":103884,"children":118260},[118261,118262,118264,118265,118267,118268],{"id":117910,"depth":219,"text":117911},{"id":117932,"depth":219,"text":118263},"data.ctrl[:] = action 维度错误",{"id":117967,"depth":219,"text":117968},{"id":117991,"depth":219,"text":118266},"observation_space 维度和 obs 不一致",{"id":118041,"depth":219,"text":118042},{"id":118073,"depth":219,"text":118074},{"id":118109,"depth":49,"text":118110},{"id":118225,"depth":49,"text":118226},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114808,"description":181},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118277,"title":118278,"body":118279,"description":118702,"extension":1549,"meta":118703,"navigation":1551,"path":118704,"seo":118705,"stem":118706,"__hash__":118707},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118280,"toc":118692},[118281,118285,118288,118291,118311,118317,118323,118333,118336,118339,118359,118362,118366,118369,118375,118378,118392,118395,118398,118472,118475,118481,118484,118507,118510,118560,118563,118569,118572,118575,118578,118597,118600,118606,118609,118612,118615,118635,118638,118641,118644,118689],[10,118282,118284],{"id":118283},"mujoco-学习","MuJoCo 学习",[169,118286,118287],{},"初版",[169,118289,118290],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[34,118292,118293,118296,118299,118308],{},[22,118294,118295],{},"MuJoCo 模型文件在描述什么。",[22,118297,118298],{},"Python 代码怎样读取和推进仿真。",[22,118300,118301,1824,118303,1824,118305,118307],{},[183,118302,105461],{},[183,118304,105791],{},[183,118306,105794],{}," 这些数组为什么重要。",[22,118309,118310],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[169,118312,118313,118314,118316],{},"默认环境为 Fedora 44、Python >= 3.10、",[183,118315,102458],{}," 官方 Python bindings。",[169,118318,118319,118320,118322],{},"注意：本文禁止使用 ",[183,118321,102443],{},"。所有示例均使用：",[176,118324,118325],{"className":31833,"code":103009,"language":31835,"meta":181,"style":181},[183,118326,118327],{"__ignoreMap":181},[186,118328,118329,118331],{"class":188,"line":189},[186,118330,31847],{"class":669},[186,118332,102732],{"class":202},[14,118334,118335],{"id":118335},"适合谁阅读",[169,118337,118338],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[34,118340,118341,118344,118347,118350],{},[22,118342,118343],{},"没学过 MuJoCo，只会一点 Python。",[22,118345,118346],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[22,118348,118349],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[22,118351,118352,118353,118355,118356,118358],{},"以前接触过 ",[183,118354,102443],{},"，现在想迁移到官方 ",[183,118357,102452],{}," Python bindings。",[169,118360,118361],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118363,118365],{"id":118364},"mujoco-到底是什么","MuJoCo 到底是什么",[169,118367,118368],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[176,118370,118373],{"className":118371,"code":118372,"language":753,"meta":181},[751],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[183,118374,118372],{"__ignoreMap":181},[169,118376,118377],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[34,118379,118380,118383,118386,118389],{},[22,118381,118382],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[22,118384,118385],{},"快速测试控制算法，不必一开始就上真实机器人。",[22,118387,118388],{},"生成强化学习环境。",[22,118390,118391],{},"采集状态、动作、图像、奖励等训练数据。",[14,118393,118394],{"id":118394},"学习前的心智模型",[169,118396,118397],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[99,118399,118400,118412],{},[102,118401,118402],{},[105,118403,118404,118407,118410],{},[108,118405,118406],{"align":110},"部分",[108,118408,118409],{"align":110},"负责什么",[108,118411,22648],{"align":110},[116,118413,118414,118425,118437,118449,118461],{},[105,118415,118416,118419,118422],{},[121,118417,118418],{"align":110},"MJCF XML",[121,118420,118421],{"align":110},"定义世界和机器人结构",[121,118423,118424],{"align":110},"地面、盒子、关节、电机、摄像头",[105,118426,118427,118431,118434],{},[121,118428,118429],{"align":110},[183,118430,102140],{},[121,118432,118433],{"align":110},"编译后的静态模型",[121,118435,118436],{"align":110},"有几个关节、有几个电机、时间步长是多少",[105,118438,118439,118443,118446],{},[121,118440,118441],{"align":110},[183,118442,102150],{},[121,118444,118445],{"align":110},"运行中的动态状态",[121,118447,118448],{"align":110},"当前时间、位置、速度、电机输入",[105,118450,118451,118455,118458],{},[121,118452,118453],{"align":110},[183,118454,102646],{},[121,118456,118457],{"align":110},"推进一步物理仿真",[121,118459,118460],{"align":110},"根据重力、力、碰撞更新状态",[105,118462,118463,118466,118469],{},[121,118464,118465],{"align":110},"Viewer \u002F Renderer",[121,118467,118468],{"align":110},"把仿真显示出来",[121,118470,118471],{"align":110},"打开窗口或保存图片",[169,118473,118474],{},"一句话总结：",[176,118476,118479],{"className":118477,"code":118478,"language":753,"meta":181},[751],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[183,118480,118478],{"__ignoreMap":181},[169,118482,118483],{},"参考来源：",[19,118485,118486,118493,118500],{},[22,118487,118488,118489],{},"MuJoCo Python 官方文档：",[948,118490,118491],{"href":118491,"rel":118492},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[952],[22,118494,118495,118496],{},"MuJoCo XML Reference：",[948,118497,118498],{"href":118498,"rel":118499},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[952],[22,118501,118502,118503],{},"MuJoCo Overview：",[948,118504,118505],{"href":118505,"rel":118506},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[952],[14,118508,118509],{"id":118509},"章节目录",[34,118511,118512,118518,118524,118530,118536,118542,118548,118554],{},[22,118513,118514],{},[948,118515,118517],{"href":118516},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[22,118519,118520],{},[948,118521,118523],{"href":118522},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[22,118525,118526],{},[948,118527,118529],{"href":118528},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[22,118531,118532],{},[948,118533,118535],{"href":118534},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[22,118537,118538],{},[948,118539,118541],{"href":118540},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[22,118543,118544],{},[948,118545,118547],{"href":118546},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[22,118549,118550],{},[948,118551,118553],{"href":118552},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[22,118555,118556],{},[948,118557,118559],{"href":118558},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118561,118562],{"id":118562},"推荐学习路线",[176,118564,118567],{"className":118565,"code":118566,"language":753,"meta":181},[751],"环境安装\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",[183,118568,118566],{"__ignoreMap":181},[169,118570,118571],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118573,118574],{"id":118574},"建议的目录结构",[169,118576,118577],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[176,118579,118581],{"className":25281,"code":118580,"language":25283,"meta":181,"style":181},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[183,118582,118583,118591],{"__ignoreMap":181},[186,118584,118585,118587,118589],{"class":188,"line":189},[186,118586,102697],{"class":198},[186,118588,30671],{"class":206},[186,118590,102702],{"class":532},[186,118592,118593,118595],{"class":188,"line":49},[186,118594,102707],{"class":206},[186,118596,102702],{"class":532},[169,118598,118599],{},"每一章的代码都单独保存：",[176,118601,118604],{"className":118602,"code":118603,"language":753,"meta":181},[751],"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",[183,118605,118603],{"__ignoreMap":181},[169,118607,118608],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118610,118611],{"id":118611},"学习方法",[169,118613,118614],{},"每章建议按这个顺序操作：",[34,118616,118617,118620,118623,118626,118629,118632],{},[22,118618,118619],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[22,118621,118622],{},"复制最小可运行代码，保存成指定文件。",[22,118624,118625],{},"运行代码，确认没有报错。",[22,118627,118628],{},"对照“运行结果说明”理解输出。",[22,118630,118631],{},"做“验证步骤”，主动改一两个参数。",[22,118633,118634],{},"遇到报错先看“常见错误与解决方案”。",[169,118636,118637],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118639,118640],{"id":118640},"全局排错顺序",[169,118642,118643],{},"遇到问题时，按下面顺序查：",[34,118645,118646,118652,118658,118663,118666,118669,118676,118686],{},[22,118647,118648,118649],{},"Python 环境是否激活：",[183,118650,118651],{},"which python",[22,118653,118654,118655],{},"MuJoCo 是否能导入：",[183,118656,118657],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[22,118659,118660,118661],{},"是否误装了 ",[183,118662,102443],{},[22,118664,118665],{},"XML 标签是否闭合、属性是否拼写正确",[22,118667,118668],{},"actuator 引用的 joint 名字是否存在",[22,118670,118671,118673,118674],{},[183,118672,102507],{}," 的长度是否等于 ",[183,118675,103589],{},[22,118677,107016,118678,83971,118680,118682,118683],{},[183,118679,105461],{},[183,118681,105791],{}," 后是否调用了 ",[183,118684,118685],{},"mujoco.mj_forward",[22,118687,118688],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1524,118690,118691],{},"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":181,"searchDepth":49,"depth":49,"links":118693},[118694,118695,118696,118697,118698,118699,118700,118701],{"id":118335,"depth":49,"text":118335},{"id":118364,"depth":49,"text":118365},{"id":118394,"depth":49,"text":118394},{"id":118509,"depth":49,"text":118509},{"id":118562,"depth":49,"text":118562},{"id":118574,"depth":49,"text":118574},{"id":118611,"depth":49,"text":118611},{"id":118640,"depth":49,"text":118640},"仿真搭建。",{"category":24839},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118278,"description":118702},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118709,"title":118710,"body":118711,"description":1548,"extension":1549,"meta":119166,"navigation":1551,"path":119167,"seo":119168,"stem":119169,"__hash__":119170},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118712,"toc":119164},[118713,118716,118719,118725,119161],[10,118714,118710],{"id":118715},"_1-最常用的基本操作更新",[169,118717,118718],{},"装linux系统教程：",[169,118720,118721],{},[948,118722,118723],{"href":118723,"rel":118724},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[952],[176,118726,118730],{"className":118727,"code":118728,"language":118729,"meta":181,"style":181},"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",[183,118731,118732,118737,118742,118751,118756,118765,118770,118790,118795,118806,118811,118820,118825,118853,118858,118877,118882,118901,118905,118910,118926,118930,118935,118965,118969,118974,118990,118994,118999,119014,119018,119023,119039,119043,119048,119060,119072,119076,119081,119098,119102,119107,119125,119129,119134,119143,119147,119152],{"__ignoreMap":181},[186,118733,118734],{"class":188,"line":189},[186,118735,118736],{"class":192},"#更新相关的知识\n",[186,118738,118739],{"class":188,"line":49},[186,118740,118741],{"class":192},"# 更新软件包列表（从服务器获取最新软件信息）\n",[186,118743,118744,118746,118749],{"class":188,"line":219},[186,118745,26035],{"class":198},[186,118747,118748],{"class":532}," apt",[186,118750,27699],{"class":532},[186,118752,118753],{"class":188,"line":225},[186,118754,118755],{"class":192},"# 升级所有可更新的软件包（不删除旧包）\n",[186,118757,118758,118760,118762],{"class":188,"line":242},[186,118759,26035],{"class":198},[186,118761,118748],{"class":532},[186,118763,118764],{"class":532}," upgrade\n",[186,118766,118767],{"class":188,"line":248},[186,118768,118769],{"class":192},"#更新和升级软件包\n",[186,118771,118772,118774,118776,118779,118781,118783,118785,118788],{"class":188,"line":265},[186,118773,26035],{"class":198},[186,118775,118748],{"class":532},[186,118777,118778],{"class":532}," update",[186,118780,27647],{"class":202},[186,118782,26035],{"class":198},[186,118784,118748],{"class":532},[186,118786,118787],{"class":532}," upgrade",[186,118789,102412],{"class":206},[186,118791,118792],{"class":188,"line":271},[186,118793,118794],{"class":192},"#列出可更新的软件包及版本信息\n",[186,118796,118797,118800,118803],{"class":188,"line":288},[186,118798,118799],{"class":198},"apt",[186,118801,118802],{"class":532}," list",[186,118804,118805],{"class":206}," --upgradable\n",[186,118807,118808],{"class":188,"line":294},[186,118809,118810],{"class":192},"#彻底升级（处理依赖关系，可能删除旧包）\n",[186,118812,118813,118815,118817],{"class":188,"line":1212},[186,118814,26035],{"class":198},[186,118816,118748],{"class":532},[186,118818,118819],{"class":532}," full-upgrade\n",[186,118821,118822],{"class":188,"line":1223},[186,118823,118824],{"class":192},"#设置指定版本\n",[186,118826,118827,118829,118831,118833,118835,118838,118840,118842,118844,118846,118849,118851],{"class":188,"line":1236},[186,118828,26035],{"class":198},[186,118830,118748],{"class":532},[186,118832,25293],{"class":532},[186,118834,30357],{"class":669},[186,118836,118837],{"class":532},"package_nam",[186,118839,1694],{"class":202},[186,118841,2567],{"class":669},[186,118843,529],{"class":532},[186,118845,520],{"class":669},[186,118847,118848],{"class":532},"version_numbe",[186,118850,2279],{"class":202},[186,118852,552],{"class":669},[186,118854,118855],{"class":188,"line":3096},[186,118856,118857],{"class":192},"#只安装软件包不升级\n",[186,118859,118860,118862,118864,118866,118868,118870,118872,118874],{"class":188,"line":3110},[186,118861,26035],{"class":198},[186,118863,118748],{"class":532},[186,118865,25293],{"class":532},[186,118867,30357],{"class":669},[186,118869,118837],{"class":532},[186,118871,1694],{"class":202},[186,118873,2567],{"class":669},[186,118875,118876],{"class":206}," --no-upgrade\n",[186,118878,118879],{"class":188,"line":3115},[186,118880,118881],{"class":192},"#只升级，不存在就不安装\n",[186,118883,118884,118886,118888,118890,118892,118894,118896,118898],{"class":188,"line":3121},[186,118885,26035],{"class":198},[186,118887,118748],{"class":532},[186,118889,25293],{"class":532},[186,118891,30357],{"class":669},[186,118893,118837],{"class":532},[186,118895,1694],{"class":202},[186,118897,2567],{"class":669},[186,118899,118900],{"class":206}," --only-upgrade\n",[186,118902,118903],{"class":188,"line":3142},[186,118904,3867],{"emptyLinePlaceholder":1551},[186,118906,118907],{"class":188,"line":3147},[186,118908,118909],{"class":192},"#安装指定的软件命令\n",[186,118911,118912,118914,118916,118918,118920,118922,118924],{"class":188,"line":3161},[186,118913,26035],{"class":198},[186,118915,118748],{"class":532},[186,118917,25293],{"class":532},[186,118919,30357],{"class":669},[186,118921,118837],{"class":532},[186,118923,1694],{"class":202},[186,118925,552],{"class":669},[186,118927,118928],{"class":188,"line":3166},[186,118929,3867],{"emptyLinePlaceholder":1551},[186,118931,118932],{"class":188,"line":3195},[186,118933,118934],{"class":192},"#安装多个软件包\n",[186,118936,118937,118939,118941,118943,118945,118948,118951,118953,118955,118958,118960,118962],{"class":188,"line":3200},[186,118938,26035],{"class":198},[186,118940,118748],{"class":532},[186,118942,25293],{"class":532},[186,118944,30357],{"class":669},[186,118946,118947],{"class":532},"package_",[186,118949,118950],{"class":669},"1>",[186,118952,30357],{"class":669},[186,118954,118947],{"class":532},[186,118956,118957],{"class":669},"2>",[186,118959,30357],{"class":669},[186,118961,118947],{"class":532},[186,118963,118964],{"class":669},"3>\n",[186,118966,118967],{"class":188,"line":3217},[186,118968,3867],{"emptyLinePlaceholder":1551},[186,118970,118971],{"class":188,"line":3222},[186,118972,118973],{"class":192},"#更新指定的软件命令\n",[186,118975,118976,118978,118980,118982,118984,118986,118988],{"class":188,"line":3227},[186,118977,26035],{"class":198},[186,118979,118748],{"class":532},[186,118981,118778],{"class":532},[186,118983,30357],{"class":669},[186,118985,118837],{"class":532},[186,118987,1694],{"class":202},[186,118989,552],{"class":669},[186,118991,118992],{"class":188,"line":3232},[186,118993,3867],{"emptyLinePlaceholder":1551},[186,118995,118996],{"class":188,"line":3246},[186,118997,118998],{"class":192},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[186,119000,119001,119003,119006,119008,119010,119012],{"class":188,"line":3251},[186,119002,118799],{"class":198},[186,119004,119005],{"class":532}," show",[186,119007,30357],{"class":669},[186,119009,118837],{"class":532},[186,119011,1694],{"class":202},[186,119013,552],{"class":669},[186,119015,119016],{"class":188,"line":4044},[186,119017,3867],{"emptyLinePlaceholder":1551},[186,119019,119020],{"class":188,"line":4058},[186,119021,119022],{"class":192},"#删除软件包命令\n",[186,119024,119025,119027,119029,119031,119033,119035,119037],{"class":188,"line":4066},[186,119026,26035],{"class":198},[186,119028,118748],{"class":532},[186,119030,27536],{"class":532},[186,119032,30357],{"class":669},[186,119034,118837],{"class":532},[186,119036,1694],{"class":202},[186,119038,552],{"class":669},[186,119040,119041],{"class":188,"line":4071},[186,119042,3867],{"emptyLinePlaceholder":1551},[186,119044,119045],{"class":188,"line":4077},[186,119046,119047],{"class":192},"# 清理旧版本和缓存（释放磁盘空间）\n",[186,119049,119050,119052,119054,119057],{"class":188,"line":4083},[186,119051,26035],{"class":198},[186,119053,118748],{"class":532},[186,119055,119056],{"class":532}," autoremove",[186,119058,119059],{"class":192},"  # 删除不再需要的依赖和库文件\n",[186,119061,119062,119064,119066,119069],{"class":188,"line":4088},[186,119063,26035],{"class":198},[186,119065,118748],{"class":532},[186,119067,119068],{"class":532}," clean",[186,119070,119071],{"class":192},"       # 清理下载的缓存包\n",[186,119073,119074],{"class":188,"line":9411},[186,119075,3867],{"emptyLinePlaceholder":1551},[186,119077,119078],{"class":188,"line":9435},[186,119079,119080],{"class":192},"#移除软件包及配置文件\n",[186,119082,119083,119085,119087,119090,119092,119094,119096],{"class":188,"line":9440},[186,119084,26035],{"class":198},[186,119086,118748],{"class":532},[186,119088,119089],{"class":532}," purge",[186,119091,30357],{"class":669},[186,119093,118837],{"class":532},[186,119095,1694],{"class":202},[186,119097,552],{"class":669},[186,119099,119100],{"class":188,"line":9446},[186,119101,3867],{"emptyLinePlaceholder":1551},[186,119103,119104],{"class":188,"line":9473},[186,119105,119106],{"class":192},"#查找软件包命令\n",[186,119108,119109,119111,119113,119116,119118,119121,119123],{"class":188,"line":9478},[186,119110,26035],{"class":198},[186,119112,118748],{"class":532},[186,119114,119115],{"class":532}," search",[186,119117,30357],{"class":669},[186,119119,119120],{"class":532},"keywor",[186,119122,1925],{"class":202},[186,119124,552],{"class":669},[186,119126,119127],{"class":188,"line":9484},[186,119128,3867],{"emptyLinePlaceholder":1551},[186,119130,119131],{"class":188,"line":9496},[186,119132,119133],{"class":192},"#列出所有已安装的包\n",[186,119135,119136,119138,119140],{"class":188,"line":9508},[186,119137,118799],{"class":198},[186,119139,118802],{"class":532},[186,119141,119142],{"class":206}," --installed\n",[186,119144,119145],{"class":188,"line":9520},[186,119146,3867],{"emptyLinePlaceholder":1551},[186,119148,119149],{"class":188,"line":11179},[186,119150,119151],{"class":192},"#列出所有已安装的包的版本信息\n",[186,119153,119154,119156,119158],{"class":188,"line":11204},[186,119155,118799],{"class":198},[186,119157,118802],{"class":532},[186,119159,119160],{"class":206}," --all-versions\n",[1524,119162,119163],{},"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":181,"searchDepth":49,"depth":49,"links":119165},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118710,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119172,"title":119173,"body":119174,"description":1548,"extension":1549,"meta":119915,"navigation":1551,"path":119916,"seo":119917,"stem":119918,"__hash__":119919},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119175,"toc":119902},[119176,119179,119183,119186,119192,119196,119200,119206,119211,119216,119221,119226,119231,119234,119237,119240,119243,119247,119250,119255,119258,119263,119266,119271,119278,119281,119284,119287,119290,119293,119304,119308,119312,119317,119322,119326,119331,119335,119340,119344,119348,119353,119356,119401,119406,119410,119414,119419,119425,119430,119440,119445,119455,119460,119465,119492,119496,119499,119504,119507,119532,119536,119541,119544,119549,119554,119574,119579,119582,119597,119601,119654,119657,119662,119666,119669,119684,119687,119690,119695,119699,119703,119706,119710,119714,119717,119722,119727,119731,119738,119746,119749,119756,119761,119766,119769,119774,119781,119786,119793,119797,119799,119804,119808,119811,119814,119819,119822,119827,119830,119835,119840,119845,119849,119854,119858,119899],[10,119177,119173],{"id":119178},"_2-linux装机教程",[14,119180,119182],{"id":119181},"_21-实体机","2.1 实体机",[169,119184,119185],{},"使用清华源：（Ubuntu24.04）",[169,119187,119188],{},[948,119189,119190],{"href":119190,"rel":119191},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[952],[14,119193,119195],{"id":119194},"_22-普通虚拟机","2.2 普通虚拟机",[29,119197,119199],{"id":119198},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[169,119201,119202],{},[948,119203,119204],{"href":119204,"rel":119205},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[952],[169,119207,119208],{},[164,119209],{"alt":181,"src":119210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[169,119212,119213],{},[164,119214],{"alt":181,"src":119215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[169,119217,119218],{},[164,119219],{"alt":181,"src":119220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[169,119222,119223],{},[164,119224],{"alt":181,"src":119225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[169,119227,119228],{},[164,119229],{"alt":181,"src":119230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[169,119232,119233],{},"内存4G（4096MB）；",[169,119235,119236],{},"CPU给4个核；",[169,119238,119239],{},"硬盘动态分配60G；",[169,119241,119242],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[29,119244,119246],{"id":119245},"_222-安装ubuntu","2.2.2 安装Ubuntu",[169,119248,119249],{},"按照1.1的步骤下载Ubuntu",[169,119251,119252],{},[164,119253],{"alt":181,"src":119254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[169,119256,119257],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[169,119259,119260],{},[164,119261],{"alt":181,"src":119262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[169,119264,119265],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[169,119267,119268],{},[164,119269],{"alt":181,"src":119270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[169,119272,119273,119274,119277],{},"选择“正常安装”(找不到都用Alt+F7)， ",[54,119275,119276],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[169,119279,119280],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[169,119282,119283],{},"将改动写入磁盘吗 继续",[169,119285,119286],{},"选择东八区（shanghai，大致在地图上点一下），继续",[169,119288,119289],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[169,119291,119292],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[169,119294,119295,119296,119299,119300,119303],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[54,119297,119298],{},"除了"," 选不发送系统信息与不升级之外， ",[54,119301,119302],{},"其它"," 都跳过或前进）",[29,119305,119307],{"id":119306},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23459,119309,119311],{"id":119310},"_2231-全屏","2.2.3.1 全屏",[169,119313,119314],{},[164,119315],{"alt":181,"src":119316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[169,119318,119319],{},[164,119320],{"alt":181,"src":119321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23459,119323,119325],{"id":119324},"_2232-文件交换","2.2.3.2 文件交换",[169,119327,119328],{},[164,119329],{"alt":181,"src":119330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23459,119332,119334],{"id":119333},"_2233-新建文本文档","2.2.3.3 新建文本文档",[169,119336,119337],{},[164,119338],{"alt":181,"src":119339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119341,119343],{"id":119342},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[29,119345,119347],{"id":119346},"_231-简介与优缺点","2.3.1 简介与优缺点",[34,119349,119350],{},[22,119351,119352],{},"什么情况下推荐？",[169,119354,119355],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[34,119357,119358],{"start":49},[22,119359,119360,119361],{},"优缺点：",[34,119362,119363,119393],{},[22,119364,119365,119366],{},"优点：",[34,119367,119368,119371,119378,119381,119384,119387,119390],{},[22,119369,119370],{},"WSL2是最好的Linux发行版;(bushi)",[22,119372,119373,119374,119377],{},"性能损耗极低。且比在Windows上跑深度性能 ",[54,119375,119376],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[22,119379,119380],{},"非常方便调用USB设备，可以USB直通;",[22,119382,119383],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[22,119385,119386],{},"非常方便Win与WSL2互相传文件等协同操作;",[22,119388,119389],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[22,119391,119392],{},"非常方便使用Windows的VScode远程开发;",[22,119394,119395,119396],{},"缺点：",[34,119397,119398],{},[22,119399,119400],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[169,119402,119403],{},[164,119404],{"alt":181,"src":119405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[29,119407,119409],{"id":119408},"_232-安装教程","2.3.2 安装教程",[23459,119411,119413],{"id":119412},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[34,119415,119416],{},[22,119417,119418],{},"方法一(图形界面)",[169,119420,119421,119422,26077],{},"用Win+R输入",[183,119423,119424],{},"appwiz.cpl",[169,119426,119427],{},[164,119428],{"alt":181,"src":119429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[169,119431,119432,119433,119436,119437,27930],{},"点击OK进入 ",[54,119434,119435],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[54,119438,119439],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[169,119441,119442],{},[164,119443],{"alt":181,"src":119444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[169,119446,119447,119448,102449,119451,119454],{},"选择 ",[54,119449,119450],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[54,119452,119453],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[169,119456,119457],{},[164,119458],{"alt":181,"src":119459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[34,119461,119462],{"start":49},[22,119463,119464],{},"方法二(命令行)",[176,119466,119470],{"className":119467,"code":119468,"language":119469,"meta":181,"style":181},"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",[183,119471,119472,119477,119482,119487],{"__ignoreMap":181},[186,119473,119474],{"class":188,"line":189},[186,119475,119476],{},"# 开启 Linux 子系统\n",[186,119478,119479],{"class":188,"line":49},[186,119480,119481],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[186,119483,119484],{"class":188,"line":219},[186,119485,119486],{},"# 开启虚拟机平台\n",[186,119488,119489],{"class":188,"line":225},[186,119490,119491],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23459,119493,119495],{"id":119494},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[169,119497,119498],{},"用管理员权限打开powershell",[169,119500,119501],{},[164,119502],{"alt":181,"src":119503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[169,119505,119506],{},"升级WSL并设置默认版本为WSL2",[176,119508,119510],{"className":119467,"code":119509,"language":119469,"meta":181,"style":181},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[183,119511,119512,119517,119522,119527],{"__ignoreMap":181},[186,119513,119514],{"class":188,"line":189},[186,119515,119516],{},"# 更新 wsl\n",[186,119518,119519],{"class":188,"line":49},[186,119520,119521],{},"wsl --update\n",[186,119523,119524],{"class":188,"line":219},[186,119525,119526],{},"# 将 wsl 版本设置为 wsl2\n",[186,119528,119529],{"class":188,"line":225},[186,119530,119531],{},"wsl --set-default-version 2\n",[23459,119533,119535],{"id":119534},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[34,119537,119538],{},[22,119539,119540],{},"方式一(商店下载)",[169,119542,119543],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[169,119545,119546],{},[164,119547],{"alt":181,"src":119548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[34,119550,119551],{"start":49},[22,119552,119553],{},"方式二(命令行安装)",[176,119555,119557],{"className":119467,"code":119556,"language":119469,"meta":181,"style":181},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[183,119558,119559,119564,119569],{"__ignoreMap":181},[186,119560,119561],{"class":188,"line":189},[186,119562,119563],{},"# 列出可安装的 Linux 版本\n",[186,119565,119566],{"class":188,"line":49},[186,119567,119568],{},"#（需要科学手段）\n",[186,119570,119571],{"class":188,"line":219},[186,119572,119573],{},"wsl --list --online\n",[169,119575,119576],{},[164,119577],{"alt":181,"src":119578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[169,119580,119581],{},"选择对应发行版并安装",[176,119583,119585],{"className":119467,"code":119584,"language":119469,"meta":181,"style":181},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[183,119586,119587,119592],{"__ignoreMap":181},[186,119588,119589],{"class":188,"line":189},[186,119590,119591],{},"# Ubuntu安装完毕后需要重启系统\n",[186,119593,119594],{"class":188,"line":49},[186,119595,119596],{},"wsl --install -d Ubuntu-24.04\n",[23459,119598,119600],{"id":119599},"_2324-查看系统状态","2.3.2.4 查看系统状态",[176,119602,119604],{"className":119467,"code":119603,"language":119469,"meta":181,"style":181},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[183,119605,119606,119611,119616,119621,119626,119630,119634,119639,119644,119649],{"__ignoreMap":181},[186,119607,119608],{"class":188,"line":189},[186,119609,119610],{},"# 查看 wsl\n",[186,119612,119613],{"class":188,"line":49},[186,119614,119615],{},"wsl -l\n",[186,119617,119618],{"class":188,"line":219},[186,119619,119620],{},"# 查看 wsl 运行版本或模式\n",[186,119622,119623],{"class":188,"line":225},[186,119624,119625],{},"wsl -l -v\n",[186,119627,119628],{"class":188,"line":242},[186,119629,3867],{"emptyLinePlaceholder":1551},[186,119631,119632],{"class":188,"line":248},[186,119633,3867],{"emptyLinePlaceholder":1551},[186,119635,119636],{"class":188,"line":265},[186,119637,119638],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[186,119640,119641],{"class":188,"line":271},[186,119642,119643],{},"wsl --set-version \u003Cdistro> 2\n",[186,119645,119646],{"class":188,"line":288},[186,119647,119648],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[186,119650,119651],{"class":188,"line":294},[186,119652,119653],{},"wsl --unregister \u003Cdistro>\n",[169,119655,119656],{},"输出Version为2即正常",[169,119658,119659],{},[164,119660],{"alt":181,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23459,119663,119665],{"id":119664},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[169,119667,119668],{},"直接在Powershell里输入wsl命令进入子系统",[176,119670,119672],{"className":119467,"code":119671,"language":119469,"meta":181,"style":181},"# 进入子系统\nwsl\n",[183,119673,119674,119679],{"__ignoreMap":181},[186,119675,119676],{"class":188,"line":189},[186,119677,119678],{},"# 进入子系统\n",[186,119680,119681],{"class":188,"line":49},[186,119682,119683],{},"wsl\n",[169,119685,119686],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[169,119688,119689],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[169,119691,119692],{},[164,119693],{"alt":181,"src":119694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[29,119696,119698],{"id":119697},"_233-配置各种环境","2.3.3 配置各种环境",[23459,119700,119702],{"id":119701},"_2331-换源","2.3.3.1 换源",[169,119704,119705],{},"(同实体机LINUX，往下找教程)",[23459,119707,119709],{"id":119708},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24371,119711,119713],{"id":119712},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[169,119715,119716],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[169,119718,119719],{},[164,119720],{"alt":181,"src":119721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[169,119723,119724],{},[164,119725],{"alt":181,"src":119726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24371,119728,119730],{"id":119729},"_23322-cuda","2.3.3.2.2 CUDA",[169,119732,119733,119734],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[948,119735,119736],{"href":119736,"rel":119737},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[952],[169,119739,119740,119743],{},[164,119741],{"alt":181,"src":119742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[164,119744],{"alt":181,"src":119745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[169,119747,119748],{},"在下方的网站，选择合适的版本。",[169,119750,119751,119752],{},"WSL2 专属 CUDA 指南：",[948,119753,119754],{"href":119754,"rel":119755},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[952],[169,119757,119758],{},[54,119759,119760],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[169,119762,119763],{},[164,119764],{"alt":181,"src":119765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[169,119767,119768],{},"挨行敲一遍",[169,119770,119771],{},[164,119772],{"alt":181,"src":119773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[169,119775,119776,119777,119780],{},"敲完后，输入",[183,119778,119779],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[169,119782,119783],{},[164,119784],{"alt":181,"src":119785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[169,119787,119788,119789,119792],{},"（请详看下方教程的",[54,119790,119791],{},"安装CUDA的配置环境来看","如何配置环境）",[24371,119794,119796],{"id":119795},"_23323-cudnn","2.3.3.2.3 cuDNN",[169,119798,119705],{},[169,119800,119801],{},[164,119802],{"alt":181,"src":119803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23459,119805,119807],{"id":119806},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[169,119809,119810],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[169,119812,119813],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[169,119815,119816],{},[164,119817],{"alt":181,"src":119818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[169,119820,119821],{},"连接WSL2",[169,119823,119824],{},[164,119825],{"alt":181,"src":119826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[169,119828,119829],{},"远程开发成功。",[169,119831,119832],{},[164,119833],{"alt":181,"src":119834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[169,119836,119837],{},[164,119838],{"alt":181,"src":119839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[169,119841,119842],{},[164,119843],{"alt":181,"src":119844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23459,119846,119848],{"id":119847},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[169,119850,119851],{},[164,119852],{"alt":181,"src":119853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23459,119855,119857],{"id":119856},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[176,119859,119861],{"className":118727,"code":119860,"language":118729,"meta":181,"style":181},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[183,119862,119863,119871,119879,119890,119894],{"__ignoreMap":181},[186,119864,119865,119867,119869],{"class":188,"line":189},[186,119866,26035],{"class":198},[186,119868,118748],{"class":532},[186,119870,27699],{"class":532},[186,119872,119873,119875,119877],{"class":188,"line":49},[186,119874,26035],{"class":198},[186,119876,118748],{"class":532},[186,119878,118764],{"class":532},[186,119880,119881,119883,119885,119887],{"class":188,"line":219},[186,119882,26035],{"class":198},[186,119884,118748],{"class":532},[186,119886,25293],{"class":532},[186,119888,119889],{"class":532}," mesa-utils\n",[186,119891,119892],{"class":188,"line":225},[186,119893,3867],{"emptyLinePlaceholder":1551},[186,119895,119896],{"class":188,"line":242},[186,119897,119898],{"class":192},"#然后重启wsl2即可\n",[1524,119900,119901],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":181,"searchDepth":49,"depth":49,"links":119903},[119904,119905,119910],{"id":119181,"depth":49,"text":119182},{"id":119194,"depth":49,"text":119195,"children":119906},[119907,119908,119909],{"id":119198,"depth":219,"text":119199},{"id":119245,"depth":219,"text":119246},{"id":119306,"depth":219,"text":119307},{"id":119342,"depth":49,"text":119343,"children":119911},[119912,119913,119914],{"id":119346,"depth":219,"text":119347},{"id":119408,"depth":219,"text":119409},{"id":119697,"depth":219,"text":119698},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119173,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119921,"title":119922,"body":119923,"description":1548,"extension":1549,"meta":122859,"navigation":1551,"path":122860,"seo":122861,"stem":122862,"__hash__":122863},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119924,"toc":122831},[119925,119928,119932,119938,119942,119948,119952,120140,120143,120148,120152,120156,120159,120162,120168,120173,120176,120179,120184,120217,120222,120226,120303,120306,120311,120315,120318,120357,120360,120369,120387,120392,120399,120516,120521,120524,120551,120556,120560,120569,120619,120626,120630,120633,120647,120654,120688,120693,120697,120720,120723,120728,120732,120735,120738,120741,120783,120787,120790,120793,120834,120838,120842,120845,120850,120855,120858,120881,120884,120892,120897,120900,120905,120910,120913,120918,120922,120927,120950,120955,121017,121025,121030,121035,121038,121043,121046,121051,121056,121074,121079,121085,121090,121104,121108,121111,121114,121117,121160,121163,121168,121269,121272,121277,121281,121285,121322,121326,121330,121334,121380,121384,121429,121433,121440,121448,121503,121506,121583,121586,121609,121613,121616,121621,121626,121634,121637,121642,121647,121652,121655,121660,121669,121672,121677,121680,121751,121756,121759,121764,121767,121772,121775,121780,121783,121788,121793,121796,121871,121874,121887,121892,121895,121909,121912,121941,121946,121975,121978,121983,121987,121992,122001,122004,122009,122012,122017,122020,122023,122028,122031,122036,122041,122044,122049,122052,122177,122182,122212,122215,122220,122225,122242,122245,122288,122291,122318,122323,122336,122479,122483,122488,122502,122505,122556,122559,122589,122592,122608,122613,122627,122630,122697,122702,122711,122716,122719,122731,122736,122743,122767,122770,122775,122778,122797,122802,122809,122821,122828],[10,119926,119922],{"id":119927},"_3-安装必备配置",[14,119929,119931],{"id":119930},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[176,119933,119936],{"className":119934,"code":119935,"language":753},[751],"  打开下方网站（注意，该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",[183,119937,119935],{"__ignoreMap":181},[29,119939,119941],{"id":119940},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[176,119943,119946],{"className":119944,"code":119945,"language":753},[751],"  输入以下命令\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",[183,119947,119945],{"__ignoreMap":181},[29,119949,119951],{"id":119950},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[176,119953,119957],{"className":119954,"code":119955,"language":119956,"meta":181,"style":181},"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",[183,119958,119959,119967,119978,119990,120004,120008,120018,120023,120027,120031,120036,120040,120052,120056,120061,120065,120076,120080,120096,120100,120111,120115,120120,120124,120132],{"__ignoreMap":181},[186,119960,119961,119963,119965],{"class":188,"line":189},[186,119962,26035],{"class":198},[186,119964,118748],{"class":532},[186,119966,27699],{"class":532},[186,119968,119969,119971,119973,119975],{"class":188,"line":49},[186,119970,26035],{"class":198},[186,119972,118748],{"class":532},[186,119974,25293],{"class":532},[186,119976,119977],{"class":532}," vim\n",[186,119979,119980,119982,119985,119987],{"class":188,"line":219},[186,119981,26035],{"class":198},[186,119983,119984],{"class":532}," rm",[186,119986,26784],{"class":206},[186,119988,119989],{"class":532}," \u002Fetc\u002Fapt\u002Fsources.list\n",[186,119991,119992,119994,119996,119998,120001],{"class":188,"line":225},[186,119993,26035],{"class":198},[186,119995,119984],{"class":532},[186,119997,26784],{"class":206},[186,119999,120000],{"class":532}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[186,120002,120003],{"class":206},"**\n",[186,120005,120006],{"class":188,"line":242},[186,120007,3867],{"emptyLinePlaceholder":1551},[186,120009,120010,120012,120015],{"class":188,"line":248},[186,120011,26035],{"class":198},[186,120013,120014],{"class":532}," vim",[186,120016,120017],{"class":532}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[186,120019,120020],{"class":188,"line":265},[186,120021,120022],{"class":532},"```\n",[186,120024,120025],{"class":188,"line":271},[186,120026,3867],{"emptyLinePlaceholder":1551},[186,120028,120029],{"class":188,"line":288},[186,120030,3867],{"emptyLinePlaceholder":1551},[186,120032,120033],{"class":188,"line":294},[186,120034,120035],{"class":198},"选择好Ubuntu版本后，复制下方的内容。\n",[186,120037,120038],{"class":188,"line":1212},[186,120039,3867],{"emptyLinePlaceholder":1551},[186,120041,120042,120044,120047,120050],{"class":188,"line":1223},[186,120043,1838],{"class":669},[186,120045,120046],{"class":532},"[](",[186,120048,120049],{"class":198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[186,120051,1629],{"class":532},[186,120053,120054],{"class":188,"line":1236},[186,120055,3867],{"emptyLinePlaceholder":1551},[186,120057,120058],{"class":188,"line":3096},[186,120059,120060],{"class":198},"粘贴进去\n",[186,120062,120063],{"class":188,"line":3110},[186,120064,3867],{"emptyLinePlaceholder":1551},[186,120066,120067,120069,120071,120074],{"class":188,"line":3115},[186,120068,1838],{"class":669},[186,120070,120046],{"class":532},[186,120072,120073],{"class":198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[186,120075,1629],{"class":532},[186,120077,120078],{"class":188,"line":3121},[186,120079,3867],{"emptyLinePlaceholder":1551},[186,120081,120082,120085,120088,120091,120093],{"class":188,"line":3142},[186,120083,120084],{"class":198},"按一下ESC，然后英文冒号，输入",[186,120086,120087],{"class":532}," `",[186,120089,120090],{"class":198},":wq!",[186,120092,2579],{"class":532},[186,120094,120095],{"class":198},"然后回车\n",[186,120097,120098],{"class":188,"line":3147},[186,120099,3867],{"emptyLinePlaceholder":1551},[186,120101,120102,120104,120106,120109],{"class":188,"line":3161},[186,120103,1838],{"class":669},[186,120105,120046],{"class":532},[186,120107,120108],{"class":198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[186,120110,1629],{"class":532},[186,120112,120113],{"class":188,"line":3166},[186,120114,3867],{"emptyLinePlaceholder":1551},[186,120116,120117],{"class":188,"line":3195},[186,120118,120119],{"class":198},"输入以下命令\n",[186,120121,120122],{"class":188,"line":3200},[186,120123,3867],{"emptyLinePlaceholder":1551},[186,120125,120126,120129],{"class":188,"line":3217},[186,120127,120128],{"class":532},"```",[186,120130,120131],{"class":198},"Bash\n",[186,120133,120134,120136,120138],{"class":188,"line":3222},[186,120135,26035],{"class":198},[186,120137,118748],{"class":532},[186,120139,27699],{"class":532},[169,120141,120142],{},"这里被替换成对应学校则成功",[169,120144,120145],{},[164,120146],{"alt":181,"src":120147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120149,120151],{"id":120150},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[29,120153,120155],{"id":120154},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[169,120157,120158],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[169,120160,120161],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[169,120163,120164],{},[948,120165,120166],{"href":120166,"rel":120167},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[952],[169,120169,120170],{},[164,120171],{"alt":181,"src":120172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[169,120174,120175],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[169,120177,120178],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[169,120180,120181],{},[164,120182],{"alt":181,"src":120183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[176,120185,120187],{"className":118727,"code":120186,"language":118729,"meta":181,"style":181},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[183,120188,120189,120194,120201,120206],{"__ignoreMap":181},[186,120190,120191],{"class":188,"line":189},[186,120192,120193],{"class":192},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[186,120195,120196,120198],{"class":188,"line":49},[186,120197,102707],{"class":206},[186,120199,120200],{"class":532}," ~\u002FDownloads\n",[186,120202,120203],{"class":188,"line":219},[186,120204,120205],{"class":192},"#下方chrome安装包名不一定是这个，根据名字来看\n",[186,120207,120208,120210,120212,120214],{"class":188,"line":225},[186,120209,26035],{"class":198},[186,120211,118748],{"class":532},[186,120213,25293],{"class":532},[186,120215,120216],{"class":532}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[169,120218,120219],{},[164,120220],{"alt":181,"src":120221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[29,120223,120225],{"id":120224},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[176,120227,120229],{"className":118727,"code":120228,"language":118729,"meta":181,"style":181},"# 老版\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",[183,120230,120231,120236,120244,120255,120260,120264,120269,120279,120287,120298],{"__ignoreMap":181},[186,120232,120233],{"class":188,"line":189},[186,120234,120235],{"class":192},"# 老版\n",[186,120237,120238,120240,120242],{"class":188,"line":49},[186,120239,26035],{"class":198},[186,120241,118748],{"class":532},[186,120243,27699],{"class":532},[186,120245,120246,120248,120250,120252],{"class":188,"line":219},[186,120247,26035],{"class":198},[186,120249,118748],{"class":532},[186,120251,25293],{"class":532},[186,120253,120254],{"class":532}," neofetch\n",[186,120256,120257],{"class":188,"line":225},[186,120258,120259],{"class":198},"neofetch\n",[186,120261,120262],{"class":188,"line":242},[186,120263,3867],{"emptyLinePlaceholder":1551},[186,120265,120266],{"class":188,"line":248},[186,120267,120268],{"class":192},"# 新版\n",[186,120270,120271,120273,120276],{"class":188,"line":265},[186,120272,26035],{"class":198},[186,120274,120275],{"class":532}," add-apt-repository",[186,120277,120278],{"class":532}," ppa:zhangsongcui3371\u002Ffastfetch\n",[186,120280,120281,120283,120285],{"class":188,"line":271},[186,120282,26035],{"class":198},[186,120284,118748],{"class":532},[186,120286,27699],{"class":532},[186,120288,120289,120291,120293,120295],{"class":188,"line":288},[186,120290,26035],{"class":198},[186,120292,118748],{"class":532},[186,120294,25293],{"class":532},[186,120296,120297],{"class":532}," fastfetch\n",[186,120299,120300],{"class":188,"line":294},[186,120301,120302],{"class":198},"fastfetch\n",[169,120304,120305],{},"这里显示，一共有3162个debian的程序，7个snap程序",[169,120307,120308],{},[164,120309],{"alt":181,"src":120310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[29,120312,120314],{"id":120313},"_323-移除snap应用","3.2.3 移除snap应用",[169,120316,120317],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[176,120319,120321],{"className":118727,"code":120320,"language":118729,"meta":181,"style":181},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[183,120322,120323,120335,120346],{"__ignoreMap":181},[186,120324,120325,120327,120329,120332],{"class":188,"line":189},[186,120326,26035],{"class":198},[186,120328,27970],{"class":532},[186,120330,120331],{"class":532}," disable",[186,120333,120334],{"class":532}," snapd.service\n",[186,120336,120337,120339,120341,120343],{"class":188,"line":49},[186,120338,26035],{"class":198},[186,120340,27970],{"class":532},[186,120342,120331],{"class":532},[186,120344,120345],{"class":532}," snapd.socket\n",[186,120347,120348,120350,120352,120354],{"class":188,"line":219},[186,120349,26035],{"class":198},[186,120351,27970],{"class":532},[186,120353,120331],{"class":532},[186,120355,120356],{"class":532}," snapd.seeded.service\n",[169,120358,120359],{},"然后查看snap应用列表",[169,120361,120362,120363,120368],{},"根据你安装的选择不同（最小安装或普通安装），有",[948,120364,120367],{"href":120365,"rel":120366},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[952],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[176,120370,120372],{"className":118727,"code":120371,"language":118729,"meta":181,"style":181},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[183,120373,120374,120379],{"__ignoreMap":181},[186,120375,120376],{"class":188,"line":189},[186,120377,120378],{"class":192},"# 查询当前系统上snap安装了哪些app\n",[186,120380,120381,120384],{"class":188,"line":49},[186,120382,120383],{"class":198},"snap",[186,120385,120386],{"class":532}," list\n",[169,120388,120389],{},[164,120390],{"alt":181,"src":120391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[169,120393,120394,120395,120398],{},"卸载掉图中所有应用，按照 ",[54,120396,120397],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[176,120400,120402],{"className":118727,"code":120401,"language":118729,"meta":181,"style":181},"#移除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",[183,120403,120404,120409,120421,120426,120437,120442,120453,120458,120469,120474,120478,120483,120494,120505],{"__ignoreMap":181},[186,120405,120406],{"class":188,"line":189},[186,120407,120408],{"class":192},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[186,120410,120411,120413,120416,120418],{"class":188,"line":49},[186,120412,26035],{"class":198},[186,120414,120415],{"class":532}," snap",[186,120417,27536],{"class":532},[186,120419,120420],{"class":532}," snap-store\n",[186,120422,120423],{"class":188,"line":219},[186,120424,120425],{"class":192},"#移除firefox浏览器\n",[186,120427,120428,120430,120432,120434],{"class":188,"line":225},[186,120429,26035],{"class":198},[186,120431,120415],{"class":532},[186,120433,27536],{"class":532},[186,120435,120436],{"class":532}," firefox\n",[186,120438,120439],{"class":188,"line":242},[186,120440,120441],{"class":192},"#移除gnome-42-2204\n",[186,120443,120444,120446,120448,120450],{"class":188,"line":248},[186,120445,26035],{"class":198},[186,120447,120415],{"class":532},[186,120449,27536],{"class":532},[186,120451,120452],{"class":532}," gnome-42-2204\n",[186,120454,120455],{"class":188,"line":265},[186,120456,120457],{"class":192},"#移除gtk-common-themes\n",[186,120459,120460,120462,120464,120466],{"class":188,"line":271},[186,120461,26035],{"class":198},[186,120463,120415],{"class":532},[186,120465,27536],{"class":532},[186,120467,120468],{"class":532}," gtk-common-themes\n",[186,120470,120471],{"class":188,"line":288},[186,120472,120473],{"class":192},"#移除其它...\n",[186,120475,120476],{"class":188,"line":294},[186,120477,4141],{"class":202},[186,120479,120480],{"class":188,"line":1212},[186,120481,120482],{"class":192},"#移除core22,bare以及snapd\n",[186,120484,120485,120487,120489,120491],{"class":188,"line":1223},[186,120486,26035],{"class":198},[186,120488,120415],{"class":532},[186,120490,27536],{"class":532},[186,120492,120493],{"class":532}," core22\n",[186,120495,120496,120498,120500,120502],{"class":188,"line":1236},[186,120497,26035],{"class":198},[186,120499,120415],{"class":532},[186,120501,27536],{"class":532},[186,120503,120504],{"class":532}," bare\n",[186,120506,120507,120509,120511,120513],{"class":188,"line":3096},[186,120508,26035],{"class":198},[186,120510,120415],{"class":532},[186,120512,27536],{"class":532},[186,120514,120515],{"class":532}," snapd\n",[169,120517,120518],{},[164,120519],{"alt":181,"src":120520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[169,120522,120523],{},"输入以下命令查看是否还有snap包",[176,120525,120527],{"className":118727,"code":120526,"language":118729,"meta":181,"style":181},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[183,120528,120529,120535,120539,120543,120547],{"__ignoreMap":181},[186,120530,120531,120533],{"class":188,"line":189},[186,120532,120383],{"class":198},[186,120534,120386],{"class":532},[186,120536,120537],{"class":188,"line":49},[186,120538,120235],{"class":192},[186,120540,120541],{"class":188,"line":219},[186,120542,120259],{"class":198},[186,120544,120545],{"class":188,"line":225},[186,120546,120268],{"class":192},[186,120548,120549],{"class":188,"line":242},[186,120550,120302],{"class":198},[169,120552,120553],{},[164,120554],{"alt":181,"src":120555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[29,120557,120559],{"id":120558},"_324-移除snap","3.2.4 移除snap",[169,120561,120562,120563,120568],{},"在删除掉",[948,120564,120567],{"href":120565,"rel":120566},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[952],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[176,120570,120572],{"className":118727,"code":120571,"language":118729,"meta":181,"style":181}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[183,120573,120574,120579,120592,120597,120608],{"__ignoreMap":181},[186,120575,120576],{"class":188,"line":189},[186,120577,120578],{"class":192}," #使用apt移除掉snap\n",[186,120580,120581,120583,120585,120587,120590],{"class":188,"line":49},[186,120582,26035],{"class":198},[186,120584,118748],{"class":532},[186,120586,119056],{"class":532},[186,120588,120589],{"class":206}," --purge",[186,120591,120515],{"class":532},[186,120593,120594],{"class":188,"line":219},[186,120595,120596],{"class":192},"#移除snapd的一些目录\n",[186,120598,120599,120601,120603,120605],{"class":188,"line":225},[186,120600,26035],{"class":198},[186,120602,119984],{"class":532},[186,120604,26784],{"class":206},[186,120606,120607],{"class":532}," \u002Fvar\u002Fcache\u002Fsnapd\n",[186,120609,120610,120612,120614,120616],{"class":188,"line":242},[186,120611,26035],{"class":198},[186,120613,119984],{"class":532},[186,120615,26784],{"class":206},[186,120617,120618],{"class":532}," ~\u002Fsnap\n",[169,120620,120621,120622,120625],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[183,120623,120624],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[29,120627,120629],{"id":120628},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[169,120631,120632],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[176,120634,120636],{"className":118727,"code":120635,"language":118729,"meta":181,"style":181},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[183,120637,120638],{"__ignoreMap":181},[186,120639,120640,120642,120644],{"class":188,"line":189},[186,120641,26035],{"class":198},[186,120643,120014],{"class":532},[186,120645,120646],{"class":532}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[169,120648,120649,120650,120653],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[183,120651,120652],{},":wq"," 回车",[176,120655,120657],{"className":118727,"code":120656,"language":118729,"meta":181,"style":181},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[183,120658,120659,120666,120680],{"__ignoreMap":181},[186,120660,120661,120664],{"class":188,"line":189},[186,120662,120663],{"class":198},"Package:",[186,120665,120515],{"class":532},[186,120667,120668,120671,120674,120677],{"class":188,"line":49},[186,120669,120670],{"class":198},"Pin:",[186,120672,120673],{"class":532}," release",[186,120675,120676],{"class":532}," a=",[186,120678,120679],{"class":206},"*\n",[186,120681,120682,120685],{"class":188,"line":219},[186,120683,120684],{"class":198},"Pin-Priority:",[186,120686,120687],{"class":206}," -10\n",[169,120689,120690],{},[164,120691],{"alt":181,"src":120692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[29,120694,120696],{"id":120695},"_326-测试是否成功","3.2.6 测试是否成功",[176,120698,120700],{"className":118727,"code":120699,"language":118729,"meta":181,"style":181},"sudo apt update\nsudo apt install firefox\n",[183,120701,120702,120710],{"__ignoreMap":181},[186,120703,120704,120706,120708],{"class":188,"line":189},[186,120705,26035],{"class":198},[186,120707,118748],{"class":532},[186,120709,27699],{"class":532},[186,120711,120712,120714,120716,120718],{"class":188,"line":49},[186,120713,26035],{"class":198},[186,120715,118748],{"class":532},[186,120717,25293],{"class":532},[186,120719,120436],{"class":532},[169,120721,120722],{},"这里提示snapd无法被安装，就证明成功了",[169,120724,120725],{},[164,120726],{"alt":181,"src":120727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[29,120729,120731],{"id":120730},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[169,120733,120734],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[169,120736,120737],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[169,120739,120740],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[176,120742,120744],{"className":118727,"code":120743,"language":118729,"meta":181,"style":181},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[183,120745,120746,120751,120760,120765,120773],{"__ignoreMap":181},[186,120747,120748],{"class":188,"line":189},[186,120749,120750],{"class":192},"# 添加Mozilla提供的源\n",[186,120752,120753,120755,120757],{"class":188,"line":49},[186,120754,26035],{"class":198},[186,120756,120275],{"class":532},[186,120758,120759],{"class":532}," ppa:mozillateam\u002Fppa\n",[186,120761,120762],{"class":188,"line":219},[186,120763,120764],{"class":192},"# 安装Firefox\n",[186,120766,120767,120769,120771],{"class":188,"line":225},[186,120768,26035],{"class":198},[186,120770,118748],{"class":532},[186,120772,27699],{"class":532},[186,120774,120775,120777,120779,120781],{"class":188,"line":242},[186,120776,26035],{"class":198},[186,120778,118748],{"class":532},[186,120780,25293],{"class":532},[186,120782,120436],{"class":532},[29,120784,120786],{"id":120785},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[169,120788,120789],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[169,120791,120792],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[176,120794,120796],{"className":118727,"code":120795,"language":118729,"meta":181,"style":181},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[183,120797,120798,120803,120813,120821,120825],{"__ignoreMap":181},[186,120799,120800],{"class":188,"line":189},[186,120801,120802],{"class":192},"#删掉禁止安装snap的配置文件\n",[186,120804,120805,120807,120809,120811],{"class":188,"line":49},[186,120806,26035],{"class":198},[186,120808,119984],{"class":532},[186,120810,26784],{"class":206},[186,120812,120646],{"class":532},[186,120814,120815,120817,120819],{"class":188,"line":219},[186,120816,26035],{"class":198},[186,120818,118748],{"class":532},[186,120820,27699],{"class":532},[186,120822,120823],{"class":188,"line":225},[186,120824,3867],{"emptyLinePlaceholder":1551},[186,120826,120827,120829,120831],{"class":188,"line":242},[186,120828,26035],{"class":198},[186,120830,118748],{"class":532},[186,120832,120833],{"class":532}," dist-update\n",[14,120835,120837],{"id":120836},"_33-中文输入法","3.3 中文输入法",[29,120839,120841],{"id":120840},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[169,120843,120844],{},"官网下载搜狗输入法",[169,120846,120847],{},[164,120848],{"alt":181,"src":120849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[169,120851,120852],{},[164,120853],{"alt":181,"src":120854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[169,120856,120857],{},"打开终端输入如下",[176,120859,120861],{"className":118727,"code":120860,"language":118729,"meta":181,"style":181},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[183,120862,120863,120870],{"__ignoreMap":181},[186,120864,120865,120867],{"class":188,"line":189},[186,120866,102707],{"class":206},[186,120868,120869],{"class":532}," ~\u002FDownloads\u002F\n",[186,120871,120872,120874,120876,120878],{"class":188,"line":49},[186,120873,26035],{"class":198},[186,120875,118748],{"class":532},[186,120877,25293],{"class":532},[186,120879,120880],{"class":532}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[169,120882,120883],{},"打开Fcitx",[169,120885,120886,120889],{},[164,120887],{"alt":181,"src":120888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[164,120890],{"alt":181,"src":120891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[169,120893,120894],{},[164,120895],{"alt":181,"src":120896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[169,120898,120899],{},"添加搜狗输入法",[169,120901,120902],{},[164,120903],{"alt":181,"src":120904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[169,120906,120907],{},[164,120908],{"alt":181,"src":120909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[169,120911,120912],{},"将搜狗输入法设置为唯一输入法",[169,120914,120915],{},[164,120916],{"alt":181,"src":120917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[29,120919,120921],{"id":120920},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[34,120923,120924],{},[22,120925,120926],{},"卸载旧输入法",[176,120928,120930],{"className":119954,"code":120929,"language":119956,"meta":181,"style":181},"sudo apt purge fcitx* ibus*\n",[183,120931,120932],{"__ignoreMap":181},[186,120933,120934,120936,120938,120940,120943,120945,120948],{"class":188,"line":189},[186,120935,26035],{"class":198},[186,120937,118748],{"class":532},[186,120939,119089],{"class":532},[186,120941,120942],{"class":532}," fcitx",[186,120944,2065],{"class":206},[186,120946,120947],{"class":532}," ibus",[186,120949,120679],{"class":206},[34,120951,120952],{"start":49},[22,120953,120954],{},"安装Fcitx5",[176,120956,120958],{"className":118727,"code":120957,"language":118729,"meta":181,"style":181},"# 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",[183,120959,120960,120965,120979,120983,120988,120997,121005],{"__ignoreMap":181},[186,120961,120962],{"class":188,"line":189},[186,120963,120964],{"class":192},"# Ubuntu22.04及以上、Debian12及以上\n",[186,120966,120967,120969,120971,120973,120976],{"class":188,"line":49},[186,120968,26035],{"class":198},[186,120970,118748],{"class":532},[186,120972,25293],{"class":532},[186,120974,120975],{"class":532}," fcitx5",[186,120977,120978],{"class":532}," fcitx5-chinese-addons\n",[186,120980,120981],{"class":188,"line":219},[186,120982,3867],{"emptyLinePlaceholder":1551},[186,120984,120985],{"class":188,"line":225},[186,120986,120987],{"class":192},"# Ubuntu20.04\n",[186,120989,120990,120992,120994],{"class":188,"line":242},[186,120991,26035],{"class":198},[186,120993,120275],{"class":532},[186,120995,120996],{"class":532}," ppa:zhsj\u002Ffcitx5\n",[186,120998,120999,121001,121003],{"class":188,"line":248},[186,121000,26035],{"class":198},[186,121002,118748],{"class":532},[186,121004,27699],{"class":532},[186,121006,121007,121009,121011,121013,121015],{"class":188,"line":265},[186,121008,26035],{"class":198},[186,121010,118748],{"class":532},[186,121012,25293],{"class":532},[186,121014,120975],{"class":532},[186,121016,120978],{"class":532},[34,121018,121019,121022],{"start":219},[22,121020,121021],{},"Reboot System",[22,121023,121024],{},"启动Fcitx5",[169,121026,121027],{},[164,121028],{"alt":181,"src":121029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[34,121031,121032],{"start":242},[22,121033,121034],{},"修改一些设置",[169,121036,121037],{},"将Pinyin和Keyboard - English US加入到左边。",[169,121039,121040],{},[164,121041],{"alt":181,"src":121042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[169,121044,121045],{},"添加快捷键以便于更好切换中英文",[169,121047,121048],{},[164,121049],{"alt":181,"src":121050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[34,121052,121053],{"start":248},[22,121054,121055],{},"重启",[176,121057,121059],{"className":119954,"code":121058,"language":119956,"meta":181,"style":181},"sudo shutdown -r now\n",[183,121060,121061],{"__ignoreMap":181},[186,121062,121063,121065,121068,121071],{"class":188,"line":189},[186,121064,26035],{"class":198},[186,121066,121067],{"class":532}," shutdown",[186,121069,121070],{"class":206}," -r",[186,121072,121073],{"class":532}," now\n",[34,121075,121076],{"start":265},[22,121077,121078],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[169,121080,121081],{},[948,121082,121083],{"href":121083,"rel":121084},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[952],[34,121086,121087],{"start":271},[22,121088,121089],{},"再重启",[176,121091,121092],{"className":119954,"code":121058,"language":119956,"meta":181,"style":181},[183,121093,121094],{"__ignoreMap":181},[186,121095,121096,121098,121100,121102],{"class":188,"line":189},[186,121097,26035],{"class":198},[186,121099,121067],{"class":532},[186,121101,121070],{"class":206},[186,121103,121073],{"class":532},[14,121105,121107],{"id":121106},"_34-pip3源替换","3.4 pip3源替换",[169,121109,121110],{},"非Debian系发行版需要做。",[169,121112,121113],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[169,121115,121116],{},"使用dnf的系统也可能不用做。",[176,121118,121120],{"className":118727,"code":121119,"language":118729,"meta":181,"style":181},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[183,121121,121122,121127,121134,121139,121144],{"__ignoreMap":181},[186,121123,121124],{"class":188,"line":189},[186,121125,121126],{"class":192},"# 检查是否已安装 pip\n",[186,121128,121129,121132],{"class":188,"line":49},[186,121130,121131],{"class":198},"pip3",[186,121133,27750],{"class":206},[186,121135,121136],{"class":188,"line":219},[186,121137,121138],{"class":192},"# 如果未安装，先安装 pip3（见下方）\n",[186,121140,121141],{"class":188,"line":225},[186,121142,121143],{"class":192},"# 配置 pip 使用清华源\n",[186,121145,121146,121148,121151,121154,121157],{"class":188,"line":242},[186,121147,121131],{"class":198},[186,121149,121150],{"class":532}," config",[186,121152,121153],{"class":532}," set",[186,121155,121156],{"class":532}," global.index-url",[186,121158,121159],{"class":532}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[169,121161,121162],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[169,121164,121165],{},[164,121166],{"alt":181,"src":121167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[176,121169,121171],{"className":118727,"code":121170,"language":118729,"meta":181,"style":181},"#安装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",[183,121172,121173,121178,121186,121197,121201,121206,121225,121229,121234,121246,121250,121255],{"__ignoreMap":181},[186,121174,121175],{"class":188,"line":189},[186,121176,121177],{"class":192},"#安装pip3\n",[186,121179,121180,121182,121184],{"class":188,"line":49},[186,121181,26035],{"class":198},[186,121183,118748],{"class":532},[186,121185,27699],{"class":532},[186,121187,121188,121190,121192,121194],{"class":188,"line":219},[186,121189,26035],{"class":198},[186,121191,27533],{"class":532},[186,121193,25293],{"class":532},[186,121195,121196],{"class":532}," python3-pip\n",[186,121198,121199],{"class":188,"line":225},[186,121200,3867],{"emptyLinePlaceholder":1551},[186,121202,121203],{"class":188,"line":242},[186,121204,121205],{"class":192},"#更新pip3\n",[186,121207,121208,121210,121212,121214,121216,121218,121221,121223],{"class":188,"line":248},[186,121209,102310],{"class":198},[186,121211,102313],{"class":206},[186,121213,102336],{"class":532},[186,121215,25293],{"class":532},[186,121217,27887],{"class":206},[186,121219,121220],{"class":532}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[186,121222,102341],{"class":206},[186,121224,102344],{"class":532},[186,121226,121227],{"class":188,"line":265},[186,121228,3867],{"emptyLinePlaceholder":1551},[186,121230,121231],{"class":188,"line":271},[186,121232,121233],{"class":192},"#设置pip源为清华源\n",[186,121235,121236,121238,121240,121242,121244],{"class":188,"line":288},[186,121237,121131],{"class":198},[186,121239,121150],{"class":532},[186,121241,121153],{"class":532},[186,121243,121156],{"class":532},[186,121245,121159],{"class":532},[186,121247,121248],{"class":188,"line":294},[186,121249,3867],{"emptyLinePlaceholder":1551},[186,121251,121252],{"class":188,"line":1212},[186,121253,121254],{"class":192},"#测试\n",[186,121256,121257,121259,121261,121263,121265,121267],{"class":188,"line":1223},[186,121258,102310],{"class":198},[186,121260,102313],{"class":206},[186,121262,102336],{"class":532},[186,121264,25293],{"class":532},[186,121266,102341],{"class":206},[186,121268,102344],{"class":532},[169,121270,121271],{},"成功的话，会看到Looking后面是tsinghua字样。",[169,121273,121274],{},[164,121275],{"alt":181,"src":121276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121278,121280],{"id":121279},"_35-显卡驱动安装","3.5 显卡驱动安装",[29,121282,121284],{"id":121283},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[176,121286,121288],{"className":119954,"code":121287,"language":119956,"meta":181,"style":181},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[183,121289,121290,121295,121310,121315],{"__ignoreMap":181},[186,121291,121292],{"class":188,"line":189},[186,121293,121294],{"class":192},"# 如果是使用apt安装的驱动\n",[186,121296,121297,121299,121301,121303,121305,121308],{"class":188,"line":49},[186,121298,26035],{"class":198},[186,121300,27533],{"class":532},[186,121302,27536],{"class":532},[186,121304,120589],{"class":206},[186,121306,121307],{"class":532}," nvidia",[186,121309,120679],{"class":206},[186,121311,121312],{"class":188,"line":219},[186,121313,121314],{"class":192},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[186,121316,121317,121319],{"class":188,"line":225},[186,121318,26035],{"class":198},[186,121320,121321],{"class":532}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[29,121323,121325],{"id":121324},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23459,121327,121329],{"id":121328},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24371,121331,121333],{"id":121332},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[176,121335,121337],{"className":119954,"code":121336,"language":119956,"meta":181,"style":181},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[183,121338,121339,121344,121355,121360,121370,121375],{"__ignoreMap":181},[186,121340,121341],{"class":188,"line":189},[186,121342,121343],{"class":192},"# 安装英伟达驱动\n",[186,121345,121346,121348,121350,121352],{"class":188,"line":49},[186,121347,26035],{"class":198},[186,121349,118748],{"class":532},[186,121351,25293],{"class":532},[186,121353,121354],{"class":532}," nvidia-driver-版本号\n",[186,121356,121357],{"class":188,"line":219},[186,121358,121359],{"class":192},"# 重启 \n",[186,121361,121362,121364,121366,121368],{"class":188,"line":225},[186,121363,26035],{"class":198},[186,121365,121067],{"class":532},[186,121367,121070],{"class":206},[186,121369,121073],{"class":532},[186,121371,121372],{"class":188,"line":242},[186,121373,121374],{"class":192},"# 检查驱动是否安装成功\n",[186,121376,121377],{"class":188,"line":248},[186,121378,121379],{"class":198},"nvidia-smi\n",[24371,121381,121383],{"id":121382},"_35212-debian","3.5.2.1.2 Debian",[176,121385,121387],{"className":119954,"code":121386,"language":119956,"meta":181,"style":181},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[183,121388,121389,121393,121407,121411,121421,121425],{"__ignoreMap":181},[186,121390,121391],{"class":188,"line":189},[186,121392,121343],{"class":192},[186,121394,121395,121397,121399,121401,121404],{"class":188,"line":49},[186,121396,26035],{"class":198},[186,121398,118748],{"class":532},[186,121400,25293],{"class":532},[186,121402,121403],{"class":532}," nvidia-driver",[186,121405,121406],{"class":532}," nvidia-settings\n",[186,121408,121409],{"class":188,"line":219},[186,121410,121359],{"class":192},[186,121412,121413,121415,121417,121419],{"class":188,"line":225},[186,121414,26035],{"class":198},[186,121416,121067],{"class":532},[186,121418,121070],{"class":206},[186,121420,121073],{"class":532},[186,121422,121423],{"class":188,"line":242},[186,121424,121374],{"class":192},[186,121426,121427],{"class":188,"line":248},[186,121428,121379],{"class":198},[23459,121430,121432],{"id":121431},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[169,121434,121435,121436,121439],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[54,121437,121438],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[169,121441,121442,121443],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25014,121444,121445],{},[54,121446,121447],{},"（也可以不禁用桌面环境，直接进行下一步。）",[176,121449,121451],{"className":119954,"code":121450,"language":119956,"meta":181,"style":181},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[183,121452,121453,121458,121468,121473,121486,121491],{"__ignoreMap":181},[186,121454,121455],{"class":188,"line":189},[186,121456,121457],{"class":192},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[186,121459,121460,121462,121465],{"class":188,"line":49},[186,121461,26035],{"class":198},[186,121463,121464],{"class":532}," telinit",[186,121466,121467],{"class":206}," 3\n",[186,121469,121470],{"class":188,"line":219},[186,121471,121472],{"class":192},"# ubuntu 使用下方命令\n",[186,121474,121475,121477,121480,121483],{"class":188,"line":225},[186,121476,26035],{"class":198},[186,121478,121479],{"class":532}," service",[186,121481,121482],{"class":532}," lightdm",[186,121484,121485],{"class":532}," stop\n",[186,121487,121488],{"class":188,"line":242},[186,121489,121490],{"class":192},"# Fedora 使用下方命令\n",[186,121492,121493,121495,121497,121500],{"class":188,"line":248},[186,121494,26035],{"class":198},[186,121496,27970],{"class":532},[186,121498,121499],{"class":532}," isolate",[186,121501,121502],{"class":532}," multi-user.target\n",[169,121504,121505],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[176,121507,121509],{"className":119954,"code":121508,"language":119956,"meta":181,"style":181},"# 编译环境+准备工作\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",[183,121510,121511,121516,121527,121532,121539,121544,121556,121561,121568,121573],{"__ignoreMap":181},[186,121512,121513],{"class":188,"line":189},[186,121514,121515],{"class":192},"# 编译环境+准备工作\n",[186,121517,121518,121520,121522,121524],{"class":188,"line":49},[186,121519,26035],{"class":198},[186,121521,118748],{"class":532},[186,121523,25293],{"class":532},[186,121525,121526],{"class":532}," build-essential\n",[186,121528,121529],{"class":188,"line":219},[186,121530,121531],{"class":192},"# 进入到.run目录中\n",[186,121533,121534,121536],{"class":188,"line":225},[186,121535,102707],{"class":206},[186,121537,121538],{"class":532}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[186,121540,121541],{"class":188,"line":242},[186,121542,121543],{"class":192},"# 给驱动文件增加可执行权限：\n",[186,121545,121546,121548,121550,121553],{"class":188,"line":248},[186,121547,26035],{"class":198},[186,121549,26038],{"class":532},[186,121551,121552],{"class":532}," a+x",[186,121554,121555],{"class":532}," NVIDIA-Linux-x86_64-550.107.02.run\n",[186,121557,121558],{"class":188,"line":265},[186,121559,121560],{"class":192},"# 然后执行安装：\n",[186,121562,121563,121565],{"class":188,"line":271},[186,121564,26035],{"class":198},[186,121566,121567],{"class":532}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[186,121569,121570],{"class":188,"line":288},[186,121571,121572],{"class":192},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[186,121574,121575,121577,121580],{"class":188,"line":294},[186,121576,26035],{"class":198},[186,121578,121579],{"class":532}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[186,121581,121582],{"class":206},"  --no-opengl-files\n",[169,121584,121585],{},"安装完毕重启即可",[176,121587,121589],{"className":119954,"code":121588,"language":119956,"meta":181,"style":181},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[183,121590,121591,121595,121601,121605],{"__ignoreMap":181},[186,121592,121593],{"class":188,"line":189},[186,121594,121359],{"class":192},[186,121596,121597,121599],{"class":188,"line":49},[186,121598,26035],{"class":198},[186,121600,28104],{"class":532},[186,121602,121603],{"class":188,"line":219},[186,121604,121374],{"class":192},[186,121606,121607],{"class":188,"line":225},[186,121608,121379],{"class":198},[29,121610,121612],{"id":121611},"_353-安装cuda","3.5.3 安装CUDA",[169,121614,121615],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[169,121617,121618],{},[164,121619],{"alt":181,"src":121620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[34,121622,121623],{},[22,121624,121625],{},"先查看显卡驱动所支持的最高CUDA版本",[176,121627,121628],{"className":119954,"code":121379,"language":119956,"meta":181,"style":181},[183,121629,121630],{"__ignoreMap":181},[186,121631,121632],{"class":188,"line":189},[186,121633,121379],{"class":198},[169,121635,121636],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[169,121638,121639],{},[164,121640],{"alt":181,"src":121641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[34,121643,121644],{"start":49},[22,121645,121646],{},"下载CUDA并安装CUDA",[169,121648,119733,121649],{},[948,121650,119736],{"href":119736,"rel":121651},[952],[169,121653,121654],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[169,121656,121657],{},[164,121658],{"alt":181,"src":121659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[169,121661,121662,121663,121668],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[948,121664,121667],{"href":121665,"rel":121666},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[952],"Vinci机器人队单片机教程","）",[169,121670,121671],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[169,121673,121674],{},[164,121675],{"alt":181,"src":121676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[169,121678,121679],{},"将最下方框框里的命令敲入终端",[176,121681,121683],{"className":119954,"code":121682,"language":119956,"meta":181,"style":181},"# 在当前文件夹下创建一个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",[183,121684,121685,121690,121699,121704,121711,121716,121724,121729,121740,121745],{"__ignoreMap":181},[186,121686,121687],{"class":188,"line":189},[186,121688,121689],{"class":192},"# 在当前文件夹下创建一个ttt的子文件夹\n",[186,121691,121692,121694,121696],{"class":188,"line":49},[186,121693,102697],{"class":198},[186,121695,30671],{"class":206},[186,121697,121698],{"class":532}," .\u002Fttt\n",[186,121700,121701],{"class":188,"line":219},[186,121702,121703],{"class":192},"# 进入ttt文件夹\n",[186,121705,121706,121708],{"class":188,"line":225},[186,121707,102707],{"class":206},[186,121709,121710],{"class":532}," ttt\n",[186,121712,121713],{"class":188,"line":242},[186,121714,121715],{"class":192},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[186,121717,121718,121721],{"class":188,"line":248},[186,121719,121720],{"class":198},"wget",[186,121722,121723],{"class":532}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[186,121725,121726],{"class":188,"line":265},[186,121727,121728],{"class":192},"# 给予权限\n",[186,121730,121731,121733,121735,121737],{"class":188,"line":271},[186,121732,26035],{"class":198},[186,121734,26038],{"class":532},[186,121736,121552],{"class":532},[186,121738,121739],{"class":532}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[186,121741,121742],{"class":188,"line":288},[186,121743,121744],{"class":192},"# 运行脚本\n",[186,121746,121747,121749],{"class":188,"line":294},[186,121748,26035],{"class":198},[186,121750,121739],{"class":532},[169,121752,121753],{},[164,121754],{"alt":181,"src":121755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[169,121757,121758],{},"正在安装中：",[169,121760,121761],{},[164,121762],{"alt":181,"src":121763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[169,121765,121766],{},"输入accept接受即可",[169,121768,121769],{},[164,121770],{"alt":181,"src":121771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[169,121773,121774],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[169,121776,121777],{},[164,121778],{"alt":181,"src":121779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[169,121781,121782],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[169,121784,121785],{},[164,121786],{"alt":181,"src":121787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[34,121789,121790],{"start":219},[22,121791,121792],{},"配置环境",[169,121794,121795],{},"根据上方确认一下路径，比如我上面红色框起来的为",[176,121797,121799],{"className":119954,"code":121798,"language":119956,"meta":181,"style":181},"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",[183,121800,121801,121817,121832],{"__ignoreMap":181},[186,121802,121803,121806,121809,121812,121815],{"class":188,"line":189},[186,121804,121805],{"class":198},"Please",[186,121807,121808],{"class":532}," make",[186,121810,121811],{"class":532}," sure",[186,121813,121814],{"class":532}," that",[186,121816,4141],{"class":202},[186,121818,121819,121821,121824,121827,121830],{"class":188,"line":49},[186,121820,53718],{"class":198},[186,121822,121823],{"class":532},"   PATH",[186,121825,121826],{"class":532}," includes",[186,121828,121829],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[186,121831,4141],{"class":202},[186,121833,121834,121836,121839,121841,121844,121847,121849,121852,121855,121858,121861,121863,121866,121868],{"class":188,"line":219},[186,121835,53718],{"class":198},[186,121837,121838],{"class":532},"   LD_LIBRARY_PATH",[186,121840,121826],{"class":532},[186,121842,121843],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[186,121845,121846],{"class":532}," or,",[186,121848,6673],{"class":532},[186,121850,121851],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[186,121853,121854],{"class":532}," to",[186,121856,121857],{"class":532}," \u002Fetc\u002Fld.so.conf",[186,121859,121860],{"class":532}," and",[186,121862,28687],{"class":532},[186,121864,121865],{"class":532}," ldconfig",[186,121867,66041],{"class":532},[186,121869,121870],{"class":532}," root\n",[169,121872,121873],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[176,121875,121877],{"className":119954,"code":121876,"language":119956,"meta":181,"style":181},"which nvcc\n",[183,121878,121879],{"__ignoreMap":181},[186,121880,121881,121884],{"class":188,"line":189},[186,121882,121883],{"class":206},"which",[186,121885,121886],{"class":532}," nvcc\n",[169,121888,121889],{},[164,121890],{"alt":181,"src":121891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[169,121893,121894],{},"所以我进行以下操作：",[176,121896,121898],{"className":119954,"code":121897,"language":119956,"meta":181,"style":181},"sudo vim ~\u002F.bashrc\n",[183,121899,121900],{"__ignoreMap":181},[186,121901,121902,121904,121906],{"class":188,"line":189},[186,121903,26035],{"class":198},[186,121905,120014],{"class":532},[186,121907,121908],{"class":532}," ~\u002F.bashrc\n",[169,121910,121911],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[176,121913,121915],{"className":119954,"code":121914,"language":119956,"meta":181,"style":181},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[183,121916,121917,121929],{"__ignoreMap":181},[186,121918,121919,121921,121924,121926],{"class":188,"line":189},[186,121920,26501],{"class":669},[186,121922,121923],{"class":202}," PATH",[186,121925,529],{"class":669},[186,121927,121928],{"class":202},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[186,121930,121931,121933,121936,121938],{"class":188,"line":49},[186,121932,26501],{"class":669},[186,121934,121935],{"class":202}," LD_LIBRARY_PATH",[186,121937,529],{"class":669},[186,121939,121940],{"class":202},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[169,121942,121943],{},[164,121944],{"alt":181,"src":121945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[176,121947,121949],{"className":119954,"code":121948,"language":119956,"meta":181,"style":181},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[183,121950,121951,121956,121962,121967],{"__ignoreMap":181},[186,121952,121953],{"class":188,"line":189},[186,121954,121955],{"class":192},"# 刷新当前终端的环境变量\n",[186,121957,121958,121960],{"class":188,"line":49},[186,121959,102324],{"class":206},[186,121961,121908],{"class":532},[186,121963,121964],{"class":188,"line":219},[186,121965,121966],{"class":192},"# 验证CUDA是否安装成功\n",[186,121968,121969,121972],{"class":188,"line":225},[186,121970,121971],{"class":198},"nvcc",[186,121973,121974],{"class":206}," -V\n",[169,121976,121977],{},"出现下图这种则安装成功。",[169,121979,121980],{},[164,121981],{"alt":181,"src":121982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[29,121984,121986],{"id":121985},"_354-安装cudnn","3.5.4 安装cuDNN",[34,121988,121989],{},[22,121990,121991],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[169,121993,121994,121995,122000],{},"前往 NVIDIA cuDNN 下载页面：",[948,121996,121999],{"href":121997,"rel":121998},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[952],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[169,122002,122003],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[169,122005,122006],{},[164,122007],{"alt":181,"src":122008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[169,122010,122011],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[169,122013,122014],{},[164,122015],{"alt":181,"src":122016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[169,122018,122019],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[169,122021,122022],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[169,122024,122025],{},[54,122026,122027],{},"我这里选择所有Linux X86_64最通用的办法：",[169,122029,122030],{},"下载好的：",[169,122032,122033],{},[164,122034],{"alt":181,"src":122035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[34,122037,122038],{"start":49},[22,122039,122040],{},"安装cuDNN",[169,122042,122043],{},"找到该文件所在目录，并打开终端，cd到该目录。",[169,122045,122046],{},[164,122047],{"alt":181,"src":122048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[169,122050,122051],{},"解压文件，并复制到对应位置完成安装",[176,122053,122055],{"className":119954,"code":122054,"language":119956,"meta":181,"style":181},"# 解压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",[183,122056,122057,122062,122073,122078,122085,122090,122106,122120,122125,122136,122145,122149,122165],{"__ignoreMap":181},[186,122058,122059],{"class":188,"line":189},[186,122060,122061],{"class":192},"# 解压cuDNN文件\n",[186,122063,122064,122067,122070],{"class":188,"line":49},[186,122065,122066],{"class":198},"tar",[186,122068,122069],{"class":206}," -xvf",[186,122071,122072],{"class":532}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[186,122074,122075],{"class":188,"line":219},[186,122076,122077],{"class":192},"# cd进文件夹\n",[186,122079,122080,122082],{"class":188,"line":225},[186,122081,102707],{"class":206},[186,122083,122084],{"class":532}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[186,122086,122087],{"class":188,"line":242},[186,122088,122089],{"class":192},"# 复制cuDNN文件到CUDA目录\n",[186,122091,122092,122094,122096,122099,122101,122104],{"class":188,"line":248},[186,122093,26035],{"class":198},[186,122095,29317],{"class":532},[186,122097,122098],{"class":532}," include\u002Fcudnn",[186,122100,2065],{"class":206},[186,122102,122103],{"class":532},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[186,122105,4141],{"class":202},[186,122107,122108,122110,122112,122115,122117],{"class":188,"line":265},[186,122109,26035],{"class":198},[186,122111,29317],{"class":532},[186,122113,122114],{"class":532}," lib\u002Flibcudnn",[186,122116,2065],{"class":206},[186,122118,122119],{"class":532},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[186,122121,122122],{"class":188,"line":271},[186,122123,122124],{"class":192},"# 对比一下有没有缺文件\n",[186,122126,122127,122129,122132,122134],{"class":188,"line":288},[186,122128,28218],{"class":198},[186,122130,122131],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[186,122133,2065],{"class":206},[186,122135,4141],{"class":202},[186,122137,122138,122140,122143],{"class":188,"line":294},[186,122139,28218],{"class":198},[186,122141,122142],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[186,122144,120679],{"class":206},[186,122146,122147],{"class":188,"line":1212},[186,122148,121728],{"class":192},[186,122150,122151,122153,122155,122158,122160,122162],{"class":188,"line":1223},[186,122152,26035],{"class":198},[186,122154,26038],{"class":532},[186,122156,122157],{"class":532}," a+r",[186,122159,122131],{"class":532},[186,122161,2065],{"class":206},[186,122163,122164],{"class":202},"   \n",[186,122166,122167,122169,122171,122173,122175],{"class":188,"line":1236},[186,122168,26035],{"class":198},[186,122170,26038],{"class":532},[186,122172,122157],{"class":532},[186,122174,122142],{"class":532},[186,122176,120679],{"class":206},[34,122178,122179],{"start":219},[22,122180,122181],{},"检查是否安装成功",[176,122183,122185],{"className":119954,"code":122184,"language":119956,"meta":181,"style":181},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[183,122186,122187,122192],{"__ignoreMap":181},[186,122188,122189],{"class":188,"line":189},[186,122190,122191],{"class":192},"# 检查cuDNN版本命令\n",[186,122193,122194,122197,122200,122202,122204,122207,122210],{"class":188,"line":49},[186,122195,122196],{"class":198},"cat",[186,122198,122199],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[186,122201,26568],{"class":669},[186,122203,31691],{"class":198},[186,122205,122206],{"class":532}," CUDNN_MAJOR",[186,122208,122209],{"class":206}," -A",[186,122211,49177],{"class":206},[169,122213,122214],{},"出现下图这样的就是安装成功了",[169,122216,122217],{},[164,122218],{"alt":181,"src":122219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[34,122221,122222],{"start":225},[22,122223,122224],{},"软链接(一般不需要)",[176,122226,122228],{"className":119954,"code":122227,"language":119956,"meta":181,"style":181},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[183,122229,122230,122235],{"__ignoreMap":181},[186,122231,122232],{"class":188,"line":189},[186,122233,122234],{"class":192},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[186,122236,122237,122239],{"class":188,"line":49},[186,122238,26035],{"class":198},[186,122240,122241],{"class":532}," ldconfig\n",[169,122243,122244],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[176,122246,122251],{"className":122247,"code":122248,"language":122249,"meta":122250,"style":181},"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",[183,122252,122253,122258,122263,122268,122273,122278,122283],{"__ignoreMap":181},[186,122254,122255],{"class":188,"line":189},[186,122256,122257],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[186,122259,122260],{"class":188,"line":49},[186,122261,122262],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[186,122264,122265],{"class":188,"line":219},[186,122266,122267],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[186,122269,122270],{"class":188,"line":225},[186,122271,122272],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[186,122274,122275],{"class":188,"line":242},[186,122276,122277],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[186,122279,122280],{"class":188,"line":248},[186,122281,122282],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[186,122284,122285],{"class":188,"line":265},[186,122286,122287],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[169,122289,122290],{},"运行下方的命令",[176,122292,122294],{"className":119954,"code":122293,"language":119956,"meta":181,"style":181},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[183,122295,122296,122301,122308,122313],{"__ignoreMap":181},[186,122297,122298],{"class":188,"line":189},[186,122299,122300],{"class":192},"# cd进入CUDA路径\n",[186,122302,122303,122305],{"class":188,"line":49},[186,122304,102707],{"class":206},[186,122306,122307],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[186,122309,122310],{"class":188,"line":219},[186,122311,122312],{"class":192}," # 查看本路径下的需要软链接的文件名\n",[186,122314,122315],{"class":188,"line":225},[186,122316,122317],{"class":198}," ls\n",[169,122319,122320],{},[164,122321],{"alt":181,"src":122322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[169,122324,122325,122326,19871,122329,19871,122332,122335],{},"如上图，我需要将",[183,122327,122328],{},"libcudnn_xxx_xxxxx.so.8.9.7",[183,122330,122331],{},"libcudnn_xxx_xxxxx.so.8",[183,122333,122334],{},"libcudnn_xxx_xxxxx.so","软链接",[176,122337,122339],{"className":119954,"code":122338,"language":119956,"meta":181,"style":181},"# 创建符号链接。对于每个 .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",[183,122340,122341,122346,122362,122376,122390,122404,122418,122432,122446,122451,122457,122462],{"__ignoreMap":181},[186,122342,122343],{"class":188,"line":189},[186,122344,122345],{"class":192},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[186,122347,122348,122350,122353,122356,122359],{"class":188,"line":49},[186,122349,26035],{"class":198},[186,122351,122352],{"class":532}," ln",[186,122354,122355],{"class":206}," -sf",[186,122357,122358],{"class":532}," libcudnn_cnn_train.so.8.9.7",[186,122360,122361],{"class":532}," libcudnn_cnn_train.so.8\n",[186,122363,122364,122366,122368,122370,122373],{"class":188,"line":219},[186,122365,26035],{"class":198},[186,122367,122352],{"class":532},[186,122369,122355],{"class":206},[186,122371,122372],{"class":532}," libcudnn_adv_infer.so.8.9.7",[186,122374,122375],{"class":532}," libcudnn_adv_infer.so.8\n",[186,122377,122378,122380,122382,122384,122387],{"class":188,"line":225},[186,122379,26035],{"class":198},[186,122381,122352],{"class":532},[186,122383,122355],{"class":206},[186,122385,122386],{"class":532}," libcudnn_adv_train.so.8.9.7",[186,122388,122389],{"class":532}," libcudnn_adv_train.so.8\n",[186,122391,122392,122394,122396,122398,122401],{"class":188,"line":242},[186,122393,26035],{"class":198},[186,122395,122352],{"class":532},[186,122397,122355],{"class":206},[186,122399,122400],{"class":532}," libcudnn_cnn_infer.so.8.9.7",[186,122402,122403],{"class":532}," libcudnn_cnn_infer.so.8\n",[186,122405,122406,122408,122410,122412,122415],{"class":188,"line":248},[186,122407,26035],{"class":198},[186,122409,122352],{"class":532},[186,122411,122355],{"class":206},[186,122413,122414],{"class":532}," libcudnn.so.8.9.7",[186,122416,122417],{"class":532}," libcudnn.so.8\n",[186,122419,122420,122422,122424,122426,122429],{"class":188,"line":265},[186,122421,26035],{"class":198},[186,122423,122352],{"class":532},[186,122425,122355],{"class":206},[186,122427,122428],{"class":532}," libcudnn_ops_infer.so.8.9.7",[186,122430,122431],{"class":532}," libcudnn_ops_infer.so.8\n",[186,122433,122434,122436,122438,122440,122443],{"class":188,"line":271},[186,122435,26035],{"class":198},[186,122437,122352],{"class":532},[186,122439,122355],{"class":206},[186,122441,122442],{"class":532}," libcudnn_ops_train.so.8.9.7",[186,122444,122445],{"class":532}," libcudnn_ops_train.so.8\n",[186,122447,122448],{"class":188,"line":288},[186,122449,122450],{"class":192},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[186,122452,122453,122455],{"class":188,"line":294},[186,122454,26035],{"class":198},[186,122456,122241],{"class":532},[186,122458,122459],{"class":188,"line":1212},[186,122460,122461],{"class":192},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[186,122463,122464,122466,122469,122472,122474,122477],{"class":188,"line":1223},[186,122465,28218],{"class":198},[186,122467,122468],{"class":206}," -l",[186,122470,122471],{"class":532}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[186,122473,2065],{"class":206},[186,122475,122476],{"class":532},".so",[186,122478,120679],{"class":206},[29,122480,122482],{"id":122481},"_355-常见问题","3.5.5 常见问题",[34,122484,122485],{},[22,122486,122487],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[176,122489,122491],{"className":119954,"code":122490,"language":119956,"meta":181,"style":181},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[183,122492,122493],{"__ignoreMap":181},[186,122494,122495,122497,122499],{"class":188,"line":189},[186,122496,26035],{"class":198},[186,122498,120014],{"class":532},[186,122500,122501],{"class":532}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[169,122503,122504],{},"blacklist-nouveau.conf文件内容如下：",[176,122506,122508],{"className":119954,"code":122507,"language":119956,"meta":181,"style":181},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[183,122509,122510,122518,122525,122537,122547],{"__ignoreMap":181},[186,122511,122512,122515],{"class":188,"line":189},[186,122513,122514],{"class":198},"blacklist",[186,122516,122517],{"class":532}," nouveau\n",[186,122519,122520,122522],{"class":188,"line":49},[186,122521,122514],{"class":198},[186,122523,122524],{"class":532}," lbm-nouveau\n",[186,122526,122527,122529,122532,122535],{"class":188,"line":219},[186,122528,117361],{"class":198},[186,122530,122531],{"class":532}," nouveau",[186,122533,122534],{"class":532}," modeset=",[186,122536,4551],{"class":206},[186,122538,122539,122542,122544],{"class":188,"line":225},[186,122540,122541],{"class":206},"alias",[186,122543,122531],{"class":532},[186,122545,122546],{"class":532}," off\n",[186,122548,122549,122551,122554],{"class":188,"line":242},[186,122550,122541],{"class":206},[186,122552,122553],{"class":532}," lbm-nouveau",[186,122555,122546],{"class":532},[169,122557,122558],{},"接着运行下方命令",[176,122560,122562],{"className":119954,"code":122561,"language":119956,"meta":181,"style":181},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[183,122563,122564,122574,122579],{"__ignoreMap":181},[186,122565,122566,122568,122571],{"class":188,"line":189},[186,122567,26035],{"class":198},[186,122569,122570],{"class":532}," update-initramfs",[186,122572,122573],{"class":206}," -u\n",[186,122575,122576],{"class":188,"line":49},[186,122577,122578],{"class":198},"或者\n",[186,122580,122581,122583,122586],{"class":188,"line":219},[186,122582,26035],{"class":198},[186,122584,122585],{"class":532}," dracut",[186,122587,122588],{"class":206}," --force\n",[169,122590,122591],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[176,122593,122595],{"className":119954,"code":122594,"language":119956,"meta":181,"style":181},"lsmod | grep nouveau\n",[183,122596,122597],{"__ignoreMap":181},[186,122598,122599,122602,122604,122606],{"class":188,"line":189},[186,122600,122601],{"class":198},"lsmod",[186,122603,26568],{"class":669},[186,122605,31691],{"class":198},[186,122607,122517],{"class":532},[34,122609,122610],{"start":49},[22,122611,122612],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[176,122614,122616],{"className":119954,"code":122615,"language":119956,"meta":181,"style":181},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[183,122617,122618],{"__ignoreMap":181},[186,122619,122620,122622,122624],{"class":188,"line":189},[186,122621,26035],{"class":198},[186,122623,120014],{"class":532},[186,122625,122626],{"class":532}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[169,122628,122629],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[176,122631,122633],{"className":119954,"code":122632,"language":119956,"meta":181,"style":181},"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",[183,122634,122635,122643,122651,122659,122666,122674,122684,122692],{"__ignoreMap":181},[186,122636,122637,122640],{"class":188,"line":189},[186,122638,122639],{"class":198},"Section",[186,122641,122642],{"class":532}," \"OutputClass\"\n",[186,122644,122645,122648],{"class":188,"line":49},[186,122646,122647],{"class":198},"   Identifier",[186,122649,122650],{"class":532}," \"nvidia\"\n",[186,122652,122653,122656],{"class":188,"line":219},[186,122654,122655],{"class":198},"   MatchDriver",[186,122657,122658],{"class":532}," \"nvidia-drm\"\n",[186,122660,122661,122664],{"class":188,"line":225},[186,122662,122663],{"class":198},"   Driver",[186,122665,122650],{"class":532},[186,122667,122668,122671],{"class":188,"line":242},[186,122669,122670],{"class":198},"   Option",[186,122672,122673],{"class":532}," \"AllowEmptyInitialConfiguration\"\n",[186,122675,122676,122678,122681],{"class":188,"line":248},[186,122677,122670],{"class":198},[186,122679,122680],{"class":532}," \"PrimaryGPU\"",[186,122682,122683],{"class":532}," \"yes\"\n",[186,122685,122686,122689],{"class":188,"line":265},[186,122687,122688],{"class":198},"   ModulePath",[186,122690,122691],{"class":532}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[186,122693,122694],{"class":188,"line":271},[186,122695,122696],{"class":198},"EndSection\n",[34,122698,122699],{"start":219},[22,122700,122701],{},"安装N卡驱动提示错误",[176,122703,122705],{"className":122247,"code":122704,"language":122249,"meta":122250,"style":181},"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",[183,122706,122707],{"__ignoreMap":181},[186,122708,122709],{"class":188,"line":189},[186,122710,122704],{},[34,122712,122713],{},[22,122714,122715],{},"检查当前运行的内核版本：",[169,122717,122718],{},"运行以下命令以查看你当前正在使用的内核版本：",[176,122720,122722],{"className":118727,"code":122721,"language":118729,"meta":181,"style":181},"uname -r\n",[183,122723,122724],{"__ignoreMap":181},[186,122725,122726,122728],{"class":188,"line":189},[186,122727,71641],{"class":198},[186,122729,122730],{"class":206}," -r\n",[34,122732,122733],{"start":49},[22,122734,122735],{},"安装内核开发文件：",[169,122737,122738,122739,122742],{},"确保你已经安装了与当前内核版本相匹配的 ",[183,122740,122741],{},"kernel-devel"," 包。运行以下命令来安装：",[176,122744,122746],{"className":118727,"code":122745,"language":118729,"meta":181,"style":181},"sudo dnf install kernel-devel-$(uname -r)\n",[183,122747,122748],{"__ignoreMap":181},[186,122749,122750,122752,122754,122756,122759,122761,122763,122765],{"class":188,"line":189},[186,122751,26035],{"class":198},[186,122753,27772],{"class":532},[186,122755,25293],{"class":532},[186,122757,122758],{"class":532}," kernel-devel-",[186,122760,26558],{"class":202},[186,122762,71641],{"class":198},[186,122764,121070],{"class":206},[186,122766,1629],{"class":202},[169,122768,122769],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[34,122771,122772],{"start":219},[22,122773,122774],{},"安装内核源代码（如果需要）：",[169,122776,122777],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[176,122779,122781],{"className":118727,"code":122780,"language":118729,"meta":181,"style":181},"sudo dnf install kernel-headers kernel-source\n",[183,122782,122783],{"__ignoreMap":181},[186,122784,122785,122787,122789,122791,122794],{"class":188,"line":189},[186,122786,26035],{"class":198},[186,122788,27772],{"class":532},[186,122790,25293],{"class":532},[186,122792,122793],{"class":532}," kernel-headers",[186,122795,122796],{"class":532}," kernel-source\n",[34,122798,122799],{"start":225},[22,122800,122801],{},"检查安装：",[169,122803,122804,122805,122808],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[183,122806,122807],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[176,122810,122812],{"className":118727,"code":122811,"language":118729,"meta":181,"style":181},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[183,122813,122814],{"__ignoreMap":181},[186,122815,122816,122818],{"class":188,"line":189},[186,122817,28218],{"class":198},[186,122819,122820],{"class":532}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[169,122822,122823,122824,122827],{},"如果仍然遇到问题，可以通过 ",[183,122825,122826],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1524,122829,122830],{},"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":181,"searchDepth":49,"depth":49,"links":122832},[122833,122837,122847,122851,122852],{"id":119930,"depth":49,"text":119931,"children":122834},[122835,122836],{"id":119940,"depth":219,"text":119941},{"id":119950,"depth":219,"text":119951},{"id":120150,"depth":49,"text":120151,"children":122838},[122839,122840,122841,122842,122843,122844,122845,122846],{"id":120154,"depth":219,"text":120155},{"id":120224,"depth":219,"text":120225},{"id":120313,"depth":219,"text":120314},{"id":120558,"depth":219,"text":120559},{"id":120628,"depth":219,"text":120629},{"id":120695,"depth":219,"text":120696},{"id":120730,"depth":219,"text":120731},{"id":120785,"depth":219,"text":120786},{"id":120836,"depth":49,"text":120837,"children":122848},[122849,122850],{"id":120840,"depth":219,"text":120841},{"id":120920,"depth":219,"text":120921},{"id":121106,"depth":49,"text":121107},{"id":121279,"depth":49,"text":121280,"children":122853},[122854,122855,122856,122857,122858],{"id":121283,"depth":219,"text":121284},{"id":121324,"depth":219,"text":121325},{"id":121611,"depth":219,"text":121612},{"id":121985,"depth":219,"text":121986},{"id":122481,"depth":219,"text":122482},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119922,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122865,"title":122866,"body":122867,"description":1548,"extension":1549,"meta":123207,"navigation":1551,"path":123208,"seo":123209,"stem":123210,"__hash__":123211},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122868,"toc":123205},[122869,122872,122877,122880,123126,123131,123134,123170,123173,123202],[10,122870,122866],{"id":122871},"_4-命令教程长期积累",[34,122873,122874],{},[22,122875,122876],{},"大多数命令",[169,122878,122879],{},"常用 Linux 命令速查：",[176,122881,122883],{"className":118727,"code":122882,"language":118729,"meta":181,"style":181},"# 文件与目录\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",[183,122884,122885,122890,122897,122904,122912,122919,122926,122934,122942,122949,122956,122964,122968,122973,122980,122988,122995,122999,123004,123011,123019,123027,123035,123043,123047,123052,123060,123067,123074,123082,123090,123094,123099,123108,123117],{"__ignoreMap":181},[186,122886,122887],{"class":188,"line":189},[186,122888,122889],{"class":192},"# 文件与目录\n",[186,122891,122892,122894],{"class":188,"line":49},[186,122893,28218],{"class":198},[186,122895,122896],{"class":192},"        # 列出目录内容\n",[186,122898,122899,122901],{"class":188,"line":219},[186,122900,102707],{"class":206},[186,122902,122903],{"class":192},"        # 切换目录\n",[186,122905,122906,122909],{"class":188,"line":225},[186,122907,122908],{"class":206},"pwd",[186,122910,122911],{"class":192},"       # 显示当前路径\n",[186,122913,122914,122916],{"class":188,"line":242},[186,122915,102697],{"class":198},[186,122917,122918],{"class":192},"     # 创建目录\n",[186,122920,122921,122923],{"class":188,"line":248},[186,122922,26781],{"class":198},[186,122924,122925],{"class":192},"        # 删除文件或目录\n",[186,122927,122928,122931],{"class":188,"line":265},[186,122929,122930],{"class":198},"cp",[186,122932,122933],{"class":192},"        # 复制文件或目录\n",[186,122935,122936,122939],{"class":188,"line":271},[186,122937,122938],{"class":198},"mv",[186,122940,122941],{"class":192},"        # 移动\u002F重命名文件或目录\n",[186,122943,122944,122946],{"class":188,"line":288},[186,122945,102714],{"class":198},[186,122947,122948],{"class":192},"     # 创建空文件\n",[186,122950,122951,122953],{"class":188,"line":294},[186,122952,122196],{"class":198},[186,122954,122955],{"class":192},"       # 查看文件内容\n",[186,122957,122958,122961],{"class":188,"line":1212},[186,122959,122960],{"class":198},"head\u002Ftail",[186,122962,122963],{"class":192}," # 查看文件头部\u002F尾部\n",[186,122965,122966],{"class":188,"line":1223},[186,122967,3867],{"emptyLinePlaceholder":1551},[186,122969,122970],{"class":188,"line":1236},[186,122971,122972],{"class":192},"# 权限管理\n",[186,122974,122975,122977],{"class":188,"line":3096},[186,122976,26070],{"class":198},[186,122978,122979],{"class":192},"     # 修改文件权限\n",[186,122981,122982,122985],{"class":188,"line":3110},[186,122983,122984],{"class":198},"chown",[186,122986,122987],{"class":192},"     # 修改文件所有者\n",[186,122989,122990,122992],{"class":188,"line":3115},[186,122991,26035],{"class":198},[186,122993,122994],{"class":192},"      # 以管理员身份执行\n",[186,122996,122997],{"class":188,"line":3121},[186,122998,3867],{"emptyLinePlaceholder":1551},[186,123000,123001],{"class":188,"line":3142},[186,123002,123003],{"class":192},"# 系统信息\n",[186,123005,123006,123008],{"class":188,"line":3147},[186,123007,71641],{"class":198},[186,123009,123010],{"class":192},"     # 系统信息\n",[186,123012,123013,123016],{"class":188,"line":3161},[186,123014,123015],{"class":198},"df",[186,123017,123018],{"class":192},"        # 磁盘使用情况\n",[186,123020,123021,123024],{"class":188,"line":3166},[186,123022,123023],{"class":198},"free",[186,123025,123026],{"class":192},"      # 内存使用情况\n",[186,123028,123029,123032],{"class":188,"line":3195},[186,123030,123031],{"class":198},"top\u002Fhtop",[186,123033,123034],{"class":192},"  # 进程监控\n",[186,123036,123037,123040],{"class":188,"line":3200},[186,123038,123039],{"class":198},"ps",[186,123041,123042],{"class":192},"        # 查看进程\n",[186,123044,123045],{"class":188,"line":3217},[186,123046,3867],{"emptyLinePlaceholder":1551},[186,123048,123049],{"class":188,"line":3222},[186,123050,123051],{"class":192},"# 网络\n",[186,123053,123054,123057],{"class":188,"line":3227},[186,123055,123056],{"class":198},"ping",[186,123058,123059],{"class":192},"      # 测试网络连通性\n",[186,123061,123062,123064],{"class":188,"line":3232},[186,123063,28306],{"class":198},[186,123065,123066],{"class":192},"      # 发送 HTTP 请求\n",[186,123068,123069,123071],{"class":188,"line":3246},[186,123070,121720],{"class":198},[186,123072,123073],{"class":192},"      # 下载文件\n",[186,123075,123076,123079],{"class":188,"line":3251},[186,123077,123078],{"class":198},"ssh",[186,123080,123081],{"class":192},"       # 远程登录\n",[186,123083,123084,123087],{"class":188,"line":4044},[186,123085,123086],{"class":198},"scp",[186,123088,123089],{"class":192},"       # 远程文件传输\n",[186,123091,123092],{"class":188,"line":4058},[186,123093,3867],{"emptyLinePlaceholder":1551},[186,123095,123096],{"class":188,"line":4066},[186,123097,123098],{"class":192},"# 包管理（Debian\u002FUbuntu）\n",[186,123100,123101,123103,123105],{"class":188,"line":4071},[186,123102,118799],{"class":198},[186,123104,118778],{"class":532},[186,123106,123107],{"class":192},"   # 更新软件源\n",[186,123109,123110,123112,123114],{"class":188,"line":4077},[186,123111,118799],{"class":198},[186,123113,25293],{"class":532},[186,123115,123116],{"class":192},"  # 安装软件包\n",[186,123118,123119,123121,123123],{"class":188,"line":4083},[186,123120,118799],{"class":198},[186,123122,27536],{"class":532},[186,123124,123125],{"class":192},"   # 卸载软件包\n",[34,123127,123128],{"start":49},[22,123129,123130],{},"KDE Dolphin 以root打开",[169,123132,123133],{},"kde5",[176,123135,123137],{"className":118727,"code":123136,"language":118729,"meta":181,"style":181},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[183,123138,123139],{"__ignoreMap":181},[186,123140,123141,123144,123147,123150,123152,123154,123157,123160,123162,123165,123167],{"class":188,"line":189},[186,123142,123143],{"class":198},"pkexec",[186,123145,123146],{"class":532}," env",[186,123148,123149],{"class":532}," DISPLAY=",[186,123151,29599],{"class":202},[186,123153,29657],{"class":532},[186,123155,123156],{"class":202},"$XAUTHORITY ",[186,123158,123159],{"class":532},"KDE_SESSION_VERSION=",[186,123161,1930],{"class":206},[186,123163,123164],{"class":532}," KDE_FULL_SESSION=",[186,123166,2835],{"class":206},[186,123168,123169],{"class":532}," dolphin\n",[169,123171,123172],{},"kde6",[176,123174,123176],{"className":118727,"code":123175,"language":118729,"meta":181,"style":181},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[183,123177,123178],{"__ignoreMap":181},[186,123179,123180,123182,123184,123186,123188,123190,123192,123194,123196,123198,123200],{"class":188,"line":189},[186,123181,123143],{"class":198},[186,123183,123146],{"class":532},[186,123185,123149],{"class":532},[186,123187,29599],{"class":202},[186,123189,29657],{"class":532},[186,123191,123156],{"class":202},[186,123193,123159],{"class":532},[186,123195,1954],{"class":206},[186,123197,123164],{"class":532},[186,123199,2835],{"class":206},[186,123201,123169],{"class":532},[1524,123203,123204],{},"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":181,"searchDepth":49,"depth":49,"links":123206},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122866,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123213,"title":123214,"body":123215,"description":1548,"extension":1549,"meta":123229,"navigation":1551,"path":123230,"seo":123231,"stem":123232,"__hash__":123233},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123216,"toc":123227},[123217,123220],[10,123218,123214],{"id":123219},"_5-各种环境配置",[169,123221,123222],{},[948,123223,123226],{"href":123224,"rel":123225},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[952],"电控组环境搭建大全",{"title":181,"searchDepth":49,"depth":49,"links":123228},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123214,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123235,"title":123236,"body":123237,"description":1548,"extension":1549,"meta":123585,"navigation":1551,"path":123586,"seo":123587,"stem":123588,"__hash__":123589},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123238,"toc":123577},[123239,123242,123246,123250,123254,123259,123266,123270,123563,123567,123574],[10,123240,123236],{"id":123241},"_6-拓展功能",[14,123243,123245],{"id":123244},"_61-wine","6.1 Wine",[14,123247,123249],{"id":123248},"_62-android","6.2 Android",[29,123251,123253],{"id":123252},"_621-i卡a卡","6.2.1 I卡、A卡",[34,123255,123256],{},[22,123257,123258],{},"Wayland-Waydroid(体验超级好)",[169,123260,123261,123262],{},"Waydroid 官网与安装指南：",[948,123263,123264],{"href":123264,"rel":123265},"https:\u002F\u002Fwaydro.id\u002F",[952],[29,123267,123269],{"id":123268},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[34,123271,123272],{},[22,123273,123274,123275,123277,123278,123282,123284,123287,123292,123489],{},"QEMU-KVM虚拟机 + BlissOS-X86",[726,123276],{},"BlissOS 官网下载：",[948,123279,123280],{"href":123280,"rel":123281},"https:\u002F\u002Fblissos.org\u002F",[952],[726,123283],{},[164,123285],{"alt":181,"src":123286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[34,123288,123289],{"start":219},[22,123290,123291],{},"比较推荐的配置",[176,123293,123295],{"className":118727,"code":123294,"language":118729,"meta":181,"style":181},"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",[183,123296,123297,123304,123314,123324,123334,123346,123356,123363,123373,123382,123391,123401,123411,123420,123430,123440,123452,123462,123471,123481],{"__ignoreMap":181},[186,123298,123299,123302],{"class":188,"line":189},[186,123300,123301],{"class":198},"qemu-system-x86_64",[186,123303,26137],{"class":206},[186,123305,123306,123309,123312],{"class":188,"line":49},[186,123307,123308],{"class":206},"        -M",[186,123310,123311],{"class":532}," q35,vmport=off",[186,123313,26137],{"class":206},[186,123315,123316,123319,123322],{"class":188,"line":219},[186,123317,123318],{"class":206},"        -accel",[186,123320,123321],{"class":532}," kvm",[186,123323,26137],{"class":206},[186,123325,123326,123329,123332],{"class":188,"line":225},[186,123327,123328],{"class":206},"        -cpu",[186,123330,123331],{"class":532}," qemu64,+sse3,+sse4.2",[186,123333,26137],{"class":206},[186,123335,123336,123339,123342,123344],{"class":188,"line":242},[186,123337,123338],{"class":206},"        -smp",[186,123340,123341],{"class":532}," 8,cores=",[186,123343,1904],{"class":206},[186,123345,26137],{"class":206},[186,123347,123348,123351,123354],{"class":188,"line":248},[186,123349,123350],{"class":206},"        -m",[186,123352,123353],{"class":532}," 6G",[186,123355,26137],{"class":206},[186,123357,123358,123361],{"class":188,"line":265},[186,123359,123360],{"class":206},"        -usb",[186,123362,26137],{"class":206},[186,123364,123365,123368,123371],{"class":188,"line":271},[186,123366,123367],{"class":206},"        -device",[186,123369,123370],{"class":532}," virtio-tablet",[186,123372,26137],{"class":206},[186,123374,123375,123377,123380],{"class":188,"line":288},[186,123376,123367],{"class":206},[186,123378,123379],{"class":532}," virtio-keyboard",[186,123381,26137],{"class":206},[186,123383,123384,123386,123389],{"class":188,"line":294},[186,123385,123367],{"class":206},[186,123387,123388],{"class":532}," usb-tablet",[186,123390,26137],{"class":206},[186,123392,123393,123396,123399],{"class":188,"line":1212},[186,123394,123395],{"class":206},"        -bios",[186,123397,123398],{"class":532}," OVMF-pure-efi64.fd",[186,123400,26137],{"class":206},[186,123402,123403,123406,123409],{"class":188,"line":1223},[186,123404,123405],{"class":206},"        -net",[186,123407,123408],{"class":532}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[186,123410,26137],{"class":206},[186,123412,123413,123415,123418],{"class":188,"line":1236},[186,123414,123405],{"class":206},[186,123416,123417],{"class":532}," nic,model=virtio",[186,123419,26137],{"class":206},[186,123421,123422,123425,123428],{"class":188,"line":3096},[186,123423,123424],{"class":206},"        -audio",[186,123426,123427],{"class":532}," sdl,model=hda",[186,123429,26137],{"class":206},[186,123431,123432,123435,123438],{"class":188,"line":3110},[186,123433,123434],{"class":206},"        -display",[186,123436,123437],{"class":532}," sdl,gl=on,show-cursor=on",[186,123439,26137],{"class":206},[186,123441,123442,123444,123447,123450],{"class":188,"line":3115},[186,123443,123367],{"class":206},[186,123445,123446],{"class":532}," virtio-vga-gl,xres=1920,yres=",[186,123448,123449],{"class":206},"1080",[186,123451,26137],{"class":206},[186,123453,123454,123457,123460],{"class":188,"line":3121},[186,123455,123456],{"class":206},"        -drive",[186,123458,123459],{"class":532}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[186,123461,26137],{"class":206},[186,123463,123464,123466,123469],{"class":188,"line":3142},[186,123465,123456],{"class":206},[186,123467,123468],{"class":532}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[186,123470,26137],{"class":206},[186,123472,123473,123476,123479],{"class":188,"line":3147},[186,123474,123475],{"class":206},"        -monitor",[186,123477,123478],{"class":532}," stdio",[186,123480,26137],{"class":206},[186,123482,123483,123486],{"class":188,"line":3161},[186,123484,123485],{"class":206},"        -serial",[186,123487,123488],{"class":532}," none\n",[34,123490,123491],{"start":242},[22,123492,123493,123494],{},"常用操作：",[34,123495,123496,123499,123555],{},[22,123497,123498],{},"全屏：Ctrl+Alt+F",[22,123500,123501,123502,123507],{},"adb调试",[34,123503,123504],{},[22,123505,123506],{},"使Linux与Android用ADB连接。",[176,123508,123510],{"className":118727,"code":123509,"language":118729,"meta":181,"style":181},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[183,123511,123512,123517,123528,123533,123545,123550],{"__ignoreMap":181},[186,123513,123514],{"class":188,"line":189},[186,123515,123516],{"class":192},"# 连接安卓\n",[186,123518,123519,123522,123525],{"class":188,"line":49},[186,123520,123521],{"class":198},"adb",[186,123523,123524],{"class":532}," connect",[186,123526,123527],{"class":206}," 127.0.0.1\n",[186,123529,123530],{"class":188,"line":219},[186,123531,123532],{"class":192},"# 打开shell\n",[186,123534,123535,123537,123539,123542],{"class":188,"line":225},[186,123536,123521],{"class":198},[186,123538,28340],{"class":206},[186,123540,123541],{"class":532}," 127.0.0.1:5555",[186,123543,123544],{"class":532}," shell\n",[186,123546,123547],{"class":188,"line":242},[186,123548,123549],{"class":192},"# 使用root权限\n",[186,123551,123552],{"class":188,"line":248},[186,123553,123554],{"class":198},"su\n",[22,123556,123557,123558],{},"中文输入法",[34,123559,123560],{},[22,123561,123562],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123564,123566],{"id":123565},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[169,123568,123569,123570],{},"rEFInd 官网与文档：",[948,123571,123572],{"href":123572,"rel":123573},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[952],[1524,123575,123576],{},"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":181,"searchDepth":49,"depth":49,"links":123578},[123579,123580,123584],{"id":123244,"depth":49,"text":123245},{"id":123248,"depth":49,"text":123249,"children":123581},[123582,123583],{"id":123252,"depth":219,"text":123253},{"id":123268,"depth":219,"text":123269},{"id":123565,"depth":49,"text":123566},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123236,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123591,"title":123592,"body":123593,"description":1548,"extension":1549,"meta":126892,"navigation":1551,"path":126893,"seo":126894,"stem":126895,"__hash__":126896},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123594,"toc":126866},[123595,123598,123602,123605,123612,123862,123865,123937,123940,123944,123948,123953,123956,123959,123962,123967,123970,123973,123976,123981,123984,123989,123992,123995,124000,124003,124008,124011,124015,124019,124022,124027,124030,124044,124047,124050,124059,124062,124071,124074,124077,124086,124089,124098,124101,124104,124113,124116,124119,124134,124137,124140,124149,124154,124157,124160,124169,124172,124181,124184,124193,124196,124205,124210,124213,124221,124226,124229,124238,124241,124249,124254,124257,124266,124269,124272,124276,124279,124284,124287,124292,124306,124311,124316,124327,124332,124338,124343,124358,124363,124366,124371,124376,124381,124389,124394,124401,124406,124417,124422,124425,124429,124432,124435,124440,124443,124462,124467,124470,124479,124484,124487,124509,124512,124542,124545,124550,124553,124567,124572,124591,124594,124597,124602,124614,124619,124624,124627,124632,124635,124650,124653,124658,124663,124667,124672,124712,124715,124719,124725,124731,124736,124739,124746,124751,124758,124761,124764,124771,124785,124788,124848,124851,124865,124877,124880,124883,124886,124950,124953,124956,124959,124979,124982,124987,124994,124998,125001,125005,125010,125015,125019,125022,125025,125067,125072,125075,125097,125112,125114,125119,125131,125191,125193,125195,125249,125251,125253,125259,125264,125267,125272,125276,125279,125341,125346,125349,125351,125355,125367,125449,125451,125453,125507,125513,125515,125519,125524,125526,125531,125535,125555,125590,125594,125597,125600,125603,125610,125613,125625,125628,125643,125646,125665,125713,125716,125733,125736,125750,125755,125758,125767,125782,125794,125832,125837,125846,125851,125856,125882,125891,125895,125899,125904,125907,125911,125915,125920,125923,125928,125931,125936,125939,125944,125947,125951,125956,125959,125964,125967,125971,125976,125979,125984,125987,125992,125995,125999,126004,126007,126012,126015,126020,126023,126027,126032,126035,126040,126043,126048,126051,126056,126059,126064,126067,126072,126075,126079,126084,126087,126092,126099,126103,126108,126111,126116,126119,126123,126128,126131,126134,126137,126140,126143,126147,126150,126160,126165,126170,126192,126197,126202,126209,126213,126218,126221,126224,126229,126232,126235,126238,126241,126244,126247,126250,126253,126256,126259,126262,126265,126270,126275,126280,126285,126290,126295,126300,126303,126307,126310,126314,126319,126324,126329,126334,126338,126344,126352,126357,126360,126365,126380,126383,126388,126422,126437,126440,126495,126521,126533,126536,126545,126548,126563,126568,126571,126577,126582,126585,126590,126593,126598,126603,126610,126613,126628,126631,126666,126671,126679,126717,126720,126723,126728,126731,126736,126747,126781,126786,126789,126798,126803,126809,126812,126817,126826,126831,126834,126837,126842,126850,126853,126858,126863],[10,123596,123592],{"id":123597},"_7-其他操作",[14,123599,123601],{"id":123600},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[169,123603,123604],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[169,123606,123607,123608,123611],{},"进入工控机的硬盘目录，进入",[183,123609,123610],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[176,123613,123617],{"className":123614,"code":123615,"language":123616,"meta":181,"style":181},"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",[183,123618,123619,123627,123638,123645,123652,123664,123671,123683,123694,123705,123712,123719,123726,123738,123750,123757,123769,123781,123788,123800,123812,123824,123835,123842,123853],{"__ignoreMap":181},[186,123620,123621,123624],{"class":188,"line":189},[186,123622,123623],{"class":523},"network",[186,123625,123626],{"class":202},": \n",[186,123628,123629,123632,123634,123636],{"class":188,"line":49},[186,123630,123631],{"class":523},"  version",[186,123633,210],{"class":202},[186,123635,1697],{"class":206},[186,123637,4141],{"class":202},[186,123639,123640,123643],{"class":188,"line":219},[186,123641,123642],{"class":523},"  wifis",[186,123644,123626],{"class":202},[186,123646,123647,123650],{"class":188,"line":225},[186,123648,123649],{"class":523},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[186,123651,123626],{"class":202},[186,123653,123654,123657,123659,123662],{"class":188,"line":242},[186,123655,123656],{"class":523},"      renderer",[186,123658,210],{"class":202},[186,123660,123661],{"class":532},"NetworkManager",[186,123663,4141],{"class":202},[186,123665,123666,123669],{"class":188,"line":248},[186,123667,123668],{"class":523},"      match",[186,123670,123626],{"class":202},[186,123672,123673,123676,123678,123681],{"class":188,"line":265},[186,123674,123675],{"class":523},"        name",[186,123677,210],{"class":202},[186,123679,123680],{"class":532},"\"wlan0\"",[186,123682,4141],{"class":202},[186,123684,123685,123688,123690,123692],{"class":188,"line":271},[186,123686,123687],{"class":523},"      dhcp4",[186,123689,210],{"class":202},[186,123691,2835],{"class":206},[186,123693,4141],{"class":202},[186,123695,123696,123699,123701,123703],{"class":188,"line":288},[186,123697,123698],{"class":523},"      dhcp6",[186,123700,210],{"class":202},[186,123702,2835],{"class":206},[186,123704,4141],{"class":202},[186,123706,123707,123710],{"class":188,"line":294},[186,123708,123709],{"class":523},"      access-points",[186,123711,123626],{"class":202},[186,123713,123714,123717],{"class":188,"line":1212},[186,123715,123716],{"class":532},"        \"EMIS_Vinci_Robocon_5G\"",[186,123718,123626],{"class":202},[186,123720,123721,123724],{"class":188,"line":1223},[186,123722,123723],{"class":523},"          auth",[186,123725,123626],{"class":202},[186,123727,123728,123731,123733,123736],{"class":188,"line":1236},[186,123729,123730],{"class":523},"            key-management",[186,123732,210],{"class":202},[186,123734,123735],{"class":532},"\"psk\"",[186,123737,4141],{"class":202},[186,123739,123740,123743,123745,123748],{"class":188,"line":3096},[186,123741,123742],{"class":523},"            password",[186,123744,210],{"class":202},[186,123746,123747],{"class":532},"\"vinci666\"",[186,123749,4141],{"class":202},[186,123751,123752,123755],{"class":188,"line":3110},[186,123753,123754],{"class":523},"          networkmanager",[186,123756,123626],{"class":202},[186,123758,123759,123762,123764,123767],{"class":188,"line":3115},[186,123760,123761],{"class":523},"            uuid",[186,123763,210],{"class":202},[186,123765,123766],{"class":532},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[186,123768,4141],{"class":202},[186,123770,123771,123774,123776,123779],{"class":188,"line":3121},[186,123772,123773],{"class":523},"            name",[186,123775,210],{"class":202},[186,123777,123778],{"class":532},"\"EMIS_Vinci_Robocon_5G\"",[186,123780,4141],{"class":202},[186,123782,123783,123786],{"class":188,"line":3142},[186,123784,123785],{"class":523},"            passthrough",[186,123787,123626],{"class":202},[186,123789,123790,123793,123795,123798],{"class":188,"line":3147},[186,123791,123792],{"class":523},"              wifi-security.auth-alg",[186,123794,210],{"class":202},[186,123796,123797],{"class":532},"\"open\"",[186,123799,4141],{"class":202},[186,123801,123802,123805,123807,123810],{"class":188,"line":3161},[186,123803,123804],{"class":523},"              ipv6.addr-gen-mode",[186,123806,210],{"class":202},[186,123808,123809],{"class":532},"\"default\"",[186,123811,4141],{"class":202},[186,123813,123814,123817,123819,123822],{"class":188,"line":3166},[186,123815,123816],{"class":523},"              ipv6.ip6-privacy",[186,123818,210],{"class":202},[186,123820,123821],{"class":532},"\"-1\"",[186,123823,4141],{"class":202},[186,123825,123826,123829,123831,123833],{"class":188,"line":3195},[186,123827,123828],{"class":523},"              proxy._",[186,123830,210],{"class":202},[186,123832,9115],{"class":532},[186,123834,4141],{"class":202},[186,123836,123837,123840],{"class":188,"line":3200},[186,123838,123839],{"class":523},"      networkmanager",[186,123841,123626],{"class":202},[186,123843,123844,123847,123849,123851],{"class":188,"line":3217},[186,123845,123846],{"class":523},"        uuid",[186,123848,210],{"class":202},[186,123850,123766],{"class":532},[186,123852,4141],{"class":202},[186,123854,123855,123857,123859],{"class":188,"line":3222},[186,123856,123675],{"class":523},[186,123858,210],{"class":202},[186,123860,123861],{"class":532},"\"EMIS_Vinci_Robocon_5G\"\n",[169,123863,123864],{},"将其改为新wifi的名和密码：",[176,123866,123868],{"className":123614,"code":123867,"language":123616,"meta":181,"style":181},"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",[183,123869,123870,123876,123885,123891,123898,123907,123915,123921,123927],{"__ignoreMap":181},[186,123871,123872,123874],{"class":188,"line":189},[186,123873,123623],{"class":523},[186,123875,5205],{"class":202},[186,123877,123878,123880,123882],{"class":188,"line":49},[186,123879,123631],{"class":523},[186,123881,210],{"class":202},[186,123883,123884],{"class":206},"2\n",[186,123886,123887,123889],{"class":188,"line":219},[186,123888,123642],{"class":523},[186,123890,5205],{"class":202},[186,123892,123893,123896],{"class":188,"line":225},[186,123894,123895],{"class":523},"    wlan0",[186,123897,5205],{"class":202},[186,123899,123900,123902,123904],{"class":188,"line":242},[186,123901,123687],{"class":523},[186,123903,210],{"class":202},[186,123905,123906],{"class":206},"true\n",[186,123908,123909,123911,123913],{"class":188,"line":248},[186,123910,123698],{"class":523},[186,123912,210],{"class":202},[186,123914,123906],{"class":206},[186,123916,123917,123919],{"class":188,"line":265},[186,123918,123709],{"class":523},[186,123920,5205],{"class":202},[186,123922,123923,123925],{"class":188,"line":271},[186,123924,123716],{"class":532},[186,123926,5205],{"class":202},[186,123928,123929,123932,123934],{"class":188,"line":288},[186,123930,123931],{"class":523},"          password",[186,123933,210],{"class":202},[186,123935,123936],{"class":532},"\"vinci666\"\n",[169,123938,123939],{},"工控机开机即可连上网。",[14,123941,123943],{"id":123942},"_72-ssh远程开发","7.2 SSH远程开发",[29,123945,123947],{"id":123946},"_721-环境准备","7.2.1 环境准备",[169,123949,123950],{},[54,123951,123952],{},"1.硬件准备",[169,123954,123955],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[169,123957,123958],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[169,123960,123961],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[169,123963,123964],{},[54,123965,123966],{},"2.设置固定IP",[169,123968,123969],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[169,123971,123972],{},"1.进入设置界面",[169,123974,123975],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[169,123977,123978],{},[164,123979],{"alt":181,"src":123980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[169,123982,123983],{},"2.配置所连接的网络",[169,123985,123986],{},[164,123987],{"alt":181,"src":123988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[169,123990,123991],{},"3.设置固定IP",[169,123993,123994],{},"查看当前IP地址。",[169,123996,123997],{},[164,123998],{"alt":181,"src":123999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[169,124001,124002],{},"设置固定IP。",[169,124004,124005],{},[164,124006],{"alt":181,"src":124007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[169,124009,124010],{},"至此，IP配置完毕。",[29,124012,124014],{"id":124013},"_722-环境搭建","7.2.2 环境搭建",[169,124016,124017],{},[54,124018,27211],{},[169,124020,124021],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[169,124023,124024],{},[54,124025,124026],{},"实现",[169,124028,124029],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[34,124031,124032,124035,124038,124041],{},[22,124033,124034],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[22,124036,124037],{},"远程主机启动SSH服务；",[22,124039,124040],{},"本地主机登陆远程主机；",[22,124042,124043],{},"实现数据传输。",[169,124045,124046],{},"1.安装SSH客户端与服务端",[169,124048,124049],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[176,124051,124053],{"className":122247,"code":124052,"language":122249,"meta":122250,"style":181}," sudo apt install openssh-server\n",[183,124054,124055],{"__ignoreMap":181},[186,124056,124057],{"class":188,"line":189},[186,124058,124052],{},[169,124060,124061],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[176,124063,124065],{"className":122247,"code":124064,"language":122249,"meta":122250,"style":181},"sudo apt install openssh-client\n",[183,124066,124067],{"__ignoreMap":181},[186,124068,124069],{"class":188,"line":189},[186,124070,124064],{},[169,124072,124073],{},"2.远程主机启动SSH服务",[169,124075,124076],{},"远程主机启动 ssh 服务命令如下：",[176,124078,124080],{"className":122247,"code":124079,"language":122249,"meta":122250,"style":181},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[183,124081,124082],{"__ignoreMap":181},[186,124083,124084],{"class":188,"line":189},[186,124085,124079],{},[169,124087,124088],{},"启动后可使用如下命令查看服务是否正常运行：",[176,124090,124092],{"className":122247,"code":124091,"language":122249,"meta":122250,"style":181},"ps -e | grep ssh\n",[183,124093,124094],{"__ignoreMap":181},[186,124095,124096],{"class":188,"line":189},[186,124097,124091],{},[169,124099,124100],{},"如果启动成功，会包含 sshd 程序。",[169,124102,124103],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[176,124105,124107],{"className":122247,"code":124106,"language":122249,"meta":122250,"style":181},"sudo systemctl enable ssh\n",[183,124108,124109],{"__ignoreMap":181},[186,124110,124111],{"class":188,"line":189},[186,124112,124106],{},[169,124114,124115],{},"3.本地远程登录",[169,124117,124118],{},"登录远程主机可以调用如下命令:",[176,124120,124122],{"className":118727,"code":124121,"language":118729,"meta":181,"style":181},"ssh -X 用户名@ip地址\n",[183,124123,124124],{"__ignoreMap":181},[186,124125,124126,124128,124131],{"class":188,"line":189},[186,124127,123078],{"class":198},[186,124129,124130],{"class":206}," -X",[186,124132,124133],{"class":532}," 用户名@ip地址\n",[169,124135,124136],{},"然后根据提示，录入登陆密码，即可成功登录。",[169,124138,124139],{},"如果退出，可以调用exit命令：",[176,124141,124143],{"className":122247,"code":124142,"language":122249,"meta":122250,"style":181},"exit\n",[183,124144,124145],{"__ignoreMap":181},[186,124146,124147],{"class":188,"line":189},[186,124148,124142],{},[169,124150,124151],{},[54,124152,124153],{},"4.实现数据传输",[169,124155,124156],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[169,124158,124159],{},"上传文件指令格式如下：",[176,124161,124163],{"className":122247,"code":124162,"language":122249,"meta":122250,"style":181},"scp 本地文件路径 账号@ip:路径\n",[183,124164,124165],{"__ignoreMap":181},[186,124166,124167],{"class":188,"line":189},[186,124168,124162],{},[169,124170,124171],{},"上传文件夹指令格式如下：",[176,124173,124175],{"className":122247,"code":124174,"language":122249,"meta":122250,"style":181},"scp -r 本地文件夹路径 账号@ip:路径\n",[183,124176,124177],{"__ignoreMap":181},[186,124178,124179],{"class":188,"line":189},[186,124180,124174],{},[169,124182,124183],{},"下载文件指令格式如下：",[176,124185,124187],{"className":122247,"code":124186,"language":122249,"meta":122250,"style":181},"scp 账号@ip:路径 本地文件夹路径\n",[183,124188,124189],{"__ignoreMap":181},[186,124190,124191],{"class":188,"line":189},[186,124192,124186],{},[169,124194,124195],{},"下载文件夹指令格式如下：",[176,124197,124199],{"className":122247,"code":124198,"language":122249,"meta":122250,"style":181},"scp -r 账号@ip:路径 本地文件夹路径\n",[183,124200,124201],{"__ignoreMap":181},[186,124202,124203],{"class":188,"line":189},[186,124204,124198],{},[169,124206,124207],{},[54,124208,124209],{},"优化",[169,124211,124212],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[34,124214,124215,124218],{},[22,124216,124217],{},"本地生成密钥对；",[22,124219,124220],{},"将公钥上传至远程主机。",[169,124222,124223],{},[54,124224,124225],{},"1.生成密钥对",[169,124227,124228],{},"本地客户端生成公私钥：（一路回车默认即可）",[176,124230,124232],{"className":122247,"code":124231,"language":122249,"meta":122250,"style":181},"ssh-keygen\n",[183,124233,124234],{"__ignoreMap":181},[186,124235,124236],{"class":188,"line":189},[186,124237,124231],{},[169,124239,124240],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[34,124242,124243,124246],{},[22,124244,124245],{},"id_rsa （私钥）；",[22,124247,124248],{},"id_rsa.pub (公钥)。",[169,124250,124251],{},[54,124252,124253],{},"2.公钥上传",[169,124255,124256],{},"上传指令如下：",[176,124258,124260],{"className":122247,"code":124259,"language":122249,"meta":122250,"style":181},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[183,124261,124262],{"__ignoreMap":181},[186,124263,124264],{"class":188,"line":189},[186,124265,124259],{},[169,124267,124268],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[169,124270,124271],{},"以后再远程登录就无需录入密码了。",[29,124273,124275],{"id":124274},"_723-使用vscode优化","7.2.3 使用VScode优化",[169,124277,124278],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[169,124280,124281],{},[54,124282,124283],{},"1.准备工作",[169,124285,124286],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[169,124288,124289],{},[54,124290,124291],{},"2.为VScode安装远程开发插件",[169,124293,124294,124295,124298,124299,124302,124303,913],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[183,124296,124297],{},"扩展：商店","的搜索栏输入",[183,124300,124301],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[183,124304,124305],{},"安装",[169,124307,124308],{},[164,124309],{"alt":181,"src":124310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[169,124312,124313],{},[54,124314,124315],{},"3.配置远程连接",[169,124317,124318,124319,124322,124323,124326],{},"步骤1：使用快捷键",[183,124320,124321],{},"ctrl + shift + p","打开命令输入窗口，并输入",[183,124324,124325],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[169,124328,124329],{},[164,124330],{"alt":181,"src":124331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[169,124333,124334,124335,913],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[183,124336,124337],{},"Add New SSH Host",[169,124339,124340],{},[164,124341],{"alt":181,"src":124342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[169,124344,124345,124346,124349,124350,124353,124354,124357],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[183,124347,124348],{},"ssh +X ubuntu@192.168.43.164","，其中，",[183,124351,124352],{},"ubuntu","需要替换为你的登录用户名，",[183,124355,124356],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[169,124359,124360],{},[164,124361],{"alt":181,"src":124362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[169,124364,124365],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[169,124367,124368],{},[164,124369],{"alt":181,"src":124370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[169,124372,124373],{},[164,124374],{"alt":181,"src":124375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[169,124377,124378],{},[54,124379,124380],{},"4.使用",[169,124382,124383,124384,124322,124386,124388],{},"步骤1：继续使用快捷键",[183,124385,124321],{},[183,124387,124325],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[169,124390,124391],{},[164,124392],{"alt":181,"src":124393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[169,124395,124396,124397,124400],{},"或者，也可以点击侧边栏的",[183,124398,124399],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[169,124402,124403],{},[164,124404],{"alt":181,"src":124405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[169,124407,124408,124409,124412,124413,124416],{},"步骤2：选择菜单栏的",[183,124410,124411],{},"文件","下的",[183,124414,124415],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[169,124418,124419],{},[164,124420],{"alt":181,"src":124421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[169,124423,124424],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124426,124428],{"id":124427},"_73-远程桌面","7.3 远程桌面",[169,124430,124431],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[169,124433,124434],{},"我们选择使用VNC来看。",[34,124436,124437],{},[22,124438,124439],{},"安装VNC服务器：",[169,124441,124442],{},"这里以TigerVNC为例进行安装：",[176,124444,124446],{"className":118727,"code":124445,"language":118729,"meta":181,"style":181},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[183,124447,124448],{"__ignoreMap":181},[186,124449,124450,124452,124454,124456,124459],{"class":188,"line":189},[186,124451,26035],{"class":198},[186,124453,118748],{"class":532},[186,124455,25293],{"class":532},[186,124457,124458],{"class":532}," tigervnc-standalone-server",[186,124460,124461],{"class":532}," tigervnc-common\n",[34,124463,124464],{"start":49},[22,124465,124466],{},"设置VNC密码：",[169,124468,124469],{},"为VNC用户设置密码，运行以下命令：",[176,124471,124473],{"className":118727,"code":124472,"language":118729,"meta":181,"style":181},"vncpasswd\n",[183,124474,124475],{"__ignoreMap":181},[186,124476,124477],{"class":188,"line":189},[186,124478,124472],{"class":198},[34,124480,124481],{"start":219},[22,124482,124483],{},"配置VNC启动脚本:",[169,124485,124486],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[176,124488,124490],{"className":118727,"code":124489,"language":118729,"meta":181,"style":181},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[183,124491,124492,124501],{"__ignoreMap":181},[186,124493,124494,124496,124498],{"class":188,"line":189},[186,124495,102697],{"class":198},[186,124497,30671],{"class":206},[186,124499,124500],{"class":532}," ~\u002F.vnc\n",[186,124502,124503,124506],{"class":188,"line":49},[186,124504,124505],{"class":198},"nano",[186,124507,124508],{"class":532}," ~\u002F.vnc\u002Fxstartup\n",[169,124510,124511],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[176,124513,124515],{"className":118727,"code":124514,"language":118729,"meta":181,"style":181},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[183,124516,124517,124522,124530,124537],{"__ignoreMap":181},[186,124518,124519],{"class":188,"line":189},[186,124520,124521],{"class":192},"#!\u002Fbin\u002Fsh\n",[186,124523,124524,124527],{"class":188,"line":49},[186,124525,124526],{"class":206},"unset",[186,124528,124529],{"class":532}," SESSION_MANAGER\n",[186,124531,124532,124534],{"class":188,"line":219},[186,124533,124526],{"class":206},[186,124535,124536],{"class":532}," DBUS_SESSION_BUS_ADDRESS\n",[186,124538,124539],{"class":188,"line":225},[186,124540,124541],{"class":198},"gnome-session\n",[169,124543,124544],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[34,124546,124547],{"start":225},[22,124548,124549],{},"给予执行权限：",[169,124551,124552],{},"为xstartup文件设置执行权限：",[176,124554,124556],{"className":118727,"code":124555,"language":118729,"meta":181,"style":181},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[183,124557,124558],{"__ignoreMap":181},[186,124559,124560,124562,124565],{"class":188,"line":189},[186,124561,26070],{"class":198},[186,124563,124564],{"class":532}," +x",[186,124566,124508],{"class":532},[34,124568,124569],{"start":242},[22,124570,124571],{},"启动VNC服务器：",[176,124573,124575],{"className":118727,"code":124574,"language":118729,"meta":181,"style":181},"vncserver -geometry 1920x1080 -localhost=0\n",[183,124576,124577],{"__ignoreMap":181},[186,124578,124579,124582,124585,124588],{"class":188,"line":189},[186,124580,124581],{"class":198},"vncserver",[186,124583,124584],{"class":206}," -geometry",[186,124586,124587],{"class":532}," 1920x1080",[186,124589,124590],{"class":206}," -localhost=0\n",[169,124592,124593],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[169,124595,124596],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[34,124598,124599],{"start":248},[22,124600,124601],{},"查看已开启的VNC服务器：",[176,124603,124605],{"className":118727,"code":124604,"language":118729,"meta":181,"style":181},"vncserver -list\n",[183,124606,124607],{"__ignoreMap":181},[186,124608,124609,124611],{"class":188,"line":189},[186,124610,124581],{"class":198},[186,124612,124613],{"class":206}," -list\n",[169,124615,124616],{},[164,124617],{"alt":181,"src":124618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[34,124620,124621],{"start":265},[22,124622,124623],{},"连接到VNC服务器：",[169,124625,124626],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[34,124628,124629],{"start":271},[22,124630,124631],{},"停止VNC服务器：",[169,124633,124634],{},"如果需要停止VNC服务器，可以使用以下命令：",[176,124636,124638],{"className":118727,"code":124637,"language":118729,"meta":181,"style":181},"vncserver -kill :1\n",[183,124639,124640],{"__ignoreMap":181},[186,124641,124642,124644,124647],{"class":188,"line":189},[186,124643,124581],{"class":198},[186,124645,124646],{"class":206}," -kill",[186,124648,124649],{"class":532}," :1\n",[169,124651,124652],{},"将:1替换为你实际使用的显示编号。",[169,124654,124655],{},[164,124656],{"alt":181,"src":124657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[169,124659,124660],{},[164,124661],{"alt":181,"src":124662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124664,124666],{"id":124665},"_74-usb端口设置","7.4 USB端口设置",[169,124668,124669],{},[54,124670,124671],{},"首先先配置好权限",[176,124673,124675],{"className":118727,"code":124674,"language":118729,"meta":181,"style":181},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[183,124676,124677,124682,124695,124702,124707],{"__ignoreMap":181},[186,124678,124679],{"class":188,"line":189},[186,124680,124681],{"class":192},"# 将用户权限提高\n",[186,124683,124684,124686,124688,124690,124693],{"class":188,"line":49},[186,124685,26035],{"class":198},[186,124687,28031],{"class":532},[186,124689,28034],{"class":206},[186,124691,124692],{"class":532}," dialout",[186,124694,28039],{"class":202},[186,124696,124697,124699],{"class":188,"line":219},[186,124698,28058],{"class":198},[186,124700,124701],{"class":532}," dialout\n",[186,124703,124704],{"class":188,"line":225},[186,124705,124706],{"class":192},"# 查看下面命令是否输出dialout（若输出才正常）\n",[186,124708,124709],{"class":188,"line":242},[186,124710,124711],{"class":198},"groups\n",[169,124713,124714],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[29,124716,124718],{"id":124717},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[169,124720,124721,124724],{},[54,124722,124723],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[169,124726,124727,124730],{},[54,124728,124729],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[169,124732,124733],{},[54,124734,124735],{},"流程如下：",[169,124737,124738],{},"（1）.查找设备idVendor和idProduct",[169,124740,124741,124742,124745],{},"接入两个USB设备，在终端调用指令",[183,124743,124744],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[169,124747,124748],{},[164,124749],{"alt":181,"src":124750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[169,124752,124753,124754,124757],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[183,124755,124756],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[169,124759,124760],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[169,124762,124763],{},"（2）.编写映射规则",[169,124765,124766,124767,124770],{},"在",[183,124768,124769],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[176,124772,124774],{"className":118727,"code":124773,"language":118729,"meta":181,"style":181},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[183,124775,124776],{"__ignoreMap":181},[186,124777,124778,124780,124782],{"class":188,"line":189},[186,124779,26035],{"class":198},[186,124781,120014],{"class":532},[186,124783,124784],{"class":532}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[169,124786,124787],{},"输入如下内容：",[176,124789,124791],{"className":118727,"code":124790,"language":118729,"meta":181,"style":181},"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",[183,124792,124793,124823],{"__ignoreMap":181},[186,124794,124795,124798,124800,124803,124806,124809,124812,124814,124817,124820],{"class":188,"line":189},[186,124796,124797],{"class":202},"KERNEL",[186,124799,529],{"class":669},[186,124801,124802],{"class":532},"=\"ttyUSB*\",",[186,124804,124805],{"class":198}," ATTRS",[186,124807,124808],{"class":532},"{idVendor}==",[186,124810,124811],{"class":198},"\"10c4\"",[186,124813,1988],{"class":198},[186,124815,124816],{"class":532}," ATTRS{idProduct}==\"ea60\",",[186,124818,124819],{"class":532}," MODE:=\"0777\",",[186,124821,124822],{"class":532}," SYMLINK+=\"mylidar\"\n",[186,124824,124825,124827,124829,124831,124833,124835,124838,124840,124843,124845],{"class":188,"line":49},[186,124826,124797],{"class":202},[186,124828,529],{"class":669},[186,124830,124802],{"class":532},[186,124832,124805],{"class":198},[186,124834,124808],{"class":532},[186,124836,124837],{"class":198},"\"1a86\"",[186,124839,1988],{"class":198},[186,124841,124842],{"class":532}," ATTRS{idProduct}==\"7523\",",[186,124844,124819],{"class":532},[186,124846,124847],{"class":532}," SYMLINK+=\"mycar\"\n",[169,124849,124850],{},"代码解释：",[19,124852,124853,124856,124859,124862],{},[22,124854,124855],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[22,124857,124858],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[22,124860,124861],{},"SYMLINK是符号连接，即绑定的别名；",[22,124863,124864],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[169,124866,124867,124868,124871,124874],{},"***小提示：***",[25014,124869,124870],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[183,124872,124873],{},"\u002Fetc\u002Fudev\u002Frule.d",[25014,124875,124876],{},"目录即可。",[169,124878,124879],{},"表格 还在加载中，请等待加载完成后再尝试复制",[169,124881,124882],{},"（3）.使规则生效",[169,124884,124885],{},"在终端下输入如下指令：",[176,124887,124889],{"className":118727,"code":124888,"language":118729,"meta":181,"style":181},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[183,124890,124891,124896,124908,124919,124923,124928,124941],{"__ignoreMap":181},[186,124892,124893],{"class":188,"line":189},[186,124894,124895],{"class":192},"# Ubuntu用下方命令\n",[186,124897,124898,124900,124902,124905],{"class":188,"line":49},[186,124899,26035],{"class":198},[186,124901,121479],{"class":532},[186,124903,124904],{"class":532}," udev",[186,124906,124907],{"class":532}," reload\n",[186,124909,124910,124912,124914,124916],{"class":188,"line":219},[186,124911,26035],{"class":198},[186,124913,121479],{"class":532},[186,124915,124904],{"class":532},[186,124917,124918],{"class":532}," restart\n",[186,124920,124921],{"class":188,"line":225},[186,124922,3867],{"emptyLinePlaceholder":1551},[186,124924,124925],{"class":188,"line":242},[186,124926,124927],{"class":192},"#Fedora用下方命令\n",[186,124929,124930,124932,124935,124938],{"class":188,"line":248},[186,124931,26035],{"class":198},[186,124933,124934],{"class":532}," udevadm",[186,124936,124937],{"class":532}," control",[186,124939,124940],{"class":206}," --reload\n",[186,124942,124943,124945,124947],{"class":188,"line":265},[186,124944,26035],{"class":198},[186,124946,124934],{"class":532},[186,124948,124949],{"class":532}," trigger\n",[169,124951,124952],{},"再重新插拔设备即可。",[169,124954,124955],{},"（4）.测试",[169,124957,124958],{},"终端下输入如下指令",[176,124960,124962],{"className":118727,"code":124961,"language":118729,"meta":181,"style":181},"ll \u002Fdev | grep ttyUSB\n",[183,124963,124964],{"__ignoreMap":181},[186,124965,124966,124969,124972,124974,124976],{"class":188,"line":189},[186,124967,124968],{"class":198},"ll",[186,124970,124971],{"class":532}," \u002Fdev",[186,124973,26568],{"class":669},[186,124975,31691],{"class":198},[186,124977,124978],{"class":532}," ttyUSB\n",[169,124980,124981],{},"运行结果如下：",[169,124983,124984],{},[164,124985],{"alt":181,"src":124986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[169,124988,124989,124990,124993],{},"也可以多次插拔USB设备，会发现设备端口",[183,124991,124992],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[169,124995,124996],{},[54,124997,119395],{},[169,124999,125000],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[29,125002,125004],{"id":125003},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[169,125006,125007,125009],{},[54,125008,124723],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[169,125011,125012,125014],{},[54,125013,124729],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[169,125016,125017],{},[54,125018,124735],{},[169,125020,125021],{},"（1）.查看所连接的主机USB接口的KERNELS",[169,125023,125024],{},"调用如下指令查看第一台雷达的USB信息：",[176,125026,125028],{"className":118727,"code":125027,"language":118729,"meta":181,"style":181},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[183,125029,125030,125050],{"__ignoreMap":181},[186,125031,125032,125035,125037,125040,125043,125045,125047],{"class":188,"line":189},[186,125033,125034],{"class":198},"udevadm",[186,125036,71258],{"class":532},[186,125038,125039],{"class":206}," --attribute-walk",[186,125041,125042],{"class":206}," --name=\u002Fdev\u002FttyUSB0",[186,125044,26568],{"class":669},[186,125046,31691],{"class":198},[186,125048,125049],{"class":532}," KERNELS\n",[186,125051,125052,125054,125056,125058,125061,125063,125065],{"class":188,"line":49},[186,125053,125034],{"class":198},[186,125055,71258],{"class":532},[186,125057,125039],{"class":206},[186,125059,125060],{"class":206}," --name=\u002Fdev\u002FttyACM0",[186,125062,26568],{"class":669},[186,125064,31691],{"class":198},[186,125066,125049],{"class":532},[169,125068,125069],{},[164,125070],{"alt":181,"src":125071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[169,125073,125074],{},"调用如下指令查看第二台雷达的USB信息：",[176,125076,125078],{"className":118727,"code":125077,"language":118729,"meta":181,"style":181},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[183,125079,125080],{"__ignoreMap":181},[186,125081,125082,125084,125086,125088,125091,125093,125095],{"class":188,"line":189},[186,125083,125034],{"class":198},[186,125085,71258],{"class":532},[186,125087,125039],{"class":206},[186,125089,125090],{"class":206}," --name=\u002Fdev\u002FttyUSB1",[186,125092,26568],{"class":669},[186,125094,31691],{"class":198},[186,125096,125049],{"class":532},[169,125098,125099,125100,125103,125104,125107,125108,125111],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[183,125101,125102],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[183,125105,125106],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[54,125109,125110],{},"唯一性标识","”。",[169,125113,124763],{},[169,125115,124766,125116,125118],{},[183,125117,124769],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[176,125120,125121],{"className":118727,"code":124773,"language":118729,"meta":181,"style":181},[183,125122,125123],{"__ignoreMap":181},[186,125124,125125,125127,125129],{"class":188,"line":189},[186,125126,26035],{"class":198},[186,125128,120014],{"class":532},[186,125130,124784],{"class":532},[176,125132,125134],{"className":118727,"code":125133,"language":118729,"meta":181,"style":181},"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",[183,125135,125136,125165],{"__ignoreMap":181},[186,125137,125138,125140,125142,125144,125147,125149,125152,125155,125157,125160,125162],{"class":188,"line":189},[186,125139,124797],{"class":202},[186,125141,529],{"class":669},[186,125143,124802],{"class":532},[186,125145,125146],{"class":202}," KERNELS",[186,125148,529],{"class":669},[186,125150,125151],{"class":532},"=\"1-1.3:1.0\",",[186,125153,125154],{"class":198}," MODE:",[186,125156,529],{"class":532},[186,125158,125159],{"class":198},"\"0777\"",[186,125161,1988],{"class":198},[186,125163,125164],{"class":532}," SYMLINK+=\"rplidar_front\"\n",[186,125166,125167,125169,125171,125173,125175,125177,125180,125182,125184,125186,125188],{"class":188,"line":49},[186,125168,124797],{"class":202},[186,125170,529],{"class":669},[186,125172,124802],{"class":532},[186,125174,125146],{"class":202},[186,125176,529],{"class":669},[186,125178,125179],{"class":532},"=\"1-1.4:1.0\",",[186,125181,125154],{"class":198},[186,125183,529],{"class":532},[186,125185,125159],{"class":198},[186,125187,1988],{"class":198},[186,125189,125190],{"class":532}," SYMLINK+=\"rplidar_back\"\n",[169,125192,124882],{},[169,125194,124885],{},[176,125196,125197],{"className":118727,"code":124888,"language":118729,"meta":181,"style":181},[183,125198,125199,125203,125213,125223,125227,125231,125241],{"__ignoreMap":181},[186,125200,125201],{"class":188,"line":189},[186,125202,124895],{"class":192},[186,125204,125205,125207,125209,125211],{"class":188,"line":49},[186,125206,26035],{"class":198},[186,125208,121479],{"class":532},[186,125210,124904],{"class":532},[186,125212,124907],{"class":532},[186,125214,125215,125217,125219,125221],{"class":188,"line":219},[186,125216,26035],{"class":198},[186,125218,121479],{"class":532},[186,125220,124904],{"class":532},[186,125222,124918],{"class":532},[186,125224,125225],{"class":188,"line":225},[186,125226,3867],{"emptyLinePlaceholder":1551},[186,125228,125229],{"class":188,"line":242},[186,125230,124927],{"class":192},[186,125232,125233,125235,125237,125239],{"class":188,"line":248},[186,125234,26035],{"class":198},[186,125236,124934],{"class":532},[186,125238,124937],{"class":532},[186,125240,124940],{"class":206},[186,125242,125243,125245,125247],{"class":188,"line":265},[186,125244,26035],{"class":198},[186,125246,124934],{"class":532},[186,125248,124949],{"class":532},[169,125250,124952],{},[169,125252,124955],{},[169,125254,124958,125255,125258],{},[183,125256,125257],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[169,125260,125261],{},[164,125262],{"alt":181,"src":125263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[169,125265,125266],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[169,125268,125269,125271],{},[54,125270,119395],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[29,125273,125275],{"id":125274},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[169,125277,125278],{},"（1）.查看所连接的主机USB接口的信息",[176,125280,125282],{"className":118727,"code":125281,"language":118729,"meta":181,"style":181},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[183,125283,125284,125314],{"__ignoreMap":181},[186,125285,125286,125288,125290,125293,125295,125297,125299,125301,125304,125307,125309,125312],{"class":188,"line":189},[186,125287,125034],{"class":198},[186,125289,71258],{"class":532},[186,125291,125292],{"class":206}," -a",[186,125294,30671],{"class":206},[186,125296,29877],{"class":202},[186,125298,125034],{"class":198},[186,125300,71258],{"class":532},[186,125302,125303],{"class":206}," -q",[186,125305,125306],{"class":532}," path",[186,125308,26574],{"class":206},[186,125310,125311],{"class":532}," \u002Fdev\u002FttyACM0",[186,125313,1629],{"class":202},[186,125315,125316,125318,125320,125322,125324,125326,125328,125330,125332,125334,125336,125339],{"class":188,"line":49},[186,125317,125034],{"class":198},[186,125319,71258],{"class":532},[186,125321,125292],{"class":206},[186,125323,30671],{"class":206},[186,125325,29877],{"class":202},[186,125327,125034],{"class":198},[186,125329,71258],{"class":532},[186,125331,125303],{"class":206},[186,125333,125306],{"class":532},[186,125335,26574],{"class":206},[186,125337,125338],{"class":532}," \u002Fdev\u002FttyUSB0",[186,125340,1629],{"class":202},[169,125342,125343],{},[164,125344],{"alt":181,"src":125345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[169,125347,125348],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[169,125350,124763],{},[169,125352,124766,125353,125118],{},[183,125354,124769],{},[176,125356,125357],{"className":118727,"code":124773,"language":118729,"meta":181,"style":181},[183,125358,125359],{"__ignoreMap":181},[186,125360,125361,125363,125365],{"class":188,"line":189},[186,125362,26035],{"class":198},[186,125364,120014],{"class":532},[186,125366,124784],{"class":532},[176,125368,125370],{"className":118727,"code":125369,"language":118729,"meta":181,"style":181},"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",[183,125371,125372,125400,125426],{"__ignoreMap":181},[186,125373,125374,125376,125378,125381,125383,125385,125387,125389,125392,125395,125397],{"class":188,"line":189},[186,125375,124797],{"class":202},[186,125377,529],{"class":669},[186,125379,125380],{"class":532},"=\"ttyACM*\",",[186,125382,124805],{"class":198},[186,125384,124808],{"class":532},[186,125386,124837],{"class":198},[186,125388,1988],{"class":198},[186,125390,125391],{"class":532}," ATTRS{idProduct}==\"55d4\",",[186,125393,125394],{"class":532}," ATTRS{serial}==\"0001\",",[186,125396,124819],{"class":532},[186,125398,125399],{"class":532}," SYMLINK+=\"ttyACM_MCU\"\n",[186,125401,125402,125404,125406,125408,125410,125412,125414,125416,125418,125421,125423],{"class":188,"line":49},[186,125403,124797],{"class":202},[186,125405,529],{"class":669},[186,125407,125380],{"class":532},[186,125409,124805],{"class":198},[186,125411,124808],{"class":532},[186,125413,124837],{"class":198},[186,125415,1988],{"class":198},[186,125417,125391],{"class":532},[186,125419,125420],{"class":532}," ATTRS{serial}==\"0002\",",[186,125422,124819],{"class":532},[186,125424,125425],{"class":532}," SYMLINK+=\"ttyACM_Lidar\"\n",[186,125427,125428,125430,125432,125434,125436,125438,125440,125442,125444,125446],{"class":188,"line":219},[186,125429,124797],{"class":202},[186,125431,529],{"class":669},[186,125433,124802],{"class":532},[186,125435,124805],{"class":198},[186,125437,124808],{"class":532},[186,125439,124837],{"class":198},[186,125441,1988],{"class":198},[186,125443,124842],{"class":532},[186,125445,124819],{"class":532},[186,125447,125448],{"class":532}," SYMLINK+=\"ttyUSB_IMU\"\n",[169,125450,124882],{},[169,125452,124885],{},[176,125454,125455],{"className":118727,"code":124888,"language":118729,"meta":181,"style":181},[183,125456,125457,125461,125471,125481,125485,125489,125499],{"__ignoreMap":181},[186,125458,125459],{"class":188,"line":189},[186,125460,124895],{"class":192},[186,125462,125463,125465,125467,125469],{"class":188,"line":49},[186,125464,26035],{"class":198},[186,125466,121479],{"class":532},[186,125468,124904],{"class":532},[186,125470,124907],{"class":532},[186,125472,125473,125475,125477,125479],{"class":188,"line":219},[186,125474,26035],{"class":198},[186,125476,121479],{"class":532},[186,125478,124904],{"class":532},[186,125480,124918],{"class":532},[186,125482,125483],{"class":188,"line":225},[186,125484,3867],{"emptyLinePlaceholder":1551},[186,125486,125487],{"class":188,"line":242},[186,125488,124927],{"class":192},[186,125490,125491,125493,125495,125497],{"class":188,"line":248},[186,125492,26035],{"class":198},[186,125494,124934],{"class":532},[186,125496,124937],{"class":532},[186,125498,124940],{"class":206},[186,125500,125501,125503,125505],{"class":188,"line":265},[186,125502,26035],{"class":198},[186,125504,124934],{"class":532},[186,125506,124949],{"class":532},[169,125508,125509,125510],{},"再重新插拔设备即可，或者 ",[54,125511,125512],{},"直接重启系统。",[169,125514,124955],{},[169,125516,124958,125517,125258],{},[183,125518,125257],{},[169,125520,125521],{},[164,125522],{"alt":181,"src":125523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[169,125525,125266],{},[169,125527,125528,125530],{},[54,125529,119395],{}," 一些设备可能没有串口号等。",[29,125532,125534],{"id":125533},"_744-其他注意事项","7.4.4 其他注意事项",[169,125536,125537,125538,125540,125541,125544,125545,19871,125548,125551,125552,125554],{},"并非所有的USB设备端口号都是",[183,125539,124992],{},"的格式，比如Arduino的端口号可能是",[183,125542,125543],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[183,125546,125547],{},"videon",[183,125549,125550],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[183,125553,125547],{},"端口，绑定时需要关联的也是该接口。",[169,125556,125557,125558,125561,125562,125565,125566,125568,125569,125572,125573,125576,125577,125580,125581,125580,125584,125580,125587,913],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[183,125559,125560],{},"KERNEL==\"ttyUSB*\"","修改为",[183,125563,125564],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[183,125567,125560],{},"修改为类似于",[183,125570,125571],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[183,125574,125575],{},"video[0,2,4,6]","表示可以绑定的端口为",[183,125578,125579],{},"video0","或",[183,125582,125583],{},"video2",[183,125585,125586],{},"video4",[183,125588,125589],{},"video6",[14,125591,125593],{"id":125592},"_75-挂载内网网页","7.5 挂载内网网页",[169,125595,125596],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[169,125598,125599],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[169,125601,125602],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[169,125604,125605,125606],{},"Termux 下载地址（F-Droid）：",[948,125607,125608],{"href":125608,"rel":125609},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[952],[169,125611,125612],{},"首先打开app后，先更新软件缓存：",[176,125614,125616],{"className":118727,"code":125615,"language":118729,"meta":181,"style":181},"pkg update\n",[183,125617,125618],{"__ignoreMap":181},[186,125619,125620,125623],{"class":188,"line":189},[186,125621,125622],{"class":198},"pkg",[186,125624,27699],{"class":532},[169,125626,125627],{},"然后换源",[176,125629,125631],{"className":118727,"code":125630,"language":118729,"meta":181,"style":181},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[183,125632,125633],{"__ignoreMap":181},[186,125634,125635,125637,125640],{"class":188,"line":189},[186,125636,124505],{"class":198},[186,125638,125639],{"class":202}," $PREFIX",[186,125641,125642],{"class":532},"\u002Fetc\u002Fapt\u002Fsources.list\n",[169,125644,125645],{},"将该文件内容替换为下面：",[176,125647,125649],{"className":118727,"code":125648,"language":118729,"meta":181,"style":181},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[183,125650,125651],{"__ignoreMap":181},[186,125652,125653,125656,125659,125662],{"class":188,"line":189},[186,125654,125655],{"class":198},"deb",[186,125657,125658],{"class":532}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[186,125660,125661],{"class":532}," stable",[186,125663,125664],{"class":532}," main\n",[19,125666,125667,125694],{},[22,125668,125669,125670,125672,125673],{},"如果你使用的是",[183,125671,124505],{},"编辑器：",[19,125674,125675,125682,125688],{},[22,125676,125677,125678,125681],{},"按 ",[183,125679,125680],{},"Ctrl+O"," 保存文件。",[22,125683,125677,125684,125687],{},[183,125685,125686],{},"Enter"," 确认文件名。",[22,125689,125677,125690,125693],{},[183,125691,125692],{},"Ctrl+X"," 退出编辑器。",[22,125695,125669,125696,125672,125699],{},[183,125697,125698],{},"vim",[19,125700,125701,125707],{},[22,125702,125677,125703,125706],{},[183,125704,125705],{},"Esc"," 退出编辑模式。",[22,125708,125709,125710,125712],{},"输入 ",[183,125711,120652],{}," 保存并退出。",[169,125714,125715],{},"接下来重新更新软件源：",[176,125717,125719],{"className":118727,"code":125718,"language":118729,"meta":181,"style":181},"pkg update && pkg upgrade\n",[183,125720,125721],{"__ignoreMap":181},[186,125722,125723,125725,125727,125729,125731],{"class":188,"line":189},[186,125724,125622],{"class":198},[186,125726,118778],{"class":532},[186,125728,27647],{"class":202},[186,125730,125622],{"class":198},[186,125732,118764],{"class":532},[169,125734,125735],{},"安装python：",[176,125737,125739],{"className":118727,"code":125738,"language":118729,"meta":181,"style":181},"pkg install python\n",[183,125740,125741],{"__ignoreMap":181},[186,125742,125743,125745,125747],{"class":188,"line":189},[186,125744,125622],{"class":198},[186,125746,25293],{"class":532},[186,125748,125749],{"class":532}," python\n",[169,125751,125752,27930],{},[54,125753,125754],{},"通过Termux访问设备存储",[169,125756,125757],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[176,125759,125761],{"className":118727,"code":125760,"language":118729,"meta":181,"style":181},"termux-setup-storage\n",[183,125762,125763],{"__ignoreMap":181},[186,125764,125765],{"class":188,"line":189},[186,125766,125760],{"class":198},[34,125768,125769],{},[22,125770,125771,27930,125774],{},[54,125772,125773],{},"进入HTML文件所在的目录",[34,125775,125776],{},[22,125777,125778,125779,125781],{},"使用",[183,125780,102707],{},"命令进入HTML文件所在的目录：",[176,125783,125785],{"className":118727,"code":125784,"language":118729,"meta":181,"style":181},"cd ~\u002Fyour_html_folder\n",[183,125786,125787],{"__ignoreMap":181},[186,125788,125789,125791],{"class":188,"line":189},[186,125790,102707],{"class":206},[186,125792,125793],{"class":532}," ~\u002Fyour_html_folder\n",[34,125795,125796],{"start":49},[22,125797,125798,27930,125801,125806,125823],{},[54,125799,125800],{},"启动Python HTTP服务器",[34,125802,125803],{},[22,125804,125805],{},"运行以下命令启动一个简单的HTTP服务器：",[176,125807,125809],{"className":118727,"code":125808,"language":118729,"meta":181,"style":181},"python -m http.server 8000\n",[183,125810,125811],{"__ignoreMap":181},[186,125812,125813,125815,125817,125820],{"class":188,"line":189},[186,125814,31835],{"class":198},[186,125816,102313],{"class":206},[186,125818,125819],{"class":532}," http.server",[186,125821,125822],{"class":206}," 8000\n",[34,125824,125825],{"start":219},[22,125826,125827,125828,125831],{},"这会在端口",[183,125829,125830],{},"8000","上启动一个Web服务器。",[19,125833,125834],{},[22,125835,125836],{},"启动服务器后，Termux会显示日志信息，例如：",[176,125838,125840],{"className":122247,"code":125839,"language":122249,"meta":122250,"style":181},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[183,125841,125842],{"__ignoreMap":181},[186,125843,125844],{"class":188,"line":189},[186,125845,125839],{},[19,125847,125848],{},[22,125849,125850],{},"这表示服务器已成功启动。",[169,125852,125853],{},[54,125854,125855],{},"在浏览器中访问HTML文件",[34,125857,125858],{},[22,125859,125860,27930,125863,125868],{},[54,125861,125862],{},"在同一设备上访问",[34,125864,125865],{},[22,125866,125867],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[176,125869,125872],{"className":125870,"code":125871,"language":73098,"meta":181,"style":181},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[183,125873,125874],{"__ignoreMap":181},[186,125875,125876,125879],{"class":188,"line":189},[186,125877,125878],{"class":202},"http:",[186,125880,125881],{"class":192},"\u002F\u002Flocalhost:8000\n",[19,125883,125884],{},[22,125885,125886,125887,125890],{},"如果HTML文件中有",[183,125888,125889],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125892,125894],{"id":125893},"_76-linux重点知识","7.6 Linux重点知识",[29,125896,125898],{"id":125897},"_761-关于点的说明","7.6.1 关于点的说明",[169,125900,125901],{},[164,125902],{"alt":181,"src":125903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[169,125905,125906],{},"一点本目录，两点上目录",[29,125908,125910],{"id":125909},"_762-目录","7.6.2 目录",[23459,125912,125914],{"id":125913},"_7621-系统启动必须","7.6.2.1 系统启动必须",[169,125916,125917],{},[54,125918,125919],{},"\u002Fboot:",[169,125921,125922],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[169,125924,125925],{},[54,125926,125927],{},"\u002Fetc:",[169,125929,125930],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[169,125932,125933],{},[54,125934,125935],{},"\u002Flib：",[169,125937,125938],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[169,125940,125941],{},[54,125942,125943],{},"\u002Fsys:",[169,125945,125946],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23459,125948,125950],{"id":125949},"_7622-指令集合","7.6.2.2 指令集合",[169,125952,125953],{},[54,125954,125955],{},"\u002Fbin:",[169,125957,125958],{},"为二进制文件的缩写，存放最经常使用的命令",[169,125960,125961],{},[54,125962,125963],{},"\u002Fsbin:",[169,125965,125966],{},"只有系统管理员才能使用的程序和指令",[23459,125968,125970],{"id":125969},"_7623-外部文件管理","7.6.2.3 外部文件管理",[169,125972,125973],{},[54,125974,125975],{},"\u002Fdev:",[169,125977,125978],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[169,125980,125981],{},[54,125982,125983],{},"\u002Fmedia:",[169,125985,125986],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[169,125988,125989],{},[54,125990,125991],{},"\u002Fmnt:",[169,125993,125994],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23459,125996,125998],{"id":125997},"_7624-临时文件","7.6.2.4 临时文件",[169,126000,126001],{},[54,126002,126003],{},"\u002Frun:",[169,126005,126006],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[169,126008,126009],{},[54,126010,126011],{},"\u002Flost+found:",[169,126013,126014],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[169,126016,126017],{},[54,126018,126019],{},"\u002Ftmp:",[169,126021,126022],{},"这个目录是用来存放一些临时文件的",[23459,126024,126026],{"id":126025},"_7625-账户","7.6.2.5 账户",[169,126028,126029],{},[54,126030,126031],{},"\u002Froot：",[169,126033,126034],{},"系统管理员的用户主目录",[169,126036,126037,27930],{},[54,126038,126039],{},"\u002Fhome",[169,126041,126042],{},"用户的主目录，以用户的账号命名的",[169,126044,126045,27930],{},[54,126046,126047],{},"\u002Fusr",[169,126049,126050],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[169,126052,126053],{},[54,126054,126055],{},"\u002Fusr\u002Fbin：",[169,126057,126058],{},"系统用户使用的应用程序与指令",[169,126060,126061],{},[54,126062,126063],{},"\u002Fusr\u002Fsbin：",[169,126065,126066],{},"超级用户使用的比较高级的管理程序和系统守护程序",[169,126068,126069],{},[54,126070,126071],{},"\u002Fusr\u002Fsrc：",[169,126073,126074],{},"内核源代码默认的放置目录",[23459,126076,126078],{"id":126077},"_7626-运行过程要用","7.6.2.6 运行过程要用",[169,126080,126081],{},[54,126082,126083],{},"\u002Fvar：",[169,126085,126086],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[169,126088,126089],{},[54,126090,126091],{},"\u002Fproc:",[169,126093,126094,126095,126098],{},"管理 ",[54,126096,126097],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23459,126100,126102],{"id":126101},"_7627-扩展用的","7.6.2.7 扩展用的",[169,126104,126105],{},[54,126106,126107],{},"\u002Fopt:",[169,126109,126110],{},"默认是空的，我们安装额外软件可以放在这个里面",[169,126112,126113],{},[54,126114,126115],{},"\u002Fsrv:",[169,126117,126118],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[29,126120,126122],{"id":126121},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[169,126124,126125],{},[164,126126],{"alt":181,"src":126127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[169,126129,126130],{},"windows-->linux:",[169,126132,126133],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[169,126135,126136],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[169,126138,126139],{},"linux传输文件到windows",[169,126141,126142],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[29,126144,126146],{"id":126145},"_764-易忘知识","7.6.4 易忘知识",[169,126148,126149],{},"操作系统内核查看",[176,126151,126152],{"className":118727,"code":122721,"language":118729,"meta":181,"style":181},[183,126153,126154],{"__ignoreMap":181},[186,126155,126156,126158],{"class":188,"line":189},[186,126157,71641],{"class":198},[186,126159,122730],{"class":206},[169,126161,126162],{},[164,126163],{"alt":181,"src":126164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[169,126166,126167],{},[164,126168],{"alt":181,"src":126169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[176,126171,126173],{"className":118727,"code":126172,"language":118729,"meta":181,"style":181},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[183,126174,126175,126187],{"__ignoreMap":181},[186,126176,126177,126179,126182,126185],{"class":188,"line":189},[186,126178,122938],{"class":198},[186,126180,126181],{"class":532}," mvtest",[186,126183,126184],{"class":532}," mvtest2",[186,126186,4141],{"class":202},[186,126188,126189],{"class":188,"line":49},[186,126190,126191],{"class":198},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[169,126193,126194],{},[164,126195],{"alt":181,"src":126196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[169,126198,126199],{},[164,126200],{"alt":181,"src":126201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[169,126203,126204,126205,126208],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[183,126206,126207],{},"du -a"," 可以快速查看磁盘使用细节。",[29,126210,126212],{"id":126211},"_765-vim","7.6.5 Vim",[169,126214,126215],{},[164,126216],{"alt":181,"src":126217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[169,126219,126220],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[169,126222,126223],{},"一开始进去为命令模式，此时点击输入的字母为命令",[169,126225,126226],{},[54,126227,126228],{},"1.命令模式：",[169,126230,126231],{},"i 切换到输入模式，在光标当前位置开始输入文本",[169,126233,126234],{},"x 删除当前光标所在处的字符",[169,126236,126237],{},"：切换到底线命令模式，以在最底一行输入命令",[169,126239,126240],{},"a 进行插入模式，在光标下一个位置输入文本",[169,126242,126243],{},"o 在当前的下方插入一个新行，并进入插入模式",[169,126245,126246],{},"0 在当前行的上方插入一个新行，并进入插入模式",[169,126248,126249],{},"dd 剪切当前行",[169,126251,126252],{},"yy 复制当前行",[169,126254,126255],{},"p 粘贴剪贴板内容到光标下方",[169,126257,126258],{},"P 粘贴剪贴板内容到光标上方",[169,126260,126261],{},"u 撤销上一次操作",[169,126263,126264],{},"ctrl+r 重做上一次操作",[169,126266,126267,126269],{},[2403,126268],{}," 保存文件",[169,126271,126272,126274],{},[2255,126273],{}," 退出Vim编辑器",[169,126276,126277,126279],{},[2255,126278],{},"! 强制退出Vim编辑器，不保存修改",[169,126281,126282],{},[54,126283,126284],{},"2.输入模式：",[169,126286,126287],{},[164,126288],{"alt":181,"src":126289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[169,126291,126292],{},[54,126293,126294],{},"3.底线命令模式：",[169,126296,126297],{},[164,126298],{"alt":181,"src":126299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[169,126301,126302],{},"按下esc可以退出底线命令模式",[29,126304,126306],{"id":126305},"_766-apt","7.6.6 apt",[169,126308,126309],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[29,126311,126313],{"id":126312},"_767-home与root的区别","7.6.7 home与root的区别",[169,126315,126316],{},[164,126317],{"alt":181,"src":126318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[169,126320,126321],{},[164,126322],{"alt":181,"src":126323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[169,126325,126326],{},[164,126327],{"alt":181,"src":126328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[169,126330,126331],{},[164,126332],{"alt":181,"src":126333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[29,126335,126337],{"id":126336},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[169,126339,126340],{},[948,126341,126342],{"href":126342,"rel":126343},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[952],[34,126345,126346,126349],{},[22,126347,126348],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[22,126350,126351],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[169,126353,126354],{},[164,126355],{"alt":181,"src":126356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[169,126358,126359],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[169,126361,126362],{},[164,126363],{"alt":181,"src":126364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[176,126366,126368],{"className":122247,"code":126367,"language":122249,"meta":122250,"style":181},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[183,126369,126370,126375],{"__ignoreMap":181},[186,126371,126372],{"class":188,"line":189},[186,126373,126374],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[186,126376,126377],{"class":188,"line":49},[186,126378,126379],{},".\u002Fpycharm.sh\n",[169,126381,126382],{},"3️⃣创建.desktop文件",[169,126384,126385],{},[54,126386,126387],{},"原理：",[19,126389,126390,126400],{},[22,126391,126392,126393,126399],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[54,126394,126395,126398],{},[183,126396,126397],{},".desktop"," 文件"," 来识别应用。",[22,126401,126402,126404,126405],{},[183,126403,126397],{}," 文件相当于一个“应用注册表”，告诉系统：",[19,126406,126407,126410,126413,126416,126419],{},[22,126408,126409],{},"应用名字（Name）",[22,126411,126412],{},"图标（Icon）",[22,126414,126415],{},"执行命令（Exec）",[22,126417,126418],{},"分类（Categories）",[22,126420,126421],{},"是否需要终端（Terminal）",[176,126423,126425],{"className":122247,"code":126424,"language":122249,"meta":122250,"style":181},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[183,126426,126427,126432],{"__ignoreMap":181},[186,126428,126429],{"class":188,"line":189},[186,126430,126431],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[186,126433,126434],{"class":188,"line":49},[186,126435,126436],{},"nano pycharm.desktop\n",[169,126438,126439],{},"nano是一个命令行下的编辑器，也可以使用vim",[176,126441,126443],{"className":122247,"code":126442,"language":122249,"meta":122250,"style":181},"[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",[183,126444,126445,126450,126455,126460,126465,126470,126475,126480,126485,126490],{"__ignoreMap":181},[186,126446,126447],{"class":188,"line":189},[186,126448,126449],{},"[Desktop Entry]\n",[186,126451,126452],{"class":188,"line":49},[186,126453,126454],{},"Version=1.0\n",[186,126456,126457],{"class":188,"line":219},[186,126458,126459],{},"Type=Application\n",[186,126461,126462],{"class":188,"line":225},[186,126463,126464],{},"Name=PyCharm\n",[186,126466,126467],{"class":188,"line":242},[186,126468,126469],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[186,126471,126472],{"class":188,"line":248},[186,126473,126474],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[186,126476,126477],{"class":188,"line":265},[186,126478,126479],{},"Comment=JetBrains PyCharm IDE\n",[186,126481,126482],{"class":188,"line":271},[186,126483,126484],{},"Categories=Development;IDE;\n",[186,126486,126487],{"class":188,"line":288},[186,126488,126489],{},"Terminal=false\n",[186,126491,126492],{"class":188,"line":294},[186,126493,126494],{},"StartupWMClass=jetbrains-pycharm\n",[19,126496,126497,126503,126509,126515],{},[22,126498,126499,126502],{},[183,126500,126501],{},"Exec"," → 点击图标时执行的命令",[22,126504,126505,126508],{},[183,126506,126507],{},"Icon"," → 显示在菜单和桌面上的图标",[22,126510,126511,126514],{},[183,126512,126513],{},"Terminal=false"," → 不打开终端",[22,126516,126517,126520],{},[183,126518,126519],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126522,126523,126524],"blockquote",{},[169,126525,126526,126527,126529,126530],{},"可以理解成 ",[183,126528,126397],{}," 文件是 Linux 的 ",[54,126531,126532],{},"快捷方式配置文件",[169,126534,126535],{},"4️⃣设置可执行权限",[176,126537,126539],{"className":122247,"code":126538,"language":122249,"meta":122250,"style":181},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[183,126540,126541],{"__ignoreMap":181},[186,126542,126543],{"class":188,"line":189},[186,126544,126538],{},[169,126546,126547],{},"5️⃣桌面图标启动的话如下：",[176,126549,126551],{"className":122247,"code":126550,"language":122249,"meta":122250,"style":181},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[183,126552,126553,126558],{"__ignoreMap":181},[186,126554,126555],{"class":188,"line":189},[186,126556,126557],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[186,126559,126560],{"class":188,"line":49},[186,126561,126562],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[34,126564,126565],{"start":219},[22,126566,126567],{},"下载Appimage文件实现软件的安装",[169,126569,126570],{},"1️⃣先下载appimage",[169,126572,126573],{},[948,126574,126575],{"href":126575,"rel":126576},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[952],[169,126578,126579],{},[164,126580],{"alt":181,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[169,126583,126584],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[169,126586,126587],{},[164,126588],{"alt":181,"src":126589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[169,126591,126592],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[169,126594,126595],{},[164,126596],{"alt":181,"src":126597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[169,126599,126600],{},[164,126601],{"alt":181,"src":126602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[169,126604,126605,126606,126609],{},"3️⃣给他们放在",[183,126607,126608],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[169,126611,126612],{},"4️⃣给软件执行权限",[176,126614,126616],{"className":122247,"code":126615,"language":122249,"meta":122250,"style":181},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[183,126617,126618,126623],{"__ignoreMap":181},[186,126619,126620],{"class":188,"line":189},[186,126621,126622],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[186,126624,126625],{"class":188,"line":49},[186,126626,126627],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[169,126629,126630],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[176,126632,126634],{"className":118727,"code":126633,"language":118729,"meta":181,"style":181},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[183,126635,126636,126643,126650,126656],{"__ignoreMap":181},[186,126637,126638,126640],{"class":188,"line":189},[186,126639,102707],{"class":206},[186,126641,126642],{"class":532}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[186,126644,126645,126647],{"class":188,"line":49},[186,126646,102714],{"class":198},[186,126648,126649],{"class":532}," .\u002Fqqmusic.desktop\n",[186,126651,126652,126654],{"class":188,"line":219},[186,126653,125698],{"class":198},[186,126655,126649],{"class":532},[186,126657,126658,126660,126662,126664],{"class":188,"line":225},[186,126659,26035],{"class":198},[186,126661,26038],{"class":532},[186,126663,124564],{"class":532},[186,126665,126649],{"class":532},[169,126667,126668,126670],{},[183,126669,102714],{},"：一个 Linux 命令，主要功能是：",[19,126672,126673,126676],{},[22,126674,126675],{},"如果文件不存在，就创建一个新的空文件",[22,126677,126678],{},"如果文件已存在，就更新该文件的最后修改时间",[176,126680,126682],{"className":122247,"code":126681,"language":122249,"meta":122250,"style":181},"[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",[183,126683,126684,126688,126693,126698,126703,126707,126712],{"__ignoreMap":181},[186,126685,126686],{"class":188,"line":189},[186,126687,126449],{},[186,126689,126690],{"class":188,"line":49},[186,126691,126692],{},"Name=QQ音乐\n",[186,126694,126695],{"class":188,"line":219},[186,126696,126697],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[186,126699,126700],{"class":188,"line":225},[186,126701,126702],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[186,126704,126705],{"class":188,"line":242},[186,126706,126459],{},[186,126708,126709],{"class":188,"line":248},[186,126710,126711],{},"Categories=Audio;Music;Player;\n",[186,126713,126714],{"class":188,"line":265},[186,126715,126716],{},"Comment=QQ Music Client for Linux\n",[169,126718,126719],{},"将文件复制进去",[169,126721,126722],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[169,126724,126725],{},[164,126726],{"alt":181,"src":126727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[169,126729,126730],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[169,126732,126733],{},[164,126734],{"alt":181,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[169,126737,126738,126739,126742,126743,126746],{},"如果你用的不是KDE，那么也可以直接修改",[183,126740,126741],{},"qqmuic.desktop","：在exec的末尾加上",[183,126744,126745],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[176,126748,126750],{"className":122247,"code":126749,"language":122249,"meta":122250,"style":181},"[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",[183,126751,126752,126756,126760,126765,126769,126773,126777],{"__ignoreMap":181},[186,126753,126754],{"class":188,"line":189},[186,126755,126449],{},[186,126757,126758],{"class":188,"line":49},[186,126759,126692],{},[186,126761,126762],{"class":188,"line":219},[186,126763,126764],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[186,126766,126767],{"class":188,"line":225},[186,126768,126702],{},[186,126770,126771],{"class":188,"line":242},[186,126772,126459],{},[186,126774,126775],{"class":188,"line":248},[186,126776,126711],{},[186,126778,126779],{"class":188,"line":265},[186,126780,126716],{},[169,126782,126783],{},[164,126784],{"alt":181,"src":126785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[169,126787,126788],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[176,126790,126792],{"className":122247,"code":126791,"language":122249,"meta":122250,"style":181},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[183,126793,126794],{"__ignoreMap":181},[186,126795,126796],{"class":188,"line":189},[186,126797,126791],{},[34,126799,126800],{"start":225},[22,126801,126802],{},"去Flathub上安装软件",[169,126804,126805],{},[948,126806,126807],{"href":126807,"rel":126808},"https:\u002F\u002Fflathub.org\u002F",[952],[169,126810,126811],{},"1️⃣去上面的官网搜索软件+下载软件",[169,126813,126814],{},[164,126815],{"alt":181,"src":126816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[176,126818,126820],{"className":122247,"code":126819,"language":122249,"meta":122250,"style":181},"flatpak install flathub com.obsproject.Studio\n",[183,126821,126822],{"__ignoreMap":181},[186,126823,126824],{"class":188,"line":189},[186,126825,126819],{},[169,126827,126828],{},[164,126829],{"alt":181,"src":126830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[169,126832,126833],{},"2️⃣运行软件",[169,126835,126836],{},"a.官方方式：",[169,126838,126839],{},[164,126840],{"alt":181,"src":126841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[176,126843,126844],{"className":122247,"code":126819,"language":122249,"meta":122250,"style":181},[183,126845,126846],{"__ignoreMap":181},[186,126847,126848],{"class":188,"line":189},[186,126849,126819],{},[169,126851,126852],{},"b.当普通软件运行：",[169,126854,126855],{},[164,126856],{"alt":181,"src":126857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[169,126859,126860],{},[164,126861],{"alt":181,"src":126862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1524,126864,126865],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":181,"searchDepth":49,"depth":49,"links":126867},[126868,126869,126874,126875,126881,126882],{"id":123600,"depth":49,"text":123601},{"id":123942,"depth":49,"text":123943,"children":126870},[126871,126872,126873],{"id":123946,"depth":219,"text":123947},{"id":124013,"depth":219,"text":124014},{"id":124274,"depth":219,"text":124275},{"id":124427,"depth":49,"text":124428},{"id":124665,"depth":49,"text":124666,"children":126876},[126877,126878,126879,126880],{"id":124717,"depth":219,"text":124718},{"id":125003,"depth":219,"text":125004},{"id":125274,"depth":219,"text":125275},{"id":125533,"depth":219,"text":125534},{"id":125592,"depth":49,"text":125593},{"id":125893,"depth":49,"text":125894,"children":126883},[126884,126885,126886,126887,126888,126889,126890,126891],{"id":125897,"depth":219,"text":125898},{"id":125909,"depth":219,"text":125910},{"id":126121,"depth":219,"text":126122},{"id":126145,"depth":219,"text":126146},{"id":126211,"depth":219,"text":126212},{"id":126305,"depth":219,"text":126306},{"id":126312,"depth":219,"text":126313},{"id":126336,"depth":219,"text":126337},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123592,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126898,"title":126899,"body":126900,"description":1548,"extension":1549,"meta":126904,"navigation":1551,"path":126905,"seo":126906,"stem":126907,"__hash__":126908},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126901,"toc":126902},[],{"title":181,"searchDepth":49,"depth":49,"links":126903},[],{"category":31718},"\u002Fwiki\u002F2025-01-27-linux",{"title":126899,"description":1548},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126910,"title":126911,"body":126912,"description":126916,"extension":1549,"meta":127307,"navigation":1551,"path":127308,"seo":127309,"stem":127310,"__hash__":127311},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126913,"toc":127305},[126914,126917,126921,126938,126941,126994,126998,127000,127040,127049,127053,127056,127297,127302],[169,126915,126916],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126918,126920],{"id":126919},"_1ubuntu环境配置","1.Ubuntu环境配置",[34,126922,126923,126926,126929,126932,126935],{},[22,126924,126925],{},"ubuntu环境换源",[22,126927,126928],{},"安装cuda",[22,126930,126931],{},"安装miniconda",[22,126933,126934],{},"安装pytorch",[22,126936,126937],{},"安装genesis",[169,126939,126940],{},"参考链接：",[176,126942,126944],{"className":25281,"code":126943,"language":25283,"meta":181,"style":181},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[183,126945,126946],{"__ignoreMap":181},[186,126947,126948,126951,126954,126957,126959,126962,126965,126967,126970,126973,126975,126978,126981,126983,126986,126989,126991],{"class":188,"line":189},[186,126949,126950],{"class":198},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[186,126952,126953],{"class":532},"=blogdetail",[186,126955,126956],{"class":202},"&sharetype",[186,126958,529],{"class":669},[186,126960,126961],{"class":532},"blogdetail",[186,126963,126964],{"class":202},"&sharerId",[186,126966,529],{"class":669},[186,126968,126969],{"class":532},"144728092",[186,126971,126972],{"class":202},"&sharerefer",[186,126974,529],{"class":669},[186,126976,126977],{"class":532},"PC",[186,126979,126980],{"class":202},"&sharesource",[186,126982,529],{"class":669},[186,126984,126985],{"class":532},"qq_69379513",[186,126987,126988],{"class":202},"&sharefrom",[186,126990,529],{"class":669},[186,126992,126993],{"class":532},"from_link\n",[10,126995,126997],{"id":126996},"_2genesis-报错issue","2.Genesis 报错issue",[169,126999,126940],{},[176,127001,127002],{"className":25281,"code":126943,"language":25283,"meta":181,"style":181},[183,127003,127004],{"__ignoreMap":181},[186,127005,127006,127008,127010,127012,127014,127016,127018,127020,127022,127024,127026,127028,127030,127032,127034,127036,127038],{"class":188,"line":189},[186,127007,126950],{"class":198},[186,127009,126953],{"class":532},[186,127011,126956],{"class":202},[186,127013,529],{"class":669},[186,127015,126961],{"class":532},[186,127017,126964],{"class":202},[186,127019,529],{"class":669},[186,127021,126969],{"class":532},[186,127023,126972],{"class":202},[186,127025,529],{"class":669},[186,127027,126977],{"class":532},[186,127029,126980],{"class":202},[186,127031,529],{"class":669},[186,127033,126985],{"class":532},[186,127035,126988],{"class":202},[186,127037,529],{"class":669},[186,127039,126993],{"class":532},[176,127041,127043],{"className":25281,"code":127042,"language":25283,"meta":181,"style":181},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[183,127044,127045],{"__ignoreMap":181},[186,127046,127047],{"class":188,"line":189},[186,127048,127042],{"class":198},[10,127050,127052],{"id":127051},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[169,127054,127055],{},"hello_robot.py",[176,127057,127059],{"className":31833,"code":127058,"language":31835,"meta":181,"style":181},"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",[183,127060,127061,127067,127082,127086,127098,127110,127114,127127,127131,127150,127160,127170,127184,127188,127192,127197,127201,127211,127218,127232,127239,127249,127254,127258,127276,127281,127285,127292],{"__ignoreMap":181},[186,127062,127063,127065],{"class":188,"line":189},[186,127064,31847],{"class":669},[186,127066,46759],{"class":202},[186,127068,127069,127072,127075,127077,127079],{"class":188,"line":49},[186,127070,127071],{"class":202},"os.environ[",[186,127073,127074],{"class":532},"'PYOPENGL_PLATFORM'",[186,127076,5909],{"class":202},[186,127078,529],{"class":669},[186,127080,127081],{"class":532}," 'glx'\n",[186,127083,127084],{"class":188,"line":219},[186,127085,3867],{"emptyLinePlaceholder":1551},[186,127087,127088,127090,127093,127095],{"class":188,"line":225},[186,127089,31847],{"class":669},[186,127091,127092],{"class":202}," genesis ",[186,127094,32838],{"class":669},[186,127096,127097],{"class":202}," gs\n",[186,127099,127100,127102,127105,127107],{"class":188,"line":242},[186,127101,32192],{"class":669},[186,127103,127104],{"class":202}," pynput ",[186,127106,31847],{"class":669},[186,127108,127109],{"class":202}," keyboard\n",[186,127111,127112],{"class":188,"line":248},[186,127113,3867],{"emptyLinePlaceholder":1551},[186,127115,127116,127119,127122,127124],{"class":188,"line":265},[186,127117,127118],{"class":202},"gs.init(",[186,127120,127121],{"class":835},"backend",[186,127123,529],{"class":669},[186,127125,127126],{"class":202},"gs.gpu)\n",[186,127128,127129],{"class":188,"line":271},[186,127130,3867],{"emptyLinePlaceholder":1551},[186,127132,127133,127136,127138,127141,127144,127146,127148],{"class":188,"line":288},[186,127134,127135],{"class":202},"scene ",[186,127137,529],{"class":669},[186,127139,127140],{"class":202}," gs.Scene(",[186,127142,127143],{"class":835},"show_viewer",[186,127145,529],{"class":669},[186,127147,32931],{"class":206},[186,127149,1629],{"class":202},[186,127151,127152,127155,127157],{"class":188,"line":294},[186,127153,127154],{"class":202},"plane ",[186,127156,529],{"class":669},[186,127158,127159],{"class":202}," scene.add_entity(gs.morphs.Plane())\n",[186,127161,127162,127165,127167],{"class":188,"line":1212},[186,127163,127164],{"class":202},"franka ",[186,127166,529],{"class":669},[186,127168,127169],{"class":202}," scene.add_entity(\n",[186,127171,127172,127175,127177,127179,127182],{"class":188,"line":1223},[186,127173,127174],{"class":202},"    gs.morphs.MJCF(",[186,127176,46808],{"class":835},[186,127178,529],{"class":669},[186,127180,127181],{"class":532},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[186,127183,1138],{"class":202},[186,127185,127186],{"class":188,"line":1236},[186,127187,1629],{"class":202},[186,127189,127190],{"class":188,"line":3096},[186,127191,3867],{"emptyLinePlaceholder":1551},[186,127193,127194],{"class":188,"line":3110},[186,127195,127196],{"class":202},"scene.build()\n",[186,127198,127199],{"class":188,"line":3115},[186,127200,3867],{"emptyLinePlaceholder":1551},[186,127202,127203,127205,127208],{"class":188,"line":3121},[186,127204,33402],{"class":669},[186,127206,127207],{"class":198}," on_press",[186,127209,127210],{"class":202},"(key):\n",[186,127212,127213,127216],{"class":188,"line":3142},[186,127214,127215],{"class":669},"    try",[186,127217,5205],{"class":202},[186,127219,127220,127222,127225,127227,127230],{"class":188,"line":3147},[186,127221,3964],{"class":669},[186,127223,127224],{"class":202}," key.char ",[186,127226,4415],{"class":669},[186,127228,127229],{"class":532}," 'q'",[186,127231,5205],{"class":202},[186,127233,127234,127236],{"class":188,"line":3161},[186,127235,17193],{"class":669},[186,127237,127238],{"class":206}," False\n",[186,127240,127241,127244,127247],{"class":188,"line":3166},[186,127242,127243],{"class":669},"    except",[186,127245,127246],{"class":206}," AttributeError",[186,127248,5205],{"class":202},[186,127250,127251],{"class":188,"line":3195},[186,127252,127253],{"class":669},"        pass\n",[186,127255,127256],{"class":188,"line":3200},[186,127257,3867],{"emptyLinePlaceholder":1551},[186,127259,127260,127263,127265,127268,127271,127273],{"class":188,"line":3217},[186,127261,127262],{"class":202},"listener ",[186,127264,529],{"class":669},[186,127266,127267],{"class":202}," keyboard.Listener(",[186,127269,127270],{"class":835},"on_press",[186,127272,529],{"class":669},[186,127274,127275],{"class":202},"on_press)\n",[186,127277,127278],{"class":188,"line":3222},[186,127279,127280],{"class":202},"listener.start()\n",[186,127282,127283],{"class":188,"line":3227},[186,127284,3867],{"emptyLinePlaceholder":1551},[186,127286,127287,127289],{"class":188,"line":3232},[186,127288,110094],{"class":669},[186,127290,127291],{"class":202}," listener.running:\n",[186,127293,127294],{"class":188,"line":3246},[186,127295,127296],{"class":202},"    scene.step()\n",[169,127298,127299],{},[164,127300],{"alt":181,"src":127301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1524,127303,127304],{},"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":181,"searchDepth":49,"depth":49,"links":127306},[],{"category":24839},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126911,"description":126916},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127313,"title":127314,"body":127315,"description":1548,"extension":1549,"meta":127330,"navigation":1551,"path":127331,"seo":127332,"stem":127333,"__hash__":127334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127316,"toc":127327},[127317,127320,127324],[10,127318,127314],{"id":127319},"_1-基础知识",[14,127321,127323],{"id":127322},"_11-js的组成","1.1 js的组成",[169,127325,127326],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":181,"searchDepth":49,"depth":49,"links":127328},[127329],{"id":127322,"depth":49,"text":127323},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127314,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127336,"title":127337,"body":127338,"description":1548,"extension":1549,"meta":127477,"navigation":1551,"path":127478,"seo":127479,"stem":127480,"__hash__":127481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127339,"toc":127465},[127340,127343,127347,127350,127354,127364,127368,127371,127374,127377,127381,127388,127394,127398,127404,127415,127419,127422,127426,127429,127433,127436,127440,127443,127447,127450,127453,127456,127459,127462],[10,127341,127337],{"id":127342},"_2-vscode必备内容",[14,127344,127346],{"id":127345},"_21-标签分类","2.1 标签分类",[169,127348,127349],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127351,127353],{"id":127352},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[169,127355,127356,127357,127359,127360,127363],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[183,127358,1838],{}," 然后按 ",[183,127361,127362],{},"Tab","，快速自动生成基本结构。",[14,127365,127367],{"id":127366},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[169,127369,127370],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[169,127372,127373],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[169,127375,127376],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127378,127380],{"id":127379},"_24-视图缩放","2.4 视图缩放",[169,127382,127383,127384,127387],{},"缩放视图 ",[183,127385,127386],{},"ctrl+"," 可实现代码增大。",[169,127389,127390,127393],{},[183,127391,127392],{},"ctrl-"," 可实现代码减小。",[14,127395,127397],{"id":127396},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[169,127399,127400,127401,913],{},"VSCode 新建文件快捷键为 ",[183,127402,127403],{},"ctrl+N",[169,127405,127406,127407,127410,127411,127414],{},"保存快捷键为 ",[183,127408,127409],{},"ctrl+S","，将文本保存为 ",[183,127412,127413],{},".html"," 文件。",[14,127416,127418],{"id":127417},"_26-auto-rename-tag","2.6 Auto Rename Tag",[169,127420,127421],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127423,127425],{"id":127424},"_27-vscode-icons","2.7 vscode-icons",[169,127427,127428],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127430,127432],{"id":127431},"_28-easy-less","2.8 Easy LESS",[169,127434,127435],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127437,127439],{"id":127438},"_29-会了吧插件","2.9 会了吧插件",[169,127441,127442],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127444,127446],{"id":127445},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[169,127448,127449],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[169,127451,127452],{},"②选定多个相同的单词:ctrl+D",[169,127454,127455],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[169,127457,127458],{},"④全局替换某些单词:ctrl+h",[169,127460,127461],{},"⑤快速定位到某一行:ctrl+g",[169,127463,127464],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":181,"searchDepth":49,"depth":49,"links":127466},[127467,127468,127469,127470,127471,127472,127473,127474,127475,127476],{"id":127345,"depth":49,"text":127346},{"id":127352,"depth":49,"text":127353},{"id":127366,"depth":49,"text":127367},{"id":127379,"depth":49,"text":127380},{"id":127396,"depth":49,"text":127397},{"id":127417,"depth":49,"text":127418},{"id":127424,"depth":49,"text":127425},{"id":127431,"depth":49,"text":127432},{"id":127438,"depth":49,"text":127439},{"id":127445,"depth":49,"text":127446},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127337,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127483,"title":127484,"body":127485,"description":1548,"extension":1549,"meta":127644,"navigation":1551,"path":127645,"seo":127646,"stem":127647,"__hash__":127648},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127486,"toc":127636},[127487,127490,127494,127504,127510,127516,127520,127529,127533,127538,127541,127544,127548,127551,127561,127570,127579,127588,127598,127605,127610,127615,127628],[10,127488,127484],{"id":127489},"_3-html文本与容器标签",[14,127491,127493],{"id":127492},"_31-标题标签","3.1 标题标签",[169,127495,127496,127499,127500,127503],{},[183,127497,127498],{},"\u003Ch1>","我是一级标签",[183,127501,127502],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[169,127505,127506,127499,127508],{},[183,127507,127498],{},[183,127509,127502],{},[169,127511,124766,127512,127515],{},[183,127513,127514],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127517,127519],{"id":127518},"_32-段落标签","3.2 段落标签",[169,127521,127522,127525,127526],{},[183,127523,127524],{},"\u003Cp>","....",[183,127527,127528],{},"\u003C\u002Fp>",[14,127530,127532],{"id":127531},"_33-换行标签","3.3 换行标签",[169,127534,127535],{},[183,127536,127537],{},"\u003Cbr \u002F>",[169,127539,127540],{},"具有强制换行的作用",[169,127542,127543],{},"单标签",[14,127545,127547],{"id":127546},"_34-文本格式化标签","3.4 文本格式化标签",[169,127549,127550],{},"提供粗体、斜体和下划线等效果",[169,127552,127553,127554,83971,127557,127560],{},"加粗：",[183,127555,127556],{},"\u003Cstrong>...\u003C\u002Fstrong>",[183,127558,127559],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[169,127562,127563,127564,83971,127567,127560],{},"斜体：",[183,127565,127566],{},"\u003Cem>...\u003C\u002Fem>",[183,127568,127569],{},"\u003Ci>...\u003C\u002Fi>",[169,127571,127572,127573,83971,127576,127560],{},"删除线：",[183,127574,127575],{},"\u003Cdel>...\u003C\u002Fdel>",[183,127577,127578],{},"\u003Cs>...\u003C\u002Fs>",[169,127580,127581,127582,83971,127585,127560],{},"下划线：",[183,127583,127584],{},"\u003Cins>...\u003C\u002Fins>",[183,127586,127587],{},"\u003Cu>...\u003C\u002Fu>",[14,127589,127591,127592,19871,127595,104124],{"id":127590},"_35-div和span标签","3.5 ",[183,127593,127594],{},"\u003Cdiv>",[183,127596,127597],{},"\u003Cspan>",[169,127599,127600,102449,127602,127604],{},[183,127601,127594],{},[183,127603,127597],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[169,127606,127607],{},[183,127608,127609],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[169,127611,127612],{},[183,127613,127614],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[169,127616,127617,127618,127620,127621,127623,127624,127627],{},"两者特点：①",[183,127619,127594],{}," 标签用来布局，但一行通常只放一个 ",[183,127622,127594],{},"。可以理解为一个大盒子，独占一行，在 ",[183,127625,127626],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[169,127629,78682,127630,127632,127633,127635],{},[183,127631,127597],{}," 标签也可用于布局，一行可以放多个 ",[183,127634,127597],{},"，可理解为小盒子。",{"title":181,"searchDepth":49,"depth":49,"links":127637},[127638,127639,127640,127641,127642],{"id":127492,"depth":49,"text":127493},{"id":127518,"depth":49,"text":127519},{"id":127531,"depth":49,"text":127532},{"id":127546,"depth":49,"text":127547},{"id":127590,"depth":49,"text":127643},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127484,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127650,"title":127651,"body":127652,"description":1548,"extension":1549,"meta":127848,"navigation":1551,"path":127849,"seo":127850,"stem":127851,"__hash__":127852},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127653,"toc":127840},[127654,127657,127661,127664,127670,127677,127683,127689,127692,127695,127698,127701,127704,127707,127710,127714,127717,127720,127723,127729,127735,127741,127748,127752,127758,127764,127767,127770,127776,127782,127788,127791,127794,127798,127801,127811,127817,127821,127830,127834,127837],[10,127655,127651],{"id":127656},"_4-html图像与链接",[14,127658,127660],{"id":127659},"_41-图像标签","4.1 图像标签",[169,127662,127663],{},"（1）标签",[169,127665,127666,127669],{},[183,127667,127668],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[169,127671,127672,127673,127676],{},"src是",[183,127674,127675],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[169,127678,127679,127680],{},"alt:文本，替换文本。图像不能显示的文字 ",[183,127681,127682],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[169,127684,127685,127686],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[183,127687,127688],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[169,127690,127691],{},"width:像素，设置图像的宽度",[169,127693,127694],{},"height:像素，设置图像的高度",[169,127696,127697],{},"border：像素，设置图像的边框粗细",[169,127699,127700],{},"（2）图像标签属性的注意点：",[169,127702,127703],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[169,127705,127706],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[169,127708,127709],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127711,127713],{"id":127712},"_42-路径注意要点","4.2 路径注意要点：",[169,127715,127716],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[169,127718,127719],{},"（2）根目录：就是打开文件夹的第一层根目录",[169,127721,127722],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[169,127724,127725,127726],{},"①同一级路径：图像文件位于HTML文件同一级，如",[183,127727,127728],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[169,127730,127731,127732],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[183,127733,127734],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[169,127736,127737,127738],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[183,127739,127740],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[169,127742,127743,127744,1862],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[948,127745,127746],{"href":127746,"rel":127747},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[952],[14,127749,127751],{"id":127750},"_43-超链接标签","4.3 超链接标签",[169,127753,127754,127757],{},[183,127755,127756],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[169,127759,127760,127761],{},"①语法格式：",[183,127762,127763],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[169,127765,127766],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[169,127768,127769],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[169,127771,127772,127773],{},"③链接分类：外部链接：",[183,127774,127775],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[169,127777,127778,127779],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[183,127780,127781],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[169,127783,127784,127785],{},"空链接：如果当时没有确定链接目标时，",[183,127786,127787],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[169,127789,127790],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[169,127792,127793],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127795,127797],{"id":127796},"_44-锚点链接","4.4 锚点链接",[169,127799,127800],{},"点我们点击链接，可以快速定位到页面中的某个位置",[169,127802,127803,127804,127807,127808],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[183,127805,127806],{},"\u003Ca href=\"#two\">","第二级",[183,127809,127810],{},"\u003C\u002Fa>",[169,127812,127813,127814],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[183,127815,127816],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127818,127820],{"id":127819},"_45-注释标签","4.5 注释标签",[169,127822,127823,127826,127827],{},[183,127824,127825],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[183,127828,127829],{},"ctrl+\u002F",[14,127831,127833],{"id":127832},"_46-特殊字符","4.6 特殊字符",[169,127835,127836],{},"可以实现添加多个空格",[164,127838],{"style":166,"src":127839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":181,"searchDepth":49,"depth":49,"links":127841},[127842,127843,127844,127845,127846,127847],{"id":127659,"depth":49,"text":127660},{"id":127712,"depth":49,"text":127713},{"id":127750,"depth":49,"text":127751},{"id":127796,"depth":49,"text":127797},{"id":127819,"depth":49,"text":127820},{"id":127832,"depth":49,"text":127833},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127651,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127854,"title":127855,"body":127856,"description":1548,"extension":1549,"meta":128147,"navigation":1551,"path":128148,"seo":128149,"stem":128150,"__hash__":128151},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127857,"toc":128138},[127858,127861,127865,127868,127871,127874,127877,127880,127883,127886,127889,127892,127912,127918,127922,127925,127928,127931,127934,127937,127940,127944,127947,127950,127953,127956,127969,127974,127977,127980,127993,127996,127999,128002,128005,128008,128012,128015,128022,128025,128028,128031,128034,128037,128043,128046,128049,128055,128058,128061,128064,128070,128073,128076,128090,128097,128100,128103,128110,128119,128122,128125,128128,128132,128135],[10,127859,127855],{"id":127860},"_5-html表格列表与表单",[14,127862,127864],{"id":127863},"_51-表格标签","5.1 表格标签",[169,127866,127867],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[169,127869,127870],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[169,127872,127873],{},"②表格基本语法：",[164,127875],{"style":166,"src":127876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[169,127878,127879],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[164,127881],{"style":166,"src":127882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[169,127884,127885],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[164,127887],{"style":166,"src":127888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[169,127890,127891],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[169,127893,127894,127897,127898,127900,127901,127904,127905,127907,127908,127911],{},[183,127895,127896],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[183,127899,127896],{},"内部必须拥有",[183,127902,127903],{},"\u003Ctr>","标签，一般位于第一行，",[183,127906,127896],{},"比",[183,127909,127910],{},"\u003Cth>","范围广",[169,127913,127914,127917],{},[183,127915,127916],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127919,127921],{"id":127920},"_52-合并单元格","5.2 合并单元格",[169,127923,127924],{},"（1）合并单元格方式：",[169,127926,127927],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[169,127929,127930],{},"②跨列合并：colspan=\"合并单元格的个数\"",[169,127932,127933],{},"（2）目标单元格：",[169,127935,127936],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[169,127938,127939],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127941,127943],{"id":127942},"_53-列表标签","5.3 列表标签",[169,127945,127946],{},"（1）分类：无序列表、有序列表、自定义列表",[169,127948,127949],{},"①无序列表：",[164,127951],{"style":166,"src":127952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[169,127954,127955],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[169,127957,127958,127961,127962,127965,127966,127968],{},[183,127959,127960],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[183,127963,127964],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[183,127967,127960],{},"中输入其他标签或文字是不对的",[169,127970,127971,127973],{},[183,127972,127964],{},"之间相当于一个容器，可以容纳所有元素",[169,127975,127976],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[169,127978,127979],{},"在css中去除前边的小圆点采用如下代码:",[176,127981,127983],{"className":178,"code":127982,"language":180,"meta":181,"style":181},"list-style: none;\n",[183,127984,127985],{"__ignoreMap":181},[186,127986,127987,127990],{"class":188,"line":189},[186,127988,127989],{"class":523},"list-style",[186,127991,127992],{"class":202},": none;\n",[169,127994,127995],{},"②有序列表：",[164,127997],{"style":166,"src":127998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[169,128000,128001],{},"③自定义列表：",[164,128003],{"style":166,"src":128004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[164,128006],{"style":166,"src":128007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128009,128011],{"id":128010},"_54-表单标签","5.4 表单标签",[169,128013,128014],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[169,128016,128017,128018,128021],{},"（1）表单域：包含单元素的区域，",[183,128019,128020],{},"\u003Cform>","标签可以实现信息的收集和传递。",[164,128023],{"style":166,"src":128024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[169,128026,128027],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[169,128029,128030],{},"表单元素提交必须有name属性",[169,128032,128033],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[169,128035,128036],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[169,128038,78659,128039,128042],{},[183,128040,128041],{},"\u003Cinput>","输入表单元素",[164,128044],{"style":166,"src":128045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[164,128047],{"style":166,"src":128048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[169,128050,128051,128052],{},"单选按钮：",[183,128053,128054],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[164,128056],{"style":166,"src":128057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[169,128059,128060],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[164,128062],{"style":166,"src":128063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[169,128065,128066,128069],{},[54,128067,128068],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[169,128071,128072],{},"②select下拉表单元素：可以节约页面控件",[164,128074],{"style":166,"src":128075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[169,128077,128078,15257,128080,128083,128084,128086,128087,128089],{},[54,128079,1652],{},[183,128081,128082],{},"\u003Cselect>","中至少包含一对",[183,128085,104145],{},"；在",[183,128088,104145],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[169,128091,128092,128093,128096],{},"③",[183,128094,128095],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[164,128098],{"style":166,"src":128099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[169,128101,128102],{},"3行20列",[14,128104,128106,128107,104124],{"id":128105},"_55-lable标签","5.5 ",[183,128108,128109],{},"\u003Clable>",[169,128111,128112,128113,128115,128116,128118],{},"它不是表单标签，但常常与表单标签搭配使用，",[183,128114,128109],{},"标签用于绑定一个表单标签，当点击",[183,128117,128109],{},"标签内的文本",[169,128120,128121],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[164,128123],{"style":166,"src":128124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[164,128126],{"style":166,"src":128127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128129,128131],{"id":128130},"_56-实例","5.6 实例",[164,128133],{"style":166,"src":128134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1524,128136,128137],{},"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":181,"searchDepth":49,"depth":49,"links":128139},[128140,128141,128142,128143,128144,128146],{"id":127863,"depth":49,"text":127864},{"id":127920,"depth":49,"text":127921},{"id":127942,"depth":49,"text":127943},{"id":128010,"depth":49,"text":128011},{"id":128105,"depth":49,"text":128145},"5.5 \u003Clable>标签",{"id":128130,"depth":49,"text":128131},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127855,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128153,"title":128154,"body":128155,"description":1548,"extension":1549,"meta":128703,"navigation":1551,"path":128704,"seo":128705,"stem":128706,"__hash__":128707},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128156,"toc":128678},[128157,128160,128164,128167,128170,128174,128177,128180,128183,128186,128189,128192,128195,128199,128202,128206,128209,128212,128215,128219,128222,128225,128228,128234,128237,128240,128243,128246,128249,128252,128255,128288,128292,128295,128298,128301,128305,128308,128311,128314,128317,128320,128324,128327,128330,128333,128337,128340,128344,128347,128351,128354,128359,128363,128366,128370,128373,128376,128379,128382,128409,128412,128416,128419,128422,128427,128430,128433,128437,128440,128444,128447,128450,128453,128457,128460,128463,128466,128470,128473,128476,128479,128483,128487,128490,128530,128533,128537,128544,128547,128551,128554,128600,128604,128607,128610,128613,128641,128645,128648,128675],[10,128158,128154],{"id":128159},"_6-css语法与文本样式",[14,128161,128163],{"id":128162},"_61-css语法规范","6.1 css语法规范",[169,128165,128166],{},"由两部分组成，选择器及一条或多条声明",[164,128168],{"style":166,"src":128169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[169,128171,128172],{},[54,128173,1652],{},[169,128175,128176],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[169,128178,128179],{},"②属性与属性值以“键值对”的形式出现",[169,128181,128182],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[169,128184,128185],{},"④属性和属性值之间用英文“;”分开",[164,128187],{"style":166,"src":128188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[164,128190],{"style":166,"src":128191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[164,128193],{"style":166,"src":128194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128196,128198],{"id":128197},"_62-css选择器","6.2 css选择器",[169,128200,128201],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[29,128203,128205],{"id":128204},"_621-标签选择器","6.2.1 标签选择器",[169,128207,128208],{},"①优点：能快速为页面中同类型的标签统一设置样式",[169,128210,128211],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[164,128213],{"style":166,"src":128214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[29,128216,128218],{"id":128217},"_622-类选择器","6.2.2 类选择器",[169,128220,128221],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[169,128223,128224],{},"②样例",[164,128226],{"style":166,"src":128227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[169,128229,128230,128231,128233],{},"③ ",[54,128232,128068],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[169,128235,128236],{},"可以理解为给这个标签起了个名字，来表示；",[169,128238,128239],{},"长名称或词组可以使用横线来为选择器命名；",[169,128241,128242],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[169,128244,128245],{},"命名要有意义；",[164,128247],{"style":166,"src":128248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[169,128250,128251],{},"类选择器也可以指定特殊的元素p.center{}",[169,128253,128254],{},"p.center和.center都对",[176,128256,128258],{"className":178,"code":128257,"language":180,"meta":181,"style":181},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[183,128259,128260,128265,128274,128284],{"__ignoreMap":181},[186,128261,128262],{"class":188,"line":189},[186,128263,128264],{"class":192},"\u002F* 类选择器指定特殊元素 *\u002F\n",[186,128266,128267,128269,128272],{"class":188,"line":49},[186,128268,169],{"class":523},[186,128270,128271],{"class":198},".center",[186,128273,622],{"class":202},[186,128275,128276,128278,128280,128282],{"class":188,"line":219},[186,128277,71963],{"class":206},[186,128279,210],{"class":202},[186,128281,53042],{"class":206},[186,128283,634],{"class":202},[186,128285,128286],{"class":188,"line":225},[186,128287,639],{"class":202},[29,128289,128291],{"id":128290},"_623-多类名使用","6.2.3 多类名使用",[169,128293,128294],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[164,128296],{"style":166,"src":128297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[169,128299,128300],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[29,128302,128304],{"id":128303},"_624-id选择器","6.2.4 id选择器",[169,128306,128307],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[169,128309,128310],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[164,128312],{"style":166,"src":128313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[169,128315,128316],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[169,128318,128319],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[29,128321,128323],{"id":128322},"_625-通配符选择器","6.2.5 通配符选择器",[169,128325,128326],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[169,128328,128329],{},"* {",[169,128331,128332],{},"color=\"red\"}",[29,128334,128336],{"id":128335},"_626-总结","6.2.6 总结",[164,128338],{"style":166,"src":128339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128341,128343],{"id":128342},"_63-css字体属性","6.3 css字体属性",[169,128345,128346],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[29,128348,128350],{"id":128349},"_631-字体系列","6.3.1 字体系列",[169,128352,128353],{},"font-family: '宋体';",[169,128355,128356,128358],{},[54,128357,1652],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[29,128360,128362],{"id":128361},"_632-字体大小","6.3.2 字体大小",[169,128364,128365],{},"font-size: 20px",[169,128367,128368,27930],{},[54,128369,128068],{},[169,128371,128372],{},"①px（像素）大小是网页的最常用单位",[169,128374,128375],{},"②谷歌浏览器默认为16px",[169,128377,128378],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[169,128380,128381],{},"④可以给body指定整个页面的大小：会自动引用",[176,128383,128385],{"className":178,"code":128384,"language":180,"meta":181,"style":181},"body {\n  font-size: 16px;\n}\n",[183,128386,128387,128393,128405],{"__ignoreMap":181},[186,128388,128389,128391],{"class":188,"line":189},[186,128390,53247],{"class":523},[186,128392,622],{"class":202},[186,128394,128395,128397,128399,128401,128403],{"class":188,"line":49},[186,128396,72061],{"class":206},[186,128398,210],{"class":202},[186,128400,2211],{"class":206},[186,128402,804],{"class":669},[186,128404,634],{"class":202},[186,128406,128407],{"class":188,"line":219},[186,128408,639],{"class":202},[169,128410,128411],{},"⑤标题标签比较特殊，需要单独指定大小",[29,128413,128415],{"id":128414},"_633-字体粗细","6.3.3 字体粗细",[169,128417,128418],{},"font-weight: bold;",[169,128420,128421],{},"font-weight: 100；",[169,128423,128424,128426],{},[54,128425,1652],{}," ①粗体文字变细：尽量别用normal，多用数字",[169,128428,128429],{},"font-weight= 400;",[169,128431,128432],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[29,128434,128436],{"id":128435},"_634-文字样式","6.3.4 文字样式",[169,128438,128439],{},"font-style: normal；",[169,128441,128442,27930],{},[54,128443,111],{},[169,128445,128446],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[169,128448,128449],{},"②italic：浏览器会显示斜体的字体样式",[164,128451],{"style":166,"src":128452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[29,128454,128456],{"id":128455},"_635-字体符合属性","6.3.5 字体符合属性",[164,128458],{"style":166,"src":128459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[164,128461],{"style":166,"src":128462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[169,128464,128465],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[169,128467,128468,27930],{},[54,128469,128068],{},[169,128471,128472],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[169,128474,128475],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[169,128477,128478],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128480,128482],{"id":128481},"_64-css-test文本属性","6.4 css test文本属性",[29,128484,128486],{"id":128485},"_641-文本颜色","6.4.1 文本颜色",[169,128488,128489],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[176,128491,128493],{"className":178,"code":128492,"language":180,"meta":181,"style":181},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[183,128494,128495,128500,128506,128516,128521,128526],{"__ignoreMap":181},[186,128496,128497],{"class":188,"line":189},[186,128498,128499],{"class":192},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[186,128501,128502,128504],{"class":188,"line":49},[186,128503,169],{"class":523},[186,128505,622],{"class":202},[186,128507,128508,128510,128512,128514],{"class":188,"line":219},[186,128509,72339],{"class":206},[186,128511,210],{"class":202},[186,128513,58862],{"class":206},[186,128515,634],{"class":202},[186,128517,128518],{"class":188,"line":225},[186,128519,128520],{"class":192},"  \u002F* color: #ff0000; *\u002F\n",[186,128522,128523],{"class":188,"line":242},[186,128524,128525],{"class":192},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[186,128527,128528],{"class":188,"line":248},[186,128529,639],{"class":202},[164,128531],{"style":166,"src":128532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[29,128534,128536],{"id":128535},"_642-对齐文本","6.4.2 对齐文本",[169,128538,128539,128540,128543],{},"text-align属于用于设置元素内文本内容的 ",[54,128541,128542],{},"水平对齐"," 方式",[169,128545,128546],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[29,128548,128550],{"id":128549},"_643-装饰文本","6.4.3 装饰文本",[169,128552,128553],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[176,128555,128557],{"className":178,"code":128556,"language":180,"meta":181,"style":181},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[183,128558,128559,128565,128575,128579,128585,128596],{"__ignoreMap":181},[186,128560,128561,128563],{"class":188,"line":189},[186,128562,948],{"class":523},[186,128564,622],{"class":202},[186,128566,128567,128569,128571,128573],{"class":188,"line":49},[186,128568,71939],{"class":206},[186,128570,210],{"class":202},[186,128572,56182],{"class":206},[186,128574,634],{"class":202},[186,128576,128577],{"class":188,"line":219},[186,128578,639],{"class":202},[186,128580,128581,128583],{"class":188,"line":225},[186,128582,169],{"class":523},[186,128584,622],{"class":202},[186,128586,128587,128589,128591,128594],{"class":188,"line":242},[186,128588,71939],{"class":206},[186,128590,210],{"class":202},[186,128592,128593],{"class":206},"underline",[186,128595,634],{"class":202},[186,128597,128598],{"class":188,"line":248},[186,128599,639],{"class":202},[29,128601,128603],{"id":128602},"_644-文本缩进","6.4.4 文本缩进",[169,128605,128606],{},"实现文本的第一行首行缩进自己指定的距离",[169,128608,128609],{},"20px往右边走；-20px往左边走",[169,128611,128612],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[176,128614,128616],{"className":178,"code":128615,"language":180,"meta":181,"style":181},"p {\n  text-indent: 2em;\n}\n",[183,128617,128618,128624,128637],{"__ignoreMap":181},[186,128619,128620,128622],{"class":188,"line":189},[186,128621,169],{"class":523},[186,128623,622],{"class":202},[186,128625,128626,128629,128631,128633,128635],{"class":188,"line":49},[186,128627,128628],{"class":206},"  text-indent",[186,128630,210],{"class":202},[186,128632,1697],{"class":206},[186,128634,25014],{"class":669},[186,128636,634],{"class":202},[186,128638,128639],{"class":188,"line":219},[186,128640,639],{"class":202},[29,128642,128644],{"id":128643},"_645-行间距","6.4.5 行间距",[169,128646,128647],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[176,128649,128651],{"className":178,"code":128650,"language":180,"meta":181,"style":181},"p {\n  line-height: 1.6;\n}\n",[183,128652,128653,128659,128671],{"__ignoreMap":181},[186,128654,128655,128657],{"class":188,"line":189},[186,128656,169],{"class":523},[186,128658,622],{"class":202},[186,128660,128661,128664,128666,128669],{"class":188,"line":49},[186,128662,128663],{"class":206},"  line-height",[186,128665,210],{"class":202},[186,128667,128668],{"class":206},"1.6",[186,128670,634],{"class":202},[186,128672,128673],{"class":188,"line":219},[186,128674,639],{"class":202},[1524,128676,128677],{},"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":181,"searchDepth":49,"depth":49,"links":128679},[128680,128681,128689,128696],{"id":128162,"depth":49,"text":128163},{"id":128197,"depth":49,"text":128198,"children":128682},[128683,128684,128685,128686,128687,128688],{"id":128204,"depth":219,"text":128205},{"id":128217,"depth":219,"text":128218},{"id":128290,"depth":219,"text":128291},{"id":128303,"depth":219,"text":128304},{"id":128322,"depth":219,"text":128323},{"id":128335,"depth":219,"text":128336},{"id":128342,"depth":49,"text":128343,"children":128690},[128691,128692,128693,128694,128695],{"id":128349,"depth":219,"text":128350},{"id":128361,"depth":219,"text":128362},{"id":128414,"depth":219,"text":128415},{"id":128435,"depth":219,"text":128436},{"id":128455,"depth":219,"text":128456},{"id":128481,"depth":49,"text":128482,"children":128697},[128698,128699,128700,128701,128702],{"id":128485,"depth":219,"text":128486},{"id":128535,"depth":219,"text":128536},{"id":128549,"depth":219,"text":128550},{"id":128602,"depth":219,"text":128603},{"id":128643,"depth":219,"text":128644},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128154,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128709,"title":128710,"body":128711,"description":1548,"extension":1549,"meta":129357,"navigation":1551,"path":129358,"seo":129359,"stem":129360,"__hash__":129361},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128712,"toc":129338},[128713,128716,128720,128724,128782,128786,128796,128799,128802,128806,128831,128835,128838,128841,128844,128847,128850,128854,128857,128860,128902,128905,128931,128937,128940,128944,128948,128954,128957,128960,128963,128966,128969,128972,129017,129021,129024,129027,129031,129035,129063,129066,129071,129074,129077,129080,129083,129087,129091,129094,129096,129099,129103,129106,129110,129113,129116,129119,129123,129127,129133,129143,129146,129149,129152,129155,129158,129281,129289,129297,129335],[10,128714,128710],{"id":128715},"_7-css引入方式与选择器进阶",[14,128717,128719],{"id":128718},"_71-css引入方式","7.1 css引入方式",[29,128721,128723],{"id":128722},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[176,128725,128727],{"className":511,"code":128726,"language":513,"meta":181,"style":181},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[183,128728,128729,128737,128744,128756,128769,128774],{"__ignoreMap":181},[186,128730,128731,128733,128735],{"class":188,"line":189},[186,128732,520],{"class":202},[186,128734,1524],{"class":523},[186,128736,552],{"class":202},[186,128738,128739,128742],{"class":188,"line":49},[186,128740,128741],{"class":523},"  h1",[186,128743,622],{"class":202},[186,128745,128746,128749,128751,128754],{"class":188,"line":219},[186,128747,128748],{"class":206},"    color",[186,128750,210],{"class":202},[186,128752,128753],{"class":206},"blue",[186,128755,634],{"class":202},[186,128757,128758,128761,128763,128765,128767],{"class":188,"line":225},[186,128759,128760],{"class":206},"    font-size",[186,128762,210],{"class":202},[186,128764,2408],{"class":206},[186,128766,804],{"class":669},[186,128768,634],{"class":202},[186,128770,128771],{"class":188,"line":242},[186,128772,128773],{"class":202},"  }\n",[186,128775,128776,128778,128780],{"class":188,"line":248},[186,128777,1470],{"class":202},[186,128779,1524],{"class":523},[186,128781,552],{"class":202},[169,128783,128784,27930],{},[54,128785,128068],{},[169,128787,78659,128788,128791,128792,128795],{},[183,128789,128790],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[183,128793,128794],{},"\u003Chead>","标签中",[169,128797,128798],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[169,128800,128801],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[29,128803,128805],{"id":128804},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[176,128807,128809],{"className":511,"code":128808,"language":513,"meta":181,"style":181},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[183,128810,128811],{"__ignoreMap":181},[186,128812,128813,128815,128817,128819,128821,128824,128827,128829],{"class":188,"line":189},[186,128814,520],{"class":202},[186,128816,169],{"class":523},[186,128818,64064],{"class":198},[186,128820,529],{"class":202},[186,128822,128823],{"class":532},"\"color: red; font-size: 16px;\"",[186,128825,128826],{"class":202},">这是一个段落\u003C\u002F",[186,128828,169],{"class":523},[186,128830,552],{"class":202},[169,128832,128833,27930],{},[54,128834,128068],{},[169,128836,128837],{},"①style其实就是标签的属性",[169,128839,128840],{},"②在双引号中间，写法要符合css规范",[169,128842,128843],{},"③可以控制当前的标签设置样式",[169,128845,128846],{},"④书写繁琐，简单时才用",[169,128848,128849],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[29,128851,128853],{"id":128852},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[169,128855,128856],{},"使用最多，单独建一个css文件，然后html引用",[169,128858,128859],{},"①css文件部分： style.css",[176,128861,128863],{"className":178,"code":128862,"language":180,"meta":181,"style":181},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[183,128864,128865,128870,128876,128886,128898],{"__ignoreMap":181},[186,128866,128867],{"class":188,"line":189},[186,128868,128869],{"class":192},"\u002F* style.css *\u002F\n",[186,128871,128872,128874],{"class":188,"line":49},[186,128873,10],{"class":523},[186,128875,622],{"class":202},[186,128877,128878,128880,128882,128884],{"class":188,"line":219},[186,128879,72339],{"class":206},[186,128881,210],{"class":202},[186,128883,128753],{"class":206},[186,128885,634],{"class":202},[186,128887,128888,128890,128892,128894,128896],{"class":188,"line":225},[186,128889,72061],{"class":206},[186,128891,210],{"class":202},[186,128893,2408],{"class":206},[186,128895,804],{"class":669},[186,128897,634],{"class":202},[186,128899,128900],{"class":188,"line":242},[186,128901,639],{"class":202},[169,128903,128904],{},"②html部分",[176,128906,128908],{"className":511,"code":128907,"language":513,"meta":181,"style":181},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[183,128909,128910],{"__ignoreMap":181},[186,128911,128912,128914,128916,128918,128920,128922,128924,128926,128929],{"class":188,"line":189},[186,128913,520],{"class":202},[186,128915,70442],{"class":523},[186,128917,70445],{"class":198},[186,128919,529],{"class":202},[186,128921,70450],{"class":532},[186,128923,62498],{"class":198},[186,128925,529],{"class":202},[186,128927,128928],{"class":532},"\"style.css\"",[186,128930,552],{"class":202},[169,128932,128933,128936],{},[183,128934,128935],{},"\u003Chr>","水平线标签（但是不常用！）",[169,128938,128939],{},"ctrl+0回到页面原来大小",[14,128941,128943],{"id":128942},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[29,128945,128947],{"id":128946},"_721-快速生成html","7.2.1 快速生成html",[169,128949,128950,128951],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[183,128952,128953],{},"\u003Cdiv>``\u003C\u002Fdiv>",[169,128955,128956],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[169,128958,128959],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[169,128961,128962],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[169,128964,128965],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[169,128967,128968],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[169,128970,128971],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[176,128973,128975],{"className":511,"code":128974,"language":513,"meta":181,"style":181},"\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",[183,128976,128977,128982,128987,128992,128997,129002,129007,129012],{"__ignoreMap":181},[186,128978,128979],{"class":188,"line":189},[186,128980,128981],{"class":192},"\u003C!-- Emmet 语法示例 -->\n",[186,128983,128984],{"class":188,"line":49},[186,128985,128986],{"class":192},"\u003C!-- div*3        → 生成3个div -->\n",[186,128988,128989],{"class":188,"line":219},[186,128990,128991],{"class":192},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[186,128993,128994],{"class":188,"line":225},[186,128995,128996],{"class":192},"\u003C!-- div+p        → 兄弟div和p -->\n",[186,128998,128999],{"class":188,"line":242},[186,129000,129001],{"class":192},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[186,129003,129004],{"class":188,"line":248},[186,129005,129006],{"class":192},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[186,129008,129009],{"class":188,"line":265},[186,129010,129011],{"class":192},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[186,129013,129014],{"class":188,"line":271},[186,129015,129016],{"class":192},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[29,129018,129020],{"id":129019},"_722-快速生成css","7.2.2 快速生成css",[169,129022,129023],{},"简写开头",[169,129025,129026],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129028,129030],{"id":129029},"_73-css复合选择器","7.3 css复合选择器",[29,129032,129034],{"id":129033},"_731-后代选择器","7.3.1 后代选择器",[176,129036,129038],{"className":178,"code":129037,"language":180,"meta":181,"style":181},".parent .child {\n  color: blue;\n}\n",[183,129039,129040,129049,129059],{"__ignoreMap":181},[186,129041,129042,129044,129047],{"class":188,"line":189},[186,129043,619],{"class":198},[186,129045,129046],{"class":198}," .child",[186,129048,622],{"class":202},[186,129050,129051,129053,129055,129057],{"class":188,"line":49},[186,129052,72339],{"class":206},[186,129054,210],{"class":202},[186,129056,128753],{"class":206},[186,129058,634],{"class":202},[186,129060,129061],{"class":188,"line":219},[186,129062,639],{"class":202},[169,129064,129065],{},"元素1 元素2 {样式声明}",[169,129067,129068],{},[54,129069,129070],{},"注意点:",[169,129072,129073],{},"①元素1和元素2中间用空格隔开",[169,129075,129076],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[169,129078,129079],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[169,129081,129082],{},"④元素1和元素2可以是任意基础选择器",[29,129084,129086],{"id":129085},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[169,129088,129089],{},[54,129090,129070],{},[169,129092,129093],{},"①元素1和元素2中间用大于号隔开",[169,129095,129076],{},[169,129097,129098],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[29,129100,129102],{"id":129101},"_733-并集选择器","7.3.3 并集选择器",[169,129104,129105],{},"元素1，元素2 {样式声明}",[169,129107,129108],{},[54,129109,129070],{},[169,129111,129112],{},"①元素1和元素2中间用逗号隔开",[169,129114,129115],{},"②逗号可以理解为和的意思",[169,129117,129118],{},"③并集选择器通常用于集体声明",[29,129120,129122],{"id":129121},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[169,129124,129125],{},[54,129126,129070],{},[169,129128,129129,129130,129132],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70442,129131],{},"－:visited－:hover－:active。",[169,129134,129135,129136,129139,129140,903],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129137,129138],"hover",{}," 、 ",[129141,129142],"first-child",{},[169,129144,129145],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[169,129147,129148],{},"link对没访问的进行设置",[169,129150,129151],{},"vistied对已访问的进行改变",[169,129153,129154],{},"hover鼠标经过就会变",[169,129156,129157],{},"active常按(点)就会变",[176,129159,129161],{"className":178,"code":129160,"language":180,"meta":181,"style":181},"\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",[183,129162,129163,129168,129177,129187,129197,129201,129210,129221,129225,129233,129243,129253,129257,129266,129277],{"__ignoreMap":181},[186,129164,129165],{"class":188,"line":189},[186,129166,129167],{"class":192},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[186,129169,129170,129172,129175],{"class":188,"line":49},[186,129171,948],{"class":523},[186,129173,129174],{"class":198},":link",[186,129176,622],{"class":202},[186,129178,129179,129181,129183,129185],{"class":188,"line":219},[186,129180,72339],{"class":206},[186,129182,210],{"class":202},[186,129184,63807],{"class":206},[186,129186,634],{"class":202},[186,129188,129189,129191,129193,129195],{"class":188,"line":225},[186,129190,71939],{"class":206},[186,129192,210],{"class":202},[186,129194,56182],{"class":206},[186,129196,634],{"class":202},[186,129198,129199],{"class":188,"line":242},[186,129200,639],{"class":202},[186,129202,129203,129205,129208],{"class":188,"line":248},[186,129204,948],{"class":523},[186,129206,129207],{"class":198},":visited",[186,129209,622],{"class":202},[186,129211,129212,129214,129216,129219],{"class":188,"line":265},[186,129213,72339],{"class":206},[186,129215,210],{"class":202},[186,129217,129218],{"class":206},"purple",[186,129220,634],{"class":202},[186,129222,129223],{"class":188,"line":271},[186,129224,639],{"class":202},[186,129226,129227,129229,129231],{"class":188,"line":288},[186,129228,948],{"class":523},[186,129230,62381],{"class":198},[186,129232,622],{"class":202},[186,129234,129235,129237,129239,129241],{"class":188,"line":294},[186,129236,72339],{"class":206},[186,129238,210],{"class":202},[186,129240,56332],{"class":206},[186,129242,634],{"class":202},[186,129244,129245,129247,129249,129251],{"class":188,"line":1212},[186,129246,71939],{"class":206},[186,129248,210],{"class":202},[186,129250,128593],{"class":206},[186,129252,634],{"class":202},[186,129254,129255],{"class":188,"line":1223},[186,129256,639],{"class":202},[186,129258,129259,129261,129264],{"class":188,"line":1236},[186,129260,948],{"class":523},[186,129262,129263],{"class":198},":active",[186,129265,622],{"class":202},[186,129267,129268,129270,129272,129275],{"class":188,"line":3096},[186,129269,72339],{"class":206},[186,129271,210],{"class":202},[186,129273,129274],{"class":206},"green",[186,129276,634],{"class":202},[186,129278,129279],{"class":188,"line":3110},[186,129280,639],{"class":202},[29,129282,129284,129285,129288],{"id":129283},"_735-伪类选择器","7.3.5 ",[129286,129287],"focus",{},"伪类选择器",[169,129290,129291,129293,129294,129296],{},[129286,129292],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[183,129295,128041],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[176,129298,129300],{"className":178,"code":129299,"language":180,"meta":181,"style":181},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[183,129301,129302,129310,129321,129331],{"__ignoreMap":181},[186,129303,129304,129306,129308],{"class":188,"line":189},[186,129305,55266],{"class":523},[186,129307,63338],{"class":198},[186,129309,622],{"class":202},[186,129311,129312,129315,129317,129319],{"class":188,"line":49},[186,129313,129314],{"class":206},"  border-color",[186,129316,210],{"class":202},[186,129318,56332],{"class":206},[186,129320,634],{"class":202},[186,129322,129323,129325,129327,129329],{"class":188,"line":219},[186,129324,72232],{"class":206},[186,129326,210],{"class":202},[186,129328,56182],{"class":206},[186,129330,634],{"class":202},[186,129332,129333],{"class":188,"line":225},[186,129334,639],{"class":202},[1524,129336,129337],{},"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":181,"searchDepth":49,"depth":49,"links":129339},[129340,129345,129349],{"id":128718,"depth":49,"text":128719,"children":129341},[129342,129343,129344],{"id":128722,"depth":219,"text":128723},{"id":128804,"depth":219,"text":128805},{"id":128852,"depth":219,"text":128853},{"id":128942,"depth":49,"text":128943,"children":129346},[129347,129348],{"id":128946,"depth":219,"text":128947},{"id":129019,"depth":219,"text":129020},{"id":129029,"depth":49,"text":129030,"children":129350},[129351,129352,129353,129354,129355],{"id":129033,"depth":219,"text":129034},{"id":129085,"depth":219,"text":129086},{"id":129101,"depth":219,"text":129102},{"id":129121,"depth":219,"text":129122},{"id":129283,"depth":219,"text":129356},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128710,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129363,"title":129364,"body":129365,"description":1548,"extension":1549,"meta":131284,"navigation":1551,"path":131285,"seo":131286,"stem":131287,"__hash__":131288},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129366,"toc":131258},[129367,129370,129374,129383,129387,129413,129418,129421,129424,129427,129430,129434,129437,129447,129455,129459,129494,129499,129502,129505,129508,129511,129515,129518,129527,129531,129544,129549,129552,129555,129558,129562,129565,129569,129572,129627,129630,129661,129664,129718,129722,129725,129891,130014,130017,130020,130023,130026,130030,130033,130037,130040,130043,130047,130050,130081,130108,130136,130139,130143,130169,130212,130216,130309,130312,130338,130341,130344,130347,130350,130353,130356,130359,130362,130365,130369,130425,130452,130456,130504,130508,130549,130551,130554,130557,130560,130563,130567,130659,130662,130665,130668,130672,130795,130995,130999,131003,131006,131009,131012,131016,131019,131022,131047,131050,131053,131056,131059,131062,131066,131074,131136,131139,131197,131200,131203,131206,131209,131212,131215,131218,131255],[10,129368,129364],{"id":129369},"_8-css显示模式与背景特性",[14,129371,129373],{"id":129372},"_81-css元素显示模式","8.1 css元素显示模式",[169,129375,129376,129377,129379,129380,129382],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[183,129378,127594],{},"自己占一行，比如一行可以放多个",[183,129381,127597],{},"，HTML 元素一般分为块元素和行内元素两种类型",[29,129384,129386],{"id":129385},"_811-块元素","8.1.1 块元素",[169,129388,129389,129390,129392,129393,1824,129396,1824,129398,1824,129400,1824,129403,1824,129406,129409,129410,129412],{},"常见的块元素有",[183,129391,127498],{},"~",[183,129394,129395],{},"\u003Ch6>",[183,129397,127524],{},[183,129399,127594],{},[183,129401,129402],{},"\u003Cul>",[183,129404,129405],{},"\u003Col>",[183,129407,129408],{},"\u003Cli>","等，其中 ",[183,129411,127594],{}," 标签是最典型的块元素",[169,129414,129415],{},[54,129416,129417],{},"块级元素的特点：",[169,129419,129420],{},"① 比较霸道，自己独占一行。",[169,129422,129423],{},"② 高度，宽度、外边距以及内边距都可以控制。",[169,129425,129426],{},"③ 宽度默认是容器（父级宽度）的100%。",[169,129428,129429],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[169,129431,129432],{},[54,129433,1652],{},[169,129435,129436],{},"①文字类的元素内不能使用块级元素",[169,129438,78682,129439,129441,129442,129444,129445],{},[183,129440,127524],{}," 标签主要用于存放文字，因此 ",[183,129443,127524],{}," 里面不能放块级元素，特别是不能放",[183,129446,127594],{},[169,129448,129449,129450,129392,129452,129454],{},"⑥同理， ",[183,129451,127498],{},[183,129453,129395],{},"等都是文字类块级标签，里面也不能放其他块级元素",[29,129456,129458],{"id":129457},"_812-行内元素","8.1.2 行内元素",[169,129460,129461,129462,1824,129464,1824,129467,1824,129470,1824,129473,1824,129476,1824,129479,1824,129482,1824,129485,1824,129488,129490,129491,129493],{},"常见的行内元素有 ",[183,129463,127756],{},[183,129465,129466],{},"\u003Cstrong>",[183,129468,129469],{},"\u003Cb>",[183,129471,129472],{},"\u003Cem>",[183,129474,129475],{},"\u003Ci>",[183,129477,129478],{},"\u003Cdel>",[183,129480,129481],{},"\u003Cs>",[183,129483,129484],{},"\u003Cins>",[183,129486,129487],{},"\u003Cu>",[183,129489,127597],{}," 等，其中 ",[183,129492,127597],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[169,129495,129496],{},[54,129497,129498],{},"特点：",[169,129500,129501],{},"① 相邻行内元素在一行上，一行可以显示多个。",[169,129503,129504],{},"② 高、宽直接设置是无效的。",[169,129506,129507],{},"③ 默认宽度就是它本身内容的宽度。",[169,129509,129510],{},"④ 行内元素只能容纳文本或其他行内元素。",[169,129512,129513],{},[54,129514,1652],{},[169,129516,129517],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[169,129519,129520,129521,129523,129524,129526],{},"②特殊情况链接 ",[183,129522,127756],{}," 里面可以放块级元素，但是给 ",[183,129525,127756],{}," 转换一下块级模式最安全",[29,129528,129530],{"id":129529},"_813-行内块元素","8.1.3 行内块元素",[169,129532,129533,129534,1824,129537,1824,129540,129543],{},"在行内元素中有几个特殊的标签 —— ",[183,129535,129536],{},"\u003Cimg \u002F>",[183,129538,129539],{},"\u003Cinput \u002F>",[183,129541,129542],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[169,129545,129546],{},[54,129547,129548],{},"行内块元素的特点：",[169,129550,129551],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[169,129553,129554],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[169,129556,129557],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[29,129559,129561],{"id":129560},"_814-总结","8.1.4 总结",[164,129563],{"style":166,"src":129564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[29,129566,129568],{"id":129567},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[169,129570,129571],{},"①转换为块元素：display:block;",[176,129573,129575],{"className":178,"code":129574,"language":180,"meta":181,"style":181},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[183,129576,129577,129582,129588,129599,129611,129623],{"__ignoreMap":181},[186,129578,129579],{"class":188,"line":189},[186,129580,129581],{"class":192},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[186,129583,129584,129586],{"class":188,"line":49},[186,129585,948],{"class":523},[186,129587,622],{"class":202},[186,129589,129590,129593,129595,129597],{"class":188,"line":219},[186,129591,129592],{"class":206},"  display",[186,129594,210],{"class":202},[186,129596,62310],{"class":206},[186,129598,634],{"class":202},[186,129600,129601,129603,129605,129607,129609],{"class":188,"line":225},[186,129602,796],{"class":206},[186,129604,210],{"class":202},[186,129606,1922],{"class":206},[186,129608,804],{"class":669},[186,129610,634],{"class":202},[186,129612,129613,129615,129617,129619,129621],{"class":188,"line":242},[186,129614,811],{"class":206},[186,129616,210],{"class":202},[186,129618,2011],{"class":206},[186,129620,804],{"class":669},[186,129622,634],{"class":202},[186,129624,129625],{"class":188,"line":248},[186,129626,639],{"class":202},[169,129628,129629],{},"②转换为行内元素：display:inline;",[176,129631,129633],{"className":178,"code":129632,"language":180,"meta":181,"style":181},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[183,129634,129635,129640,129646,129657],{"__ignoreMap":181},[186,129636,129637],{"class":188,"line":189},[186,129638,129639],{"class":192},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[186,129641,129642,129644],{"class":188,"line":49},[186,129643,1450],{"class":523},[186,129645,622],{"class":202},[186,129647,129648,129650,129652,129655],{"class":188,"line":219},[186,129649,129592],{"class":206},[186,129651,210],{"class":202},[186,129653,129654],{"class":206},"inline",[186,129656,634],{"class":202},[186,129658,129659],{"class":188,"line":225},[186,129660,639],{"class":202},[169,129662,129663],{},"③转换为行内块：display:inline-block;",[176,129665,129667],{"className":178,"code":129666,"language":180,"meta":181,"style":181},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[183,129668,129669,129674,129680,129690,129702,129714],{"__ignoreMap":181},[186,129670,129671],{"class":188,"line":189},[186,129672,129673],{"class":192},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[186,129675,129676,129678],{"class":188,"line":49},[186,129677,186],{"class":523},[186,129679,622],{"class":202},[186,129681,129682,129684,129686,129688],{"class":188,"line":219},[186,129683,129592],{"class":206},[186,129685,210],{"class":202},[186,129687,73817],{"class":206},[186,129689,634],{"class":202},[186,129691,129692,129694,129696,129698,129700],{"class":188,"line":225},[186,129693,796],{"class":206},[186,129695,210],{"class":202},[186,129697,2222],{"class":206},[186,129699,804],{"class":669},[186,129701,634],{"class":202},[186,129703,129704,129706,129708,129710,129712],{"class":188,"line":242},[186,129705,811],{"class":206},[186,129707,210],{"class":202},[186,129709,2558],{"class":206},[186,129711,804],{"class":669},[186,129713,634],{"class":202},[186,129715,129716],{"class":188,"line":248},[186,129717,639],{"class":202},[29,129719,129721],{"id":129720},"_816-小米侧边栏","8.1.6 小米侧边栏",[164,129723],{"style":166,"src":129724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[176,129726,129728],{"className":511,"code":129727,"language":513,"meta":181,"style":181},"\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",[183,129729,129730,129735,129750,129769,129788,129807,129826,129845,129864,129883],{"__ignoreMap":181},[186,129731,129732],{"class":188,"line":189},[186,129733,129734],{"class":192},"\u003C!-- 小米侧边栏案例 -->\n",[186,129736,129737,129739,129741,129743,129745,129748],{"class":188,"line":49},[186,129738,520],{"class":202},[186,129740,1450],{"class":523},[186,129742,1453],{"class":198},[186,129744,529],{"class":202},[186,129746,129747],{"class":532},"\"sidebar\"",[186,129749,552],{"class":202},[186,129751,129752,129754,129756,129758,129760,129762,129765,129767],{"class":188,"line":219},[186,129753,53591],{"class":202},[186,129755,948],{"class":523},[186,129757,62498],{"class":198},[186,129759,529],{"class":202},[186,129761,62503],{"class":532},[186,129763,129764],{"class":202},">手机 电话卡\u003C\u002F",[186,129766,948],{"class":523},[186,129768,552],{"class":202},[186,129770,129771,129773,129775,129777,129779,129781,129784,129786],{"class":188,"line":225},[186,129772,53591],{"class":202},[186,129774,948],{"class":523},[186,129776,62498],{"class":198},[186,129778,529],{"class":202},[186,129780,62503],{"class":532},[186,129782,129783],{"class":202},">电视 盒子\u003C\u002F",[186,129785,948],{"class":523},[186,129787,552],{"class":202},[186,129789,129790,129792,129794,129796,129798,129800,129803,129805],{"class":188,"line":242},[186,129791,53591],{"class":202},[186,129793,948],{"class":523},[186,129795,62498],{"class":198},[186,129797,529],{"class":202},[186,129799,62503],{"class":532},[186,129801,129802],{"class":202},">笔记本 平板\u003C\u002F",[186,129804,948],{"class":523},[186,129806,552],{"class":202},[186,129808,129809,129811,129813,129815,129817,129819,129822,129824],{"class":188,"line":248},[186,129810,53591],{"class":202},[186,129812,948],{"class":523},[186,129814,62498],{"class":198},[186,129816,529],{"class":202},[186,129818,62503],{"class":532},[186,129820,129821],{"class":202},">出行 穿戴\u003C\u002F",[186,129823,948],{"class":523},[186,129825,552],{"class":202},[186,129827,129828,129830,129832,129834,129836,129838,129841,129843],{"class":188,"line":265},[186,129829,53591],{"class":202},[186,129831,948],{"class":523},[186,129833,62498],{"class":198},[186,129835,529],{"class":202},[186,129837,62503],{"class":532},[186,129839,129840],{"class":202},">智能 路由器\u003C\u002F",[186,129842,948],{"class":523},[186,129844,552],{"class":202},[186,129846,129847,129849,129851,129853,129855,129857,129860,129862],{"class":188,"line":271},[186,129848,53591],{"class":202},[186,129850,948],{"class":523},[186,129852,62498],{"class":198},[186,129854,529],{"class":202},[186,129856,62503],{"class":532},[186,129858,129859],{"class":202},">健康 儿童\u003C\u002F",[186,129861,948],{"class":523},[186,129863,552],{"class":202},[186,129865,129866,129868,129870,129872,129874,129876,129879,129881],{"class":188,"line":288},[186,129867,53591],{"class":202},[186,129869,948],{"class":523},[186,129871,62498],{"class":198},[186,129873,529],{"class":202},[186,129875,62503],{"class":532},[186,129877,129878],{"class":202},">耳机 音响\u003C\u002F",[186,129880,948],{"class":523},[186,129882,552],{"class":202},[186,129884,129885,129887,129889],{"class":188,"line":294},[186,129886,1470],{"class":202},[186,129888,1450],{"class":523},[186,129890,552],{"class":202},[176,129892,129894],{"className":178,"code":129893,"language":180,"meta":181,"style":181},".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",[183,129895,129896,129905,129915,129928,129940,129952,129964,129974,129985,129989,129999,130010],{"__ignoreMap":181},[186,129897,129898,129901,129903],{"class":188,"line":189},[186,129899,129900],{"class":198},".sidebar",[186,129902,2871],{"class":523},[186,129904,622],{"class":202},[186,129906,129907,129909,129911,129913],{"class":188,"line":49},[186,129908,129592],{"class":206},[186,129910,210],{"class":202},[186,129912,62310],{"class":206},[186,129914,634],{"class":202},[186,129916,129917,129919,129921,129924,129926],{"class":188,"line":219},[186,129918,796],{"class":206},[186,129920,210],{"class":202},[186,129922,129923],{"class":206},"234",[186,129925,804],{"class":669},[186,129927,634],{"class":202},[186,129929,129930,129932,129934,129936,129938],{"class":188,"line":225},[186,129931,811],{"class":206},[186,129933,210],{"class":202},[186,129935,2062],{"class":206},[186,129937,804],{"class":669},[186,129939,634],{"class":202},[186,129941,129942,129944,129946,129948,129950],{"class":188,"line":242},[186,129943,128663],{"class":206},[186,129945,210],{"class":202},[186,129947,2062],{"class":206},[186,129949,804],{"class":669},[186,129951,634],{"class":202},[186,129953,129954,129956,129958,129960,129962],{"class":188,"line":248},[186,129955,72257],{"class":206},[186,129957,210],{"class":202},[186,129959,2558],{"class":206},[186,129961,804],{"class":669},[186,129963,634],{"class":202},[186,129965,129966,129968,129970,129972],{"class":188,"line":265},[186,129967,72339],{"class":206},[186,129969,210],{"class":202},[186,129971,62283],{"class":206},[186,129973,634],{"class":202},[186,129975,129976,129978,129980,129983],{"class":188,"line":271},[186,129977,72312],{"class":206},[186,129979,210],{"class":202},[186,129981,129982],{"class":206},"#55585a",[186,129984,634],{"class":202},[186,129986,129987],{"class":188,"line":288},[186,129988,639],{"class":202},[186,129990,129991,129993,129995,129997],{"class":188,"line":294},[186,129992,129900],{"class":198},[186,129994,2871],{"class":523},[186,129996,62381],{"class":198},[186,129998,622],{"class":202},[186,130000,130001,130003,130005,130008],{"class":188,"line":1212},[186,130002,72312],{"class":206},[186,130004,210],{"class":202},[186,130006,130007],{"class":206},"#ff6700",[186,130009,634],{"class":202},[186,130011,130012],{"class":188,"line":1223},[186,130013,639],{"class":202},[164,130015],{"style":166,"src":130016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[169,130018,130019],{},"行高=盒子高度：实现文字的垂直居中",[169,130021,130022],{},"原理讲解：",[164,130024],{"style":166,"src":130025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130027,130029],{"id":130028},"_82-css背景","8.2 css背景",[169,130031,130032],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[29,130034,130036],{"id":130035},"_821-背景颜色","8.2.1 背景颜色",[169,130038,130039],{},"background-color:颜色值;",[169,130041,130042],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[29,130044,130046],{"id":130045},"_822-背景图片","8.2.2 背景图片",[169,130048,130049],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[176,130051,130053],{"className":178,"code":130052,"language":180,"meta":181,"style":181},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[183,130054,130055,130061,130077],{"__ignoreMap":181},[186,130056,130057,130059],{"class":188,"line":189},[186,130058,1450],{"class":523},[186,130060,622],{"class":202},[186,130062,130063,130066,130068,130070,130072,130075],{"class":188,"line":49},[186,130064,130065],{"class":206},"  background-image",[186,130067,210],{"class":202},[186,130069,829],{"class":206},[186,130071,832],{"class":202},[186,130073,130074],{"class":835},"images\u002Fbg.png",[186,130076,1112],{"class":202},[186,130078,130079],{"class":188,"line":219},[186,130080,639],{"class":202},[99,130082,130083,130092],{},[102,130084,130085],{},[105,130086,130087,130090],{},[108,130088,130089],{"align":110},"参数值",[108,130091,104127],{"align":110},[116,130093,130094,130101],{},[105,130095,130096,130098],{},[121,130097,56182],{"align":110},[121,130099,130100],{"align":110},"无背景图（默认的）",[105,130102,130103,130105],{},[121,130104,829],{"align":110},[121,130106,130107],{"align":110},"使用绝对或相对地址指定背景图像",[176,130109,130110],{"className":178,"code":130052,"language":180,"meta":181,"style":181},[183,130111,130112,130118,130132],{"__ignoreMap":181},[186,130113,130114,130116],{"class":188,"line":189},[186,130115,1450],{"class":523},[186,130117,622],{"class":202},[186,130119,130120,130122,130124,130126,130128,130130],{"class":188,"line":49},[186,130121,130065],{"class":206},[186,130123,210],{"class":202},[186,130125,829],{"class":206},[186,130127,832],{"class":202},[186,130129,130074],{"class":835},[186,130131,1112],{"class":202},[186,130133,130134],{"class":188,"line":219},[186,130135,639],{"class":202},[169,130137,130138],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[29,130140,130142],{"id":130141},"_823-背景平铺","8.2.3 背景平铺",[176,130144,130146],{"className":178,"code":130145,"language":180,"meta":181,"style":181},"div {\n  background-repeat: no-repeat;\n}\n",[183,130147,130148,130154,130165],{"__ignoreMap":181},[186,130149,130150,130152],{"class":188,"line":189},[186,130151,1450],{"class":523},[186,130153,622],{"class":202},[186,130155,130156,130159,130161,130163],{"class":188,"line":49},[186,130157,130158],{"class":206},"  background-repeat",[186,130160,210],{"class":202},[186,130162,842],{"class":206},[186,130164,634],{"class":202},[186,130166,130167],{"class":188,"line":219},[186,130168,639],{"class":202},[99,130170,130171,130179],{},[102,130172,130173],{},[105,130174,130175,130177],{},[108,130176,130089],{"align":110},[108,130178,104127],{"align":110},[116,130180,130181,130189,130196,130204],{},[105,130182,130183,130186],{},[121,130184,130185],{"align":110},"repeat",[121,130187,130188],{"align":110},"背景图像在纵向和横向上平铺（默认的）",[105,130190,130191,130193],{},[121,130192,842],{"align":110},[121,130194,130195],{"align":110},"背景图像不平铺",[105,130197,130198,130201],{},[121,130199,130200],{"align":110},"repeat-x",[121,130202,130203],{"align":110},"背景图像在横向上平铺",[105,130205,130206,130209],{},[121,130207,130208],{"align":110},"repeat-y",[121,130210,130211],{"align":110},"背景图像在纵向平铺",[29,130213,130215],{"id":130214},"_824-背景图片位置","8.2.4 背景图片位置",[176,130217,130219],{"className":178,"code":130218,"language":180,"meta":181,"style":181},"\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",[183,130220,130221,130226,130232,130245,130249,130254,130260,130276,130280,130285,130291,130305],{"__ignoreMap":181},[186,130222,130223],{"class":188,"line":189},[186,130224,130225],{"class":192},"\u002F* 方位名词 *\u002F\n",[186,130227,130228,130230],{"class":188,"line":49},[186,130229,1450],{"class":523},[186,130231,622],{"class":202},[186,130233,130234,130236,130238,130240,130243],{"class":188,"line":219},[186,130235,849],{"class":206},[186,130237,210],{"class":202},[186,130239,53042],{"class":206},[186,130241,130242],{"class":206}," top",[186,130244,634],{"class":202},[186,130246,130247],{"class":188,"line":225},[186,130248,639],{"class":202},[186,130250,130251],{"class":188,"line":242},[186,130252,130253],{"class":192},"\u002F* 精确单位 *\u002F\n",[186,130255,130256,130258],{"class":188,"line":248},[186,130257,1450],{"class":523},[186,130259,622],{"class":202},[186,130261,130262,130264,130266,130268,130270,130272,130274],{"class":188,"line":265},[186,130263,849],{"class":206},[186,130265,210],{"class":202},[186,130267,801],{"class":206},[186,130269,804],{"class":669},[186,130271,58945],{"class":206},[186,130273,804],{"class":669},[186,130275,634],{"class":202},[186,130277,130278],{"class":188,"line":271},[186,130279,639],{"class":202},[186,130281,130282],{"class":188,"line":288},[186,130283,130284],{"class":192},"\u002F* 混合单位 *\u002F\n",[186,130286,130287,130289],{"class":188,"line":294},[186,130288,1450],{"class":523},[186,130290,622],{"class":202},[186,130292,130293,130295,130297,130299,130301,130303],{"class":188,"line":1212},[186,130294,849],{"class":206},[186,130296,210],{"class":202},[186,130298,801],{"class":206},[186,130300,804],{"class":669},[186,130302,18605],{"class":206},[186,130304,634],{"class":202},[186,130306,130307],{"class":188,"line":1223},[186,130308,639],{"class":202},[169,130310,130311],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[99,130313,130314,130322],{},[102,130315,130316],{},[105,130317,130318,130320],{},[108,130319,130089],{"align":110},[108,130321,27327],{"align":110},[116,130323,130324,130331],{},[105,130325,130326,130328],{},[121,130327,53415],{"align":110},[121,130329,130330],{"align":110},"百分数|由浮点数和单位标识符组成的长度值",[105,130332,130333,130335],{},[121,130334,207],{"align":110},[121,130336,130337],{"align":110},"top|center|bottom|left|center|right 方位名词",[169,130339,130340],{},"其他说明：",[169,130342,130343],{},"①参数是方位名词",[169,130345,130346],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[169,130348,130349],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[169,130351,130352],{},"②参数是精确单位",[169,130354,130355],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[169,130357,130358],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[169,130360,130361],{},"③参数是混合单位",[169,130363,130364],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[29,130366,130368],{"id":130367},"_825-背景图片固定","8.2.5 背景图片固定",[176,130370,130372],{"className":178,"code":130371,"language":180,"meta":181,"style":181},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[183,130373,130374,130379,130385,130396,130400,130405,130411,130421],{"__ignoreMap":181},[186,130375,130376],{"class":188,"line":189},[186,130377,130378],{"class":192},"\u002F* 背景滚动（默认） *\u002F\n",[186,130380,130381,130383],{"class":188,"line":49},[186,130382,1450],{"class":523},[186,130384,622],{"class":202},[186,130386,130387,130390,130392,130394],{"class":188,"line":219},[186,130388,130389],{"class":206},"  background-attachment",[186,130391,210],{"class":202},[186,130393,139],{"class":206},[186,130395,634],{"class":202},[186,130397,130398],{"class":188,"line":225},[186,130399,639],{"class":202},[186,130401,130402],{"class":188,"line":242},[186,130403,130404],{"class":192},"\u002F* 背景固定 *\u002F\n",[186,130406,130407,130409],{"class":188,"line":248},[186,130408,1450],{"class":523},[186,130410,622],{"class":202},[186,130412,130413,130415,130417,130419],{"class":188,"line":265},[186,130414,130389],{"class":206},[186,130416,210],{"class":202},[186,130418,283],{"class":206},[186,130420,634],{"class":202},[186,130422,130423],{"class":188,"line":271},[186,130424,639],{"class":202},[99,130426,130427,130436],{},[102,130428,130429],{},[105,130430,130431,130434],{},[108,130432,130433],{"align":110},"参数",[108,130435,104127],{"align":110},[116,130437,130438,130445],{},[105,130439,130440,130442],{},[121,130441,139],{"align":110},[121,130443,130444],{"align":110},"背景图像是随对象内容滚动",[105,130446,130447,130449],{},[121,130448,283],{"align":110},[121,130450,130451],{"align":110},"背景图像固定",[29,130453,130455],{"id":130454},"_826-背景样式合写","8.2.6 背景样式合写",[176,130457,130459],{"className":178,"code":130458,"language":180,"meta":181,"style":181},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[183,130460,130461,130466,130472,130500],{"__ignoreMap":181},[186,130462,130463],{"class":188,"line":189},[186,130464,130465],{"class":192},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[186,130467,130468,130470],{"class":188,"line":49},[186,130469,1450],{"class":523},[186,130471,622],{"class":202},[186,130473,130474,130476,130478,130480,130483,130485,130487,130489,130491,130494,130496,130498],{"class":188,"line":219},[186,130475,824],{"class":206},[186,130477,210],{"class":202},[186,130479,62283],{"class":206},[186,130481,130482],{"class":206}," url",[186,130484,832],{"class":202},[186,130486,130074],{"class":835},[186,130488,839],{"class":202},[186,130490,842],{"class":206},[186,130492,130493],{"class":206}," fixed",[186,130495,18605],{"class":206},[186,130497,130242],{"class":206},[186,130499,634],{"class":202},[186,130501,130502],{"class":188,"line":225},[186,130503,639],{"class":202},[29,130505,130507],{"id":130506},"_827-背景色半透明","8.2.7 背景色半透明",[176,130509,130511],{"className":178,"code":130510,"language":180,"meta":181,"style":181},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[183,130512,130513,130519,130545],{"__ignoreMap":181},[186,130514,130515,130517],{"class":188,"line":189},[186,130516,1450],{"class":523},[186,130518,622],{"class":202},[186,130520,130521,130523,130525,130527,130529,130531,130533,130535,130537,130539,130541,130543],{"class":188,"line":49},[186,130522,824],{"class":206},[186,130524,210],{"class":202},[186,130526,56553],{"class":206},[186,130528,832],{"class":202},[186,130530,1803],{"class":206},[186,130532,13898],{"class":202},[186,130534,1803],{"class":206},[186,130536,13898],{"class":202},[186,130538,1803],{"class":206},[186,130540,13898],{"class":202},[186,130542,101952],{"class":206},[186,130544,1112],{"class":202},[186,130546,130547],{"class":188,"line":219},[186,130548,639],{"class":202},[169,130550,100827],{},[169,130552,130553],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[169,130555,130556],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[169,130558,130559],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[169,130561,130562],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[29,130564,130566],{"id":130565},"_828-总结","8.2.8 总结",[99,130568,130569,130580],{},[102,130570,130571],{},[105,130572,130573,130576,130578],{},[108,130574,130575],{"align":110},"属性",[108,130577,104127],{"align":110},[108,130579,1766],{"align":110},[116,130581,130582,130593,130604,130615,130626,130637,130648],{},[105,130583,130584,130587,130590],{},[121,130585,130586],{"align":110},"background-color",[121,130588,130589],{"align":110},"背景颜色",[121,130591,130592],{"align":110},"预定义的颜色值\u002F十六进制\u002FRGB代码",[105,130594,130595,130598,130601],{},[121,130596,130597],{"align":110},"background-image",[121,130599,130600],{"align":110},"背景图片",[121,130602,130603],{"align":110},"url(图片路径)",[105,130605,130606,130609,130612],{},[121,130607,130608],{"align":110},"background-repeat",[121,130610,130611],{"align":110},"是否平铺",[121,130613,130614],{"align":110},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[105,130616,130617,130620,130623],{},[121,130618,130619],{"align":110},"background-position",[121,130621,130622],{"align":110},"背景位置",[121,130624,130625],{"align":110},"length\u002Fposition 分别是x和y坐标",[105,130627,130628,130631,130634],{},[121,130629,130630],{"align":110},"background-attachment",[121,130632,130633],{"align":110},"背景附着",[121,130635,130636],{"align":110},"scroll(背景滚动) \u002Ffixed (背景固定)",[105,130638,130639,130642,130645],{},[121,130640,130641],{"align":110},"背景简写",[121,130643,130644],{"align":110},"书写更简单",[121,130646,130647],{"align":110},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[105,130649,130650,130653,130656],{},[121,130651,130652],{"align":110},"背景半透明",[121,130654,130655],{"align":110},"背景颜色半透明",[121,130657,130658],{"align":110},"background: rgba(0,0,0.3); 后面必须是4个值",[169,130660,130661],{},"颜色渐变：",[164,130663],{"style":166,"src":130664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[164,130666],{"style":166,"src":130667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[29,130669,130671],{"id":130670},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[176,130673,130675],{"className":511,"code":130674,"language":513,"meta":181,"style":181},"\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",[183,130676,130677,130692,130711,130730,130749,130768,130787],{"__ignoreMap":181},[186,130678,130679,130681,130683,130685,130687,130690],{"class":188,"line":189},[186,130680,520],{"class":202},[186,130682,1450],{"class":523},[186,130684,1453],{"class":198},[186,130686,529],{"class":202},[186,130688,130689],{"class":532},"\"nav\"",[186,130691,552],{"class":202},[186,130693,130694,130696,130698,130700,130702,130704,130707,130709],{"class":188,"line":49},[186,130695,53591],{"class":202},[186,130697,948],{"class":523},[186,130699,62498],{"class":198},[186,130701,529],{"class":202},[186,130703,62503],{"class":532},[186,130705,130706],{"class":202},">五彩导航1\u003C\u002F",[186,130708,948],{"class":523},[186,130710,552],{"class":202},[186,130712,130713,130715,130717,130719,130721,130723,130726,130728],{"class":188,"line":219},[186,130714,53591],{"class":202},[186,130716,948],{"class":523},[186,130718,62498],{"class":198},[186,130720,529],{"class":202},[186,130722,62503],{"class":532},[186,130724,130725],{"class":202},">五彩导航2\u003C\u002F",[186,130727,948],{"class":523},[186,130729,552],{"class":202},[186,130731,130732,130734,130736,130738,130740,130742,130745,130747],{"class":188,"line":225},[186,130733,53591],{"class":202},[186,130735,948],{"class":523},[186,130737,62498],{"class":198},[186,130739,529],{"class":202},[186,130741,62503],{"class":532},[186,130743,130744],{"class":202},">五彩导航3\u003C\u002F",[186,130746,948],{"class":523},[186,130748,552],{"class":202},[186,130750,130751,130753,130755,130757,130759,130761,130764,130766],{"class":188,"line":242},[186,130752,53591],{"class":202},[186,130754,948],{"class":523},[186,130756,62498],{"class":198},[186,130758,529],{"class":202},[186,130760,62503],{"class":532},[186,130762,130763],{"class":202},">五彩导航4\u003C\u002F",[186,130765,948],{"class":523},[186,130767,552],{"class":202},[186,130769,130770,130772,130774,130776,130778,130780,130783,130785],{"class":188,"line":248},[186,130771,53591],{"class":202},[186,130773,948],{"class":523},[186,130775,62498],{"class":198},[186,130777,529],{"class":202},[186,130779,62503],{"class":532},[186,130781,130782],{"class":202},">五彩导航5\u003C\u002F",[186,130784,948],{"class":523},[186,130786,552],{"class":202},[186,130788,130789,130791,130793],{"class":188,"line":265},[186,130790,1470],{"class":202},[186,130792,1450],{"class":523},[186,130794,552],{"class":202},[176,130796,130798],{"className":178,"code":130797,"language":180,"meta":181,"style":181},".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",[183,130799,130800,130809,130819,130831,130843,130853,130865,130875,130879,130903,130926,130949,130972],{"__ignoreMap":181},[186,130801,130802,130805,130807],{"class":188,"line":189},[186,130803,130804],{"class":198},".nav",[186,130806,2871],{"class":523},[186,130808,622],{"class":202},[186,130810,130811,130813,130815,130817],{"class":188,"line":49},[186,130812,129592],{"class":206},[186,130814,210],{"class":202},[186,130816,73817],{"class":206},[186,130818,634],{"class":202},[186,130820,130821,130823,130825,130827,130829],{"class":188,"line":219},[186,130822,796],{"class":206},[186,130824,210],{"class":202},[186,130826,2425],{"class":206},[186,130828,804],{"class":669},[186,130830,634],{"class":202},[186,130832,130833,130835,130837,130839,130841],{"class":188,"line":225},[186,130834,811],{"class":206},[186,130836,210],{"class":202},[186,130838,2464],{"class":206},[186,130840,804],{"class":669},[186,130842,634],{"class":202},[186,130844,130845,130847,130849,130851],{"class":188,"line":242},[186,130846,71963],{"class":206},[186,130848,210],{"class":202},[186,130850,53042],{"class":206},[186,130852,634],{"class":202},[186,130854,130855,130857,130859,130861,130863],{"class":188,"line":248},[186,130856,128663],{"class":206},[186,130858,210],{"class":202},[186,130860,2464],{"class":206},[186,130862,804],{"class":669},[186,130864,634],{"class":202},[186,130866,130867,130869,130871,130873],{"class":188,"line":265},[186,130868,72339],{"class":206},[186,130870,210],{"class":202},[186,130872,62283],{"class":206},[186,130874,634],{"class":202},[186,130876,130877],{"class":188,"line":271},[186,130878,639],{"class":202},[186,130880,130881,130883,130885,130888,130890,130892,130895,130897,130899,130901],{"class":188,"line":288},[186,130882,130804],{"class":198},[186,130884,2871],{"class":523},[186,130886,130887],{"class":198},":nth-child",[186,130889,832],{"class":202},[186,130891,1829],{"class":206},[186,130893,130894],{"class":202},") { ",[186,130896,130586],{"class":206},[186,130898,210],{"class":202},[186,130900,130007],{"class":206},[186,130902,216],{"class":202},[186,130904,130905,130907,130909,130911,130913,130915,130917,130919,130921,130924],{"class":188,"line":294},[186,130906,130804],{"class":198},[186,130908,2871],{"class":523},[186,130910,130887],{"class":198},[186,130912,832],{"class":202},[186,130914,1697],{"class":206},[186,130916,130894],{"class":202},[186,130918,130586],{"class":206},[186,130920,210],{"class":202},[186,130922,130923],{"class":206},"#ff0000",[186,130925,216],{"class":202},[186,130927,130928,130930,130932,130934,130936,130938,130940,130942,130944,130947],{"class":188,"line":1212},[186,130929,130804],{"class":198},[186,130931,2871],{"class":523},[186,130933,130887],{"class":198},[186,130935,832],{"class":202},[186,130937,1691],{"class":206},[186,130939,130894],{"class":202},[186,130941,130586],{"class":206},[186,130943,210],{"class":202},[186,130945,130946],{"class":206},"#00a4ff",[186,130948,216],{"class":202},[186,130950,130951,130953,130955,130957,130959,130961,130963,130965,130967,130970],{"class":188,"line":1223},[186,130952,130804],{"class":198},[186,130954,2871],{"class":523},[186,130956,130887],{"class":198},[186,130958,832],{"class":202},[186,130960,1904],{"class":206},[186,130962,130894],{"class":202},[186,130964,130586],{"class":206},[186,130966,210],{"class":202},[186,130968,130969],{"class":206},"#ff00ff",[186,130971,216],{"class":202},[186,130973,130974,130976,130978,130980,130982,130984,130986,130988,130990,130993],{"class":188,"line":1236},[186,130975,130804],{"class":198},[186,130977,2871],{"class":523},[186,130979,130887],{"class":198},[186,130981,832],{"class":202},[186,130983,1930],{"class":206},[186,130985,130894],{"class":202},[186,130987,130586],{"class":206},[186,130989,210],{"class":202},[186,130991,130992],{"class":206},"#00ff00",[186,130994,216],{"class":202},[14,130996,130998],{"id":130997},"_83-css三大特性","8.3 css三大特性",[29,131000,131002],{"id":131001},"_831-层叠性","8.3.1 层叠性",[169,131004,131005],{},"为了解决样式冲突问题",[169,131007,131008],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[169,131010,131011],{},"   ②样式不冲突，不会层叠",[29,131013,131015],{"id":131014},"_832-继承性","8.3.2 继承性",[169,131017,131018],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[169,131020,131021],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[176,131023,131025],{"className":178,"code":131024,"language":180,"meta":181,"style":181},"p {\n  color: #333;\n}\n",[183,131026,131027,131033,131043],{"__ignoreMap":181},[186,131028,131029,131031],{"class":188,"line":189},[186,131030,169],{"class":523},[186,131032,622],{"class":202},[186,131034,131035,131037,131039,131041],{"class":188,"line":49},[186,131036,72339],{"class":206},[186,131038,210],{"class":202},[186,131040,63807],{"class":206},[186,131042,634],{"class":202},[186,131044,131045],{"class":188,"line":219},[186,131046,639],{"class":202},[164,131048],{"style":166,"src":131049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[169,131051,131052],{},"解释：①行高可以跟单位也可以不跟单位",[169,131054,131055],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[169,131057,131058],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[169,131060,131061],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[29,131063,131065],{"id":131064},"_833-优先级","8.3.3 优先级",[34,131067,131068,131071],{},[22,131069,131070],{},"选择器相同，则执行层叠性",[22,131072,131073],{},"选择器不同，则根据选择器权重执行",[99,131075,131076,131086],{},[102,131077,131078],{},[105,131079,131080,131083],{},[108,131081,131082],{"align":110},"选择器",[108,131084,131085],{"align":110},"选择器权重",[116,131087,131088,131096,131104,131112,131120,131128],{},[105,131089,131090,131093],{},[121,131091,131092],{"align":110},"继承 或者*",[121,131094,131095],{"align":110},"0，0，0，0",[105,131097,131098,131101],{},[121,131099,131100],{"align":110},"标签选择器",[121,131102,131103],{"align":110},"0，0，0，1",[105,131105,131106,131109],{},[121,131107,131108],{"align":110},"类选择器，伪类选择器",[121,131110,131111],{"align":110},"0，0，1，0",[105,131113,131114,131117],{},[121,131115,131116],{"align":110},"ID选择器",[121,131118,131119],{"align":110},"0，1，0，0",[105,131121,131122,131125],{},[121,131123,131124],{"align":110},"行内样式",[121,131126,131127],{"align":110},"1，0，0，0",[105,131129,131130,131133],{},[121,131131,131132],{"align":110},"！important",[121,131134,131135],{"align":110},"无穷大",[169,131137,131138],{},"! important用法：",[176,131140,131142],{"className":178,"code":131141,"language":180,"meta":181,"style":181},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[183,131143,131144,131149,131155,131168,131172,131177,131183,131193],{"__ignoreMap":181},[186,131145,131146],{"class":188,"line":189},[186,131147,131148],{"class":192},"\u002F* !important 拥有最高优先级 *\u002F\n",[186,131150,131151,131153],{"class":188,"line":49},[186,131152,1450],{"class":523},[186,131154,622],{"class":202},[186,131156,131157,131159,131161,131163,131166],{"class":188,"line":219},[186,131158,72339],{"class":206},[186,131160,210],{"class":202},[186,131162,53094],{"class":206},[186,131164,131165],{"class":669}," !important",[186,131167,634],{"class":202},[186,131169,131170],{"class":188,"line":225},[186,131171,639],{"class":202},[186,131173,131174],{"class":188,"line":242},[186,131175,131176],{"class":192},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[186,131178,131179,131181],{"class":188,"line":248},[186,131180,1450],{"class":523},[186,131182,622],{"class":202},[186,131184,131185,131187,131189,131191],{"class":188,"line":265},[186,131186,72339],{"class":206},[186,131188,210],{"class":202},[186,131190,58862],{"class":206},[186,131192,634],{"class":202},[186,131194,131195],{"class":188,"line":271},[186,131196,639],{"class":202},[169,131198,131199],{},"优先级注意点：",[169,131201,131202],{},"①权重是有4组数字组成,但是不会有进位",[169,131204,131205],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[169,131207,131208],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[169,131210,131211],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[169,131213,131214],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[169,131216,131217],{},"⑥复合选择器",[99,131219,131220,131230],{},[102,131221,131222],{},[105,131223,131224,131227],{},[108,131225,131226],{"align":110},"div ul li",[108,131228,131229],{"align":110},"0,0,0,3",[116,131231,131232,131240,131248],{},[105,131233,131234,131237],{},[121,131235,131236],{"align":110},".nav ul li",[121,131238,131239],{"align":110},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[105,131241,131242,131245],{},[121,131243,131244],{"align":110},"a:hover",[121,131246,131247],{"align":110},"0,0,1,1",[105,131249,131250,131253],{},[121,131251,131252],{"align":110},".nav a",[121,131254,131247],{"align":110},[1524,131256,131257],{},"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":181,"searchDepth":49,"depth":49,"links":131259},[131260,131268,131279],{"id":129372,"depth":49,"text":129373,"children":131261},[131262,131263,131264,131265,131266,131267],{"id":129385,"depth":219,"text":129386},{"id":129457,"depth":219,"text":129458},{"id":129529,"depth":219,"text":129530},{"id":129560,"depth":219,"text":129561},{"id":129567,"depth":219,"text":129568},{"id":129720,"depth":219,"text":129721},{"id":130028,"depth":49,"text":130029,"children":131269},[131270,131271,131272,131273,131274,131275,131276,131277,131278],{"id":130035,"depth":219,"text":130036},{"id":130045,"depth":219,"text":130046},{"id":130141,"depth":219,"text":130142},{"id":130214,"depth":219,"text":130215},{"id":130367,"depth":219,"text":130368},{"id":130454,"depth":219,"text":130455},{"id":130506,"depth":219,"text":130507},{"id":130565,"depth":219,"text":130566},{"id":130670,"depth":219,"text":130671},{"id":130997,"depth":49,"text":130998,"children":131280},[131281,131282,131283],{"id":131001,"depth":219,"text":131002},{"id":131014,"depth":219,"text":131015},{"id":131064,"depth":219,"text":131065},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129364,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131290,"title":131291,"body":131292,"description":1548,"extension":1549,"meta":132878,"navigation":1551,"path":132879,"seo":132880,"stem":132881,"__hash__":132882},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131293,"toc":132857},[131294,131297,131301,131304,131307,131310,131313,131316,131319,131322,131326,131334,131371,131407,131410,131424,131429,131463,131466,131559,131564,131567,131597,131600,131605,131613,131617,131624,131670,131714,131719,131722,131725,131728,131731,131734,131737,131739,131742,131746,131751,131795,131800,131803,131806,131843,131848,131851,131854,131857,131860,131892,131895,131898,131901,131933,131936,131939,131942,131946,131949,131981,131984,131988,132008,132011,132019,132022,132026,132031,132034,132066,132071,132074,132108,132112,132117,132120,132123,132154,132157,132174,132179,132231,132291,132296,132350,132388,132392,132396,132399,132403,132411,132414,132416,132427,132432,132480,132514,132517,132520,132523,132526,132570,132573,132576,132579,132582,132585,132588,132632,132635,132638,132641,132644,132647,132650,132656,132659,132703,132706,132709,132712,132715,132718,132762,132765,132767,132770,132774,132778,132816,132820,132823,132826,132830,132838,132842,132845,132848,132851,132854],[10,131295,131291],{"id":131296},"_9-css盒模型浮动与切图",[14,131298,131300],{"id":131299},"_91-盒子模型","9.1 盒子模型",[169,131302,131303],{},"利用盒子来设计网页",[169,131305,131306],{},"盒子包含：边框、外边距、内边距、实际内容",[169,131308,131309],{},"网页布局设置：",[169,131311,131312],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[169,131314,131315],{},"②利用css设置好盒子样式，然后摆放到相应位置",[169,131317,131318],{},"③往盒子里装内容",[164,131320],{"style":166,"src":131321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[29,131323,131325],{"id":131324},"_911-边框border","9.1.1 边框（border）",[34,131327,131328,131331],{},[22,131329,131330],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[22,131332,131333],{},"语法",[176,131335,131337],{"className":178,"code":131336,"language":180,"meta":181,"style":181},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[183,131338,131339,131344,131350,131367],{"__ignoreMap":181},[186,131340,131341],{"class":188,"line":189},[186,131342,131343],{"class":192},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[186,131345,131346,131348],{"class":188,"line":49},[186,131347,1450],{"class":523},[186,131349,622],{"class":202},[186,131351,131352,131354,131356,131358,131360,131362,131365],{"class":188,"line":219},[186,131353,72330],{"class":206},[186,131355,210],{"class":202},[186,131357,1829],{"class":206},[186,131359,804],{"class":669},[186,131361,52971],{"class":206},[186,131363,131364],{"class":206}," #ccc",[186,131366,634],{"class":202},[186,131368,131369],{"class":188,"line":225},[186,131370,639],{"class":202},[99,131372,131373,131381],{},[102,131374,131375],{},[105,131376,131377,131379],{},[108,131378,130575],{"align":110},[108,131380,104127],{"align":110},[116,131382,131383,131391,131399],{},[105,131384,131385,131388],{},[121,131386,131387],{"align":110},"border-width",[121,131389,131390],{"align":110},"定义边框粗细，单位是px",[105,131392,131393,131396],{},[121,131394,131395],{"align":110},"border-style",[121,131397,131398],{"align":110},"边框的样式",[105,131400,131401,131404],{},[121,131402,131403],{"align":110},"border-color",[121,131405,131406],{"align":110},"边框的颜色",[169,131408,131409],{},"边框样式 border-style 可以设置如下值：",[19,131411,131412,131415,131418,131421],{},[22,131413,131414],{},"none：没有边框即忽略所有边框的宽度（默认值）",[22,131416,131417],{},"solid：边框为单实线(最为常用的)",[22,131419,131420],{},"dashed：边框为虚线",[22,131422,131423],{},"dotted：边框为点线",[34,131425,131426],{"start":219},[22,131427,131428],{},"边框的合写分写",[176,131430,131431],{"className":178,"code":131336,"language":180,"meta":181,"style":181},[183,131432,131433,131437,131443,131459],{"__ignoreMap":181},[186,131434,131435],{"class":188,"line":189},[186,131436,131343],{"class":192},[186,131438,131439,131441],{"class":188,"line":49},[186,131440,1450],{"class":523},[186,131442,622],{"class":202},[186,131444,131445,131447,131449,131451,131453,131455,131457],{"class":188,"line":219},[186,131446,72330],{"class":206},[186,131448,210],{"class":202},[186,131450,1829],{"class":206},[186,131452,804],{"class":669},[186,131454,52971],{"class":206},[186,131456,131364],{"class":206},[186,131458,634],{"class":202},[186,131460,131461],{"class":188,"line":225},[186,131462,639],{"class":202},[169,131464,131465],{},"边框分开写法：",[176,131467,131469],{"className":178,"code":131468,"language":180,"meta":181,"style":181},"\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",[183,131470,131471,131476,131482,131500,131518,131537,131555],{"__ignoreMap":181},[186,131472,131473],{"class":188,"line":189},[186,131474,131475],{"class":192},"\u002F* 边框分开写法 *\u002F\n",[186,131477,131478,131480],{"class":188,"line":49},[186,131479,1450],{"class":523},[186,131481,622],{"class":202},[186,131483,131484,131487,131489,131491,131493,131495,131498],{"class":188,"line":219},[186,131485,131486],{"class":206},"  border-top",[186,131488,210],{"class":202},[186,131490,1829],{"class":206},[186,131492,804],{"class":669},[186,131494,52971],{"class":206},[186,131496,131497],{"class":206}," #000",[186,131499,634],{"class":202},[186,131501,131502,131505,131507,131509,131511,131513,131516],{"class":188,"line":225},[186,131503,131504],{"class":206},"  border-right",[186,131506,210],{"class":202},[186,131508,1697],{"class":206},[186,131510,804],{"class":669},[186,131512,63679],{"class":206},[186,131514,131515],{"class":206}," #333",[186,131517,634],{"class":202},[186,131519,131520,131523,131525,131527,131529,131532,131535],{"class":188,"line":242},[186,131521,131522],{"class":206},"  border-bottom",[186,131524,210],{"class":202},[186,131526,1691],{"class":206},[186,131528,804],{"class":669},[186,131530,131531],{"class":206}," dotted",[186,131533,131534],{"class":206}," #666",[186,131536,634],{"class":202},[186,131538,131539,131542,131544,131546,131548,131550,131553],{"class":188,"line":248},[186,131540,131541],{"class":206},"  border-left",[186,131543,210],{"class":202},[186,131545,1829],{"class":206},[186,131547,804],{"class":669},[186,131549,52971],{"class":206},[186,131551,131552],{"class":206}," #999",[186,131554,634],{"class":202},[186,131556,131557],{"class":188,"line":265},[186,131558,639],{"class":202},[34,131560,131561],{"start":225},[22,131562,131563],{},"表格的细线边框",[169,131565,131566],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[176,131568,131570],{"className":178,"code":131569,"language":180,"meta":181,"style":181},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[183,131571,131572,131577,131583,131593],{"__ignoreMap":181},[186,131573,131574],{"class":188,"line":189},[186,131575,131576],{"class":192},"\u002F* 表格细线边框合并 *\u002F\n",[186,131578,131579,131581],{"class":188,"line":49},[186,131580,99],{"class":523},[186,131582,622],{"class":202},[186,131584,131585,131587,131589,131591],{"class":188,"line":219},[186,131586,72014],{"class":206},[186,131588,210],{"class":202},[186,131590,66472],{"class":206},[186,131592,634],{"class":202},[186,131594,131595],{"class":188,"line":225},[186,131596,639],{"class":202},[169,131598,131599],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[34,131601,131602],{"start":242},[22,131603,131604],{},"解决边框额外增加盒子的实际大小的方法：",[19,131606,131607,131610],{},[22,131608,131609],{},"测量盒子大小的时候,不量边框",[22,131611,131612],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[29,131614,131616],{"id":131615},"_912-内边距","9.1.2 内边距",[34,131618,131619,131622],{},[22,131620,131621],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[22,131623,131333],{},[99,131625,131626,131636],{},[102,131627,131628],{},[105,131629,131630,131633],{},[108,131631,131632],{"align":110},"值的个数",[108,131634,131635],{"align":110},"表达意思",[116,131637,131638,131646,131654,131662],{},[105,131639,131640,131643],{},[121,131641,131642],{"align":110},"padding: 5px;",[121,131644,131645],{"align":110},"1个值，代表上下左右都有5个元素",[105,131647,131648,131651],{},[121,131649,131650],{"align":110},"padding: 5px 10px;",[121,131652,131653],{"align":110},"2个值，代表上下内边距为5像素，左右内边距为10像素",[105,131655,131656,131659],{},[121,131657,131658],{"align":110},"padding: 5px 10px 20px;",[121,131660,131661],{"align":110},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[105,131663,131664,131667],{},[121,131665,131666],{"align":110},"padding: 5px 10px 20px 30px;",[121,131668,131669],{"align":110},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[99,131671,131672,131680],{},[102,131673,131674],{},[105,131675,131676,131678],{},[108,131677,130575],{"align":110},[108,131679,104127],{"align":110},[116,131681,131682,131690,131698,131706],{},[105,131683,131684,131687],{},[121,131685,131686],{"align":110},"padding-left",[121,131688,131689],{"align":110},"左内边距",[105,131691,131692,131695],{},[121,131693,131694],{"align":110},"padding-right",[121,131696,131697],{"align":110},"右内边距",[105,131699,131700,131703],{},[121,131701,131702],{"align":110},"padding-top",[121,131704,131705],{"align":110},"上内边距",[105,131707,131708,131711],{},[121,131709,131710],{"align":110},"padding-bottom",[121,131712,131713],{"align":110},"下内边距",[34,131715,131716],{"start":219},[22,131717,131718],{},"内边距会影响盒子的实际大小",[169,131720,131721],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[169,131723,131724],{},"①内容和边框有了距离，添加了内边距",[169,131726,131727],{},"②padding影响了盒子实际大小",[169,131729,131730],{},"内边距对盒子大小的影响：",[169,131732,131733],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[169,131735,131736],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[169,131738,96651],{},[169,131740,131741],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[29,131743,131745],{"id":131744},"_913-外边距","9.1.3 外边距",[34,131747,131748],{},[22,131749,131750],{},"控制盒子与盒子之间的距离",[99,131752,131753,131761],{},[102,131754,131755],{},[105,131756,131757,131759],{},[108,131758,130575],{"align":110},[108,131760,104127],{"align":110},[116,131762,131763,131771,131779,131787],{},[105,131764,131765,131768],{},[121,131766,131767],{"align":110},"margin-left",[121,131769,131770],{"align":110},"左外边距",[105,131772,131773,131776],{},[121,131774,131775],{"align":110},"margin-right",[121,131777,131778],{"align":110},"右外边距",[105,131780,131781,131784],{},[121,131782,131783],{"align":110},"margin-top",[121,131785,131786],{"align":110},"上外边距",[105,131788,131789,131792],{},[121,131790,131791],{"align":110},"margin-bottom",[121,131793,131794],{"align":110},"下外边距",[34,131796,131797],{"start":49},[22,131798,131799],{},"外边距可以让块级盒子水平居中的两个条件：",[169,131801,131802],{},"①盒子必须指定了宽度（width）",[169,131804,131805],{},"②盒子左右的外边距都设置为 auto",[176,131807,131809],{"className":178,"code":131808,"language":180,"meta":181,"style":181},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[183,131810,131811,131816,131823,131839],{"__ignoreMap":181},[186,131812,131813],{"class":188,"line":189},[186,131814,131815],{"class":192},"\u002F* margin 复合写法（同上） *\u002F\n",[186,131817,131818,131821],{"class":188,"line":49},[186,131819,131820],{"class":198},".box",[186,131822,622],{"class":202},[186,131824,131825,131827,131829,131831,131833,131836],{"class":188,"line":219},[186,131826,71907],{"class":206},[186,131828,210],{"class":202},[186,131830,1803],{"class":206},[186,131832,53006],{"class":206},[186,131834,131835],{"class":202},";  ",[186,131837,131838],{"class":192},"\u002F* 块级盒子水平居中 *\u002F\n",[186,131840,131841],{"class":188,"line":225},[186,131842,639],{"class":202},[34,131844,131845],{"start":219},[22,131846,131847],{},"外边距塌陷问题",[169,131849,131850],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[164,131852],{"style":166,"src":131853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[169,131855,131856],{},"解决方案：",[169,131858,131859],{},"①可以为父亲元素定义上边距",[176,131861,131862],{"className":178,"code":131808,"language":180,"meta":181,"style":181},[183,131863,131864,131868,131874,131888],{"__ignoreMap":181},[186,131865,131866],{"class":188,"line":189},[186,131867,131815],{"class":192},[186,131869,131870,131872],{"class":188,"line":49},[186,131871,131820],{"class":198},[186,131873,622],{"class":202},[186,131875,131876,131878,131880,131882,131884,131886],{"class":188,"line":219},[186,131877,71907],{"class":206},[186,131879,210],{"class":202},[186,131881,1803],{"class":206},[186,131883,53006],{"class":206},[186,131885,131835],{"class":202},[186,131887,131838],{"class":192},[186,131889,131890],{"class":188,"line":225},[186,131891,639],{"class":202},[169,131893,131894],{},"②可以为父亲元素定义上内边距",[169,131896,131897],{},"③可以为父亲元素添加overflow:hidden",[164,131899],{"style":166,"src":131900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[176,131902,131903],{"className":178,"code":131808,"language":180,"meta":181,"style":181},[183,131904,131905,131909,131915,131929],{"__ignoreMap":181},[186,131906,131907],{"class":188,"line":189},[186,131908,131815],{"class":192},[186,131910,131911,131913],{"class":188,"line":49},[186,131912,131820],{"class":198},[186,131914,622],{"class":202},[186,131916,131917,131919,131921,131923,131925,131927],{"class":188,"line":219},[186,131918,71907],{"class":206},[186,131920,210],{"class":202},[186,131922,1803],{"class":206},[186,131924,53006],{"class":206},[186,131926,131835],{"class":202},[186,131928,131838],{"class":192},[186,131930,131931],{"class":188,"line":225},[186,131932,639],{"class":202},[164,131934],{"style":166,"src":131935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[169,131937,131938],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[169,131940,131941],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[29,131943,131945],{"id":131944},"_914-清除内外边距","9.1.4 清除内外边距",[169,131947,131948],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[176,131950,131951],{"className":178,"code":131808,"language":180,"meta":181,"style":181},[183,131952,131953,131957,131963,131977],{"__ignoreMap":181},[186,131954,131955],{"class":188,"line":189},[186,131956,131815],{"class":192},[186,131958,131959,131961],{"class":188,"line":49},[186,131960,131820],{"class":198},[186,131962,622],{"class":202},[186,131964,131965,131967,131969,131971,131973,131975],{"class":188,"line":219},[186,131966,71907],{"class":206},[186,131968,210],{"class":202},[186,131970,1803],{"class":206},[186,131972,53006],{"class":206},[186,131974,131835],{"class":202},[186,131976,131838],{"class":192},[186,131978,131979],{"class":188,"line":225},[186,131980,639],{"class":202},[169,131982,131983],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[29,131985,131987],{"id":131986},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[19,131989,131990,131993,131996,131999,132002,132005],{},[22,131991,131992],{},"文件→打开 ：可以打开我们要测量的图片",[22,131994,131995],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[22,131997,131998],{},"右击标尺，把里面的单位改为像素",[22,132000,132001],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[22,132003,132004],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[22,132006,132007],{},"用选区拖动 可以测量大小",[164,132009],{"style":166,"src":132010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[19,132012,132013,132016],{},[22,132014,132015],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[22,132017,132018],{},"吸管取色工具",[164,132020],{"style":166,"src":132021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[29,132023,132025],{"id":132024},"_916-案例","9.1.6 案例",[34,132027,132028],{},[22,132029,132030],{},"小米商品",[164,132032],{"style":166,"src":132033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[176,132035,132036],{"className":178,"code":131808,"language":180,"meta":181,"style":181},[183,132037,132038,132042,132048,132062],{"__ignoreMap":181},[186,132039,132040],{"class":188,"line":189},[186,132041,131815],{"class":192},[186,132043,132044,132046],{"class":188,"line":49},[186,132045,131820],{"class":198},[186,132047,622],{"class":202},[186,132049,132050,132052,132054,132056,132058,132060],{"class":188,"line":219},[186,132051,71907],{"class":206},[186,132053,210],{"class":202},[186,132055,1803],{"class":206},[186,132057,53006],{"class":206},[186,132059,131835],{"class":202},[186,132061,131838],{"class":192},[186,132063,132064],{"class":188,"line":225},[186,132065,639],{"class":202},[34,132067,132068],{"start":49},[22,132069,132070],{},"快报模块",[164,132072],{"style":166,"src":132073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[176,132075,132076],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,132077,132078,132082,132096,132100],{"__ignoreMap":181},[186,132079,132080],{"class":188,"line":189},[186,132081,1443],{"class":192},[186,132083,132084,132086,132088,132090,132092,132094],{"class":188,"line":49},[186,132085,520],{"class":202},[186,132087,1450],{"class":523},[186,132089,1453],{"class":198},[186,132091,529],{"class":202},[186,132093,1458],{"class":532},[186,132095,552],{"class":202},[186,132097,132098],{"class":188,"line":219},[186,132099,1465],{"class":202},[186,132101,132102,132104,132106],{"class":188,"line":225},[186,132103,1470],{"class":202},[186,132105,1450],{"class":523},[186,132107,552],{"class":202},[29,132109,132111],{"id":132110},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[34,132113,132114],{},[22,132115,132116],{},"圆角边框",[169,132118,132119],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[164,132121],{"style":166,"src":132122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[176,132124,132126],{"className":178,"code":132125,"language":180,"meta":181,"style":181},"div {\n  border: 1px solid #ccc;\n}\n",[183,132127,132128,132134,132150],{"__ignoreMap":181},[186,132129,132130,132132],{"class":188,"line":189},[186,132131,1450],{"class":523},[186,132133,622],{"class":202},[186,132135,132136,132138,132140,132142,132144,132146,132148],{"class":188,"line":49},[186,132137,72330],{"class":206},[186,132139,210],{"class":202},[186,132141,1829],{"class":206},[186,132143,804],{"class":669},[186,132145,52971],{"class":206},[186,132147,131364],{"class":206},[186,132149,634],{"class":202},[186,132151,132152],{"class":188,"line":219},[186,132153,639],{"class":202},[169,132155,132156],{},"解释:",[19,132158,132159,132162,132165,132168,132171],{},[22,132160,132161],{},"参数值可以为数值或百分比的形式",[22,132163,132164],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[22,132166,132167],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[22,132169,132170],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[22,132172,132173],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[34,132175,132176],{"start":49},[22,132177,132178],{},"盒子阴影",[176,132180,132182],{"className":178,"code":132181,"language":180,"meta":181,"style":181},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[183,132183,132184,132190,132227],{"__ignoreMap":181},[186,132185,132186,132188],{"class":188,"line":189},[186,132187,1450],{"class":523},[186,132189,622],{"class":202},[186,132191,132192,132195,132197,132199,132201,132203,132205,132207,132209,132211,132213,132215,132217,132219,132221,132223,132225],{"class":188,"line":49},[186,132193,132194],{"class":206},"  box-shadow",[186,132196,210],{"class":202},[186,132198,1803],{"class":206},[186,132200,16217],{"class":206},[186,132202,804],{"class":669},[186,132204,3505],{"class":206},[186,132206,804],{"class":669},[186,132208,80200],{"class":206},[186,132210,832],{"class":202},[186,132212,1803],{"class":206},[186,132214,13898],{"class":202},[186,132216,1803],{"class":206},[186,132218,13898],{"class":202},[186,132220,1803],{"class":206},[186,132222,13898],{"class":202},[186,132224,87642],{"class":206},[186,132226,1112],{"class":202},[186,132228,132229],{"class":188,"line":219},[186,132230,639],{"class":202},[99,132232,132233,132241],{},[102,132234,132235],{},[105,132236,132237,132239],{},[108,132238,1766],{"align":110},[108,132240,114],{"align":110},[116,132242,132243,132251,132259,132267,132275,132283],{},[105,132244,132245,132248],{},[121,132246,132247],{"align":110},"h-shadow",[121,132249,132250],{"align":110},"必需,水平阴影的位置,允许负值",[105,132252,132253,132256],{},[121,132254,132255],{"align":110},"v-shadow",[121,132257,132258],{"align":110},"必需,垂直阴影的位置,允许负值",[105,132260,132261,132264],{},[121,132262,132263],{"align":110},"blur",[121,132265,132266],{"align":110},"可选,模糊距离,就是影子的虚实",[105,132268,132269,132272],{},[121,132270,132271],{"align":110},"spread",[121,132273,132274],{"align":110},"可选,阴影尺寸",[105,132276,132277,132280],{},[121,132278,132279],{"align":110},"color",[121,132281,132282],{"align":110},"可选,阴影的颜色",[105,132284,132285,132288],{},[121,132286,132287],{"align":110},"inset",[121,132289,132290],{"align":110},"可选,将外部阴影(outset)改为内部阴影",[34,132292,132293],{"start":219},[22,132294,132295],{},"文字阴影",[176,132297,132299],{"className":178,"code":132298,"language":180,"meta":181,"style":181},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[183,132300,132301,132307,132346],{"__ignoreMap":181},[186,132302,132303,132305],{"class":188,"line":189},[186,132304,169],{"class":523},[186,132306,622],{"class":202},[186,132308,132309,132312,132314,132316,132318,132320,132322,132324,132326,132328,132330,132332,132334,132336,132338,132340,132342,132344],{"class":188,"line":49},[186,132310,132311],{"class":206},"  text-shadow",[186,132313,210],{"class":202},[186,132315,1829],{"class":206},[186,132317,804],{"class":669},[186,132319,26577],{"class":206},[186,132321,804],{"class":669},[186,132323,16217],{"class":206},[186,132325,804],{"class":669},[186,132327,80200],{"class":206},[186,132329,832],{"class":202},[186,132331,1803],{"class":206},[186,132333,13898],{"class":202},[186,132335,1803],{"class":206},[186,132337,13898],{"class":202},[186,132339,1803],{"class":206},[186,132341,13898],{"class":202},[186,132343,101952],{"class":206},[186,132345,1112],{"class":202},[186,132347,132348],{"class":188,"line":219},[186,132349,639],{"class":202},[99,132351,132352,132360],{},[102,132353,132354],{},[105,132355,132356,132358],{},[108,132357,1766],{"align":110},[108,132359,114],{"align":110},[116,132361,132362,132368,132375,132382],{},[105,132363,132364,132366],{},[121,132365,132247],{"align":110},[121,132367,132250],{"align":110},[105,132369,132370,132372],{},[121,132371,132255],{"align":110},[121,132373,132374],{"align":110},"必需,垂直阴影位置,允许负值",[105,132376,132377,132379],{},[121,132378,132263],{"align":110},[121,132380,132381],{"align":110},"可选,模糊的距离",[105,132383,132384,132386],{},[121,132385,132279],{"align":110},[121,132387,132282],{"align":110},[14,132389,132391],{"id":132390},"_92-浮动","9.2 浮动",[29,132393,132395],{"id":132394},"_921-浮动介绍","9.2.1 浮动介绍",[169,132397,132398],{},"在16.2中详细介绍",[29,132400,132402],{"id":132401},"_922-清除浮动","9.2.2 清除浮动",[34,132404,132405,132408],{},[22,132406,132407],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[22,132409,132410],{},"清除浮动的本质",[169,132412,132413],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[169,132415,10488],{},[19,132417,132418,132421,132424],{},[22,132419,132420],{},"如果父盒子本身有高度，则不需要清除浮动",[22,132422,132423],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[22,132425,132426],{},"父级有了高度，就不会影响下面的标准流了",[34,132428,132429],{"start":219},[22,132430,132431],{},"清除浮动样式",[176,132433,132435],{"className":178,"code":132434,"language":180,"meta":181,"style":181},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[183,132436,132437,132444,132455,132459,132466,132476],{"__ignoreMap":181},[186,132438,132439,132442],{"class":188,"line":189},[186,132440,132441],{"class":198},".left",[186,132443,622],{"class":202},[186,132445,132446,132449,132451,132453],{"class":188,"line":49},[186,132447,132448],{"class":206},"  float",[186,132450,210],{"class":202},[186,132452,110],{"class":206},[186,132454,634],{"class":202},[186,132456,132457],{"class":188,"line":219},[186,132458,639],{"class":202},[186,132460,132461,132464],{"class":188,"line":225},[186,132462,132463],{"class":198},".right",[186,132465,622],{"class":202},[186,132467,132468,132470,132472,132474],{"class":188,"line":242},[186,132469,132448],{"class":206},[186,132471,210],{"class":202},[186,132473,73956],{"class":206},[186,132475,634],{"class":202},[186,132477,132478],{"class":188,"line":248},[186,132479,639],{"class":202},[99,132481,132482,132490],{},[102,132483,132484],{},[105,132485,132486,132488],{},[108,132487,111],{"align":110},[108,132489,114],{"align":110},[116,132491,132492,132499,132506],{},[105,132493,132494,132496],{},[121,132495,110],{"align":110},[121,132497,132498],{"align":110},"不允许左侧有浮动元素（清除左侧浮动的影响）",[105,132500,132501,132503],{},[121,132502,73956],{"align":110},[121,132504,132505],{"align":110},"不允许右侧有浮动元素（清除右侧浮动的影响）",[105,132507,132508,132511],{},[121,132509,132510],{"align":110},"both",[121,132512,132513],{"align":110},"同时清除左右侧浮动的影响",[169,132515,132516],{},"法一",[169,132518,132519],{},"额外标签法也称为隔墙法",[169,132521,132522],{},"使用方式：",[169,132524,132525],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[176,132527,132528],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,132529,132530,132536,132546,132550,132556,132566],{"__ignoreMap":181},[186,132531,132532,132534],{"class":188,"line":189},[186,132533,132441],{"class":198},[186,132535,622],{"class":202},[186,132537,132538,132540,132542,132544],{"class":188,"line":49},[186,132539,132448],{"class":206},[186,132541,210],{"class":202},[186,132543,110],{"class":206},[186,132545,634],{"class":202},[186,132547,132548],{"class":188,"line":219},[186,132549,639],{"class":202},[186,132551,132552,132554],{"class":188,"line":225},[186,132553,132463],{"class":198},[186,132555,622],{"class":202},[186,132557,132558,132560,132562,132564],{"class":188,"line":242},[186,132559,132448],{"class":206},[186,132561,210],{"class":202},[186,132563,73956],{"class":206},[186,132565,634],{"class":202},[186,132567,132568],{"class":188,"line":248},[186,132569,639],{"class":202},[169,132571,132572],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[169,132574,132575],{},"优点： 通俗易懂，书写方便",[169,132577,132578],{},"缺点： 添加许多无意义的标签，结构化较差",[169,132580,132581],{},"注意： 要求这个新的空标签必须是块级元素。",[169,132583,132584],{},"法二",[169,132586,132587],{},"父级添加overflow属性",[176,132589,132590],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,132591,132592,132598,132608,132612,132618,132628],{"__ignoreMap":181},[186,132593,132594,132596],{"class":188,"line":189},[186,132595,132441],{"class":198},[186,132597,622],{"class":202},[186,132599,132600,132602,132604,132606],{"class":188,"line":49},[186,132601,132448],{"class":206},[186,132603,210],{"class":202},[186,132605,110],{"class":206},[186,132607,634],{"class":202},[186,132609,132610],{"class":188,"line":219},[186,132611,639],{"class":202},[186,132613,132614,132616],{"class":188,"line":225},[186,132615,132463],{"class":198},[186,132617,622],{"class":202},[186,132619,132620,132622,132624,132626],{"class":188,"line":242},[186,132621,132448],{"class":206},[186,132623,210],{"class":202},[186,132625,73956],{"class":206},[186,132627,634],{"class":202},[186,132629,132630],{"class":188,"line":248},[186,132631,639],{"class":202},[169,132633,132634],{},"overflow: hidden;",[169,132636,132637],{},"优点：代码简洁",[169,132639,132640],{},"缺点：无法显示溢出的部分",[169,132642,132643],{},"注意：是给父元素添加代码",[169,132645,132646],{},"法三",[169,132648,132649],{},"父级添加after伪元素",[169,132651,132652,132655],{},[132653,132654],"after",{}," 方式是额外标签法的升级版",[169,132657,132658],{},"使用的时候复制就可以",[176,132660,132661],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,132662,132663,132669,132679,132683,132689,132699],{"__ignoreMap":181},[186,132664,132665,132667],{"class":188,"line":189},[186,132666,132441],{"class":198},[186,132668,622],{"class":202},[186,132670,132671,132673,132675,132677],{"class":188,"line":49},[186,132672,132448],{"class":206},[186,132674,210],{"class":202},[186,132676,110],{"class":206},[186,132678,634],{"class":202},[186,132680,132681],{"class":188,"line":219},[186,132682,639],{"class":202},[186,132684,132685,132687],{"class":188,"line":225},[186,132686,132463],{"class":198},[186,132688,622],{"class":202},[186,132690,132691,132693,132695,132697],{"class":188,"line":242},[186,132692,132448],{"class":206},[186,132694,210],{"class":202},[186,132696,73956],{"class":206},[186,132698,634],{"class":202},[186,132700,132701],{"class":188,"line":248},[186,132702,639],{"class":202},[169,132704,132705],{},"优点：没有增加标签，结构更简单",[169,132707,132708],{},"缺点：照顾低版本浏览器",[169,132710,132711],{},"代表网站： 百度、淘宝网、网易等",[169,132713,132714],{},"法四",[169,132716,132717],{},"父级添加双伪元素",[176,132719,132720],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,132721,132722,132728,132738,132742,132748,132758],{"__ignoreMap":181},[186,132723,132724,132726],{"class":188,"line":189},[186,132725,132441],{"class":198},[186,132727,622],{"class":202},[186,132729,132730,132732,132734,132736],{"class":188,"line":49},[186,132731,132448],{"class":206},[186,132733,210],{"class":202},[186,132735,110],{"class":206},[186,132737,634],{"class":202},[186,132739,132740],{"class":188,"line":219},[186,132741,639],{"class":202},[186,132743,132744,132746],{"class":188,"line":225},[186,132745,132463],{"class":198},[186,132747,622],{"class":202},[186,132749,132750,132752,132754,132756],{"class":188,"line":242},[186,132751,132448],{"class":206},[186,132753,210],{"class":202},[186,132755,73956],{"class":206},[186,132757,634],{"class":202},[186,132759,132760],{"class":188,"line":248},[186,132761,639],{"class":202},[169,132763,132764],{},"优点：代码更简洁",[169,132766,132708],{},[169,132768,132769],{},"代表网站：小米、腾讯等",[14,132771,132773],{"id":132772},"_93-ps切图","9.3 PS切图",[29,132775,132777],{"id":132776},"_931-常见图片格式","9.3.1 常见图片格式",[99,132779,132780,132790],{},[102,132781,132782],{},[105,132783,132784,132787],{},[108,132785,132786],{"align":110},"jpg图像格式",[108,132788,132789],{"align":110},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[116,132791,132792,132800,132808],{},[105,132793,132794,132797],{},[121,132795,132796],{"align":110},"gif图像格式",[121,132798,132799],{"align":110},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[105,132801,132802,132805],{},[121,132803,132804],{"align":110},"png图像格式",[121,132806,132807],{"align":110},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[105,132809,132810,132813],{},[121,132811,132812],{"align":110},"PSD图像格式",[121,132814,132815],{"align":110},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[29,132817,132819],{"id":132818},"_932-图层切图","9.3.2 图层切图",[169,132821,132822],{},"最简单的切图方式：右击图层 → 导出 → 切片",[169,132824,132825],{},"按住shift选中两个图层->图层菜单->合并图层",[29,132827,132829],{"id":132828},"_933-切片切图","9.3.3 切片切图",[19,132831,132832,132835],{},[22,132833,132834],{},"利用切片工具手动划出",[22,132836,132837],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[29,132839,132841],{"id":132840},"_934-切图步骤","9.3.4 切图步骤",[169,132843,132844],{},"用切片工具选中：",[164,132846],{"style":166,"src":132847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[169,132849,132850],{},"文件 -> 导出",[164,132852],{"style":166,"src":132853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1524,132855,132856],{},"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":181,"searchDepth":49,"depth":49,"links":132858},[132859,132868,132872],{"id":131299,"depth":49,"text":131300,"children":132860},[132861,132862,132863,132864,132865,132866,132867],{"id":131324,"depth":219,"text":131325},{"id":131615,"depth":219,"text":131616},{"id":131744,"depth":219,"text":131745},{"id":131944,"depth":219,"text":131945},{"id":131986,"depth":219,"text":131987},{"id":132024,"depth":219,"text":132025},{"id":132110,"depth":219,"text":132111},{"id":132390,"depth":49,"text":132391,"children":132869},[132870,132871],{"id":132394,"depth":219,"text":132395},{"id":132401,"depth":219,"text":132402},{"id":132772,"depth":49,"text":132773,"children":132873},[132874,132875,132876,132877],{"id":132776,"depth":219,"text":132777},{"id":132818,"depth":219,"text":132819},{"id":132828,"depth":219,"text":132829},{"id":132840,"depth":219,"text":132841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131291,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132884,"title":132885,"body":132886,"description":1548,"extension":1549,"meta":133514,"navigation":1551,"path":133515,"seo":133516,"stem":133517,"__hash__":133518},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132887,"toc":133502},[132888,132891,132895,132921,132955,132959,132963,132966,133008,133015,133025,133033,133035,133038,133041,133044,133051,133065,133069,133072,133101,133105,133108,133122,133126,133129,133157,133161,133164,133190,133194,133199,133232,133237,133265,133269,133286,133332,133337,133381,133398,133492,133500],[10,132889,132885],{"id":132890},"_10-css规范与学成在线案例",[14,132892,132894],{"id":132893},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[34,132896,132897,132903,132909,132915],{},[22,132898,132899,132902],{},[54,132900,132901],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[22,132904,132905,132908],{},[54,132906,132907],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[22,132910,132911,132914],{},[54,132912,132913],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[22,132916,132917,132920],{},[54,132918,132919],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[176,132922,132923],{"className":178,"code":131336,"language":180,"meta":181,"style":181},[183,132924,132925,132929,132935,132951],{"__ignoreMap":181},[186,132926,132927],{"class":188,"line":189},[186,132928,131343],{"class":192},[186,132930,132931,132933],{"class":188,"line":49},[186,132932,1450],{"class":523},[186,132934,622],{"class":202},[186,132936,132937,132939,132941,132943,132945,132947,132949],{"class":188,"line":219},[186,132938,72330],{"class":206},[186,132940,210],{"class":202},[186,132942,1829],{"class":206},[186,132944,804],{"class":669},[186,132946,52971],{"class":206},[186,132948,131364],{"class":206},[186,132950,634],{"class":202},[186,132952,132953],{"class":188,"line":225},[186,132954,639],{"class":202},[14,132956,132958],{"id":132957},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[29,132960,132962],{"id":132961},"_1021-header头部制作","10.2.1 header头部制作",[164,132964],{"style":166,"src":132965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[19,132967,132968,132975,132982,132988,132995,133002],{},[22,132969,132970,132971,132974],{},"1号是版心盒子 ",[54,132972,132973],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[22,132976,132977,132978,132981],{},"版心盒子 里面包含 2号盒子 ",[54,132979,132980],{},"logo"," 图标",[22,132983,132984,132985,132987],{},"版心盒子 里面包含 3号盒子 ",[54,132986,55159],{}," 导航栏",[22,132989,132990,132991,132994],{},"版心盒子 里面包含 4号盒子 ",[54,132992,132993],{},"search"," 搜索框",[22,132996,132997,132998,133001],{},"版心盒子 里面包含 5号盒子 ",[54,132999,133000],{},"user"," 个人信息",[22,133003,133004,133005],{},"注意，要求里面的 ",[54,133006,133007],{},"4个子盒子 必须都浮动",[34,133009,133010],{},[22,133011,133012],{},[54,133013,133014],{},"导航栏注意点:",[169,133016,133017,133018,133021,133022],{},"实际开发中， ",[54,133019,133020],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[54,133023,133024],{},"用 li 包含链接(li+a)的做法",[19,133026,133027,133030],{},[22,133028,133029],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[22,133031,133032],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[169,133034,10488],{},[169,133036,133037],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[169,133039,133040],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[169,133042,133043],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[34,133045,133046],{"start":49},[22,133047,133048],{},[54,133049,133050],{},"4号盒子search的细节：",[19,133052,133053,133056,133059],{},[22,133054,133055],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[22,133057,133058],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[22,133060,133061,133064],{},[183,133062,133063],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[29,133066,133068],{"id":133067},"_1022-banner制作","10.2.2 banner制作",[164,133070],{"style":166,"src":133071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[19,133073,133074,133081,133087,133094],{},[22,133075,133076,133077,133080],{},"1号盒子是通栏的大盒子 ",[54,133078,133079],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[22,133082,133083,133084,133086],{},"2号盒子是版心 ",[54,133085,2403],{}," ， 要水平居中对齐",[22,133088,133089,133090,133093],{},"3号盒子版心内，左对齐 ",[54,133091,133092],{},"subnav"," 侧导航栏",[22,133095,133096,133097,133100],{},"4号盒子版心内，右对齐 ",[54,133098,133099],{},"course"," 课程",[29,133102,133104],{"id":133103},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[164,133106],{"style":166,"src":133107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[19,133109,133110,133113,133116,133119],{},[22,133111,133112],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[22,133114,133115],{},"1号盒子是标题 H3 左侧浮动",[22,133117,133118],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[22,133120,133121],{},"3号盒子 右浮动 mod 修改",[29,133123,133125],{"id":133124},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[164,133127],{"style":166,"src":133128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[19,133130,133131,133137,133144,133151,133154],{},[22,133132,133133,133134,133136],{},"1号盒子为最大的盒子 ",[54,133135,55160],{}," 版心水平居中对齐",[22,133138,133139,133140,133143],{},"2号盒子为上面部分 ",[54,133141,133142],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[22,133145,133146,133147,133150],{},"3号盒子为底下部分 ",[54,133148,133149],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[22,133152,133153],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[22,133155,133156],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[29,133158,133160],{"id":133159},"_1025-底部模块制作","10.2.5 底部模块制作",[164,133162],{"style":166,"src":133163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[19,133165,133166,133173,133176,133183],{},[22,133167,133168,133169,133172],{},"1号盒子通栏大盒子 底部 ",[54,133170,133171],{},"footer"," 给高度 底色是白色",[22,133174,133175],{},"2号盒子版心水平居中",[22,133177,133178,133179,133182],{},"3号盒子版权 ",[54,133180,133181],{},"copyright"," 左对齐",[22,133184,133185,133186,133189],{},"4号盒子 链接组 ",[54,133187,133188],{},"links"," 右对齐",[29,133191,133193],{"id":133192},"_1026-代码模块","10.2.6 代码模块",[34,133195,133196],{},[22,133197,133198],{},"html部分",[176,133200,133202],{"className":511,"code":133201,"language":513,"meta":181,"style":181},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[183,133203,133204],{"__ignoreMap":181},[186,133205,133206,133208,133210,133212,133214,133217,133220,133222,133225,133228,133230],{"class":188,"line":189},[186,133207,520],{"class":202},[186,133209,948],{"class":523},[186,133211,62498],{"class":198},[186,133213,529],{"class":202},[186,133215,133216],{"class":532},"\"https:\u002F\u002Fexample.com\"",[186,133218,133219],{"class":198}," target",[186,133221,529],{"class":202},[186,133223,133224],{"class":532},"\"_blank\"",[186,133226,133227],{"class":202},">链接文字\u003C\u002F",[186,133229,948],{"class":523},[186,133231,552],{"class":202},[34,133233,133234],{"start":49},[22,133235,133236],{},"css部分",[176,133238,133239],{"className":511,"code":133201,"language":513,"meta":181,"style":181},[183,133240,133241],{"__ignoreMap":181},[186,133242,133243,133245,133247,133249,133251,133253,133255,133257,133259,133261,133263],{"class":188,"line":189},[186,133244,520],{"class":202},[186,133246,948],{"class":523},[186,133248,62498],{"class":198},[186,133250,529],{"class":202},[186,133252,133216],{"class":532},[186,133254,133219],{"class":198},[186,133256,529],{"class":202},[186,133258,133224],{"class":532},[186,133260,133227],{"class":202},[186,133262,948],{"class":523},[186,133264,552],{"class":202},[29,133266,133268],{"id":133267},"_1027-收获","10.2.7 收获",[34,133270,133271,133274,133277,133280,133283],{},[22,133272,133273],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[22,133275,133276],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[22,133278,133279],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[22,133281,133282],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[22,133284,133285],{},"遗忘代码",[176,133287,133289],{"className":178,"code":133288,"language":180,"meta":181,"style":181},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[183,133290,133291,133313,133318,133328],{"__ignoreMap":181},[186,133292,133293,133295,133297,133299,133301,133303,133305,133307,133309,133311],{"class":188,"line":189},[186,133294,1450],{"class":523},[186,133296,13898],{"class":202},[186,133298,169],{"class":523},[186,133300,13898],{"class":202},[186,133302,10],{"class":523},[186,133304,13898],{"class":202},[186,133306,19],{"class":523},[186,133308,13898],{"class":202},[186,133310,22],{"class":523},[186,133312,622],{"class":202},[186,133314,133315],{"class":188,"line":49},[186,133316,133317],{"class":192},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[186,133319,133320,133322,133324,133326],{"class":188,"line":219},[186,133321,129592],{"class":206},[186,133323,210],{"class":202},[186,133325,62310],{"class":206},[186,133327,634],{"class":202},[186,133329,133330],{"class":188,"line":225},[186,133331,639],{"class":202},[34,133333,133334],{"start":248},[22,133335,133336],{},"html引css的程序",[176,133338,133339],{"className":178,"code":133288,"language":180,"meta":181,"style":181},[183,133340,133341,133363,133367,133377],{"__ignoreMap":181},[186,133342,133343,133345,133347,133349,133351,133353,133355,133357,133359,133361],{"class":188,"line":189},[186,133344,1450],{"class":523},[186,133346,13898],{"class":202},[186,133348,169],{"class":523},[186,133350,13898],{"class":202},[186,133352,10],{"class":523},[186,133354,13898],{"class":202},[186,133356,19],{"class":523},[186,133358,13898],{"class":202},[186,133360,22],{"class":523},[186,133362,622],{"class":202},[186,133364,133365],{"class":188,"line":49},[186,133366,133317],{"class":192},[186,133368,133369,133371,133373,133375],{"class":188,"line":219},[186,133370,129592],{"class":206},[186,133372,210],{"class":202},[186,133374,62310],{"class":206},[186,133376,634],{"class":202},[186,133378,133379],{"class":188,"line":225},[186,133380,639],{"class":202},[34,133382,133383,133386,133389,133392,133395],{"start":265},[22,133384,133385],{},"浮动的盒子不会有外边距合并问题",[22,133387,133388],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[22,133390,133391],{},"ctrl+g快速定位行；shift+alt多个光标",[22,133393,133394],{},"学习上方各个模块的选择器起名方法，以后就这样用",[22,133396,133397],{},"在写选择器时尽量写全一些，例如",[176,133399,133400],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,133401,133402,133406,133420,133424,133438,133442,133456,133460,133474,133478],{"__ignoreMap":181},[186,133403,133404],{"class":188,"line":189},[186,133405,193],{"class":192},[186,133407,133408,133410,133412,133414,133416,133418],{"class":188,"line":49},[186,133409,199],{"class":198},[186,133411,203],{"class":202},[186,133413,207],{"class":206},[186,133415,210],{"class":202},[186,133417,213],{"class":206},[186,133419,216],{"class":202},[186,133421,133422],{"class":188,"line":219},[186,133423,222],{"class":192},[186,133425,133426,133428,133430,133432,133434,133436],{"class":188,"line":225},[186,133427,228],{"class":198},[186,133429,203],{"class":202},[186,133431,207],{"class":206},[186,133433,210],{"class":202},[186,133435,237],{"class":206},[186,133437,216],{"class":202},[186,133439,133440],{"class":188,"line":242},[186,133441,245],{"class":192},[186,133443,133444,133446,133448,133450,133452,133454],{"class":188,"line":248},[186,133445,251],{"class":198},[186,133447,203],{"class":202},[186,133449,207],{"class":206},[186,133451,210],{"class":202},[186,133453,260],{"class":206},[186,133455,216],{"class":202},[186,133457,133458],{"class":188,"line":265},[186,133459,268],{"class":192},[186,133461,133462,133464,133466,133468,133470,133472],{"class":188,"line":271},[186,133463,274],{"class":198},[186,133465,203],{"class":202},[186,133467,207],{"class":206},[186,133469,210],{"class":202},[186,133471,283],{"class":206},[186,133473,216],{"class":202},[186,133475,133476],{"class":188,"line":288},[186,133477,291],{"class":192},[186,133479,133480,133482,133484,133486,133488,133490],{"class":188,"line":294},[186,133481,297],{"class":198},[186,133483,203],{"class":202},[186,133485,207],{"class":206},[186,133487,210],{"class":202},[186,133489,306],{"class":206},[186,133491,216],{"class":202},[34,133493,133494,133497],{"start":1223},[22,133495,133496],{},"一定要用好注释",[22,133498,133499],{},"浮动的盒子不会有外边距合并的问题",[1524,133501,132856],{},{"title":181,"searchDepth":49,"depth":49,"links":133503},[133504,133505],{"id":132893,"depth":49,"text":132894},{"id":132957,"depth":49,"text":132958,"children":133506},[133507,133508,133509,133510,133511,133512,133513],{"id":132961,"depth":219,"text":132962},{"id":133067,"depth":219,"text":133068},{"id":133103,"depth":219,"text":133104},{"id":133124,"depth":219,"text":133125},{"id":133159,"depth":219,"text":133160},{"id":133192,"depth":219,"text":133193},{"id":133267,"depth":219,"text":133268},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132885,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133520,"title":133521,"body":133522,"description":1548,"extension":1549,"meta":135004,"navigation":1551,"path":135005,"seo":135006,"stem":135007,"__hash__":135008},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133523,"toc":134996},[133524,133527,133531,133535,133546,133550,133567,133611,133644,133647,133664,133667,133670,133714,133718,133722,133725,133728,133732,133735,133746,133806,133847,133850,133864,133918,133926,133929,133940,133994,134020,134023,134036,134090,134122,134176,134199,134253,134256,134259,134266,134320,134341,134395,134398,134401,134486,134494,134551,134574,134578,134581,134599,134603,134622,134676,134714,134718,134721,134724,134746,134750,134758,134761,134766,134777,134780,134784,134798,134842,134845,134849,134852,134857,134883,134888,134965,134968,134972,134975,134978,134981,134984,134987,134990,134993],[10,133525,133521],{"id":133526},"_11-传统布局与定位体系",[14,133528,133530],{"id":133529},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[29,133532,133534],{"id":133533},"_1111-普通流标准流","11.1.1 普通流（标准流）",[19,133536,133537,133540,133543],{},[22,133538,133539],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[22,133541,133542],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[22,133544,133545],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[29,133547,133549],{"id":133548},"_1112-浮动","11.1.2 浮动",[19,133551,133552,133555,133558,133561,133564],{},[22,133553,133554],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[22,133556,133557],{},"浮动可以改变元素标签默认的排列方式",[22,133559,133560],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[22,133562,133563],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[22,133565,133566],{},"在使用行内块转换时盒子之间是有空隙的",[176,133568,133569],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,133570,133571,133577,133587,133591,133597,133607],{"__ignoreMap":181},[186,133572,133573,133575],{"class":188,"line":189},[186,133574,132441],{"class":198},[186,133576,622],{"class":202},[186,133578,133579,133581,133583,133585],{"class":188,"line":49},[186,133580,132448],{"class":206},[186,133582,210],{"class":202},[186,133584,110],{"class":206},[186,133586,634],{"class":202},[186,133588,133589],{"class":188,"line":219},[186,133590,639],{"class":202},[186,133592,133593,133595],{"class":188,"line":225},[186,133594,132463],{"class":198},[186,133596,622],{"class":202},[186,133598,133599,133601,133603,133605],{"class":188,"line":242},[186,133600,132448],{"class":206},[186,133602,210],{"class":202},[186,133604,73956],{"class":206},[186,133606,634],{"class":202},[186,133608,133609],{"class":188,"line":248},[186,133610,639],{"class":202},[99,133612,133613,133621],{},[102,133614,133615],{},[105,133616,133617,133619],{},[108,133618,111],{"align":110},[108,133620,114],{"align":110},[116,133622,133623,133630,133637],{},[105,133624,133625,133627],{},[121,133626,56182],{"align":110},[121,133628,133629],{"align":110},"元素不浮动（默认值）",[105,133631,133632,133634],{},[121,133633,110],{"align":110},[121,133635,133636],{"align":110},"元素向左浮动",[105,133638,133639,133641],{},[121,133640,73956],{"align":110},[121,133642,133643],{"align":110},"元素向右浮动",[169,133645,133646],{},"浮动重点：",[19,133648,133649,133652,133655,133658,133661],{},[22,133650,133651],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[22,133653,133654],{},"浮动的元素会一行内显示并且元素顶部对齐",[22,133656,133657],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[22,133659,133660],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[22,133662,133663],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[169,133665,133666],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[169,133668,133669],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[176,133671,133672],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,133673,133674,133680,133690,133694,133700,133710],{"__ignoreMap":181},[186,133675,133676,133678],{"class":188,"line":189},[186,133677,132441],{"class":198},[186,133679,622],{"class":202},[186,133681,133682,133684,133686,133688],{"class":188,"line":49},[186,133683,132448],{"class":206},[186,133685,210],{"class":202},[186,133687,110],{"class":206},[186,133689,634],{"class":202},[186,133691,133692],{"class":188,"line":219},[186,133693,639],{"class":202},[186,133695,133696,133698],{"class":188,"line":225},[186,133697,132463],{"class":198},[186,133699,622],{"class":202},[186,133701,133702,133704,133706,133708],{"class":188,"line":242},[186,133703,132448],{"class":206},[186,133705,210],{"class":202},[186,133707,73956],{"class":206},[186,133709,634],{"class":202},[186,133711,133712],{"class":188,"line":248},[186,133713,639],{"class":202},[29,133715,133717],{"id":133716},"_1113-定位","11.1.3 定位",[23459,133719,133721],{"id":133720},"_11131-使用场景","11.1.3.1 使用场景",[169,133723,133724],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[169,133726,133727],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23459,133729,133731],{"id":133730},"_11132-定位组成","11.1.3.2 定位组成",[169,133733,133734],{},"定位 = 定位模式 + 边偏移",[34,133736,133737],{},[22,133738,133739,133742,133743],{},[54,133740,133741],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[54,133744,133745],{},"定位模式",[176,133747,133749],{"className":178,"code":133748,"language":180,"meta":181,"style":181},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[183,133750,133751,133757,133770,133786,133802],{"__ignoreMap":181},[186,133752,133753,133755],{"class":188,"line":189},[186,133754,131820],{"class":198},[186,133756,622],{"class":202},[186,133758,133759,133761,133763,133765,133767],{"class":188,"line":49},[186,133760,627],{"class":206},[186,133762,210],{"class":202},[186,133764,237],{"class":206},[186,133766,131835],{"class":202},[186,133768,133769],{"class":192},"\u002F* 定位模式 *\u002F\n",[186,133771,133772,133774,133776,133778,133780,133783],{"class":188,"line":219},[186,133773,661],{"class":206},[186,133775,210],{"class":202},[186,133777,2056],{"class":206},[186,133779,804],{"class":669},[186,133781,133782],{"class":202},";           ",[186,133784,133785],{"class":192},"\u002F* 边偏移：上 *\u002F\n",[186,133787,133788,133790,133792,133794,133796,133799],{"class":188,"line":225},[186,133789,677],{"class":206},[186,133791,210],{"class":202},[186,133793,801],{"class":206},[186,133795,804],{"class":669},[186,133797,133798],{"class":202},";          ",[186,133800,133801],{"class":192},"\u002F* 边偏移：左 *\u002F\n",[186,133803,133804],{"class":188,"line":242},[186,133805,639],{"class":202},[99,133807,133808,133817],{},[102,133809,133810],{},[105,133811,133812,133814],{},[108,133813,1766],{"align":110},[108,133815,133816],{"align":110},"语义",[116,133818,133819,133826,133833,133840],{},[105,133820,133821,133823],{},[121,133822,213],{"align":110},[121,133824,133825],{"align":110},"静态定位",[105,133827,133828,133830],{},[121,133829,237],{"align":110},[121,133831,133832],{"align":110},"相对定位",[105,133834,133835,133837],{},[121,133836,260],{"align":110},[121,133838,133839],{"align":110},"绝对定位",[105,133841,133842,133844],{},[121,133843,283],{"align":110},[121,133845,133846],{"align":110},"固定定位",[169,133848,133849],{},"（1）静态定位：",[19,133851,133852,133862],{},[22,133853,133854,133855,709,133858,133861],{},"静态定位是元素的 ",[54,133856,133857],{},"默认定位方式",[54,133859,133860],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[22,133863,6647],{},[176,133865,133866],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,133867,133868,133874,133886,133900,133914],{"__ignoreMap":181},[186,133869,133870,133872],{"class":188,"line":189},[186,133871,131820],{"class":198},[186,133873,622],{"class":202},[186,133875,133876,133878,133880,133882,133884],{"class":188,"line":49},[186,133877,627],{"class":206},[186,133879,210],{"class":202},[186,133881,237],{"class":206},[186,133883,131835],{"class":202},[186,133885,133769],{"class":192},[186,133887,133888,133890,133892,133894,133896,133898],{"class":188,"line":219},[186,133889,661],{"class":206},[186,133891,210],{"class":202},[186,133893,2056],{"class":206},[186,133895,804],{"class":669},[186,133897,133782],{"class":202},[186,133899,133785],{"class":192},[186,133901,133902,133904,133906,133908,133910,133912],{"class":188,"line":225},[186,133903,677],{"class":206},[186,133905,210],{"class":202},[186,133907,801],{"class":206},[186,133909,804],{"class":669},[186,133911,133798],{"class":202},[186,133913,133801],{"class":192},[186,133915,133916],{"class":188,"line":242},[186,133917,639],{"class":202},[19,133919,133920,133923],{},[22,133921,133922],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[22,133924,133925],{},"静态定位在布局时我们几乎不用的",[169,133927,133928],{},"（2）相对定位",[19,133930,133931,133938],{},[22,133932,133933,133934,133937],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[54,133935,133936],{},"原来的位置"," 来说的（自恋型）",[22,133939,6647],{},[176,133941,133942],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,133943,133944,133950,133962,133976,133990],{"__ignoreMap":181},[186,133945,133946,133948],{"class":188,"line":189},[186,133947,131820],{"class":198},[186,133949,622],{"class":202},[186,133951,133952,133954,133956,133958,133960],{"class":188,"line":49},[186,133953,627],{"class":206},[186,133955,210],{"class":202},[186,133957,237],{"class":206},[186,133959,131835],{"class":202},[186,133961,133769],{"class":192},[186,133963,133964,133966,133968,133970,133972,133974],{"class":188,"line":219},[186,133965,661],{"class":206},[186,133967,210],{"class":202},[186,133969,2056],{"class":206},[186,133971,804],{"class":669},[186,133973,133782],{"class":202},[186,133975,133785],{"class":192},[186,133977,133978,133980,133982,133984,133986,133988],{"class":188,"line":225},[186,133979,677],{"class":206},[186,133981,210],{"class":202},[186,133983,801],{"class":206},[186,133985,804],{"class":669},[186,133987,133798],{"class":202},[186,133989,133801],{"class":192},[186,133991,133992],{"class":188,"line":242},[186,133993,639],{"class":202},[19,133995,133996],{},[22,133997,133998,133999,134001,134002,134004,134005,134008,134009,134012,134013,134015,134016,134019],{},"相对定位的特点：",[726,134000],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[726,134003],{},"  ② ",[54,134006,134007],{},"原来"," 在标准流的 ",[54,134010,134011],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[726,134014],{},"  ③因此， ",[54,134017,134018],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[169,134021,134022],{},"（3）绝对定位",[19,134024,134025,134034],{},[22,134026,134027,134029,134030,134033],{},[54,134028,133839],{}," 是元素在移动位置的时候，是相对于它 ",[54,134031,134032],{},"祖先元素"," 来说的（拼爹型）",[22,134035,6647],{},[176,134037,134038],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,134039,134040,134046,134058,134072,134086],{"__ignoreMap":181},[186,134041,134042,134044],{"class":188,"line":189},[186,134043,131820],{"class":198},[186,134045,622],{"class":202},[186,134047,134048,134050,134052,134054,134056],{"class":188,"line":49},[186,134049,627],{"class":206},[186,134051,210],{"class":202},[186,134053,237],{"class":206},[186,134055,131835],{"class":202},[186,134057,133769],{"class":192},[186,134059,134060,134062,134064,134066,134068,134070],{"class":188,"line":219},[186,134061,661],{"class":206},[186,134063,210],{"class":202},[186,134065,2056],{"class":206},[186,134067,804],{"class":669},[186,134069,133782],{"class":202},[186,134071,133785],{"class":192},[186,134073,134074,134076,134078,134080,134082,134084],{"class":188,"line":225},[186,134075,677],{"class":206},[186,134077,210],{"class":202},[186,134079,801],{"class":206},[186,134081,804],{"class":669},[186,134083,133798],{"class":202},[186,134085,133801],{"class":192},[186,134087,134088],{"class":188,"line":242},[186,134089,639],{"class":202},[19,134091,134092,134107,134116,134119],{},[22,134093,134094,134095,134097,134098,134100,134101,134103,134104,134106],{},"绝对定位的特点：",[726,134096],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[726,134099],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[726,134102],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[726,134105],{},"  (4)固定定位",[22,134108,134109,134111,134112,134115],{},[54,134110,133846],{}," 是元素 ",[54,134113,134114],{},"固定于浏览器可视区的位置"," 。（认死理型）",[22,134117,134118],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[22,134120,134121],{},"语法:",[176,134123,134124],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,134125,134126,134132,134144,134158,134172],{"__ignoreMap":181},[186,134127,134128,134130],{"class":188,"line":189},[186,134129,131820],{"class":198},[186,134131,622],{"class":202},[186,134133,134134,134136,134138,134140,134142],{"class":188,"line":49},[186,134135,627],{"class":206},[186,134137,210],{"class":202},[186,134139,237],{"class":206},[186,134141,131835],{"class":202},[186,134143,133769],{"class":192},[186,134145,134146,134148,134150,134152,134154,134156],{"class":188,"line":219},[186,134147,661],{"class":206},[186,134149,210],{"class":202},[186,134151,2056],{"class":206},[186,134153,804],{"class":669},[186,134155,133782],{"class":202},[186,134157,133785],{"class":192},[186,134159,134160,134162,134164,134166,134168,134170],{"class":188,"line":225},[186,134161,677],{"class":206},[186,134163,210],{"class":202},[186,134165,801],{"class":206},[186,134167,804],{"class":669},[186,134169,133798],{"class":202},[186,134171,133801],{"class":192},[186,134173,134174],{"class":188,"line":242},[186,134175,639],{"class":202},[19,134177,134178,134187],{},[22,134179,134180,134181,134183,134184,134186],{},"特点:",[726,134182],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[726,134185],{},"  ②固定定位不再占有原先的位置,完全脱标",[22,134188,134189,134190,134192,134193,134195,134196,134198],{},"固定在版心位置的方法:",[726,134191],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[726,134194],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[726,134197],{},"  实例：",[176,134200,134201],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,134202,134203,134209,134221,134235,134249],{"__ignoreMap":181},[186,134204,134205,134207],{"class":188,"line":189},[186,134206,131820],{"class":198},[186,134208,622],{"class":202},[186,134210,134211,134213,134215,134217,134219],{"class":188,"line":49},[186,134212,627],{"class":206},[186,134214,210],{"class":202},[186,134216,237],{"class":206},[186,134218,131835],{"class":202},[186,134220,133769],{"class":192},[186,134222,134223,134225,134227,134229,134231,134233],{"class":188,"line":219},[186,134224,661],{"class":206},[186,134226,210],{"class":202},[186,134228,2056],{"class":206},[186,134230,804],{"class":669},[186,134232,133782],{"class":202},[186,134234,133785],{"class":192},[186,134236,134237,134239,134241,134243,134245,134247],{"class":188,"line":225},[186,134238,677],{"class":206},[186,134240,210],{"class":202},[186,134242,801],{"class":206},[186,134244,804],{"class":669},[186,134246,133798],{"class":202},[186,134248,133801],{"class":192},[186,134250,134251],{"class":188,"line":242},[186,134252,639],{"class":202},[164,134254],{"style":166,"src":134255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[169,134257,134258],{},"(5)粘性定位",[19,134260,134261,134264],{},[22,134262,134263],{},"粘性定位可以被认为是相对定位和固定定位的混合",[22,134265,6647],{},[176,134267,134268],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,134269,134270,134276,134288,134302,134316],{"__ignoreMap":181},[186,134271,134272,134274],{"class":188,"line":189},[186,134273,131820],{"class":198},[186,134275,622],{"class":202},[186,134277,134278,134280,134282,134284,134286],{"class":188,"line":49},[186,134279,627],{"class":206},[186,134281,210],{"class":202},[186,134283,237],{"class":206},[186,134285,131835],{"class":202},[186,134287,133769],{"class":192},[186,134289,134290,134292,134294,134296,134298,134300],{"class":188,"line":219},[186,134291,661],{"class":206},[186,134293,210],{"class":202},[186,134295,2056],{"class":206},[186,134297,804],{"class":669},[186,134299,133782],{"class":202},[186,134301,133785],{"class":192},[186,134303,134304,134306,134308,134310,134312,134314],{"class":188,"line":225},[186,134305,677],{"class":206},[186,134307,210],{"class":202},[186,134309,801],{"class":206},[186,134311,804],{"class":669},[186,134313,133798],{"class":202},[186,134315,133801],{"class":192},[186,134317,134318],{"class":188,"line":242},[186,134319,639],{"class":202},[19,134321,134322],{},[22,134323,134324,134325,134327,134328,134330,134331,134333,134334,134337,134338,134340],{},"粘性定位的特点：",[726,134326],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[726,134329],{},"  ②粘性定位占有原先的位置（相对定位特点）",[726,134332],{},"  ③必须添加 top 、left、right、bottom ",[54,134335,134336],{},"其中一个"," 才有效",[726,134339],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[176,134342,134343],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,134344,134345,134351,134363,134377,134391],{"__ignoreMap":181},[186,134346,134347,134349],{"class":188,"line":189},[186,134348,131820],{"class":198},[186,134350,622],{"class":202},[186,134352,134353,134355,134357,134359,134361],{"class":188,"line":49},[186,134354,627],{"class":206},[186,134356,210],{"class":202},[186,134358,237],{"class":206},[186,134360,131835],{"class":202},[186,134362,133769],{"class":192},[186,134364,134365,134367,134369,134371,134373,134375],{"class":188,"line":219},[186,134366,661],{"class":206},[186,134368,210],{"class":202},[186,134370,2056],{"class":206},[186,134372,804],{"class":669},[186,134374,133782],{"class":202},[186,134376,133785],{"class":192},[186,134378,134379,134381,134383,134385,134387,134389],{"class":188,"line":225},[186,134380,677],{"class":206},[186,134382,210],{"class":202},[186,134384,801],{"class":206},[186,134386,804],{"class":669},[186,134388,133798],{"class":202},[186,134390,133801],{"class":192},[186,134392,134393],{"class":188,"line":242},[186,134394,639],{"class":202},[164,134396],{"style":166,"src":134397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[169,134399,134400],{},"(6)总结",[99,134402,134403,134418],{},[102,134404,134405],{},[105,134406,134407,134409,134412,134415],{},[108,134408,133745],{"align":110},[108,134410,134411],{"align":110},"是否脱标",[108,134413,134414],{"align":110},"移动位置",[108,134416,134417],{"align":110},"是否常用",[116,134419,134420,134433,134447,134461,134474],{},[105,134421,134422,134425,134427,134430],{},[121,134423,134424],{"align":110},"Static 静态定位",[121,134426,106109],{"align":110},[121,134428,134429],{"align":110},"不能使用边偏移",[121,134431,134432],{"align":110},"很少",[105,134434,134435,134438,134441,134444],{},[121,134436,134437],{"align":110},"Relative 相对定位",[121,134439,134440],{"align":110},"否(占有位置)",[121,134442,134443],{"align":110},"相对于自身位置移动",[121,134445,134446],{"align":110},"基本单独使用",[105,134448,134449,134452,134455,134458],{},[121,134450,134451],{"align":110},"Absolute 绝对定位",[121,134453,134454],{"align":110},"是(不占有位置)",[121,134456,134457],{"align":110},"带有定位的父级",[121,134459,134460],{"align":110},"要和定位父级元素搭配使用",[105,134462,134463,134466,134468,134471],{},[121,134464,134465],{"align":110},"Fixed 固定定位",[121,134467,134454],{"align":110},[121,134469,134470],{"align":110},"浏览器可视区",[121,134472,134473],{"align":110},"单独使用,不需要父级",[105,134475,134476,134479,134481,134483],{},[121,134477,134478],{"align":110},"Sticky 粘性定位",[121,134480,134440],{"align":110},[121,134482,134470],{"align":110},[121,134484,134485],{"align":110},"当前阶段少",[34,134487,134488],{"start":49},[22,134489,134490,134493],{},[54,134491,134492],{},"边偏移"," 则决定了该元素的最终位置",[99,134495,134496,134507],{},[102,134497,134498],{},[105,134499,134500,134503,134505],{},[108,134501,134502],{"align":110},"边偏移属性",[108,134504,28948],{"align":110},[108,134506,114],{"align":110},[116,134508,134509,134520,134531,134541],{},[105,134510,134511,134514,134517],{},[121,134512,134513],{"align":110},"top",[121,134515,134516],{"align":110},"top: 80px;",[121,134518,134519],{"align":110},"顶端偏移量，定义元素相对于父元素上边线的距离",[105,134521,134522,134525,134528],{},[121,134523,134524],{"align":110},"bottom",[121,134526,134527],{"align":110},"bottom: 80px ;",[121,134529,134530],{"align":110},"底部偏移量，定义元素相对于其父元素下边线的距离",[105,134532,134533,134535,134538],{},[121,134534,110],{"align":110},[121,134536,134537],{"align":110},"left: 80px ;",[121,134539,134540],{"align":110},"左侧偏移量，定义元素相对于其父元素左边线的距离",[105,134542,134543,134545,134548],{},[121,134544,73956],{"align":110},[121,134546,134547],{"align":110},"right: 80px ;",[121,134549,134550],{"align":110},"右侧偏移量，定义元素相对于其父元素右边线的距离",[19,134552,134553],{},[22,134554,10488,134555,134557,134558,134560,134561,134563,134564,134567,134568,134570,134571,134573],{},[726,134556],{},"  ① ",[54,134559,134492],{}," 需要和 ",[54,134562,133745],{}," 联合使用， ",[54,134565,134566],{},"单独使用无效"," ；",[726,134569],{},"  ②top和bottom不要同时使用",[726,134572],{},"  ③left和right不要同时使用",[23459,134575,134577],{"id":134576},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[169,134579,134580],{},"子级是绝对定位的话，父级要用相对定位",[19,134582,134583,134586,134589,134592],{},[22,134584,134585],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[22,134587,134588],{},"父盒子需要加定位限制子盒子在父盒子内显示",[22,134590,134591],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[22,134593,134594,134595,134598],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[54,134596,134597],{},"子绝父绝"," 也会遇到",[23459,134600,134602],{"id":134601},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[19,134604,134605,134620],{},[22,134606,134607,134608,134611,134612,134615,134616,134619],{},"在使用 ",[54,134609,134610],{},"定位"," 布局时，可能会 ",[54,134613,134614],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[54,134617,134618],{},"z-index"," 来控制盒子的前后次序 (z轴)",[22,134621,6647],{},[176,134623,134624],{"className":178,"code":133748,"language":180,"meta":181,"style":181},[183,134625,134626,134632,134644,134658,134672],{"__ignoreMap":181},[186,134627,134628,134630],{"class":188,"line":189},[186,134629,131820],{"class":198},[186,134631,622],{"class":202},[186,134633,134634,134636,134638,134640,134642],{"class":188,"line":49},[186,134635,627],{"class":206},[186,134637,210],{"class":202},[186,134639,237],{"class":206},[186,134641,131835],{"class":202},[186,134643,133769],{"class":192},[186,134645,134646,134648,134650,134652,134654,134656],{"class":188,"line":219},[186,134647,661],{"class":206},[186,134649,210],{"class":202},[186,134651,2056],{"class":206},[186,134653,804],{"class":669},[186,134655,133782],{"class":202},[186,134657,133785],{"class":192},[186,134659,134660,134662,134664,134666,134668,134670],{"class":188,"line":225},[186,134661,677],{"class":206},[186,134663,210],{"class":202},[186,134665,801],{"class":206},[186,134667,804],{"class":669},[186,134669,133798],{"class":202},[186,134671,133801],{"class":192},[186,134673,134674],{"class":188,"line":242},[186,134675,639],{"class":202},[19,134677,134678],{},[22,134679,134680,134681,134557,134683,134685,134686,129139,134689,83971,134692,134694,134695,134697,134698,134701,134702,134567,134705,134707,134708,134711,134713],{},"z-index的特性",[726,134682],{},[54,134684,111],{}," ： ",[54,134687,134688],{},"正整数",[54,134690,134691],{},"负整数",[54,134693,1803],{}," ，默认值是 0，数值越大，盒子越靠上；",[726,134696],{},"  ②如果 ",[54,134699,134700],{},"属性值相同"," ，则按照书写顺序， ",[54,134703,134704],{},"后来居上",[726,134706],{},"  ③数字后面 ",[54,134709,134710],{},"不能加单位",[726,134712],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23459,134715,134717],{"id":134716},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[169,134719,134720],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[169,134722,134723],{},"方法:",[19,134725,134726,134736],{},[22,134727,134728,134729,134732,134733],{},"left: 50%; 让 ",[54,134730,134731],{},"盒子的左侧"," 移动到 ",[54,134734,134735],{},"父级元素的水平中心位置",[22,134737,134738,134739,134742,134743],{},"margin-left: -100px; 让盒子 ",[54,134740,134741],{},"向左"," 移动 ",[54,134744,134745],{},"自身宽度的一半",[23459,134747,134749],{"id":134748},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[34,134751,134752,134755],{},[22,134753,134754],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[22,134756,134757],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[169,134759,134760],{},"也就是说绝对定位和固定定位和浮动类似",[34,134762,134763],{"start":219},[22,134764,134765],{},"display 是显示模式， 可以改变显示模式有以下方式:",[19,134767,134768,134771,134774],{},[22,134769,134770],{},"可以用inline-block 转换为行内块",[22,134772,134773],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[22,134775,134776],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[169,134778,134779],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23459,134781,134783],{"id":134782},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[34,134785,134786,134789,134792,134795],{},[22,134787,134788],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[22,134790,134791],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[22,134793,134794],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[22,134796,134797],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[176,134799,134800],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,134801,134802,134808,134818,134822,134828,134838],{"__ignoreMap":181},[186,134803,134804,134806],{"class":188,"line":189},[186,134805,132441],{"class":198},[186,134807,622],{"class":202},[186,134809,134810,134812,134814,134816],{"class":188,"line":49},[186,134811,132448],{"class":206},[186,134813,210],{"class":202},[186,134815,110],{"class":206},[186,134817,634],{"class":202},[186,134819,134820],{"class":188,"line":219},[186,134821,639],{"class":202},[186,134823,134824,134826],{"class":188,"line":225},[186,134825,132463],{"class":198},[186,134827,622],{"class":202},[186,134829,134830,134832,134834,134836],{"class":188,"line":242},[186,134831,132448],{"class":206},[186,134833,210],{"class":202},[186,134835,73956],{"class":206},[186,134837,634],{"class":202},[186,134839,134840],{"class":188,"line":248},[186,134841,639],{"class":202},[164,134843],{"style":166,"src":134844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23459,134846,134848],{"id":134847},"_11138-轮播图","11.1.3.8 轮播图",[164,134850],{"style":166,"src":134851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[34,134853,134854],{},[22,134855,134856],{},"制作顺序:",[19,134858,134859,134862,134865,134874],{},[22,134860,134861],{},"大盒子我们类名为： tb-promo 淘宝广告",[22,134863,134864],{},"里面先放一张图片",[22,134866,134867,134868,134870,134871,134873],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[726,134869],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[726,134872],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[22,134875,134876,134877,134879,134880,134882],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[726,134878],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[726,134881],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[34,134884,134885],{"start":49},[22,134886,134887],{},"代码模块",[176,134889,134891],{"className":178,"code":134890,"language":180,"meta":181,"style":181},"\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",[183,134892,134893,134898,134905,134915,134925,134935,134939,134944,134951,134961],{"__ignoreMap":181},[186,134894,134895],{"class":188,"line":189},[186,134896,134897],{"class":192},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[186,134899,134900,134903],{"class":188,"line":49},[186,134901,134902],{"class":198},".son",[186,134904,622],{"class":202},[186,134906,134907,134909,134911,134913],{"class":188,"line":219},[186,134908,627],{"class":206},[186,134910,210],{"class":202},[186,134912,260],{"class":206},[186,134914,634],{"class":202},[186,134916,134917,134919,134921,134923],{"class":188,"line":225},[186,134918,661],{"class":206},[186,134920,210],{"class":202},[186,134922,1803],{"class":206},[186,134924,634],{"class":202},[186,134926,134927,134929,134931,134933],{"class":188,"line":242},[186,134928,677],{"class":206},[186,134930,210],{"class":202},[186,134932,1803],{"class":206},[186,134934,634],{"class":202},[186,134936,134937],{"class":188,"line":248},[186,134938,639],{"class":202},[186,134940,134941],{"class":188,"line":265},[186,134942,134943],{"class":192},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[186,134945,134946,134949],{"class":188,"line":271},[186,134947,134948],{"class":198},".father",[186,134950,622],{"class":202},[186,134952,134953,134955,134957,134959],{"class":188,"line":288},[186,134954,627],{"class":206},[186,134956,210],{"class":202},[186,134958,237],{"class":206},[186,134960,634],{"class":202},[186,134962,134963],{"class":188,"line":294},[186,134964,639],{"class":202},[169,134966,134967],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[29,134969,134971],{"id":134970},"_1114-定位数值的移动","11.1.4 定位数值的移动",[164,134973],{"style":166,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[169,134976,134977],{},"✨ 黄金口诀：",[169,134979,134980],{},"\"TOP正下负上，LEFT正右负左\"",[169,134982,134983],{},"\"RIGHT正左负右，BOTTOM正上负下",[169,134985,134986],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[169,134988,134989],{},"✨ 简单记：",[169,134991,134992],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1524,134994,134995],{},"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":181,"searchDepth":49,"depth":49,"links":134997},[134998],{"id":133529,"depth":49,"text":133530,"children":134999},[135000,135001,135002,135003],{"id":133533,"depth":219,"text":133534},{"id":133548,"depth":219,"text":133549},{"id":133716,"depth":219,"text":133717},{"id":134970,"depth":219,"text":134971},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133521,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":4,"title":5,"body":135010,"description":1548,"extension":1549,"meta":136236,"navigation":1551,"path":1552,"seo":136237,"stem":1554,"__hash__":1555},{"type":7,"value":135011,"toc":136215},[135012,135014,135016,135022,135024,135028,135034,135042,135044,135048,135054,135062,135064,135068,135104,135110,135112,135114,135116,135118,135212,135214,135308,135310,135404,135406,135408,135438,135440,135442,135472,135474,135476,135478,135480,135482,135484,135486,135554,135556,135558,135560,135586,135588,135593,135595,135597,135599,135601,135603,135605,135681,135683,135685,135687,135689,135691,135693,135695,135697,135699,135703,135709,135711,135725,135727,135734,135736,135738,135740,135742,135744,135746,135748,135750,135757,135759,135765,135767,135771,135815,135819,135967,135969,135971,135975,135977,135979,135981,135983,135987,136135,136137,136139,136143,136145,136149,136183,136185,136187,136189,136191,136195,136197,136199,136201,136203,136205,136207,136209,136211,136213],[10,135013,5],{"id":12},[14,135015,17],{"id":16},[19,135017,135018,135020],{},[22,135019,24],{},[22,135021,27],{},[29,135023,32],{"id":31},[34,135025,135026],{},[22,135027,38],{},[19,135029,135030,135032],{},[22,135031,43],{},[22,135033,46],{},[34,135035,135036,135040],{"start":49},[22,135037,52,135038,57],{},[54,135039,56],{},[22,135041,60],{},[29,135043,64],{"id":63},[34,135045,135046],{},[22,135047,69],{},[19,135049,135050,135052],{},[22,135051,74],{},[22,135053,77],{},[34,135055,135056,135058,135060],{"start":49},[22,135057,82],{},[22,135059,85],{},[22,135061,88],{},[29,135063,92],{"id":91},[19,135065,135066],{},[22,135067,97],{},[99,135069,135070,135078],{},[102,135071,135072],{},[105,135073,135074,135076],{},[108,135075,111],{"align":110},[108,135077,114],{"align":110},[116,135079,135080,135086,135092,135098],{},[105,135081,135082,135084],{},[121,135083,123],{"align":110},[121,135085,126],{"align":110},[105,135087,135088,135090],{},[121,135089,131],{"align":110},[121,135091,134],{"align":110},[105,135093,135094,135096],{},[121,135095,139],{"align":110},[121,135097,142],{"align":110},[105,135099,135100,135102],{},[121,135101,147],{"align":110},[121,135103,150],{"align":110},[19,135105,135106,135108],{},[22,135107,155],{},[22,135109,158],{},[29,135111,162],{"id":161},[164,135113],{"style":166,"src":167},[169,135115,171],{},[169,135117,174],{},[176,135119,135120],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,135121,135122,135126,135140,135144,135158,135162,135176,135180,135194,135198],{"__ignoreMap":181},[186,135123,135124],{"class":188,"line":189},[186,135125,193],{"class":192},[186,135127,135128,135130,135132,135134,135136,135138],{"class":188,"line":49},[186,135129,199],{"class":198},[186,135131,203],{"class":202},[186,135133,207],{"class":206},[186,135135,210],{"class":202},[186,135137,213],{"class":206},[186,135139,216],{"class":202},[186,135141,135142],{"class":188,"line":219},[186,135143,222],{"class":192},[186,135145,135146,135148,135150,135152,135154,135156],{"class":188,"line":225},[186,135147,228],{"class":198},[186,135149,203],{"class":202},[186,135151,207],{"class":206},[186,135153,210],{"class":202},[186,135155,237],{"class":206},[186,135157,216],{"class":202},[186,135159,135160],{"class":188,"line":242},[186,135161,245],{"class":192},[186,135163,135164,135166,135168,135170,135172,135174],{"class":188,"line":248},[186,135165,251],{"class":198},[186,135167,203],{"class":202},[186,135169,207],{"class":206},[186,135171,210],{"class":202},[186,135173,260],{"class":206},[186,135175,216],{"class":202},[186,135177,135178],{"class":188,"line":265},[186,135179,268],{"class":192},[186,135181,135182,135184,135186,135188,135190,135192],{"class":188,"line":271},[186,135183,274],{"class":198},[186,135185,203],{"class":202},[186,135187,207],{"class":206},[186,135189,210],{"class":202},[186,135191,283],{"class":206},[186,135193,216],{"class":202},[186,135195,135196],{"class":188,"line":288},[186,135197,291],{"class":192},[186,135199,135200,135202,135204,135206,135208,135210],{"class":188,"line":294},[186,135201,297],{"class":198},[186,135203,203],{"class":202},[186,135205,207],{"class":206},[186,135207,210],{"class":202},[186,135209,306],{"class":206},[186,135211,216],{"class":202},[169,135213,311],{},[176,135215,135216],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,135217,135218,135222,135236,135240,135254,135258,135272,135276,135290,135294],{"__ignoreMap":181},[186,135219,135220],{"class":188,"line":189},[186,135221,193],{"class":192},[186,135223,135224,135226,135228,135230,135232,135234],{"class":188,"line":49},[186,135225,199],{"class":198},[186,135227,203],{"class":202},[186,135229,207],{"class":206},[186,135231,210],{"class":202},[186,135233,213],{"class":206},[186,135235,216],{"class":202},[186,135237,135238],{"class":188,"line":219},[186,135239,222],{"class":192},[186,135241,135242,135244,135246,135248,135250,135252],{"class":188,"line":225},[186,135243,228],{"class":198},[186,135245,203],{"class":202},[186,135247,207],{"class":206},[186,135249,210],{"class":202},[186,135251,237],{"class":206},[186,135253,216],{"class":202},[186,135255,135256],{"class":188,"line":242},[186,135257,245],{"class":192},[186,135259,135260,135262,135264,135266,135268,135270],{"class":188,"line":248},[186,135261,251],{"class":198},[186,135263,203],{"class":202},[186,135265,207],{"class":206},[186,135267,210],{"class":202},[186,135269,260],{"class":206},[186,135271,216],{"class":202},[186,135273,135274],{"class":188,"line":265},[186,135275,268],{"class":192},[186,135277,135278,135280,135282,135284,135286,135288],{"class":188,"line":271},[186,135279,274],{"class":198},[186,135281,203],{"class":202},[186,135283,207],{"class":206},[186,135285,210],{"class":202},[186,135287,283],{"class":206},[186,135289,216],{"class":202},[186,135291,135292],{"class":188,"line":288},[186,135293,291],{"class":192},[186,135295,135296,135298,135300,135302,135304,135306],{"class":188,"line":294},[186,135297,297],{"class":198},[186,135299,203],{"class":202},[186,135301,207],{"class":206},[186,135303,210],{"class":202},[186,135305,306],{"class":206},[186,135307,216],{"class":202},[169,135309,408],{},[176,135311,135312],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,135313,135314,135318,135332,135336,135350,135354,135368,135372,135386,135390],{"__ignoreMap":181},[186,135315,135316],{"class":188,"line":189},[186,135317,193],{"class":192},[186,135319,135320,135322,135324,135326,135328,135330],{"class":188,"line":49},[186,135321,199],{"class":198},[186,135323,203],{"class":202},[186,135325,207],{"class":206},[186,135327,210],{"class":202},[186,135329,213],{"class":206},[186,135331,216],{"class":202},[186,135333,135334],{"class":188,"line":219},[186,135335,222],{"class":192},[186,135337,135338,135340,135342,135344,135346,135348],{"class":188,"line":225},[186,135339,228],{"class":198},[186,135341,203],{"class":202},[186,135343,207],{"class":206},[186,135345,210],{"class":202},[186,135347,237],{"class":206},[186,135349,216],{"class":202},[186,135351,135352],{"class":188,"line":242},[186,135353,245],{"class":192},[186,135355,135356,135358,135360,135362,135364,135366],{"class":188,"line":248},[186,135357,251],{"class":198},[186,135359,203],{"class":202},[186,135361,207],{"class":206},[186,135363,210],{"class":202},[186,135365,260],{"class":206},[186,135367,216],{"class":202},[186,135369,135370],{"class":188,"line":265},[186,135371,268],{"class":192},[186,135373,135374,135376,135378,135380,135382,135384],{"class":188,"line":271},[186,135375,274],{"class":198},[186,135377,203],{"class":202},[186,135379,207],{"class":206},[186,135381,210],{"class":202},[186,135383,283],{"class":206},[186,135385,216],{"class":202},[186,135387,135388],{"class":188,"line":288},[186,135389,291],{"class":192},[186,135391,135392,135394,135396,135398,135400,135402],{"class":188,"line":294},[186,135393,297],{"class":198},[186,135395,203],{"class":202},[186,135397,207],{"class":206},[186,135399,210],{"class":202},[186,135401,306],{"class":206},[186,135403,216],{"class":202},[164,135405],{"style":166,"src":505},[169,135407,508],{},[176,135409,135410],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,135411,135412],{"__ignoreMap":181},[186,135413,135414,135416,135418,135420,135422,135424,135426,135428,135430,135432,135434,135436],{"class":188,"line":189},[186,135415,520],{"class":202},[186,135417,164],{"class":523},[186,135419,526],{"class":198},[186,135421,529],{"class":202},[186,135423,533],{"class":532},[186,135425,536],{"class":198},[186,135427,529],{"class":202},[186,135429,541],{"class":532},[186,135431,544],{"class":198},[186,135433,529],{"class":202},[186,135435,549],{"class":532},[186,135437,552],{"class":202},[164,135439],{"style":166,"src":555},[169,135441,558],{},[176,135443,135444],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,135445,135446],{"__ignoreMap":181},[186,135447,135448,135450,135452,135454,135456,135458,135460,135462,135464,135466,135468,135470],{"class":188,"line":189},[186,135449,520],{"class":202},[186,135451,164],{"class":523},[186,135453,526],{"class":198},[186,135455,529],{"class":202},[186,135457,533],{"class":532},[186,135459,536],{"class":198},[186,135461,529],{"class":202},[186,135463,541],{"class":532},[186,135465,544],{"class":198},[186,135467,529],{"class":202},[186,135469,549],{"class":532},[186,135471,552],{"class":202},[169,135473,591],{},[164,135475],{"style":166,"src":594},[169,135477,597],{},[169,135479,600],{},[169,135481,603],{},[169,135483,606],{},[169,135485,609],{},[176,135487,135488],{"className":178,"code":612,"language":180,"meta":181,"style":181},[183,135489,135490,135496,135506,135510,135516,135526,135538,135550],{"__ignoreMap":181},[186,135491,135492,135494],{"class":188,"line":189},[186,135493,619],{"class":198},[186,135495,622],{"class":202},[186,135497,135498,135500,135502,135504],{"class":188,"line":49},[186,135499,627],{"class":206},[186,135501,210],{"class":202},[186,135503,237],{"class":206},[186,135505,634],{"class":202},[186,135507,135508],{"class":188,"line":219},[186,135509,639],{"class":202},[186,135511,135512,135514],{"class":188,"line":225},[186,135513,644],{"class":198},[186,135515,622],{"class":202},[186,135517,135518,135520,135522,135524],{"class":188,"line":242},[186,135519,627],{"class":206},[186,135521,210],{"class":202},[186,135523,260],{"class":206},[186,135525,634],{"class":202},[186,135527,135528,135530,135532,135534,135536],{"class":188,"line":248},[186,135529,661],{"class":206},[186,135531,210],{"class":202},[186,135533,666],{"class":206},[186,135535,670],{"class":669},[186,135537,634],{"class":202},[186,135539,135540,135542,135544,135546,135548],{"class":188,"line":265},[186,135541,677],{"class":206},[186,135543,210],{"class":202},[186,135545,666],{"class":206},[186,135547,670],{"class":669},[186,135549,634],{"class":202},[186,135551,135552],{"class":188,"line":271},[186,135553,639],{"class":202},[169,135555,692],{},[14,135557,696],{"id":695},[29,135559,700],{"id":699},[34,135561,135562,135572],{},[22,135563,705,135564,709,135566,713,135568,717,135570,721],{},[54,135565,708],{},[54,135567,712],{},[54,135569,716],{},[54,135571,720],{},[22,135573,724,135574,728,135576,731,135578,734,135580,737,135582,740,135584,743],{},[726,135575],{},[726,135577],{},[726,135579],{},[726,135581],{},[726,135583],{},[726,135585],{},[29,135587,747],{"id":746},[176,135589,135591],{"className":135590,"code":752,"language":753},[751],[183,135592,752],{"__ignoreMap":181},[164,135594],{"style":166,"src":758},[164,135596],{"style":166,"src":761},[29,135598,765],{"id":764},[164,135600],{"style":166,"src":768},[169,135602,771],{},[164,135604],{"style":166,"src":774},[176,135606,135607],{"className":178,"code":777,"language":180,"meta":181,"style":181},[183,135608,135609,135613,135619,135631,135643,135661,135677],{"__ignoreMap":181},[186,135610,135611],{"class":188,"line":189},[186,135612,784],{"class":192},[186,135614,135615,135617],{"class":188,"line":49},[186,135616,789],{"class":198},[186,135618,622],{"class":202},[186,135620,135621,135623,135625,135627,135629],{"class":188,"line":219},[186,135622,796],{"class":206},[186,135624,210],{"class":202},[186,135626,801],{"class":206},[186,135628,804],{"class":669},[186,135630,634],{"class":202},[186,135632,135633,135635,135637,135639,135641],{"class":188,"line":225},[186,135634,811],{"class":206},[186,135636,210],{"class":202},[186,135638,801],{"class":206},[186,135640,804],{"class":669},[186,135642,634],{"class":202},[186,135644,135645,135647,135649,135651,135653,135655,135657,135659],{"class":188,"line":242},[186,135646,824],{"class":206},[186,135648,210],{"class":202},[186,135650,829],{"class":206},[186,135652,832],{"class":202},[186,135654,836],{"class":835},[186,135656,839],{"class":202},[186,135658,842],{"class":206},[186,135660,634],{"class":202},[186,135662,135663,135665,135667,135669,135671,135673,135675],{"class":188,"line":248},[186,135664,849],{"class":206},[186,135666,210],{"class":202},[186,135668,854],{"class":206},[186,135670,804],{"class":669},[186,135672,859],{"class":206},[186,135674,804],{"class":669},[186,135676,634],{"class":202},[186,135678,135679],{"class":188,"line":265},[186,135680,639],{"class":202},[164,135682],{"style":166,"src":870},[169,135684,873],{},[14,135686,877],{"id":876},[29,135688,881],{"id":880},[169,135690,884],{},[169,135692,887],{},[169,135694,890],{},[169,135696,893],{},[169,135698,896],{},[169,135700,899,135701,903],{},[54,135702,902],{},[169,135704,135705,909,135707,913],{},[54,135706,908],{},[54,135708,912],{},[29,135710,917],{"id":916},[19,135712,135713,135717,135719,135721,135723],{},[22,135714,135715,925],{},[54,135716,924],{},[22,135718,928],{},[22,135720,931],{},[22,135722,934],{},[22,135724,937],{},[29,135726,941],{"id":940},[19,135728,135729],{},[22,135730,946,135731],{},[948,135732,953],{"href":950,"rel":135733},[952],[169,135735,956],{},[164,135737],{"style":166,"src":959},[169,135739,962],{},[164,135741],{"style":166,"src":965},[169,135743,968],{},[164,135745],{"style":166,"src":971},[169,135747,974],{},[164,135749],{"style":166,"src":977},[19,135751,135752],{},[22,135753,982,135754],{},[948,135755,985],{"href":985,"rel":135756},[952],[29,135758,990],{"id":989},[34,135760,135761],{},[22,135762,995,135763,999],{},[54,135764,998],{},[164,135766],{"style":166,"src":1002},[34,135768,135769],{"start":49},[22,135770,1007],{},[99,135772,135773,135781],{},[102,135774,135775],{},[105,135776,135777,135779],{},[108,135778,1016],{"align":110},[108,135780,1019],{"align":110},[116,135782,135783,135791,135799,135807],{},[105,135784,135785,135789],{},[121,135786,135787],{"align":110},[54,135788,1028],{},[121,135790,1031],{"align":110},[105,135792,135793,135797],{},[121,135794,135795],{"align":110},[54,135796,1038],{},[121,135798,1041],{"align":110},[105,135800,135801,135805],{},[121,135802,135803],{"align":110},[54,135804,1048],{},[121,135806,1051],{"align":110},[105,135808,135809,135813],{},[121,135810,135811],{"align":110},[54,135812,1058],{},[121,135814,1061],{"align":110},[34,135816,135817],{"start":219},[22,135818,1066],{},[176,135820,135821],{"className":178,"code":1069,"language":180,"meta":181,"style":181},[183,135822,135823,135827,135833,135843,135857,135879,135897,135915,135933,135937,135943,135953,135963],{"__ignoreMap":181},[186,135824,135825],{"class":188,"line":189},[186,135826,1076],{"class":192},[186,135828,135829,135831],{"class":188,"line":49},[186,135830,1081],{"class":669},[186,135832,622],{"class":202},[186,135834,135835,135837,135839,135841],{"class":188,"line":219},[186,135836,1088],{"class":206},[186,135838,210],{"class":202},[186,135840,1093],{"class":532},[186,135842,634],{"class":202},[186,135844,135845,135847,135849,135851,135853,135855],{"class":188,"line":225},[186,135846,1100],{"class":206},[186,135848,210],{"class":202},[186,135850,829],{"class":206},[186,135852,832],{"class":202},[186,135854,1109],{"class":532},[186,135856,1112],{"class":202},[186,135858,135859,135861,135863,135865,135867,135869,135871,135873,135875,135877],{"class":188,"line":242},[186,135860,1100],{"class":206},[186,135862,210],{"class":202},[186,135864,829],{"class":206},[186,135866,832],{"class":202},[186,135868,1125],{"class":532},[186,135870,839],{"class":202},[186,135872,1130],{"class":206},[186,135874,832],{"class":202},[186,135876,1135],{"class":532},[186,135878,1138],{"class":202},[186,135880,135881,135883,135885,135887,135889,135891,135893,135895],{"class":188,"line":248},[186,135882,1143],{"class":206},[186,135884,832],{"class":202},[186,135886,1148],{"class":532},[186,135888,839],{"class":202},[186,135890,1130],{"class":206},[186,135892,832],{"class":202},[186,135894,1157],{"class":532},[186,135896,1138],{"class":202},[186,135898,135899,135901,135903,135905,135907,135909,135911,135913],{"class":188,"line":265},[186,135900,1143],{"class":206},[186,135902,832],{"class":202},[186,135904,1168],{"class":532},[186,135906,839],{"class":202},[186,135908,1130],{"class":206},[186,135910,832],{"class":202},[186,135912,1177],{"class":532},[186,135914,1138],{"class":202},[186,135916,135917,135919,135921,135923,135925,135927,135929,135931],{"class":188,"line":271},[186,135918,1143],{"class":206},[186,135920,832],{"class":202},[186,135922,1188],{"class":532},[186,135924,839],{"class":202},[186,135926,1130],{"class":206},[186,135928,832],{"class":202},[186,135930,1197],{"class":532},[186,135932,1112],{"class":202},[186,135934,135935],{"class":188,"line":288},[186,135936,639],{"class":202},[186,135938,135939,135941],{"class":188,"line":294},[186,135940,789],{"class":198},[186,135942,622],{"class":202},[186,135944,135945,135947,135949,135951],{"class":188,"line":1212},[186,135946,1088],{"class":206},[186,135948,210],{"class":202},[186,135950,1093],{"class":532},[186,135952,634],{"class":202},[186,135954,135955,135957,135959,135961],{"class":188,"line":1223},[186,135956,1226],{"class":206},[186,135958,210],{"class":202},[186,135960,1231],{"class":206},[186,135962,634],{"class":202},[186,135964,135965],{"class":188,"line":1236},[186,135966,639],{"class":202},[169,135968,1241],{},[164,135970],{"style":166,"src":1244},[34,135972,135973],{"start":225},[22,135974,1249],{},[164,135976],{"style":166,"src":1252},[169,135978,1255],{},[164,135980],{"style":166,"src":1258},[169,135982,1261],{},[34,135984,135985],{"start":242},[22,135986,1266],{},[176,135988,135989],{"className":178,"code":1069,"language":180,"meta":181,"style":181},[183,135990,135991,135995,136001,136011,136025,136047,136065,136083,136101,136105,136111,136121,136131],{"__ignoreMap":181},[186,135992,135993],{"class":188,"line":189},[186,135994,1076],{"class":192},[186,135996,135997,135999],{"class":188,"line":49},[186,135998,1081],{"class":669},[186,136000,622],{"class":202},[186,136002,136003,136005,136007,136009],{"class":188,"line":219},[186,136004,1088],{"class":206},[186,136006,210],{"class":202},[186,136008,1093],{"class":532},[186,136010,634],{"class":202},[186,136012,136013,136015,136017,136019,136021,136023],{"class":188,"line":225},[186,136014,1100],{"class":206},[186,136016,210],{"class":202},[186,136018,829],{"class":206},[186,136020,832],{"class":202},[186,136022,1109],{"class":532},[186,136024,1112],{"class":202},[186,136026,136027,136029,136031,136033,136035,136037,136039,136041,136043,136045],{"class":188,"line":242},[186,136028,1100],{"class":206},[186,136030,210],{"class":202},[186,136032,829],{"class":206},[186,136034,832],{"class":202},[186,136036,1125],{"class":532},[186,136038,839],{"class":202},[186,136040,1130],{"class":206},[186,136042,832],{"class":202},[186,136044,1135],{"class":532},[186,136046,1138],{"class":202},[186,136048,136049,136051,136053,136055,136057,136059,136061,136063],{"class":188,"line":248},[186,136050,1143],{"class":206},[186,136052,832],{"class":202},[186,136054,1148],{"class":532},[186,136056,839],{"class":202},[186,136058,1130],{"class":206},[186,136060,832],{"class":202},[186,136062,1157],{"class":532},[186,136064,1138],{"class":202},[186,136066,136067,136069,136071,136073,136075,136077,136079,136081],{"class":188,"line":265},[186,136068,1143],{"class":206},[186,136070,832],{"class":202},[186,136072,1168],{"class":532},[186,136074,839],{"class":202},[186,136076,1130],{"class":206},[186,136078,832],{"class":202},[186,136080,1177],{"class":532},[186,136082,1138],{"class":202},[186,136084,136085,136087,136089,136091,136093,136095,136097,136099],{"class":188,"line":271},[186,136086,1143],{"class":206},[186,136088,832],{"class":202},[186,136090,1188],{"class":532},[186,136092,839],{"class":202},[186,136094,1130],{"class":206},[186,136096,832],{"class":202},[186,136098,1197],{"class":532},[186,136100,1112],{"class":202},[186,136102,136103],{"class":188,"line":288},[186,136104,639],{"class":202},[186,136106,136107,136109],{"class":188,"line":294},[186,136108,789],{"class":198},[186,136110,622],{"class":202},[186,136112,136113,136115,136117,136119],{"class":188,"line":1212},[186,136114,1088],{"class":206},[186,136116,210],{"class":202},[186,136118,1093],{"class":532},[186,136120,634],{"class":202},[186,136122,136123,136125,136127,136129],{"class":188,"line":1223},[186,136124,1226],{"class":206},[186,136126,210],{"class":202},[186,136128,1231],{"class":206},[186,136130,634],{"class":202},[186,136132,136133],{"class":188,"line":1236},[186,136134,639],{"class":202},[164,136136],{"style":166,"src":1417},[169,136138,1420],{},[34,136140,136141],{},[22,136142,1425],{},[164,136144],{"style":166,"src":1428},[34,136146,136147],{"start":49},[22,136148,1433],{},[176,136150,136151],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,136152,136153,136157,136171,136175],{"__ignoreMap":181},[186,136154,136155],{"class":188,"line":189},[186,136156,1443],{"class":192},[186,136158,136159,136161,136163,136165,136167,136169],{"class":188,"line":49},[186,136160,520],{"class":202},[186,136162,1450],{"class":523},[186,136164,1453],{"class":198},[186,136166,529],{"class":202},[186,136168,1458],{"class":532},[186,136170,552],{"class":202},[186,136172,136173],{"class":188,"line":219},[186,136174,1465],{"class":202},[186,136176,136177,136179,136181],{"class":188,"line":225},[186,136178,1470],{"class":202},[186,136180,1450],{"class":523},[186,136182,552],{"class":202},[169,136184,1477],{},[164,136186],{"style":166,"src":1480},[29,136188,1484],{"id":1483},[169,136190,1487],{},[169,136192,1490,136193,1494],{},[54,136194,1493],{},[169,136196,1497],{},[164,136198],{"style":166,"src":1500},[164,136200],{"style":166,"src":1503},[164,136202],{"style":166,"src":1506},[169,136204,1509],{},[169,136206,1512],{},[169,136208,1515],{},[29,136210,1519],{"id":1518},[164,136212],{"style":166,"src":1522},[1524,136214,1526],{},{"title":181,"searchDepth":49,"depth":49,"links":136216},[136217,136223,136228],{"id":16,"depth":49,"text":17,"children":136218},[136219,136220,136221,136222],{"id":31,"depth":219,"text":32},{"id":63,"depth":219,"text":64},{"id":91,"depth":219,"text":92},{"id":161,"depth":219,"text":162},{"id":695,"depth":49,"text":696,"children":136224},[136225,136226,136227],{"id":699,"depth":219,"text":700},{"id":746,"depth":219,"text":747},{"id":764,"depth":219,"text":765},{"id":876,"depth":49,"text":877,"children":136229},[136230,136231,136232,136233,136234,136235],{"id":880,"depth":219,"text":881},{"id":916,"depth":219,"text":917},{"id":940,"depth":219,"text":941},{"id":989,"depth":219,"text":990},{"id":1483,"depth":219,"text":1484},{"id":1518,"depth":219,"text":1519},{},{"title":5,"description":1548},{"id":136239,"title":136240,"body":136241,"description":1548,"extension":1549,"meta":137468,"navigation":1551,"path":137469,"seo":137470,"stem":137471,"__hash__":137472},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136242,"toc":137449},[136243,136246,136250,136253,136267,136335,136365,136368,136372,136376,136478,136525,136529,136532,136535,136569,136572,136575,136578,136581,136584,136587,136590,136592,136595,136598,136601,136604,136607,136610,136613,136641,136644,136648,136651,136658,136661,136664,136690,136693,136697,136700,136703,136710,136714,136717,136719,136751,136754,136757,136769,136775,136778,136781,136784,136786,136790,136793,136796,136799,136844,136848,136850,136853,136860,136902,136905,136909,136914,136928,136932,136935,136938,136941,136944,136947,136981,136984,136987,137041,137044,137047,137050,137053,137105,137108,137111,137160,137164,137166,137169,137172,137175,137178,137181,137239,137242,137248,137251,137254,137286,137289,137293,137297,137300,137332,137336,137339,137383,137387,137390,137393,137396,137399,137402,137405,137408,137410,137413,137415,137418,137421,137424,137427,137432,137435,137437,137440,137443,137446],[10,136244,136240],{"id":136245},"_13-界面样式与布局技巧",[14,136247,136249],{"id":136248},"_131-css三角","13.1 css三角",[169,136251,136252],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[19,136254,136255,136258,136261,136264],{},[22,136256,136257],{},"用css 边框可以模拟三角效果",[22,136259,136260],{},"宽度高度为0",[22,136262,136263],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[22,136265,136266],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[176,136268,136270],{"className":178,"code":136269,"language":180,"meta":181,"style":181},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[183,136271,136272,136277,136284,136294,136304,136320,136331],{"__ignoreMap":181},[186,136273,136274],{"class":188,"line":189},[186,136275,136276],{"class":192},"\u002F* CSS 实现三角形 *\u002F\n",[186,136278,136279,136282],{"class":188,"line":49},[186,136280,136281],{"class":198},".triangle",[186,136283,622],{"class":202},[186,136285,136286,136288,136290,136292],{"class":188,"line":219},[186,136287,796],{"class":206},[186,136289,210],{"class":202},[186,136291,1803],{"class":206},[186,136293,634],{"class":202},[186,136295,136296,136298,136300,136302],{"class":188,"line":225},[186,136297,811],{"class":206},[186,136299,210],{"class":202},[186,136301,1803],{"class":206},[186,136303,634],{"class":202},[186,136305,136306,136308,136310,136312,136314,136316,136318],{"class":188,"line":242},[186,136307,72330],{"class":206},[186,136309,210],{"class":202},[186,136311,2056],{"class":206},[186,136313,804],{"class":669},[186,136315,52971],{"class":206},[186,136317,65428],{"class":206},[186,136319,634],{"class":202},[186,136321,136322,136325,136327,136329],{"class":188,"line":248},[186,136323,136324],{"class":206},"  border-bottom-color",[186,136326,210],{"class":202},[186,136328,63807],{"class":206},[186,136330,634],{"class":202},[186,136332,136333],{"class":188,"line":265},[186,136334,639],{"class":202},[176,136336,136337],{"className":178,"code":132125,"language":180,"meta":181,"style":181},[183,136338,136339,136345,136361],{"__ignoreMap":181},[186,136340,136341,136343],{"class":188,"line":189},[186,136342,1450],{"class":523},[186,136344,622],{"class":202},[186,136346,136347,136349,136351,136353,136355,136357,136359],{"class":188,"line":49},[186,136348,72330],{"class":206},[186,136350,210],{"class":202},[186,136352,1829],{"class":206},[186,136354,804],{"class":669},[186,136356,52971],{"class":206},[186,136358,131364],{"class":206},[186,136360,634],{"class":202},[186,136362,136363],{"class":188,"line":219},[186,136364,639],{"class":202},[164,136366],{"style":166,"src":136367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136369,136371],{"id":136370},"_132-css用户界面样式","13.2 css用户界面样式",[29,136373,136375],{"id":136374},"_1321-鼠标样式","13.2.1 鼠标样式",[176,136377,136379],{"className":178,"code":136378,"language":180,"meta":181,"style":181},"\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",[183,136380,136381,136386,136405,136423,136442,136459],{"__ignoreMap":181},[186,136382,136383],{"class":188,"line":189},[186,136384,136385],{"class":192},"\u002F* 鼠标样式 *\u002F\n",[186,136387,136388,136390,136392,136395,136397,136399,136402],{"class":188,"line":49},[186,136389,1450],{"class":523},[186,136391,203],{"class":202},[186,136393,136394],{"class":206},"cursor",[186,136396,210],{"class":202},[186,136398,63468],{"class":206},[186,136400,136401],{"class":202},"; }   ",[186,136403,136404],{"class":192},"\u002F* 手型 *\u002F\n",[186,136406,136407,136409,136411,136413,136415,136418,136420],{"class":188,"line":219},[186,136408,1450],{"class":523},[186,136410,203],{"class":202},[186,136412,136394],{"class":206},[186,136414,210],{"class":202},[186,136416,136417],{"class":206},"default",[186,136419,136401],{"class":202},[186,136421,136422],{"class":192},"\u002F* 默认 *\u002F\n",[186,136424,136425,136427,136429,136431,136433,136436,136439],{"class":188,"line":225},[186,136426,1450],{"class":523},[186,136428,203],{"class":202},[186,136430,136394],{"class":206},[186,136432,210],{"class":202},[186,136434,136435],{"class":206},"move",[186,136437,136438],{"class":202},"; }      ",[186,136440,136441],{"class":192},"\u002F* 移动 *\u002F\n",[186,136443,136444,136446,136448,136450,136452,136454,136456],{"class":188,"line":242},[186,136445,1450],{"class":523},[186,136447,203],{"class":202},[186,136449,136394],{"class":206},[186,136451,210],{"class":202},[186,136453,753],{"class":206},[186,136455,136438],{"class":202},[186,136457,136458],{"class":192},"\u002F* 文本 *\u002F\n",[186,136460,136461,136463,136465,136467,136469,136472,136475],{"class":188,"line":248},[186,136462,1450],{"class":523},[186,136464,203],{"class":202},[186,136466,136394],{"class":206},[186,136468,210],{"class":202},[186,136470,136471],{"class":206},"not-allowed",[186,136473,136474],{"class":202},"; } ",[186,136476,136477],{"class":192},"\u002F* 禁止 *\u002F\n",[99,136479,136480,136488],{},[102,136481,136482],{},[105,136483,136484,136486],{},[108,136485,111],{"align":110},[108,136487,114],{"align":110},[116,136489,136490,136497,136504,136511,136518],{},[105,136491,136492,136494],{},[121,136493,136417],{"align":110},[121,136495,136496],{"align":110},"小白 默认",[105,136498,136499,136501],{},[121,136500,63468],{"align":110},[121,136502,136503],{"align":110},"小手",[105,136505,136506,136508],{},[121,136507,136435],{"align":110},[121,136509,136510],{"align":110},"移动",[105,136512,136513,136515],{},[121,136514,753],{"align":110},[121,136516,136517],{"align":110},"文本",[105,136519,136520,136522],{},[121,136521,136471],{"align":110},[121,136523,136524],{"align":110},"禁止",[29,136526,136528],{"id":136527},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[169,136530,136531],{},"去除表单轮廓线",[169,136533,136534],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[176,136536,136537],{"className":178,"code":131336,"language":180,"meta":181,"style":181},[183,136538,136539,136543,136549,136565],{"__ignoreMap":181},[186,136540,136541],{"class":188,"line":189},[186,136542,131343],{"class":192},[186,136544,136545,136547],{"class":188,"line":49},[186,136546,1450],{"class":523},[186,136548,622],{"class":202},[186,136550,136551,136553,136555,136557,136559,136561,136563],{"class":188,"line":219},[186,136552,72330],{"class":206},[186,136554,210],{"class":202},[186,136556,1829],{"class":206},[186,136558,804],{"class":669},[186,136560,52971],{"class":206},[186,136562,131364],{"class":206},[186,136564,634],{"class":202},[186,136566,136567],{"class":188,"line":225},[186,136568,639],{"class":202},[169,136570,136571],{},"文本域：",[164,136573],{"style":166,"src":136574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[169,136576,136577],{},"此时会有一个空白区域",[164,136579],{"style":166,"src":136580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[169,136582,136583],{},"写在同一行就不会出现这个问题",[164,136585],{"style":166,"src":136586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[169,136588,136589],{},"文本域是行内块元素，一定记住！！！",[169,136591,99664],{},[164,136593],{"style":166,"src":136594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[169,136596,136597],{},"文本域尽量放在一行",[169,136599,136600],{},"知识回顾：cols是列，rols是行",[164,136602],{"style":166,"src":136603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[169,136605,136606],{},"它可以进行拖动，显然这是我们不愿意看到的",[164,136608],{"style":166,"src":136609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[169,136611,136612],{},"使用resize进行解决",[176,136614,136616],{"className":178,"code":136615,"language":180,"meta":181,"style":181},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[183,136617,136618,136624,136637],{"__ignoreMap":181},[186,136619,136620,136622],{"class":188,"line":189},[186,136621,55266],{"class":523},[186,136623,622],{"class":202},[186,136625,136626,136628,136630,136632,136634],{"class":188,"line":49},[186,136627,72232],{"class":206},[186,136629,210],{"class":202},[186,136631,56182],{"class":206},[186,136633,131835],{"class":202},[186,136635,136636],{"class":192},"\u002F* 取消表单轮廓线 *\u002F\n",[186,136638,136639],{"class":188,"line":219},[186,136640,639],{"class":202},[169,136642,136643],{},"此时就无法通过右下方实现拖动了",[29,136645,136647],{"id":136646},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[169,136649,136650],{},"实现一个盒子中的文字和图片对齐",[169,136652,136653,136654,136657],{},"用于设置一个元素的 ",[54,136655,136656],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[169,136659,136660],{},"图片和文字默认是基线对齐",[164,136662],{"style":166,"src":136663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[176,136665,136666],{"className":178,"code":136615,"language":180,"meta":181,"style":181},[183,136667,136668,136674,136686],{"__ignoreMap":181},[186,136669,136670,136672],{"class":188,"line":189},[186,136671,55266],{"class":523},[186,136673,622],{"class":202},[186,136675,136676,136678,136680,136682,136684],{"class":188,"line":49},[186,136677,72232],{"class":206},[186,136679,210],{"class":202},[186,136681,56182],{"class":206},[186,136683,131835],{"class":202},[186,136685,136636],{"class":192},[186,136687,136688],{"class":188,"line":219},[186,136689,639],{"class":202},[164,136691],{"style":166,"src":136692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23459,136694,136696],{"id":136695},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[169,136698,136699],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[164,136701],{"style":166,"src":136702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[169,136704,136705,136706,136709],{},"此时可以给图片、表单这些行内块元素的 ",[54,136707,136708],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23459,136711,136713],{"id":136712},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[169,136715,136716],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[169,136718,16095],{},[176,136720,136722],{"className":178,"code":136721,"language":180,"meta":181,"style":181},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[183,136723,136724,136729,136735,136747],{"__ignoreMap":181},[186,136725,136726],{"class":188,"line":189},[186,136727,136728],{"class":192},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[186,136730,136731,136733],{"class":188,"line":49},[186,136732,164],{"class":523},[186,136734,622],{"class":202},[186,136736,136737,136740,136742,136745],{"class":188,"line":219},[186,136738,136739],{"class":206},"  vertical-align",[186,136741,210],{"class":202},[186,136743,136744],{"class":206},"middle",[186,136746,634],{"class":202},[186,136748,136749],{"class":188,"line":225},[186,136750,639],{"class":202},[164,136752],{"style":166,"src":136753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[169,136755,136756],{},"主要解决方法有两种：",[34,136758,136759],{},[22,136760,136761,136764,136765,136768],{},[54,136762,136763],{},"给图片"," 添加 ",[54,136766,136767],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[169,136770,136771,136772],{},"2.把图片转换为块级元素 ",[54,136773,136774],{},"display: block",[169,136776,136777],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[169,136779,136780],{},"img {",[169,136782,136783],{},"vertical-align:middle;",[169,136785,2553],{},[29,136787,136789],{"id":136788},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[169,136791,136792],{},"效果：",[164,136794],{"style":166,"src":136795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[169,136797,136798],{},"单行文本溢出显示省略号--必须满足三个条件：",[176,136800,136802],{"className":178,"code":136801,"language":180,"meta":181,"style":181},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[183,136803,136804,136809,136815,136825,136830,136840],{"__ignoreMap":181},[186,136805,136806],{"class":188,"line":189},[186,136807,136808],{"class":192},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[186,136810,136811,136813],{"class":188,"line":49},[186,136812,164],{"class":523},[186,136814,622],{"class":202},[186,136816,136817,136819,136821,136823],{"class":188,"line":219},[186,136818,136739],{"class":206},[186,136820,210],{"class":202},[186,136822,136744],{"class":206},[186,136824,634],{"class":202},[186,136826,136827],{"class":188,"line":225},[186,136828,136829],{"class":192},"  \u002F* 或 *\u002F\n",[186,136831,136832,136834,136836,136838],{"class":188,"line":242},[186,136833,129592],{"class":206},[186,136835,210],{"class":202},[186,136837,62310],{"class":206},[186,136839,634],{"class":202},[186,136841,136842],{"class":188,"line":248},[186,136843,639],{"class":202},[29,136845,136847],{"id":136846},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[169,136849,136792],{},[164,136851],{"style":166,"src":136852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[169,136854,136855,136856,136859],{},"多行文本溢出显示省略号， ",[54,136857,136858],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[176,136861,136862],{"className":178,"code":136801,"language":180,"meta":181,"style":181},[183,136863,136864,136868,136874,136884,136888,136898],{"__ignoreMap":181},[186,136865,136866],{"class":188,"line":189},[186,136867,136808],{"class":192},[186,136869,136870,136872],{"class":188,"line":49},[186,136871,164],{"class":523},[186,136873,622],{"class":202},[186,136875,136876,136878,136880,136882],{"class":188,"line":219},[186,136877,136739],{"class":206},[186,136879,210],{"class":202},[186,136881,136744],{"class":206},[186,136883,634],{"class":202},[186,136885,136886],{"class":188,"line":225},[186,136887,136829],{"class":192},[186,136889,136890,136892,136894,136896],{"class":188,"line":242},[186,136891,129592],{"class":206},[186,136893,210],{"class":202},[186,136895,62310],{"class":206},[186,136897,634],{"class":202},[186,136899,136900],{"class":188,"line":248},[186,136901,639],{"class":202},[169,136903,136904],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136906,136908],{"id":136907},"_133-常见布局技巧","13.3 常见布局技巧",[169,136910,136911],{},[54,136912,136913],{},"巧妙利用一个技术更快更好的布局：",[34,136915,136916,136919,136922,136925],{},[22,136917,136918],{},"margin负值的运用",[22,136920,136921],{},"文字围绕浮动元素",[22,136923,136924],{},"行内块的巧妙运用",[22,136926,136927],{},"CSS三角强化",[29,136929,136931],{"id":136930},"_1331-margin负值的运用","13.3.1 margin负值的运用",[169,136933,136934],{},"应用场景：",[164,136936],{"style":166,"src":136937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[164,136939],{"style":166,"src":136940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[169,136942,136943],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[169,136945,136946],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[176,136948,136949],{"className":178,"code":131336,"language":180,"meta":181,"style":181},[183,136950,136951,136955,136961,136977],{"__ignoreMap":181},[186,136952,136953],{"class":188,"line":189},[186,136954,131343],{"class":192},[186,136956,136957,136959],{"class":188,"line":49},[186,136958,1450],{"class":523},[186,136960,622],{"class":202},[186,136962,136963,136965,136967,136969,136971,136973,136975],{"class":188,"line":219},[186,136964,72330],{"class":206},[186,136966,210],{"class":202},[186,136968,1829],{"class":206},[186,136970,804],{"class":669},[186,136972,52971],{"class":206},[186,136974,131364],{"class":206},[186,136976,634],{"class":202},[186,136978,136979],{"class":188,"line":225},[186,136980,639],{"class":202},[164,136982],{"style":166,"src":136983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[169,136985,136986],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[176,136988,136990],{"className":178,"code":136989,"language":180,"meta":181,"style":181},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[183,136991,136992,136997,137003,137013,137025,137037],{"__ignoreMap":181},[186,136993,136994],{"class":188,"line":189},[186,136995,136996],{"class":192},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[186,136998,136999,137001],{"class":188,"line":49},[186,137000,131820],{"class":198},[186,137002,622],{"class":202},[186,137004,137005,137007,137009,137011],{"class":188,"line":219},[186,137006,627],{"class":206},[186,137008,210],{"class":202},[186,137010,237],{"class":206},[186,137012,634],{"class":202},[186,137014,137015,137017,137019,137021,137023],{"class":188,"line":225},[186,137016,661],{"class":206},[186,137018,210],{"class":202},[186,137020,2056],{"class":206},[186,137022,804],{"class":669},[186,137024,634],{"class":202},[186,137026,137027,137029,137031,137033,137035],{"class":188,"line":242},[186,137028,677],{"class":206},[186,137030,210],{"class":202},[186,137032,801],{"class":206},[186,137034,804],{"class":669},[186,137036,634],{"class":202},[186,137038,137039],{"class":188,"line":248},[186,137040,639],{"class":202},[169,137042,137043],{},"加上上述代码会发现：",[164,137045],{"style":166,"src":137046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[169,137048,137049],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[169,137051,137052],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[176,137054,137055],{"className":178,"code":136989,"language":180,"meta":181,"style":181},[183,137056,137057,137061,137067,137077,137089,137101],{"__ignoreMap":181},[186,137058,137059],{"class":188,"line":189},[186,137060,136996],{"class":192},[186,137062,137063,137065],{"class":188,"line":49},[186,137064,131820],{"class":198},[186,137066,622],{"class":202},[186,137068,137069,137071,137073,137075],{"class":188,"line":219},[186,137070,627],{"class":206},[186,137072,210],{"class":202},[186,137074,237],{"class":206},[186,137076,634],{"class":202},[186,137078,137079,137081,137083,137085,137087],{"class":188,"line":225},[186,137080,661],{"class":206},[186,137082,210],{"class":202},[186,137084,2056],{"class":206},[186,137086,804],{"class":669},[186,137088,634],{"class":202},[186,137090,137091,137093,137095,137097,137099],{"class":188,"line":242},[186,137092,677],{"class":206},[186,137094,210],{"class":202},[186,137096,801],{"class":206},[186,137098,804],{"class":669},[186,137100,634],{"class":202},[186,137102,137103],{"class":188,"line":248},[186,137104,639],{"class":202},[169,137106,137107],{},"解决方式2：",[169,137109,137110],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[176,137112,137114],{"className":178,"code":137113,"language":180,"meta":181,"style":181},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[183,137115,137116,137122,137132,137144,137156],{"__ignoreMap":181},[186,137117,137118,137120],{"class":188,"line":189},[186,137119,1450],{"class":523},[186,137121,622],{"class":202},[186,137123,137124,137126,137128,137130],{"class":188,"line":49},[186,137125,627],{"class":206},[186,137127,210],{"class":202},[186,137129,237],{"class":206},[186,137131,634],{"class":202},[186,137133,137134,137136,137138,137140,137142],{"class":188,"line":219},[186,137135,661],{"class":206},[186,137137,210],{"class":202},[186,137139,2056],{"class":206},[186,137141,804],{"class":669},[186,137143,634],{"class":202},[186,137145,137146,137148,137150,137152,137154],{"class":188,"line":225},[186,137147,677],{"class":206},[186,137149,210],{"class":202},[186,137151,801],{"class":206},[186,137153,804],{"class":669},[186,137155,634],{"class":202},[186,137157,137158],{"class":188,"line":242},[186,137159,639],{"class":202},[29,137161,137163],{"id":137162},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[169,137165,136934],{},[164,137167],{"style":166,"src":137168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[169,137170,137171],{},"实现结构图：",[164,137173],{"style":166,"src":137174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[169,137176,137177],{},"巧妙运用浮动元素不会压住文字的特性",[169,137179,137180],{},"代码显示：",[176,137182,137184],{"className":178,"code":137183,"language":180,"meta":181,"style":181},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[183,137185,137186,137192,137202,137206,137211,137215,137221,137235],{"__ignoreMap":181},[186,137187,137188,137190],{"class":188,"line":189},[186,137189,131820],{"class":198},[186,137191,622],{"class":202},[186,137193,137194,137196,137198,137200],{"class":188,"line":49},[186,137195,132448],{"class":206},[186,137197,210],{"class":202},[186,137199,110],{"class":206},[186,137201,634],{"class":202},[186,137203,137204],{"class":188,"line":219},[186,137205,639],{"class":202},[186,137207,137208],{"class":188,"line":225},[186,137209,137210],{"class":202},"```Css\n",[186,137212,137213],{"class":188,"line":242},[186,137214,131815],{"class":192},[186,137216,137217,137219],{"class":188,"line":248},[186,137218,131820],{"class":198},[186,137220,622],{"class":202},[186,137222,137223,137225,137227,137229,137231,137233],{"class":188,"line":265},[186,137224,71907],{"class":206},[186,137226,210],{"class":202},[186,137228,1803],{"class":206},[186,137230,53006],{"class":206},[186,137232,131835],{"class":202},[186,137234,131838],{"class":192},[186,137236,137237],{"class":188,"line":271},[186,137238,639],{"class":202},[169,137240,137241],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[176,137243,137246],{"className":137244,"code":137245,"language":753},[751],"\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",[183,137247,137245],{"__ignoreMap":181},[164,137249],{"style":166,"src":137250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[169,137252,137253],{},"最终展示结果：",[176,137255,137256],{"className":178,"code":131808,"language":180,"meta":181,"style":181},[183,137257,137258,137262,137268,137282],{"__ignoreMap":181},[186,137259,137260],{"class":188,"line":189},[186,137261,131815],{"class":192},[186,137263,137264,137266],{"class":188,"line":49},[186,137265,131820],{"class":198},[186,137267,622],{"class":202},[186,137269,137270,137272,137274,137276,137278,137280],{"class":188,"line":219},[186,137271,71907],{"class":206},[186,137273,210],{"class":202},[186,137275,1803],{"class":206},[186,137277,53006],{"class":206},[186,137279,131835],{"class":202},[186,137281,131838],{"class":192},[186,137283,137284],{"class":188,"line":225},[186,137285,639],{"class":202},[164,137287],{"style":166,"src":137288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137290,137292],{"id":137291},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[29,137294,137296],{"id":137295},"_1341-原理","13.4.1 原理",[164,137298],{"style":166,"src":137299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[176,137301,137302],{"className":178,"code":131808,"language":180,"meta":181,"style":181},[183,137303,137304,137308,137314,137328],{"__ignoreMap":181},[186,137305,137306],{"class":188,"line":189},[186,137307,131815],{"class":192},[186,137309,137310,137312],{"class":188,"line":49},[186,137311,131820],{"class":198},[186,137313,622],{"class":202},[186,137315,137316,137318,137320,137322,137324,137326],{"class":188,"line":219},[186,137317,71907],{"class":206},[186,137319,210],{"class":202},[186,137321,1803],{"class":206},[186,137323,53006],{"class":206},[186,137325,131835],{"class":202},[186,137327,131838],{"class":192},[186,137329,137330],{"class":188,"line":225},[186,137331,639],{"class":202},[29,137333,137335],{"id":137334},"_1342-实例","13.4.2 实例",[164,137337],{"style":166,"src":137338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[176,137340,137341],{"className":178,"code":132434,"language":180,"meta":181,"style":181},[183,137342,137343,137349,137359,137363,137369,137379],{"__ignoreMap":181},[186,137344,137345,137347],{"class":188,"line":189},[186,137346,132441],{"class":198},[186,137348,622],{"class":202},[186,137350,137351,137353,137355,137357],{"class":188,"line":49},[186,137352,132448],{"class":206},[186,137354,210],{"class":202},[186,137356,110],{"class":206},[186,137358,634],{"class":202},[186,137360,137361],{"class":188,"line":219},[186,137362,639],{"class":202},[186,137364,137365,137367],{"class":188,"line":225},[186,137366,132463],{"class":198},[186,137368,622],{"class":202},[186,137370,137371,137373,137375,137377],{"class":188,"line":242},[186,137372,132448],{"class":206},[186,137374,210],{"class":202},[186,137376,73956],{"class":206},[186,137378,634],{"class":202},[186,137380,137381],{"class":188,"line":248},[186,137382,639],{"class":202},[14,137384,137386],{"id":137385},"_135-css的初始化","13.5 css的初始化",[169,137388,137389],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[169,137391,137392],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[169,137394,137395],{},"每个网页都必须首先进行 CSS初始化。",[169,137397,137398],{},"这里我们以 京东CSS初始化代码为例。",[169,137400,137401],{},"在网页右键查看网页源代码",[169,137403,137404],{},"找到css的link引入语句",[169,137406,137407],{},"然后ctrl+f 输入body",[169,137409,78659],{},[164,137411],{"style":166,"src":137412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[169,137414,78682],{},[164,137416],{"style":166,"src":137417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[169,137419,137420],{},"③打开了网页上传压缩的代码",[164,137422],{"style":166,"src":137423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[169,137425,137426],{},"④从body前可以查看这个网页的初始化代码",[169,137428,137429],{},[54,137430,137431],{},"Unicode编码字体：",[169,137433,137434],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[169,137436,84639],{},[169,137438,137439],{},"黑体 \\9ED1\\4F53",[169,137441,137442],{},"宋体 \\5B8B\\4F53",[169,137444,137445],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1524,137447,137448],{},"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":181,"searchDepth":49,"depth":49,"links":137450},[137451,137452,137459,137463,137467],{"id":136248,"depth":49,"text":136249},{"id":136370,"depth":49,"text":136371,"children":137453},[137454,137455,137456,137457,137458],{"id":136374,"depth":219,"text":136375},{"id":136527,"depth":219,"text":136528},{"id":136646,"depth":219,"text":136647},{"id":136788,"depth":219,"text":136789},{"id":136846,"depth":219,"text":136847},{"id":136907,"depth":49,"text":136908,"children":137460},[137461,137462],{"id":136930,"depth":219,"text":136931},{"id":137162,"depth":219,"text":137163},{"id":137291,"depth":49,"text":137292,"children":137464},[137465,137466],{"id":137295,"depth":219,"text":137296},{"id":137334,"depth":219,"text":137335},{"id":137385,"depth":49,"text":137386},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136240,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137474,"title":137475,"body":137476,"description":1548,"extension":1549,"meta":139162,"navigation":1551,"path":139163,"seo":139164,"stem":139165,"__hash__":139166},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137477,"toc":139151},[137478,137481,137485,137489,137492,137499,137502,137505,137543,137546,137548,137562,137566,137575,137579,137584,137587,137590,137593,137628,137633,137636,137666,137669,137674,137677,137680,137710,137713,137767,137770,137774,137779,137791,137794,137798,137828,137831,137836,137839,137869,137872,137876,137893,137897,137901,137904,137937,137940,137944,137947,137950,137953,137956,137959,138070,138073,138076,138079,138181,138184,138188,138192,138196,138199,138239,138242,138244,138260,138264,138267,138272,138353,138356,138359,138485,138490,138493,138501,138504,138509,138594,138597,138601,138604,138607,138611,138631,138636,138720,138723,138728,138731,138734,138812,138815,138818,138821,138824,138827,138832,138835,138838,138910,138913,138918,138921,139018,139021,139027,139030,139033,139036,139039,139042,139045,139048,139051,139055,139060,139063,139096,139101,139104,139145,139148],[10,137479,137475],{"id":137480},"_14-html5与css3新特性",[14,137482,137484],{"id":137483},"_141-html5的新特性","14.1 HTML5的新特性",[29,137486,137488],{"id":137487},"_1411-基本标签","14.1.1 基本标签",[169,137490,137491],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[169,137493,137494,137495,137498],{},"这些新特性都有兼容性问题，基本是 ",[54,137496,137497],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[169,137500,137501],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[169,137503,137504],{},"现在使用的是新特性：",[19,137506,137507,137513,137519,137525,137531,137537],{},[22,137508,137509,137512],{},[183,137510,137511],{},"\u003Cheader>"," 头部标签",[22,137514,137515,137518],{},[183,137516,137517],{},"\u003Cnav>"," 导航标签",[22,137520,137521,137524],{},[183,137522,137523],{},"\u003Carticle>"," 内容标签",[22,137526,137527,137530],{},[183,137528,137529],{},"\u003Csection>"," 定义文档某个区域",[22,137532,137533,137536],{},[183,137534,137535],{},"\u003Caside>"," 侧边栏标签",[22,137538,137539,137542],{},[183,137540,137541],{},"\u003Cfooter>"," 尾部标签",[164,137544],{"style":166,"src":137545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[169,137547,1652],{},[19,137549,137550,137553,137556,137559],{},[22,137551,137552],{},"这种语义化标准主要是针对搜索引擎的",[22,137554,137555],{},"这些标签页面中可以经常使用",[22,137557,137558],{},"在IE9中，需要把这些元素转换为块级元素",[22,137560,137561],{},"移动端更喜欢使用这些标签",[29,137563,137565],{"id":137564},"_1412-多媒体标签","14.1.2 多媒体标签",[169,137567,137568,137569,137571,137572,137574],{},"音频 ",[54,137570,29630],{}," 和视频 ",[54,137573,29639],{}," 两个标签",[23459,137576,137578],{"id":137577},"_14121-视频标签-video","14.1.2.1 视频标签- video",[34,137580,137581],{},[22,137582,137583],{},"支持格式：",[164,137585],{"style":166,"src":137586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[169,137588,137589],{},"尽量使用MP4，兼容性好",[169,137591,137592],{},"用MP4就可以",[176,137594,137596],{"className":511,"code":137595,"language":513,"meta":181,"style":181},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[183,137597,137598],{"__ignoreMap":181},[186,137599,137600,137602,137604,137606,137608,137611,137613,137616,137619,137622,137624,137626],{"class":188,"line":189},[186,137601,520],{"class":202},[186,137603,29639],{"class":523},[186,137605,526],{"class":198},[186,137607,529],{"class":202},[186,137609,137610],{"class":532},"\"movie.mp4\"",[186,137612,93854],{"class":198},[186,137614,137615],{"class":198}," autoplay",[186,137617,137618],{"class":198}," muted",[186,137620,137621],{"class":198}," loop",[186,137623,56755],{"class":202},[186,137625,29639],{"class":523},[186,137627,552],{"class":202},[34,137629,137630],{"start":49},[22,137631,137632],{},"兼容写法",[169,137634,137635],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[176,137637,137638],{"className":511,"code":137595,"language":513,"meta":181,"style":181},[183,137639,137640],{"__ignoreMap":181},[186,137641,137642,137644,137646,137648,137650,137652,137654,137656,137658,137660,137662,137664],{"class":188,"line":189},[186,137643,520],{"class":202},[186,137645,29639],{"class":523},[186,137647,526],{"class":198},[186,137649,529],{"class":202},[186,137651,137610],{"class":532},[186,137653,93854],{"class":198},[186,137655,137615],{"class":198},[186,137657,137618],{"class":198},[186,137659,137621],{"class":198},[186,137661,56755],{"class":202},[186,137663,29639],{"class":523},[186,137665,552],{"class":202},[169,137667,137668],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[34,137670,137671],{"start":219},[22,137672,137673],{},"video常用属性",[164,137675],{"style":166,"src":137676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[169,137678,137679],{},"poster属性后面是跟的等待加载图片的地址",[176,137681,137682],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,137683,137684],{"__ignoreMap":181},[186,137685,137686,137688,137690,137692,137694,137696,137698,137700,137702,137704,137706,137708],{"class":188,"line":189},[186,137687,520],{"class":202},[186,137689,164],{"class":523},[186,137691,526],{"class":198},[186,137693,529],{"class":202},[186,137695,533],{"class":532},[186,137697,536],{"class":198},[186,137699,529],{"class":202},[186,137701,541],{"class":532},[186,137703,544],{"class":198},[186,137705,529],{"class":202},[186,137707,549],{"class":532},[186,137709,552],{"class":202},[169,137711,137712],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[176,137714,137716],{"className":178,"code":137715,"language":180,"meta":181,"style":181},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[183,137717,137718,137723,137729,137753,137758,137763],{"__ignoreMap":181},[186,137719,137720],{"class":188,"line":189},[186,137721,137722],{"class":192},"\u002F* 2D 位移 *\u002F\n",[186,137724,137725,137727],{"class":188,"line":49},[186,137726,1450],{"class":523},[186,137728,622],{"class":202},[186,137730,137731,137734,137736,137739,137741,137743,137745,137747,137749,137751],{"class":188,"line":219},[186,137732,137733],{"class":206},"  transform",[186,137735,210],{"class":202},[186,137737,137738],{"class":206},"translate",[186,137740,832],{"class":202},[186,137742,1922],{"class":206},[186,137744,804],{"class":669},[186,137746,13898],{"class":202},[186,137748,666],{"class":206},[186,137750,804],{"class":669},[186,137752,1112],{"class":202},[186,137754,137755],{"class":188,"line":225},[186,137756,137757],{"class":192},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[186,137759,137760],{"class":188,"line":242},[186,137761,137762],{"class":192},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[186,137764,137765],{"class":188,"line":248},[186,137766,639],{"class":202},[169,137768,137769],{},"muted:自动静音属性",[23459,137771,137773],{"id":137772},"_14122-音频标签audio","14.1.2.2 音频标签audio",[34,137775,137776],{},[22,137777,137778],{},"基本使用",[169,137780,137781,137782,137787,137788],{},"当前 ",[54,137783,137784],{},[183,137785,137786],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[54,137789,137790],{},"mp3格式",[164,137792],{"style":166,"src":137793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[34,137795,137796],{"start":49},[22,137797,137632],{},[176,137799,137800],{"className":511,"code":137595,"language":513,"meta":181,"style":181},[183,137801,137802],{"__ignoreMap":181},[186,137803,137804,137806,137808,137810,137812,137814,137816,137818,137820,137822,137824,137826],{"class":188,"line":189},[186,137805,520],{"class":202},[186,137807,29639],{"class":523},[186,137809,526],{"class":198},[186,137811,529],{"class":202},[186,137813,137610],{"class":532},[186,137815,93854],{"class":198},[186,137817,137615],{"class":198},[186,137819,137618],{"class":198},[186,137821,137621],{"class":198},[186,137823,56755],{"class":202},[186,137825,29639],{"class":523},[186,137827,552],{"class":202},[169,137829,137830],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[34,137832,137833],{"start":219},[22,137834,137835],{},"常用属性",[164,137837],{"style":166,"src":137838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[176,137840,137841],{"className":511,"code":137595,"language":513,"meta":181,"style":181},[183,137842,137843],{"__ignoreMap":181},[186,137844,137845,137847,137849,137851,137853,137855,137857,137859,137861,137863,137865,137867],{"class":188,"line":189},[186,137846,520],{"class":202},[186,137848,29639],{"class":523},[186,137850,526],{"class":198},[186,137852,529],{"class":202},[186,137854,137610],{"class":532},[186,137856,93854],{"class":198},[186,137858,137615],{"class":198},[186,137860,137618],{"class":198},[186,137862,137621],{"class":198},[186,137864,56755],{"class":202},[186,137866,29639],{"class":523},[186,137868,552],{"class":202},[169,137870,137871],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23459,137873,137875],{"id":137874},"_14123-总结","14.1.2.3 总结",[19,137877,137878,137881,137884,137887,137890],{},[22,137879,137880],{},"音频标签和视频标签使用方式基本一致",[22,137882,137883],{},"浏览器支持情况不同",[22,137885,137886],{},"谷歌浏览器把音频和视频自动播放禁止了",[22,137888,137889],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[22,137891,137892],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[29,137894,137896],{"id":137895},"_1413-表单元素","14.1.3 表单元素",[23459,137898,137900],{"id":137899},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[164,137902],{"style":166,"src":137903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[176,137905,137907],{"className":511,"code":137906,"language":513,"meta":181,"style":181},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[183,137908,137909],{"__ignoreMap":181},[186,137910,137911,137913,137915,137917,137919,137921,137923,137925,137928,137930,137932,137935],{"class":188,"line":189},[186,137912,520],{"class":202},[186,137914,55266],{"class":523},[186,137916,55269],{"class":198},[186,137918,529],{"class":202},[186,137920,64137],{"class":532},[186,137922,16382],{"class":198},[186,137924,529],{"class":202},[186,137926,137927],{"class":532},"\"username\"",[186,137929,62461],{"class":198},[186,137931,529],{"class":202},[186,137933,137934],{"class":532},"\"请输入用户名\"",[186,137936,552],{"class":202},[164,137938],{"style":166,"src":137939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23459,137941,137943],{"id":137942},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[164,137945],{"style":166,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[169,137948,137949],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[169,137951,137952],{},"快捷操作：",[164,137954],{"style":166,"src":137955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[169,137957,137958],{},"例子1：",[176,137960,137962],{"className":511,"code":137961,"language":513,"meta":181,"style":181},"\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",[183,137963,137964,137987,138014,138043,138062],{"__ignoreMap":181},[186,137965,137966,137968,137970,137972,137974,137977,137980,137982,137985],{"class":188,"line":189},[186,137967,520],{"class":202},[186,137969,68062],{"class":523},[186,137971,68065],{"class":198},[186,137973,529],{"class":202},[186,137975,137976],{"class":532},"\"\u002Fsubmit\"",[186,137978,137979],{"class":198}," method",[186,137981,529],{"class":202},[186,137983,137984],{"class":532},"\"post\"",[186,137986,552],{"class":202},[186,137988,137989,137991,137993,137995,137997,137999,138001,138003,138005,138007,138009,138012],{"class":188,"line":49},[186,137990,53591],{"class":202},[186,137992,55266],{"class":523},[186,137994,55269],{"class":198},[186,137996,529],{"class":202},[186,137998,64137],{"class":532},[186,138000,16382],{"class":198},[186,138002,529],{"class":202},[186,138004,137927],{"class":532},[186,138006,62461],{"class":198},[186,138008,529],{"class":202},[186,138010,138011],{"class":532},"\"用户名\"",[186,138013,552],{"class":202},[186,138015,138016,138018,138020,138022,138024,138027,138029,138031,138034,138036,138038,138041],{"class":188,"line":219},[186,138017,53591],{"class":202},[186,138019,55266],{"class":523},[186,138021,55269],{"class":198},[186,138023,529],{"class":202},[186,138025,138026],{"class":532},"\"password\"",[186,138028,16382],{"class":198},[186,138030,529],{"class":202},[186,138032,138033],{"class":532},"\"pwd\"",[186,138035,62461],{"class":198},[186,138037,529],{"class":202},[186,138039,138040],{"class":532},"\"密码\"",[186,138042,552],{"class":202},[186,138044,138045,138047,138049,138051,138053,138055,138058,138060],{"class":188,"line":225},[186,138046,53591],{"class":202},[186,138048,55332],{"class":523},[186,138050,55269],{"class":198},[186,138052,529],{"class":202},[186,138054,68085],{"class":532},[186,138056,138057],{"class":202},">提交\u003C\u002F",[186,138059,55332],{"class":523},[186,138061,552],{"class":202},[186,138063,138064,138066,138068],{"class":188,"line":242},[186,138065,1470],{"class":202},[186,138067,68062],{"class":523},[186,138069,552],{"class":202},[164,138071],{"style":166,"src":138072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[169,138074,138075],{},"value是表单域的内容",[169,138077,138078],{},"例子2：",[176,138080,138081],{"className":511,"code":137961,"language":513,"meta":181,"style":181},[183,138082,138083,138103,138129,138155,138173],{"__ignoreMap":181},[186,138084,138085,138087,138089,138091,138093,138095,138097,138099,138101],{"class":188,"line":189},[186,138086,520],{"class":202},[186,138088,68062],{"class":523},[186,138090,68065],{"class":198},[186,138092,529],{"class":202},[186,138094,137976],{"class":532},[186,138096,137979],{"class":198},[186,138098,529],{"class":202},[186,138100,137984],{"class":532},[186,138102,552],{"class":202},[186,138104,138105,138107,138109,138111,138113,138115,138117,138119,138121,138123,138125,138127],{"class":188,"line":49},[186,138106,53591],{"class":202},[186,138108,55266],{"class":523},[186,138110,55269],{"class":198},[186,138112,529],{"class":202},[186,138114,64137],{"class":532},[186,138116,16382],{"class":198},[186,138118,529],{"class":202},[186,138120,137927],{"class":532},[186,138122,62461],{"class":198},[186,138124,529],{"class":202},[186,138126,138011],{"class":532},[186,138128,552],{"class":202},[186,138130,138131,138133,138135,138137,138139,138141,138143,138145,138147,138149,138151,138153],{"class":188,"line":219},[186,138132,53591],{"class":202},[186,138134,55266],{"class":523},[186,138136,55269],{"class":198},[186,138138,529],{"class":202},[186,138140,138026],{"class":532},[186,138142,16382],{"class":198},[186,138144,529],{"class":202},[186,138146,138033],{"class":532},[186,138148,62461],{"class":198},[186,138150,529],{"class":202},[186,138152,138040],{"class":532},[186,138154,552],{"class":202},[186,138156,138157,138159,138161,138163,138165,138167,138169,138171],{"class":188,"line":225},[186,138158,53591],{"class":202},[186,138160,55332],{"class":523},[186,138162,55269],{"class":198},[186,138164,529],{"class":202},[186,138166,68085],{"class":532},[186,138168,138057],{"class":202},[186,138170,55332],{"class":523},[186,138172,552],{"class":202},[186,138174,138175,138177,138179],{"class":188,"line":242},[186,138176,1470],{"class":202},[186,138178,68062],{"class":523},[186,138180,552],{"class":202},[164,138182],{"style":166,"src":138183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138185,138187],{"id":138186},"_142-css新特性","14.2 CSS新特性",[29,138189,138191],{"id":138190},"_1421-新增选择器","14.2.1 新增选择器",[23459,138193,138195],{"id":138194},"_14211-属性选择器","14.2.1.1 属性选择器",[164,138197],{"style":166,"src":138198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[176,138200,138202],{"className":178,"code":138201,"language":180,"meta":181,"style":181},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[183,138203,138204,138219,138235],{"__ignoreMap":181},[186,138205,138206,138208,138210,138212,138214,138216],{"class":188,"line":189},[186,138207,55266],{"class":523},[186,138209,2498],{"class":202},[186,138211,104538],{"class":198},[186,138213,529],{"class":669},[186,138215,64137],{"class":532},[186,138217,138218],{"class":202},"] {\n",[186,138220,138221,138223,138225,138227,138229,138231,138233],{"class":188,"line":49},[186,138222,72330],{"class":206},[186,138224,210],{"class":202},[186,138226,1829],{"class":206},[186,138228,804],{"class":669},[186,138230,52971],{"class":206},[186,138232,131552],{"class":206},[186,138234,634],{"class":202},[186,138236,138237],{"class":188,"line":219},[186,138238,639],{"class":202},[164,138240],{"style":166,"src":138241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[169,138243,1652],{},[19,138245,138246,138249,138252,138255],{},[22,138247,138248],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[22,138250,138251],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[22,138253,138254],{},"属性选择器也可以选择出来自定义的属性",[22,138256,138257,138259],{},[54,138258,10488],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23459,138261,138263],{"id":138262},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[164,138265],{"style":166,"src":138266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[34,138268,138269],{},[22,138270,138271],{},"fist-child",[176,138273,138275],{"className":178,"code":138274,"language":180,"meta":181,"style":181},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[183,138276,138277,138282,138297,138317,138335],{"__ignoreMap":181},[186,138278,138279],{"class":188,"line":189},[186,138280,138281],{"class":192},"\u002F* 属性选择器 *\u002F\n",[186,138283,138284,138286,138288,138290,138292,138294],{"class":188,"line":49},[186,138285,55266],{"class":523},[186,138287,2498],{"class":202},[186,138289,104538],{"class":198},[186,138291,529],{"class":669},[186,138293,64137],{"class":532},[186,138295,138296],{"class":202},"] { }\n",[186,138298,138299,138301,138303,138305,138308,138311,138314],{"class":188,"line":219},[186,138300,55266],{"class":523},[186,138302,2498],{"class":202},[186,138304,16156],{"class":198},[186,138306,138307],{"class":669},"^=",[186,138309,138310],{"class":532},"\"icon\"",[186,138312,138313],{"class":202},"] { }  ",[186,138315,138316],{"class":192},"\u002F* 以 icon 开头 *\u002F\n",[186,138318,138319,138321,138323,138325,138328,138330,138332],{"class":188,"line":225},[186,138320,55266],{"class":523},[186,138322,2498],{"class":202},[186,138324,16156],{"class":198},[186,138326,138327],{"class":669},"$=",[186,138329,138310],{"class":532},[186,138331,138313],{"class":202},[186,138333,138334],{"class":192},"\u002F* 以 icon 结尾 *\u002F\n",[186,138336,138337,138339,138341,138343,138346,138348,138350],{"class":188,"line":242},[186,138338,55266],{"class":523},[186,138340,2498],{"class":202},[186,138342,16156],{"class":198},[186,138344,138345],{"class":669},"*=",[186,138347,138310],{"class":532},[186,138349,138313],{"class":202},[186,138351,138352],{"class":192},"\u002F* 包含 icon *\u002F\n",[169,138354,138355],{},"ul的第一个儿子文本为红色",[169,138357,138358],{},"一定要在冒号前加空格，不然就是选中所有的了",[176,138360,138362],{"className":178,"code":138361,"language":180,"meta":181,"style":181},".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",[183,138363,138364,138370,138380,138384,138388,138393,138406,138419,138435,138452,138469],{"__ignoreMap":181},[186,138365,138366,138368],{"class":188,"line":189},[186,138367,128271],{"class":198},[186,138369,622],{"class":202},[186,138371,138372,138374,138376,138378],{"class":188,"line":49},[186,138373,72339],{"class":206},[186,138375,210],{"class":202},[186,138377,58862],{"class":206},[186,138379,634],{"class":202},[186,138381,138382],{"class":188,"line":219},[186,138383,639],{"class":202},[186,138385,138386],{"class":188,"line":225},[186,138387,137210],{"class":202},[186,138389,138390],{"class":188,"line":242},[186,138391,138392],{"class":192},"\u002F* 结构伪类选择器 *\u002F\n",[186,138394,138395,138397,138400,138403],{"class":188,"line":248},[186,138396,22],{"class":523},[186,138398,138399],{"class":198},":first-child",[186,138401,138402],{"class":202}," { }           ",[186,138404,138405],{"class":192},"\u002F* 第一个 *\u002F\n",[186,138407,138408,138410,138413,138416],{"class":188,"line":265},[186,138409,22],{"class":523},[186,138411,138412],{"class":198},":last-child",[186,138414,138415],{"class":202}," { }            ",[186,138417,138418],{"class":192},"\u002F* 最后一个 *\u002F\n",[186,138420,138421,138423,138425,138427,138429,138432],{"class":188,"line":271},[186,138422,22],{"class":523},[186,138424,130887],{"class":198},[186,138426,832],{"class":202},[186,138428,1697],{"class":206},[186,138430,138431],{"class":202},") { }          ",[186,138433,138434],{"class":192},"\u002F* 第2个 *\u002F\n",[186,138436,138437,138439,138441,138443,138446,138449],{"class":188,"line":288},[186,138438,22],{"class":523},[186,138440,130887],{"class":198},[186,138442,832],{"class":202},[186,138444,138445],{"class":206},"2n",[186,138447,138448],{"class":202},") { }         ",[186,138450,138451],{"class":192},"\u002F* 偶数 *\u002F\n",[186,138453,138454,138456,138458,138460,138463,138466],{"class":188,"line":294},[186,138455,22],{"class":523},[186,138457,130887],{"class":198},[186,138459,832],{"class":202},[186,138461,138462],{"class":206},"2n+1",[186,138464,138465],{"class":202},") { }       ",[186,138467,138468],{"class":192},"\u002F* 奇数 *\u002F\n",[186,138470,138471,138473,138475,138477,138480,138482],{"class":188,"line":1212},[186,138472,22],{"class":523},[186,138474,130887],{"class":198},[186,138476,832],{"class":202},[186,138478,138479],{"class":206},"-n+3",[186,138481,138465],{"class":202},[186,138483,138484],{"class":192},"\u002F* 前3个 *\u002F\n",[1450,138486,138489],{"className":138487},[138488],"example","\n  示例内容\n",[169,138491,138492],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[19,138494,138495],{},[22,138496,138497,138500],{},[183,138498,138499],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[169,138502,138503],{},"也就是说它选择的是熊大",[34,138505,138506],{"start":248},[22,138507,138508],{},"权重",[176,138510,138512],{"className":178,"code":138511,"language":180,"meta":181,"style":181},"\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",[183,138513,138514,138518,138528,138538,138552,138566,138580],{"__ignoreMap":181},[186,138515,138516],{"class":188,"line":189},[186,138517,138392],{"class":192},[186,138519,138520,138522,138524,138526],{"class":188,"line":49},[186,138521,22],{"class":523},[186,138523,138399],{"class":198},[186,138525,138402],{"class":202},[186,138527,138405],{"class":192},[186,138529,138530,138532,138534,138536],{"class":188,"line":219},[186,138531,22],{"class":523},[186,138533,138412],{"class":198},[186,138535,138415],{"class":202},[186,138537,138418],{"class":192},[186,138539,138540,138542,138544,138546,138548,138550],{"class":188,"line":225},[186,138541,22],{"class":523},[186,138543,130887],{"class":198},[186,138545,832],{"class":202},[186,138547,1697],{"class":206},[186,138549,138431],{"class":202},[186,138551,138434],{"class":192},[186,138553,138554,138556,138558,138560,138562,138564],{"class":188,"line":242},[186,138555,22],{"class":523},[186,138557,130887],{"class":198},[186,138559,832],{"class":202},[186,138561,138445],{"class":206},[186,138563,138448],{"class":202},[186,138565,138451],{"class":192},[186,138567,138568,138570,138572,138574,138576,138578],{"class":188,"line":248},[186,138569,22],{"class":523},[186,138571,130887],{"class":198},[186,138573,832],{"class":202},[186,138575,138462],{"class":206},[186,138577,138465],{"class":202},[186,138579,138468],{"class":192},[186,138581,138582,138584,138586,138588,138590,138592],{"class":188,"line":265},[186,138583,22],{"class":523},[186,138585,130887],{"class":198},[186,138587,832],{"class":202},[186,138589,138479],{"class":206},[186,138591,138465],{"class":202},[186,138593,138484],{"class":192},[169,138595,138596],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23459,138598,138600],{"id":138599},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[169,138602,138603],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[164,138605],{"style":166,"src":138606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[34,138608,138609],{},[22,138610,1652],{},[19,138612,138613,138616,138619,138622,138625,138628],{},[22,138614,138615],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[22,138617,138618],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[22,138620,138621],{},"语法： element::before {}",[22,138623,138624],{},"before 和 after 必须有 content 属性",[22,138626,138627],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[22,138629,138630],{},"伪元素选择器和标签选择器一样，权重为 1",[34,138632,138633],{"start":49},[22,138634,138635],{},"实例",[176,138637,138638],{"className":178,"code":138511,"language":180,"meta":181,"style":181},[183,138639,138640,138644,138654,138664,138678,138692,138706],{"__ignoreMap":181},[186,138641,138642],{"class":188,"line":189},[186,138643,138392],{"class":192},[186,138645,138646,138648,138650,138652],{"class":188,"line":49},[186,138647,22],{"class":523},[186,138649,138399],{"class":198},[186,138651,138402],{"class":202},[186,138653,138405],{"class":192},[186,138655,138656,138658,138660,138662],{"class":188,"line":219},[186,138657,22],{"class":523},[186,138659,138412],{"class":198},[186,138661,138415],{"class":202},[186,138663,138418],{"class":192},[186,138665,138666,138668,138670,138672,138674,138676],{"class":188,"line":225},[186,138667,22],{"class":523},[186,138669,130887],{"class":198},[186,138671,832],{"class":202},[186,138673,1697],{"class":206},[186,138675,138431],{"class":202},[186,138677,138434],{"class":192},[186,138679,138680,138682,138684,138686,138688,138690],{"class":188,"line":242},[186,138681,22],{"class":523},[186,138683,130887],{"class":198},[186,138685,832],{"class":202},[186,138687,138445],{"class":206},[186,138689,138448],{"class":202},[186,138691,138451],{"class":192},[186,138693,138694,138696,138698,138700,138702,138704],{"class":188,"line":248},[186,138695,22],{"class":523},[186,138697,130887],{"class":198},[186,138699,832],{"class":202},[186,138701,138462],{"class":206},[186,138703,138465],{"class":202},[186,138705,138468],{"class":192},[186,138707,138708,138710,138712,138714,138716,138718],{"class":188,"line":265},[186,138709,22],{"class":523},[186,138711,130887],{"class":198},[186,138713,832],{"class":202},[186,138715,138479],{"class":206},[186,138717,138465],{"class":202},[186,138719,138484],{"class":192},[164,138721],{"style":166,"src":138722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[34,138724,138725],{"start":219},[22,138726,138727],{},"使用场景1",[164,138729],{"style":166,"src":138730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[169,138732,138733],{},"不需要再加盒子来整红色那部分了",[176,138735,138737],{"className":178,"code":138736,"language":180,"meta":181,"style":181},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[183,138738,138739,138744,138753,138764,138774,138778,138787,138798,138808],{"__ignoreMap":181},[186,138740,138741],{"class":188,"line":189},[186,138742,138743],{"class":192},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[186,138745,138746,138748,138751],{"class":188,"line":49},[186,138747,1450],{"class":523},[186,138749,138750],{"class":198},"::before",[186,138752,622],{"class":202},[186,138754,138755,138758,138760,138762],{"class":188,"line":219},[186,138756,138757],{"class":206},"  content",[186,138759,210],{"class":202},[186,138761,9115],{"class":532},[186,138763,634],{"class":202},[186,138765,138766,138768,138770,138772],{"class":188,"line":225},[186,138767,129592],{"class":206},[186,138769,210],{"class":202},[186,138771,62310],{"class":206},[186,138773,634],{"class":202},[186,138775,138776],{"class":188,"line":242},[186,138777,639],{"class":202},[186,138779,138780,138782,138785],{"class":188,"line":248},[186,138781,1450],{"class":523},[186,138783,138784],{"class":198},"::after",[186,138786,622],{"class":202},[186,138788,138789,138791,138793,138796],{"class":188,"line":265},[186,138790,138757],{"class":206},[186,138792,210],{"class":202},[186,138794,138795],{"class":532},"\"→\"",[186,138797,634],{"class":202},[186,138799,138800,138802,138804,138806],{"class":188,"line":271},[186,138801,72339],{"class":206},[186,138803,210],{"class":202},[186,138805,63508],{"class":206},[186,138807,634],{"class":202},[186,138809,138810],{"class":188,"line":288},[186,138811,639],{"class":202},[164,138813],{"style":166,"src":138814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[169,138816,138817],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[164,138819],{"style":166,"src":138820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[169,138822,138823],{},"但是在引用时需要先转义一下",[169,138825,138826],{},"content='\\e930'",[34,138828,138829],{"start":225},[22,138830,138831],{},"使用场景2",[169,138833,138834],{},"仿土豆效果",[169,138836,138837],{},"通过使用伪元素选择器可以减少body中盒子的数量",[176,138839,138840],{"className":178,"code":138736,"language":180,"meta":181,"style":181},[183,138841,138842,138846,138854,138864,138874,138878,138886,138896,138906],{"__ignoreMap":181},[186,138843,138844],{"class":188,"line":189},[186,138845,138743],{"class":192},[186,138847,138848,138850,138852],{"class":188,"line":49},[186,138849,1450],{"class":523},[186,138851,138750],{"class":198},[186,138853,622],{"class":202},[186,138855,138856,138858,138860,138862],{"class":188,"line":219},[186,138857,138757],{"class":206},[186,138859,210],{"class":202},[186,138861,9115],{"class":532},[186,138863,634],{"class":202},[186,138865,138866,138868,138870,138872],{"class":188,"line":225},[186,138867,129592],{"class":206},[186,138869,210],{"class":202},[186,138871,62310],{"class":206},[186,138873,634],{"class":202},[186,138875,138876],{"class":188,"line":242},[186,138877,639],{"class":202},[186,138879,138880,138882,138884],{"class":188,"line":248},[186,138881,1450],{"class":523},[186,138883,138784],{"class":198},[186,138885,622],{"class":202},[186,138887,138888,138890,138892,138894],{"class":188,"line":265},[186,138889,138757],{"class":206},[186,138891,210],{"class":202},[186,138893,138795],{"class":532},[186,138895,634],{"class":202},[186,138897,138898,138900,138902,138904],{"class":188,"line":271},[186,138899,72339],{"class":206},[186,138901,210],{"class":202},[186,138903,63508],{"class":206},[186,138905,634],{"class":202},[186,138907,138908],{"class":188,"line":288},[186,138909,639],{"class":202},[164,138911],{"style":166,"src":138912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[34,138914,138915],{"start":242},[22,138916,138917],{},"使用场景3",[169,138919,138920],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[176,138922,138924],{"className":178,"code":138923,"language":180,"meta":181,"style":181},".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",[183,138925,138926,138932,138942,138946,138950,138954,138962,138972,138982,138986,138994,139004,139014],{"__ignoreMap":181},[186,138927,138928,138930],{"class":188,"line":189},[186,138929,131820],{"class":198},[186,138931,622],{"class":202},[186,138933,138934,138936,138938,138940],{"class":188,"line":49},[186,138935,132448],{"class":206},[186,138937,210],{"class":202},[186,138939,110],{"class":206},[186,138941,634],{"class":202},[186,138943,138944],{"class":188,"line":219},[186,138945,639],{"class":202},[186,138947,138948],{"class":188,"line":225},[186,138949,137210],{"class":202},[186,138951,138952],{"class":188,"line":242},[186,138953,138743],{"class":192},[186,138955,138956,138958,138960],{"class":188,"line":248},[186,138957,1450],{"class":523},[186,138959,138750],{"class":198},[186,138961,622],{"class":202},[186,138963,138964,138966,138968,138970],{"class":188,"line":265},[186,138965,138757],{"class":206},[186,138967,210],{"class":202},[186,138969,9115],{"class":532},[186,138971,634],{"class":202},[186,138973,138974,138976,138978,138980],{"class":188,"line":271},[186,138975,129592],{"class":206},[186,138977,210],{"class":202},[186,138979,62310],{"class":206},[186,138981,634],{"class":202},[186,138983,138984],{"class":188,"line":288},[186,138985,639],{"class":202},[186,138987,138988,138990,138992],{"class":188,"line":294},[186,138989,1450],{"class":523},[186,138991,138784],{"class":198},[186,138993,622],{"class":202},[186,138995,138996,138998,139000,139002],{"class":188,"line":1212},[186,138997,138757],{"class":206},[186,138999,210],{"class":202},[186,139001,138795],{"class":532},[186,139003,634],{"class":202},[186,139005,139006,139008,139010,139012],{"class":188,"line":1223},[186,139007,72339],{"class":206},[186,139009,210],{"class":202},[186,139011,63508],{"class":206},[186,139013,634],{"class":202},[186,139015,139016],{"class":188,"line":1236},[186,139017,639],{"class":202},[169,139019,139020],{},"div {\nmargin: 0 auto;\n}",[176,139022,139025],{"className":139023,"code":139024,"language":753},[751],"\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",[183,139026,139024],{"__ignoreMap":181},[169,139028,139029],{},"如果想让多个元素都发生变化",[169,139031,139032],{},"不能如下操作：",[169,139034,139035],{},"transition: width 2s ease 0.5s;",[169,139037,139038],{},"transition: height 2s ease 0.5s;不对！！！",[169,139040,139041],{},"上方会样式冲突，导致不显示任何过渡效果",[169,139043,139044],{},"使用如下：加逗号隔开",[169,139046,139047],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[169,139049,139050],{},"transition all 2s ease;",[29,139052,139054],{"id":139053},"_1426-过渡练习","14.2.6 过渡练习",[34,139056,139057],{},[22,139058,139059],{},"进度条",[164,139061],{"style":166,"src":139062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[176,139064,139066],{"className":178,"code":139065,"language":180,"meta":181,"style":181},"div {\n  transition: all 0.3s ease;\n}\n",[183,139067,139068,139074,139092],{"__ignoreMap":181},[186,139069,139070,139072],{"class":188,"line":189},[186,139071,1450],{"class":523},[186,139073,622],{"class":202},[186,139075,139076,139079,139081,139083,139086,139088,139090],{"class":188,"line":49},[186,139077,139078],{"class":206},"  transition",[186,139080,210],{"class":202},[186,139082,29577],{"class":206},[186,139084,139085],{"class":206}," 0.3",[186,139087,2304],{"class":669},[186,139089,80113],{"class":206},[186,139091,634],{"class":202},[186,139093,139094],{"class":188,"line":219},[186,139095,639],{"class":202},[34,139097,139098],{"start":49},[22,139099,139100],{},"小米logo",[169,139102,139103],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[176,139105,139107],{"className":178,"code":139106,"language":180,"meta":181,"style":181},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[183,139108,139109,139114,139120,139136,139141],{"__ignoreMap":181},[186,139110,139111],{"class":188,"line":189},[186,139112,139113],{"class":192},"\u002F* CSS3 过渡 *\u002F\n",[186,139115,139116,139118],{"class":188,"line":49},[186,139117,1450],{"class":523},[186,139119,622],{"class":202},[186,139121,139122,139124,139126,139128,139130,139132,139134],{"class":188,"line":219},[186,139123,139078],{"class":206},[186,139125,210],{"class":202},[186,139127,29577],{"class":206},[186,139129,139085],{"class":206},[186,139131,2304],{"class":669},[186,139133,80113],{"class":206},[186,139135,634],{"class":202},[186,139137,139138],{"class":188,"line":225},[186,139139,139140],{"class":192},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[186,139142,139143],{"class":188,"line":242},[186,139144,639],{"class":202},[169,139146,139147],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1524,139149,139150],{},"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":181,"searchDepth":49,"depth":49,"links":139152},[139153,139158],{"id":137483,"depth":49,"text":137484,"children":139154},[139155,139156,139157],{"id":137487,"depth":219,"text":137488},{"id":137564,"depth":219,"text":137565},{"id":137895,"depth":219,"text":137896},{"id":138186,"depth":49,"text":138187,"children":139159},[139160,139161],{"id":138190,"depth":219,"text":138191},{"id":139053,"depth":219,"text":139054},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137475,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139168,"title":139169,"body":139170,"description":1548,"extension":1549,"meta":140914,"navigation":1551,"path":140915,"seo":140916,"stem":140917,"__hash__":140918},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139171,"toc":140895},[139172,139175,139179,139182,139188,139194,139198,139200,139203,139206,139209,139212,139215,139218,139221,139225,139229,139232,139235,139238,139242,139245,139248,139253,139256,139259,139262,139266,139269,139278,139281,139284,139288,139291,139294,139299,139306,139320,139328,139335,139340,139343,139346,139349,139356,139360,139366,139372,139375,139378,139383,139389,139391,139399,139404,139407,139413,139415,139420,139425,139428,139430,139435,139438,139443,139448,139482,139486,139490,139493,139497,139500,139586,139589,139626,139629,139665,139669,139674,139687,139741,139743,139771,139773,139801,139807,139821,139823,139867,139869,139913,139916,139923,139934,139936,139963,139965,139991,139998,140014,140016,140110,140112,140206,140213,140216,140221,140227,140301,140304,140306,140342,140344,140380,140383,140390,140409,140412,140415,140417,140442,140444,140468,140471,140474,140504,140508,140511,140574,140576,140642,140644,140708,140711,140743,140745,140771,140773,140799,140802,140833,140835,140861,140863,140889,140892],[10,139173,139169],{"id":139174},"_15-品优购项目上篇-搭建与公共模块",[14,139176,139178],{"id":139177},"_151-项目规划","15.1 项目规划",[164,139180],{"style":166,"src":139181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[169,139183,139184,139187],{},[54,139185,139186],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[169,139189,139190,139193],{},[54,139191,139192],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139195,139197],{"id":139196},"_152-项目介绍","15.2 项目介绍",[169,139199,139186],{},[164,139201],{"style":166,"src":139202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[169,139204,139205],{},"主页：",[164,139207],{"style":166,"src":139208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[169,139210,139211],{},"列表页：",[164,139213],{"style":166,"src":139214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[169,139216,139217],{},"注册页：",[164,139219],{"style":166,"src":139220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139222,139224],{"id":139223},"_153-项目搭建工作","15.3 项目搭建工作",[29,139226,139228],{"id":139227},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[164,139230],{"style":166,"src":139231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[169,139233,139234],{},"经常更换的图片要放到upload文件夹中",[169,139236,139237],{},"不经常换的放到images文件夹中",[29,139239,139241],{"id":139240},"_1532-创建文件如下","15.3.2 创建文件如下",[164,139243],{"style":166,"src":139244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[164,139246],{"style":166,"src":139247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[169,139249,139250],{},[54,139251,139252],{},"初始化样式：",[169,139254,139255],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[169,139257,139258],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[169,139260,139261],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[29,139263,139265],{"id":139264},"_1533-项目模块化开发","15.3.3 项目模块化开发",[169,139267,139268],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[169,139270,139271,139272,139277],{},"这里最典型的应用就是 ",[54,139273,139274],{},[183,139275,139276],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[164,139279],{"style":166,"src":139280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[169,139282,139283],{},"通过link方法来引入",[29,139285,139287],{"id":139286},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[164,139289],{"style":166,"src":139290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[169,139292,139293],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[34,139295,139296],{},[22,139297,139298],{},"制作favicon图标",[169,139300,139301,139302,139305],{},"①把品优购图标切成 ",[183,139303,139304],{},"png"," 图片",[169,139307,139308,139309,139311,139312,139315,139316],{},"②把 ",[183,139310,139304],{}," 图片转换为 ",[183,139313,139314],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[948,139317,139318],{"href":139318,"rel":139319},"http:\u002F\u002Fwww.bitbug.net\u002F",[952],[34,139321,139322,139325],{"start":49},[22,139323,139324],{},"favicon图标放到网站根目录下",[22,139326,139327],{},"HTML页面引入favicon",[169,139329,139330,139331,139334],{},"在html 页面里面的 ",[183,139332,139333],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[169,139336,139337],{},[183,139338,139339],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[169,139341,139342],{},"复制这行代码或者在生成这个的网站进行复制",[164,139344],{"style":166,"src":139345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[169,139347,139348],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[169,139350,139351,139352],{},"例如:",[948,139353,139354],{"href":139354,"rel":139355},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[952],[29,139357,139359],{"id":139358},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[169,139361,139362,139365],{},[54,139363,139364],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[169,139367,139368,139371],{},[54,139369,139370],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[169,139373,139374],{},"页面必须有三个标签用来符合 SEO 优化",[164,139376],{"style":166,"src":139377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[34,139379,139380],{},[22,139381,139382],{},"title网站标题",[169,139384,139385,139388],{},[54,139386,139387],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[169,139390,70227],{},[19,139392,139393,139396],{},[22,139394,139395],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[22,139397,139398],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[34,139400,139401],{"start":49},[22,139402,139403],{},"description网站描述",[169,139405,139406],{},"简要说明我们网站主要是做什么的",[169,139408,139409,139412],{},[54,139410,139411],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[169,139414,70227],{},[169,139416,139417],{},[183,139418,139419],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[34,139421,139422],{"start":219},[22,139423,139424],{},"keywords关键词",[169,139426,139427],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[169,139429,70227],{},[169,139431,139432],{},[183,139433,139434],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[169,139436,139437],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[169,139439,139440],{},[54,139441,139442],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[34,139444,139445],{"start":225},[22,139446,139447],{},"代码总结",[176,139449,139450],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,139451,139452,139456,139470,139474],{"__ignoreMap":181},[186,139453,139454],{"class":188,"line":189},[186,139455,1443],{"class":192},[186,139457,139458,139460,139462,139464,139466,139468],{"class":188,"line":49},[186,139459,520],{"class":202},[186,139461,1450],{"class":523},[186,139463,1453],{"class":198},[186,139465,529],{"class":202},[186,139467,1458],{"class":532},[186,139469,552],{"class":202},[186,139471,139472],{"class":188,"line":219},[186,139473,1465],{"class":202},[186,139475,139476,139478,139480],{"class":188,"line":225},[186,139477,1470],{"class":202},[186,139479,1450],{"class":523},[186,139481,552],{"class":202},[14,139483,139485],{"id":139484},"_154-项目公共部分制作","15.4 项目公共部分制作",[29,139487,139489],{"id":139488},"_1541-常用模块类命名","15.4.1 常用模块类命名",[164,139491],{"style":166,"src":139492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[29,139494,139496],{"id":139495},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[169,139498,139499],{},"布局思路：",[19,139501,139502,139505,139508,139530,139563],{},[22,139503,139504],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[22,139506,139507],{},"里面包含版心的盒子",[22,139509,139510,139511],{},"版心盒子里面包含 1 号左侧盒子左浮动",[19,139512,139513,139521,139527],{},[22,139514,139515,139516,22961,139518,139520],{},"1 号盒子 里面包含一个",[183,139517,19],{},[183,139519,19],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[22,139522,139523,139524,139526],{},"里面的内容是水平排列，所以需要给",[183,139525,22],{},"设置浮动",[22,139528,139529],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[22,139531,139532,139533],{},"版心盒子里面包含 2 号右侧盒子右浮动",[19,139534,139535,139549,139554],{},[22,139536,139537,139538,22961,139540,139542,139543,139545,139546,139548],{},"2 号盒子 里面包含一个",[183,139539,19],{},[183,139541,19],{},"包裹",[183,139544,22],{},"，中间的",[183,139547,2528],{},"可以用样式去设置，也可以用字符 |",[22,139550,139551,139552,139526],{},"里面内容水平排列，给",[183,139553,22],{},[22,139555,139556,139557,139559,139560,139562],{},"找到里面所有偶数的 ",[183,139558,22],{}," 设置样式（偶数的 ",[183,139561,22],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[22,139564,139565,139566],{},"需要用到字体图标",[19,139567,139568,139574,139577,139580,139583],{},[22,139569,139570,139571],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[183,139572,139573],{},"arrow-icon",[22,139575,139576],{},"先要引入字体图片的资源",[22,139578,139579],{},"在样式里面利用 font-face 来进行声明",[22,139581,139582],{},"在伪元素的 content属性设置 图标的编码",[22,139584,139585],{},"给伪元素设置font-family属性",[169,139587,139588],{},"结构实例代码：",[176,139590,139592],{"className":178,"code":139591,"language":180,"meta":181,"style":181},"div::before {\n  content: \"\";\n  display: block;\n}\n",[183,139593,139594,139602,139612,139622],{"__ignoreMap":181},[186,139595,139596,139598,139600],{"class":188,"line":189},[186,139597,1450],{"class":523},[186,139599,138750],{"class":198},[186,139601,622],{"class":202},[186,139603,139604,139606,139608,139610],{"class":188,"line":49},[186,139605,138757],{"class":206},[186,139607,210],{"class":202},[186,139609,9115],{"class":532},[186,139611,634],{"class":202},[186,139613,139614,139616,139618,139620],{"class":188,"line":219},[186,139615,129592],{"class":206},[186,139617,210],{"class":202},[186,139619,62310],{"class":206},[186,139621,634],{"class":202},[186,139623,139624],{"class":188,"line":225},[186,139625,639],{"class":202},[169,139627,139628],{},"样式实例代码：",[176,139630,139631],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,139632,139633,139641,139651,139661],{"__ignoreMap":181},[186,139634,139635,139637,139639],{"class":188,"line":189},[186,139636,1450],{"class":523},[186,139638,138750],{"class":198},[186,139640,622],{"class":202},[186,139642,139643,139645,139647,139649],{"class":188,"line":49},[186,139644,138757],{"class":206},[186,139646,210],{"class":202},[186,139648,9115],{"class":532},[186,139650,634],{"class":202},[186,139652,139653,139655,139657,139659],{"class":188,"line":219},[186,139654,129592],{"class":206},[186,139656,210],{"class":202},[186,139658,62310],{"class":206},[186,139660,634],{"class":202},[186,139662,139663],{"class":188,"line":225},[186,139664,639],{"class":202},[29,139666,139668],{"id":139667},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[19,139670,139671],{},[22,139672,139673],{},"header 盒子必须要有高度",[169,139675,139676,139677,139679,139680],{},"1 号盒子是 ",[183,139678,132980],{}," 标志定位，在正常开发过程中， ",[54,139681,139682,139683,139686],{},"logo的布局其实是有讲究的，需要进行 ",[183,139684,139685],{},"logoSEO","的优化 （★★★）",[19,139688,139689,139697,139705,139732],{},[22,139690,139691,139693,139694,139696],{},[183,139692,132980],{}," 里面首先放一个 ",[183,139695,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[22,139698,139699,139701,139702,139704],{},[183,139700,10],{}," 里面再放一个链接，可以返回首页的，把 ",[183,139703,132980],{}," 的背景图片给链接即可",[22,139706,139707,139708],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[19,139709,139710,139725],{},[22,139711,139712,139713,139716,139717,139720,139721,139724],{},"方法1：",[183,139714,139715],{},"text-indent"," 移到盒子外面（",[183,139718,139719],{},"text-indent: -9999px",") ，然后 ",[183,139722,139723],{},"overflow:hidden"," ，淘宝的做法",[22,139726,139727,139728,139731],{},"方法2：直接给 ",[183,139729,139730],{},"font-size: 0;"," 就看不到文字了，京东的做法",[22,139733,139734,139735,139737,139738,139740],{},"最后给链接一个 ",[183,139736,52859],{}," 属性，这样鼠标放到 ",[183,139739,132980],{}," 上就可以看到提示文字了",[169,139742,139588],{},[176,139744,139745],{"className":511,"code":133201,"language":513,"meta":181,"style":181},[183,139746,139747],{"__ignoreMap":181},[186,139748,139749,139751,139753,139755,139757,139759,139761,139763,139765,139767,139769],{"class":188,"line":189},[186,139750,520],{"class":202},[186,139752,948],{"class":523},[186,139754,62498],{"class":198},[186,139756,529],{"class":202},[186,139758,133216],{"class":532},[186,139760,133219],{"class":198},[186,139762,529],{"class":202},[186,139764,133224],{"class":532},[186,139766,133227],{"class":202},[186,139768,948],{"class":523},[186,139770,552],{"class":202},[169,139772,139628],{},[176,139774,139775],{"className":511,"code":133201,"language":513,"meta":181,"style":181},[183,139776,139777],{"__ignoreMap":181},[186,139778,139779,139781,139783,139785,139787,139789,139791,139793,139795,139797,139799],{"class":188,"line":189},[186,139780,520],{"class":202},[186,139782,948],{"class":523},[186,139784,62498],{"class":198},[186,139786,529],{"class":202},[186,139788,133216],{"class":532},[186,139790,133219],{"class":198},[186,139792,529],{"class":202},[186,139794,133224],{"class":532},[186,139796,133227],{"class":202},[186,139798,948],{"class":523},[186,139800,552],{"class":202},[169,139802,139803,139804,139806],{},"2 号盒子是 ",[183,139805,132993],{}," 搜索模块定位",[19,139808,139809,139812,139815,139818],{},[22,139810,139811],{},"search盒子利用定位的方式放在对应的位置",[22,139813,139814],{},"search盒子设置绝对定位，header盒子设置相对定位",[22,139816,139817],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[22,139819,139820],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[169,139822,139588],{},[176,139824,139825],{"className":178,"code":133288,"language":180,"meta":181,"style":181},[183,139826,139827,139849,139853,139863],{"__ignoreMap":181},[186,139828,139829,139831,139833,139835,139837,139839,139841,139843,139845,139847],{"class":188,"line":189},[186,139830,1450],{"class":523},[186,139832,13898],{"class":202},[186,139834,169],{"class":523},[186,139836,13898],{"class":202},[186,139838,10],{"class":523},[186,139840,13898],{"class":202},[186,139842,19],{"class":523},[186,139844,13898],{"class":202},[186,139846,22],{"class":523},[186,139848,622],{"class":202},[186,139850,139851],{"class":188,"line":49},[186,139852,133317],{"class":192},[186,139854,139855,139857,139859,139861],{"class":188,"line":219},[186,139856,129592],{"class":206},[186,139858,210],{"class":202},[186,139860,62310],{"class":206},[186,139862,634],{"class":202},[186,139864,139865],{"class":188,"line":225},[186,139866,639],{"class":202},[169,139868,139628],{},[176,139870,139871],{"className":178,"code":133288,"language":180,"meta":181,"style":181},[183,139872,139873,139895,139899,139909],{"__ignoreMap":181},[186,139874,139875,139877,139879,139881,139883,139885,139887,139889,139891,139893],{"class":188,"line":189},[186,139876,1450],{"class":523},[186,139878,13898],{"class":202},[186,139880,169],{"class":523},[186,139882,13898],{"class":202},[186,139884,10],{"class":523},[186,139886,13898],{"class":202},[186,139888,19],{"class":523},[186,139890,13898],{"class":202},[186,139892,22],{"class":523},[186,139894,622],{"class":202},[186,139896,139897],{"class":188,"line":49},[186,139898,133317],{"class":192},[186,139900,139901,139903,139905,139907],{"class":188,"line":219},[186,139902,129592],{"class":206},[186,139904,210],{"class":202},[186,139906,62310],{"class":206},[186,139908,634],{"class":202},[186,139910,139911],{"class":188,"line":225},[186,139912,639],{"class":202},[169,139914,139915],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[169,139917,139918,139919,139922],{},"3 号盒子是 ",[183,139920,139921],{},"hotwords"," 热词模块定位",[19,139924,139925,139928,139931],{},[22,139926,139927],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[22,139929,139930],{},"给里面所有的a标签设置 左右10px的外边距",[22,139932,139933],{},"给第一个a标签设置文字变红色（#c81623）",[169,139935,139588],{},[176,139937,139939],{"className":178,"code":139938,"language":180,"meta":181,"style":181},"div {\n  margin: 0 auto;\n}\n",[183,139940,139941,139947,139959],{"__ignoreMap":181},[186,139942,139943,139945],{"class":188,"line":189},[186,139944,1450],{"class":523},[186,139946,622],{"class":202},[186,139948,139949,139951,139953,139955,139957],{"class":188,"line":49},[186,139950,71907],{"class":206},[186,139952,210],{"class":202},[186,139954,1803],{"class":206},[186,139956,53006],{"class":206},[186,139958,634],{"class":202},[186,139960,139961],{"class":188,"line":219},[186,139962,639],{"class":202},[169,139964,139628],{},[176,139966,139967],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,139968,139969,139975,139987],{"__ignoreMap":181},[186,139970,139971,139973],{"class":188,"line":189},[186,139972,1450],{"class":523},[186,139974,622],{"class":202},[186,139976,139977,139979,139981,139983,139985],{"class":188,"line":49},[186,139978,71907],{"class":206},[186,139980,210],{"class":202},[186,139982,1803],{"class":206},[186,139984,53006],{"class":206},[186,139986,634],{"class":202},[186,139988,139989],{"class":188,"line":219},[186,139990,639],{"class":202},[169,139992,139993,139994,139997],{},"4 号盒子是 ",[183,139995,139996],{},"shopcar"," 购物车模块",[19,139999,140000,140005,140008,140011],{},[22,140001,124766,140002,140004],{},[183,140003,139996],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[22,140006,140007],{},"count 统计部分用绝对定位做",[22,140009,140010],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[22,140012,140013],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[169,140015,139588],{},[176,140017,140018],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,140019,140020,140024,140038,140042,140056,140060,140074,140078,140092,140096],{"__ignoreMap":181},[186,140021,140022],{"class":188,"line":189},[186,140023,193],{"class":192},[186,140025,140026,140028,140030,140032,140034,140036],{"class":188,"line":49},[186,140027,199],{"class":198},[186,140029,203],{"class":202},[186,140031,207],{"class":206},[186,140033,210],{"class":202},[186,140035,213],{"class":206},[186,140037,216],{"class":202},[186,140039,140040],{"class":188,"line":219},[186,140041,222],{"class":192},[186,140043,140044,140046,140048,140050,140052,140054],{"class":188,"line":225},[186,140045,228],{"class":198},[186,140047,203],{"class":202},[186,140049,207],{"class":206},[186,140051,210],{"class":202},[186,140053,237],{"class":206},[186,140055,216],{"class":202},[186,140057,140058],{"class":188,"line":242},[186,140059,245],{"class":192},[186,140061,140062,140064,140066,140068,140070,140072],{"class":188,"line":248},[186,140063,251],{"class":198},[186,140065,203],{"class":202},[186,140067,207],{"class":206},[186,140069,210],{"class":202},[186,140071,260],{"class":206},[186,140073,216],{"class":202},[186,140075,140076],{"class":188,"line":265},[186,140077,268],{"class":192},[186,140079,140080,140082,140084,140086,140088,140090],{"class":188,"line":271},[186,140081,274],{"class":198},[186,140083,203],{"class":202},[186,140085,207],{"class":206},[186,140087,210],{"class":202},[186,140089,283],{"class":206},[186,140091,216],{"class":202},[186,140093,140094],{"class":188,"line":288},[186,140095,291],{"class":192},[186,140097,140098,140100,140102,140104,140106,140108],{"class":188,"line":294},[186,140099,297],{"class":198},[186,140101,203],{"class":202},[186,140103,207],{"class":206},[186,140105,210],{"class":202},[186,140107,306],{"class":206},[186,140109,216],{"class":202},[169,140111,139628],{},[176,140113,140114],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,140115,140116,140120,140134,140138,140152,140156,140170,140174,140188,140192],{"__ignoreMap":181},[186,140117,140118],{"class":188,"line":189},[186,140119,193],{"class":192},[186,140121,140122,140124,140126,140128,140130,140132],{"class":188,"line":49},[186,140123,199],{"class":198},[186,140125,203],{"class":202},[186,140127,207],{"class":206},[186,140129,210],{"class":202},[186,140131,213],{"class":206},[186,140133,216],{"class":202},[186,140135,140136],{"class":188,"line":219},[186,140137,222],{"class":192},[186,140139,140140,140142,140144,140146,140148,140150],{"class":188,"line":225},[186,140141,228],{"class":198},[186,140143,203],{"class":202},[186,140145,207],{"class":206},[186,140147,210],{"class":202},[186,140149,237],{"class":206},[186,140151,216],{"class":202},[186,140153,140154],{"class":188,"line":242},[186,140155,245],{"class":192},[186,140157,140158,140160,140162,140164,140166,140168],{"class":188,"line":248},[186,140159,251],{"class":198},[186,140161,203],{"class":202},[186,140163,207],{"class":206},[186,140165,210],{"class":202},[186,140167,260],{"class":206},[186,140169,216],{"class":202},[186,140171,140172],{"class":188,"line":265},[186,140173,268],{"class":192},[186,140175,140176,140178,140180,140182,140184,140186],{"class":188,"line":271},[186,140177,274],{"class":198},[186,140179,203],{"class":202},[186,140181,207],{"class":206},[186,140183,210],{"class":202},[186,140185,283],{"class":206},[186,140187,216],{"class":202},[186,140189,140190],{"class":188,"line":288},[186,140191,291],{"class":192},[186,140193,140194,140196,140198,140200,140202,140204],{"class":188,"line":294},[186,140195,297],{"class":198},[186,140197,203],{"class":202},[186,140199,207],{"class":206},[186,140201,210],{"class":202},[186,140203,306],{"class":206},[186,140205,216],{"class":202},[29,140207,140209,140210,140212],{"id":140208},"_1544-nav导航模块制作","15.4.4 ",[183,140211,55159],{},"导航模块制作",[164,140214],{"style":166,"src":140215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[169,140217,140218,140220],{},[183,140219,55159],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[169,140222,140223,140224],{},"1 号盒子左侧浮动，",[183,140225,140226],{},"dropdown",[19,140228,140229,140239,140247,140253,140261,140271,140279,140290],{},[22,140230,140231,140232,102449,140235,140238],{},"1号盒子有讲究，根据相关性 里面包含 ",[183,140233,140234],{},".dt",[183,140236,140237],{},".dd"," 两个盒子",[22,140240,140241,140243,140244,140246],{},[183,140242,140234],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[183,140245,140237],{}," 挤到下面去了",[22,140248,140249,140250,140252],{},"给 ",[183,140251,140237],{}," 盒子设置宽度 和 高度，以及背景颜色",[22,140254,140249,140255,140257,140258,121668],{},[183,140256,140237],{}," 盒子里面定义 无序列表 （",[183,140259,140260],{},"ul > li > a",[22,140262,140263,140264,140266,140267,140270],{},"每个 ",[183,140265,22],{}," 都有一个高度（",[183,140268,140269],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[22,140272,140249,140273,140275,140276,121668],{},[183,140274,22],{}," 里面的a设置文字大小（",[183,140277,140278],{},"14px",[22,140280,140249,140281,140283,140284,140286,140287,140289],{},[183,140282,22],{}," 设置 ",[183,140285,129137],{},"，当鼠标移入的时候，让",[183,140288,22],{},"的背景变成白色，让里面的文字变成红色",[22,140291,140292,140294,140295,140297,140298,140300],{},[183,140293,22],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[183,140296,22],{},"的右侧，那么给",[183,140299,22],{},"设置相对定位",[169,140302,140303],{},"一定要注意相关性",[169,140305,139588],{},[176,140307,140308],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,140309,140310,140318,140328,140338],{"__ignoreMap":181},[186,140311,140312,140314,140316],{"class":188,"line":189},[186,140313,1450],{"class":523},[186,140315,138750],{"class":198},[186,140317,622],{"class":202},[186,140319,140320,140322,140324,140326],{"class":188,"line":49},[186,140321,138757],{"class":206},[186,140323,210],{"class":202},[186,140325,9115],{"class":532},[186,140327,634],{"class":202},[186,140329,140330,140332,140334,140336],{"class":188,"line":219},[186,140331,129592],{"class":206},[186,140333,210],{"class":202},[186,140335,62310],{"class":206},[186,140337,634],{"class":202},[186,140339,140340],{"class":188,"line":225},[186,140341,639],{"class":202},[169,140343,139628],{},[176,140345,140346],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,140347,140348,140356,140366,140376],{"__ignoreMap":181},[186,140349,140350,140352,140354],{"class":188,"line":189},[186,140351,1450],{"class":523},[186,140353,138750],{"class":198},[186,140355,622],{"class":202},[186,140357,140358,140360,140362,140364],{"class":188,"line":49},[186,140359,138757],{"class":206},[186,140361,210],{"class":202},[186,140363,9115],{"class":532},[186,140365,634],{"class":202},[186,140367,140368,140370,140372,140374],{"class":188,"line":219},[186,140369,129592],{"class":206},[186,140371,210],{"class":202},[186,140373,62310],{"class":206},[186,140375,634],{"class":202},[186,140377,140378],{"class":188,"line":225},[186,140379,639],{"class":202},[169,140381,140382],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[169,140384,140385,140386,140389],{},"2 号盒子左侧浮动，",[183,140387,140388],{},"navitems"," 导航栏组",[19,140391,140392,140397,140406],{},[22,140393,140394,140395],{},"里面结构是 ",[183,140396,140260],{},[22,140398,140399,140400,140402,140403,140405],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[183,140401,948],{},"左右的",[183,140404,32338],{},"把两侧撑开",[22,140407,140408],{},"让文字垂直居中（行高等于高度）",[164,140410],{"style":166,"src":140411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[169,140413,140414],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[169,140416,139588],{},[176,140418,140420],{"className":178,"code":140419,"language":180,"meta":181,"style":181},".box {\n  float: left;\n}\n",[183,140421,140422,140428,140438],{"__ignoreMap":181},[186,140423,140424,140426],{"class":188,"line":189},[186,140425,131820],{"class":198},[186,140427,622],{"class":202},[186,140429,140430,140432,140434,140436],{"class":188,"line":49},[186,140431,132448],{"class":206},[186,140433,210],{"class":202},[186,140435,110],{"class":206},[186,140437,634],{"class":202},[186,140439,140440],{"class":188,"line":219},[186,140441,639],{"class":202},[169,140443,139628],{},[176,140445,140446],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,140447,140448,140454,140464],{"__ignoreMap":181},[186,140449,140450,140452],{"class":188,"line":189},[186,140451,131820],{"class":198},[186,140453,622],{"class":202},[186,140455,140456,140458,140460,140462],{"class":188,"line":49},[186,140457,132448],{"class":206},[186,140459,210],{"class":202},[186,140461,110],{"class":206},[186,140463,634],{"class":202},[186,140465,140466],{"class":188,"line":219},[186,140467,639],{"class":202},[169,140469,140470],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[164,140472],{"style":166,"src":140473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[176,140475,140476],{"className":178,"code":132125,"language":180,"meta":181,"style":181},[183,140477,140478,140484,140500],{"__ignoreMap":181},[186,140479,140480,140482],{"class":188,"line":189},[186,140481,1450],{"class":523},[186,140483,622],{"class":202},[186,140485,140486,140488,140490,140492,140494,140496,140498],{"class":188,"line":49},[186,140487,72330],{"class":206},[186,140489,210],{"class":202},[186,140491,1829],{"class":206},[186,140493,804],{"class":669},[186,140495,52971],{"class":206},[186,140497,131364],{"class":206},[186,140499,634],{"class":202},[186,140501,140502],{"class":188,"line":219},[186,140503,639],{"class":202},[29,140505,140507],{"id":140506},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[164,140509],{"style":166,"src":140510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[19,140512,140513,140518,140523],{},[22,140514,140515,140517],{},[183,140516,133171],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[22,140519,140520,140522],{},[183,140521,133171],{}," 里面有一个大的版心",[22,140524,140525,140526,140529,140530],{},"版心里面包含 1 号盒子，",[183,140527,140528],{},"mod_service"," 是服务模块，mod 是模块的意思",[19,140531,140532,140537,140550,140566,140571],{},[22,140533,140249,140534,140536],{},[183,140535,140528],{}," 设置高度（80px）和下边框",[22,140538,140539,140540,140543,140544,140546,140547,140549],{},"在里面定义 ",[183,140541,140542],{},"ul > li"," ,每个",[183,140545,22],{}," 宽度是300px 高度是 50px，给每个",[183,140548,22],{},"设置35px的左内边距",[22,140551,140552,140553,140555,140556,140558,140559,140561,140562,19871,140564,121668],{},"在每个",[183,140554,22],{},"里面，放一个 ",[183,140557,24371],{},"（里面放图标），一个",[183,140560,1450],{},"（里面放",[183,140563,1450],{},[183,140565,169],{},[22,140567,140249,140568,140570],{},[183,140569,24371],{},"设置浮动，让h5与这个div左右排列",[22,140572,140573],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[169,140575,139588],{},[176,140577,140579],{"className":178,"code":140578,"language":180,"meta":181,"style":181},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[183,140580,140581,140587,140599,140611,140638],{"__ignoreMap":181},[186,140582,140583,140585],{"class":188,"line":189},[186,140584,789],{"class":198},[186,140586,622],{"class":202},[186,140588,140589,140591,140593,140595,140597],{"class":188,"line":49},[186,140590,796],{"class":206},[186,140592,210],{"class":202},[186,140594,801],{"class":206},[186,140596,804],{"class":669},[186,140598,634],{"class":202},[186,140600,140601,140603,140605,140607,140609],{"class":188,"line":219},[186,140602,811],{"class":206},[186,140604,210],{"class":202},[186,140606,801],{"class":206},[186,140608,804],{"class":669},[186,140610,634],{"class":202},[186,140612,140613,140615,140617,140619,140621,140623,140625,140627,140630,140632,140634,140636],{"class":188,"line":225},[186,140614,824],{"class":206},[186,140616,210],{"class":202},[186,140618,829],{"class":206},[186,140620,832],{"class":202},[186,140622,836],{"class":835},[186,140624,839],{"class":202},[186,140626,842],{"class":206},[186,140628,140629],{"class":206}," -10",[186,140631,804],{"class":669},[186,140633,859],{"class":206},[186,140635,804],{"class":669},[186,140637,634],{"class":202},[186,140639,140640],{"class":188,"line":242},[186,140641,639],{"class":202},[169,140643,139628],{},[176,140645,140646],{"className":178,"code":140578,"language":180,"meta":181,"style":181},[183,140647,140648,140654,140666,140678,140704],{"__ignoreMap":181},[186,140649,140650,140652],{"class":188,"line":189},[186,140651,789],{"class":198},[186,140653,622],{"class":202},[186,140655,140656,140658,140660,140662,140664],{"class":188,"line":49},[186,140657,796],{"class":206},[186,140659,210],{"class":202},[186,140661,801],{"class":206},[186,140663,804],{"class":669},[186,140665,634],{"class":202},[186,140667,140668,140670,140672,140674,140676],{"class":188,"line":219},[186,140669,811],{"class":206},[186,140671,210],{"class":202},[186,140673,801],{"class":206},[186,140675,804],{"class":669},[186,140677,634],{"class":202},[186,140679,140680,140682,140684,140686,140688,140690,140692,140694,140696,140698,140700,140702],{"class":188,"line":225},[186,140681,824],{"class":206},[186,140683,210],{"class":202},[186,140685,829],{"class":206},[186,140687,832],{"class":202},[186,140689,836],{"class":835},[186,140691,839],{"class":202},[186,140693,842],{"class":206},[186,140695,140629],{"class":206},[186,140697,804],{"class":669},[186,140699,859],{"class":206},[186,140701,804],{"class":669},[186,140703,634],{"class":202},[186,140705,140706],{"class":188,"line":242},[186,140707,639],{"class":202},[169,140709,140710],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[19,140712,140713,140716,140722,140728,140740],{},[22,140714,140715],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[22,140717,140718,140719,121668],{},"里面的布局利用 自定义列表来实现（",[183,140720,140721],{},"dl > dt + dd",[22,140723,140249,140724,140727],{},[183,140725,140726],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[22,140729,140249,140730,140733,140734,19871,140736,140739],{},[183,140731,140732],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[183,140735,140732],{},[183,140737,140738],{},"dd","之间有些距离",[22,140741,140742],{},"最后一个 dl 结构和样式不一样，需要单独设置",[169,140744,139588],{},[176,140746,140747],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,140748,140749,140755,140767],{"__ignoreMap":181},[186,140750,140751,140753],{"class":188,"line":189},[186,140752,1450],{"class":523},[186,140754,622],{"class":202},[186,140756,140757,140759,140761,140763,140765],{"class":188,"line":49},[186,140758,71907],{"class":206},[186,140760,210],{"class":202},[186,140762,1803],{"class":206},[186,140764,53006],{"class":206},[186,140766,634],{"class":202},[186,140768,140769],{"class":188,"line":219},[186,140770,639],{"class":202},[169,140772,139628],{},[176,140774,140775],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,140776,140777,140783,140795],{"__ignoreMap":181},[186,140778,140779,140781],{"class":188,"line":189},[186,140780,1450],{"class":523},[186,140782,622],{"class":202},[186,140784,140785,140787,140789,140791,140793],{"class":188,"line":49},[186,140786,71907],{"class":206},[186,140788,210],{"class":202},[186,140790,1803],{"class":206},[186,140792,53006],{"class":206},[186,140794,634],{"class":202},[186,140796,140797],{"class":188,"line":219},[186,140798,639],{"class":202},[169,140800,140801],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[19,140803,140804,140813,140816,140827],{},[22,140805,140806,140807,140809,140810,140812],{},"分为上下两块，上面是 ",[183,140808,133188],{}," 友情链接，下面是 ",[183,140811,133181],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[22,140814,140815],{},"把内容分别复制到相应模块中",[22,140817,140249,140818,140820,140821,140823,140824,140826],{},[183,140819,133188],{}," 设置 15px 的下外边距，给",[183,140822,133188],{}," 里面 的 ",[183,140825,948],{}," 标签设置 左右 3px 的外边距",[22,140828,140829,140830,140832],{},"给",[183,140831,133181],{}," 设置 20px 的行高",[169,140834,139588],{},[176,140836,140837],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,140838,140839,140845,140857],{"__ignoreMap":181},[186,140840,140841,140843],{"class":188,"line":189},[186,140842,1450],{"class":523},[186,140844,622],{"class":202},[186,140846,140847,140849,140851,140853,140855],{"class":188,"line":49},[186,140848,71907],{"class":206},[186,140850,210],{"class":202},[186,140852,1803],{"class":206},[186,140854,53006],{"class":206},[186,140856,634],{"class":202},[186,140858,140859],{"class":188,"line":219},[186,140860,639],{"class":202},[169,140862,139628],{},[176,140864,140865],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,140866,140867,140873,140885],{"__ignoreMap":181},[186,140868,140869,140871],{"class":188,"line":189},[186,140870,1450],{"class":523},[186,140872,622],{"class":202},[186,140874,140875,140877,140879,140881,140883],{"class":188,"line":49},[186,140876,71907],{"class":206},[186,140878,210],{"class":202},[186,140880,1803],{"class":206},[186,140882,53006],{"class":206},[186,140884,634],{"class":202},[186,140886,140887],{"class":188,"line":219},[186,140888,639],{"class":202},[169,140890,140891],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1524,140893,140894],{},"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":181,"searchDepth":49,"depth":49,"links":140896},[140897,140898,140899,140906],{"id":139177,"depth":49,"text":139178},{"id":139196,"depth":49,"text":139197},{"id":139223,"depth":49,"text":139224,"children":140900},[140901,140902,140903,140904,140905],{"id":139227,"depth":219,"text":139228},{"id":139240,"depth":219,"text":139241},{"id":139264,"depth":219,"text":139265},{"id":139286,"depth":219,"text":139287},{"id":139358,"depth":219,"text":139359},{"id":139484,"depth":49,"text":139485,"children":140907},[140908,140909,140910,140911,140913],{"id":139488,"depth":219,"text":139489},{"id":139495,"depth":219,"text":139496},{"id":139667,"depth":219,"text":139668},{"id":140208,"depth":219,"text":140912},"15.4.4 nav导航模块制作",{"id":140506,"depth":219,"text":140507},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139169,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140920,"title":140921,"body":140922,"description":1548,"extension":1549,"meta":143324,"navigation":1551,"path":143325,"seo":143326,"stem":143327,"__hash__":143328},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140923,"toc":143301},[140924,140927,140931,140935,140947,140950,140953,140956,140967,140969,140993,140995,141019,141024,141027,141029,141065,141067,141103,141106,141111,141114,141117,141120,141150,141157,141160,141170,141172,141206,141209,141243,141249,141266,141268,141304,141306,141342,141347,141372,141374,141400,141402,141426,141433,141436,141500,141502,141544,141546,141586,141593,141598,141600,141630,141632,141662,141666,141669,141676,141688,141690,141716,141718,141742,141745,141747,141771,141777,141787,141789,141819,141821,141851,141858,141899,141901,141937,141939,141975,141979,141982,141985,141988,141994,141999,142002,142025,142028,142052,142055,142079,142084,142087,142090,142093,142096,142099,142173,142175,142205,142207,142237,142240,142243,142275,142279,142283,142297,142306,142309,142314,142316,142410,142412,142506,142529,142531,142555,142557,142581,142588,142591,142601,142603,142627,142632,142640,142642,142672,142677,142717,142719,142745,142747,142773,142777,142780,142785,142788,142792,142800,142807,142815,142817,142847,142849,142879,142887,142890,142893,142895,142925,142927,142957,142960,142965,142967,142991,142993,143017,143020,143105,143107,143131,143133,143157,143161,143163,143187,143189,143223,143227,143241,143244,143249,143252,143257,143260,143290,143298],[10,140925,140921],{"id":140926},"_16-品优购项目下篇-主体与页面开发",[14,140928,140930],{"id":140929},"_161-项目主体模块制作","16.1 项目主体模块制作",[29,140932,140934],{"id":140933},"_1611-首页制作","16.1.1 首页制作",[169,140936,140937,140939,140940,140942,140943,140946],{},[54,140938,103489],{}," 主体模块是 ",[54,140941,75491],{}," 里面专有的，注意需要新的样式文件 ",[54,140944,140945],{},"index.css，"," 就不要写在common.css中了",[164,140948],{"style":166,"src":140949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[164,140951],{"style":166,"src":140952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[169,140954,140955],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[19,140957,140958,140961,140964],{},[22,140959,140960],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[22,140962,140963],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[22,140965,140966],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[169,140968,139588],{},[176,140970,140971],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,140972,140973,140979,140989],{"__ignoreMap":181},[186,140974,140975,140977],{"class":188,"line":189},[186,140976,131820],{"class":198},[186,140978,622],{"class":202},[186,140980,140981,140983,140985,140987],{"class":188,"line":49},[186,140982,132448],{"class":206},[186,140984,210],{"class":202},[186,140986,110],{"class":206},[186,140988,634],{"class":202},[186,140990,140991],{"class":188,"line":219},[186,140992,639],{"class":202},[169,140994,139628],{},[176,140996,140997],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,140998,140999,141005,141015],{"__ignoreMap":181},[186,141000,141001,141003],{"class":188,"line":189},[186,141002,131820],{"class":198},[186,141004,622],{"class":202},[186,141006,141007,141009,141011,141013],{"class":188,"line":49},[186,141008,132448],{"class":206},[186,141010,210],{"class":202},[186,141012,110],{"class":206},[186,141014,634],{"class":202},[186,141016,141017],{"class":188,"line":219},[186,141018,639],{"class":202},[34,141020,141021],{},[22,141022,141023],{},"左侧focus模块制作",[164,141025],{"style":166,"src":141026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[169,141028,139588],{},[176,141030,141031],{"className":178,"code":129299,"language":180,"meta":181,"style":181},[183,141032,141033,141041,141051,141061],{"__ignoreMap":181},[186,141034,141035,141037,141039],{"class":188,"line":189},[186,141036,55266],{"class":523},[186,141038,63338],{"class":198},[186,141040,622],{"class":202},[186,141042,141043,141045,141047,141049],{"class":188,"line":49},[186,141044,129314],{"class":206},[186,141046,210],{"class":202},[186,141048,56332],{"class":206},[186,141050,634],{"class":202},[186,141052,141053,141055,141057,141059],{"class":188,"line":219},[186,141054,72232],{"class":206},[186,141056,210],{"class":202},[186,141058,56182],{"class":206},[186,141060,634],{"class":202},[186,141062,141063],{"class":188,"line":225},[186,141064,639],{"class":202},[169,141066,139628],{},[176,141068,141069],{"className":178,"code":129299,"language":180,"meta":181,"style":181},[183,141070,141071,141079,141089,141099],{"__ignoreMap":181},[186,141072,141073,141075,141077],{"class":188,"line":189},[186,141074,55266],{"class":523},[186,141076,63338],{"class":198},[186,141078,622],{"class":202},[186,141080,141081,141083,141085,141087],{"class":188,"line":49},[186,141082,129314],{"class":206},[186,141084,210],{"class":202},[186,141086,56332],{"class":206},[186,141088,634],{"class":202},[186,141090,141091,141093,141095,141097],{"class":188,"line":219},[186,141092,72232],{"class":206},[186,141094,210],{"class":202},[186,141096,56182],{"class":206},[186,141098,634],{"class":202},[186,141100,141101],{"class":188,"line":225},[186,141102,639],{"class":202},[169,141104,141105],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[34,141107,141108],{"start":49},[22,141109,141110],{},"右侧newsflash模块制作",[164,141112],{"style":166,"src":141113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[169,141115,141116],{},"右侧的模块 分为上中下三个盒子",[169,141118,141119],{},"结构代码：",[176,141121,141122],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,141123,141124],{"__ignoreMap":181},[186,141125,141126,141128,141130,141132,141134,141136,141138,141140,141142,141144,141146,141148],{"class":188,"line":189},[186,141127,520],{"class":202},[186,141129,164],{"class":523},[186,141131,526],{"class":198},[186,141133,529],{"class":202},[186,141135,533],{"class":532},[186,141137,536],{"class":198},[186,141139,529],{"class":202},[186,141141,541],{"class":532},[186,141143,544],{"class":198},[186,141145,529],{"class":202},[186,141147,549],{"class":532},[186,141149,552],{"class":202},[169,141151,141152,141153,141156],{},"1 号盒子为 ",[183,141154,141155],{},"news"," 新闻模块 高度为 165px",[164,141158],{"style":166,"src":141159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[169,141161,141162,141163,141166,141167],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[183,141164,141165],{},"news-hd","，下面是 ",[183,141168,141169],{},"news-bd",[169,141171,141119],{},[176,141173,141174],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,141175,141176,141180,141194,141198],{"__ignoreMap":181},[186,141177,141178],{"class":188,"line":189},[186,141179,1443],{"class":192},[186,141181,141182,141184,141186,141188,141190,141192],{"class":188,"line":49},[186,141183,520],{"class":202},[186,141185,1450],{"class":523},[186,141187,1453],{"class":198},[186,141189,529],{"class":202},[186,141191,1458],{"class":532},[186,141193,552],{"class":202},[186,141195,141196],{"class":188,"line":219},[186,141197,1465],{"class":202},[186,141199,141200,141202,141204],{"class":188,"line":225},[186,141201,1470],{"class":202},[186,141203,1450],{"class":523},[186,141205,552],{"class":202},[169,141207,141208],{},"样式代码：",[176,141210,141211],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,141212,141213,141217,141231,141235],{"__ignoreMap":181},[186,141214,141215],{"class":188,"line":189},[186,141216,1443],{"class":192},[186,141218,141219,141221,141223,141225,141227,141229],{"class":188,"line":49},[186,141220,520],{"class":202},[186,141222,1450],{"class":523},[186,141224,1453],{"class":198},[186,141226,529],{"class":202},[186,141228,1458],{"class":532},[186,141230,552],{"class":202},[186,141232,141233],{"class":188,"line":219},[186,141234,1465],{"class":202},[186,141236,141237,141239,141241],{"class":188,"line":225},[186,141238,1470],{"class":202},[186,141240,1450],{"class":523},[186,141242,552],{"class":202},[169,141244,141245,141246,141248],{},"上面是",[183,141247,141165],{},"，设置高度是 33px，设置下边框",[19,141250,141251,141257],{},[22,141252,141253,141254,141256],{},"里面放一个",[183,141255,24371],{}," 标题",[22,141258,141259,141260,141262,141263,141265],{},"放一个a",[183,141261,104124],{},"，内容是 更多，然后让 ",[183,141264,948],{}," 进行右浮动，三角用伪元素设置字体图标就好",[169,141267,141119],{},[176,141269,141270],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,141271,141272,141280,141290,141300],{"__ignoreMap":181},[186,141273,141274,141276,141278],{"class":188,"line":189},[186,141275,1450],{"class":523},[186,141277,138750],{"class":198},[186,141279,622],{"class":202},[186,141281,141282,141284,141286,141288],{"class":188,"line":49},[186,141283,138757],{"class":206},[186,141285,210],{"class":202},[186,141287,9115],{"class":532},[186,141289,634],{"class":202},[186,141291,141292,141294,141296,141298],{"class":188,"line":219},[186,141293,129592],{"class":206},[186,141295,210],{"class":202},[186,141297,62310],{"class":206},[186,141299,634],{"class":202},[186,141301,141302],{"class":188,"line":225},[186,141303,639],{"class":202},[169,141305,141208],{},[176,141307,141308],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,141309,141310,141318,141328,141338],{"__ignoreMap":181},[186,141311,141312,141314,141316],{"class":188,"line":189},[186,141313,1450],{"class":523},[186,141315,138750],{"class":198},[186,141317,622],{"class":202},[186,141319,141320,141322,141324,141326],{"class":188,"line":49},[186,141321,138757],{"class":206},[186,141323,210],{"class":202},[186,141325,9115],{"class":532},[186,141327,634],{"class":202},[186,141329,141330,141332,141334,141336],{"class":188,"line":219},[186,141331,129592],{"class":206},[186,141333,210],{"class":202},[186,141335,62310],{"class":206},[186,141337,634],{"class":202},[186,141339,141340],{"class":188,"line":225},[186,141341,639],{"class":202},[169,141343,141344,141345],{},"下面是",[183,141346,141169],{},[19,141348,141349,141357],{},[22,141350,141351,141352,102449,141354,141356],{},"里面包含 ",[183,141353,19],{},[183,141355,22],{}," 还有链接",[22,141358,140829,141359,141361,141362,141364,141365,141368,141369],{},[183,141360,22],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[183,141363,132634],{}," 2.设置 ",[183,141366,141367],{},"white-space: nowrap;"," 3. 设置 ",[183,141370,141371],{},"text-overflow: ellipsis;",[169,141373,141119],{},[176,141375,141377],{"className":178,"code":141376,"language":180,"meta":181,"style":181},"div {\n  overflow: hidden;\n}\n",[183,141378,141379,141385,141396],{"__ignoreMap":181},[186,141380,141381,141383],{"class":188,"line":189},[186,141382,1450],{"class":523},[186,141384,622],{"class":202},[186,141386,141387,141390,141392,141394],{"class":188,"line":49},[186,141388,141389],{"class":206},"  overflow",[186,141391,210],{"class":202},[186,141393,131],{"class":206},[186,141395,634],{"class":202},[186,141397,141398],{"class":188,"line":219},[186,141399,639],{"class":202},[169,141401,141208],{},[176,141403,141404],{"className":178,"code":141376,"language":180,"meta":181,"style":181},[183,141405,141406,141412,141422],{"__ignoreMap":181},[186,141407,141408,141410],{"class":188,"line":189},[186,141409,1450],{"class":523},[186,141411,622],{"class":202},[186,141413,141414,141416,141418,141420],{"class":188,"line":49},[186,141415,141389],{"class":206},[186,141417,210],{"class":202},[186,141419,131],{"class":206},[186,141421,634],{"class":202},[186,141423,141424],{"class":188,"line":219},[186,141425,639],{"class":202},[169,141427,141428,141429,141432],{},"2 号盒子为 ",[183,141430,141431],{},"lifeservice"," 生活服务模块 高度为 209px",[164,141434],{"style":166,"src":141435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[19,141437,141438,141441,141451,141475,141486],{},[22,141439,141440],{},"设置边框（左右下边框）",[22,141442,141443,141444,141447,141448,141450],{},"里面的内容 是 ",[183,141445,141446],{},"ul > 12*li","，给",[183,141449,22],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[22,141452,141453,141454],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[19,141455,141456,141461,141470],{},[22,141457,141458,141460],{},[183,141459,141431],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[22,141462,141463,141464,141466,141467,141469],{},"可以让 ",[183,141465,141431],{}," 里面的 ",[183,141468,19],{}," 宽度为 252，就可以装的下 4 个 小 li",[22,141471,141472,141474],{},[183,141473,141431],{}," 盒子 overflow 隐藏多余的部分就可以了",[22,141476,117898,141477,141479,141480,141482,141483,141485],{},[183,141478,22],{}," 里面放一个 ",[183,141481,2051],{},"（里面放图标），下面的文本用 ",[183,141484,169],{}," 标签包裹",[22,141487,140249,141488,141490,141491,141493,141494,140283,141496,141499],{},[183,141489,2051],{}," 设置 24px宽和28px的高（注意 ",[183,141492,2051],{}," 是行内元素， 转成行内块），给 ",[183,141495,22],{},[183,141497,141498],{},"text-align:center"," 让里面内容居中显示",[169,141501,141119],{},[176,141503,141505],{"className":178,"code":141504,"language":180,"meta":181,"style":181},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[183,141506,141507,141525,141530,141540],{"__ignoreMap":181},[186,141508,141509,141511,141513,141515,141517,141519,141521,141523],{"class":188,"line":189},[186,141510,186],{"class":523},[186,141512,13898],{"class":202},[186,141514,948],{"class":523},[186,141516,13898],{"class":202},[186,141518,25014],{"class":523},[186,141520,13898],{"class":202},[186,141522,54],{"class":523},[186,141524,622],{"class":202},[186,141526,141527],{"class":188,"line":49},[186,141528,141529],{"class":192},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[186,141531,141532,141534,141536,141538],{"class":188,"line":219},[186,141533,129592],{"class":206},[186,141535,210],{"class":202},[186,141537,129654],{"class":206},[186,141539,634],{"class":202},[186,141541,141542],{"class":188,"line":225},[186,141543,639],{"class":202},[169,141545,141208],{},[176,141547,141548],{"className":178,"code":141504,"language":180,"meta":181,"style":181},[183,141549,141550,141568,141572,141582],{"__ignoreMap":181},[186,141551,141552,141554,141556,141558,141560,141562,141564,141566],{"class":188,"line":189},[186,141553,186],{"class":523},[186,141555,13898],{"class":202},[186,141557,948],{"class":523},[186,141559,13898],{"class":202},[186,141561,25014],{"class":523},[186,141563,13898],{"class":202},[186,141565,54],{"class":523},[186,141567,622],{"class":202},[186,141569,141570],{"class":188,"line":49},[186,141571,141529],{"class":192},[186,141573,141574,141576,141578,141580],{"class":188,"line":219},[186,141575,129592],{"class":206},[186,141577,210],{"class":202},[186,141579,129654],{"class":206},[186,141581,634],{"class":202},[186,141583,141584],{"class":188,"line":225},[186,141585,639],{"class":202},[169,141587,141588,141589,141592],{},"3 号盒子为 ",[183,141590,141591],{},"bargain"," 特价商品",[19,141594,141595],{},[22,141596,141597],{},"这个比较简单，直接插入一张图片即可",[169,141599,141119],{},[176,141601,141602],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,141603,141604],{"__ignoreMap":181},[186,141605,141606,141608,141610,141612,141614,141616,141618,141620,141622,141624,141626,141628],{"class":188,"line":189},[186,141607,520],{"class":202},[186,141609,164],{"class":523},[186,141611,526],{"class":198},[186,141613,529],{"class":202},[186,141615,533],{"class":532},[186,141617,536],{"class":198},[186,141619,529],{"class":202},[186,141621,541],{"class":532},[186,141623,544],{"class":198},[186,141625,529],{"class":202},[186,141627,549],{"class":532},[186,141629,552],{"class":202},[169,141631,141208],{},[176,141633,141634],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,141635,141636],{"__ignoreMap":181},[186,141637,141638,141640,141642,141644,141646,141648,141650,141652,141654,141656,141658,141660],{"class":188,"line":189},[186,141639,520],{"class":202},[186,141641,164],{"class":523},[186,141643,526],{"class":198},[186,141645,529],{"class":202},[186,141647,533],{"class":532},[186,141649,536],{"class":198},[186,141651,529],{"class":202},[186,141653,541],{"class":532},[186,141655,544],{"class":198},[186,141657,529],{"class":202},[186,141659,549],{"class":532},[186,141661,552],{"class":202},[29,141663,141665],{"id":141664},"_1612-推荐模块制作","16.1.2 推荐模块制作",[164,141667],{"style":166,"src":141668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[169,141670,141671,141672,141675],{},"大盒子 ",[183,141673,141674],{},"recom"," 推荐模块 recommend",[19,141677,141678],{},[22,141679,141680,141681,141683,141684,141687],{},"给这个 ",[183,141682,141674],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[183,141685,141686],{},"#ebebeb","），设置距离上边 12px",[169,141689,141119],{},[176,141691,141693],{"className":178,"code":141692,"language":180,"meta":181,"style":181},"div {\n  background-color: #f0f0f0;\n}\n",[183,141694,141695,141701,141712],{"__ignoreMap":181},[186,141696,141697,141699],{"class":188,"line":189},[186,141698,1450],{"class":523},[186,141700,622],{"class":202},[186,141702,141703,141705,141707,141710],{"class":188,"line":49},[186,141704,72312],{"class":206},[186,141706,210],{"class":202},[186,141708,141709],{"class":206},"#f0f0f0",[186,141711,634],{"class":202},[186,141713,141714],{"class":188,"line":219},[186,141715,639],{"class":202},[169,141717,141208],{},[176,141719,141720],{"className":178,"code":141692,"language":180,"meta":181,"style":181},[183,141721,141722,141728,141738],{"__ignoreMap":181},[186,141723,141724,141726],{"class":188,"line":189},[186,141725,1450],{"class":523},[186,141727,622],{"class":202},[186,141729,141730,141732,141734,141736],{"class":188,"line":49},[186,141731,72312],{"class":206},[186,141733,210],{"class":202},[186,141735,141709],{"class":206},[186,141737,634],{"class":202},[186,141739,141740],{"class":188,"line":219},[186,141741,639],{"class":202},[169,141743,141744],{},"里面包含 2 个盒子， 浮动即可",[169,141746,141119],{},[176,141748,141749],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,141750,141751,141757,141767],{"__ignoreMap":181},[186,141752,141753,141755],{"class":188,"line":189},[186,141754,131820],{"class":198},[186,141756,622],{"class":202},[186,141758,141759,141761,141763,141765],{"class":188,"line":49},[186,141760,132448],{"class":206},[186,141762,210],{"class":202},[186,141764,110],{"class":206},[186,141766,634],{"class":202},[186,141768,141769],{"class":188,"line":219},[186,141770,639],{"class":202},[169,141772,141773,141774],{},"1 号盒子 ",[183,141775,141776],{},"recom_hd",[19,141778,141779,141782],{},[22,141780,141781],{},"设置宽度205px，高度163px",[22,141783,141253,141784,141786],{},[183,141785,164],{},"标签，插入图片即可",[169,141788,141119],{},[176,141790,141791],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,141792,141793],{"__ignoreMap":181},[186,141794,141795,141797,141799,141801,141803,141805,141807,141809,141811,141813,141815,141817],{"class":188,"line":189},[186,141796,520],{"class":202},[186,141798,164],{"class":523},[186,141800,526],{"class":198},[186,141802,529],{"class":202},[186,141804,533],{"class":532},[186,141806,536],{"class":198},[186,141808,529],{"class":202},[186,141810,541],{"class":532},[186,141812,544],{"class":198},[186,141814,529],{"class":202},[186,141816,549],{"class":532},[186,141818,552],{"class":202},[169,141820,141208],{},[176,141822,141823],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,141824,141825],{"__ignoreMap":181},[186,141826,141827,141829,141831,141833,141835,141837,141839,141841,141843,141845,141847,141849],{"class":188,"line":189},[186,141828,520],{"class":202},[186,141830,164],{"class":523},[186,141832,526],{"class":198},[186,141834,529],{"class":202},[186,141836,533],{"class":532},[186,141838,536],{"class":198},[186,141840,529],{"class":202},[186,141842,541],{"class":532},[186,141844,544],{"class":198},[186,141846,529],{"class":202},[186,141848,549],{"class":532},[186,141850,552],{"class":202},[169,141852,141853,141854,141857],{},"2 号盒子 ",[183,141855,141856],{},"recom_bd"," ，注意里面的小竖线",[19,141859,141860,141871,141874,141879,141884],{},[22,141861,141862,141863,141865,141866,141868,141869],{},"右侧结构里面放 ",[183,141864,19],{}," 包含 4个 ",[183,141867,22],{},"，每个li里面包含一个",[183,141870,164],{},[22,141872,141873],{},"直接利用切片工具把里面的内容当成一张图片",[22,141875,140249,141876,141878],{},[183,141877,22],{}," 设置浮动",[22,141880,140249,141881,141883],{},[183,141882,164],{}," 设置宽高，宽度 248px，高度 163px",[22,141885,141886,141887,141447,141890,141892,141893,141895,141896],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[183,141888,141889],{},"top 10px",[183,141891,22],{},"设置相对定位（注意，最后一个",[183,141894,22],{},"不用设置伪元素），可以利用 ",[183,141897,141898],{},"nth-child(-n+3){...}",[169,141900,141119],{},[176,141902,141903],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,141904,141905,141913,141923,141933],{"__ignoreMap":181},[186,141906,141907,141909,141911],{"class":188,"line":189},[186,141908,1450],{"class":523},[186,141910,138750],{"class":198},[186,141912,622],{"class":202},[186,141914,141915,141917,141919,141921],{"class":188,"line":49},[186,141916,138757],{"class":206},[186,141918,210],{"class":202},[186,141920,9115],{"class":532},[186,141922,634],{"class":202},[186,141924,141925,141927,141929,141931],{"class":188,"line":219},[186,141926,129592],{"class":206},[186,141928,210],{"class":202},[186,141930,62310],{"class":206},[186,141932,634],{"class":202},[186,141934,141935],{"class":188,"line":225},[186,141936,639],{"class":202},[169,141938,141208],{},[176,141940,141941],{"className":178,"code":139591,"language":180,"meta":181,"style":181},[183,141942,141943,141951,141961,141971],{"__ignoreMap":181},[186,141944,141945,141947,141949],{"class":188,"line":189},[186,141946,1450],{"class":523},[186,141948,138750],{"class":198},[186,141950,622],{"class":202},[186,141952,141953,141955,141957,141959],{"class":188,"line":49},[186,141954,138757],{"class":206},[186,141956,210],{"class":202},[186,141958,9115],{"class":532},[186,141960,634],{"class":202},[186,141962,141963,141965,141967,141969],{"class":188,"line":219},[186,141964,129592],{"class":206},[186,141966,210],{"class":202},[186,141968,62310],{"class":206},[186,141970,634],{"class":202},[186,141972,141973],{"class":188,"line":225},[186,141974,639],{"class":202},[29,141976,141978],{"id":141977},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[164,141980],{"style":166,"src":141981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[169,141983,141984],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[169,141986,141987],{},"第一楼是家用电器模块： 里面包含两个盒子",[169,141989,141990,141993],{},[183,141991,141992],{},"box_hd"," 制作",[169,141995,141773,141996,141998],{},[183,141997,141992],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[164,142000],{"style":166,"src":142001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[19,142003,142004,142009,142014,142017],{},[22,142005,142006,142008],{},[183,142007,141992],{}," 给 30px 的高度，2个像素的下边框",[22,142010,142011,142012],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[183,142013,140260],{},[22,142015,142016],{},"左侧盒左浮动，右侧盒子右浮动",[22,142018,142019,142021,142022,142024],{},[183,142020,948],{},"标签之间的距离用左右的",[183,142023,32338],{},"撑开即可",[169,142026,142027],{},"结构代码",[176,142029,142030],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142031,142032,142038,142048],{"__ignoreMap":181},[186,142033,142034,142036],{"class":188,"line":189},[186,142035,131820],{"class":198},[186,142037,622],{"class":202},[186,142039,142040,142042,142044,142046],{"class":188,"line":49},[186,142041,132448],{"class":206},[186,142043,210],{"class":202},[186,142045,110],{"class":206},[186,142047,634],{"class":202},[186,142049,142050],{"class":188,"line":219},[186,142051,639],{"class":202},[169,142053,142054],{},"样式代码",[176,142056,142057],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142058,142059,142065,142075],{"__ignoreMap":181},[186,142060,142061,142063],{"class":188,"line":189},[186,142062,131820],{"class":198},[186,142064,622],{"class":202},[186,142066,142067,142069,142071,142073],{"class":188,"line":49},[186,142068,132448],{"class":206},[186,142070,210],{"class":202},[186,142072,110],{"class":206},[186,142074,634],{"class":202},[186,142076,142077],{"class":188,"line":219},[186,142078,639],{"class":202},[169,142080,142081,141993],{},[183,142082,142083],{},"box_bd",[169,142085,142086],{},"2 号盒子 box_bd，不要给高度",[164,142088],{"style":166,"src":142089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[169,142091,142092],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[169,142094,142095],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[169,142097,142098],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[19,142100,142101,142113,142129],{},[22,142102,142103,142105,142106,142109,142110,142112],{},[183,142104,142083],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[183,142107,142108],{},"tab_content","，在",[183,142111,142108],{}," 里面包裹tab选项卡对应的内容",[22,142114,142115,142116,142119,142120,142122,142123,142125,142126,142128],{},"内容被一个大盒子包裹（",[183,142117,142118],{},"tab_list_item","），里面是 ",[183,142121,19],{}," 包裹 5个 ",[183,142124,22],{},"，每个",[183,142127,22],{},"设置对应的宽度，然后设置浮动",[22,142130,142131,142132,142134,142135,142137,142138],{},"而这5个",[183,142133,22],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[183,142136,22],{},"设置",[19,142139,142140,142158,142161],{},[22,142141,142142,142143,142145,142146,142148,142149,142151,142152,142154,142155,142157],{},"第一个小 ",[183,142144,22],{}," 分为上下结构，上面是 ",[183,142147,19],{}," 包裹 ",[183,142150,22],{}," ，",[183,142153,22],{},"里面包裹 ",[183,142156,948],{},"，下面插入一张图片",[22,142159,142160],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[22,142162,142163,142164,142166,142167,142169,142170,142172],{},"后面的小 ",[183,142165,22],{}," 里面先放一个",[183,142168,948],{},"标签，然后在",[183,142171,948],{},"标签里面插入图片即可",[169,142174,142027],{},[176,142176,142177],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,142178,142179],{"__ignoreMap":181},[186,142180,142181,142183,142185,142187,142189,142191,142193,142195,142197,142199,142201,142203],{"class":188,"line":189},[186,142182,520],{"class":202},[186,142184,164],{"class":523},[186,142186,526],{"class":198},[186,142188,529],{"class":202},[186,142190,533],{"class":532},[186,142192,536],{"class":198},[186,142194,529],{"class":202},[186,142196,541],{"class":532},[186,142198,544],{"class":198},[186,142200,529],{"class":202},[186,142202,549],{"class":532},[186,142204,552],{"class":202},[169,142206,142054],{},[176,142208,142209],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,142210,142211],{"__ignoreMap":181},[186,142212,142213,142215,142217,142219,142221,142223,142225,142227,142229,142231,142233,142235],{"class":188,"line":189},[186,142214,520],{"class":202},[186,142216,164],{"class":523},[186,142218,526],{"class":198},[186,142220,529],{"class":202},[186,142222,533],{"class":532},[186,142224,536],{"class":198},[186,142226,529],{"class":202},[186,142228,541],{"class":532},[186,142230,544],{"class":198},[186,142232,529],{"class":202},[186,142234,549],{"class":532},[186,142236,552],{"class":202},[169,142238,142239],{},"tab栏切换需求！！！！！！介绍：",[164,142241],{"style":166,"src":142242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[19,142244,142245,142253,142259,142262],{},[22,142246,142247,142250,142251],{},[183,142248,142249],{},"tab","栏的布局是 ",[183,142252,140260],{},[22,142254,142255,142256,142258],{},"有多少个",[183,142257,142249],{},"选项卡，那么对应就有多少个内容",[22,142260,142261],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[22,142263,142264,142265,142268,142269,142271,142272,142274],{},"等后面我们学习了",[183,142266,142267],{},"js","之后，我们就会配合",[183,142270,142267],{},"来实现，",[183,142273,142249],{},"栏的切换",[14,142276,142278],{"id":142277},"_162-列表制作","16.2 列表制作",[29,142280,142282],{"id":142281},"_1621-准备工作","16.2.1 准备工作",[19,142284,142285,142288,142291,142294],{},[22,142286,142287],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[22,142289,142290],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[22,142292,142293],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[22,142295,142296],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[29,142298,142300,142301,102449,142303,142305],{"id":142299},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[183,142302,132973],{},[183,142304,55159],{}," 修改",[164,142307],{"style":166,"src":142308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[19,142310,142311],{},[22,142312,142313],{},"秒杀盒子 sk（ second kill ） 定位即可",[169,142315,141119],{},[176,142317,142318],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,142319,142320,142324,142338,142342,142356,142360,142374,142378,142392,142396],{"__ignoreMap":181},[186,142321,142322],{"class":188,"line":189},[186,142323,193],{"class":192},[186,142325,142326,142328,142330,142332,142334,142336],{"class":188,"line":49},[186,142327,199],{"class":198},[186,142329,203],{"class":202},[186,142331,207],{"class":206},[186,142333,210],{"class":202},[186,142335,213],{"class":206},[186,142337,216],{"class":202},[186,142339,142340],{"class":188,"line":219},[186,142341,222],{"class":192},[186,142343,142344,142346,142348,142350,142352,142354],{"class":188,"line":225},[186,142345,228],{"class":198},[186,142347,203],{"class":202},[186,142349,207],{"class":206},[186,142351,210],{"class":202},[186,142353,237],{"class":206},[186,142355,216],{"class":202},[186,142357,142358],{"class":188,"line":242},[186,142359,245],{"class":192},[186,142361,142362,142364,142366,142368,142370,142372],{"class":188,"line":248},[186,142363,251],{"class":198},[186,142365,203],{"class":202},[186,142367,207],{"class":206},[186,142369,210],{"class":202},[186,142371,260],{"class":206},[186,142373,216],{"class":202},[186,142375,142376],{"class":188,"line":265},[186,142377,268],{"class":192},[186,142379,142380,142382,142384,142386,142388,142390],{"class":188,"line":271},[186,142381,274],{"class":198},[186,142383,203],{"class":202},[186,142385,207],{"class":206},[186,142387,210],{"class":202},[186,142389,283],{"class":206},[186,142391,216],{"class":202},[186,142393,142394],{"class":188,"line":288},[186,142395,291],{"class":192},[186,142397,142398,142400,142402,142404,142406,142408],{"class":188,"line":294},[186,142399,297],{"class":198},[186,142401,203],{"class":202},[186,142403,207],{"class":206},[186,142405,210],{"class":202},[186,142407,306],{"class":206},[186,142409,216],{"class":202},[169,142411,141208],{},[176,142413,142414],{"className":178,"code":179,"language":180,"meta":181,"style":181},[183,142415,142416,142420,142434,142438,142452,142456,142470,142474,142488,142492],{"__ignoreMap":181},[186,142417,142418],{"class":188,"line":189},[186,142419,193],{"class":192},[186,142421,142422,142424,142426,142428,142430,142432],{"class":188,"line":49},[186,142423,199],{"class":198},[186,142425,203],{"class":202},[186,142427,207],{"class":206},[186,142429,210],{"class":202},[186,142431,213],{"class":206},[186,142433,216],{"class":202},[186,142435,142436],{"class":188,"line":219},[186,142437,222],{"class":192},[186,142439,142440,142442,142444,142446,142448,142450],{"class":188,"line":225},[186,142441,228],{"class":198},[186,142443,203],{"class":202},[186,142445,207],{"class":206},[186,142447,210],{"class":202},[186,142449,237],{"class":206},[186,142451,216],{"class":202},[186,142453,142454],{"class":188,"line":242},[186,142455,245],{"class":192},[186,142457,142458,142460,142462,142464,142466,142468],{"class":188,"line":248},[186,142459,251],{"class":198},[186,142461,203],{"class":202},[186,142463,207],{"class":206},[186,142465,210],{"class":202},[186,142467,260],{"class":206},[186,142469,216],{"class":202},[186,142471,142472],{"class":188,"line":265},[186,142473,268],{"class":192},[186,142475,142476,142478,142480,142482,142484,142486],{"class":188,"line":271},[186,142477,274],{"class":198},[186,142479,203],{"class":202},[186,142481,207],{"class":206},[186,142483,210],{"class":202},[186,142485,283],{"class":206},[186,142487,216],{"class":202},[186,142489,142490],{"class":188,"line":288},[186,142491,291],{"class":192},[186,142493,142494,142496,142498,142500,142502,142504],{"class":188,"line":294},[186,142495,297],{"class":198},[186,142497,203],{"class":202},[186,142499,207],{"class":206},[186,142501,210],{"class":202},[186,142503,306],{"class":206},[186,142505,216],{"class":202},[19,142507,142508,142519],{},[22,142509,142510,142511,142514,142515,102449,142517],{},"1 号盒子左侧浮动 ",[183,142512,142513],{},"sk_list"," 里面包含 ",[183,142516,19],{},[183,142518,22],{},[22,142520,142521,142522,142514,142525,102449,142527],{},"2 号盒子左侧浮动 ",[183,142523,142524],{},"sk_con",[183,142526,19],{},[183,142528,22],{},[169,142530,141119],{},[176,142532,142533],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142534,142535,142541,142551],{"__ignoreMap":181},[186,142536,142537,142539],{"class":188,"line":189},[186,142538,131820],{"class":198},[186,142540,622],{"class":202},[186,142542,142543,142545,142547,142549],{"class":188,"line":49},[186,142544,132448],{"class":206},[186,142546,210],{"class":202},[186,142548,110],{"class":206},[186,142550,634],{"class":202},[186,142552,142553],{"class":188,"line":219},[186,142554,639],{"class":202},[169,142556,141208],{},[176,142558,142559],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142560,142561,142567,142577],{"__ignoreMap":181},[186,142562,142563,142565],{"class":188,"line":189},[186,142564,131820],{"class":198},[186,142566,622],{"class":202},[186,142568,142569,142571,142573,142575],{"class":188,"line":49},[186,142570,132448],{"class":206},[186,142572,210],{"class":202},[186,142574,110],{"class":206},[186,142576,634],{"class":202},[186,142578,142579],{"class":188,"line":219},[186,142580,639],{"class":202},[29,142582,142584,142585],{"id":142583},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[183,142586,142587],{},"sk_container",[164,142589],{"style":166,"src":142590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[19,142592,142593,142598],{},[22,142594,141773,142595,142597],{},[183,142596,142587],{}," 给宽度 1200，不要给高度",[22,142599,142600],{},"一定不要忘记清除浮动",[169,142602,141119],{},[176,142604,142605],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142606,142607,142613,142623],{"__ignoreMap":181},[186,142608,142609,142611],{"class":188,"line":189},[186,142610,131820],{"class":198},[186,142612,622],{"class":202},[186,142614,142615,142617,142619,142621],{"class":188,"line":49},[186,142616,132448],{"class":206},[186,142618,210],{"class":202},[186,142620,110],{"class":206},[186,142622,634],{"class":202},[186,142624,142625],{"class":188,"line":219},[186,142626,639],{"class":202},[34,142628,142629],{},[22,142630,142631],{},"sk_hd制作",[19,142633,142634],{},[22,142635,141853,142636,142639],{},[183,142637,142638],{},"sk_hd"," ，插入图片即可",[169,142641,141119],{},[176,142643,142644],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,142645,142646],{"__ignoreMap":181},[186,142647,142648,142650,142652,142654,142656,142658,142660,142662,142664,142666,142668,142670],{"class":188,"line":189},[186,142649,520],{"class":202},[186,142651,164],{"class":523},[186,142653,526],{"class":198},[186,142655,529],{"class":202},[186,142657,533],{"class":532},[186,142659,536],{"class":198},[186,142661,529],{"class":202},[186,142663,541],{"class":532},[186,142665,544],{"class":198},[186,142667,529],{"class":202},[186,142669,549],{"class":532},[186,142671,552],{"class":202},[34,142673,142674],{"start":49},[22,142675,142676],{},"sk_bd制作",[19,142678,142679],{},[22,142680,142681,142682,142685,142686,102449,142688,142690],{},"3 号盒子 ",[183,142683,142684],{},"sk_bd"," ，里面包含很多的 ",[183,142687,19],{},[183,142689,22],{},[19,142691,142692,142701],{},[22,142693,142694,142695,142697,142698,142700],{},"当鼠标移入到 ",[183,142696,22],{}," 上面的时候显示红色的边框，在这里先给 ",[183,142699,22],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[22,142702,142703,142704,142706,142707,142709,142710,142713,142714,142716],{},"由于给每个 ",[183,142705,22],{}," 都设置了外边距，导致一行的最后一个 ",[183,142708,22],{}," 掉了下来，在这里我们利用 ",[183,142711,142712],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[183,142715,22],{},"，去掉外边距就好了",[169,142718,141119],{},[176,142720,142721],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,142722,142723,142729,142741],{"__ignoreMap":181},[186,142724,142725,142727],{"class":188,"line":189},[186,142726,1450],{"class":523},[186,142728,622],{"class":202},[186,142730,142731,142733,142735,142737,142739],{"class":188,"line":49},[186,142732,71907],{"class":206},[186,142734,210],{"class":202},[186,142736,1803],{"class":206},[186,142738,53006],{"class":206},[186,142740,634],{"class":202},[186,142742,142743],{"class":188,"line":219},[186,142744,639],{"class":202},[169,142746,141208],{},[176,142748,142749],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,142750,142751,142757,142769],{"__ignoreMap":181},[186,142752,142753,142755],{"class":188,"line":189},[186,142754,1450],{"class":523},[186,142756,622],{"class":202},[186,142758,142759,142761,142763,142765,142767],{"class":188,"line":49},[186,142760,71907],{"class":206},[186,142762,210],{"class":202},[186,142764,1803],{"class":206},[186,142766,53006],{"class":206},[186,142768,634],{"class":202},[186,142770,142771],{"class":188,"line":219},[186,142772,639],{"class":202},[14,142774,142776],{"id":142775},"_163-注册页面制作","16.3 注册页面制作",[164,142778],{"style":166,"src":142779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[169,142781,142782,142784],{},[54,142783,10488],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[164,142786],{"style":166,"src":142787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[29,142789,142791],{"id":142790},"_1631-准备工作","16.3.1 准备工作",[19,142793,142794,142797],{},[22,142795,142796],{},"创建register.html，引入 base.css，引入favicon图标",[22,142798,142799],{},"创建register.css ，在html页面进行引入",[29,142801,142803,142804,142806],{"id":142802},"_1632-header-头部实现","16.3.2 ",[183,142805,132973],{}," 头部实现",[19,142808,142809,142812],{},[22,142810,142811],{},"整个内容用 版心 进行包裹",[22,142813,142814],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[169,142816,141119],{},[176,142818,142819],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,142820,142821],{"__ignoreMap":181},[186,142822,142823,142825,142827,142829,142831,142833,142835,142837,142839,142841,142843,142845],{"class":188,"line":189},[186,142824,520],{"class":202},[186,142826,164],{"class":523},[186,142828,526],{"class":198},[186,142830,529],{"class":202},[186,142832,533],{"class":532},[186,142834,536],{"class":198},[186,142836,529],{"class":202},[186,142838,541],{"class":532},[186,142840,544],{"class":198},[186,142842,529],{"class":202},[186,142844,549],{"class":532},[186,142846,552],{"class":202},[169,142848,141208],{},[176,142850,142851],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,142852,142853],{"__ignoreMap":181},[186,142854,142855,142857,142859,142861,142863,142865,142867,142869,142871,142873,142875,142877],{"class":188,"line":189},[186,142856,520],{"class":202},[186,142858,164],{"class":523},[186,142860,526],{"class":198},[186,142862,529],{"class":202},[186,142864,533],{"class":532},[186,142866,536],{"class":198},[186,142868,529],{"class":202},[186,142870,541],{"class":532},[186,142872,544],{"class":198},[186,142874,529],{"class":202},[186,142876,549],{"class":532},[186,142878,552],{"class":202},[29,142880,142882,142883,142886],{"id":142881},"_1633-registerarea-主体模块实现","16.3.3 ",[183,142884,142885],{},"registerarea"," 主体模块实现",[164,142888],{"style":166,"src":142889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[169,142891,142892],{},"整个大盒子 高度为 522px，设置4个边框",[169,142894,141119],{},[176,142896,142897],{"className":178,"code":132125,"language":180,"meta":181,"style":181},[183,142898,142899,142905,142921],{"__ignoreMap":181},[186,142900,142901,142903],{"class":188,"line":189},[186,142902,1450],{"class":523},[186,142904,622],{"class":202},[186,142906,142907,142909,142911,142913,142915,142917,142919],{"class":188,"line":49},[186,142908,72330],{"class":206},[186,142910,210],{"class":202},[186,142912,1829],{"class":206},[186,142914,804],{"class":669},[186,142916,52971],{"class":206},[186,142918,131364],{"class":206},[186,142920,634],{"class":202},[186,142922,142923],{"class":188,"line":219},[186,142924,639],{"class":202},[169,142926,141208],{},[176,142928,142929],{"className":178,"code":132125,"language":180,"meta":181,"style":181},[183,142930,142931,142937,142953],{"__ignoreMap":181},[186,142932,142933,142935],{"class":188,"line":189},[186,142934,1450],{"class":523},[186,142936,622],{"class":202},[186,142938,142939,142941,142943,142945,142947,142949,142951],{"class":188,"line":49},[186,142940,72330],{"class":206},[186,142942,210],{"class":202},[186,142944,1829],{"class":206},[186,142946,804],{"class":669},[186,142948,52971],{"class":206},[186,142950,131364],{"class":206},[186,142952,634],{"class":202},[186,142954,142955],{"class":188,"line":219},[186,142956,639],{"class":202},[169,142958,142959],{},"1号盒子 是一个 h3 标签，放标题",[19,142961,142962],{},[22,142963,142964],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[169,142966,141119],{},[176,142968,142969],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142970,142971,142977,142987],{"__ignoreMap":181},[186,142972,142973,142975],{"class":188,"line":189},[186,142974,131820],{"class":198},[186,142976,622],{"class":202},[186,142978,142979,142981,142983,142985],{"class":188,"line":49},[186,142980,132448],{"class":206},[186,142982,210],{"class":202},[186,142984,110],{"class":206},[186,142986,634],{"class":202},[186,142988,142989],{"class":188,"line":219},[186,142990,639],{"class":202},[169,142992,141208],{},[176,142994,142995],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,142996,142997,143003,143013],{"__ignoreMap":181},[186,142998,142999,143001],{"class":188,"line":189},[186,143000,131820],{"class":198},[186,143002,622],{"class":202},[186,143004,143005,143007,143009,143011],{"class":188,"line":49},[186,143006,132448],{"class":206},[186,143008,210],{"class":202},[186,143010,110],{"class":206},[186,143012,634],{"class":202},[186,143014,143015],{"class":188,"line":219},[186,143016,639],{"class":202},[169,143018,143019],{},"2号盒子 里面放注册的内容",[19,143021,143022,143025,143034,143048,143061,143064,143067,143085,143099],{},[22,143023,143024],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[22,143026,143027,143028,143030,143031,143033],{},"里面的内容利用 ",[183,143029,19],{}," 包含 ",[183,143032,22],{}," 来实现的（不需要用表格）",[22,143035,140263,143036,143038,143039,143041,143042,143044,143045,143047],{},[183,143037,22],{}," 里面，左侧放 ",[183,143040,35063],{}," 标签， 中间放",[183,143043,55266],{}," 标签， 右侧放 ",[183,143046,186],{}," 提示信息",[22,143049,143050,143051,143053,143054,143056,143057,143060],{},"左侧 ",[183,143052,35063],{},"里面的文字都是右对齐，我们可以给",[183,143055,35063],{},"设置一个宽度（88px），然后利用",[183,143058,143059],{},"text-align"," 来设置右对齐",[22,143062,143063],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[22,143065,143066],{},"右侧 span修饰一下文字颜色",[22,143068,143069,143070],{},"提示信息的样式优化",[19,143071,143072,143075,143078],{},[22,143073,143074],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[22,143076,143077],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[22,143079,143080,143081,143084],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[183,143082,143083],{},"vertical-algin"," 来设置 图片与文字对齐方式",[22,143086,143087,143088],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[19,143089,143090,143096],{},[22,143091,143092,143093,143095],{},"设置 ",[183,143094,25014],{}," 的 左右 12px 的内边距，设置一下文字颜色",[22,143097,143098],{},"分别设置 背景颜色",[22,143100,143101,143102,143104],{},"同意协议 和 完成注册 都是用 ",[183,143103,22],{}," 进行包裹",[169,143106,141119],{},[176,143108,143109],{"className":178,"code":141692,"language":180,"meta":181,"style":181},[183,143110,143111,143117,143127],{"__ignoreMap":181},[186,143112,143113,143115],{"class":188,"line":189},[186,143114,1450],{"class":523},[186,143116,622],{"class":202},[186,143118,143119,143121,143123,143125],{"class":188,"line":49},[186,143120,72312],{"class":206},[186,143122,210],{"class":202},[186,143124,141709],{"class":206},[186,143126,634],{"class":202},[186,143128,143129],{"class":188,"line":219},[186,143130,639],{"class":202},[169,143132,141208],{},[176,143134,143135],{"className":178,"code":141692,"language":180,"meta":181,"style":181},[183,143136,143137,143143,143153],{"__ignoreMap":181},[186,143138,143139,143141],{"class":188,"line":189},[186,143140,1450],{"class":523},[186,143142,622],{"class":202},[186,143144,143145,143147,143149,143151],{"class":188,"line":49},[186,143146,72312],{"class":206},[186,143148,210],{"class":202},[186,143150,141709],{"class":206},[186,143152,634],{"class":202},[186,143154,143155],{"class":188,"line":219},[186,143156,639],{"class":202},[29,143158,143160],{"id":143159},"_1634-底部实现","16.3.4 底部实现",[169,143162,141119],{},[176,143164,143165],{"className":178,"code":141692,"language":180,"meta":181,"style":181},[183,143166,143167,143173,143183],{"__ignoreMap":181},[186,143168,143169,143171],{"class":188,"line":189},[186,143170,1450],{"class":523},[186,143172,622],{"class":202},[186,143174,143175,143177,143179,143181],{"class":188,"line":49},[186,143176,72312],{"class":206},[186,143178,210],{"class":202},[186,143180,141709],{"class":206},[186,143182,634],{"class":202},[186,143184,143185],{"class":188,"line":219},[186,143186,639],{"class":202},[169,143188,141208],{},[176,143190,143191],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,143192,143193,143197,143211,143215],{"__ignoreMap":181},[186,143194,143195],{"class":188,"line":189},[186,143196,1443],{"class":192},[186,143198,143199,143201,143203,143205,143207,143209],{"class":188,"line":49},[186,143200,520],{"class":202},[186,143202,1450],{"class":523},[186,143204,1453],{"class":198},[186,143206,529],{"class":202},[186,143208,1458],{"class":532},[186,143210,552],{"class":202},[186,143212,143213],{"class":188,"line":219},[186,143214,1465],{"class":202},[186,143216,143217,143219,143221],{"class":188,"line":225},[186,143218,1470],{"class":202},[186,143220,1450],{"class":523},[186,143222,552],{"class":202},[14,143224,143226],{"id":143225},"_164-项目总结","16.4 项目总结",[34,143228,143229,143232,143235,143238],{},[22,143230,143231],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[22,143233,143234],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[22,143236,143237],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[22,143239,143240],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[164,143242],{"style":166,"src":143243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[34,143245,143246],{"start":242},[22,143247,143248],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[164,143250],{"style":166,"src":143251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[34,143253,143254],{"start":248},[22,143255,143256],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[164,143258],{"style":166,"src":143259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[176,143261,143262],{"className":511,"code":137906,"language":513,"meta":181,"style":181},[183,143263,143264],{"__ignoreMap":181},[186,143265,143266,143268,143270,143272,143274,143276,143278,143280,143282,143284,143286,143288],{"class":188,"line":189},[186,143267,520],{"class":202},[186,143269,55266],{"class":523},[186,143271,55269],{"class":198},[186,143273,529],{"class":202},[186,143275,64137],{"class":532},[186,143277,16382],{"class":198},[186,143279,529],{"class":202},[186,143281,137927],{"class":532},[186,143283,62461],{"class":198},[186,143285,529],{"class":202},[186,143287,137934],{"class":532},[186,143289,552],{"class":202},[34,143291,143292,143295],{"start":265},[22,143293,143294],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[22,143296,143297],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1524,143299,143300],{},"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":181,"searchDepth":49,"depth":49,"links":143302},[143303,143308,143315,143323],{"id":140929,"depth":49,"text":140930,"children":143304},[143305,143306,143307],{"id":140933,"depth":219,"text":140934},{"id":141664,"depth":219,"text":141665},{"id":141977,"depth":219,"text":141978},{"id":142277,"depth":49,"text":142278,"children":143309},[143310,143311,143313],{"id":142281,"depth":219,"text":142282},{"id":142299,"depth":219,"text":143312},"16.2.2 列表页 header 和 nav 修改",{"id":142583,"depth":219,"text":143314},"16.2.3 列表页主体 sk_container",{"id":142775,"depth":49,"text":142776,"children":143316},[143317,143318,143320,143322],{"id":142790,"depth":219,"text":142791},{"id":142802,"depth":219,"text":143319},"16.3.2 header 头部实现",{"id":142881,"depth":219,"text":143321},"16.3.3 registerarea 主体模块实现",{"id":143159,"depth":219,"text":143160},{"id":143225,"depth":49,"text":143226},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140921,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143330,"title":143331,"body":143332,"description":1548,"extension":1549,"meta":143440,"navigation":1551,"path":143441,"seo":143442,"stem":143443,"__hash__":143444},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143333,"toc":143435},[143334,143337,143341,143344,143347,143356,143365,143369,143374,143381,143399,143402,143405,143408,143411,143414,143417,143420,143423,143426,143429,143432],[10,143335,143331],{"id":143336},"_17-web服务器与网站发布",[14,143338,143340],{"id":143339},"_171-web服务器","17.1 Web服务器",[169,143342,143343],{},"把自己网站上传到服务器上，可以让其他人访问",[164,143345],{"style":166,"src":143346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[169,143348,143349,143352,143353],{},[54,143350,143351],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[54,143354,143355],{},"Web 服务器等",[169,143357,143358,143359,102449,143362,903],{},"根据服务器在网络中所在的位置不同，又可分为 ",[54,143360,143361],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[54,143363,143364],{},"远程服务器",[29,143366,143368],{"id":143367},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[169,143370,143371],{},[54,143372,143373],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[169,143375,143376,143377],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[948,143378,143379],{"href":143379,"rel":143380},"http:\u002F\u002Ffree.3v.do\u002F",[952],[19,143382,143383,143386,143389,143396],{},[22,143384,143385],{},"去免费空间网站注册账号。",[22,143387,143388],{},"记录下主机名、用户名、密码、域名。",[22,143390,143391,143392,143395],{},"利用 ",[183,143393,143394],{},"utftp"," 软件 上传网站到远程服务器",[22,143397,143398],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[169,143400,143401],{},"使用软件上传，对上传软件文件进行解压",[164,143403],{"style":166,"src":143404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[164,143406],{"style":166,"src":143407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[169,143409,143410],{},"输入刚刚申请的服务器账号信息：",[164,143412],{"style":166,"src":143413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[164,143415],{"style":166,"src":143416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[164,143418],{"style":166,"src":143419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[164,143421],{"style":166,"src":143422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[169,143424,143425],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[164,143427],{"style":166,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[169,143430,143431],{},"浏览器输入域名即可访问",[169,143433,143434],{},"首页一定必须是index",{"title":181,"searchDepth":49,"depth":49,"links":143436},[143437],{"id":143339,"depth":49,"text":143340,"children":143438},[143439],{"id":143367,"depth":219,"text":143368},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143331,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143446,"title":143447,"body":143448,"description":1548,"extension":1549,"meta":144375,"navigation":1551,"path":144376,"seo":144377,"stem":144378,"__hash__":144379},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143449,"toc":144358},[143450,143453,143457,143460,143463,143474,143477,143481,143485,143490,143493,143496,143499,143502,143506,143532,143536,143540,143543,143546,143550,143583,143587,143590,143593,143657,143661,143665,143668,143671,143674,143678,143723,143727,143730,143760,143764,143768,143771,143774,143778,143781,143850,143853,143961,143963,143969,143973,143976,143979,144075,144078,144082,144106,144110,144113,144117,144120,144124,144127,144130,144133,144136,144140,144143,144146,144150,144154,144157,144160,144163,144166,144170,144173,144177,144180,144183,144228,144232,144236,144239,144242,144245,144277,144281,144284,144318,144322,144325,144355],[10,143451,143447],{"id":143452},"_18-2d动画与3d转换",[14,143454,143456],{"id":143455},"_181-css3-2d转换","18.1 CSS3 2D转换",[169,143458,143459],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[169,143461,143462],{},"转换（transform）你可以简单理解为变形",[19,143464,143465,143468,143471],{},[22,143466,143467],{},"移动：translate",[22,143469,143470],{},"旋转：rotate",[22,143472,143473],{},"缩放：scale",[164,143475],{"style":166,"src":143476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[29,143478,143480],{"id":143479},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23459,143482,143484],{"id":143483},"_18111-translate介绍","18.1.1.1 translate介绍",[169,143486,143487,143488],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[54,143489,134610],{},[164,143491],{"style":166,"src":143492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[169,143494,143495],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[169,143497,143498],{},"对于行内元素无效",[169,143500,143501],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23459,143503,143505],{"id":143504},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[176,143507,143508],{"className":178,"code":139938,"language":180,"meta":181,"style":181},[183,143509,143510,143516,143528],{"__ignoreMap":181},[186,143511,143512,143514],{"class":188,"line":189},[186,143513,1450],{"class":523},[186,143515,622],{"class":202},[186,143517,143518,143520,143522,143524,143526],{"class":188,"line":49},[186,143519,71907],{"class":206},[186,143521,210],{"class":202},[186,143523,1803],{"class":206},[186,143525,53006],{"class":206},[186,143527,634],{"class":202},[186,143529,143530],{"class":188,"line":219},[186,143531,639],{"class":202},[29,143533,143535],{"id":143534},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23459,143537,143539],{"id":143538},"_18121-rotate介绍","18.1.2.1 rotate介绍",[169,143541,143542],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[164,143544],{"style":166,"src":143545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23459,143547,143549],{"id":143548},"_18122-旋转效果","18.1.2.2 旋转效果",[176,143551,143553],{"className":178,"code":143552,"language":180,"meta":181,"style":181},"div {\n  transform: rotate(45deg);\n}\n",[183,143554,143555,143561,143579],{"__ignoreMap":181},[186,143556,143557,143559],{"class":188,"line":189},[186,143558,1450],{"class":523},[186,143560,622],{"class":202},[186,143562,143563,143565,143567,143570,143572,143574,143577],{"class":188,"line":49},[186,143564,137733],{"class":206},[186,143566,210],{"class":202},[186,143568,143569],{"class":206},"rotate",[186,143571,832],{"class":202},[186,143573,2139],{"class":206},[186,143575,143576],{"class":669},"deg",[186,143578,1112],{"class":202},[186,143580,143581],{"class":188,"line":219},[186,143582,639],{"class":202},[23459,143584,143586],{"id":143585},"_18123-三角做法","18.1.2.3 三角做法",[169,143588,143589],{},"该下标当经过最外层大盒子时会实现向上反转",[164,143591],{"style":166,"src":143592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[176,143594,143595],{"className":178,"code":136269,"language":180,"meta":181,"style":181},[183,143596,143597,143601,143607,143617,143627,143643,143653],{"__ignoreMap":181},[186,143598,143599],{"class":188,"line":189},[186,143600,136276],{"class":192},[186,143602,143603,143605],{"class":188,"line":49},[186,143604,136281],{"class":198},[186,143606,622],{"class":202},[186,143608,143609,143611,143613,143615],{"class":188,"line":219},[186,143610,796],{"class":206},[186,143612,210],{"class":202},[186,143614,1803],{"class":206},[186,143616,634],{"class":202},[186,143618,143619,143621,143623,143625],{"class":188,"line":225},[186,143620,811],{"class":206},[186,143622,210],{"class":202},[186,143624,1803],{"class":206},[186,143626,634],{"class":202},[186,143628,143629,143631,143633,143635,143637,143639,143641],{"class":188,"line":242},[186,143630,72330],{"class":206},[186,143632,210],{"class":202},[186,143634,2056],{"class":206},[186,143636,804],{"class":669},[186,143638,52971],{"class":206},[186,143640,65428],{"class":206},[186,143642,634],{"class":202},[186,143644,143645,143647,143649,143651],{"class":188,"line":248},[186,143646,136324],{"class":206},[186,143648,210],{"class":202},[186,143650,63807],{"class":206},[186,143652,634],{"class":202},[186,143654,143655],{"class":188,"line":265},[186,143656,639],{"class":202},[29,143658,143660],{"id":143659},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23459,143662,143664],{"id":143663},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[169,143666,143667],{},"设置中心点",[164,143669],{"style":166,"src":143670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[169,143672,143673],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23459,143675,143677],{"id":143676},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[176,143679,143681],{"className":178,"code":143680,"language":180,"meta":181,"style":181},"\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",[183,143682,143683,143688,143694,143709,143714,143719],{"__ignoreMap":181},[186,143684,143685],{"class":188,"line":189},[186,143686,143687],{"class":192},"\u002F* 转换中心点 *\u002F\n",[186,143689,143690,143692],{"class":188,"line":49},[186,143691,1450],{"class":523},[186,143693,622],{"class":202},[186,143695,143696,143699,143701,143703,143705,143707],{"class":188,"line":219},[186,143697,143698],{"class":206},"  transform-origin",[186,143700,210],{"class":202},[186,143702,53042],{"class":206},[186,143704,18605],{"class":206},[186,143706,131835],{"class":202},[186,143708,136422],{"class":192},[186,143710,143711],{"class":188,"line":225},[186,143712,143713],{"class":192},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[186,143715,143716],{"class":188,"line":242},[186,143717,143718],{"class":192},"  \u002F* transform-origin: left top; *\u002F\n",[186,143720,143721],{"class":188,"line":248},[186,143722,639],{"class":202},[23459,143724,143726],{"id":143725},"_18133-旋转案例","18.1.3.3 旋转案例",[164,143728],{"style":166,"src":143729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[176,143731,143732],{"className":178,"code":143552,"language":180,"meta":181,"style":181},[183,143733,143734,143740,143756],{"__ignoreMap":181},[186,143735,143736,143738],{"class":188,"line":189},[186,143737,1450],{"class":523},[186,143739,622],{"class":202},[186,143741,143742,143744,143746,143748,143750,143752,143754],{"class":188,"line":49},[186,143743,137733],{"class":206},[186,143745,210],{"class":202},[186,143747,143569],{"class":206},[186,143749,832],{"class":202},[186,143751,2139],{"class":206},[186,143753,143576],{"class":669},[186,143755,1112],{"class":202},[186,143757,143758],{"class":188,"line":219},[186,143759,639],{"class":202},[29,143761,143763],{"id":143762},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23459,143765,143767],{"id":143766},"_18141-scale介绍","18.1.4.1 scale介绍",[169,143769,143770],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[164,143772],{"style":166,"src":143773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23459,143775,143777],{"id":143776},"_18142-分页按钮","18.1.4.2 分页按钮",[164,143779],{"style":166,"src":143780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[176,143782,143784],{"className":178,"code":143783,"language":180,"meta":181,"style":181},"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",[183,143785,143786,143792,143808,143812,143816,143821,143827,143841,143846],{"__ignoreMap":181},[186,143787,143788,143790],{"class":188,"line":189},[186,143789,1450],{"class":523},[186,143791,622],{"class":202},[186,143793,143794,143796,143798,143801,143803,143806],{"class":188,"line":49},[186,143795,137733],{"class":206},[186,143797,210],{"class":202},[186,143799,143800],{"class":206},"scale",[186,143802,832],{"class":202},[186,143804,143805],{"class":206},"1.2",[186,143807,1112],{"class":202},[186,143809,143810],{"class":188,"line":219},[186,143811,639],{"class":202},[186,143813,143814],{"class":188,"line":225},[186,143815,137210],{"class":202},[186,143817,143818],{"class":188,"line":242},[186,143819,143820],{"class":192},"\u002F* 2D 缩放 *\u002F\n",[186,143822,143823,143825],{"class":188,"line":248},[186,143824,1450],{"class":523},[186,143826,622],{"class":202},[186,143828,143829,143831,143833,143835,143837,143839],{"class":188,"line":265},[186,143830,137733],{"class":206},[186,143832,210],{"class":202},[186,143834,143800],{"class":206},[186,143836,832],{"class":202},[186,143838,143805],{"class":206},[186,143840,1112],{"class":202},[186,143842,143843],{"class":188,"line":271},[186,143844,143845],{"class":192},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[186,143847,143848],{"class":188,"line":288},[186,143849,639],{"class":202},[169,143851,143852],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[176,143854,143856],{"className":178,"code":143855,"language":180,"meta":181,"style":181},"\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",[183,143857,143858,143863,143873,143894,143915,143919,143924,143930,143957],{"__ignoreMap":181},[186,143859,143860],{"class":188,"line":189},[186,143861,143862],{"class":192},"\u002F* 定义动画 *\u002F\n",[186,143864,143865,143868,143871],{"class":188,"line":49},[186,143866,143867],{"class":669},"@keyframes",[186,143869,143870],{"class":835}," move",[186,143872,622],{"class":202},[186,143874,143875,143878,143880,143882,143884,143887,143889,143891],{"class":188,"line":219},[186,143876,143877],{"class":198},"  0%",[186,143879,203],{"class":202},[186,143881,49588],{"class":206},[186,143883,210],{"class":202},[186,143885,143886],{"class":206},"translateX",[186,143888,832],{"class":202},[186,143890,1803],{"class":206},[186,143892,143893],{"class":202},"); }\n",[186,143895,143896,143899,143901,143903,143905,143907,143909,143911,143913],{"class":188,"line":225},[186,143897,143898],{"class":198},"  100%",[186,143900,203],{"class":202},[186,143902,49588],{"class":206},[186,143904,210],{"class":202},[186,143906,143886],{"class":206},[186,143908,832],{"class":202},[186,143910,1922],{"class":206},[186,143912,804],{"class":669},[186,143914,143893],{"class":202},[186,143916,143917],{"class":188,"line":242},[186,143918,639],{"class":202},[186,143920,143921],{"class":188,"line":248},[186,143922,143923],{"class":192},"\u002F* 调用动画 *\u002F\n",[186,143925,143926,143928],{"class":188,"line":265},[186,143927,1450],{"class":523},[186,143929,622],{"class":202},[186,143931,143932,143935,143937,143939,143941,143943,143945,143947,143949,143952,143955],{"class":188,"line":271},[186,143933,143934],{"class":206},"  animation",[186,143936,210],{"class":202},[186,143938,136435],{"class":206},[186,143940,26577],{"class":206},[186,143942,2304],{"class":669},[186,143944,80113],{"class":206},[186,143946,5559],{"class":206},[186,143948,2304],{"class":669},[186,143950,143951],{"class":206}," infinite",[186,143953,143954],{"class":206}," alternate",[186,143956,634],{"class":202},[186,143958,143959],{"class":188,"line":288},[186,143960,639],{"class":202},[169,143962,143852],{},[176,143964,143967],{"className":143965,"code":143966,"language":753},[751],"\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",[183,143968,143966],{"__ignoreMap":181},[23459,143970,143972],{"id":143971},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[169,143974,143975],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[164,143977],{"style":166,"src":143978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[176,143980,143981],{"className":178,"code":143855,"language":180,"meta":181,"style":181},[183,143982,143983,143987,143995,144013,144033,144037,144041,144047,144071],{"__ignoreMap":181},[186,143984,143985],{"class":188,"line":189},[186,143986,143862],{"class":192},[186,143988,143989,143991,143993],{"class":188,"line":49},[186,143990,143867],{"class":669},[186,143992,143870],{"class":835},[186,143994,622],{"class":202},[186,143996,143997,143999,144001,144003,144005,144007,144009,144011],{"class":188,"line":219},[186,143998,143877],{"class":198},[186,144000,203],{"class":202},[186,144002,49588],{"class":206},[186,144004,210],{"class":202},[186,144006,143886],{"class":206},[186,144008,832],{"class":202},[186,144010,1803],{"class":206},[186,144012,143893],{"class":202},[186,144014,144015,144017,144019,144021,144023,144025,144027,144029,144031],{"class":188,"line":225},[186,144016,143898],{"class":198},[186,144018,203],{"class":202},[186,144020,49588],{"class":206},[186,144022,210],{"class":202},[186,144024,143886],{"class":206},[186,144026,832],{"class":202},[186,144028,1922],{"class":206},[186,144030,804],{"class":669},[186,144032,143893],{"class":202},[186,144034,144035],{"class":188,"line":242},[186,144036,639],{"class":202},[186,144038,144039],{"class":188,"line":248},[186,144040,143923],{"class":192},[186,144042,144043,144045],{"class":188,"line":265},[186,144044,1450],{"class":523},[186,144046,622],{"class":202},[186,144048,144049,144051,144053,144055,144057,144059,144061,144063,144065,144067,144069],{"class":188,"line":271},[186,144050,143934],{"class":206},[186,144052,210],{"class":202},[186,144054,136435],{"class":206},[186,144056,26577],{"class":206},[186,144058,2304],{"class":669},[186,144060,80113],{"class":206},[186,144062,5559],{"class":206},[186,144064,2304],{"class":669},[186,144066,143951],{"class":206},[186,144068,143954],{"class":206},[186,144070,634],{"class":202},[186,144072,144073],{"class":188,"line":288},[186,144074,639],{"class":202},[169,144076,144077],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[29,144079,144081],{"id":144080},"_1823-知识点回顾","18.2.3 知识点回顾",[176,144083,144084],{"className":178,"code":130145,"language":180,"meta":181,"style":181},[183,144085,144086,144092,144102],{"__ignoreMap":181},[186,144087,144088,144090],{"class":188,"line":189},[186,144089,1450],{"class":523},[186,144091,622],{"class":202},[186,144093,144094,144096,144098,144100],{"class":188,"line":49},[186,144095,130158],{"class":206},[186,144097,210],{"class":202},[186,144099,842],{"class":206},[186,144101,634],{"class":202},[186,144103,144104],{"class":188,"line":219},[186,144105,639],{"class":202},[14,144107,144109],{"id":144108},"_183-3d-转换","18.3 3D 转换",[169,144111,144112],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[29,144114,144116],{"id":144115},"_1831-坐标轴认识","18.3.1 坐标轴认识",[164,144118],{"style":166,"src":144119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[29,144121,144123],{"id":144122},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[164,144125],{"style":166,"src":144126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[169,144128,144129],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[169,144131,144132],{},"translate3d的效果需要搭配透视perspective来使用",[164,144134],{"style":166,"src":144135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[29,144137,144139],{"id":144138},"_1833-透视-perspective","18.3.3 透视 perspective",[164,144141],{"style":166,"src":144142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[169,144144,144145],{},"透视写在父盒子上，单位为像素",[29,144147,144149],{"id":144148},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23459,144151,144153],{"id":144152},"_18341-分开解释","18.3.4.1 分开解释",[164,144155],{"style":166,"src":144156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[164,144158],{"style":166,"src":144159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[164,144161],{"style":166,"src":144162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[169,144164,144165],{},"总结来说就是左手原则",[23459,144167,144169],{"id":144168},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[164,144171],{"style":166,"src":144172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[29,144174,144176],{"id":144175},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[164,144178],{"style":166,"src":144179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[164,144181],{"style":166,"src":144182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[176,144184,144186],{"className":178,"code":144185,"language":180,"meta":181,"style":181},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[183,144187,144188,144194,144207,144224],{"__ignoreMap":181},[186,144189,144190,144192],{"class":188,"line":189},[186,144191,1450],{"class":523},[186,144193,622],{"class":202},[186,144195,144196,144199,144201,144203,144205],{"class":188,"line":49},[186,144197,144198],{"class":206},"  perspective",[186,144200,210],{"class":202},[186,144202,66511],{"class":206},[186,144204,804],{"class":669},[186,144206,634],{"class":202},[186,144208,144209,144211,144213,144216,144218,144220,144222],{"class":188,"line":219},[186,144210,137733],{"class":206},[186,144212,210],{"class":202},[186,144214,144215],{"class":206},"rotateX",[186,144217,832],{"class":202},[186,144219,2139],{"class":206},[186,144221,143576],{"class":669},[186,144223,1112],{"class":202},[186,144225,144226],{"class":188,"line":225},[186,144227,639],{"class":202},[29,144229,144231],{"id":144230},"_1836-案例","18.3.6 案例",[23459,144233,144235],{"id":144234},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[164,144237],{"style":166,"src":144238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[164,144240],{"style":166,"src":144241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[164,144243],{"style":166,"src":144244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[176,144246,144248],{"className":178,"code":144247,"language":180,"meta":181,"style":181},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[183,144249,144250,144255,144261,144273],{"__ignoreMap":181},[186,144251,144252],{"class":188,"line":189},[186,144253,144254],{"class":192},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[186,144256,144257,144259],{"class":188,"line":49},[186,144258,134948],{"class":198},[186,144260,622],{"class":202},[186,144262,144263,144265,144267,144269,144271],{"class":188,"line":219},[186,144264,144198],{"class":206},[186,144266,210],{"class":202},[186,144268,66511],{"class":206},[186,144270,804],{"class":669},[186,144272,634],{"class":202},[186,144274,144275],{"class":188,"line":225},[186,144276,639],{"class":202},[23459,144278,144280],{"id":144279},"_18362-3d导航栏","18.3.6.2 3D导航栏",[164,144282],{"style":166,"src":144283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[176,144285,144286],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,144287,144288,144292,144306,144310],{"__ignoreMap":181},[186,144289,144290],{"class":188,"line":189},[186,144291,1443],{"class":192},[186,144293,144294,144296,144298,144300,144302,144304],{"class":188,"line":49},[186,144295,520],{"class":202},[186,144297,1450],{"class":523},[186,144299,1453],{"class":198},[186,144301,529],{"class":202},[186,144303,1458],{"class":532},[186,144305,552],{"class":202},[186,144307,144308],{"class":188,"line":219},[186,144309,1465],{"class":202},[186,144311,144312,144314,144316],{"class":188,"line":225},[186,144313,1470],{"class":202},[186,144315,1450],{"class":523},[186,144317,552],{"class":202},[23459,144319,144321],{"id":144320},"_18363-旋转木马","18.3.6.3 旋转木马",[164,144323],{"style":166,"src":144324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[176,144326,144327],{"className":178,"code":143552,"language":180,"meta":181,"style":181},[183,144328,144329,144335,144351],{"__ignoreMap":181},[186,144330,144331,144333],{"class":188,"line":189},[186,144332,1450],{"class":523},[186,144334,622],{"class":202},[186,144336,144337,144339,144341,144343,144345,144347,144349],{"class":188,"line":49},[186,144338,137733],{"class":206},[186,144340,210],{"class":202},[186,144342,143569],{"class":206},[186,144344,832],{"class":202},[186,144346,2139],{"class":206},[186,144348,143576],{"class":669},[186,144350,1112],{"class":202},[186,144352,144353],{"class":188,"line":219},[186,144354,639],{"class":202},[1524,144356,144357],{},"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":181,"searchDepth":49,"depth":49,"links":144359},[144360,144367],{"id":143455,"depth":49,"text":143456,"children":144361},[144362,144363,144364,144365,144366],{"id":143479,"depth":219,"text":143480},{"id":143534,"depth":219,"text":143535},{"id":143659,"depth":219,"text":143660},{"id":143762,"depth":219,"text":143763},{"id":144080,"depth":219,"text":144081},{"id":144108,"depth":49,"text":144109,"children":144368},[144369,144370,144371,144372,144373,144374],{"id":144115,"depth":219,"text":144116},{"id":144122,"depth":219,"text":144123},{"id":144138,"depth":219,"text":144139},{"id":144148,"depth":219,"text":144149},{"id":144175,"depth":219,"text":144176},{"id":144230,"depth":219,"text":144231},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143447,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144381,"title":144382,"body":144383,"description":1548,"extension":1549,"meta":144586,"navigation":1551,"path":144587,"seo":144588,"stem":144589,"__hash__":144590},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144384,"toc":144575},[144385,144388,144392,144395,144398,144402,144405,144408,144411,144415,144418,144422,144425,144429,144432,144436,144450,144454,144479,144482,144485,144502,144506,144510,144513,144516,144520,144523,144526,144544,144548,144551,144565,144569,144572],[10,144386,144382],{"id":144387},"_19-移动端基础-前缀现状与视口",[14,144389,144391],{"id":144390},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[164,144393],{"style":166,"src":144394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[169,144396,144397],{},"意思就是加个前缀，增加兼容性",[14,144399,144401],{"id":144400},"_192-移动端现状认识","19.2 移动端现状认识",[164,144403],{"style":166,"src":144404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[169,144406,144407],{},"调试方法：",[164,144409],{"style":166,"src":144410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144412,144414],{"id":144413},"_193-视口","19.3 视口",[169,144416,144417],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[29,144419,144421],{"id":144420},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[164,144423],{"style":166,"src":144424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[29,144426,144428],{"id":144427},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[164,144430],{"style":166,"src":144431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[29,144433,144435],{"id":144434},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[19,144437,144438,144441,144444,144447],{},[22,144439,144440],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[22,144442,144443],{},"理想视口，对设备来讲，是最理想的视口尺寸",[22,144445,144446],{},"需要手动添写meta视口标签通知浏览器操作",[22,144448,144449],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[29,144451,144453],{"id":144452},"_1934-meta视口标签","19.3.4 meta视口标签",[176,144455,144457],{"className":511,"code":144456,"language":513,"meta":181,"style":181},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[183,144458,144459],{"__ignoreMap":181},[186,144460,144461,144463,144465,144467,144469,144471,144473,144475,144477],{"class":188,"line":189},[186,144462,520],{"class":202},[186,144464,52796],{"class":523},[186,144466,16382],{"class":198},[186,144468,529],{"class":202},[186,144470,52843],{"class":532},[186,144472,52823],{"class":198},[186,144474,529],{"class":202},[186,144476,52850],{"class":532},[186,144478,552],{"class":202},[164,144480],{"style":166,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[169,144483,144484],{},"标准视口设置：",[34,144486,144487,144490,144493,144496,144499],{},[22,144488,144489],{},"视口宽度和设备保持一致",[22,144491,144492],{},"视口的默认缩放比例1.0",[22,144494,144495],{},"不允许用户自行缩放",[22,144497,144498],{},"最大允许的缩放比例1.0",[22,144500,144501],{},"最小允许的缩放比例1.0",[29,144503,144505],{"id":144504},"_1935-二倍图","19.3.5 二倍图",[23459,144507,144509],{"id":144508},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[164,144511],{"style":166,"src":144512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[164,144514],{"style":166,"src":144515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23459,144517,144519],{"id":144518},"_19352-多倍图","19.3.5.2 多倍图",[164,144521],{"style":166,"src":144522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[169,144524,144525],{},"二倍图法，代码如下：",[176,144527,144529],{"className":178,"code":144528,"language":180,"meta":181,"style":181},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[183,144530,144531,144536],{"__ignoreMap":181},[186,144532,144533],{"class":188,"line":189},[186,144534,144535],{"class":192},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[186,144537,144538,144541],{"class":188,"line":49},[186,144539,144540],{"class":523},"background-size",[186,144542,144543],{"class":202},": 50% 50%;\n",[23459,144545,144547],{"id":144546},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[164,144549],{"style":166,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[34,144552,144553,144556,144559,144562],{},[22,144554,144555],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[22,144557,144558],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[22,144560,144561],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[22,144563,144564],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23459,144566,144568],{"id":144567},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[164,144570],{"style":166,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1524,144573,144574],{},"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":181,"searchDepth":49,"depth":49,"links":144576},[144577,144578,144579],{"id":144390,"depth":49,"text":144391},{"id":144400,"depth":49,"text":144401},{"id":144413,"depth":49,"text":144414,"children":144580},[144581,144582,144583,144584,144585],{"id":144420,"depth":219,"text":144421},{"id":144427,"depth":219,"text":144428},{"id":144434,"depth":219,"text":144435},{"id":144452,"depth":219,"text":144453},{"id":144504,"depth":219,"text":144505},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144382,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144592,"title":144593,"body":144594,"description":1548,"extension":1549,"meta":145471,"navigation":1551,"path":145472,"seo":145473,"stem":145474,"__hash__":145475},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144595,"toc":145455},[144596,144599,144603,144610,144613,144620,144623,144628,144631,144635,144639,144646,144649,144652,144656,144659,144662,144665,144668,144671,144675,144678,144682,144684,144687,144690,144693,144696,144698,144701,144703,144733,144735,144765,144769,144772,144776,144779,144796,144799,144802,144878,144880,144883,144886,144889,144892,144894,144897,144900,144904,144926,144929,144932,144936,144939,144945,144948,144952,144955,144958,144962,144965,144968,144971,144975,144978,144981,144984,144987,144991,144994,144998,145005,145008,145011,145014,145017,145027,145030,145033,145040,145043,145047,145050,145053,145057,145060,145063,145066,145111,145114,145117,145120,145122,145251,145253,145291,145294,145297,145299,145417,145419,145453],[10,144597,144593],{"id":144598},"_20-移动端布局实战上篇",[14,144600,144602],{"id":144601},"_201-移动端主流方案","20.1 移动端主流方案",[34,144604,144605],{},[22,144606,144607],{},[54,144608,144609],{},"单独移动端页面（主流）",[164,144611],{"style":166,"src":144612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[34,144614,144615],{"start":49},[22,144616,144617],{},[54,144618,144619],{},"响应式兼容PC移动端",[164,144621],{"style":166,"src":144622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[34,144624,144625],{"start":219},[22,144626,144627],{},"两种页面选型布局方式",[164,144629],{"style":166,"src":144630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144632,144634],{"id":144633},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[29,144636,144638],{"id":144637},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[169,144640,144641,144642],{},"官网地址： ",[948,144643,144644],{"href":144644,"rel":144645},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[952],[164,144647],{"style":166,"src":144648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[164,144650],{"style":166,"src":144651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[29,144653,144655],{"id":144654},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[164,144657],{"style":166,"src":144658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[164,144660],{"style":166,"src":144661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[169,144663,144664],{},"去除高亮：",[169,144666,144667],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[169,144669,144670],{},"-webkit- tap-highlight-color: transparent;",[14,144672,144674],{"id":144673},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[164,144676],{"style":166,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144679,144681],{"id":144680},"_204-流式布局案例","20.4 流式布局案例",[169,144683,1652],{},[169,144685,144686],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[169,144688,144689],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[169,144691,144692],{},"图片格式：",[164,144694],{"style":166,"src":144695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[169,144697,136792],{},[164,144699],{"style":166,"src":144700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[169,144702,141119],{},[176,144704,144705],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,144706,144707],{"__ignoreMap":181},[186,144708,144709,144711,144713,144715,144717,144719,144721,144723,144725,144727,144729,144731],{"class":188,"line":189},[186,144710,520],{"class":202},[186,144712,164],{"class":523},[186,144714,526],{"class":198},[186,144716,529],{"class":202},[186,144718,533],{"class":532},[186,144720,536],{"class":198},[186,144722,529],{"class":202},[186,144724,541],{"class":532},[186,144726,544],{"class":198},[186,144728,529],{"class":202},[186,144730,549],{"class":532},[186,144732,552],{"class":202},[169,144734,141208],{},[176,144736,144737],{"className":511,"code":512,"language":513,"meta":181,"style":181},[183,144738,144739],{"__ignoreMap":181},[186,144740,144741,144743,144745,144747,144749,144751,144753,144755,144757,144759,144761,144763],{"class":188,"line":189},[186,144742,520],{"class":202},[186,144744,164],{"class":523},[186,144746,526],{"class":198},[186,144748,529],{"class":202},[186,144750,533],{"class":532},[186,144752,536],{"class":198},[186,144754,529],{"class":202},[186,144756,541],{"class":532},[186,144758,544],{"class":198},[186,144760,529],{"class":202},[186,144762,549],{"class":532},[186,144764,552],{"class":202},[14,144766,144768],{"id":144767},"_205-flex布局","20.5 flex布局",[164,144770],{"style":166,"src":144771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[29,144773,144775],{"id":144774},"_2051-布局原理","20.5.1 布局原理",[169,144777,144778],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[19,144780,144781,144784,144787,144790,144793],{},[22,144782,144783],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[22,144785,144786],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[22,144788,144789],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[22,144791,144792],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[22,144794,144795],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[169,144797,144798],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[169,144800,144801],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[176,144803,144805],{"className":178,"code":144804,"language":180,"meta":181,"style":181},"\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",[183,144806,144807,144812,144819,144829,144841,144852,144863,144874],{"__ignoreMap":181},[186,144808,144809],{"class":188,"line":189},[186,144810,144811],{"class":192},"\u002F* Flex 弹性布局 *\u002F\n",[186,144813,144814,144817],{"class":188,"line":49},[186,144815,144816],{"class":198},".container",[186,144818,622],{"class":202},[186,144820,144821,144823,144825,144827],{"class":188,"line":219},[186,144822,129592],{"class":206},[186,144824,210],{"class":202},[186,144826,52928],{"class":206},[186,144828,634],{"class":202},[186,144830,144831,144834,144836,144839],{"class":188,"line":225},[186,144832,144833],{"class":206},"  flex-direction",[186,144835,210],{"class":202},[186,144837,144838],{"class":206},"row",[186,144840,634],{"class":202},[186,144842,144843,144846,144848,144850],{"class":188,"line":242},[186,144844,144845],{"class":206},"  justify-content",[186,144847,210],{"class":202},[186,144849,53117],{"class":206},[186,144851,634],{"class":202},[186,144853,144854,144857,144859,144861],{"class":188,"line":248},[186,144855,144856],{"class":206},"  align-items",[186,144858,210],{"class":202},[186,144860,53042],{"class":206},[186,144862,634],{"class":202},[186,144864,144865,144868,144870,144872],{"class":188,"line":265},[186,144866,144867],{"class":206},"  flex-wrap",[186,144869,210],{"class":202},[186,144871,80043],{"class":206},[186,144873,634],{"class":202},[186,144875,144876],{"class":188,"line":271},[186,144877,639],{"class":202},[169,144879,71890],{},[169,144881,144882],{},".form-item .male-label {",[169,144884,144885],{},"   margin-right: 20px;",[169,144887,144888],{},"   display: inline-flex;",[169,144890,144891],{},"   align-items: center;",[169,144893,2553],{},[164,144895],{"style":166,"src":144896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[164,144898],{"style":166,"src":144899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[29,144901,144903],{"id":144902},"_2052-常见父项属性","20.5.2 常见父项属性",[34,144905,144906,144909,144912,144915,144918,144921,144924],{},[22,144907,144908],{},"flex-direction：设置主轴的方向",[22,144910,144911],{},"justify-content：设置主轴上的子元素排列方式",[22,144913,144914],{},"flex-wrap：设置子元素是否换行",[22,144916,144917],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[22,144919,144920],{},"align-items：设置侧轴上的子元素排列方式（单行）",[22,144922,144923],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[22,144925,144908],{},[164,144927],{"style":166,"src":144928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[164,144930],{"style":166,"src":144931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[34,144933,144934],{"start":49},[22,144935,144911],{},[164,144937],{"style":166,"src":144938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[169,144940,144941,144944],{},[183,144942,144943],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[169,144946,144947],{},"跟着主轴走",[34,144949,144950],{"start":219},[22,144951,144914],{},[164,144953],{"style":166,"src":144954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[169,144956,144957],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[34,144959,144960],{"start":225},[22,144961,144917],{},[164,144963],{"style":166,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[169,144966,144967],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[169,144969,144970],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[34,144972,144973],{"start":242},[22,144974,144920],{},[164,144976],{"style":166,"src":144977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[169,144979,144980],{},"align-items与align-content之间的区别：",[169,144982,144983],{},"单找items，多找content",[164,144985],{"style":166,"src":144986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[34,144988,144989],{"start":248},[22,144990,144923],{},[164,144992],{"style":166,"src":144993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[29,144995,144997],{"id":144996},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[34,144999,145000],{},[22,145001,145002],{},[54,145003,145004],{},"flex 属性",[169,145006,145007],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[164,145009],{"style":166,"src":145010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[169,145012,145013],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[169,145015,145016],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[34,145018,145019],{"start":49},[22,145020,145021,15257,145024],{},[54,145022,145023],{},"align-self",[54,145025,145026],{},"控制子项自己在侧轴上的排列方式",[164,145028],{"style":166,"src":145029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[169,145031,145032],{},"单个子盒子在父盒子侧轴上的排列方式",[34,145034,145035],{"start":219},[22,145036,145037,145039],{},[54,145038,96728],{}," 属性定义项目的排列顺序",[164,145041],{"style":166,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[29,145044,145046],{"id":145045},"_2054-背景线性渐变","20.5.4 背景线性渐变",[164,145048],{"style":166,"src":145049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[169,145051,145052],{},"必须要添加浏览器的私有前缀",[29,145054,145056],{"id":145055},"_2055-携程网首页案例","20.5.5 携程网首页案例",[169,145058,145059],{},"学到最重要的知识：",[169,145061,145062],{},"flex处理这样的布局思路",[164,145064],{"style":166,"src":145065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[176,145067,145069],{"className":178,"code":145068,"language":180,"meta":181,"style":181},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[183,145070,145071,145077,145087,145097,145107],{"__ignoreMap":181},[186,145072,145073,145075],{"class":188,"line":189},[186,145074,144816],{"class":198},[186,145076,622],{"class":202},[186,145078,145079,145081,145083,145085],{"class":188,"line":49},[186,145080,129592],{"class":206},[186,145082,210],{"class":202},[186,145084,52928],{"class":206},[186,145086,634],{"class":202},[186,145088,145089,145091,145093,145095],{"class":188,"line":219},[186,145090,144845],{"class":206},[186,145092,210],{"class":202},[186,145094,53042],{"class":206},[186,145096,634],{"class":202},[186,145098,145099,145101,145103,145105],{"class":188,"line":225},[186,145100,144856],{"class":206},[186,145102,210],{"class":202},[186,145104,53042],{"class":206},[186,145106,634],{"class":202},[186,145108,145109],{"class":188,"line":242},[186,145110,639],{"class":202},[169,145112,145113],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[169,145115,145116],{},"使用属性选择器",[164,145118],{"style":166,"src":145119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[169,145121,70326],{},[176,145123,145125],{"className":511,"code":145124,"language":513,"meta":181,"style":181},"\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",[183,145126,145127,145132,145146,145151,145171,145176,145195,145200,145219,145224,145243],{"__ignoreMap":181},[186,145128,145129],{"class":188,"line":189},[186,145130,145131],{"class":192},"\u003C!-- 携程网移动端案例结构 -->\n",[186,145133,145134,145136,145138,145140,145142,145144],{"class":188,"line":49},[186,145135,520],{"class":202},[186,145137,1450],{"class":523},[186,145139,1453],{"class":198},[186,145141,529],{"class":202},[186,145143,93754],{"class":532},[186,145145,552],{"class":202},[186,145147,145148],{"class":188,"line":219},[186,145149,145150],{"class":192},"  \u003C!-- 搜索栏 -->\n",[186,145152,145153,145155,145157,145159,145161,145164,145167,145169],{"class":188,"line":225},[186,145154,53591],{"class":202},[186,145156,1450],{"class":523},[186,145158,1453],{"class":198},[186,145160,529],{"class":202},[186,145162,145163],{"class":532},"\"search-index\"",[186,145165,145166],{"class":202},">...\u003C\u002F",[186,145168,1450],{"class":523},[186,145170,552],{"class":202},[186,145172,145173],{"class":188,"line":242},[186,145174,145175],{"class":192},"  \u003C!-- 焦点图 -->\n",[186,145177,145178,145180,145182,145184,145186,145189,145191,145193],{"class":188,"line":248},[186,145179,53591],{"class":202},[186,145181,1450],{"class":523},[186,145183,1453],{"class":198},[186,145185,529],{"class":202},[186,145187,145188],{"class":532},"\"focus\"",[186,145190,145166],{"class":202},[186,145192,1450],{"class":523},[186,145194,552],{"class":202},[186,145196,145197],{"class":188,"line":265},[186,145198,145199],{"class":192},"  \u003C!-- 主导航 -->\n",[186,145201,145202,145204,145206,145208,145210,145213,145215,145217],{"class":188,"line":271},[186,145203,53591],{"class":202},[186,145205,1450],{"class":523},[186,145207,1453],{"class":198},[186,145209,529],{"class":202},[186,145211,145212],{"class":532},"\"local-nav\"",[186,145214,145166],{"class":202},[186,145216,1450],{"class":523},[186,145218,552],{"class":202},[186,145220,145221],{"class":188,"line":288},[186,145222,145223],{"class":192},"  \u003C!-- 子导航 -->\n",[186,145225,145226,145228,145230,145232,145234,145237,145239,145241],{"class":188,"line":294},[186,145227,53591],{"class":202},[186,145229,1450],{"class":523},[186,145231,1453],{"class":198},[186,145233,529],{"class":202},[186,145235,145236],{"class":532},"\"nav-common\"",[186,145238,145166],{"class":202},[186,145240,1450],{"class":523},[186,145242,552],{"class":202},[186,145244,145245,145247,145249],{"class":188,"line":1212},[186,145246,1470],{"class":202},[186,145248,1450],{"class":523},[186,145250,552],{"class":202},[169,145252,71890],{},[176,145254,145255],{"className":178,"code":138201,"language":180,"meta":181,"style":181},[183,145256,145257,145271,145287],{"__ignoreMap":181},[186,145258,145259,145261,145263,145265,145267,145269],{"class":188,"line":189},[186,145260,55266],{"class":523},[186,145262,2498],{"class":202},[186,145264,104538],{"class":198},[186,145266,529],{"class":669},[186,145268,64137],{"class":532},[186,145270,138218],{"class":202},[186,145272,145273,145275,145277,145279,145281,145283,145285],{"class":188,"line":49},[186,145274,72330],{"class":206},[186,145276,210],{"class":202},[186,145278,1829],{"class":206},[186,145280,804],{"class":669},[186,145282,52971],{"class":206},[186,145284,131552],{"class":206},[186,145286,634],{"class":202},[186,145288,145289],{"class":188,"line":219},[186,145290,639],{"class":202},[169,145292,145293],{},"总代码和效果展示：",[164,145295],{"style":166,"src":145296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[169,145298,70326],{},[176,145300,145301],{"className":511,"code":145124,"language":513,"meta":181,"style":181},[183,145302,145303,145307,145321,145325,145343,145347,145365,145369,145387,145391,145409],{"__ignoreMap":181},[186,145304,145305],{"class":188,"line":189},[186,145306,145131],{"class":192},[186,145308,145309,145311,145313,145315,145317,145319],{"class":188,"line":49},[186,145310,520],{"class":202},[186,145312,1450],{"class":523},[186,145314,1453],{"class":198},[186,145316,529],{"class":202},[186,145318,93754],{"class":532},[186,145320,552],{"class":202},[186,145322,145323],{"class":188,"line":219},[186,145324,145150],{"class":192},[186,145326,145327,145329,145331,145333,145335,145337,145339,145341],{"class":188,"line":225},[186,145328,53591],{"class":202},[186,145330,1450],{"class":523},[186,145332,1453],{"class":198},[186,145334,529],{"class":202},[186,145336,145163],{"class":532},[186,145338,145166],{"class":202},[186,145340,1450],{"class":523},[186,145342,552],{"class":202},[186,145344,145345],{"class":188,"line":242},[186,145346,145175],{"class":192},[186,145348,145349,145351,145353,145355,145357,145359,145361,145363],{"class":188,"line":248},[186,145350,53591],{"class":202},[186,145352,1450],{"class":523},[186,145354,1453],{"class":198},[186,145356,529],{"class":202},[186,145358,145188],{"class":532},[186,145360,145166],{"class":202},[186,145362,1450],{"class":523},[186,145364,552],{"class":202},[186,145366,145367],{"class":188,"line":265},[186,145368,145199],{"class":192},[186,145370,145371,145373,145375,145377,145379,145381,145383,145385],{"class":188,"line":271},[186,145372,53591],{"class":202},[186,145374,1450],{"class":523},[186,145376,1453],{"class":198},[186,145378,529],{"class":202},[186,145380,145212],{"class":532},[186,145382,145166],{"class":202},[186,145384,1450],{"class":523},[186,145386,552],{"class":202},[186,145388,145389],{"class":188,"line":288},[186,145390,145223],{"class":192},[186,145392,145393,145395,145397,145399,145401,145403,145405,145407],{"class":188,"line":294},[186,145394,53591],{"class":202},[186,145396,1450],{"class":523},[186,145398,1453],{"class":198},[186,145400,529],{"class":202},[186,145402,145236],{"class":532},[186,145404,145166],{"class":202},[186,145406,1450],{"class":523},[186,145408,552],{"class":202},[186,145410,145411,145413,145415],{"class":188,"line":1212},[186,145412,1470],{"class":202},[186,145414,1450],{"class":523},[186,145416,552],{"class":202},[169,145418,71890],{},[176,145420,145421],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,145422,145423,145427,145441,145445],{"__ignoreMap":181},[186,145424,145425],{"class":188,"line":189},[186,145426,1443],{"class":192},[186,145428,145429,145431,145433,145435,145437,145439],{"class":188,"line":49},[186,145430,520],{"class":202},[186,145432,1450],{"class":523},[186,145434,1453],{"class":198},[186,145436,529],{"class":202},[186,145438,1458],{"class":532},[186,145440,552],{"class":202},[186,145442,145443],{"class":188,"line":219},[186,145444,1465],{"class":202},[186,145446,145447,145449,145451],{"class":188,"line":225},[186,145448,1470],{"class":202},[186,145450,1450],{"class":523},[186,145452,552],{"class":202},[1524,145454,139150],{},{"title":181,"searchDepth":49,"depth":49,"links":145456},[145457,145458,145462,145463,145464],{"id":144601,"depth":49,"text":144602},{"id":144633,"depth":49,"text":144634,"children":145459},[145460,145461],{"id":144637,"depth":219,"text":144638},{"id":144654,"depth":219,"text":144655},{"id":144673,"depth":49,"text":144674},{"id":144680,"depth":49,"text":144681},{"id":144767,"depth":49,"text":144768,"children":145465},[145466,145467,145468,145469,145470],{"id":144774,"depth":219,"text":144775},{"id":144902,"depth":219,"text":144903},{"id":144996,"depth":219,"text":144997},{"id":145045,"depth":219,"text":145046},{"id":145055,"depth":219,"text":145056},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144593,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145477,"title":145478,"body":145479,"description":1548,"extension":1549,"meta":146706,"navigation":1551,"path":146707,"seo":146708,"stem":146709,"__hash__":146710},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145480,"toc":146684},[145481,145484,145488,145492,145495,145498,145502,145507,145510,145513,145516,145519,145522,145579,145582,145587,145590,145593,145597,145608,145612,145615,145618,145625,145630,145634,145637,145643,145646,145650,145653,145660,145663,145666,145673,145676,145683,145686,145689,145696,145699,145702,145704,145721,145725,145728,145731,145734,145738,145741,145744,145747,145750,145753,145756,145758,145761,145764,145826,145829,145939,145946,145952,145955,145958,145962,145965,145969,145974,145977,145984,145987,145993,145998,146001,146004,146007,146010,146013,146016,146019,146022,146078,146080,146106,146110,146113,146116,146119,146127,146130,146133,146137,146193,146196,146200,146206,146217,146220,146225,146228,146231,146237,146240,146243,146246,146249,146252,146255,146258,146261,146286,146292,146295,146298,146301,146304,146307,146310,146315,146318,146321,146324,146332,146335,146342,146345,146348,146350,146374,146376,146379,146382,146385,146388,146391,146394,146397,146431,146434,146437,146471,146478,146481,146484,146487,146490,146493,146496,146503,146506,146509,146512,146515,146522,146525,146528,146535,146538,146541,146545,146548,146551,146554,146557,146560,146563,146566,146569,146571,146595,146597,146621,146625,146636,146639,146642,146645,146648,146651,146654,146657,146660,146663,146666,146669,146672,146675,146678,146681],[10,145482,145478],{"id":145483},"_21-移动端布局实战下篇",[14,145485,145487],{"id":145486},"_211-rem适配布局","21.1 rem适配布局",[29,145489,145491],{"id":145490},"_2111-rem单位","21.1.1 rem单位",[164,145493],{"style":166,"src":145494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[169,145496,145497],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[29,145499,145501],{"id":145500},"_2112-媒体查询","21.1.2 媒体查询",[34,145503,145504],{},[22,145505,145506],{},"参数介绍",[164,145508],{"style":166,"src":145509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[164,145511],{"style":166,"src":145512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[164,145514],{"style":166,"src":145515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[164,145517],{"style":166,"src":145518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[164,145520],{"style":166,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[176,145523,145525],{"className":178,"code":145524,"language":180,"meta":181,"style":181},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[183,145526,145527,145532,145551,145558,145571,145575],{"__ignoreMap":181},[186,145528,145529],{"class":188,"line":189},[186,145530,145531],{"class":192},"\u002F* 媒体查询 *\u002F\n",[186,145533,145534,145537,145539,145542,145544,145547,145549],{"class":188,"line":49},[186,145535,145536],{"class":669},"@media",[186,145538,3126],{"class":202},[186,145540,145541],{"class":206},"max-width",[186,145543,210],{"class":202},[186,145545,145546],{"class":206},"768",[186,145548,804],{"class":669},[186,145550,13905],{"class":202},[186,145552,145553,145556],{"class":188,"line":219},[186,145554,145555],{"class":198},"  .container",[186,145557,622],{"class":202},[186,145559,145560,145563,145565,145567,145569],{"class":188,"line":225},[186,145561,145562],{"class":206},"    width",[186,145564,210],{"class":202},[186,145566,1922],{"class":206},[186,145568,670],{"class":669},[186,145570,634],{"class":202},[186,145572,145573],{"class":188,"line":242},[186,145574,128773],{"class":202},[186,145576,145577],{"class":188,"line":248},[186,145578,639],{"class":202},[169,145580,145581],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[34,145583,145584],{"start":49},[22,145585,145586],{},"引入资源",[164,145588],{"style":166,"src":145589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[169,145591,145592],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[29,145594,145596],{"id":145595},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[19,145598,145599,145602,145605],{},[22,145600,145601],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[22,145603,145604],{},"媒体查询可以根据不同设备宽度来修改样式",[22,145606,145607],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145609,145611],{"id":145610},"_212-less基础","21.2 Less基础",[169,145613,145614],{},"css冗余度较高，不利于复用，没有很好的计算能力",[169,145616,145617],{},"Less可以解决该问题，它是css的扩展语言",[169,145619,145620,145621],{},"Less中文网址： ",[948,145622,145623],{"href":145623,"rel":145624},"http:\u002F\u002Flesscss.cn\u002F",[952],[169,145626,145627],{},[54,145628,145629],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[29,145631,145633],{"id":145632},"_2121-less安装","21.2.1 less安装",[169,145635,145636],{},"如果使用vscode，则无需进行下方安装步骤",[169,145638,145639],{},[948,145640,145641],{"href":145641,"rel":145642},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[952],[164,145644],{"style":166,"src":145645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[29,145647,145649],{"id":145648},"_2122-less使用","21.2.2 less使用",[169,145651,145652],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[34,145654,145655],{},[22,145656,145657],{},[54,145658,145659],{},"Less 变量",[164,145661],{"style":166,"src":145662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[164,145664],{"style":166,"src":145665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[34,145667,145668],{"start":49},[22,145669,145670],{},[54,145671,145672],{},"Less 编译",[164,145674],{"style":166,"src":145675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[34,145677,145678],{"start":219},[22,145679,145680],{},[54,145681,145682],{},"Less 嵌套",[164,145684],{"style":166,"src":145685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[164,145687],{"style":166,"src":145688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[34,145690,145691],{"start":225},[22,145692,145693],{},[54,145694,145695],{},"Less 运算",[164,145697],{"style":166,"src":145698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[169,145700,145701],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[169,145703,1652],{},[19,145705,145706,145709,145712,145715,145718],{},[22,145707,145708],{},"乘号（*）和除号（\u002F）的写法",[22,145710,145711],{},"运算符中间左右有个空格隔开 1px + 5",[22,145713,145714],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[22,145716,145717],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[22,145719,145720],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145722,145724],{"id":145723},"_213-rem-适配方案","21.3 rem 适配方案",[169,145726,145727],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[169,145729,145730],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[164,145732],{"style":166,"src":145733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[29,145735,145737],{"id":145736},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[169,145739,145740],{},"rem + 媒体查询 + less 技术",[164,145742],{"style":166,"src":145743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[169,145745,145746],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[169,145748,145749],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[164,145751],{"style":166,"src":145752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[169,145754,145755],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[169,145757,16095],{},[164,145759],{"style":166,"src":145760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[169,145762,145763],{},"index.html:",[176,145765,145767],{"className":178,"code":145766,"language":180,"meta":181,"style":181},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[183,145768,145769,145774,145780,145796,145800,145806,145822],{"__ignoreMap":181},[186,145770,145771],{"class":188,"line":189},[186,145772,145773],{"class":192},"\u002F* rem 适配方案 *\u002F\n",[186,145775,145776,145778],{"class":188,"line":49},[186,145777,52089],{"class":523},[186,145779,622],{"class":202},[186,145781,145782,145784,145786,145789,145791,145793],{"class":188,"line":219},[186,145783,72061],{"class":206},[186,145785,210],{"class":202},[186,145787,145788],{"class":206},"62.5",[186,145790,670],{"class":669},[186,145792,131835],{"class":202},[186,145794,145795],{"class":192},"\u002F* 1rem = 10px *\u002F\n",[186,145797,145798],{"class":188,"line":225},[186,145799,639],{"class":202},[186,145801,145802,145804],{"class":188,"line":242},[186,145803,131820],{"class":198},[186,145805,622],{"class":202},[186,145807,145808,145810,145812,145814,145817,145819],{"class":188,"line":248},[186,145809,796],{"class":206},[186,145811,210],{"class":202},[186,145813,2056],{"class":206},[186,145815,145816],{"class":669},"rem",[186,145818,131835],{"class":202},[186,145820,145821],{"class":192},"\u002F* 100px *\u002F\n",[186,145823,145824],{"class":188,"line":265},[186,145825,639],{"class":202},[169,145827,145828],{},"common.less",[176,145830,145832],{"className":178,"code":145831,"language":180,"meta":181,"style":181},"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",[183,145833,145834,145840,145855,145859,145865,145879,145883,145887,145891,145897,145911,145915,145921,145935],{"__ignoreMap":181},[186,145835,145836,145838],{"class":188,"line":189},[186,145837,52089],{"class":523},[186,145839,622],{"class":202},[186,145841,145842,145844,145846,145848,145850,145852],{"class":188,"line":49},[186,145843,72061],{"class":206},[186,145845,210],{"class":202},[186,145847,145788],{"class":206},[186,145849,670],{"class":669},[186,145851,27524],{"class":202},[186,145853,145854],{"class":192},"\u002F* 10px *\u002F\n",[186,145856,145857],{"class":188,"line":219},[186,145858,639],{"class":202},[186,145860,145861,145863],{"class":188,"line":225},[186,145862,1450],{"class":523},[186,145864,622],{"class":202},[186,145866,145867,145869,145871,145873,145875,145877],{"class":188,"line":242},[186,145868,796],{"class":206},[186,145870,210],{"class":202},[186,145872,2056],{"class":206},[186,145874,145816],{"class":669},[186,145876,27524],{"class":202},[186,145878,145821],{"class":192},[186,145880,145881],{"class":188,"line":248},[186,145882,639],{"class":202},[186,145884,145885],{"class":188,"line":265},[186,145886,137210],{"class":202},[186,145888,145889],{"class":188,"line":271},[186,145890,145773],{"class":192},[186,145892,145893,145895],{"class":188,"line":288},[186,145894,52089],{"class":523},[186,145896,622],{"class":202},[186,145898,145899,145901,145903,145905,145907,145909],{"class":188,"line":294},[186,145900,72061],{"class":206},[186,145902,210],{"class":202},[186,145904,145788],{"class":206},[186,145906,670],{"class":669},[186,145908,131835],{"class":202},[186,145910,145795],{"class":192},[186,145912,145913],{"class":188,"line":1212},[186,145914,639],{"class":202},[186,145916,145917,145919],{"class":188,"line":1223},[186,145918,131820],{"class":198},[186,145920,622],{"class":202},[186,145922,145923,145925,145927,145929,145931,145933],{"class":188,"line":1236},[186,145924,796],{"class":206},[186,145926,210],{"class":202},[186,145928,2056],{"class":206},[186,145930,145816],{"class":669},[186,145932,131835],{"class":202},[186,145934,145821],{"class":192},[186,145936,145937],{"class":188,"line":3096},[186,145938,639],{"class":202},[169,145940,145941,145942,145945],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25014,145943,145944],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[176,145947,145950],{"className":145948,"code":145949,"language":753},[751],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[183,145951,145949],{"__ignoreMap":181},[169,145953,145954],{},"less保存时会自动变成.css文件",[169,145956,145957],{},"好好搞懂上述代码写法",[29,145959,145961],{"id":145960},"_2132-样式导入样式","21.3.2 样式导入样式",[164,145963],{"style":166,"src":145964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[29,145966,145968],{"id":145967},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[34,145970,145971],{},[22,145972,145973],{},"准备工作",[164,145975],{"style":166,"src":145976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[169,145978,145979,145980],{},"github地址：",[948,145981,145982],{"href":145982,"rel":145983},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[952],[169,145985,145986],{},"下载之后，将index.js文件拖到项目中就可以了",[169,145988,145989,145990],{},"js文件引入到index.html中使用的是",[183,145991,145992],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[34,145994,145995],{"start":49},[22,145996,145997],{},"vscode插件",[164,145999],{"style":166,"src":146000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[169,146002,146003],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[169,146005,146006],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[164,146008],{"style":166,"src":146009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[169,146011,146012],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[164,146014],{"style":166,"src":146015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[169,146017,146018],{},"修改成75就可以，alt+z为快捷键",[169,146020,146021],{},"index.css：",[176,146023,146024],{"className":178,"code":145766,"language":180,"meta":181,"style":181},[183,146025,146026,146030,146036,146050,146054,146060,146074],{"__ignoreMap":181},[186,146027,146028],{"class":188,"line":189},[186,146029,145773],{"class":192},[186,146031,146032,146034],{"class":188,"line":49},[186,146033,52089],{"class":523},[186,146035,622],{"class":202},[186,146037,146038,146040,146042,146044,146046,146048],{"class":188,"line":219},[186,146039,72061],{"class":206},[186,146041,210],{"class":202},[186,146043,145788],{"class":206},[186,146045,670],{"class":669},[186,146047,131835],{"class":202},[186,146049,145795],{"class":192},[186,146051,146052],{"class":188,"line":225},[186,146053,639],{"class":202},[186,146055,146056,146058],{"class":188,"line":242},[186,146057,131820],{"class":198},[186,146059,622],{"class":202},[186,146061,146062,146064,146066,146068,146070,146072],{"class":188,"line":248},[186,146063,796],{"class":206},[186,146065,210],{"class":202},[186,146067,2056],{"class":206},[186,146069,145816],{"class":669},[186,146071,131835],{"class":202},[186,146073,145821],{"class":192},[186,146075,146076],{"class":188,"line":265},[186,146077,639],{"class":202},[169,146079,145763],{},[176,146081,146082],{"className":178,"code":128384,"language":180,"meta":181,"style":181},[183,146083,146084,146090,146102],{"__ignoreMap":181},[186,146085,146086,146088],{"class":188,"line":189},[186,146087,53247],{"class":523},[186,146089,622],{"class":202},[186,146091,146092,146094,146096,146098,146100],{"class":188,"line":49},[186,146093,72061],{"class":206},[186,146095,210],{"class":202},[186,146097,2211],{"class":206},[186,146099,804],{"class":669},[186,146101,634],{"class":202},[186,146103,146104],{"class":188,"line":219},[186,146105,639],{"class":202},[14,146107,146109],{"id":146108},"_214-响应式开发","21.4 响应式开发",[169,146111,146112],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[164,146114],{"style":166,"src":146115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[169,146117,146118],{},"做法：",[19,146120,146121,146124],{},[22,146122,146123],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[22,146125,146126],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[164,146128],{"style":166,"src":146129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[169,146131,146132],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[29,146134,146136],{"id":146135},"_2141-简单代码示范","21.4.1 简单代码示范",[176,146138,146139],{"className":178,"code":145766,"language":180,"meta":181,"style":181},[183,146140,146141,146145,146151,146165,146169,146175,146189],{"__ignoreMap":181},[186,146142,146143],{"class":188,"line":189},[186,146144,145773],{"class":192},[186,146146,146147,146149],{"class":188,"line":49},[186,146148,52089],{"class":523},[186,146150,622],{"class":202},[186,146152,146153,146155,146157,146159,146161,146163],{"class":188,"line":219},[186,146154,72061],{"class":206},[186,146156,210],{"class":202},[186,146158,145788],{"class":206},[186,146160,670],{"class":669},[186,146162,131835],{"class":202},[186,146164,145795],{"class":192},[186,146166,146167],{"class":188,"line":225},[186,146168,639],{"class":202},[186,146170,146171,146173],{"class":188,"line":242},[186,146172,131820],{"class":198},[186,146174,622],{"class":202},[186,146176,146177,146179,146181,146183,146185,146187],{"class":188,"line":248},[186,146178,796],{"class":206},[186,146180,210],{"class":202},[186,146182,2056],{"class":206},[186,146184,145816],{"class":669},[186,146186,131835],{"class":202},[186,146188,145821],{"class":192},[186,146190,146191],{"class":188,"line":265},[186,146192,639],{"class":202},[169,146194,146195],{},"父盒子一般命名为container",[29,146197,146199],{"id":146198},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[169,146201,146202,146203],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[54,146204,146205],{},"使得 Web 开发更加快捷",[19,146207,146208],{},[22,146209,146210,146211],{},"官网：",[54,146212,146213],{},[948,146214,146215],{"href":146215,"rel":146216},"http:\u002F\u002Fgetbootstrap.com\u002F",[952],[169,146218,146219],{},"可以直接去官网拿现成的东西",[34,146221,146222],{},[22,146223,146224],{},"Bootstrap的使用",[169,146226,146227],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[169,146229,146230],{},"Bootstrap 使用四步曲：",[169,146232,146233,146236],{},[54,146234,146235],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[164,146238],{"style":166,"src":146239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[169,146241,146242],{},"打开Bootstrap官网，然后下载",[164,146244],{"style":166,"src":146245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[164,146247],{"style":166,"src":146248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[169,146250,146251],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[169,146253,146254],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[169,146256,146257],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[164,146259],{"style":166,"src":146260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[176,146262,146264],{"className":178,"code":146263,"language":180,"meta":181,"style":181},".center {\n  color: red;\n}\n",[183,146265,146266,146272,146282],{"__ignoreMap":181},[186,146267,146268,146270],{"class":188,"line":189},[186,146269,128271],{"class":198},[186,146271,622],{"class":202},[186,146273,146274,146276,146278,146280],{"class":188,"line":49},[186,146275,72339],{"class":206},[186,146277,210],{"class":202},[186,146279,58862],{"class":206},[186,146281,634],{"class":202},[186,146283,146284],{"class":188,"line":219},[186,146285,639],{"class":202},[169,146287,146288,146291],{},[183,146289,146290],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[164,146293],{"style":166,"src":146294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[164,146296],{"style":166,"src":146297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[164,146299],{"style":166,"src":146300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[169,146302,146303],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[164,146305],{"style":166,"src":146306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[169,146308,146309],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[34,146311,146312],{"start":49},[22,146313,146314],{},"布局容器",[164,146316],{"style":166,"src":146317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[169,146319,146320],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[169,146322,146323],{},"container-fluid用于移动式布局比较方便",[34,146325,146326],{"start":219},[22,146327,146328,146329],{},"bootstrap ",[54,146330,146331],{},"栅格系统原理",[164,146333],{"style":166,"src":146334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[34,146336,146337],{"start":225},[22,146338,146339],{},[54,146340,146341],{},"栅格选项参数",[164,146343],{"style":166,"src":146344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[169,146346,146347],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[169,146349,16095],{},[176,146351,146352],{"className":178,"code":146263,"language":180,"meta":181,"style":181},[183,146353,146354,146360,146370],{"__ignoreMap":181},[186,146355,146356,146358],{"class":188,"line":189},[186,146357,128271],{"class":198},[186,146359,622],{"class":202},[186,146361,146362,146364,146366,146368],{"class":188,"line":49},[186,146363,72339],{"class":206},[186,146365,210],{"class":202},[186,146367,58862],{"class":206},[186,146369,634],{"class":202},[186,146371,146372],{"class":188,"line":219},[186,146373,639],{"class":202},[169,146375,136792],{},[164,146377],{"style":166,"src":146378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[169,146380,146381],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[169,146383,146384],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[169,146386,146387],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[169,146389,146390],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[169,146392,146393],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[169,146395,146396],{},"汇总展示说明：",[176,146398,146399],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,146400,146401,146405,146419,146423],{"__ignoreMap":181},[186,146402,146403],{"class":188,"line":189},[186,146404,1443],{"class":192},[186,146406,146407,146409,146411,146413,146415,146417],{"class":188,"line":49},[186,146408,520],{"class":202},[186,146410,1450],{"class":523},[186,146412,1453],{"class":198},[186,146414,529],{"class":202},[186,146416,1458],{"class":532},[186,146418,552],{"class":202},[186,146420,146421],{"class":188,"line":219},[186,146422,1465],{"class":202},[186,146424,146425,146427,146429],{"class":188,"line":225},[186,146426,1470],{"class":202},[186,146428,1450],{"class":523},[186,146430,552],{"class":202},[164,146432],{"style":166,"src":146433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[169,146435,146436],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[176,146438,146439],{"className":511,"code":1436,"language":513,"meta":181,"style":181},[183,146440,146441,146445,146459,146463],{"__ignoreMap":181},[186,146442,146443],{"class":188,"line":189},[186,146444,1443],{"class":192},[186,146446,146447,146449,146451,146453,146455,146457],{"class":188,"line":49},[186,146448,520],{"class":202},[186,146450,1450],{"class":523},[186,146452,1453],{"class":198},[186,146454,529],{"class":202},[186,146456,1458],{"class":532},[186,146458,552],{"class":202},[186,146460,146461],{"class":188,"line":219},[186,146462,1465],{"class":202},[186,146464,146465,146467,146469],{"class":188,"line":225},[186,146466,1470],{"class":202},[186,146468,1450],{"class":523},[186,146470,552],{"class":202},[34,146472,146473],{"start":242},[22,146474,146475],{},[54,146476,146477],{},"列嵌套",[164,146479],{"style":166,"src":146480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[169,146482,146483],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[169,146485,146486],{},"没加row内部这样：",[164,146488],{"style":166,"src":146489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[169,146491,146492],{},"加上row之后内部为：",[164,146494],{"style":166,"src":146495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[34,146497,146498],{"start":248},[22,146499,146500],{},[54,146501,146502],{},"列偏移",[164,146504],{"style":166,"src":146505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[169,146507,146508],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[169,146510,146511],{},"要加偏移量，即偏移份数",[169,146513,146514],{},"偏移的份数=12-两个盒子的份数",[34,146516,146517],{"start":265},[22,146518,146519],{},[54,146520,146521],{},"列排序",[164,146523],{"style":166,"src":146524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[169,146526,146527],{},"pull拉左；push推右",[34,146529,146530],{"start":271},[22,146531,146532],{},[54,146533,146534],{},"响应式工具",[164,146536],{"style":166,"src":146537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[169,146539,146540],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[29,146542,146544],{"id":146543},"_2143-响应式小项目","21.4.3 响应式小项目",[169,146546,146547],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[169,146549,146550],{},"ul {",[169,146552,146553],{},"list-style: none;",[169,146555,146556],{},"margin:0;",[169,146558,146559],{},"padding:0; }",[164,146561],{"style":166,"src":146562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[164,146564],{"style":166,"src":146565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[169,146567,146568],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[169,146570,70326],{},[176,146572,146573],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,146574,146575,146581,146591],{"__ignoreMap":181},[186,146576,146577,146579],{"class":188,"line":189},[186,146578,131820],{"class":198},[186,146580,622],{"class":202},[186,146582,146583,146585,146587,146589],{"class":188,"line":49},[186,146584,132448],{"class":206},[186,146586,210],{"class":202},[186,146588,110],{"class":206},[186,146590,634],{"class":202},[186,146592,146593],{"class":188,"line":219},[186,146594,639],{"class":202},[169,146596,71890],{},[176,146598,146599],{"className":178,"code":140419,"language":180,"meta":181,"style":181},[183,146600,146601,146607,146617],{"__ignoreMap":181},[186,146602,146603,146605],{"class":188,"line":189},[186,146604,131820],{"class":198},[186,146606,622],{"class":202},[186,146608,146609,146611,146613,146615],{"class":188,"line":49},[186,146610,132448],{"class":206},[186,146612,210],{"class":202},[186,146614,110],{"class":206},[186,146616,634],{"class":202},[186,146618,146619],{"class":188,"line":219},[186,146620,639],{"class":202},[14,146622,146624],{"id":146623},"_215-swiper-插件使用","21.5 swiper 插件使用",[19,146626,146627,146630,146633],{},[22,146628,146629],{},"下载需要的css和js文件html页面中 引入相关文件",[22,146631,146632],{},"官网找到类似案例，复制html结构，css样式 js 语法",[22,146634,146635],{},"根据需求定制修改模块",[164,146637],{"style":166,"src":146638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[169,146640,146641],{},"解压后将这两部分放到项目中",[164,146643],{"style":166,"src":146644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[169,146646,146647],{},"这个插件可以帮助我们实现轮播图效果",[169,146649,146650],{},"用法：",[164,146652],{"style":166,"src":146653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[169,146655,146656],{},"找到自己喜欢的",[164,146658],{"style":166,"src":146659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[169,146661,146662],{},"右键，查看网页源代码",[164,146664],{"style":166,"src":146665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[169,146667,146668],{},"复制人家的结构内容",[169,146670,146671],{},"然后去看API文档：",[164,146673],{"style":166,"src":146674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[169,146676,146677],{},"可以看看如何修改样式",[169,146679,146680],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1524,146682,146683],{},"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":181,"searchDepth":49,"depth":49,"links":146685},[146686,146691,146695,146700,146705],{"id":145486,"depth":49,"text":145487,"children":146687},[146688,146689,146690],{"id":145490,"depth":219,"text":145491},{"id":145500,"depth":219,"text":145501},{"id":145595,"depth":219,"text":145596},{"id":145610,"depth":49,"text":145611,"children":146692},[146693,146694],{"id":145632,"depth":219,"text":145633},{"id":145648,"depth":219,"text":145649},{"id":145723,"depth":49,"text":145724,"children":146696},[146697,146698,146699],{"id":145736,"depth":219,"text":145737},{"id":145960,"depth":219,"text":145961},{"id":145967,"depth":219,"text":145968},{"id":146108,"depth":49,"text":146109,"children":146701},[146702,146703,146704],{"id":146135,"depth":219,"text":146136},{"id":146198,"depth":219,"text":146199},{"id":146543,"depth":219,"text":146544},{"id":146623,"depth":49,"text":146624},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145478,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146712,"title":146713,"body":146714,"description":1548,"extension":1549,"meta":146934,"navigation":1551,"path":146935,"seo":146936,"stem":146937,"__hash__":146938},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146715,"toc":146930},[146716,146719,146723,146726,146741,146746,146749,146754,146789,146794,146806,146811,146824,146829,146846,146851,146871,146876,146894,146897,146900,146903,146906,146910,146913,146916,146919,146922,146925,146928],[10,146717,146713],{"id":146718},"_22-代码提交与新型相对单位",[14,146720,146722],{"id":146721},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[169,146724,146725],{},"法1：",[34,146727,146728,146735,146738],{},[22,146729,146730,146731],{},"登录网站注册：",[948,146732,146733],{"href":146733,"rel":146734},"https:\u002F\u002Fgitee.com\u002F",[952],[22,146736,146737],{},"码云创建新的仓库",[22,146739,146740],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[19,146742,146743],{},[22,146744,146745],{},"在网站根目录右键-- Git Bash Here",[164,146747],{"style":166,"src":146748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[19,146750,146751],{},[22,146752,146753],{},"如果是第一次利用git提交，请配置好全局选项",[176,146755,146757],{"className":118727,"code":146756,"language":118729,"meta":181,"style":181},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[183,146758,146759,146775],{"__ignoreMap":181},[186,146760,146761,146764,146766,146769,146772],{"class":188,"line":189},[186,146762,146763],{"class":198},"git",[186,146765,121150],{"class":532},[186,146767,146768],{"class":206}," --global",[186,146770,146771],{"class":532}," user.name",[186,146773,146774],{"class":532}," \"你的名字\"\n",[186,146776,146777,146779,146781,146783,146786],{"class":188,"line":49},[186,146778,146763],{"class":198},[186,146780,121150],{"class":532},[186,146782,146768],{"class":206},[186,146784,146785],{"class":532}," user.email",[186,146787,146788],{"class":532}," \"你的邮箱\"\n",[19,146790,146791],{},[22,146792,146793],{},"初始化仓库",[176,146795,146797],{"className":118727,"code":146796,"language":118729,"meta":181,"style":181},"git init\n",[183,146798,146799],{"__ignoreMap":181},[186,146800,146801,146803],{"class":188,"line":189},[186,146802,146763],{"class":198},[186,146804,146805],{"class":532}," init\n",[19,146807,146808],{},[22,146809,146810],{},"把本地文件放到暂存区",[176,146812,146814],{"className":118727,"code":146813,"language":118729,"meta":181,"style":181},"git add .\n",[183,146815,146816],{"__ignoreMap":181},[186,146817,146818,146820,146822],{"class":188,"line":189},[186,146819,146763],{"class":198},[186,146821,6673],{"class":532},[186,146823,30196],{"class":532},[19,146825,146826],{},[22,146827,146828],{},"把本地文件放到本地仓库里面",[176,146830,146832],{"className":118727,"code":146831,"language":118729,"meta":181,"style":181},"git commit -m \"first commit\"\n",[183,146833,146834],{"__ignoreMap":181},[186,146835,146836,146838,146841,146843],{"class":188,"line":189},[186,146837,146763],{"class":198},[186,146839,146840],{"class":532}," commit",[186,146842,102313],{"class":206},[186,146844,146845],{"class":532}," \"first commit\"\n",[19,146847,146848],{},[22,146849,146850],{},"链接远程仓库",[176,146852,146854],{"className":118727,"code":146853,"language":118729,"meta":181,"style":181},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[183,146855,146856],{"__ignoreMap":181},[186,146857,146858,146860,146863,146865,146868],{"class":188,"line":189},[186,146859,146763],{"class":198},[186,146861,146862],{"class":532}," remote",[186,146864,6673],{"class":532},[186,146866,146867],{"class":532}," origin",[186,146869,146870],{"class":532}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[19,146872,146873],{},[22,146874,146875],{},"把本地仓库的文件推送到远程仓库 push",[176,146877,146879],{"className":118727,"code":146878,"language":118729,"meta":181,"style":181},"git push -u origin master\n",[183,146880,146881],{"__ignoreMap":181},[186,146882,146883,146885,146887,146889,146891],{"class":188,"line":189},[186,146884,146763],{"class":198},[186,146886,30471],{"class":532},[186,146888,29746],{"class":206},[186,146890,146867],{"class":532},[186,146892,146893],{"class":532}," master\n",[164,146895],{"style":166,"src":146896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[169,146898,146899],{},"上方方法暂未实现，后边学完git后在整",[169,146901,146902],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[164,146904],{"style":166,"src":146905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146907,146909],{"id":146908},"_222-新型相对单位","22.2 新型相对单位",[164,146911],{"style":166,"src":146912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[164,146914],{"style":166,"src":146915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[169,146917,146918],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[169,146920,146921],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[164,146923],{"style":166,"src":146924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[169,146926,146927],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1524,146929,25416],{},{"title":181,"searchDepth":49,"depth":49,"links":146931},[146932,146933],{"id":146721,"depth":49,"text":146722},{"id":146908,"depth":49,"text":146909},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146713,"description":1548},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146940,"title":146941,"body":146942,"description":146946,"extension":1549,"meta":146947,"navigation":1551,"path":146948,"seo":146949,"stem":146950,"__hash__":146951},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146943,"toc":146944},[],{"title":181,"searchDepth":49,"depth":49,"links":146945},[],"自己正经开始学编程的第一门语言！",{"category":94270},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146941,"description":146946},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146953,"title":146954,"body":146955,"description":1548,"extension":1549,"meta":148102,"navigation":1551,"path":148103,"seo":148104,"stem":148105,"__hash__":148106},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146956,"toc":148078},[146957,146960,146964,146967,146970,146995,146998,147004,147008,147011,147038,147041,147081,147084,147096,147099,147105,147109,147113,147140,147157,147164,147168,147171,147197,147200,147204,147207,147247,147250,147267,147273,147277,147282,147326,147329,147347,147350,147418,147422,147429,147432,147447,147450,147459,147462,147473,147476,147485,147488,147505,147508,147523,147527,147531,147534,147536,147556,147560,147563,147566,147577,147580,147586,147590,147596,147623,147626,147638,147641,147652,147655,147661,147665,147671,147721,147724,147766,147769,147802,147805,147839,147843,147846,147866,147869,147905,147908,147921,147925,147929,147935,147938,147951,147955,147958,147964,147967,147971,147974,147977,148026,148030,148046,148052,148059,148065,148075],[10,146958,146954],{"id":146959},"_1-python环境与第一个程序",[14,146961,146963],{"id":146962},"_11-什么是python","1.1 什么是Python",[169,146965,146966],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[169,146968,146969],{},"理解 Python 时抓住三个关键词：",[34,146971,146972,146975,146978],{},[22,146973,146974],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[22,146976,146977],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[22,146979,146980,146981,1824,146984,1824,146987,1824,146990,1824,146992,913],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[183,146982,146983],{},"os",[183,146985,146986],{},"sys",[183,146988,146989],{},"json",[183,146991,59301],{},[183,146993,146994],{},"datetime",[169,146996,146997],{},"Python 程序的运行链路：",[176,146999,147002],{"className":147000,"code":147001,"language":753,"meta":181},[751],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[183,147003,147001],{"__ignoreMap":181},[14,147005,147007],{"id":147006},"_12-python解释器","1.2 Python解释器",[169,147009,147010],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[176,147012,147014],{"className":25281,"code":147013,"language":25283,"meta":181,"style":181},"python --version\npython3 --version\npython\npython3\n",[183,147015,147016,147022,147028,147033],{"__ignoreMap":181},[186,147017,147018,147020],{"class":188,"line":189},[186,147019,31835],{"class":198},[186,147021,27750],{"class":206},[186,147023,147024,147026],{"class":188,"line":49},[186,147025,102310],{"class":198},[186,147027,27750],{"class":206},[186,147029,147030],{"class":188,"line":219},[186,147031,147032],{"class":198},"python\n",[186,147034,147035],{"class":188,"line":225},[186,147036,147037],{"class":198},"python3\n",[169,147039,147040],{},"进入交互模式后，可以直接输入表达式：",[176,147042,147044],{"className":31833,"code":147043,"language":31835,"meta":181,"style":181},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[183,147045,147046,147057,147062,147076],{"__ignoreMap":181},[186,147047,147048,147051,147053,147055],{"class":188,"line":189},[186,147049,147050],{"class":669},">>>",[186,147052,26577],{"class":206},[186,147054,47020],{"class":669},[186,147056,49177],{"class":206},[186,147058,147059],{"class":188,"line":49},[186,147060,147061],{"class":206},"3\n",[186,147063,147064,147066,147069,147071,147074],{"class":188,"line":219},[186,147065,147050],{"class":669},[186,147067,147068],{"class":206}," print",[186,147070,832],{"class":202},[186,147072,147073],{"class":532},"\"hello python\"",[186,147075,1629],{"class":202},[186,147077,147078],{"class":188,"line":225},[186,147079,147080],{"class":202},"hello python\n",[169,147082,147083],{},"退出交互模式：",[176,147085,147087],{"className":31833,"code":147086,"language":31835,"meta":181,"style":181},"exit()\n",[183,147088,147089],{"__ignoreMap":181},[186,147090,147091,147094],{"class":188,"line":189},[186,147092,147093],{"class":206},"exit",[186,147095,3443],{"class":202},[169,147097,147098],{},"或使用快捷键：",[176,147100,147103],{"className":147101,"code":147102,"language":753,"meta":181},[751],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[183,147104,147102],{"__ignoreMap":181},[14,147106,147108],{"id":147107},"_13-安装python","1.3 安装Python",[29,147110,147112],{"id":147111},"_131-windows安装","1.3.1 Windows安装",[34,147114,147115,147122,147125,147131,147137],{},[22,147116,147117,147118],{},"打开 Python 官网：",[948,147119,147120],{"href":147120,"rel":147121},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[952],[22,147123,147124],{},"下载 Windows Installer。",[22,147126,147127,147128,913],{},"安装时勾选 ",[183,147129,147130],{},"Add Python to PATH",[22,147132,147133,147134,913],{},"点击 ",[183,147135,147136],{},"Install Now",[22,147138,147139],{},"安装完成后打开命令提示符验证：",[176,147141,147143],{"className":25281,"code":147142,"language":25283,"meta":181,"style":181},"python --version\npip --version\n",[183,147144,147145,147151],{"__ignoreMap":181},[186,147146,147147,147149],{"class":188,"line":189},[186,147148,31835],{"class":198},[186,147150,27750],{"class":206},[186,147152,147153,147155],{"class":188,"line":49},[186,147154,25290],{"class":198},[186,147156,27750],{"class":206},[169,147158,147159,147160,147163],{},"如果提示 ",[183,147161,147162],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[29,147165,147167],{"id":147166},"_132-macos安装","1.3.2 macOS安装",[169,147169,147170],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[176,147172,147174],{"className":25281,"code":147173,"language":25283,"meta":181,"style":181},"brew install python\npython3 --version\npip3 --version\n",[183,147175,147176,147185,147191],{"__ignoreMap":181},[186,147177,147178,147181,147183],{"class":188,"line":189},[186,147179,147180],{"class":198},"brew",[186,147182,25293],{"class":532},[186,147184,125749],{"class":532},[186,147186,147187,147189],{"class":188,"line":49},[186,147188,102310],{"class":198},[186,147190,27750],{"class":206},[186,147192,147193,147195],{"class":188,"line":219},[186,147194,121131],{"class":198},[186,147196,27750],{"class":206},[169,147198,147199],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[29,147201,147203],{"id":147202},"_133-linux安装","1.3.3 Linux安装",[169,147205,147206],{},"Ubuntu\u002FDebian：",[176,147208,147210],{"className":25281,"code":147209,"language":25283,"meta":181,"style":181},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[183,147211,147212,147220,147235,147241],{"__ignoreMap":181},[186,147213,147214,147216,147218],{"class":188,"line":189},[186,147215,26035],{"class":198},[186,147217,118748],{"class":532},[186,147219,27699],{"class":532},[186,147221,147222,147224,147226,147228,147230,147232],{"class":188,"line":49},[186,147223,26035],{"class":198},[186,147225,118748],{"class":532},[186,147227,25293],{"class":532},[186,147229,105834],{"class":532},[186,147231,102229],{"class":532},[186,147233,147234],{"class":532}," python3-venv\n",[186,147236,147237,147239],{"class":188,"line":219},[186,147238,102310],{"class":198},[186,147240,27750],{"class":206},[186,147242,147243,147245],{"class":188,"line":225},[186,147244,121131],{"class":198},[186,147246,27750],{"class":206},[169,147248,147249],{},"Fedora：",[176,147251,147253],{"className":25281,"code":147252,"language":25283,"meta":181,"style":181},"sudo dnf install python3 python3-pip\n",[183,147254,147255],{"__ignoreMap":181},[186,147256,147257,147259,147261,147263,147265],{"class":188,"line":189},[186,147258,26035],{"class":198},[186,147260,27772],{"class":532},[186,147262,25293],{"class":532},[186,147264,105834],{"class":532},[186,147266,121196],{"class":532},[169,147268,147269,147270,147272],{},"Linux 上通常使用 ",[183,147271,102310],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147274,147276],{"id":147275},"_14-pip包管理器","1.4 pip包管理器",[169,147278,147279,147281],{},[183,147280,25290],{}," 用来安装第三方库。",[176,147283,147285],{"className":25281,"code":147284,"language":25283,"meta":181,"style":181},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[183,147286,147287,147296,147305,147313,147319],{"__ignoreMap":181},[186,147288,147289,147291,147293],{"class":188,"line":189},[186,147290,25290],{"class":198},[186,147292,25293],{"class":532},[186,147294,147295],{"class":532}," requests\n",[186,147297,147298,147300,147303],{"class":188,"line":49},[186,147299,25290],{"class":198},[186,147301,147302],{"class":532}," uninstall",[186,147304,147295],{"class":532},[186,147306,147307,147309,147311],{"class":188,"line":219},[186,147308,25290],{"class":198},[186,147310,119005],{"class":532},[186,147312,147295],{"class":532},[186,147314,147315,147317],{"class":188,"line":225},[186,147316,25290],{"class":198},[186,147318,120386],{"class":532},[186,147320,147321,147323],{"class":188,"line":242},[186,147322,25290],{"class":198},[186,147324,147325],{"class":532}," freeze\n",[169,147327,147328],{},"国内网络较慢时可以临时使用镜像：",[176,147330,147332],{"className":25281,"code":147331,"language":25283,"meta":181,"style":181},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[183,147333,147334],{"__ignoreMap":181},[186,147335,147336,147338,147340,147343,147345],{"class":188,"line":189},[186,147337,25290],{"class":198},[186,147339,25293],{"class":532},[186,147341,147342],{"class":532}," requests",[186,147344,27887],{"class":206},[186,147346,121159],{"class":532},[169,147348,147349],{},"常见第三方库：",[99,147351,147352,147361],{},[102,147353,147354],{},[105,147355,147356,147359],{},[108,147357,147358],{},"库",[108,147360,104127],{},[116,147362,147363,147371,147378,147386,147394,147402,147410],{},[105,147364,147365,147368],{},[121,147366,147367],{},"requests",[121,147369,147370],{},"网络请求",[105,147372,147373,147375],{},[121,147374,102057],{},[121,147376,147377],{},"数值计算",[105,147379,147380,147383],{},[121,147381,147382],{},"pandas",[121,147384,147385],{},"表格数据处理",[105,147387,147388,147391],{},[121,147389,147390],{},"matplotlib",[121,147392,147393],{},"绘图",[105,147395,147396,147399],{},[121,147397,147398],{},"pyecharts",[121,147400,147401],{},"ECharts 图表",[105,147403,147404,147407],{},[121,147405,147406],{},"flask",[121,147408,147409],{},"Web 后端",[105,147411,147412,147415],{},[121,147413,147414],{},"pytest",[121,147416,147417],{},"自动化测试",[14,147419,147421],{"id":147420},"_15-虚拟环境","1.5 虚拟环境",[169,147423,147424,147425,147428],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[183,147426,147427],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[169,147430,147431],{},"创建虚拟环境：",[176,147433,147435],{"className":25281,"code":147434,"language":25283,"meta":181,"style":181},"python -m venv .venv\n",[183,147436,147437],{"__ignoreMap":181},[186,147438,147439,147441,147443,147445],{"class":188,"line":189},[186,147440,31835],{"class":198},[186,147442,102313],{"class":206},[186,147444,102316],{"class":532},[186,147446,102319],{"class":532},[169,147448,147449],{},"Windows 激活：",[176,147451,147453],{"className":25281,"code":147452,"language":25283,"meta":181,"style":181},".venv\\Scripts\\activate\n",[183,147454,147455],{"__ignoreMap":181},[186,147456,147457],{"class":188,"line":189},[186,147458,147452],{"class":198},[169,147460,147461],{},"macOS\u002FLinux 激活：",[176,147463,147465],{"className":25281,"code":147464,"language":25283,"meta":181,"style":181},"source .venv\u002Fbin\u002Factivate\n",[183,147466,147467],{"__ignoreMap":181},[186,147468,147469,147471],{"class":188,"line":189},[186,147470,102324],{"class":206},[186,147472,102327],{"class":532},[169,147474,147475],{},"退出虚拟环境：",[176,147477,147479],{"className":25281,"code":147478,"language":25283,"meta":181,"style":181},"deactivate\n",[183,147480,147481],{"__ignoreMap":181},[186,147482,147483],{"class":188,"line":189},[186,147484,147478],{"class":198},[169,147486,147487],{},"保存依赖：",[176,147489,147491],{"className":25281,"code":147490,"language":25283,"meta":181,"style":181},"pip freeze > requirements.txt\n",[183,147492,147493],{"__ignoreMap":181},[186,147494,147495,147497,147500,147502],{"class":188,"line":189},[186,147496,25290],{"class":198},[186,147498,147499],{"class":532}," freeze",[186,147501,27679],{"class":669},[186,147503,147504],{"class":532}," requirements.txt\n",[169,147506,147507],{},"安装依赖：",[176,147509,147511],{"className":25281,"code":147510,"language":25283,"meta":181,"style":181},"pip install -r requirements.txt\n",[183,147512,147513],{"__ignoreMap":181},[186,147514,147515,147517,147519,147521],{"class":188,"line":189},[186,147516,25290],{"class":198},[186,147518,25293],{"class":532},[186,147520,121070],{"class":206},[186,147522,147504],{"class":532},[14,147524,147526],{"id":147525},"_16-开发工具","1.6 开发工具",[29,147528,147530],{"id":147529},"_161-pycharm","1.6.1 PyCharm",[169,147532,147533],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[169,147535,123493],{},[34,147537,147538,147541,147544,147550,147553],{},[22,147539,147540],{},"New Project：创建项目。",[22,147542,147543],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[22,147545,147546,147547,127414],{},"New Python File：创建 ",[183,147548,147549],{},".py",[22,147551,147552],{},"Run：运行当前文件。",[22,147554,147555],{},"Debug：断点调试。",[29,147557,147559],{"id":147558},"_162-vs-code","1.6.2 VS Code",[169,147561,147562],{},"VS Code 轻量，适合后续多语言开发。",[169,147564,147565],{},"建议安装插件：",[34,147567,147568,147571,147574],{},[22,147569,147570],{},"Python。",[22,147572,147573],{},"Pylance。",[22,147575,147576],{},"Jupyter。",[169,147578,147579],{},"选择解释器：",[176,147581,147584],{"className":147582,"code":147583,"language":753,"meta":181},[751],"Ctrl + Shift + P -> Python: Select Interpreter\n",[183,147585,147583],{"__ignoreMap":181},[14,147587,147589],{"id":147588},"_17-第一个python程序","1.7 第一个Python程序",[169,147591,147592,147593,26077],{},"创建文件 ",[183,147594,147595],{},"hello.py",[176,147597,147599],{"className":31833,"code":147598,"language":31835,"meta":181,"style":181},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[183,147600,147601,147612],{"__ignoreMap":181},[186,147602,147603,147605,147607,147610],{"class":188,"line":189},[186,147604,31870],{"class":206},[186,147606,832],{"class":202},[186,147608,147609],{"class":532},"\"Hello World\"",[186,147611,1629],{"class":202},[186,147613,147614,147616,147618,147621],{"class":188,"line":49},[186,147615,31870],{"class":206},[186,147617,832],{"class":202},[186,147619,147620],{"class":532},"\"你好，Python\"",[186,147622,1629],{"class":202},[169,147624,147625],{},"在终端运行：",[176,147627,147629],{"className":25281,"code":147628,"language":25283,"meta":181,"style":181},"python hello.py\n",[183,147630,147631],{"__ignoreMap":181},[186,147632,147633,147635],{"class":188,"line":189},[186,147634,31835],{"class":198},[186,147636,147637],{"class":532}," hello.py\n",[169,147639,147640],{},"或：",[176,147642,147644],{"className":25281,"code":147643,"language":25283,"meta":181,"style":181},"python3 hello.py\n",[183,147645,147646],{"__ignoreMap":181},[186,147647,147648,147650],{"class":188,"line":189},[186,147649,102310],{"class":198},[186,147651,147637],{"class":532},[169,147653,147654],{},"输出：",[176,147656,147659],{"className":147657,"code":147658,"language":753,"meta":181},[751],"Hello World\n你好，Python\n",[183,147660,147658],{"__ignoreMap":181},[14,147662,147664],{"id":147663},"_18-print函数","1.8 print函数",[169,147666,147667,147670],{},[183,147668,147669],{},"print()"," 用来输出内容。",[176,147672,147674],{"className":31833,"code":147673,"language":31835,"meta":181,"style":181},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[183,147675,147676,147686,147696,147706],{"__ignoreMap":181},[186,147677,147678,147680,147682,147684],{"class":188,"line":189},[186,147679,31870],{"class":206},[186,147681,832],{"class":202},[186,147683,7307],{"class":532},[186,147685,1629],{"class":202},[186,147687,147688,147690,147692,147694],{"class":188,"line":49},[186,147689,31870],{"class":206},[186,147691,832],{"class":202},[186,147693,1922],{"class":206},[186,147695,1629],{"class":202},[186,147697,147698,147700,147702,147704],{"class":188,"line":219},[186,147699,31870],{"class":206},[186,147701,832],{"class":202},[186,147703,1670],{"class":206},[186,147705,1629],{"class":202},[186,147707,147708,147710,147712,147715,147717,147719],{"class":188,"line":225},[186,147709,31870],{"class":206},[186,147711,832],{"class":202},[186,147713,147714],{"class":532},"\"年龄:\"",[186,147716,13898],{"class":202},[186,147718,2260],{"class":206},[186,147720,1629],{"class":202},[169,147722,147723],{},"多个内容用逗号隔开，默认中间加空格：",[176,147725,147727],{"className":31833,"code":147726,"language":31835,"meta":181,"style":181},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[183,147728,147729,147739,147749],{"__ignoreMap":181},[186,147730,147731,147734,147736],{"class":188,"line":189},[186,147732,147733],{"class":202},"name ",[186,147735,529],{"class":669},[186,147737,147738],{"class":532}," \"张三\"\n",[186,147740,147741,147744,147746],{"class":188,"line":49},[186,147742,147743],{"class":202},"age ",[186,147745,529],{"class":669},[186,147747,147748],{"class":206}," 18\n",[186,147750,147751,147753,147755,147758,147761,147763],{"class":188,"line":219},[186,147752,31870],{"class":206},[186,147754,832],{"class":202},[186,147756,147757],{"class":532},"\"姓名:\"",[186,147759,147760],{"class":202},", name, ",[186,147762,147714],{"class":532},[186,147764,147765],{"class":202},", age)\n",[169,147767,147768],{},"修改分隔符：",[176,147770,147772],{"className":31833,"code":147771,"language":31835,"meta":181,"style":181},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[183,147773,147774],{"__ignoreMap":181},[186,147775,147776,147778,147780,147783,147785,147787,147789,147791,147793,147796,147798,147800],{"class":188,"line":189},[186,147777,31870],{"class":206},[186,147779,832],{"class":202},[186,147781,147782],{"class":532},"\"2024\"",[186,147784,13898],{"class":202},[186,147786,55761],{"class":532},[186,147788,13898],{"class":202},[186,147790,55761],{"class":532},[186,147792,13898],{"class":202},[186,147794,147795],{"class":835},"sep",[186,147797,529],{"class":669},[186,147799,33938],{"class":532},[186,147801,1629],{"class":202},[169,147803,147804],{},"修改结尾符：",[176,147806,147808],{"className":31833,"code":147807,"language":31835,"meta":181,"style":181},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[183,147809,147810,147828],{"__ignoreMap":181},[186,147811,147812,147814,147816,147818,147820,147822,147824,147826],{"class":188,"line":189},[186,147813,31870],{"class":206},[186,147815,832],{"class":202},[186,147817,7307],{"class":532},[186,147819,13898],{"class":202},[186,147821,47255],{"class":835},[186,147823,529],{"class":669},[186,147825,5825],{"class":532},[186,147827,1629],{"class":202},[186,147829,147830,147832,147834,147837],{"class":188,"line":49},[186,147831,31870],{"class":206},[186,147833,832],{"class":202},[186,147835,147836],{"class":532},"\"python\"",[186,147838,1629],{"class":202},[14,147840,147842],{"id":147841},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[169,147844,147845],{},"交互运行适合临时验证：",[176,147847,147849],{"className":31833,"code":147848,"language":31835,"meta":181,"style":181},">>> 10 * 3\n30\n",[183,147850,147851,147861],{"__ignoreMap":181},[186,147852,147853,147855,147857,147859],{"class":188,"line":189},[186,147854,147050],{"class":669},[186,147856,3505],{"class":206},[186,147858,7981],{"class":669},[186,147860,121467],{"class":206},[186,147862,147863],{"class":188,"line":49},[186,147864,147865],{"class":206},"30\n",[169,147867,147868],{},"脚本运行适合保存程序：",[176,147870,147872],{"className":31833,"code":147871,"language":31835,"meta":181,"style":181},"price = 8\ncount = 5\nprint(price * count)\n",[183,147873,147874,147884,147893],{"__ignoreMap":181},[186,147875,147876,147879,147881],{"class":188,"line":189},[186,147877,147878],{"class":202},"price ",[186,147880,529],{"class":669},[186,147882,147883],{"class":206}," 8\n",[186,147885,147886,147889,147891],{"class":188,"line":49},[186,147887,147888],{"class":202},"count ",[186,147890,529],{"class":669},[186,147892,55872],{"class":206},[186,147894,147895,147897,147900,147902],{"class":188,"line":219},[186,147896,31870],{"class":206},[186,147898,147899],{"class":202},"(price ",[186,147901,2065],{"class":669},[186,147903,147904],{"class":202}," count)\n",[169,147906,147907],{},"实际学习中推荐：",[34,147909,147910,147913,147918],{},[22,147911,147912],{},"临时试一个语法，用交互模式。",[22,147914,147915,147916,127414],{},"写完整练习，用 ",[183,147917,147549],{},[22,147919,147920],{},"写项目，用独立目录和虚拟环境。",[14,147922,147924],{"id":147923},"_110-常见错误","1.10 常见错误",[29,147926,147928],{"id":147927},"_1101-命令找不到","1.10.1 命令找不到",[176,147930,147933],{"className":147931,"code":147932,"language":753,"meta":181},[751],"python: command not found\n",[183,147934,147932],{"__ignoreMap":181},[169,147936,147937],{},"原因：",[34,147939,147940,147943,147946],{},[22,147941,147942],{},"没安装 Python。",[22,147944,147945],{},"PATH 没配置。",[22,147947,147948,147949,913],{},"Linux\u002FmacOS 应该使用 ",[183,147950,102310],{},[29,147952,147954],{"id":147953},"_1102-文件名冲突","1.10.2 文件名冲突",[169,147956,147957],{},"不要把文件命名为：",[176,147959,147962],{"className":147960,"code":147961,"language":753,"meta":181},[751],"random.py\njson.py\ntime.py\nrequests.py\n",[183,147963,147961],{"__ignoreMap":181},[169,147965,147966],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[29,147968,147970],{"id":147969},"_1103-中文乱码","1.10.3 中文乱码",[169,147972,147973],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[169,147975,147976],{},"如果读写文件出现乱码，要明确指定编码：",[176,147978,147980],{"className":31833,"code":147979,"language":31835,"meta":181,"style":181},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[183,147981,147982,148016],{"__ignoreMap":181},[186,147983,147984,147986,147989,147991,147994,147996,147999,148001,148004,148006,148009,148011,148013],{"class":188,"line":189},[186,147985,109264],{"class":669},[186,147987,147988],{"class":206}," open",[186,147990,832],{"class":202},[186,147992,147993],{"class":532},"\"data.txt\"",[186,147995,13898],{"class":202},[186,147997,147998],{"class":532},"\"r\"",[186,148000,13898],{"class":202},[186,148002,148003],{"class":835},"encoding",[186,148005,529],{"class":669},[186,148007,148008],{"class":532},"\"utf-8\"",[186,148010,839],{"class":202},[186,148012,32838],{"class":669},[186,148014,148015],{"class":202}," f:\n",[186,148017,148018,148021,148023],{"class":188,"line":49},[186,148019,148020],{"class":202},"    content ",[186,148022,529],{"class":669},[186,148024,148025],{"class":202}," f.read()\n",[14,148027,148029],{"id":148028},"_111-本章练习","1.11 本章练习",[34,148031,148032,148035,148041],{},[22,148033,148034],{},"安装 Python，并在终端输出版本号。",[22,148036,148037,148038,148040],{},"新建 ",[183,148039,147595],{},"，输出自己的姓名、年龄、学习目标。",[22,148042,105797,148043,148045],{},[183,148044,147669],{}," 输出下面格式：",[176,148047,148050],{"className":148048,"code":148049,"language":753,"meta":181},[751],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[183,148051,148049],{"__ignoreMap":181},[34,148053,148054],{"start":225},[22,148055,105797,148056,148058],{},[183,148057,147795],{}," 输出日期：",[176,148060,148063],{"className":148061,"code":148062,"language":753,"meta":181},[751],"2024-10-10\n",[183,148064,148062],{"__ignoreMap":181},[34,148066,148067],{"start":242},[22,148068,105797,148069,148071,148072,148074],{},[183,148070,47255],{}," 让两次 ",[183,148073,147669],{}," 输出在同一行。",[1524,148076,148077],{},"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":181,"searchDepth":49,"depth":49,"links":148079},[148080,148081,148082,148087,148088,148089,148093,148094,148095,148096,148101],{"id":146962,"depth":49,"text":146963},{"id":147006,"depth":49,"text":147007},{"id":147107,"depth":49,"text":147108,"children":148083},[148084,148085,148086],{"id":147111,"depth":219,"text":147112},{"id":147166,"depth":219,"text":147167},{"id":147202,"depth":219,"text":147203},{"id":147275,"depth":49,"text":147276},{"id":147420,"depth":49,"text":147421},{"id":147525,"depth":49,"text":147526,"children":148090},[148091,148092],{"id":147529,"depth":219,"text":147530},{"id":147558,"depth":219,"text":147559},{"id":147588,"depth":49,"text":147589},{"id":147663,"depth":49,"text":147664},{"id":147841,"depth":49,"text":147842},{"id":147923,"depth":49,"text":147924,"children":148097},[148098,148099,148100],{"id":147927,"depth":219,"text":147928},{"id":147953,"depth":219,"text":147954},{"id":147969,"depth":219,"text":147970},{"id":148028,"depth":49,"text":148029},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146954,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148108,"title":148109,"body":148110,"description":1548,"extension":1549,"meta":150514,"navigation":1551,"path":150515,"seo":150516,"stem":150517,"__hash__":150518},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148111,"toc":150499},[148112,148115,148119,148122,148125,148142,148145,148187,148190,148194,148197,148200,148237,148240,148274,148277,148369,148373,148387,148390,148417,148420,148424,148527,148534,148537,148554,148558,148565,148754,148757,148830,148834,148837,148921,148924,148956,148960,149164,149167,149171,149177,149279,149282,149538,149542,149545,149548,149562,149564,149750,149754,150116,150122,150126,150129,150253,150256,150435,150438,150442,150475,150479,150496],[10,148113,148109],{"id":148114},"_10-json与pyecharts折线图",[14,148116,148118],{"id":148117},"_101-数据可视化","10.1 数据可视化",[169,148120,148121],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[169,148123,148124],{},"常见图表：",[34,148126,148127,148130,148133,148136,148139],{},[22,148128,148129],{},"折线图：看趋势。",[22,148131,148132],{},"柱状图：看分类对比。",[22,148134,148135],{},"饼图：看占比。",[22,148137,148138],{},"地图：看地域分布。",[22,148140,148141],{},"散点图：看两个变量之间的关系。",[169,148143,148144],{},"Python 可视化常用库：",[99,148146,148147,148155],{},[102,148148,148149],{},[105,148150,148151,148153],{},[108,148152,147358],{},[108,148154,1019],{},[116,148156,148157,148164,148172,148179],{},[105,148158,148159,148161],{},[121,148160,147390],{},[121,148162,148163],{},"基础、经典、可定制",[105,148165,148166,148169],{},[121,148167,148168],{},"seaborn",[121,148170,148171],{},"统计图表更美观",[105,148173,148174,148176],{},[121,148175,147398],{},[121,148177,148178],{},"生成交互式网页图表",[105,148180,148181,148184],{},[121,148182,148183],{},"plotly",[121,148185,148186],{},"交互图表能力强",[169,148188,148189],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148191,148193],{"id":148192},"_102-json回顾","10.2 JSON回顾",[169,148195,148196],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[169,148198,148199],{},"Python 字典：",[176,148201,148203],{"className":31833,"code":148202,"language":31835,"meta":181,"style":181},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[183,148204,148205,148213,148224,148233],{"__ignoreMap":181},[186,148206,148207,148209,148211],{"class":188,"line":189},[186,148208,103089],{"class":202},[186,148210,529],{"class":669},[186,148212,622],{"class":202},[186,148214,148215,148218,148220,148222],{"class":188,"line":49},[186,148216,148217],{"class":532},"    \"name\"",[186,148219,210],{"class":202},[186,148221,70706],{"class":532},[186,148223,32921],{"class":202},[186,148225,148226,148229,148231],{"class":188,"line":219},[186,148227,148228],{"class":532},"    \"value\"",[186,148230,210],{"class":202},[186,148232,98889],{"class":206},[186,148234,148235],{"class":188,"line":225},[186,148236,639],{"class":202},[169,148238,148239],{},"JSON 字符串：",[176,148241,148244],{"className":148242,"code":148243,"language":146989,"meta":181,"style":181},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[183,148245,148246,148250,148261,148270],{"__ignoreMap":181},[186,148247,148248],{"class":188,"line":189},[186,148249,3018],{"class":202},[186,148251,148252,148255,148257,148259],{"class":188,"line":49},[186,148253,148254],{"class":206},"  \"name\"",[186,148256,210],{"class":202},[186,148258,70706],{"class":532},[186,148260,32921],{"class":202},[186,148262,148263,148266,148268],{"class":188,"line":219},[186,148264,148265],{"class":206},"  \"value\"",[186,148267,210],{"class":202},[186,148269,98889],{"class":206},[186,148271,148272],{"class":188,"line":225},[186,148273,639],{"class":202},[169,148275,148276],{},"Python 与 JSON 的转换：",[176,148278,148280],{"className":31833,"code":148279,"language":31835,"meta":181,"style":181},"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",[183,148281,148282,148289,148293,148318,148322,148341,148348,148352,148362],{"__ignoreMap":181},[186,148283,148284,148286],{"class":188,"line":189},[186,148285,31847],{"class":669},[186,148287,148288],{"class":202}," json\n",[186,148290,148291],{"class":188,"line":49},[186,148292,3867],{"emptyLinePlaceholder":1551},[186,148294,148295,148297,148299,148301,148303,148305,148307,148309,148312,148314,148316],{"class":188,"line":219},[186,148296,103089],{"class":202},[186,148298,529],{"class":669},[186,148300,5914],{"class":202},[186,148302,64117],{"class":532},[186,148304,210],{"class":202},[186,148306,70706],{"class":532},[186,148308,13898],{"class":202},[186,148310,148311],{"class":532},"\"value\"",[186,148313,210],{"class":202},[186,148315,1922],{"class":206},[186,148317,639],{"class":202},[186,148319,148320],{"class":188,"line":225},[186,148321,3867],{"emptyLinePlaceholder":1551},[186,148323,148324,148327,148329,148332,148335,148337,148339],{"class":188,"line":242},[186,148325,148326],{"class":202},"json_text ",[186,148328,529],{"class":669},[186,148330,148331],{"class":202}," json.dumps(data, ",[186,148333,148334],{"class":835},"ensure_ascii",[186,148336,529],{"class":669},[186,148338,35442],{"class":206},[186,148340,1629],{"class":202},[186,148342,148343,148345],{"class":188,"line":248},[186,148344,31870],{"class":206},[186,148346,148347],{"class":202},"(json_text)\n",[186,148349,148350],{"class":188,"line":265},[186,148351,3867],{"emptyLinePlaceholder":1551},[186,148353,148354,148357,148359],{"class":188,"line":271},[186,148355,148356],{"class":202},"new_data ",[186,148358,529],{"class":669},[186,148360,148361],{"class":202}," json.loads(json_text)\n",[186,148363,148364,148366],{"class":188,"line":288},[186,148365,31870],{"class":206},[186,148367,148368],{"class":202},"(new_data)\n",[14,148370,148372],{"id":148371},"_103-安装pyecharts","10.3 安装pyecharts",[176,148374,148376],{"className":25281,"code":148375,"language":25283,"meta":181,"style":181},"pip install pyecharts\n",[183,148377,148378],{"__ignoreMap":181},[186,148379,148380,148382,148384],{"class":188,"line":189},[186,148381,25290],{"class":198},[186,148383,25293],{"class":532},[186,148385,148386],{"class":532}," pyecharts\n",[169,148388,148389],{},"验证：",[176,148391,148393],{"className":31833,"code":148392,"language":31835,"meta":181,"style":181},"import pyecharts\n\nprint(pyecharts.__version__)\n",[183,148394,148395,148401,148405],{"__ignoreMap":181},[186,148396,148397,148399],{"class":188,"line":189},[186,148398,31847],{"class":669},[186,148400,148386],{"class":202},[186,148402,148403],{"class":188,"line":49},[186,148404,3867],{"emptyLinePlaceholder":1551},[186,148406,148407,148409,148412,148415],{"class":188,"line":219},[186,148408,31870],{"class":206},[186,148410,148411],{"class":202},"(pyecharts.",[186,148413,148414],{"class":206},"__version__",[186,148416,1629],{"class":202},[169,148418,148419],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148421,148423],{"id":148422},"_104-第一个折线图","10.4 第一个折线图",[176,148425,148427],{"className":31833,"code":148426,"language":31835,"meta":181,"style":181},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[183,148428,148429,148441,148445,148455,148485,148517],{"__ignoreMap":181},[186,148430,148431,148433,148436,148438],{"class":188,"line":189},[186,148432,32192],{"class":669},[186,148434,148435],{"class":202}," pyecharts.charts ",[186,148437,31847],{"class":669},[186,148439,148440],{"class":202}," Line\n",[186,148442,148443],{"class":188,"line":49},[186,148444,3867],{"emptyLinePlaceholder":1551},[186,148446,148447,148450,148452],{"class":188,"line":219},[186,148448,148449],{"class":202},"line ",[186,148451,529],{"class":669},[186,148453,148454],{"class":202}," Line()\n",[186,148456,148457,148460,148463,148465,148468,148470,148473,148475,148478,148480,148483],{"class":188,"line":225},[186,148458,148459],{"class":202},"line.add_xaxis([",[186,148461,148462],{"class":532},"\"周一\"",[186,148464,13898],{"class":202},[186,148466,148467],{"class":532},"\"周二\"",[186,148469,13898],{"class":202},[186,148471,148472],{"class":532},"\"周三\"",[186,148474,13898],{"class":202},[186,148476,148477],{"class":532},"\"周四\"",[186,148479,13898],{"class":202},[186,148481,148482],{"class":532},"\"周五\"",[186,148484,6123],{"class":202},[186,148486,148487,148490,148493,148495,148497,148499,148501,148503,148505,148507,148510,148512,148515],{"class":188,"line":242},[186,148488,148489],{"class":202},"line.add_yaxis(",[186,148491,148492],{"class":532},"\"销售额\"",[186,148494,78951],{"class":202},[186,148496,1922],{"class":206},[186,148498,13898],{"class":202},[186,148500,2425],{"class":206},[186,148502,13898],{"class":202},[186,148504,2470],{"class":206},[186,148506,13898],{"class":202},[186,148508,148509],{"class":206},"150",[186,148511,13898],{"class":202},[186,148513,148514],{"class":206},"180",[186,148516,6123],{"class":202},[186,148518,148519,148522,148525],{"class":188,"line":248},[186,148520,148521],{"class":202},"line.render(",[186,148523,148524],{"class":532},"\"line.html\"",[186,148526,1629],{"class":202},[169,148528,148529,148530,148533],{},"运行后会生成 ",[183,148531,148532],{},"line.html","，用浏览器打开即可看到图表。",[169,148535,148536],{},"核心步骤：",[34,148538,148539,148542,148545,148548,148551],{},[22,148540,148541],{},"导入图表类。",[22,148543,148544],{},"创建图表对象。",[22,148546,148547],{},"添加 x 轴数据。",[22,148549,148550],{},"添加 y 轴数据。",[22,148552,148553],{},"渲染为 HTML。",[14,148555,148557],{"id":148556},"_105-全局配置","10.5 全局配置",[169,148559,148560,148561,148564],{},"常用配置在 ",[183,148562,148563],{},"pyecharts.options"," 中。",[176,148566,148568],{"className":31833,"code":148567,"language":31835,"meta":181,"style":181},"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",[183,148569,148570,148587,148597,148601,148609,148633,148661,148666,148685,148704,148722,148742,148746],{"__ignoreMap":181},[186,148571,148572,148574,148577,148579,148582,148584],{"class":188,"line":189},[186,148573,32192],{"class":669},[186,148575,148576],{"class":202}," pyecharts ",[186,148578,31847],{"class":669},[186,148580,148581],{"class":202}," options ",[186,148583,32838],{"class":669},[186,148585,148586],{"class":202}," opts\n",[186,148588,148589,148591,148593,148595],{"class":188,"line":49},[186,148590,32192],{"class":669},[186,148592,148435],{"class":202},[186,148594,31847],{"class":669},[186,148596,148440],{"class":202},[186,148598,148599],{"class":188,"line":219},[186,148600,3867],{"emptyLinePlaceholder":1551},[186,148602,148603,148605,148607],{"class":188,"line":225},[186,148604,148449],{"class":202},[186,148606,529],{"class":669},[186,148608,148454],{"class":202},[186,148610,148611,148613,148615,148617,148619,148621,148623,148625,148627,148629,148631],{"class":188,"line":242},[186,148612,148459],{"class":202},[186,148614,148462],{"class":532},[186,148616,13898],{"class":202},[186,148618,148467],{"class":532},[186,148620,13898],{"class":202},[186,148622,148472],{"class":532},[186,148624,13898],{"class":202},[186,148626,148477],{"class":532},[186,148628,13898],{"class":202},[186,148630,148482],{"class":532},[186,148632,6123],{"class":202},[186,148634,148635,148637,148639,148641,148643,148645,148647,148649,148651,148653,148655,148657,148659],{"class":188,"line":248},[186,148636,148489],{"class":202},[186,148638,148492],{"class":532},[186,148640,78951],{"class":202},[186,148642,1922],{"class":206},[186,148644,13898],{"class":202},[186,148646,2425],{"class":206},[186,148648,13898],{"class":202},[186,148650,2470],{"class":206},[186,148652,13898],{"class":202},[186,148654,148509],{"class":206},[186,148656,13898],{"class":202},[186,148658,148514],{"class":206},[186,148660,6123],{"class":202},[186,148662,148663],{"class":188,"line":265},[186,148664,148665],{"class":202},"line.set_global_opts(\n",[186,148667,148668,148671,148673,148676,148678,148680,148683],{"class":188,"line":271},[186,148669,148670],{"class":835},"    title_opts",[186,148672,529],{"class":669},[186,148674,148675],{"class":202},"opts.TitleOpts(",[186,148677,52859],{"class":835},[186,148679,529],{"class":669},[186,148681,148682],{"class":532},"\"一周销售额\"",[186,148684,1138],{"class":202},[186,148686,148687,148690,148692,148695,148697,148699,148702],{"class":188,"line":288},[186,148688,148689],{"class":835},"    xaxis_opts",[186,148691,529],{"class":669},[186,148693,148694],{"class":202},"opts.AxisOpts(",[186,148696,81242],{"class":835},[186,148698,529],{"class":669},[186,148700,148701],{"class":532},"\"日期\"",[186,148703,1138],{"class":202},[186,148705,148706,148709,148711,148713,148715,148717,148720],{"class":188,"line":294},[186,148707,148708],{"class":835},"    yaxis_opts",[186,148710,529],{"class":669},[186,148712,148694],{"class":202},[186,148714,81242],{"class":835},[186,148716,529],{"class":669},[186,148718,148719],{"class":532},"\"金额\"",[186,148721,1138],{"class":202},[186,148723,148724,148727,148729,148732,148735,148737,148740],{"class":188,"line":1212},[186,148725,148726],{"class":835},"    tooltip_opts",[186,148728,529],{"class":669},[186,148730,148731],{"class":202},"opts.TooltipOpts(",[186,148733,148734],{"class":835},"trigger",[186,148736,529],{"class":669},[186,148738,148739],{"class":532},"\"axis\"",[186,148741,1138],{"class":202},[186,148743,148744],{"class":188,"line":1223},[186,148745,1629],{"class":202},[186,148747,148748,148750,148752],{"class":188,"line":1236},[186,148749,148521],{"class":202},[186,148751,148524],{"class":532},[186,148753,1629],{"class":202},[169,148755,148756],{},"常见全局配置：",[99,148758,148759,148768],{},[102,148760,148761],{},[105,148762,148763,148766],{},[108,148764,148765],{},"配置",[108,148767,104127],{},[116,148769,148770,148780,148790,148800,148810,148820],{},[105,148771,148772,148777],{},[121,148773,148774],{},[183,148775,148776],{},"TitleOpts",[121,148778,148779],{},"标题",[105,148781,148782,148787],{},[121,148783,148784],{},[183,148785,148786],{},"LegendOpts",[121,148788,148789],{},"图例",[105,148791,148792,148797],{},[121,148793,148794],{},[183,148795,148796],{},"TooltipOpts",[121,148798,148799],{},"提示框",[105,148801,148802,148807],{},[121,148803,148804],{},[183,148805,148806],{},"AxisOpts",[121,148808,148809],{},"坐标轴",[105,148811,148812,148817],{},[121,148813,148814],{},[183,148815,148816],{},"VisualMapOpts",[121,148818,148819],{},"视觉映射",[105,148821,148822,148827],{},[121,148823,148824],{},[183,148825,148826],{},"DataZoomOpts",[121,148828,148829],{},"区域缩放",[14,148831,148833],{"id":148832},"_106-系列配置","10.6 系列配置",[169,148835,148836],{},"系列配置作用于某一组数据。",[176,148838,148840],{"className":31833,"code":148839,"language":31835,"meta":181,"style":181},"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",[183,148841,148842,148847,148858,148887,148898,148917],{"__ignoreMap":181},[186,148843,148844],{"class":188,"line":189},[186,148845,148846],{"class":202},"line.add_yaxis(\n",[186,148848,148849,148852,148854,148856],{"class":188,"line":49},[186,148850,148851],{"class":835},"    series_name",[186,148853,529],{"class":669},[186,148855,148492],{"class":532},[186,148857,32921],{"class":202},[186,148859,148860,148863,148865,148867,148869,148871,148873,148875,148877,148879,148881,148883,148885],{"class":188,"line":219},[186,148861,148862],{"class":835},"    y_axis",[186,148864,529],{"class":669},[186,148866,2498],{"class":202},[186,148868,1922],{"class":206},[186,148870,13898],{"class":202},[186,148872,2425],{"class":206},[186,148874,13898],{"class":202},[186,148876,2470],{"class":206},[186,148878,13898],{"class":202},[186,148880,148509],{"class":206},[186,148882,13898],{"class":202},[186,148884,148514],{"class":206},[186,148886,89267],{"class":202},[186,148888,148889,148892,148894,148896],{"class":188,"line":225},[186,148890,148891],{"class":835},"    is_smooth",[186,148893,529],{"class":669},[186,148895,32931],{"class":206},[186,148897,32921],{"class":202},[186,148899,148900,148903,148905,148908,148911,148913,148915],{"class":188,"line":242},[186,148901,148902],{"class":835},"    label_opts",[186,148904,529],{"class":669},[186,148906,148907],{"class":202},"opts.LabelOpts(",[186,148909,148910],{"class":835},"is_show",[186,148912,529],{"class":669},[186,148914,32931],{"class":206},[186,148916,1138],{"class":202},[186,148918,148919],{"class":188,"line":248},[186,148920,1629],{"class":202},[169,148922,148923],{},"常用参数：",[34,148925,148926,148932,148938,148944,148950],{},[22,148927,148928,148931],{},[183,148929,148930],{},"series_name","：系列名称。",[22,148933,148934,148937],{},[183,148935,148936],{},"y_axis","：y 轴数据。",[22,148939,148940,148943],{},[183,148941,148942],{},"is_smooth","：是否平滑曲线。",[22,148945,148946,148949],{},[183,148947,148948],{},"label_opts","：标签配置。",[22,148951,148952,148955],{},[183,148953,148954],{},"symbol_size","：标记点大小。",[14,148957,148959],{"id":148958},"_107-多条折线","10.7 多条折线",[176,148961,148963],{"className":31833,"code":148962,"language":31835,"meta":181,"style":181},"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",[183,148964,148965,148979,148989,148993,149022,149026,149034,149039,149077,149114,149118,149135,149151,149155],{"__ignoreMap":181},[186,148966,148967,148969,148971,148973,148975,148977],{"class":188,"line":189},[186,148968,32192],{"class":669},[186,148970,148576],{"class":202},[186,148972,31847],{"class":669},[186,148974,148581],{"class":202},[186,148976,32838],{"class":669},[186,148978,148586],{"class":202},[186,148980,148981,148983,148985,148987],{"class":188,"line":49},[186,148982,32192],{"class":669},[186,148984,148435],{"class":202},[186,148986,31847],{"class":669},[186,148988,148440],{"class":202},[186,148990,148991],{"class":188,"line":219},[186,148992,3867],{"emptyLinePlaceholder":1551},[186,148994,148995,148998,149000,149002,149004,149006,149008,149010,149012,149014,149016,149018,149020],{"class":188,"line":225},[186,148996,148997],{"class":202},"dates ",[186,148999,529],{"class":669},[186,149001,53673],{"class":202},[186,149003,148462],{"class":532},[186,149005,13898],{"class":202},[186,149007,148467],{"class":532},[186,149009,13898],{"class":202},[186,149011,148472],{"class":532},[186,149013,13898],{"class":202},[186,149015,148477],{"class":532},[186,149017,13898],{"class":202},[186,149019,148482],{"class":532},[186,149021,34701],{"class":202},[186,149023,149024],{"class":188,"line":242},[186,149025,3867],{"emptyLinePlaceholder":1551},[186,149027,149028,149030,149032],{"class":188,"line":248},[186,149029,148449],{"class":202},[186,149031,529],{"class":669},[186,149033,148454],{"class":202},[186,149035,149036],{"class":188,"line":265},[186,149037,149038],{"class":202},"line.add_xaxis(dates)\n",[186,149040,149041,149043,149046,149048,149050,149052,149055,149057,149059,149061,149063,149065,149067,149069,149071,149073,149075],{"class":188,"line":271},[186,149042,148489],{"class":202},[186,149044,149045],{"class":532},"\"线上销售\"",[186,149047,78951],{"class":202},[186,149049,1922],{"class":206},[186,149051,13898],{"class":202},[186,149053,149054],{"class":206},"130",[186,149056,13898],{"class":202},[186,149058,2425],{"class":206},[186,149060,13898],{"class":202},[186,149062,22509],{"class":206},[186,149064,13898],{"class":202},[186,149066,3190],{"class":206},[186,149068,113633],{"class":202},[186,149070,148942],{"class":835},[186,149072,529],{"class":669},[186,149074,32931],{"class":206},[186,149076,1629],{"class":202},[186,149078,149079,149081,149084,149086,149088,149090,149092,149094,149096,149098,149100,149102,149104,149106,149108,149110,149112],{"class":188,"line":288},[186,149080,148489],{"class":202},[186,149082,149083],{"class":532},"\"线下销售\"",[186,149085,78951],{"class":202},[186,149087,2222],{"class":206},[186,149089,13898],{"class":202},[186,149091,2470],{"class":206},[186,149093,13898],{"class":202},[186,149095,1922],{"class":206},[186,149097,13898],{"class":202},[186,149099,2425],{"class":206},[186,149101,13898],{"class":202},[186,149103,148509],{"class":206},[186,149105,113633],{"class":202},[186,149107,148942],{"class":835},[186,149109,529],{"class":669},[186,149111,32931],{"class":206},[186,149113,1629],{"class":202},[186,149115,149116],{"class":188,"line":294},[186,149117,148665],{"class":202},[186,149119,149120,149122,149124,149126,149128,149130,149133],{"class":188,"line":1212},[186,149121,148670],{"class":835},[186,149123,529],{"class":669},[186,149125,148675],{"class":202},[186,149127,52859],{"class":835},[186,149129,529],{"class":669},[186,149131,149132],{"class":532},"\"线上线下销售趋势\"",[186,149134,1138],{"class":202},[186,149136,149137,149139,149141,149143,149145,149147,149149],{"class":188,"line":1223},[186,149138,148726],{"class":835},[186,149140,529],{"class":669},[186,149142,148731],{"class":202},[186,149144,148734],{"class":835},[186,149146,529],{"class":669},[186,149148,148739],{"class":532},[186,149150,1138],{"class":202},[186,149152,149153],{"class":188,"line":1236},[186,149154,1629],{"class":202},[186,149156,149157,149159,149162],{"class":188,"line":3096},[186,149158,148521],{"class":202},[186,149160,149161],{"class":532},"\"sales.html\"",[186,149163,1629],{"class":202},[169,149165,149166],{},"多条折线适合比较不同指标或不同地区。",[14,149168,149170],{"id":149169},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[169,149172,149173,149174,26077],{},"假设 ",[183,149175,149176],{},"sales.json",[176,149178,149180],{"className":148242,"code":149179,"language":146989,"meta":181,"style":181},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[183,149181,149182,149187,149219,149247,149275],{"__ignoreMap":181},[186,149183,149184],{"class":188,"line":189},[186,149185,149186],{"class":202},"[\n",[186,149188,149189,149192,149195,149197,149199,149201,149204,149206,149208,149210,149213,149215,149217],{"class":188,"line":49},[186,149190,149191],{"class":202},"  {",[186,149193,149194],{"class":206},"\"date\"",[186,149196,210],{"class":202},[186,149198,148462],{"class":532},[186,149200,13898],{"class":202},[186,149202,149203],{"class":206},"\"online\"",[186,149205,210],{"class":202},[186,149207,1922],{"class":206},[186,149209,13898],{"class":202},[186,149211,149212],{"class":206},"\"offline\"",[186,149214,210],{"class":202},[186,149216,2222],{"class":206},[186,149218,6396],{"class":202},[186,149220,149221,149223,149225,149227,149229,149231,149233,149235,149237,149239,149241,149243,149245],{"class":188,"line":219},[186,149222,149191],{"class":202},[186,149224,149194],{"class":206},[186,149226,210],{"class":202},[186,149228,148467],{"class":532},[186,149230,13898],{"class":202},[186,149232,149203],{"class":206},[186,149234,210],{"class":202},[186,149236,149054],{"class":206},[186,149238,13898],{"class":202},[186,149240,149212],{"class":206},[186,149242,210],{"class":202},[186,149244,2470],{"class":206},[186,149246,6396],{"class":202},[186,149248,149249,149251,149253,149255,149257,149259,149261,149263,149265,149267,149269,149271,149273],{"class":188,"line":225},[186,149250,149191],{"class":202},[186,149252,149194],{"class":206},[186,149254,210],{"class":202},[186,149256,148472],{"class":532},[186,149258,13898],{"class":202},[186,149260,149203],{"class":206},[186,149262,210],{"class":202},[186,149264,2425],{"class":206},[186,149266,13898],{"class":202},[186,149268,149212],{"class":206},[186,149270,210],{"class":202},[186,149272,1922],{"class":206},[186,149274,639],{"class":202},[186,149276,149277],{"class":188,"line":242},[186,149278,34701],{"class":202},[169,149280,149281],{},"读取并绘图：",[176,149283,149285],{"className":31833,"code":149284,"language":31835,"meta":181,"style":181},"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",[183,149286,149287,149293,149307,149317,149321,149353,149366,149370,149378,149387,149396,149400,149412,149421,149430,149439,149443,149451,149455,149472,149489,149493,149510,149526,149530],{"__ignoreMap":181},[186,149288,149289,149291],{"class":188,"line":189},[186,149290,31847],{"class":669},[186,149292,148288],{"class":202},[186,149294,149295,149297,149299,149301,149303,149305],{"class":188,"line":49},[186,149296,32192],{"class":669},[186,149298,148576],{"class":202},[186,149300,31847],{"class":669},[186,149302,148581],{"class":202},[186,149304,32838],{"class":669},[186,149306,148586],{"class":202},[186,149308,149309,149311,149313,149315],{"class":188,"line":219},[186,149310,32192],{"class":669},[186,149312,148435],{"class":202},[186,149314,31847],{"class":669},[186,149316,148440],{"class":202},[186,149318,149319],{"class":188,"line":225},[186,149320,3867],{"emptyLinePlaceholder":1551},[186,149322,149323,149325,149327,149329,149332,149334,149336,149338,149340,149342,149344,149346,149348,149351],{"class":188,"line":242},[186,149324,109264],{"class":669},[186,149326,147988],{"class":206},[186,149328,832],{"class":202},[186,149330,149331],{"class":532},"\"sales.json\"",[186,149333,13898],{"class":202},[186,149335,147998],{"class":532},[186,149337,13898],{"class":202},[186,149339,148003],{"class":835},[186,149341,529],{"class":669},[186,149343,148008],{"class":532},[186,149345,839],{"class":202},[186,149347,32838],{"class":669},[186,149349,149350],{"class":835}," file",[186,149352,5205],{"class":202},[186,149354,149355,149357,149359,149362,149364],{"class":188,"line":248},[186,149356,102852],{"class":202},[186,149358,529],{"class":669},[186,149360,149361],{"class":202}," json.load(",[186,149363,46808],{"class":835},[186,149365,1629],{"class":202},[186,149367,149368],{"class":188,"line":265},[186,149369,3867],{"emptyLinePlaceholder":1551},[186,149371,149372,149374,149376],{"class":188,"line":271},[186,149373,148997],{"class":202},[186,149375,529],{"class":669},[186,149377,53285],{"class":202},[186,149379,149380,149383,149385],{"class":188,"line":288},[186,149381,149382],{"class":202},"online_sales ",[186,149384,529],{"class":669},[186,149386,53285],{"class":202},[186,149388,149389,149392,149394],{"class":188,"line":294},[186,149390,149391],{"class":202},"offline_sales ",[186,149393,529],{"class":669},[186,149395,53285],{"class":202},[186,149397,149398],{"class":188,"line":1212},[186,149399,3867],{"emptyLinePlaceholder":1551},[186,149401,149402,149404,149407,149409],{"class":188,"line":1223},[186,149403,4491],{"class":669},[186,149405,149406],{"class":202}," item ",[186,149408,27500],{"class":669},[186,149410,149411],{"class":202}," data:\n",[186,149413,149414,149417,149419],{"class":188,"line":1236},[186,149415,149416],{"class":202},"    dates.append(item[",[186,149418,149194],{"class":532},[186,149420,6123],{"class":202},[186,149422,149423,149426,149428],{"class":188,"line":3096},[186,149424,149425],{"class":202},"    online_sales.append(item[",[186,149427,149203],{"class":532},[186,149429,6123],{"class":202},[186,149431,149432,149435,149437],{"class":188,"line":3110},[186,149433,149434],{"class":202},"    offline_sales.append(item[",[186,149436,149212],{"class":532},[186,149438,6123],{"class":202},[186,149440,149441],{"class":188,"line":3115},[186,149442,3867],{"emptyLinePlaceholder":1551},[186,149444,149445,149447,149449],{"class":188,"line":3121},[186,149446,148449],{"class":202},[186,149448,529],{"class":669},[186,149450,148454],{"class":202},[186,149452,149453],{"class":188,"line":3142},[186,149454,149038],{"class":202},[186,149456,149457,149459,149461,149464,149466,149468,149470],{"class":188,"line":3147},[186,149458,148489],{"class":202},[186,149460,149045],{"class":532},[186,149462,149463],{"class":202},", online_sales, ",[186,149465,148942],{"class":835},[186,149467,529],{"class":669},[186,149469,32931],{"class":206},[186,149471,1629],{"class":202},[186,149473,149474,149476,149478,149481,149483,149485,149487],{"class":188,"line":3161},[186,149475,148489],{"class":202},[186,149477,149083],{"class":532},[186,149479,149480],{"class":202},", offline_sales, ",[186,149482,148942],{"class":835},[186,149484,529],{"class":669},[186,149486,32931],{"class":206},[186,149488,1629],{"class":202},[186,149490,149491],{"class":188,"line":3166},[186,149492,148665],{"class":202},[186,149494,149495,149497,149499,149501,149503,149505,149508],{"class":188,"line":3195},[186,149496,148670],{"class":835},[186,149498,529],{"class":669},[186,149500,148675],{"class":202},[186,149502,52859],{"class":835},[186,149504,529],{"class":669},[186,149506,149507],{"class":532},"\"销售趋势\"",[186,149509,1138],{"class":202},[186,149511,149512,149514,149516,149518,149520,149522,149524],{"class":188,"line":3200},[186,149513,148726],{"class":835},[186,149515,529],{"class":669},[186,149517,148731],{"class":202},[186,149519,148734],{"class":835},[186,149521,529],{"class":669},[186,149523,148739],{"class":532},[186,149525,1138],{"class":202},[186,149527,149528],{"class":188,"line":3217},[186,149529,1629],{"class":202},[186,149531,149532,149534,149536],{"class":188,"line":3222},[186,149533,148521],{"class":202},[186,149535,149161],{"class":532},[186,149537,1629],{"class":202},[14,149539,149541],{"id":149540},"_109-数据清洗","10.9 数据清洗",[169,149543,149544],{},"真实数据经常不整齐，需要清洗。",[169,149546,149547],{},"常见问题：",[34,149549,149550,149553,149556,149559],{},[22,149551,149552],{},"数字是字符串。",[22,149554,149555],{},"字段缺失。",[22,149557,149558],{},"空值。",[22,149560,149561],{},"日期格式不统一。",[169,149563,16597],{},[176,149565,149567],{"className":31833,"code":149566,"language":31835,"meta":181,"style":181},"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",[183,149568,149569,149578,149601,149621,149642,149646,149650,149658,149667,149671,149682,149696,149705,149710,149714,149722,149732,149736,149743],{"__ignoreMap":181},[186,149570,149571,149574,149576],{"class":188,"line":189},[186,149572,149573],{"class":202},"raw_data ",[186,149575,529],{"class":669},[186,149577,56888],{"class":202},[186,149579,149580,149583,149585,149587,149589,149591,149594,149596,149599],{"class":188,"line":49},[186,149581,149582],{"class":202},"    {",[186,149584,149194],{"class":532},[186,149586,210],{"class":202},[186,149588,148462],{"class":532},[186,149590,13898],{"class":202},[186,149592,149593],{"class":532},"\"sales\"",[186,149595,210],{"class":202},[186,149597,149598],{"class":532},"\"100\"",[186,149600,6396],{"class":202},[186,149602,149603,149605,149607,149609,149611,149613,149615,149617,149619],{"class":188,"line":219},[186,149604,149582],{"class":202},[186,149606,149194],{"class":532},[186,149608,210],{"class":202},[186,149610,148467],{"class":532},[186,149612,13898],{"class":202},[186,149614,149593],{"class":532},[186,149616,210],{"class":202},[186,149618,9115],{"class":532},[186,149620,6396],{"class":202},[186,149622,149623,149625,149627,149629,149631,149633,149635,149637,149640],{"class":188,"line":225},[186,149624,149582],{"class":202},[186,149626,149194],{"class":532},[186,149628,210],{"class":202},[186,149630,148472],{"class":532},[186,149632,13898],{"class":202},[186,149634,149593],{"class":532},[186,149636,210],{"class":202},[186,149638,149639],{"class":532},"\"120\"",[186,149641,6396],{"class":202},[186,149643,149644],{"class":188,"line":242},[186,149645,34701],{"class":202},[186,149647,149648],{"class":188,"line":248},[186,149649,3867],{"emptyLinePlaceholder":1551},[186,149651,149652,149654,149656],{"class":188,"line":265},[186,149653,148997],{"class":202},[186,149655,529],{"class":669},[186,149657,53285],{"class":202},[186,149659,149660,149663,149665],{"class":188,"line":271},[186,149661,149662],{"class":202},"sales ",[186,149664,529],{"class":669},[186,149666,53285],{"class":202},[186,149668,149669],{"class":188,"line":288},[186,149670,3867],{"emptyLinePlaceholder":1551},[186,149672,149673,149675,149677,149679],{"class":188,"line":294},[186,149674,4491],{"class":669},[186,149676,149406],{"class":202},[186,149678,27500],{"class":669},[186,149680,149681],{"class":202}," raw_data:\n",[186,149683,149684,149687,149689,149692,149694],{"class":188,"line":1212},[186,149685,149686],{"class":202},"    value ",[186,149688,529],{"class":669},[186,149690,149691],{"class":202}," item.get(",[186,149693,149593],{"class":532},[186,149695,1629],{"class":202},[186,149697,149698,149700,149702],{"class":188,"line":1223},[186,149699,4567],{"class":669},[186,149701,40384],{"class":669},[186,149703,149704],{"class":202}," value:\n",[186,149706,149707],{"class":188,"line":1236},[186,149708,149709],{"class":669},"        continue\n",[186,149711,149712],{"class":188,"line":3096},[186,149713,3867],{"emptyLinePlaceholder":1551},[186,149715,149716,149718,149720],{"class":188,"line":3110},[186,149717,149416],{"class":202},[186,149719,149194],{"class":532},[186,149721,6123],{"class":202},[186,149723,149724,149727,149729],{"class":188,"line":3115},[186,149725,149726],{"class":202},"    sales.append(",[186,149728,1626],{"class":206},[186,149730,149731],{"class":202},"(value))\n",[186,149733,149734],{"class":188,"line":3121},[186,149735,3867],{"emptyLinePlaceholder":1551},[186,149737,149738,149740],{"class":188,"line":3142},[186,149739,31870],{"class":206},[186,149741,149742],{"class":202},"(dates)\n",[186,149744,149745,149747],{"class":188,"line":3147},[186,149746,31870],{"class":206},[186,149748,149749],{"class":202},"(sales)\n",[14,149751,149753],{"id":149752},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[176,149755,149757],{"className":31833,"code":149756,"language":31835,"meta":181,"style":181},"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",[183,149758,149759,149773,149783,149787,149795,149816,149838,149860,149882,149904,149908,149912,149934,149955,149959,149967,149971,149975,149985,149994,150004,150020,150024,150028,150045,150061,150077,150093,150103,150107],{"__ignoreMap":181},[186,149760,149761,149763,149765,149767,149769,149771],{"class":188,"line":189},[186,149762,32192],{"class":669},[186,149764,148576],{"class":202},[186,149766,31847],{"class":669},[186,149768,148581],{"class":202},[186,149770,32838],{"class":669},[186,149772,148586],{"class":202},[186,149774,149775,149777,149779,149781],{"class":188,"line":49},[186,149776,32192],{"class":669},[186,149778,148435],{"class":202},[186,149780,31847],{"class":669},[186,149782,148440],{"class":202},[186,149784,149785],{"class":188,"line":219},[186,149786,3867],{"emptyLinePlaceholder":1551},[186,149788,149789,149791,149793],{"class":188,"line":225},[186,149790,149662],{"class":202},[186,149792,529],{"class":669},[186,149794,56888],{"class":202},[186,149796,149797,149799,149801,149803,149806,149808,149810,149812,149814],{"class":188,"line":242},[186,149798,149582],{"class":202},[186,149800,149194],{"class":532},[186,149802,210],{"class":202},[186,149804,149805],{"class":532},"\"2024-10-01\"",[186,149807,13898],{"class":202},[186,149809,85516],{"class":532},[186,149811,210],{"class":202},[186,149813,93454],{"class":206},[186,149815,6396],{"class":202},[186,149817,149818,149820,149822,149824,149827,149829,149831,149833,149836],{"class":188,"line":248},[186,149819,149582],{"class":202},[186,149821,149194],{"class":532},[186,149823,210],{"class":202},[186,149825,149826],{"class":532},"\"2024-10-02\"",[186,149828,13898],{"class":202},[186,149830,85516],{"class":532},[186,149832,210],{"class":202},[186,149834,149835],{"class":206},"1800",[186,149837,6396],{"class":202},[186,149839,149840,149842,149844,149846,149849,149851,149853,149855,149858],{"class":188,"line":265},[186,149841,149582],{"class":202},[186,149843,149194],{"class":532},[186,149845,210],{"class":202},[186,149847,149848],{"class":532},"\"2024-10-03\"",[186,149850,13898],{"class":202},[186,149852,85516],{"class":532},[186,149854,210],{"class":202},[186,149856,149857],{"class":206},"1500",[186,149859,6396],{"class":202},[186,149861,149862,149864,149866,149868,149871,149873,149875,149877,149880],{"class":188,"line":271},[186,149863,149582],{"class":202},[186,149865,149194],{"class":532},[186,149867,210],{"class":202},[186,149869,149870],{"class":532},"\"2024-10-04\"",[186,149872,13898],{"class":202},[186,149874,85516],{"class":532},[186,149876,210],{"class":202},[186,149878,149879],{"class":206},"2100",[186,149881,6396],{"class":202},[186,149883,149884,149886,149888,149890,149893,149895,149897,149899,149902],{"class":188,"line":288},[186,149885,149582],{"class":202},[186,149887,149194],{"class":532},[186,149889,210],{"class":202},[186,149891,149892],{"class":532},"\"2024-10-05\"",[186,149894,13898],{"class":202},[186,149896,85516],{"class":532},[186,149898,210],{"class":202},[186,149900,149901],{"class":206},"2600",[186,149903,6396],{"class":202},[186,149905,149906],{"class":188,"line":294},[186,149907,34701],{"class":202},[186,149909,149910],{"class":188,"line":1212},[186,149911,3867],{"emptyLinePlaceholder":1551},[186,149913,149914,149916,149918,149921,149923,149925,149927,149929,149931],{"class":188,"line":1223},[186,149915,148997],{"class":202},[186,149917,529],{"class":669},[186,149919,149920],{"class":202}," [item[",[186,149922,149194],{"class":532},[186,149924,5909],{"class":202},[186,149926,4491],{"class":669},[186,149928,149406],{"class":202},[186,149930,27500],{"class":669},[186,149932,149933],{"class":202}," sales]\n",[186,149935,149936,149939,149941,149943,149945,149947,149949,149951,149953],{"class":188,"line":1236},[186,149937,149938],{"class":202},"amounts ",[186,149940,529],{"class":669},[186,149942,149920],{"class":202},[186,149944,85516],{"class":532},[186,149946,5909],{"class":202},[186,149948,4491],{"class":669},[186,149950,149406],{"class":202},[186,149952,27500],{"class":669},[186,149954,149933],{"class":202},[186,149956,149957],{"class":188,"line":3096},[186,149958,3867],{"emptyLinePlaceholder":1551},[186,149960,149961,149963,149965],{"class":188,"line":3110},[186,149962,148449],{"class":202},[186,149964,529],{"class":669},[186,149966,148454],{"class":202},[186,149968,149969],{"class":188,"line":3115},[186,149970,149038],{"class":202},[186,149972,149973],{"class":188,"line":3121},[186,149974,148846],{"class":202},[186,149976,149977,149979,149981,149983],{"class":188,"line":3142},[186,149978,148851],{"class":835},[186,149980,529],{"class":669},[186,149982,148492],{"class":532},[186,149984,32921],{"class":202},[186,149986,149987,149989,149991],{"class":188,"line":3147},[186,149988,148862],{"class":835},[186,149990,529],{"class":669},[186,149992,149993],{"class":202},"amounts,\n",[186,149995,149996,149998,150000,150002],{"class":188,"line":3161},[186,149997,148891],{"class":835},[186,149999,529],{"class":669},[186,150001,32931],{"class":206},[186,150003,32921],{"class":202},[186,150005,150006,150008,150010,150012,150014,150016,150018],{"class":188,"line":3166},[186,150007,148902],{"class":835},[186,150009,529],{"class":669},[186,150011,148907],{"class":202},[186,150013,148910],{"class":835},[186,150015,529],{"class":669},[186,150017,32931],{"class":206},[186,150019,1138],{"class":202},[186,150021,150022],{"class":188,"line":3195},[186,150023,1629],{"class":202},[186,150025,150026],{"class":188,"line":3200},[186,150027,148665],{"class":202},[186,150029,150030,150032,150034,150036,150038,150040,150043],{"class":188,"line":3217},[186,150031,148670],{"class":835},[186,150033,529],{"class":669},[186,150035,148675],{"class":202},[186,150037,52859],{"class":835},[186,150039,529],{"class":669},[186,150041,150042],{"class":532},"\"每日销售额\"",[186,150044,1138],{"class":202},[186,150046,150047,150049,150051,150053,150055,150057,150059],{"class":188,"line":3222},[186,150048,148689],{"class":835},[186,150050,529],{"class":669},[186,150052,148694],{"class":202},[186,150054,81242],{"class":835},[186,150056,529],{"class":669},[186,150058,148701],{"class":532},[186,150060,1138],{"class":202},[186,150062,150063,150065,150067,150069,150071,150073,150075],{"class":188,"line":3227},[186,150064,148708],{"class":835},[186,150066,529],{"class":669},[186,150068,148694],{"class":202},[186,150070,81242],{"class":835},[186,150072,529],{"class":669},[186,150074,148719],{"class":532},[186,150076,1138],{"class":202},[186,150078,150079,150081,150083,150085,150087,150089,150091],{"class":188,"line":3232},[186,150080,148726],{"class":835},[186,150082,529],{"class":669},[186,150084,148731],{"class":202},[186,150086,148734],{"class":835},[186,150088,529],{"class":669},[186,150090,148739],{"class":532},[186,150092,1138],{"class":202},[186,150094,150095,150098,150100],{"class":188,"line":3246},[186,150096,150097],{"class":835},"    datazoom_opts",[186,150099,529],{"class":669},[186,150101,150102],{"class":202},"[opts.DataZoomOpts()],\n",[186,150104,150105],{"class":188,"line":3251},[186,150106,1629],{"class":202},[186,150108,150109,150111,150114],{"class":188,"line":4044},[186,150110,148521],{"class":202},[186,150112,150113],{"class":532},"\"daily_sales.html\"",[186,150115,1629],{"class":202},[169,150117,150118,150121],{},[183,150119,150120],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150123,150125],{"id":150124},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[169,150127,150128],{},"如果数据结构如下：",[176,150130,150132],{"className":31833,"code":150131,"language":31835,"meta":181,"style":181},"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",[183,150133,150134,150142,150150,150172,150193,150198,150205,150225,150245,150249],{"__ignoreMap":181},[186,150135,150136,150138,150140],{"class":188,"line":189},[186,150137,103089],{"class":202},[186,150139,529],{"class":669},[186,150141,622],{"class":202},[186,150143,150144,150147],{"class":188,"line":49},[186,150145,150146],{"class":532},"    \"北京\"",[186,150148,150149],{"class":202},": [\n",[186,150151,150152,150154,150156,150158,150161,150163,150166,150168,150170],{"class":188,"line":219},[186,150153,6383],{"class":202},[186,150155,149194],{"class":532},[186,150157,210],{"class":202},[186,150159,150160],{"class":532},"\"2024-01-01\"",[186,150162,13898],{"class":202},[186,150164,150165],{"class":532},"\"confirm\"",[186,150167,210],{"class":202},[186,150169,2056],{"class":206},[186,150171,6396],{"class":202},[186,150173,150174,150176,150178,150180,150183,150185,150187,150189,150191],{"class":188,"line":225},[186,150175,6383],{"class":202},[186,150177,149194],{"class":532},[186,150179,210],{"class":202},[186,150181,150182],{"class":532},"\"2024-01-02\"",[186,150184,13898],{"class":202},[186,150186,150165],{"class":532},[186,150188,210],{"class":202},[186,150190,2108],{"class":206},[186,150192,6396],{"class":202},[186,150194,150195],{"class":188,"line":242},[186,150196,150197],{"class":202},"    ],\n",[186,150199,150200,150203],{"class":188,"line":248},[186,150201,150202],{"class":532},"    \"上海\"",[186,150204,150149],{"class":202},[186,150206,150207,150209,150211,150213,150215,150217,150219,150221,150223],{"class":188,"line":265},[186,150208,6383],{"class":202},[186,150210,149194],{"class":532},[186,150212,210],{"class":202},[186,150214,150160],{"class":532},[186,150216,13898],{"class":202},[186,150218,150165],{"class":532},[186,150220,210],{"class":202},[186,150222,2005],{"class":206},[186,150224,6396],{"class":202},[186,150226,150227,150229,150231,150233,150235,150237,150239,150241,150243],{"class":188,"line":271},[186,150228,6383],{"class":202},[186,150230,149194],{"class":532},[186,150232,210],{"class":202},[186,150234,150182],{"class":532},[186,150236,13898],{"class":202},[186,150238,150165],{"class":532},[186,150240,210],{"class":202},[186,150242,2133],{"class":206},[186,150244,6396],{"class":202},[186,150246,150247],{"class":188,"line":288},[186,150248,150197],{"class":202},[186,150250,150251],{"class":188,"line":294},[186,150252,639],{"class":202},[169,150254,150255],{},"绘制多地区趋势：",[176,150257,150259],{"className":31833,"code":150258,"language":31835,"meta":181,"style":181},"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",[183,150260,150261,150275,150285,150289,150314,150318,150326,150330,150334,150346,150368,150381,150385,150389,150406,150422,150426],{"__ignoreMap":181},[186,150262,150263,150265,150267,150269,150271,150273],{"class":188,"line":189},[186,150264,32192],{"class":669},[186,150266,148576],{"class":202},[186,150268,31847],{"class":669},[186,150270,148581],{"class":202},[186,150272,32838],{"class":669},[186,150274,148586],{"class":202},[186,150276,150277,150279,150281,150283],{"class":188,"line":49},[186,150278,32192],{"class":669},[186,150280,148435],{"class":202},[186,150282,31847],{"class":669},[186,150284,148440],{"class":202},[186,150286,150287],{"class":188,"line":219},[186,150288,3867],{"emptyLinePlaceholder":1551},[186,150290,150291,150293,150295,150297,150299,150301,150303,150305,150307,150310,150312],{"class":188,"line":225},[186,150292,148997],{"class":202},[186,150294,529],{"class":669},[186,150296,149920],{"class":202},[186,150298,149194],{"class":532},[186,150300,5909],{"class":202},[186,150302,4491],{"class":669},[186,150304,149406],{"class":202},[186,150306,27500],{"class":669},[186,150308,150309],{"class":202}," data[",[186,150311,70706],{"class":532},[186,150313,78960],{"class":202},[186,150315,150316],{"class":188,"line":242},[186,150317,3867],{"emptyLinePlaceholder":1551},[186,150319,150320,150322,150324],{"class":188,"line":248},[186,150321,148449],{"class":202},[186,150323,529],{"class":669},[186,150325,148454],{"class":202},[186,150327,150328],{"class":188,"line":265},[186,150329,149038],{"class":202},[186,150331,150332],{"class":188,"line":271},[186,150333,3867],{"emptyLinePlaceholder":1551},[186,150335,150336,150338,150341,150343],{"class":188,"line":288},[186,150337,4491],{"class":669},[186,150339,150340],{"class":202}," city, records ",[186,150342,27500],{"class":669},[186,150344,150345],{"class":202}," data.items():\n",[186,150347,150348,150351,150353,150355,150357,150359,150361,150363,150365],{"class":188,"line":294},[186,150349,150350],{"class":202},"    values ",[186,150352,529],{"class":669},[186,150354,149920],{"class":202},[186,150356,150165],{"class":532},[186,150358,5909],{"class":202},[186,150360,4491],{"class":669},[186,150362,149406],{"class":202},[186,150364,27500],{"class":669},[186,150366,150367],{"class":202}," records]\n",[186,150369,150370,150373,150375,150377,150379],{"class":188,"line":1212},[186,150371,150372],{"class":202},"    line.add_yaxis(city, values, ",[186,150374,148942],{"class":835},[186,150376,529],{"class":669},[186,150378,32931],{"class":206},[186,150380,1629],{"class":202},[186,150382,150383],{"class":188,"line":1223},[186,150384,3867],{"emptyLinePlaceholder":1551},[186,150386,150387],{"class":188,"line":1236},[186,150388,148665],{"class":202},[186,150390,150391,150393,150395,150397,150399,150401,150404],{"class":188,"line":3096},[186,150392,148670],{"class":835},[186,150394,529],{"class":669},[186,150396,148675],{"class":202},[186,150398,52859],{"class":835},[186,150400,529],{"class":669},[186,150402,150403],{"class":532},"\"多地区趋势图\"",[186,150405,1138],{"class":202},[186,150407,150408,150410,150412,150414,150416,150418,150420],{"class":188,"line":3110},[186,150409,148726],{"class":835},[186,150411,529],{"class":669},[186,150413,148731],{"class":202},[186,150415,148734],{"class":835},[186,150417,529],{"class":669},[186,150419,148739],{"class":532},[186,150421,1138],{"class":202},[186,150423,150424],{"class":188,"line":3115},[186,150425,1629],{"class":202},[186,150427,150428,150430,150433],{"class":188,"line":3121},[186,150429,148521],{"class":202},[186,150431,150432],{"class":532},"\"trend.html\"",[186,150434,1629],{"class":202},[169,150436,150437],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150439,150441],{"id":150440},"_1012-易错点","10.12 易错点",[34,150443,150444,150450,150456,150466,150472],{},[22,150445,150446,150449],{},[183,150447,150448],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[22,150451,150452,150455],{},[183,150453,150454],{},"render()"," 生成的是 HTML，不是图片。",[22,150457,150458,150459,150462,150463,913],{},"JSON 字符串用 ",[183,150460,150461],{},"json.loads()","，JSON 文件用 ",[183,150464,150465],{},"json.load()",[22,150467,150468,150469,913],{},"中文 JSON 保存时加 ",[183,150470,150471],{},"ensure_ascii=False",[22,150473,150474],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150476,150478],{"id":150477},"_1013-本章练习","10.13 本章练习",[34,150480,150481,150484,150487,150490,150493],{},[22,150482,150483],{},"安装 pyecharts 并生成第一个折线图。",[22,150485,150486],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[22,150488,150489],{},"绘制两条折线，对比线上和线下销售额。",[22,150491,150492],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[22,150494,150495],{},"对含有空值的销售数据进行清洗后再绘图。",[1524,150497,150498],{},"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":181,"searchDepth":49,"depth":49,"links":150500},[150501,150502,150503,150504,150505,150506,150507,150508,150509,150510,150511,150512,150513],{"id":148117,"depth":49,"text":148118},{"id":148192,"depth":49,"text":148193},{"id":148371,"depth":49,"text":148372},{"id":148422,"depth":49,"text":148423},{"id":148556,"depth":49,"text":148557},{"id":148832,"depth":49,"text":148833},{"id":148958,"depth":49,"text":148959},{"id":149169,"depth":49,"text":149170},{"id":149540,"depth":49,"text":149541},{"id":149752,"depth":49,"text":149753},{"id":150124,"depth":49,"text":150125},{"id":150440,"depth":49,"text":150441},{"id":150477,"depth":49,"text":150478},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148109,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150520,"title":150521,"body":150522,"description":1548,"extension":1549,"meta":152882,"navigation":1551,"path":152883,"seo":152884,"stem":152885,"__hash__":152886},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150523,"toc":152859},[150524,150527,150531,150534,150537,150613,150616,150707,150710,150714,150717,150761,150774,150778,150781,150848,150851,150855,150858,150942,150950,150954,150959,151100,151103,151114,151120,151126,151240,151244,151247,151250,151503,151506,151510,151513,151617,151620,151624,151775,151779,151786,151899,151903,151906,152012,152015,152019,152022,152053,152056,152161,152164,152168,152172,152182,152250,152254,152261,152325,152328,152332,152338,152434,152443,152447,152771,152780,152784,152812,152816,152856],[10,150525,150521],{"id":150526},"_11-面向对象基础",[14,150528,150530],{"id":150529},"_111-什么是面向对象","11.1 什么是面向对象",[169,150532,150533],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[169,150535,150536],{},"面向过程：",[176,150538,150540],{"className":31833,"code":150539,"language":31835,"meta":181,"style":181},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[183,150541,150542,150551,150559,150563,150573,150604,150608],{"__ignoreMap":181},[186,150543,150544,150546,150548],{"class":188,"line":189},[186,150545,147733],{"class":202},[186,150547,529],{"class":669},[186,150549,150550],{"class":532}," \"小明\"\n",[186,150552,150553,150555,150557],{"class":188,"line":49},[186,150554,147743],{"class":202},[186,150556,529],{"class":669},[186,150558,147748],{"class":206},[186,150560,150561],{"class":188,"line":219},[186,150562,3867],{"emptyLinePlaceholder":1551},[186,150564,150565,150567,150570],{"class":188,"line":225},[186,150566,33402],{"class":669},[186,150568,150569],{"class":198}," introduce",[186,150571,150572],{"class":202},"(name, age):\n",[186,150574,150575,150577,150579,150581,150584,150586,150588,150590,150593,150595,150597,150599,150602],{"class":188,"line":242},[186,150576,32754],{"class":206},[186,150578,832],{"class":202},[186,150580,1673],{"class":669},[186,150582,150583],{"class":532},"\"我叫",[186,150585,2504],{"class":206},[186,150587,81242],{"class":202},[186,150589,2553],{"class":206},[186,150591,150592],{"class":532},"，今年",[186,150594,2504],{"class":206},[186,150596,71658],{"class":202},[186,150598,2553],{"class":206},[186,150600,150601],{"class":532},"岁\"",[186,150603,1629],{"class":202},[186,150605,150606],{"class":188,"line":248},[186,150607,3867],{"emptyLinePlaceholder":1551},[186,150609,150610],{"class":188,"line":265},[186,150611,150612],{"class":202},"introduce(name, age)\n",[169,150614,150615],{},"面向对象：",[176,150617,150619],{"className":31833,"code":150618,"language":31835,"meta":181,"style":181},"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",[183,150620,150621,150629,150637,150666,150670,150674,150684,150693,150702],{"__ignoreMap":181},[186,150622,150623,150625,150627],{"class":188,"line":189},[186,150624,16156],{"class":669},[186,150626,9361],{"class":198},[186,150628,5205],{"class":202},[186,150630,150631,150633,150635],{"class":188,"line":49},[186,150632,32256],{"class":669},[186,150634,150569],{"class":198},[186,150636,32262],{"class":202},[186,150638,150639,150641,150643,150645,150647,150650,150652,150654,150656,150658,150660,150662,150664],{"class":188,"line":219},[186,150640,33906],{"class":206},[186,150642,832],{"class":202},[186,150644,1673],{"class":669},[186,150646,150583],{"class":532},[186,150648,150649],{"class":206},"{self",[186,150651,81733],{"class":202},[186,150653,2553],{"class":206},[186,150655,150592],{"class":532},[186,150657,150649],{"class":206},[186,150659,81745],{"class":202},[186,150661,2553],{"class":206},[186,150663,150601],{"class":532},[186,150665,1629],{"class":202},[186,150667,150668],{"class":188,"line":225},[186,150669,3867],{"emptyLinePlaceholder":1551},[186,150671,150672],{"class":188,"line":242},[186,150673,3867],{"emptyLinePlaceholder":1551},[186,150675,150676,150679,150681],{"class":188,"line":248},[186,150677,150678],{"class":202},"student ",[186,150680,529],{"class":669},[186,150682,150683],{"class":202}," Student()\n",[186,150685,150686,150689,150691],{"class":188,"line":265},[186,150687,150688],{"class":202},"student.name ",[186,150690,529],{"class":669},[186,150692,150550],{"class":532},[186,150694,150695,150698,150700],{"class":188,"line":271},[186,150696,150697],{"class":202},"student.age ",[186,150699,529],{"class":669},[186,150701,147748],{"class":206},[186,150703,150704],{"class":188,"line":288},[186,150705,150706],{"class":202},"student.introduce()\n",[169,150708,150709],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150711,150713],{"id":150712},"_112-类和对象","11.2 类和对象",[169,150715,150716],{},"类是模板，对象是根据模板创建出来的具体实例。",[176,150718,150720],{"className":31833,"code":150719,"language":31835,"meta":181,"style":181},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[183,150721,150722,150730,150735,150739,150743,150752],{"__ignoreMap":181},[186,150723,150724,150726,150728],{"class":188,"line":189},[186,150725,16156],{"class":669},[186,150727,9361],{"class":198},[186,150729,5205],{"class":202},[186,150731,150732],{"class":188,"line":49},[186,150733,150734],{"class":669},"    pass\n",[186,150736,150737],{"class":188,"line":219},[186,150738,3867],{"emptyLinePlaceholder":1551},[186,150740,150741],{"class":188,"line":225},[186,150742,3867],{"emptyLinePlaceholder":1551},[186,150744,150745,150748,150750],{"class":188,"line":242},[186,150746,150747],{"class":202},"student1 ",[186,150749,529],{"class":669},[186,150751,150683],{"class":202},[186,150753,150754,150757,150759],{"class":188,"line":248},[186,150755,150756],{"class":202},"student2 ",[186,150758,529],{"class":669},[186,150760,150683],{"class":202},[169,150762,150763,150766,150767,102449,150770,150773],{},[183,150764,150765],{},"Student"," 是类，",[183,150768,150769],{},"student1",[183,150771,150772],{},"student2"," 是对象。",[14,150775,150777],{"id":150776},"_113-属性","11.3 属性",[169,150779,150780],{},"属性是对象保存的数据。",[176,150782,150784],{"className":31833,"code":150783,"language":31835,"meta":181,"style":181},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[183,150785,150786,150794,150798,150802,150806,150814,150822,150830,150834,150841],{"__ignoreMap":181},[186,150787,150788,150790,150792],{"class":188,"line":189},[186,150789,16156],{"class":669},[186,150791,9361],{"class":198},[186,150793,5205],{"class":202},[186,150795,150796],{"class":188,"line":49},[186,150797,150734],{"class":669},[186,150799,150800],{"class":188,"line":219},[186,150801,3867],{"emptyLinePlaceholder":1551},[186,150803,150804],{"class":188,"line":225},[186,150805,3867],{"emptyLinePlaceholder":1551},[186,150807,150808,150810,150812],{"class":188,"line":242},[186,150809,150678],{"class":202},[186,150811,529],{"class":669},[186,150813,150683],{"class":202},[186,150815,150816,150818,150820],{"class":188,"line":248},[186,150817,150688],{"class":202},[186,150819,529],{"class":669},[186,150821,150550],{"class":532},[186,150823,150824,150826,150828],{"class":188,"line":265},[186,150825,150697],{"class":202},[186,150827,529],{"class":669},[186,150829,147748],{"class":206},[186,150831,150832],{"class":188,"line":271},[186,150833,3867],{"emptyLinePlaceholder":1551},[186,150835,150836,150838],{"class":188,"line":288},[186,150837,31870],{"class":206},[186,150839,150840],{"class":202},"(student.name)\n",[186,150842,150843,150845],{"class":188,"line":294},[186,150844,31870],{"class":206},[186,150846,150847],{"class":202},"(student.age)\n",[169,150849,150850],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150852,150854],{"id":150853},"_114-方法","11.4 方法",[169,150856,150857],{},"类中的函数叫方法。",[176,150859,150860],{"className":31833,"code":150618,"language":31835,"meta":181,"style":181},[183,150861,150862,150870,150878,150906,150910,150914,150922,150930,150938],{"__ignoreMap":181},[186,150863,150864,150866,150868],{"class":188,"line":189},[186,150865,16156],{"class":669},[186,150867,9361],{"class":198},[186,150869,5205],{"class":202},[186,150871,150872,150874,150876],{"class":188,"line":49},[186,150873,32256],{"class":669},[186,150875,150569],{"class":198},[186,150877,32262],{"class":202},[186,150879,150880,150882,150884,150886,150888,150890,150892,150894,150896,150898,150900,150902,150904],{"class":188,"line":219},[186,150881,33906],{"class":206},[186,150883,832],{"class":202},[186,150885,1673],{"class":669},[186,150887,150583],{"class":532},[186,150889,150649],{"class":206},[186,150891,81733],{"class":202},[186,150893,2553],{"class":206},[186,150895,150592],{"class":532},[186,150897,150649],{"class":206},[186,150899,81745],{"class":202},[186,150901,2553],{"class":206},[186,150903,150601],{"class":532},[186,150905,1629],{"class":202},[186,150907,150908],{"class":188,"line":225},[186,150909,3867],{"emptyLinePlaceholder":1551},[186,150911,150912],{"class":188,"line":242},[186,150913,3867],{"emptyLinePlaceholder":1551},[186,150915,150916,150918,150920],{"class":188,"line":248},[186,150917,150678],{"class":202},[186,150919,529],{"class":669},[186,150921,150683],{"class":202},[186,150923,150924,150926,150928],{"class":188,"line":265},[186,150925,150688],{"class":202},[186,150927,529],{"class":669},[186,150929,150550],{"class":532},[186,150931,150932,150934,150936],{"class":188,"line":271},[186,150933,150697],{"class":202},[186,150935,529],{"class":669},[186,150937,147748],{"class":206},[186,150939,150940],{"class":188,"line":288},[186,150941,150706],{"class":202},[169,150943,150944,150946,150947,150949],{},[183,150945,32278],{}," 表示当前对象。调用方法时不需要手动传入 ",[183,150948,32278],{},"，Python 会自动传。",[14,150951,150953],{"id":150952},"_115-构造方法__init__","11.5 构造方法__init__",[169,150955,150956,150958],{},[183,150957,32284],{}," 在对象创建时自动执行，用于初始化属性。",[176,150960,150962],{"className":31833,"code":150961,"language":31835,"meta":181,"style":181},"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",[183,150963,150964,150972,150981,150993,151005,151016,151020,151028,151066,151070,151074,151096],{"__ignoreMap":181},[186,150965,150966,150968,150970],{"class":188,"line":189},[186,150967,16156],{"class":669},[186,150969,9361],{"class":198},[186,150971,5205],{"class":202},[186,150973,150974,150976,150978],{"class":188,"line":49},[186,150975,32256],{"class":669},[186,150977,32259],{"class":206},[186,150979,150980],{"class":202},"(self, name, age, score):\n",[186,150982,150983,150985,150988,150990],{"class":188,"line":219},[186,150984,32300],{"class":206},[186,150986,150987],{"class":202},".name ",[186,150989,529],{"class":669},[186,150991,150992],{"class":202}," name\n",[186,150994,150995,150997,151000,151002],{"class":188,"line":225},[186,150996,32300],{"class":206},[186,150998,150999],{"class":202},".age ",[186,151001,529],{"class":669},[186,151003,151004],{"class":202}," age\n",[186,151006,151007,151009,151012,151014],{"class":188,"line":242},[186,151008,32300],{"class":206},[186,151010,151011],{"class":202},".score ",[186,151013,529],{"class":669},[186,151015,3050],{"class":202},[186,151017,151018],{"class":188,"line":248},[186,151019,3867],{"emptyLinePlaceholder":1551},[186,151021,151022,151024,151026],{"class":188,"line":265},[186,151023,32256],{"class":669},[186,151025,150569],{"class":198},[186,151027,32262],{"class":202},[186,151029,151030,151032,151034,151036,151038,151040,151042,151044,151046,151048,151050,151052,151055,151057,151060,151062,151064],{"class":188,"line":271},[186,151031,33906],{"class":206},[186,151033,832],{"class":202},[186,151035,1673],{"class":669},[186,151037,150583],{"class":532},[186,151039,150649],{"class":206},[186,151041,81733],{"class":202},[186,151043,2553],{"class":206},[186,151045,150592],{"class":532},[186,151047,150649],{"class":206},[186,151049,81745],{"class":202},[186,151051,2553],{"class":206},[186,151053,151054],{"class":532},"岁，成绩",[186,151056,150649],{"class":206},[186,151058,151059],{"class":202},".score",[186,151061,2553],{"class":206},[186,151063,1862],{"class":532},[186,151065,1629],{"class":202},[186,151067,151068],{"class":188,"line":288},[186,151069,3867],{"emptyLinePlaceholder":1551},[186,151071,151072],{"class":188,"line":294},[186,151073,3867],{"emptyLinePlaceholder":1551},[186,151075,151076,151078,151080,151083,151086,151088,151090,151092,151094],{"class":188,"line":1212},[186,151077,150678],{"class":202},[186,151079,529],{"class":669},[186,151081,151082],{"class":202}," Student(",[186,151084,151085],{"class":532},"\"小明\"",[186,151087,13898],{"class":202},[186,151089,2260],{"class":206},[186,151091,13898],{"class":202},[186,151093,2596],{"class":206},[186,151095,1629],{"class":202},[186,151097,151098],{"class":188,"line":1223},[186,151099,150706],{"class":202},[169,151101,151102],{},"构造方法的好处：",[34,151104,151105,151108,151111],{},[22,151106,151107],{},"创建对象时必须提供必要数据。",[22,151109,151110],{},"属性初始化集中，不容易漏。",[22,151112,151113],{},"对象状态更完整。",[14,151115,151117,151118],{"id":151116},"_116-str","11.6 ",[54,151119,2775],{},[169,151121,151122,151123,913],{},"直接打印对象时，默认输出不直观。可以定义 ",[183,151124,151125],{},"__str__",[176,151127,151129],{"className":31833,"code":151128,"language":31835,"meta":181,"style":181},"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",[183,151130,151131,151139,151148,151158,151168,151172,151181,151209,151213,151217,151233],{"__ignoreMap":181},[186,151132,151133,151135,151137],{"class":188,"line":189},[186,151134,16156],{"class":669},[186,151136,9361],{"class":198},[186,151138,5205],{"class":202},[186,151140,151141,151143,151145],{"class":188,"line":49},[186,151142,32256],{"class":669},[186,151144,32259],{"class":206},[186,151146,151147],{"class":202},"(self, name, age):\n",[186,151149,151150,151152,151154,151156],{"class":188,"line":219},[186,151151,32300],{"class":206},[186,151153,150987],{"class":202},[186,151155,529],{"class":669},[186,151157,150992],{"class":202},[186,151159,151160,151162,151164,151166],{"class":188,"line":225},[186,151161,32300],{"class":206},[186,151163,150999],{"class":202},[186,151165,529],{"class":669},[186,151167,151004],{"class":202},[186,151169,151170],{"class":188,"line":242},[186,151171,3867],{"emptyLinePlaceholder":1551},[186,151173,151174,151176,151179],{"class":188,"line":248},[186,151175,32256],{"class":669},[186,151177,151178],{"class":206}," __str__",[186,151180,32262],{"class":202},[186,151182,151183,151185,151188,151191,151193,151195,151197,151200,151202,151204,151206],{"class":188,"line":265},[186,151184,16214],{"class":669},[186,151186,151187],{"class":669}," f",[186,151189,151190],{"class":532},"\"Student(name=",[186,151192,150649],{"class":206},[186,151194,81733],{"class":202},[186,151196,2553],{"class":206},[186,151198,151199],{"class":532},", age=",[186,151201,150649],{"class":206},[186,151203,81745],{"class":202},[186,151205,2553],{"class":206},[186,151207,151208],{"class":532},")\"\n",[186,151210,151211],{"class":188,"line":271},[186,151212,3867],{"emptyLinePlaceholder":1551},[186,151214,151215],{"class":188,"line":288},[186,151216,3867],{"emptyLinePlaceholder":1551},[186,151218,151219,151221,151223,151225,151227,151229,151231],{"class":188,"line":294},[186,151220,150678],{"class":202},[186,151222,529],{"class":669},[186,151224,151082],{"class":202},[186,151226,151085],{"class":532},[186,151228,13898],{"class":202},[186,151230,2260],{"class":206},[186,151232,1629],{"class":202},[186,151234,151235,151237],{"class":188,"line":1212},[186,151236,31870],{"class":206},[186,151238,151239],{"class":202},"(student)\n",[14,151241,151243],{"id":151242},"_117-封装","11.7 封装",[169,151245,151246],{},"封装就是把数据和方法放到类中，并控制访问方式。",[169,151248,151249],{},"Python 中以双下划线开头的属性通常视为私有属性。",[176,151251,151253],{"className":31833,"code":151252,"language":31835,"meta":181,"style":181},"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",[183,151254,151255,151264,151273,151285,151297,151301,151310,151319,151323,151333,151346,151357,151362,151373,151377,151386,151398,151409,151413,151426,151437,151441,151452,151456,151460,151478,151487,151496],{"__ignoreMap":181},[186,151256,151257,151259,151262],{"class":188,"line":189},[186,151258,16156],{"class":669},[186,151260,151261],{"class":198}," Account",[186,151263,5205],{"class":202},[186,151265,151266,151268,151270],{"class":188,"line":49},[186,151267,32256],{"class":669},[186,151269,32259],{"class":206},[186,151271,151272],{"class":202},"(self, owner, balance):\n",[186,151274,151275,151277,151280,151282],{"class":188,"line":219},[186,151276,32300],{"class":206},[186,151278,151279],{"class":202},".owner ",[186,151281,529],{"class":669},[186,151283,151284],{"class":202}," owner\n",[186,151286,151287,151289,151292,151294],{"class":188,"line":225},[186,151288,32300],{"class":206},[186,151290,151291],{"class":202},".__balance ",[186,151293,529],{"class":669},[186,151295,151296],{"class":202}," balance\n",[186,151298,151299],{"class":188,"line":242},[186,151300,3867],{"emptyLinePlaceholder":1551},[186,151302,151303,151305,151308],{"class":188,"line":248},[186,151304,32256],{"class":669},[186,151306,151307],{"class":198}," get_balance",[186,151309,32262],{"class":202},[186,151311,151312,151314,151316],{"class":188,"line":265},[186,151313,16214],{"class":669},[186,151315,40327],{"class":206},[186,151317,151318],{"class":202},".__balance\n",[186,151320,151321],{"class":188,"line":271},[186,151322,3867],{"emptyLinePlaceholder":1551},[186,151324,151325,151327,151330],{"class":188,"line":288},[186,151326,32256],{"class":669},[186,151328,151329],{"class":198}," deposit",[186,151331,151332],{"class":202},"(self, money):\n",[186,151334,151335,151337,151340,151342,151344],{"class":188,"line":294},[186,151336,3964],{"class":669},[186,151338,151339],{"class":202}," money ",[186,151341,3059],{"class":669},[186,151343,5559],{"class":206},[186,151345,5205],{"class":202},[186,151347,151348,151350,151352,151355],{"class":188,"line":1212},[186,151349,36105],{"class":206},[186,151351,832],{"class":202},[186,151353,151354],{"class":532},"\"存款金额必须大于0\"",[186,151356,1629],{"class":202},[186,151358,151359],{"class":188,"line":1223},[186,151360,151361],{"class":669},"            return\n",[186,151363,151364,151366,151368,151370],{"class":188,"line":1236},[186,151365,32300],{"class":206},[186,151367,151291],{"class":202},[186,151369,10940],{"class":669},[186,151371,151372],{"class":202}," money\n",[186,151374,151375],{"class":188,"line":3096},[186,151376,3867],{"emptyLinePlaceholder":1551},[186,151378,151379,151381,151384],{"class":188,"line":3110},[186,151380,32256],{"class":669},[186,151382,151383],{"class":198}," withdraw",[186,151385,151332],{"class":202},[186,151387,151388,151390,151392,151394,151396],{"class":188,"line":3115},[186,151389,3964],{"class":669},[186,151391,151339],{"class":202},[186,151393,3059],{"class":669},[186,151395,5559],{"class":206},[186,151397,5205],{"class":202},[186,151399,151400,151402,151404,151407],{"class":188,"line":3121},[186,151401,36105],{"class":206},[186,151403,832],{"class":202},[186,151405,151406],{"class":532},"\"取款金额必须大于0\"",[186,151408,1629],{"class":202},[186,151410,151411],{"class":188,"line":3142},[186,151412,151361],{"class":669},[186,151414,151415,151417,151419,151421,151423],{"class":188,"line":3147},[186,151416,3964],{"class":669},[186,151418,151339],{"class":202},[186,151420,2567],{"class":669},[186,151422,40327],{"class":206},[186,151424,151425],{"class":202},".__balance:\n",[186,151427,151428,151430,151432,151435],{"class":188,"line":3161},[186,151429,36105],{"class":206},[186,151431,832],{"class":202},[186,151433,151434],{"class":532},"\"余额不足\"",[186,151436,1629],{"class":202},[186,151438,151439],{"class":188,"line":3166},[186,151440,151361],{"class":669},[186,151442,151443,151445,151447,151450],{"class":188,"line":3195},[186,151444,32300],{"class":206},[186,151446,151291],{"class":202},[186,151448,151449],{"class":669},"-=",[186,151451,151372],{"class":202},[186,151453,151454],{"class":188,"line":3200},[186,151455,3867],{"emptyLinePlaceholder":1551},[186,151457,151458],{"class":188,"line":3217},[186,151459,3867],{"emptyLinePlaceholder":1551},[186,151461,151462,151465,151467,151470,151472,151474,151476],{"class":188,"line":3222},[186,151463,151464],{"class":202},"account ",[186,151466,529],{"class":669},[186,151468,151469],{"class":202}," Account(",[186,151471,151085],{"class":532},[186,151473,13898],{"class":202},[186,151475,7873],{"class":206},[186,151477,1629],{"class":202},[186,151479,151480,151483,151485],{"class":188,"line":3227},[186,151481,151482],{"class":202},"account.deposit(",[186,151484,3190],{"class":206},[186,151486,1629],{"class":202},[186,151488,151489,151492,151494],{"class":188,"line":3232},[186,151490,151491],{"class":202},"account.withdraw(",[186,151493,1922],{"class":206},[186,151495,1629],{"class":202},[186,151497,151498,151500],{"class":188,"line":3246},[186,151499,31870],{"class":206},[186,151501,151502],{"class":202},"(account.get_balance())\n",[169,151504,151505],{},"封装的意义是避免外部随意修改内部状态。",[14,151507,151509],{"id":151508},"_118-继承","11.8 继承",[169,151511,151512],{},"继承可以让子类复用父类的属性和方法。",[176,151514,151516],{"className":31833,"code":151515,"language":31835,"meta":181,"style":181},"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",[183,151517,151518,151527,151536,151547,151551,151555,151569,151578,151589,151593,151597,151607,151612],{"__ignoreMap":181},[186,151519,151520,151522,151525],{"class":188,"line":189},[186,151521,16156],{"class":669},[186,151523,151524],{"class":198}," Animal",[186,151526,5205],{"class":202},[186,151528,151529,151531,151534],{"class":188,"line":49},[186,151530,32256],{"class":669},[186,151532,151533],{"class":198}," eat",[186,151535,32262],{"class":202},[186,151537,151538,151540,151542,151545],{"class":188,"line":219},[186,151539,33906],{"class":206},[186,151541,832],{"class":202},[186,151543,151544],{"class":532},"\"吃东西\"",[186,151546,1629],{"class":202},[186,151548,151549],{"class":188,"line":225},[186,151550,3867],{"emptyLinePlaceholder":1551},[186,151552,151553],{"class":188,"line":242},[186,151554,3867],{"emptyLinePlaceholder":1551},[186,151556,151557,151559,151562,151564,151567],{"class":188,"line":248},[186,151558,16156],{"class":669},[186,151560,151561],{"class":198}," Dog",[186,151563,832],{"class":202},[186,151565,151566],{"class":198},"Animal",[186,151568,32241],{"class":202},[186,151570,151571,151573,151576],{"class":188,"line":265},[186,151572,32256],{"class":669},[186,151574,151575],{"class":198}," bark",[186,151577,32262],{"class":202},[186,151579,151580,151582,151584,151587],{"class":188,"line":271},[186,151581,33906],{"class":206},[186,151583,832],{"class":202},[186,151585,151586],{"class":532},"\"汪汪\"",[186,151588,1629],{"class":202},[186,151590,151591],{"class":188,"line":288},[186,151592,3867],{"emptyLinePlaceholder":1551},[186,151594,151595],{"class":188,"line":294},[186,151596,3867],{"emptyLinePlaceholder":1551},[186,151598,151599,151602,151604],{"class":188,"line":1212},[186,151600,151601],{"class":202},"dog ",[186,151603,529],{"class":669},[186,151605,151606],{"class":202}," Dog()\n",[186,151608,151609],{"class":188,"line":1223},[186,151610,151611],{"class":202},"dog.eat()\n",[186,151613,151614],{"class":188,"line":1236},[186,151615,151616],{"class":202},"dog.bark()\n",[169,151618,151619],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151621,151623],{"id":151622},"_119-方法重写","11.9 方法重写",[176,151625,151627],{"className":31833,"code":151626,"language":31835,"meta":181,"style":181},"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",[183,151628,151629,151637,151646,151657,151661,151665,151677,151685,151695,151699,151703,151716,151724,151735,151739,151743,151751,151761,151765,151770],{"__ignoreMap":181},[186,151630,151631,151633,151635],{"class":188,"line":189},[186,151632,16156],{"class":669},[186,151634,151524],{"class":198},[186,151636,5205],{"class":202},[186,151638,151639,151641,151644],{"class":188,"line":49},[186,151640,32256],{"class":669},[186,151642,151643],{"class":198}," speak",[186,151645,32262],{"class":202},[186,151647,151648,151650,151652,151655],{"class":188,"line":219},[186,151649,33906],{"class":206},[186,151651,832],{"class":202},[186,151653,151654],{"class":532},"\"动物叫\"",[186,151656,1629],{"class":202},[186,151658,151659],{"class":188,"line":225},[186,151660,3867],{"emptyLinePlaceholder":1551},[186,151662,151663],{"class":188,"line":242},[186,151664,3867],{"emptyLinePlaceholder":1551},[186,151666,151667,151669,151671,151673,151675],{"class":188,"line":248},[186,151668,16156],{"class":669},[186,151670,151561],{"class":198},[186,151672,832],{"class":202},[186,151674,151566],{"class":198},[186,151676,32241],{"class":202},[186,151678,151679,151681,151683],{"class":188,"line":265},[186,151680,32256],{"class":669},[186,151682,151643],{"class":198},[186,151684,32262],{"class":202},[186,151686,151687,151689,151691,151693],{"class":188,"line":271},[186,151688,33906],{"class":206},[186,151690,832],{"class":202},[186,151692,151586],{"class":532},[186,151694,1629],{"class":202},[186,151696,151697],{"class":188,"line":288},[186,151698,3867],{"emptyLinePlaceholder":1551},[186,151700,151701],{"class":188,"line":294},[186,151702,3867],{"emptyLinePlaceholder":1551},[186,151704,151705,151707,151710,151712,151714],{"class":188,"line":1212},[186,151706,16156],{"class":669},[186,151708,151709],{"class":198}," Cat",[186,151711,832],{"class":202},[186,151713,151566],{"class":198},[186,151715,32241],{"class":202},[186,151717,151718,151720,151722],{"class":188,"line":1223},[186,151719,32256],{"class":669},[186,151721,151643],{"class":198},[186,151723,32262],{"class":202},[186,151725,151726,151728,151730,151733],{"class":188,"line":1236},[186,151727,33906],{"class":206},[186,151729,832],{"class":202},[186,151731,151732],{"class":532},"\"喵喵\"",[186,151734,1629],{"class":202},[186,151736,151737],{"class":188,"line":3096},[186,151738,3867],{"emptyLinePlaceholder":1551},[186,151740,151741],{"class":188,"line":3110},[186,151742,3867],{"emptyLinePlaceholder":1551},[186,151744,151745,151747,151749],{"class":188,"line":3115},[186,151746,151601],{"class":202},[186,151748,529],{"class":669},[186,151750,151606],{"class":202},[186,151752,151753,151756,151758],{"class":188,"line":3121},[186,151754,151755],{"class":202},"cat ",[186,151757,529],{"class":669},[186,151759,151760],{"class":202}," Cat()\n",[186,151762,151763],{"class":188,"line":3142},[186,151764,3867],{"emptyLinePlaceholder":1551},[186,151766,151767],{"class":188,"line":3147},[186,151768,151769],{"class":202},"dog.speak()\n",[186,151771,151772],{"class":188,"line":3161},[186,151773,151774],{"class":202},"cat.speak()\n",[14,151776,151778],{"id":151777},"_1110-super","11.10 super",[169,151780,151781,151782,151785],{},"子类可以通过 ",[183,151783,151784],{},"super()"," 调用父类方法。",[176,151787,151789],{"className":31833,"code":151788,"language":31835,"meta":181,"style":181},"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",[183,151790,151791,151799,151808,151818,151822,151826,151838,151847,151858,151868,151872,151876,151892],{"__ignoreMap":181},[186,151792,151793,151795,151797],{"class":188,"line":189},[186,151794,16156],{"class":669},[186,151796,17031],{"class":198},[186,151798,5205],{"class":202},[186,151800,151801,151803,151805],{"class":188,"line":49},[186,151802,32256],{"class":669},[186,151804,32259],{"class":206},[186,151806,151807],{"class":202},"(self, name):\n",[186,151809,151810,151812,151814,151816],{"class":188,"line":219},[186,151811,32300],{"class":206},[186,151813,150987],{"class":202},[186,151815,529],{"class":669},[186,151817,150992],{"class":202},[186,151819,151820],{"class":188,"line":225},[186,151821,3867],{"emptyLinePlaceholder":1551},[186,151823,151824],{"class":188,"line":242},[186,151825,3867],{"emptyLinePlaceholder":1551},[186,151827,151828,151830,151832,151834,151836],{"class":188,"line":248},[186,151829,16156],{"class":669},[186,151831,9361],{"class":198},[186,151833,832],{"class":202},[186,151835,20507],{"class":198},[186,151837,32241],{"class":202},[186,151839,151840,151842,151844],{"class":188,"line":265},[186,151841,32256],{"class":669},[186,151843,32259],{"class":206},[186,151845,151846],{"class":202},"(self, name, score):\n",[186,151848,151849,151851,151853,151855],{"class":188,"line":271},[186,151850,32272],{"class":206},[186,151852,18722],{"class":202},[186,151854,32284],{"class":206},[186,151856,151857],{"class":202},"(name)\n",[186,151859,151860,151862,151864,151866],{"class":188,"line":288},[186,151861,32300],{"class":206},[186,151863,151011],{"class":202},[186,151865,529],{"class":669},[186,151867,3050],{"class":202},[186,151869,151870],{"class":188,"line":294},[186,151871,3867],{"emptyLinePlaceholder":1551},[186,151873,151874],{"class":188,"line":1212},[186,151875,3867],{"emptyLinePlaceholder":1551},[186,151877,151878,151880,151882,151884,151886,151888,151890],{"class":188,"line":1223},[186,151879,150678],{"class":202},[186,151881,529],{"class":669},[186,151883,151082],{"class":202},[186,151885,151085],{"class":532},[186,151887,13898],{"class":202},[186,151889,2596],{"class":206},[186,151891,1629],{"class":202},[186,151893,151894,151896],{"class":188,"line":1236},[186,151895,31870],{"class":206},[186,151897,151898],{"class":202},"(student.name, student.score)\n",[14,151900,151902],{"id":151901},"_1111-多态","11.11 多态",[169,151904,151905],{},"多态指不同对象响应同一个方法，表现出不同结果。",[176,151907,151909],{"className":31833,"code":151908,"language":31835,"meta":181,"style":181},"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",[183,151910,151911,151919,151927,151937,151941,151945,151953,151961,151971,151975,151979,151989,151994,151998,152002,152007],{"__ignoreMap":181},[186,151912,151913,151915,151917],{"class":188,"line":189},[186,151914,16156],{"class":669},[186,151916,151561],{"class":198},[186,151918,5205],{"class":202},[186,151920,151921,151923,151925],{"class":188,"line":49},[186,151922,32256],{"class":669},[186,151924,151643],{"class":198},[186,151926,32262],{"class":202},[186,151928,151929,151931,151933,151935],{"class":188,"line":219},[186,151930,33906],{"class":206},[186,151932,832],{"class":202},[186,151934,151586],{"class":532},[186,151936,1629],{"class":202},[186,151938,151939],{"class":188,"line":225},[186,151940,3867],{"emptyLinePlaceholder":1551},[186,151942,151943],{"class":188,"line":242},[186,151944,3867],{"emptyLinePlaceholder":1551},[186,151946,151947,151949,151951],{"class":188,"line":248},[186,151948,16156],{"class":669},[186,151950,151709],{"class":198},[186,151952,5205],{"class":202},[186,151954,151955,151957,151959],{"class":188,"line":265},[186,151956,32256],{"class":669},[186,151958,151643],{"class":198},[186,151960,32262],{"class":202},[186,151962,151963,151965,151967,151969],{"class":188,"line":271},[186,151964,33906],{"class":206},[186,151966,832],{"class":202},[186,151968,151732],{"class":532},[186,151970,1629],{"class":202},[186,151972,151973],{"class":188,"line":288},[186,151974,3867],{"emptyLinePlaceholder":1551},[186,151976,151977],{"class":188,"line":294},[186,151978,3867],{"emptyLinePlaceholder":1551},[186,151980,151981,151983,151986],{"class":188,"line":1212},[186,151982,33402],{"class":669},[186,151984,151985],{"class":198}," make_sound",[186,151987,151988],{"class":202},"(animal):\n",[186,151990,151991],{"class":188,"line":1223},[186,151992,151993],{"class":202},"    animal.speak()\n",[186,151995,151996],{"class":188,"line":1236},[186,151997,3867],{"emptyLinePlaceholder":1551},[186,151999,152000],{"class":188,"line":3096},[186,152001,3867],{"emptyLinePlaceholder":1551},[186,152003,152004],{"class":188,"line":3110},[186,152005,152006],{"class":202},"make_sound(Dog())\n",[186,152008,152009],{"class":188,"line":3115},[186,152010,152011],{"class":202},"make_sound(Cat())\n",[169,152013,152014],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152016,152018],{"id":152017},"_1112-类属性和实例属性","11.12 类属性和实例属性",[169,152020,152021],{},"实例属性属于对象：",[176,152023,152025],{"className":31833,"code":152024,"language":31835,"meta":181,"style":181},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[183,152026,152027,152035,152043],{"__ignoreMap":181},[186,152028,152029,152031,152033],{"class":188,"line":189},[186,152030,16156],{"class":669},[186,152032,9361],{"class":198},[186,152034,5205],{"class":202},[186,152036,152037,152039,152041],{"class":188,"line":49},[186,152038,32256],{"class":669},[186,152040,32259],{"class":206},[186,152042,151807],{"class":202},[186,152044,152045,152047,152049,152051],{"class":188,"line":219},[186,152046,32300],{"class":206},[186,152048,150987],{"class":202},[186,152050,529],{"class":669},[186,152052,150992],{"class":202},[169,152054,152055],{},"类属性属于类，所有对象共享：",[176,152057,152059],{"className":31833,"code":152058,"language":31835,"meta":181,"style":181},"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",[183,152060,152061,152069,152079,152083,152091,152101,152105,152109,152122,152136,152140,152147,152154],{"__ignoreMap":181},[186,152062,152063,152065,152067],{"class":188,"line":189},[186,152064,16156],{"class":669},[186,152066,9361],{"class":198},[186,152068,5205],{"class":202},[186,152070,152071,152074,152076],{"class":188,"line":49},[186,152072,152073],{"class":202},"    school ",[186,152075,529],{"class":669},[186,152077,152078],{"class":532}," \"黑马学校\"\n",[186,152080,152081],{"class":188,"line":219},[186,152082,3867],{"emptyLinePlaceholder":1551},[186,152084,152085,152087,152089],{"class":188,"line":225},[186,152086,32256],{"class":669},[186,152088,32259],{"class":206},[186,152090,151807],{"class":202},[186,152092,152093,152095,152097,152099],{"class":188,"line":242},[186,152094,32300],{"class":206},[186,152096,150987],{"class":202},[186,152098,529],{"class":669},[186,152100,150992],{"class":202},[186,152102,152103],{"class":188,"line":248},[186,152104,3867],{"emptyLinePlaceholder":1551},[186,152106,152107],{"class":188,"line":265},[186,152108,3867],{"emptyLinePlaceholder":1551},[186,152110,152111,152114,152116,152118,152120],{"class":188,"line":271},[186,152112,152113],{"class":202},"s1 ",[186,152115,529],{"class":669},[186,152117,151082],{"class":202},[186,152119,151085],{"class":532},[186,152121,1629],{"class":202},[186,152123,152124,152127,152129,152131,152134],{"class":188,"line":288},[186,152125,152126],{"class":202},"s2 ",[186,152128,529],{"class":669},[186,152130,151082],{"class":202},[186,152132,152133],{"class":532},"\"小红\"",[186,152135,1629],{"class":202},[186,152137,152138],{"class":188,"line":294},[186,152139,3867],{"emptyLinePlaceholder":1551},[186,152141,152142,152144],{"class":188,"line":1212},[186,152143,31870],{"class":206},[186,152145,152146],{"class":202},"(s1.school)\n",[186,152148,152149,152151],{"class":188,"line":1223},[186,152150,31870],{"class":206},[186,152152,152153],{"class":202},"(s2.school)\n",[186,152155,152156,152158],{"class":188,"line":1236},[186,152157,31870],{"class":206},[186,152159,152160],{"class":202},"(Student.school)\n",[169,152162,152163],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152165,152167],{"id":152166},"_1113-类方法和静态方法","11.13 类方法和静态方法",[29,152169,152171],{"id":152170},"_11131-类方法","11.13.1 类方法",[169,152173,152174,152175,152178,152179,913],{},"类方法使用 ",[183,152176,152177],{},"@classmethod","，第一个参数通常是 ",[183,152180,152181],{},"cls",[176,152183,152185],{"className":31833,"code":152184,"language":31835,"meta":181,"style":181},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[183,152186,152187,152195,152203,152207,152215,152225,152235,152239,152243],{"__ignoreMap":181},[186,152188,152189,152191,152193],{"class":188,"line":189},[186,152190,16156],{"class":669},[186,152192,9361],{"class":198},[186,152194,5205],{"class":202},[186,152196,152197,152199,152201],{"class":188,"line":49},[186,152198,152073],{"class":202},[186,152200,529],{"class":669},[186,152202,152078],{"class":532},[186,152204,152205],{"class":188,"line":219},[186,152206,3867],{"emptyLinePlaceholder":1551},[186,152208,152209,152212],{"class":188,"line":225},[186,152210,152211],{"class":198},"    @",[186,152213,152214],{"class":206},"classmethod\n",[186,152216,152217,152219,152222],{"class":188,"line":242},[186,152218,32256],{"class":669},[186,152220,152221],{"class":198}," get_school",[186,152223,152224],{"class":202},"(cls):\n",[186,152226,152227,152229,152232],{"class":188,"line":248},[186,152228,16214],{"class":669},[186,152230,152231],{"class":206}," cls",[186,152233,152234],{"class":202},".school\n",[186,152236,152237],{"class":188,"line":265},[186,152238,3867],{"emptyLinePlaceholder":1551},[186,152240,152241],{"class":188,"line":271},[186,152242,3867],{"emptyLinePlaceholder":1551},[186,152244,152245,152247],{"class":188,"line":288},[186,152246,31870],{"class":206},[186,152248,152249],{"class":202},"(Student.get_school())\n",[29,152251,152253],{"id":152252},"_11132-静态方法","11.13.2 静态方法",[169,152255,152256,152257,152260],{},"静态方法使用 ",[183,152258,152259],{},"@staticmethod","，不需要访问实例和类。",[176,152262,152264],{"className":31833,"code":152263,"language":31835,"meta":181,"style":181},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[183,152265,152266,152275,152282,152291,152302,152306,152310],{"__ignoreMap":181},[186,152267,152268,152270,152273],{"class":188,"line":189},[186,152269,16156],{"class":669},[186,152271,152272],{"class":198}," MathUtils",[186,152274,5205],{"class":202},[186,152276,152277,152279],{"class":188,"line":49},[186,152278,152211],{"class":198},[186,152280,152281],{"class":206},"staticmethod\n",[186,152283,152284,152286,152288],{"class":188,"line":219},[186,152285,32256],{"class":669},[186,152287,6673],{"class":198},[186,152289,152290],{"class":202},"(a, b):\n",[186,152292,152293,152295,152297,152299],{"class":188,"line":225},[186,152294,16214],{"class":669},[186,152296,12332],{"class":202},[186,152298,2091],{"class":669},[186,152300,152301],{"class":202}," b\n",[186,152303,152304],{"class":188,"line":242},[186,152305,3867],{"emptyLinePlaceholder":1551},[186,152307,152308],{"class":188,"line":248},[186,152309,3867],{"emptyLinePlaceholder":1551},[186,152311,152312,152314,152317,152319,152321,152323],{"class":188,"line":265},[186,152313,31870],{"class":206},[186,152315,152316],{"class":202},"(MathUtils.add(",[186,152318,1829],{"class":206},[186,152320,13898],{"class":202},[186,152322,1697],{"class":206},[186,152324,31952],{"class":202},[169,152326,152327],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152329,152331],{"id":152330},"_1114-dataclass","11.14 dataclass",[169,152333,152334,152337],{},[183,152335,152336],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[176,152339,152341],{"className":31833,"code":152340,"language":31835,"meta":181,"style":181},"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",[183,152342,152343,152355,152359,152363,152368,152376,152384,152392,152400,152404,152408,152428],{"__ignoreMap":181},[186,152344,152345,152347,152350,152352],{"class":188,"line":189},[186,152346,32192],{"class":669},[186,152348,152349],{"class":202}," dataclasses ",[186,152351,31847],{"class":669},[186,152353,152354],{"class":202}," dataclass\n",[186,152356,152357],{"class":188,"line":49},[186,152358,3867],{"emptyLinePlaceholder":1551},[186,152360,152361],{"class":188,"line":219},[186,152362,3867],{"emptyLinePlaceholder":1551},[186,152364,152365],{"class":188,"line":225},[186,152366,152367],{"class":198},"@dataclass\n",[186,152369,152370,152372,152374],{"class":188,"line":242},[186,152371,16156],{"class":669},[186,152373,9361],{"class":198},[186,152375,5205],{"class":202},[186,152377,152378,152381],{"class":188,"line":248},[186,152379,152380],{"class":202},"    name: ",[186,152382,152383],{"class":206},"str\n",[186,152385,152386,152389],{"class":188,"line":265},[186,152387,152388],{"class":202},"    age: ",[186,152390,152391],{"class":206},"int\n",[186,152393,152394,152397],{"class":188,"line":271},[186,152395,152396],{"class":202},"    score: ",[186,152398,152399],{"class":206},"float\n",[186,152401,152402],{"class":188,"line":288},[186,152403,3867],{"emptyLinePlaceholder":1551},[186,152405,152406],{"class":188,"line":294},[186,152407,3867],{"emptyLinePlaceholder":1551},[186,152409,152410,152412,152414,152416,152418,152420,152422,152424,152426],{"class":188,"line":1212},[186,152411,150678],{"class":202},[186,152413,529],{"class":669},[186,152415,151082],{"class":202},[186,152417,151085],{"class":532},[186,152419,13898],{"class":202},[186,152421,2260],{"class":206},[186,152423,13898],{"class":202},[186,152425,2596],{"class":206},[186,152427,1629],{"class":202},[186,152429,152430,152432],{"class":188,"line":1223},[186,152431,31870],{"class":206},[186,152433,151239],{"class":202},[169,152435,152436,152437,1824,152439,152442],{},"它会自动生成 ",[183,152438,32284],{},[183,152440,152441],{},"__repr__"," 等方法。适合数据模型类。",[14,152444,152446],{"id":152445},"_1115-小案例学生类","11.15 小案例：学生类",[176,152448,152450],{"className":31833,"code":152449,"language":31835,"meta":181,"style":181},"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",[183,152451,152452,152460,152469,152481,152491,152501,152511,152515,152524,152537,152541,152550,152556,152568,152580,152592,152604,152608,152612,152618,152628,152637,152647,152655,152663,152672,152676,152680,152688,152724,152728,152732,152757,152764],{"__ignoreMap":181},[186,152453,152454,152456,152458],{"class":188,"line":189},[186,152455,16156],{"class":669},[186,152457,9361],{"class":198},[186,152459,5205],{"class":202},[186,152461,152462,152464,152466],{"class":188,"line":49},[186,152463,32256],{"class":669},[186,152465,32259],{"class":206},[186,152467,152468],{"class":202},"(self, student_id, name, age, score):\n",[186,152470,152471,152473,152476,152478],{"class":188,"line":219},[186,152472,32300],{"class":206},[186,152474,152475],{"class":202},".student_id ",[186,152477,529],{"class":669},[186,152479,152480],{"class":202}," student_id\n",[186,152482,152483,152485,152487,152489],{"class":188,"line":225},[186,152484,32300],{"class":206},[186,152486,150987],{"class":202},[186,152488,529],{"class":669},[186,152490,150992],{"class":202},[186,152492,152493,152495,152497,152499],{"class":188,"line":242},[186,152494,32300],{"class":206},[186,152496,150999],{"class":202},[186,152498,529],{"class":669},[186,152500,151004],{"class":202},[186,152502,152503,152505,152507,152509],{"class":188,"line":248},[186,152504,32300],{"class":206},[186,152506,151011],{"class":202},[186,152508,529],{"class":669},[186,152510,3050],{"class":202},[186,152512,152513],{"class":188,"line":265},[186,152514,3867],{"emptyLinePlaceholder":1551},[186,152516,152517,152519,152522],{"class":188,"line":271},[186,152518,32256],{"class":669},[186,152520,152521],{"class":198}," is_passed",[186,152523,32262],{"class":202},[186,152525,152526,152528,152530,152532,152534],{"class":188,"line":288},[186,152527,16214],{"class":669},[186,152529,40327],{"class":206},[186,152531,151011],{"class":202},[186,152533,3178],{"class":669},[186,152535,152536],{"class":206}," 60\n",[186,152538,152539],{"class":188,"line":294},[186,152540,3867],{"emptyLinePlaceholder":1551},[186,152542,152543,152545,152548],{"class":188,"line":1212},[186,152544,32256],{"class":669},[186,152546,152547],{"class":198}," to_dict",[186,152549,32262],{"class":202},[186,152551,152552,152554],{"class":188,"line":1223},[186,152553,16214],{"class":669},[186,152555,622],{"class":202},[186,152557,152558,152561,152563,152565],{"class":188,"line":1236},[186,152559,152560],{"class":532},"            \"student_id\"",[186,152562,210],{"class":202},[186,152564,32278],{"class":206},[186,152566,152567],{"class":202},".student_id,\n",[186,152569,152570,152573,152575,152577],{"class":188,"line":3096},[186,152571,152572],{"class":532},"            \"name\"",[186,152574,210],{"class":202},[186,152576,32278],{"class":206},[186,152578,152579],{"class":202},".name,\n",[186,152581,152582,152585,152587,152589],{"class":188,"line":3110},[186,152583,152584],{"class":532},"            \"age\"",[186,152586,210],{"class":202},[186,152588,32278],{"class":206},[186,152590,152591],{"class":202},".age,\n",[186,152593,152594,152597,152599,152601],{"class":188,"line":3115},[186,152595,152596],{"class":532},"            \"score\"",[186,152598,210],{"class":202},[186,152600,32278],{"class":206},[186,152602,152603],{"class":202},".score,\n",[186,152605,152606],{"class":188,"line":3121},[186,152607,3996],{"class":202},[186,152609,152610],{"class":188,"line":3142},[186,152611,3867],{"emptyLinePlaceholder":1551},[186,152613,152614,152616],{"class":188,"line":3147},[186,152615,152211],{"class":198},[186,152617,152214],{"class":206},[186,152619,152620,152622,152625],{"class":188,"line":3161},[186,152621,32256],{"class":669},[186,152623,152624],{"class":198}," from_dict",[186,152626,152627],{"class":202},"(cls, data):\n",[186,152629,152630,152632,152634],{"class":188,"line":3166},[186,152631,16214],{"class":669},[186,152633,152231],{"class":206},[186,152635,152636],{"class":202},"(\n",[186,152638,152639,152642,152645],{"class":188,"line":3195},[186,152640,152641],{"class":202},"            data[",[186,152643,152644],{"class":532},"\"student_id\"",[186,152646,89267],{"class":202},[186,152648,152649,152651,152653],{"class":188,"line":3200},[186,152650,152641],{"class":202},[186,152652,64117],{"class":532},[186,152654,89267],{"class":202},[186,152656,152657,152659,152661],{"class":188,"line":3217},[186,152658,152641],{"class":202},[186,152660,70561],{"class":532},[186,152662,89267],{"class":202},[186,152664,152665,152667,152670],{"class":188,"line":3222},[186,152666,152641],{"class":202},[186,152668,152669],{"class":532},"\"score\"",[186,152671,89267],{"class":202},[186,152673,152674],{"class":188,"line":3227},[186,152675,39580],{"class":202},[186,152677,152678],{"class":188,"line":3232},[186,152679,3867],{"emptyLinePlaceholder":1551},[186,152681,152682,152684,152686],{"class":188,"line":3246},[186,152683,32256],{"class":669},[186,152685,151178],{"class":206},[186,152687,32262],{"class":202},[186,152689,152690,152692,152694,152696,152698,152701,152703,152706,152708,152710,152712,152714,152716,152718,152720,152722],{"class":188,"line":3251},[186,152691,16214],{"class":669},[186,152693,151187],{"class":669},[186,152695,1862],{"class":532},[186,152697,150649],{"class":206},[186,152699,152700],{"class":202},".student_id",[186,152702,2553],{"class":206},[186,152704,152705],{"class":206}," {self",[186,152707,81733],{"class":202},[186,152709,2553],{"class":206},[186,152711,152705],{"class":206},[186,152713,81745],{"class":202},[186,152715,2553],{"class":206},[186,152717,152705],{"class":206},[186,152719,151059],{"class":202},[186,152721,2553],{"class":206},[186,152723,26592],{"class":532},[186,152725,152726],{"class":188,"line":4044},[186,152727,3867],{"emptyLinePlaceholder":1551},[186,152729,152730],{"class":188,"line":4058},[186,152731,3867],{"emptyLinePlaceholder":1551},[186,152733,152734,152736,152738,152740,152743,152745,152747,152749,152751,152753,152755],{"class":188,"line":4066},[186,152735,150678],{"class":202},[186,152737,529],{"class":669},[186,152739,151082],{"class":202},[186,152741,152742],{"class":532},"\"001\"",[186,152744,13898],{"class":202},[186,152746,151085],{"class":532},[186,152748,13898],{"class":202},[186,152750,2260],{"class":206},[186,152752,13898],{"class":202},[186,152754,2596],{"class":206},[186,152756,1629],{"class":202},[186,152758,152759,152761],{"class":188,"line":4071},[186,152760,31870],{"class":206},[186,152762,152763],{"class":202},"(student.is_passed())\n",[186,152765,152766,152768],{"class":188,"line":4077},[186,152767,31870],{"class":206},[186,152769,152770],{"class":202},"(student.to_dict())\n",[169,152772,152773,102449,152776,152779],{},[183,152774,152775],{},"to_dict()",[183,152777,152778],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152781,152783],{"id":152782},"_1116-易错点","11.16 易错点",[34,152785,152786,152792,152798,152803,152806,152809],{},[22,152787,152788,152789,913],{},"类名推荐使用大驼峰，如 ",[183,152790,152791],{},"StudentManager",[22,152793,152794,152795,152797],{},"方法第一个参数必须写 ",[183,152796,32278],{},"，调用时不用传。",[22,152799,152800,152802],{},[183,152801,32284],{}," 不是普通方法，它在创建对象时自动执行。",[22,152804,152805],{},"私有属性不是绝对安全，只是约定和名称改写。",[22,152807,152808],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[22,152810,152811],{},"类中方法太多时，说明职责可能过重。",[14,152813,152815],{"id":152814},"_1117-本章练习","11.17 本章练习",[34,152817,152818,152824,152830,152835,152848],{},[22,152819,152820,152821,152823],{},"定义 ",[183,152822,150765],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[22,152825,152820,152826,152829],{},[183,152827,152828],{},"Account"," 类，实现存款、取款、查询余额。",[22,152831,152820,152832,152834],{},[183,152833,18687],{}," 类，计算圆的周长和面积。",[22,152836,152820,152837,1824,152840,152843,152844,152847],{},[183,152838,152839],{},"Dog",[183,152841,152842],{},"Cat"," 类，并用同一个函数调用它们的 ",[183,152845,152846],{},"speak()"," 方法。",[22,152849,105797,152850,152852,152853,913],{},[183,152851,152336],{}," 定义一个商品类 ",[183,152854,152855],{},"Product",[1524,152857,152858],{},"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":181,"searchDepth":49,"depth":49,"links":152860},[152861,152862,152863,152864,152865,152866,152868,152869,152870,152871,152872,152873,152874,152878,152879,152880,152881],{"id":150529,"depth":49,"text":150530},{"id":150712,"depth":49,"text":150713},{"id":150776,"depth":49,"text":150777},{"id":150853,"depth":49,"text":150854},{"id":150952,"depth":49,"text":150953},{"id":151116,"depth":49,"text":152867},"11.6 str",{"id":151242,"depth":49,"text":151243},{"id":151508,"depth":49,"text":151509},{"id":151622,"depth":49,"text":151623},{"id":151777,"depth":49,"text":151778},{"id":151901,"depth":49,"text":151902},{"id":152017,"depth":49,"text":152018},{"id":152166,"depth":49,"text":152167,"children":152875},[152876,152877],{"id":152170,"depth":219,"text":152171},{"id":152252,"depth":219,"text":152253},{"id":152330,"depth":49,"text":152331},{"id":152445,"depth":49,"text":152446},{"id":152782,"depth":49,"text":152783},{"id":152814,"depth":49,"text":152815},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150521,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152888,"title":152889,"body":152890,"description":1548,"extension":1549,"meta":156203,"navigation":1551,"path":156204,"seo":156205,"stem":156206,"__hash__":156207},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152891,"toc":156179},[152892,152895,152899,152902,152905,152934,152937,152945,152949,152953,152956,152979,152982,152988,152992,154438,154441,154462,154466,154469,154481,154484,154668,154671,154797,154800,154804,154808,154944,154948,155034,155038,155120,155124,155161,155165,155354,155358,155361,155591,155595,155598,155779,155782,155786,155789,155795,155798,155824,155828,155831,155845,155848,155873,155876,155890,155893,155910,155913,155930,155933,155950,155954,155980,155984,156007,156011,156014,156016,156022,156024,156045,156048,156054,156060,156064,156067,156143,156146,156150,156176],[10,152893,152889],{"id":152894},"_12-综合案例与复习路线",[14,152896,152898],{"id":152897},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[169,152900,152901],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[169,152903,152904],{},"一个合格的入门综合项目最好覆盖：",[34,152906,152907,152910,152913,152916,152919,152922,152925,152928,152931],{},[22,152908,152909],{},"输入输出。",[22,152911,152912],{},"判断和循环。",[22,152914,152915],{},"函数拆分。",[22,152917,152918],{},"列表、字典等容器。",[22,152920,152921],{},"文件持久化。",[22,152923,152924],{},"异常处理。",[22,152926,152927],{},"模块拆分。",[22,152929,152930],{},"可选：面向对象。",[22,152932,152933],{},"可选：数据可视化。",[169,152935,152936],{},"本章整理两个方向：",[34,152938,152939,152942],{},[22,152940,152941],{},"学生管理系统。",[22,152943,152944],{},"销售数据统计和可视化。",[14,152946,152948],{"id":152947},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[29,152950,152952],{"id":152951},"_1221-需求","12.2.1 需求",[169,152954,152955],{},"实现一个命令行学生管理系统：",[34,152957,152958,152961,152964,152967,152970,152973,152976],{},[22,152959,152960],{},"添加学生。",[22,152962,152963],{},"删除学生。",[22,152965,152966],{},"修改学生。",[22,152968,152969],{},"查询学生。",[22,152971,152972],{},"显示所有学生。",[22,152974,152975],{},"保存到 JSON 文件。",[22,152977,152978],{},"程序启动时自动读取 JSON 文件。",[169,152980,152981],{},"学生字段：",[176,152983,152986],{"className":152984,"code":152985,"language":753,"meta":181},[751],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[183,152987,152985],{"__ignoreMap":181},[14,152989,152991],{"id":152990},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[176,152993,152995],{"className":31833,"code":152994,"language":31835,"meta":181,"style":181},"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",[183,152996,152997,153003,153013,153017,153031,153035,153039,153048,153060,153066,153070,153076,153107,153117,153124,153135,153141,153145,153149,153159,153190,153216,153220,153224,153233,153244,153255,153266,153277,153288,153299,153310,153314,153318,153328,153340,153356,153363,153370,153374,153378,153388,153396,153403,153416,153426,153437,153441,153445,153454,153462,153468,153480,153488,153499,153503,153507,153516,153532,153536,153543,153554,153559,153563,153579,153594,153609,153613,153618,153626,153634,153642,153650,153654,153659,153670,153674,153678,153687,153702,153712,153716,153728,153739,153743,153747,153752,153756,153767,153771,153775,153784,153799,153807,153811,153823,153833,153837,153841,153856,153869,153882,153886,153899,153911,153923,153927,153931,153942,153946,153950,153959,153974,153982,153986,153998,154008,154012,154016,154021,154025,154029,154039,154045,154067,154086,154105,154124,154129,154133,154137,154146,154154,154165,154169,154173,154199,154209,154214,154218,154222,154230,154240,154244,154252,154257,154273,154277,154291,154296,154310,154315,154328,154333,154346,154351,154364,154369,154382,154393,154397,154403,154414,154418,154422,154434],{"__ignoreMap":181},[186,152998,152999,153001],{"class":188,"line":189},[186,153000,31847],{"class":669},[186,153002,148288],{"class":202},[186,153004,153005,153007,153009,153011],{"class":188,"line":49},[186,153006,32192],{"class":669},[186,153008,109742],{"class":202},[186,153010,31847],{"class":669},[186,153012,109747],{"class":202},[186,153014,153015],{"class":188,"line":219},[186,153016,3867],{"emptyLinePlaceholder":1551},[186,153018,153019,153022,153024,153026,153029],{"class":188,"line":225},[186,153020,153021],{"class":206},"DATA_FILE",[186,153023,15027],{"class":669},[186,153025,109976],{"class":202},[186,153027,153028],{"class":532},"\"students.json\"",[186,153030,1629],{"class":202},[186,153032,153033],{"class":188,"line":242},[186,153034,3867],{"emptyLinePlaceholder":1551},[186,153036,153037],{"class":188,"line":248},[186,153038,3867],{"emptyLinePlaceholder":1551},[186,153040,153041,153043,153046],{"class":188,"line":265},[186,153042,33402],{"class":669},[186,153044,153045],{"class":198}," load_students",[186,153047,33408],{"class":202},[186,153049,153050,153052,153054,153057],{"class":188,"line":271},[186,153051,4567],{"class":669},[186,153053,40384],{"class":669},[186,153055,153056],{"class":206}," DATA_FILE",[186,153058,153059],{"class":202},".exists():\n",[186,153061,153062,153064],{"class":188,"line":288},[186,153063,16214],{"class":669},[186,153065,53285],{"class":202},[186,153067,153068],{"class":188,"line":294},[186,153069,3867],{"emptyLinePlaceholder":1551},[186,153071,153072,153074],{"class":188,"line":1212},[186,153073,127215],{"class":669},[186,153075,5205],{"class":202},[186,153077,153078,153081,153083,153085,153087,153089,153091,153093,153095,153097,153099,153101,153103,153105],{"class":188,"line":1223},[186,153079,153080],{"class":669},"        with",[186,153082,147988],{"class":206},[186,153084,832],{"class":202},[186,153086,153021],{"class":206},[186,153088,13898],{"class":202},[186,153090,147998],{"class":532},[186,153092,13898],{"class":202},[186,153094,148003],{"class":835},[186,153096,529],{"class":669},[186,153098,148008],{"class":532},[186,153100,839],{"class":202},[186,153102,32838],{"class":669},[186,153104,149350],{"class":835},[186,153106,5205],{"class":202},[186,153108,153109,153111,153113,153115],{"class":188,"line":1236},[186,153110,17193],{"class":669},[186,153112,149361],{"class":202},[186,153114,46808],{"class":835},[186,153116,1629],{"class":202},[186,153118,153119,153121],{"class":188,"line":3096},[186,153120,127243],{"class":669},[186,153122,153123],{"class":202}," json.JSONDecodeError:\n",[186,153125,153126,153128,153130,153133],{"class":188,"line":3110},[186,153127,33906],{"class":206},[186,153129,832],{"class":202},[186,153131,153132],{"class":532},"\"数据文件格式错误，已使用空数据启动\"",[186,153134,1629],{"class":202},[186,153136,153137,153139],{"class":188,"line":3115},[186,153138,16214],{"class":669},[186,153140,53285],{"class":202},[186,153142,153143],{"class":188,"line":3121},[186,153144,3867],{"emptyLinePlaceholder":1551},[186,153146,153147],{"class":188,"line":3142},[186,153148,3867],{"emptyLinePlaceholder":1551},[186,153150,153151,153153,153156],{"class":188,"line":3147},[186,153152,33402],{"class":669},[186,153154,153155],{"class":198}," save_students",[186,153157,153158],{"class":202},"(students):\n",[186,153160,153161,153163,153165,153167,153169,153171,153174,153176,153178,153180,153182,153184,153186,153188],{"class":188,"line":3161},[186,153162,35633],{"class":669},[186,153164,147988],{"class":206},[186,153166,832],{"class":202},[186,153168,153021],{"class":206},[186,153170,13898],{"class":202},[186,153172,153173],{"class":532},"\"w\"",[186,153175,13898],{"class":202},[186,153177,148003],{"class":835},[186,153179,529],{"class":669},[186,153181,148008],{"class":532},[186,153183,839],{"class":202},[186,153185,32838],{"class":669},[186,153187,149350],{"class":835},[186,153189,5205],{"class":202},[186,153191,153192,153195,153197,153199,153201,153203,153205,153207,153210,153212,153214],{"class":188,"line":3166},[186,153193,153194],{"class":202},"        json.dump(students, ",[186,153196,46808],{"class":835},[186,153198,13898],{"class":202},[186,153200,148334],{"class":835},[186,153202,529],{"class":669},[186,153204,35442],{"class":206},[186,153206,13898],{"class":202},[186,153208,153209],{"class":835},"indent",[186,153211,529],{"class":669},[186,153213,1697],{"class":206},[186,153215,1629],{"class":202},[186,153217,153218],{"class":188,"line":3195},[186,153219,3867],{"emptyLinePlaceholder":1551},[186,153221,153222],{"class":188,"line":3200},[186,153223,3867],{"emptyLinePlaceholder":1551},[186,153225,153226,153228,153231],{"class":188,"line":3217},[186,153227,33402],{"class":669},[186,153229,153230],{"class":198}," show_menu",[186,153232,33408],{"class":202},[186,153234,153235,153237,153239,153242],{"class":188,"line":3222},[186,153236,32754],{"class":206},[186,153238,832],{"class":202},[186,153240,153241],{"class":532},"\"====== 学生管理系统 ======\"",[186,153243,1629],{"class":202},[186,153245,153246,153248,153250,153253],{"class":188,"line":3227},[186,153247,32754],{"class":206},[186,153249,832],{"class":202},[186,153251,153252],{"class":532},"\"1. 添加学生\"",[186,153254,1629],{"class":202},[186,153256,153257,153259,153261,153264],{"class":188,"line":3232},[186,153258,32754],{"class":206},[186,153260,832],{"class":202},[186,153262,153263],{"class":532},"\"2. 删除学生\"",[186,153265,1629],{"class":202},[186,153267,153268,153270,153272,153275],{"class":188,"line":3246},[186,153269,32754],{"class":206},[186,153271,832],{"class":202},[186,153273,153274],{"class":532},"\"3. 修改学生\"",[186,153276,1629],{"class":202},[186,153278,153279,153281,153283,153286],{"class":188,"line":3251},[186,153280,32754],{"class":206},[186,153282,832],{"class":202},[186,153284,153285],{"class":532},"\"4. 查询学生\"",[186,153287,1629],{"class":202},[186,153289,153290,153292,153294,153297],{"class":188,"line":4044},[186,153291,32754],{"class":206},[186,153293,832],{"class":202},[186,153295,153296],{"class":532},"\"5. 显示所有学生\"",[186,153298,1629],{"class":202},[186,153300,153301,153303,153305,153308],{"class":188,"line":4058},[186,153302,32754],{"class":206},[186,153304,832],{"class":202},[186,153306,153307],{"class":532},"\"0. 退出系统\"",[186,153309,1629],{"class":202},[186,153311,153312],{"class":188,"line":4066},[186,153313,3867],{"emptyLinePlaceholder":1551},[186,153315,153316],{"class":188,"line":4071},[186,153317,3867],{"emptyLinePlaceholder":1551},[186,153319,153320,153322,153325],{"class":188,"line":4077},[186,153321,33402],{"class":669},[186,153323,153324],{"class":198}," find_student",[186,153326,153327],{"class":202},"(students, student_id):\n",[186,153329,153330,153332,153335,153337],{"class":188,"line":4083},[186,153331,4667],{"class":669},[186,153333,153334],{"class":202}," student ",[186,153336,27500],{"class":669},[186,153338,153339],{"class":202}," students:\n",[186,153341,153342,153344,153347,153349,153351,153353],{"class":188,"line":4088},[186,153343,3964],{"class":669},[186,153345,153346],{"class":202}," student[",[186,153348,152644],{"class":532},[186,153350,5909],{"class":202},[186,153352,4415],{"class":669},[186,153354,153355],{"class":202}," student_id:\n",[186,153357,153358,153360],{"class":188,"line":9411},[186,153359,17193],{"class":669},[186,153361,153362],{"class":202}," student\n",[186,153364,153365,153367],{"class":188,"line":9435},[186,153366,5556],{"class":669},[186,153368,153369],{"class":206}," None\n",[186,153371,153372],{"class":188,"line":9440},[186,153373,3867],{"emptyLinePlaceholder":1551},[186,153375,153376],{"class":188,"line":9446},[186,153377,3867],{"emptyLinePlaceholder":1551},[186,153379,153380,153382,153385],{"class":188,"line":9473},[186,153381,33402],{"class":669},[186,153383,153384],{"class":198}," input_int",[186,153386,153387],{"class":202},"(prompt):\n",[186,153389,153390,153392,153394],{"class":188,"line":9478},[186,153391,3718],{"class":669},[186,153393,96723],{"class":206},[186,153395,5205],{"class":202},[186,153397,153398,153401],{"class":188,"line":9484},[186,153399,153400],{"class":669},"        try",[186,153402,5205],{"class":202},[186,153404,153405,153407,153409,153411,153413],{"class":188,"line":9496},[186,153406,17193],{"class":669},[186,153408,3849],{"class":206},[186,153410,832],{"class":202},[186,153412,55266],{"class":206},[186,153414,153415],{"class":202},"(prompt))\n",[186,153417,153418,153421,153424],{"class":188,"line":9508},[186,153419,153420],{"class":669},"        except",[186,153422,153423],{"class":206}," ValueError",[186,153425,5205],{"class":202},[186,153427,153428,153430,153432,153435],{"class":188,"line":9520},[186,153429,36105],{"class":206},[186,153431,832],{"class":202},[186,153433,153434],{"class":532},"\"请输入整数\"",[186,153436,1629],{"class":202},[186,153438,153439],{"class":188,"line":11179},[186,153440,3867],{"emptyLinePlaceholder":1551},[186,153442,153443],{"class":188,"line":11204},[186,153444,3867],{"emptyLinePlaceholder":1551},[186,153446,153447,153449,153452],{"class":188,"line":11227},[186,153448,33402],{"class":669},[186,153450,153451],{"class":198}," input_float",[186,153453,153387],{"class":202},[186,153455,153456,153458,153460],{"class":188,"line":11251},[186,153457,3718],{"class":669},[186,153459,96723],{"class":206},[186,153461,5205],{"class":202},[186,153463,153464,153466],{"class":188,"line":11256},[186,153465,153400],{"class":669},[186,153467,5205],{"class":202},[186,153469,153470,153472,153474,153476,153478],{"class":188,"line":11261},[186,153471,17193],{"class":669},[186,153473,111228],{"class":206},[186,153475,832],{"class":202},[186,153477,55266],{"class":206},[186,153479,153415],{"class":202},[186,153481,153482,153484,153486],{"class":188,"line":11266},[186,153483,153420],{"class":669},[186,153485,153423],{"class":206},[186,153487,5205],{"class":202},[186,153489,153490,153492,153494,153497],{"class":188,"line":11275},[186,153491,36105],{"class":206},[186,153493,832],{"class":202},[186,153495,153496],{"class":532},"\"请输入数字\"",[186,153498,1629],{"class":202},[186,153500,153501],{"class":188,"line":11280},[186,153502,3867],{"emptyLinePlaceholder":1551},[186,153504,153505],{"class":188,"line":11286},[186,153506,3867],{"emptyLinePlaceholder":1551},[186,153508,153509,153511,153514],{"class":188,"line":11307},[186,153510,33402],{"class":669},[186,153512,153513],{"class":198}," add_student",[186,153515,153158],{"class":202},[186,153517,153518,153521,153523,153525,153527,153530],{"class":188,"line":11313},[186,153519,153520],{"class":202},"    student_id ",[186,153522,529],{"class":669},[186,153524,62046],{"class":206},[186,153526,832],{"class":202},[186,153528,153529],{"class":532},"\"请输入学号:\"",[186,153531,1629],{"class":202},[186,153533,153534],{"class":188,"line":11327},[186,153535,3867],{"emptyLinePlaceholder":1551},[186,153537,153538,153540],{"class":188,"line":11333},[186,153539,4567],{"class":669},[186,153541,153542],{"class":202}," find_student(students, student_id):\n",[186,153544,153545,153547,153549,153552],{"class":188,"line":11360},[186,153546,33906],{"class":206},[186,153548,832],{"class":202},[186,153550,153551],{"class":532},"\"学号已存在\"",[186,153553,1629],{"class":202},[186,153555,153556],{"class":188,"line":11369},[186,153557,153558],{"class":669},"        return\n",[186,153560,153561],{"class":188,"line":11375},[186,153562,3867],{"emptyLinePlaceholder":1551},[186,153564,153565,153568,153570,153572,153574,153577],{"class":188,"line":11383},[186,153566,153567],{"class":202},"    name ",[186,153569,529],{"class":669},[186,153571,62046],{"class":206},[186,153573,832],{"class":202},[186,153575,153576],{"class":532},"\"请输入姓名:\"",[186,153578,1629],{"class":202},[186,153580,153581,153584,153586,153589,153592],{"class":188,"line":11388},[186,153582,153583],{"class":202},"    age ",[186,153585,529],{"class":669},[186,153587,153588],{"class":202}," input_int(",[186,153590,153591],{"class":532},"\"请输入年龄:\"",[186,153593,1629],{"class":202},[186,153595,153596,153599,153601,153604,153607],{"class":188,"line":18065},[186,153597,153598],{"class":202},"    score ",[186,153600,529],{"class":669},[186,153602,153603],{"class":202}," input_float(",[186,153605,153606],{"class":532},"\"请输入成绩:\"",[186,153608,1629],{"class":202},[186,153610,153611],{"class":188,"line":18071},[186,153612,3867],{"emptyLinePlaceholder":1551},[186,153614,153615],{"class":188,"line":18094},[186,153616,153617],{"class":202},"    students.append({\n",[186,153619,153620,153623],{"class":188,"line":18100},[186,153621,153622],{"class":532},"        \"student_id\"",[186,153624,153625],{"class":202},": student_id,\n",[186,153627,153628,153631],{"class":188,"line":18123},[186,153629,153630],{"class":532},"        \"name\"",[186,153632,153633],{"class":202},": name,\n",[186,153635,153636,153639],{"class":188,"line":18137},[186,153637,153638],{"class":532},"        \"age\"",[186,153640,153641],{"class":202},": age,\n",[186,153643,153644,153647],{"class":188,"line":18157},[186,153645,153646],{"class":532},"        \"score\"",[186,153648,153649],{"class":202},": score,\n",[186,153651,153652],{"class":188,"line":18163},[186,153653,34916],{"class":202},[186,153655,153656],{"class":188,"line":18174},[186,153657,153658],{"class":202},"    save_students(students)\n",[186,153660,153661,153663,153665,153668],{"class":188,"line":18197},[186,153662,32754],{"class":206},[186,153664,832],{"class":202},[186,153666,153667],{"class":532},"\"添加成功\"",[186,153669,1629],{"class":202},[186,153671,153672],{"class":188,"line":18219},[186,153673,3867],{"emptyLinePlaceholder":1551},[186,153675,153676],{"class":188,"line":18224},[186,153677,3867],{"emptyLinePlaceholder":1551},[186,153679,153680,153682,153685],{"class":188,"line":18230},[186,153681,33402],{"class":669},[186,153683,153684],{"class":198}," delete_student",[186,153686,153158],{"class":202},[186,153688,153689,153691,153693,153695,153697,153700],{"class":188,"line":18244},[186,153690,153520],{"class":202},[186,153692,529],{"class":669},[186,153694,62046],{"class":206},[186,153696,832],{"class":202},[186,153698,153699],{"class":532},"\"请输入要删除的学号:\"",[186,153701,1629],{"class":202},[186,153703,153704,153707,153709],{"class":188,"line":18257},[186,153705,153706],{"class":202},"    student ",[186,153708,529],{"class":669},[186,153710,153711],{"class":202}," find_student(students, student_id)\n",[186,153713,153714],{"class":188,"line":18262},[186,153715,3867],{"emptyLinePlaceholder":1551},[186,153717,153718,153720,153722,153724,153726],{"class":188,"line":18276},[186,153719,4567],{"class":669},[186,153721,153334],{"class":202},[186,153723,40381],{"class":669},[186,153725,40387],{"class":206},[186,153727,5205],{"class":202},[186,153729,153730,153732,153734,153737],{"class":188,"line":18281},[186,153731,33906],{"class":206},[186,153733,832],{"class":202},[186,153735,153736],{"class":532},"\"学生不存在\"",[186,153738,1629],{"class":202},[186,153740,153741],{"class":188,"line":18287},[186,153742,153558],{"class":669},[186,153744,153745],{"class":188,"line":18292},[186,153746,3867],{"emptyLinePlaceholder":1551},[186,153748,153749],{"class":188,"line":18306},[186,153750,153751],{"class":202},"    students.remove(student)\n",[186,153753,153754],{"class":188,"line":18311},[186,153755,153658],{"class":202},[186,153757,153758,153760,153762,153765],{"class":188,"line":18316},[186,153759,32754],{"class":206},[186,153761,832],{"class":202},[186,153763,153764],{"class":532},"\"删除成功\"",[186,153766,1629],{"class":202},[186,153768,153769],{"class":188,"line":18330},[186,153770,3867],{"emptyLinePlaceholder":1551},[186,153772,153773],{"class":188,"line":18342},[186,153774,3867],{"emptyLinePlaceholder":1551},[186,153776,153777,153779,153782],{"class":188,"line":18347},[186,153778,33402],{"class":669},[186,153780,153781],{"class":198}," update_student",[186,153783,153158],{"class":202},[186,153785,153786,153788,153790,153792,153794,153797],{"class":188,"line":18360},[186,153787,153520],{"class":202},[186,153789,529],{"class":669},[186,153791,62046],{"class":206},[186,153793,832],{"class":202},[186,153795,153796],{"class":532},"\"请输入要修改的学号:\"",[186,153798,1629],{"class":202},[186,153800,153801,153803,153805],{"class":188,"line":18365},[186,153802,153706],{"class":202},[186,153804,529],{"class":669},[186,153806,153711],{"class":202},[186,153808,153809],{"class":188,"line":18370},[186,153810,3867],{"emptyLinePlaceholder":1551},[186,153812,153813,153815,153817,153819,153821],{"class":188,"line":18375},[186,153814,4567],{"class":669},[186,153816,153334],{"class":202},[186,153818,40381],{"class":669},[186,153820,40387],{"class":206},[186,153822,5205],{"class":202},[186,153824,153825,153827,153829,153831],{"class":188,"line":18388},[186,153826,33906],{"class":206},[186,153828,832],{"class":202},[186,153830,153736],{"class":532},[186,153832,1629],{"class":202},[186,153834,153835],{"class":188,"line":18393},[186,153836,153558],{"class":669},[186,153838,153839],{"class":188,"line":34088},[186,153840,3867],{"emptyLinePlaceholder":1551},[186,153842,153843,153845,153847,153849,153851,153854],{"class":188,"line":34094},[186,153844,153567],{"class":202},[186,153846,529],{"class":669},[186,153848,62046],{"class":206},[186,153850,832],{"class":202},[186,153852,153853],{"class":532},"\"请输入新姓名:\"",[186,153855,1629],{"class":202},[186,153857,153858,153860,153862,153864,153867],{"class":188,"line":34100},[186,153859,153583],{"class":202},[186,153861,529],{"class":669},[186,153863,153588],{"class":202},[186,153865,153866],{"class":532},"\"请输入新年龄:\"",[186,153868,1629],{"class":202},[186,153870,153871,153873,153875,153877,153880],{"class":188,"line":34106},[186,153872,153598],{"class":202},[186,153874,529],{"class":669},[186,153876,153603],{"class":202},[186,153878,153879],{"class":532},"\"请输入新成绩:\"",[186,153881,1629],{"class":202},[186,153883,153884],{"class":188,"line":34112},[186,153885,3867],{"emptyLinePlaceholder":1551},[186,153887,153888,153891,153893,153895,153897],{"class":188,"line":34123},[186,153889,153890],{"class":202},"    student[",[186,153892,64117],{"class":532},[186,153894,5909],{"class":202},[186,153896,529],{"class":669},[186,153898,150992],{"class":202},[186,153900,153901,153903,153905,153907,153909],{"class":188,"line":34129},[186,153902,153890],{"class":202},[186,153904,70561],{"class":532},[186,153906,5909],{"class":202},[186,153908,529],{"class":669},[186,153910,151004],{"class":202},[186,153912,153913,153915,153917,153919,153921],{"class":188,"line":34149},[186,153914,153890],{"class":202},[186,153916,152669],{"class":532},[186,153918,5909],{"class":202},[186,153920,529],{"class":669},[186,153922,3050],{"class":202},[186,153924,153925],{"class":188,"line":34155},[186,153926,3867],{"emptyLinePlaceholder":1551},[186,153928,153929],{"class":188,"line":34166},[186,153930,153658],{"class":202},[186,153932,153933,153935,153937,153940],{"class":188,"line":34172},[186,153934,32754],{"class":206},[186,153936,832],{"class":202},[186,153938,153939],{"class":532},"\"修改成功\"",[186,153941,1629],{"class":202},[186,153943,153944],{"class":188,"line":34178},[186,153945,3867],{"emptyLinePlaceholder":1551},[186,153947,153948],{"class":188,"line":34184},[186,153949,3867],{"emptyLinePlaceholder":1551},[186,153951,153952,153954,153957],{"class":188,"line":34190},[186,153953,33402],{"class":669},[186,153955,153956],{"class":198}," query_student",[186,153958,153158],{"class":202},[186,153960,153961,153963,153965,153967,153969,153972],{"class":188,"line":34196},[186,153962,153520],{"class":202},[186,153964,529],{"class":669},[186,153966,62046],{"class":206},[186,153968,832],{"class":202},[186,153970,153971],{"class":532},"\"请输入要查询的学号:\"",[186,153973,1629],{"class":202},[186,153975,153976,153978,153980],{"class":188,"line":34202},[186,153977,153706],{"class":202},[186,153979,529],{"class":669},[186,153981,153711],{"class":202},[186,153983,153984],{"class":188,"line":34208},[186,153985,3867],{"emptyLinePlaceholder":1551},[186,153987,153988,153990,153992,153994,153996],{"class":188,"line":34228},[186,153989,4567],{"class":669},[186,153991,153334],{"class":202},[186,153993,40381],{"class":669},[186,153995,40387],{"class":206},[186,153997,5205],{"class":202},[186,153999,154000,154002,154004,154006],{"class":188,"line":34234},[186,154001,33906],{"class":206},[186,154003,832],{"class":202},[186,154005,153736],{"class":532},[186,154007,1629],{"class":202},[186,154009,154010],{"class":188,"line":34250},[186,154011,153558],{"class":669},[186,154013,154014],{"class":188,"line":34256},[186,154015,3867],{"emptyLinePlaceholder":1551},[186,154017,154018],{"class":188,"line":34270},[186,154019,154020],{"class":202},"    print_student(student)\n",[186,154022,154023],{"class":188,"line":34276},[186,154024,3867],{"emptyLinePlaceholder":1551},[186,154026,154027],{"class":188,"line":34291},[186,154028,3867],{"emptyLinePlaceholder":1551},[186,154030,154031,154033,154036],{"class":188,"line":34297},[186,154032,33402],{"class":669},[186,154034,154035],{"class":198}," print_student",[186,154037,154038],{"class":202},"(student):\n",[186,154040,154041,154043],{"class":188,"line":34306},[186,154042,32754],{"class":206},[186,154044,152636],{"class":202},[186,154046,154047,154050,154052,154054,154057,154060,154062,154065],{"class":188,"line":34312},[186,154048,154049],{"class":669},"        f",[186,154051,1862],{"class":532},[186,154053,2504],{"class":206},[186,154055,154056],{"class":202},"student[",[186,154058,154059],{"class":532},"'student_id'",[186,154061,2547],{"class":202},[186,154063,154064],{"class":206},"}\\t",[186,154066,26592],{"class":532},[186,154068,154069,154071,154073,154075,154077,154080,154082,154084],{"class":188,"line":34321},[186,154070,154049],{"class":669},[186,154072,1862],{"class":532},[186,154074,2504],{"class":206},[186,154076,154056],{"class":202},[186,154078,154079],{"class":532},"'name'",[186,154081,2547],{"class":202},[186,154083,154064],{"class":206},[186,154085,26592],{"class":532},[186,154087,154088,154090,154092,154094,154096,154099,154101,154103],{"class":188,"line":34327},[186,154089,154049],{"class":669},[186,154091,1862],{"class":532},[186,154093,2504],{"class":206},[186,154095,154056],{"class":202},[186,154097,154098],{"class":532},"'age'",[186,154100,2547],{"class":202},[186,154102,154064],{"class":206},[186,154104,26592],{"class":532},[186,154106,154107,154109,154111,154113,154115,154118,154120,154122],{"class":188,"line":34333},[186,154108,154049],{"class":669},[186,154110,1862],{"class":532},[186,154112,2504],{"class":206},[186,154114,154056],{"class":202},[186,154116,154117],{"class":532},"'score'",[186,154119,2547],{"class":202},[186,154121,2553],{"class":206},[186,154123,26592],{"class":532},[186,154125,154126],{"class":188,"line":34342},[186,154127,154128],{"class":202},"    )\n",[186,154130,154131],{"class":188,"line":34348},[186,154132,3867],{"emptyLinePlaceholder":1551},[186,154134,154135],{"class":188,"line":34359},[186,154136,3867],{"emptyLinePlaceholder":1551},[186,154138,154139,154141,154144],{"class":188,"line":34365},[186,154140,33402],{"class":669},[186,154142,154143],{"class":198}," show_all_students",[186,154145,153158],{"class":202},[186,154147,154148,154150,154152],{"class":188,"line":34384},[186,154149,4567],{"class":669},[186,154151,40384],{"class":669},[186,154153,153339],{"class":202},[186,154155,154156,154158,154160,154163],{"class":188,"line":34390},[186,154157,33906],{"class":206},[186,154159,832],{"class":202},[186,154161,154162],{"class":532},"\"暂无学生\"",[186,154164,1629],{"class":202},[186,154166,154167],{"class":188,"line":34401},[186,154168,153558],{"class":669},[186,154170,154171],{"class":188,"line":34407},[186,154172,3867],{"emptyLinePlaceholder":1551},[186,154174,154175,154177,154179,154182,154184,154187,154189,154192,154194,154197],{"class":188,"line":34427},[186,154176,32754],{"class":206},[186,154178,832],{"class":202},[186,154180,154181],{"class":532},"\"学号",[186,154183,2707],{"class":206},[186,154185,154186],{"class":532},"姓名",[186,154188,2707],{"class":206},[186,154190,154191],{"class":532},"年龄",[186,154193,2707],{"class":206},[186,154195,154196],{"class":532},"成绩\"",[186,154198,1629],{"class":202},[186,154200,154201,154203,154205,154207],{"class":188,"line":34443},[186,154202,4667],{"class":669},[186,154204,153334],{"class":202},[186,154206,27500],{"class":669},[186,154208,153339],{"class":202},[186,154210,154211],{"class":188,"line":34449},[186,154212,154213],{"class":202},"        print_student(student)\n",[186,154215,154216],{"class":188,"line":34463},[186,154217,3867],{"emptyLinePlaceholder":1551},[186,154219,154220],{"class":188,"line":34469},[186,154221,3867],{"emptyLinePlaceholder":1551},[186,154223,154224,154226,154228],{"class":188,"line":34475},[186,154225,33402],{"class":669},[186,154227,3440],{"class":198},[186,154229,33408],{"class":202},[186,154231,154232,154235,154237],{"class":188,"line":34486},[186,154233,154234],{"class":202},"    students ",[186,154236,529],{"class":669},[186,154238,154239],{"class":202}," load_students()\n",[186,154241,154242],{"class":188,"line":34492},[186,154243,3867],{"emptyLinePlaceholder":1551},[186,154245,154246,154248,154250],{"class":188,"line":34498},[186,154247,3718],{"class":669},[186,154249,96723],{"class":206},[186,154251,5205],{"class":202},[186,154253,154254],{"class":188,"line":34508},[186,154255,154256],{"class":202},"        show_menu()\n",[186,154258,154259,154262,154264,154266,154268,154271],{"class":188,"line":34514},[186,154260,154261],{"class":202},"        choice ",[186,154263,529],{"class":669},[186,154265,62046],{"class":206},[186,154267,832],{"class":202},[186,154269,154270],{"class":532},"\"请输入操作:\"",[186,154272,1629],{"class":202},[186,154274,154275],{"class":188,"line":34525},[186,154276,3867],{"emptyLinePlaceholder":1551},[186,154278,154279,154281,154284,154286,154289],{"class":188,"line":34531},[186,154280,3964],{"class":669},[186,154282,154283],{"class":202}," choice ",[186,154285,4415],{"class":669},[186,154287,154288],{"class":532}," \"1\"",[186,154290,5205],{"class":202},[186,154292,154293],{"class":188,"line":34541},[186,154294,154295],{"class":202},"            add_student(students)\n",[186,154297,154298,154301,154303,154305,154308],{"class":188,"line":34546},[186,154299,154300],{"class":669},"        elif",[186,154302,154283],{"class":202},[186,154304,4415],{"class":669},[186,154306,154307],{"class":532}," \"2\"",[186,154309,5205],{"class":202},[186,154311,154312],{"class":188,"line":34552},[186,154313,154314],{"class":202},"            delete_student(students)\n",[186,154316,154317,154319,154321,154323,154326],{"class":188,"line":34601},[186,154318,154300],{"class":669},[186,154320,154283],{"class":202},[186,154322,4415],{"class":669},[186,154324,154325],{"class":532}," \"3\"",[186,154327,5205],{"class":202},[186,154329,154330],{"class":188,"line":34648},[186,154331,154332],{"class":202},"            update_student(students)\n",[186,154334,154335,154337,154339,154341,154344],{"class":188,"line":34653},[186,154336,154300],{"class":669},[186,154338,154283],{"class":202},[186,154340,4415],{"class":669},[186,154342,154343],{"class":532}," \"4\"",[186,154345,5205],{"class":202},[186,154347,154348],{"class":188,"line":34659},[186,154349,154350],{"class":202},"            query_student(students)\n",[186,154352,154353,154355,154357,154359,154362],{"class":188,"line":34678},[186,154354,154300],{"class":669},[186,154356,154283],{"class":202},[186,154358,4415],{"class":669},[186,154360,154361],{"class":532}," \"5\"",[186,154363,5205],{"class":202},[186,154365,154366],{"class":188,"line":34684},[186,154367,154368],{"class":202},"            show_all_students(students)\n",[186,154370,154371,154373,154375,154377,154380],{"class":188,"line":34704},[186,154372,154300],{"class":669},[186,154374,154283],{"class":202},[186,154376,4415],{"class":669},[186,154378,154379],{"class":532}," \"0\"",[186,154381,5205],{"class":202},[186,154383,154384,154386,154388,154391],{"class":188,"line":34710},[186,154385,36105],{"class":206},[186,154387,832],{"class":202},[186,154389,154390],{"class":532},"\"退出系统\"",[186,154392,1629],{"class":202},[186,154394,154395],{"class":188,"line":34716},[186,154396,116529],{"class":669},[186,154398,154399,154401],{"class":188,"line":34726},[186,154400,4001],{"class":669},[186,154402,5205],{"class":202},[186,154404,154405,154407,154409,154412],{"class":188,"line":34731},[186,154406,36105],{"class":206},[186,154408,832],{"class":202},[186,154410,154411],{"class":532},"\"输入错误\"",[186,154413,1629],{"class":202},[186,154415,154416],{"class":188,"line":34737},[186,154417,3867],{"emptyLinePlaceholder":1551},[186,154419,154420],{"class":188,"line":34753},[186,154421,3867],{"emptyLinePlaceholder":1551},[186,154423,154424,154426,154428,154430,154432],{"class":188,"line":34798},[186,154425,3003],{"class":669},[186,154427,32675],{"class":206},[186,154429,102990],{"class":669},[186,154431,102993],{"class":532},[186,154433,5205],{"class":202},[186,154435,154436],{"class":188,"line":34804},[186,154437,103000],{"class":202},[169,154439,154440],{},"这个项目串联了：",[34,154442,154443,154446,154449,154452,154455,154457],{},[22,154444,154445],{},"菜单循环。",[22,154447,154448],{},"函数封装。",[22,154450,154451],{},"列表字典。",[22,154453,154454],{},"JSON 读写。",[22,154456,152924],{},[22,154458,154459,913],{},[183,154460,154461],{},"if __name__ == \"__main__\"",[14,154463,154465],{"id":154464},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[169,154467,154468],{},"可以进一步拆成两个类：",[34,154470,154471,154476],{},[22,154472,154473,154475],{},[183,154474,150765],{},"：表示单个学生。",[22,154477,154478,154480],{},[183,154479,152791],{},"：负责学生增删改查和文件保存。",[169,154482,154483],{},"示意代码：",[176,154485,154487],{"className":31833,"code":154486,"language":31835,"meta":181,"style":181},"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",[183,154488,154489,154499,154503,154507,154511,154519,154526,154532,154538,154544,154548,154556,154562,154572,154582,154592,154602,154606,154610,154616,154624,154632,154640,154648,154656,154664],{"__ignoreMap":181},[186,154490,154491,154493,154495,154497],{"class":188,"line":189},[186,154492,32192],{"class":669},[186,154494,152349],{"class":202},[186,154496,31847],{"class":669},[186,154498,152354],{"class":202},[186,154500,154501],{"class":188,"line":49},[186,154502,3867],{"emptyLinePlaceholder":1551},[186,154504,154505],{"class":188,"line":219},[186,154506,3867],{"emptyLinePlaceholder":1551},[186,154508,154509],{"class":188,"line":225},[186,154510,152367],{"class":198},[186,154512,154513,154515,154517],{"class":188,"line":242},[186,154514,16156],{"class":669},[186,154516,9361],{"class":198},[186,154518,5205],{"class":202},[186,154520,154521,154524],{"class":188,"line":248},[186,154522,154523],{"class":202},"    student_id: ",[186,154525,152383],{"class":206},[186,154527,154528,154530],{"class":188,"line":265},[186,154529,152380],{"class":202},[186,154531,152383],{"class":206},[186,154533,154534,154536],{"class":188,"line":271},[186,154535,152388],{"class":202},[186,154537,152391],{"class":206},[186,154539,154540,154542],{"class":188,"line":288},[186,154541,152396],{"class":202},[186,154543,152399],{"class":206},[186,154545,154546],{"class":188,"line":294},[186,154547,3867],{"emptyLinePlaceholder":1551},[186,154549,154550,154552,154554],{"class":188,"line":1212},[186,154551,32256],{"class":669},[186,154553,152547],{"class":198},[186,154555,32262],{"class":202},[186,154557,154558,154560],{"class":188,"line":1223},[186,154559,16214],{"class":669},[186,154561,622],{"class":202},[186,154563,154564,154566,154568,154570],{"class":188,"line":1236},[186,154565,152560],{"class":532},[186,154567,210],{"class":202},[186,154569,32278],{"class":206},[186,154571,152567],{"class":202},[186,154573,154574,154576,154578,154580],{"class":188,"line":3096},[186,154575,152572],{"class":532},[186,154577,210],{"class":202},[186,154579,32278],{"class":206},[186,154581,152579],{"class":202},[186,154583,154584,154586,154588,154590],{"class":188,"line":3110},[186,154585,152584],{"class":532},[186,154587,210],{"class":202},[186,154589,32278],{"class":206},[186,154591,152591],{"class":202},[186,154593,154594,154596,154598,154600],{"class":188,"line":3115},[186,154595,152596],{"class":532},[186,154597,210],{"class":202},[186,154599,32278],{"class":206},[186,154601,152603],{"class":202},[186,154603,154604],{"class":188,"line":3121},[186,154605,3996],{"class":202},[186,154607,154608],{"class":188,"line":3142},[186,154609,3867],{"emptyLinePlaceholder":1551},[186,154611,154612,154614],{"class":188,"line":3147},[186,154613,152211],{"class":198},[186,154615,152214],{"class":206},[186,154617,154618,154620,154622],{"class":188,"line":3161},[186,154619,32256],{"class":669},[186,154621,152624],{"class":198},[186,154623,152627],{"class":202},[186,154625,154626,154628,154630],{"class":188,"line":3166},[186,154627,16214],{"class":669},[186,154629,152231],{"class":206},[186,154631,152636],{"class":202},[186,154633,154634,154636,154638],{"class":188,"line":3195},[186,154635,152641],{"class":202},[186,154637,152644],{"class":532},[186,154639,89267],{"class":202},[186,154641,154642,154644,154646],{"class":188,"line":3200},[186,154643,152641],{"class":202},[186,154645,64117],{"class":532},[186,154647,89267],{"class":202},[186,154649,154650,154652,154654],{"class":188,"line":3217},[186,154651,152641],{"class":202},[186,154653,70561],{"class":532},[186,154655,89267],{"class":202},[186,154657,154658,154660,154662],{"class":188,"line":3222},[186,154659,152641],{"class":202},[186,154661,152669],{"class":532},[186,154663,89267],{"class":202},[186,154665,154666],{"class":188,"line":3227},[186,154667,39580],{"class":202},[169,154669,154670],{},"管理器示意：",[176,154672,154674],{"className":31833,"code":154673,"language":31835,"meta":181,"style":181},"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",[183,154675,154676,154685,154693,154704,154708,154718,154731,154742,154749,154755,154759,154768,154777,154783,154790],{"__ignoreMap":181},[186,154677,154678,154680,154683],{"class":188,"line":189},[186,154679,16156],{"class":669},[186,154681,154682],{"class":198}," StudentManager",[186,154684,5205],{"class":202},[186,154686,154687,154689,154691],{"class":188,"line":49},[186,154688,32256],{"class":669},[186,154690,32259],{"class":206},[186,154692,32262],{"class":202},[186,154694,154695,154697,154700,154702],{"class":188,"line":219},[186,154696,32300],{"class":206},[186,154698,154699],{"class":202},".students ",[186,154701,529],{"class":669},[186,154703,53285],{"class":202},[186,154705,154706],{"class":188,"line":225},[186,154707,3867],{"emptyLinePlaceholder":1551},[186,154709,154710,154712,154715],{"class":188,"line":242},[186,154711,32256],{"class":669},[186,154713,154714],{"class":198}," find_by_id",[186,154716,154717],{"class":202},"(self, student_id):\n",[186,154719,154720,154722,154724,154726,154728],{"class":188,"line":248},[186,154721,4869],{"class":669},[186,154723,153334],{"class":202},[186,154725,27500],{"class":669},[186,154727,40327],{"class":206},[186,154729,154730],{"class":202},".students:\n",[186,154732,154733,154735,154738,154740],{"class":188,"line":265},[186,154734,6108],{"class":669},[186,154736,154737],{"class":202}," student.student_id ",[186,154739,4415],{"class":669},[186,154741,153355],{"class":202},[186,154743,154744,154747],{"class":188,"line":271},[186,154745,154746],{"class":669},"                return",[186,154748,153362],{"class":202},[186,154750,154751,154753],{"class":188,"line":288},[186,154752,16214],{"class":669},[186,154754,153369],{"class":206},[186,154756,154757],{"class":188,"line":294},[186,154758,3867],{"emptyLinePlaceholder":1551},[186,154760,154761,154763,154765],{"class":188,"line":1212},[186,154762,32256],{"class":669},[186,154764,6673],{"class":198},[186,154766,154767],{"class":202},"(self, student):\n",[186,154769,154770,154772,154774],{"class":188,"line":1223},[186,154771,3964],{"class":669},[186,154773,40327],{"class":206},[186,154775,154776],{"class":202},".find_by_id(student.student_id):\n",[186,154778,154779,154781],{"class":188,"line":1236},[186,154780,17193],{"class":669},[186,154782,127238],{"class":206},[186,154784,154785,154787],{"class":188,"line":3096},[186,154786,32300],{"class":206},[186,154788,154789],{"class":202},".students.append(student)\n",[186,154791,154792,154794],{"class":188,"line":3110},[186,154793,16214],{"class":669},[186,154795,154796],{"class":206}," True\n",[169,154798,154799],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154801,154803],{"id":154802},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[29,154805,154807],{"id":154806},"_1251-数据结构","12.5.1 数据结构",[176,154809,154811],{"className":31833,"code":154810,"language":31835,"meta":181,"style":181},"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",[183,154812,154813,154821,154852,154882,154911,154940],{"__ignoreMap":181},[186,154814,154815,154817,154819],{"class":188,"line":189},[186,154816,149662],{"class":202},[186,154818,529],{"class":669},[186,154820,56888],{"class":202},[186,154822,154823,154825,154827,154829,154831,154833,154836,154838,154841,154843,154845,154847,154850],{"class":188,"line":49},[186,154824,149582],{"class":202},[186,154826,149194],{"class":532},[186,154828,210],{"class":202},[186,154830,149805],{"class":532},[186,154832,13898],{"class":202},[186,154834,154835],{"class":532},"\"category\"",[186,154837,210],{"class":202},[186,154839,154840],{"class":532},"\"手机\"",[186,154842,13898],{"class":202},[186,154844,85516],{"class":532},[186,154846,210],{"class":202},[186,154848,154849],{"class":206},"12000",[186,154851,6396],{"class":202},[186,154853,154854,154856,154858,154860,154862,154864,154866,154868,154871,154873,154875,154877,154880],{"class":188,"line":219},[186,154855,149582],{"class":202},[186,154857,149194],{"class":532},[186,154859,210],{"class":202},[186,154861,149805],{"class":532},[186,154863,13898],{"class":202},[186,154865,154835],{"class":532},[186,154867,210],{"class":202},[186,154869,154870],{"class":532},"\"电脑\"",[186,154872,13898],{"class":202},[186,154874,85516],{"class":532},[186,154876,210],{"class":202},[186,154878,154879],{"class":206},"18000",[186,154881,6396],{"class":202},[186,154883,154884,154886,154888,154890,154892,154894,154896,154898,154900,154902,154904,154906,154909],{"class":188,"line":225},[186,154885,149582],{"class":202},[186,154887,149194],{"class":532},[186,154889,210],{"class":202},[186,154891,149826],{"class":532},[186,154893,13898],{"class":202},[186,154895,154835],{"class":532},[186,154897,210],{"class":202},[186,154899,154840],{"class":532},[186,154901,13898],{"class":202},[186,154903,85516],{"class":532},[186,154905,210],{"class":202},[186,154907,154908],{"class":206},"15000",[186,154910,6396],{"class":202},[186,154912,154913,154915,154917,154919,154921,154923,154925,154927,154929,154931,154933,154935,154938],{"class":188,"line":242},[186,154914,149582],{"class":202},[186,154916,149194],{"class":532},[186,154918,210],{"class":202},[186,154920,149826],{"class":532},[186,154922,13898],{"class":202},[186,154924,154835],{"class":532},[186,154926,210],{"class":202},[186,154928,154870],{"class":532},[186,154930,13898],{"class":202},[186,154932,85516],{"class":532},[186,154934,210],{"class":202},[186,154936,154937],{"class":206},"16000",[186,154939,6396],{"class":202},[186,154941,154942],{"class":188,"line":248},[186,154943,34701],{"class":202},[29,154945,154947],{"id":154946},"_1252-按日期统计","12.5.2 按日期统计",[176,154949,154951],{"className":31833,"code":154950,"language":31835,"meta":181,"style":181},"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",[183,154952,154953,154962,154966,154977,154991,155004,155023,155027],{"__ignoreMap":181},[186,154954,154955,154958,154960],{"class":188,"line":189},[186,154956,154957],{"class":202},"daily_total ",[186,154959,529],{"class":669},[186,154961,89299],{"class":202},[186,154963,154964],{"class":188,"line":49},[186,154965,3867],{"emptyLinePlaceholder":1551},[186,154967,154968,154970,154972,154974],{"class":188,"line":219},[186,154969,4491],{"class":669},[186,154971,149406],{"class":202},[186,154973,27500],{"class":669},[186,154975,154976],{"class":202}," sales:\n",[186,154978,154979,154982,154984,154987,154989],{"class":188,"line":225},[186,154980,154981],{"class":202},"    date ",[186,154983,529],{"class":669},[186,154985,154986],{"class":202}," item[",[186,154988,149194],{"class":532},[186,154990,34701],{"class":202},[186,154992,154993,154996,154998,155000,155002],{"class":188,"line":242},[186,154994,154995],{"class":202},"    amount ",[186,154997,529],{"class":669},[186,154999,154986],{"class":202},[186,155001,85516],{"class":532},[186,155003,34701],{"class":202},[186,155005,155006,155009,155011,155014,155016,155018,155020],{"class":188,"line":248},[186,155007,155008],{"class":202},"    daily_total[date] ",[186,155010,529],{"class":669},[186,155012,155013],{"class":202}," daily_total.get(date, ",[186,155015,1803],{"class":206},[186,155017,839],{"class":202},[186,155019,2091],{"class":669},[186,155021,155022],{"class":202}," amount\n",[186,155024,155025],{"class":188,"line":265},[186,155026,3867],{"emptyLinePlaceholder":1551},[186,155028,155029,155031],{"class":188,"line":271},[186,155030,31870],{"class":206},[186,155032,155033],{"class":202},"(daily_total)\n",[29,155035,155037],{"id":155036},"_1253-按类别统计","12.5.3 按类别统计",[176,155039,155041],{"className":31833,"code":155040,"language":31835,"meta":181,"style":181},"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",[183,155042,155043,155052,155056,155066,155079,155091,155109,155113],{"__ignoreMap":181},[186,155044,155045,155048,155050],{"class":188,"line":189},[186,155046,155047],{"class":202},"category_total ",[186,155049,529],{"class":669},[186,155051,89299],{"class":202},[186,155053,155054],{"class":188,"line":49},[186,155055,3867],{"emptyLinePlaceholder":1551},[186,155057,155058,155060,155062,155064],{"class":188,"line":219},[186,155059,4491],{"class":669},[186,155061,149406],{"class":202},[186,155063,27500],{"class":669},[186,155065,154976],{"class":202},[186,155067,155068,155071,155073,155075,155077],{"class":188,"line":225},[186,155069,155070],{"class":202},"    category ",[186,155072,529],{"class":669},[186,155074,154986],{"class":202},[186,155076,154835],{"class":532},[186,155078,34701],{"class":202},[186,155080,155081,155083,155085,155087,155089],{"class":188,"line":242},[186,155082,154995],{"class":202},[186,155084,529],{"class":669},[186,155086,154986],{"class":202},[186,155088,85516],{"class":532},[186,155090,34701],{"class":202},[186,155092,155093,155096,155098,155101,155103,155105,155107],{"class":188,"line":248},[186,155094,155095],{"class":202},"    category_total[category] ",[186,155097,529],{"class":669},[186,155099,155100],{"class":202}," category_total.get(category, ",[186,155102,1803],{"class":206},[186,155104,839],{"class":202},[186,155106,2091],{"class":669},[186,155108,155022],{"class":202},[186,155110,155111],{"class":188,"line":265},[186,155112,3867],{"emptyLinePlaceholder":1551},[186,155114,155115,155117],{"class":188,"line":271},[186,155116,31870],{"class":206},[186,155118,155119],{"class":202},"(category_total)\n",[29,155121,155123],{"id":155122},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[176,155125,155127],{"className":31833,"code":155126,"language":31835,"meta":181,"style":181},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[183,155128,155129,155154],{"__ignoreMap":181},[186,155130,155131,155134,155136,155138,155141,155144,155147,155150,155152],{"class":188,"line":189},[186,155132,155133],{"class":202},"top_date, top_amount ",[186,155135,529],{"class":669},[186,155137,7414],{"class":206},[186,155139,155140],{"class":202},"(daily_total.items(), ",[186,155142,155143],{"class":835},"key",[186,155145,155146],{"class":669},"=lambda",[186,155148,155149],{"class":202}," item: item[",[186,155151,1829],{"class":206},[186,155153,6123],{"class":202},[186,155155,155156,155158],{"class":188,"line":49},[186,155157,31870],{"class":206},[186,155159,155160],{"class":202},"(top_date, top_amount)\n",[14,155162,155164],{"id":155163},"_126-绘制柱状图","12.6 绘制柱状图",[176,155166,155168],{"className":31833,"code":155167,"language":31835,"meta":181,"style":181},"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",[183,155169,155170,155184,155195,155199,155207,155219,155231,155242,155246,155250,155260,155271,155285,155290,155307,155324,155340,155344],{"__ignoreMap":181},[186,155171,155172,155174,155176,155178,155180,155182],{"class":188,"line":189},[186,155173,32192],{"class":669},[186,155175,148576],{"class":202},[186,155177,31847],{"class":669},[186,155179,148581],{"class":202},[186,155181,32838],{"class":669},[186,155183,148586],{"class":202},[186,155185,155186,155188,155190,155192],{"class":188,"line":49},[186,155187,32192],{"class":669},[186,155189,148435],{"class":202},[186,155191,31847],{"class":669},[186,155193,155194],{"class":202}," Bar\n",[186,155196,155197],{"class":188,"line":219},[186,155198,3867],{"emptyLinePlaceholder":1551},[186,155200,155201,155203,155205],{"class":188,"line":225},[186,155202,155047],{"class":202},[186,155204,529],{"class":669},[186,155206,622],{"class":202},[186,155208,155209,155212,155214,155217],{"class":188,"line":242},[186,155210,155211],{"class":532},"    \"手机\"",[186,155213,210],{"class":202},[186,155215,155216],{"class":206},"27000",[186,155218,32921],{"class":202},[186,155220,155221,155224,155226,155229],{"class":188,"line":248},[186,155222,155223],{"class":532},"    \"电脑\"",[186,155225,210],{"class":202},[186,155227,155228],{"class":206},"34000",[186,155230,32921],{"class":202},[186,155232,155233,155236,155238,155240],{"class":188,"line":265},[186,155234,155235],{"class":532},"    \"耳机\"",[186,155237,210],{"class":202},[186,155239,125830],{"class":206},[186,155241,32921],{"class":202},[186,155243,155244],{"class":188,"line":271},[186,155245,639],{"class":202},[186,155247,155248],{"class":188,"line":288},[186,155249,3867],{"emptyLinePlaceholder":1551},[186,155251,155252,155255,155257],{"class":188,"line":294},[186,155253,155254],{"class":202},"bar ",[186,155256,529],{"class":669},[186,155258,155259],{"class":202}," Bar()\n",[186,155261,155262,155265,155268],{"class":188,"line":1212},[186,155263,155264],{"class":202},"bar.add_xaxis(",[186,155266,155267],{"class":206},"list",[186,155269,155270],{"class":202},"(category_total.keys()))\n",[186,155272,155273,155276,155278,155280,155282],{"class":188,"line":1223},[186,155274,155275],{"class":202},"bar.add_yaxis(",[186,155277,148492],{"class":532},[186,155279,13898],{"class":202},[186,155281,155267],{"class":206},[186,155283,155284],{"class":202},"(category_total.values()))\n",[186,155286,155287],{"class":188,"line":1236},[186,155288,155289],{"class":202},"bar.set_global_opts(\n",[186,155291,155292,155294,155296,155298,155300,155302,155305],{"class":188,"line":3096},[186,155293,148670],{"class":835},[186,155295,529],{"class":669},[186,155297,148675],{"class":202},[186,155299,52859],{"class":835},[186,155301,529],{"class":669},[186,155303,155304],{"class":532},"\"品类销售额\"",[186,155306,1138],{"class":202},[186,155308,155309,155311,155313,155315,155317,155319,155322],{"class":188,"line":3110},[186,155310,148689],{"class":835},[186,155312,529],{"class":669},[186,155314,148694],{"class":202},[186,155316,81242],{"class":835},[186,155318,529],{"class":669},[186,155320,155321],{"class":532},"\"品类\"",[186,155323,1138],{"class":202},[186,155325,155326,155328,155330,155332,155334,155336,155338],{"class":188,"line":3115},[186,155327,148708],{"class":835},[186,155329,529],{"class":669},[186,155331,148694],{"class":202},[186,155333,81242],{"class":835},[186,155335,529],{"class":669},[186,155337,148492],{"class":532},[186,155339,1138],{"class":202},[186,155341,155342],{"class":188,"line":3121},[186,155343,1629],{"class":202},[186,155345,155346,155349,155352],{"class":188,"line":3142},[186,155347,155348],{"class":202},"bar.render(",[186,155350,155351],{"class":532},"\"category_sales.html\"",[186,155353,1629],{"class":202},[14,155355,155357],{"id":155356},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[169,155359,155360],{},"时间线适合展示不同日期、月份、年份的数据变化。",[176,155362,155364],{"className":31833,"code":155363,"language":31835,"meta":181,"style":181},"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",[183,155365,155366,155380,155391,155395,155403,155427,155450,155475,155479,155483,155493,155497,155508,155517,155527,155541,155572,155577,155581],{"__ignoreMap":181},[186,155367,155368,155370,155372,155374,155376,155378],{"class":188,"line":189},[186,155369,32192],{"class":669},[186,155371,148576],{"class":202},[186,155373,31847],{"class":669},[186,155375,148581],{"class":202},[186,155377,32838],{"class":669},[186,155379,148586],{"class":202},[186,155381,155382,155384,155386,155388],{"class":188,"line":49},[186,155383,32192],{"class":669},[186,155385,148435],{"class":202},[186,155387,31847],{"class":669},[186,155389,155390],{"class":202}," Bar, Timeline\n",[186,155392,155393],{"class":188,"line":219},[186,155394,3867],{"emptyLinePlaceholder":1551},[186,155396,155397,155399,155401],{"class":188,"line":225},[186,155398,103089],{"class":202},[186,155400,529],{"class":669},[186,155402,622],{"class":202},[186,155404,155405,155408,155411,155413,155415,155417,155419,155421,155423,155425],{"class":188,"line":242},[186,155406,155407],{"class":532},"    \"2024-10-01\"",[186,155409,155410],{"class":202},": {",[186,155412,154840],{"class":532},[186,155414,210],{"class":202},[186,155416,154849],{"class":206},[186,155418,13898],{"class":202},[186,155420,154870],{"class":532},[186,155422,210],{"class":202},[186,155424,154879],{"class":206},[186,155426,6396],{"class":202},[186,155428,155429,155432,155434,155436,155438,155440,155442,155444,155446,155448],{"class":188,"line":248},[186,155430,155431],{"class":532},"    \"2024-10-02\"",[186,155433,155410],{"class":202},[186,155435,154840],{"class":532},[186,155437,210],{"class":202},[186,155439,154908],{"class":206},[186,155441,13898],{"class":202},[186,155443,154870],{"class":532},[186,155445,210],{"class":202},[186,155447,154937],{"class":206},[186,155449,6396],{"class":202},[186,155451,155452,155455,155457,155459,155461,155464,155466,155468,155470,155473],{"class":188,"line":265},[186,155453,155454],{"class":532},"    \"2024-10-03\"",[186,155456,155410],{"class":202},[186,155458,154840],{"class":532},[186,155460,210],{"class":202},[186,155462,155463],{"class":206},"17000",[186,155465,13898],{"class":202},[186,155467,154870],{"class":532},[186,155469,210],{"class":202},[186,155471,155472],{"class":206},"19000",[186,155474,6396],{"class":202},[186,155476,155477],{"class":188,"line":271},[186,155478,639],{"class":202},[186,155480,155481],{"class":188,"line":288},[186,155482,3867],{"emptyLinePlaceholder":1551},[186,155484,155485,155488,155490],{"class":188,"line":294},[186,155486,155487],{"class":202},"timeline ",[186,155489,529],{"class":669},[186,155491,155492],{"class":202}," Timeline()\n",[186,155494,155495],{"class":188,"line":1212},[186,155496,3867],{"emptyLinePlaceholder":1551},[186,155498,155499,155501,155504,155506],{"class":188,"line":1223},[186,155500,4491],{"class":669},[186,155502,155503],{"class":202}," date, category_data ",[186,155505,27500],{"class":669},[186,155507,150345],{"class":202},[186,155509,155510,155513,155515],{"class":188,"line":1236},[186,155511,155512],{"class":202},"    bar ",[186,155514,529],{"class":669},[186,155516,155259],{"class":202},[186,155518,155519,155522,155524],{"class":188,"line":3096},[186,155520,155521],{"class":202},"    bar.add_xaxis(",[186,155523,155267],{"class":206},[186,155525,155526],{"class":202},"(category_data.keys()))\n",[186,155528,155529,155532,155534,155536,155538],{"class":188,"line":3110},[186,155530,155531],{"class":202},"    bar.add_yaxis(",[186,155533,148492],{"class":532},[186,155535,13898],{"class":202},[186,155537,155267],{"class":206},[186,155539,155540],{"class":202},"(category_data.values()))\n",[186,155542,155543,155546,155549,155551,155553,155555,155557,155559,155561,155563,155565,155567,155570],{"class":188,"line":3115},[186,155544,155545],{"class":202},"    bar.set_global_opts(",[186,155547,155548],{"class":835},"title_opts",[186,155550,529],{"class":669},[186,155552,148675],{"class":202},[186,155554,52859],{"class":835},[186,155556,529],{"class":669},[186,155558,1673],{"class":669},[186,155560,1862],{"class":532},[186,155562,2504],{"class":206},[186,155564,75359],{"class":202},[186,155566,2553],{"class":206},[186,155568,155569],{"class":532},"销售额\"",[186,155571,31952],{"class":202},[186,155573,155574],{"class":188,"line":3121},[186,155575,155576],{"class":202},"    timeline.add(bar, date)\n",[186,155578,155579],{"class":188,"line":3142},[186,155580,3867],{"emptyLinePlaceholder":1551},[186,155582,155583,155586,155589],{"class":188,"line":3147},[186,155584,155585],{"class":202},"timeline.render(",[186,155587,155588],{"class":532},"\"timeline_sales.html\"",[186,155590,1629],{"class":202},[14,155592,155594],{"id":155593},"_128-绘制地图","12.8 绘制地图",[169,155596,155597],{},"地图适合展示地区数据。",[176,155599,155601],{"className":31833,"code":155600,"language":31835,"meta":181,"style":181},"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",[183,155602,155603,155617,155628,155632,155640,155653,155665,155678,155691,155695,155699,155709,155724,155729,155746,155765,155769],{"__ignoreMap":181},[186,155604,155605,155607,155609,155611,155613,155615],{"class":188,"line":189},[186,155606,32192],{"class":669},[186,155608,148576],{"class":202},[186,155610,31847],{"class":669},[186,155612,148581],{"class":202},[186,155614,32838],{"class":669},[186,155616,148586],{"class":202},[186,155618,155619,155621,155623,155625],{"class":188,"line":49},[186,155620,32192],{"class":669},[186,155622,148435],{"class":202},[186,155624,31847],{"class":669},[186,155626,155627],{"class":202}," Map\n",[186,155629,155630],{"class":188,"line":219},[186,155631,3867],{"emptyLinePlaceholder":1551},[186,155633,155634,155636,155638],{"class":188,"line":225},[186,155635,103089],{"class":202},[186,155637,529],{"class":669},[186,155639,56888],{"class":202},[186,155641,155642,155645,155647,155649,155651],{"class":188,"line":242},[186,155643,155644],{"class":202},"    (",[186,155646,70706],{"class":532},[186,155648,13898],{"class":202},[186,155650,2425],{"class":206},[186,155652,1138],{"class":202},[186,155654,155655,155657,155659,155661,155663],{"class":188,"line":248},[186,155656,155644],{"class":202},[186,155658,70726],{"class":532},[186,155660,13898],{"class":202},[186,155662,148509],{"class":206},[186,155664,1138],{"class":202},[186,155666,155667,155669,155672,155674,155676],{"class":188,"line":265},[186,155668,155644],{"class":202},[186,155670,155671],{"class":532},"\"广东\"",[186,155673,13898],{"class":202},[186,155675,3190],{"class":206},[186,155677,1138],{"class":202},[186,155679,155680,155682,155685,155687,155689],{"class":188,"line":271},[186,155681,155644],{"class":202},[186,155683,155684],{"class":532},"\"浙江\"",[186,155686,13898],{"class":202},[186,155688,148514],{"class":206},[186,155690,1138],{"class":202},[186,155692,155693],{"class":188,"line":288},[186,155694,34701],{"class":202},[186,155696,155697],{"class":188,"line":294},[186,155698,3867],{"emptyLinePlaceholder":1551},[186,155700,155701,155704,155706],{"class":188,"line":1212},[186,155702,155703],{"class":202},"map_chart ",[186,155705,529],{"class":669},[186,155707,155708],{"class":202}," Map()\n",[186,155710,155711,155714,155716,155719,155722],{"class":188,"line":1223},[186,155712,155713],{"class":202},"map_chart.add(",[186,155715,148492],{"class":532},[186,155717,155718],{"class":202},", data, ",[186,155720,155721],{"class":532},"\"china\"",[186,155723,1629],{"class":202},[186,155725,155726],{"class":188,"line":1236},[186,155727,155728],{"class":202},"map_chart.set_global_opts(\n",[186,155730,155731,155733,155735,155737,155739,155741,155744],{"class":188,"line":3096},[186,155732,148670],{"class":835},[186,155734,529],{"class":669},[186,155736,148675],{"class":202},[186,155738,52859],{"class":835},[186,155740,529],{"class":669},[186,155742,155743],{"class":532},"\"地区销售额\"",[186,155745,1138],{"class":202},[186,155747,155748,155751,155753,155756,155759,155761,155763],{"class":188,"line":3110},[186,155749,155750],{"class":835},"    visualmap_opts",[186,155752,529],{"class":669},[186,155754,155755],{"class":202},"opts.VisualMapOpts(",[186,155757,155758],{"class":835},"max_",[186,155760,529],{"class":669},[186,155762,3190],{"class":206},[186,155764,1138],{"class":202},[186,155766,155767],{"class":188,"line":3115},[186,155768,1629],{"class":202},[186,155770,155771,155774,155777],{"class":188,"line":3121},[186,155772,155773],{"class":202},"map_chart.render(",[186,155775,155776],{"class":532},"\"map_sales.html\"",[186,155778,1629],{"class":202},[169,155780,155781],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155783,155785],{"id":155784},"_129-项目拆分建议","12.9 项目拆分建议",[169,155787,155788],{},"当代码超过一个文件时，可以这样组织：",[176,155790,155793],{"className":155791,"code":155792,"language":753,"meta":181},[751],"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",[183,155794,155792],{"__ignoreMap":181},[169,155796,155797],{},"职责：",[34,155799,155800,155806,155812,155818],{},[22,155801,155802,155805],{},[183,155803,155804],{},"main.py","：程序入口。",[22,155807,155808,155811],{},[183,155809,155810],{},"file_utils.py","：读写 JSON。",[22,155813,155814,155817],{},[183,155815,155816],{},"sales_service.py","：统计销售数据。",[22,155819,155820,155823],{},[183,155821,155822],{},"chart_builder.py","：生成图表。",[14,155825,155827],{"id":155826},"_1210-python基础复习清单","12.10 Python基础复习清单",[169,155829,155830],{},"语法基础：",[34,155832,155833,155836,155839,155842],{},[22,155834,155835],{},"会写变量、注释、输入输出。",[22,155837,155838],{},"会使用 int、float、str、bool。",[22,155840,155841],{},"会做类型转换。",[22,155843,155844],{},"会使用 f-string 格式化输出。",[169,155846,155847],{},"流程控制：",[34,155849,155850,155856,155862,155870],{},[22,155851,155852,155853,913],{},"会写 ",[183,155854,155855],{},"if elif else",[22,155857,155852,155858,102449,155860,913],{},[183,155859,110094],{},[183,155861,4491],{},[22,155863,155864,155865,102449,155867,913],{},"理解 ",[183,155866,3520],{},[183,155868,155869],{},"continue",[22,155871,155872],{},"能写嵌套循环。",[169,155874,155875],{},"函数：",[34,155877,155878,155881,155884,155887],{},[22,155879,155880],{},"会定义和调用函数。",[22,155882,155883],{},"理解参数和返回值。",[22,155885,155886],{},"知道局部变量和全局变量。",[22,155888,155889],{},"会使用默认参数、关键字参数、不定长参数。",[169,155891,155892],{},"容器：",[34,155894,155895,155898,155901,155904,155907],{},[22,155896,155897],{},"会使用列表增删改查。",[22,155899,155900],{},"会遍历列表、字典。",[22,155902,155903],{},"会使用切片。",[22,155905,155906],{},"会用集合去重。",[22,155908,155909],{},"会处理列表嵌套字典。",[169,155911,155912],{},"文件和模块：",[34,155914,155915,155918,155921,155924,155927],{},[22,155916,155917],{},"会读写文本文件。",[22,155919,155920],{},"会读写 JSON。",[22,155922,155923],{},"会捕获常见异常。",[22,155925,155926],{},"会导入模块和第三方包。",[22,155928,155929],{},"会创建简单包结构。",[169,155931,155932],{},"项目能力：",[34,155934,155935,155938,155941,155944,155947],{},[22,155936,155937],{},"能把代码拆成函数。",[22,155939,155940],{},"能把数据保存到文件。",[22,155942,155943],{},"能处理用户输入错误。",[22,155945,155946],{},"能写一个完整菜单程序。",[22,155948,155949],{},"能用 pyecharts 生成图表。",[14,155951,155953],{"id":155952},"_1211-推荐练习顺序","12.11 推荐练习顺序",[34,155955,155956,155959,155962,155965,155968,155971,155974,155977],{},[22,155957,155958],{},"猜数字游戏。",[22,155960,155961],{},"ATM 菜单程序。",[22,155963,155964],{},"学生成绩统计。",[22,155966,155967],{},"学生管理系统函数版。",[22,155969,155970],{},"学生管理系统文件持久化版。",[22,155972,155973],{},"学生管理系统面向对象版。",[22,155975,155976],{},"销售数据统计。",[22,155978,155979],{},"销售数据可视化。",[14,155981,155983],{"id":155982},"_1212-常见学习误区","12.12 常见学习误区",[34,155985,155986,155989,155992,155995,155998,156001,156004],{},[22,155987,155988],{},"只看视频不敲代码。",[22,155990,155991],{},"一报错就复制错误去搜，不先读报错位置。",[22,155993,155994],{},"变量名随便写，后续自己看不懂。",[22,155996,155997],{},"所有代码都写在一个文件一个函数里。",[22,155999,156000],{},"不保存练习代码，复习时没有材料。",[22,156002,156003],{},"还没掌握列表字典就急着学框架。",[22,156005,156006],{},"不会读官方文档，只依赖教程。",[14,156008,156010],{"id":156009},"_1213-如何读报错","12.13 如何读报错",[169,156012,156013],{},"报错通常从下往上看最后几行。",[169,156015,16597],{},[176,156017,156020],{"className":156018,"code":156019,"language":753,"meta":181},[751],"ValueError: invalid literal for int() with base 10: 'abc'\n",[183,156021,156019],{"__ignoreMap":181},[169,156023,26058],{},[34,156025,156026,156032,156042],{},[22,156027,156028,156029,913],{},"异常类型是 ",[183,156030,156031],{},"ValueError",[22,156033,108776,156034,156037,156038,156041],{},[183,156035,156036],{},"int()"," 无法把 ",[183,156039,156040],{},"'abc'"," 转成整数。",[22,156043,156044],{},"应该检查输入内容或增加异常处理。",[169,156046,156047],{},"再看文件名和行号：",[176,156049,156052],{"className":156050,"code":156051,"language":753,"meta":181},[751],"File \"main.py\", line 10, in \u003Cmodule>\n",[183,156053,156051],{"__ignoreMap":181},[169,156055,156056,156057,156059],{},"表示错误发生在 ",[183,156058,155804],{}," 第 10 行。",[14,156061,156063],{"id":156062},"_1214-后续学习方向","12.14 后续学习方向",[169,156065,156066],{},"Python 基础完成后，可以按兴趣选择方向：",[34,156068,156069,156081,156090,156102,156113,156122,156132],{},[22,156070,156071,156072,1824,156075,1824,156078,913],{},"自动化办公：",[183,156073,156074],{},"openpyxl",[183,156076,156077],{},"python-docx",[183,156079,156080],{},"pdfplumber",[22,156082,156083,156084,1824,156086,1824,156088,913],{},"数据分析：",[183,156085,102057],{},[183,156087,147382],{},[183,156089,147390],{},[22,156091,156092,156093,1824,156096,1824,156099,913],{},"Web 后端：",[183,156094,156095],{},"Flask",[183,156097,156098],{},"FastAPI",[183,156100,156101],{},"Django",[22,156103,156104,156105,1824,156107,1824,156110,913],{},"爬虫：",[183,156106,147367],{},[183,156108,156109],{},"BeautifulSoup",[183,156111,156112],{},"Scrapy",[22,156114,156115,156116,1824,156118,156121],{},"测试开发：",[183,156117,147414],{},[183,156119,156120],{},"selenium","、接口测试。",[22,156123,156124,156125,1824,156127,1824,156129,913],{},"人工智能：",[183,156126,102057],{},[183,156128,147382],{},[183,156130,156131],{},"pytorch",[22,156133,156134,156135,1824,156137,1824,156140,913],{},"运维脚本：",[183,156136,146983],{},[183,156138,156139],{},"subprocess",[183,156141,156142],{},"paramiko",[169,156144,156145],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156147,156149],{"id":156148},"_1215-结课练习","12.15 结课练习",[34,156151,156152,156155,156158,156161,156164,156167,156170,156173],{},[22,156153,156154],{},"完成函数版学生管理系统。",[22,156156,156157],{},"给学生管理系统增加 JSON 持久化。",[22,156159,156160],{},"给学生管理系统增加异常处理。",[22,156162,156163],{},"把学生管理系统改成面向对象版。",[22,156165,156166],{},"使用 pyecharts 绘制学生成绩柱状图。",[22,156168,156169],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[22,156171,156172],{},"按品类统计销售额并绘制柱状图。",[22,156174,156175],{},"写一份自己的 Python 学习路线图。",[1524,156177,156178],{},"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":181,"searchDepth":49,"depth":49,"links":156180},[156181,156182,156185,156186,156187,156193,156194,156195,156196,156197,156198,156199,156200,156201,156202],{"id":152897,"depth":49,"text":152898},{"id":152947,"depth":49,"text":152948,"children":156183},[156184],{"id":152951,"depth":219,"text":152952},{"id":152990,"depth":49,"text":152991},{"id":154464,"depth":49,"text":154465},{"id":154802,"depth":49,"text":154803,"children":156188},[156189,156190,156191,156192],{"id":154806,"depth":219,"text":154807},{"id":154946,"depth":219,"text":154947},{"id":155036,"depth":219,"text":155037},{"id":155122,"depth":219,"text":155123},{"id":155163,"depth":49,"text":155164},{"id":155356,"depth":49,"text":155357},{"id":155593,"depth":49,"text":155594},{"id":155784,"depth":49,"text":155785},{"id":155826,"depth":49,"text":155827},{"id":155952,"depth":49,"text":155953},{"id":155982,"depth":49,"text":155983},{"id":156009,"depth":49,"text":156010},{"id":156062,"depth":49,"text":156063},{"id":156148,"depth":49,"text":156149},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152889,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156209,"title":156210,"body":156211,"description":1548,"extension":1549,"meta":158680,"navigation":1551,"path":158681,"seo":158682,"stem":158683,"__hash__":158684},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156212,"toc":158655},[156213,156216,156220,156223,156226,156246,156249,156272,156275,156278,156300,156303,156325,156329,156332,156372,156375,156496,156500,156503,156543,156546,156570,156573,156577,156580,156594,156627,156630,156665,156668,156691,156694,156727,156730,156732,156738,156813,156816,156822,156839,156879,156883,156886,156932,156934,156972,156975,157010,157013,157048,157051,157083,157086,157105,157109,157113,157226,157228,157303,157307,157353,157356,157382,157391,157395,157398,157461,157469,157497,157501,157541,157606,157610,157613,157652,157655,157700,157703,157764,157768,157795,157798,157826,157829,157833,157837,157902,157905,157943,157946,157978,157982,158081,158085,158088,158161,158164,158212,158216,158222,158262,158265,158312,158315,158364,158368,158370,158384,158386,158567,158571,158598,158618,158625,158629,158646,158652],[10,156214,156210],{"id":156215},"_2-基础语法变量与字符串",[14,156217,156219],{"id":156218},"_21-注释","2.1 注释",[169,156221,156222],{},"注释是给人看的说明文字，不会被 Python 执行。",[169,156224,156225],{},"单行注释：",[176,156227,156229],{"className":31833,"code":156228,"language":31835,"meta":181,"style":181},"# 这是单行注释\nprint(\"hello\")\n",[183,156230,156231,156236],{"__ignoreMap":181},[186,156232,156233],{"class":188,"line":189},[186,156234,156235],{"class":192},"# 这是单行注释\n",[186,156237,156238,156240,156242,156244],{"class":188,"line":49},[186,156239,31870],{"class":206},[186,156241,832],{"class":202},[186,156243,7307],{"class":532},[186,156245,1629],{"class":202},[169,156247,156248],{},"多行说明常用三引号：",[176,156250,156252],{"className":31833,"code":156251,"language":31835,"meta":181,"style":181},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[183,156253,156254,156258,156263,156268],{"__ignoreMap":181},[186,156255,156256],{"class":188,"line":189},[186,156257,97129],{"class":532},[186,156259,156260],{"class":188,"line":49},[186,156261,156262],{"class":532},"这是多行说明。\n",[186,156264,156265],{"class":188,"line":219},[186,156266,156267],{"class":532},"常用于文件顶部说明、函数说明等。\n",[186,156269,156270],{"class":188,"line":225},[186,156271,97129],{"class":532},[169,156273,156274],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[169,156276,156277],{},"不好：",[176,156279,156281],{"className":31833,"code":156280,"language":31835,"meta":181,"style":181},"# age 加 1\nage = age + 1\n",[183,156282,156283,156288],{"__ignoreMap":181},[186,156284,156285],{"class":188,"line":189},[186,156286,156287],{"class":192},"# age 加 1\n",[186,156289,156290,156292,156294,156296,156298],{"class":188,"line":49},[186,156291,147743],{"class":202},[186,156293,529],{"class":669},[186,156295,17168],{"class":202},[186,156297,2091],{"class":669},[186,156299,57140],{"class":206},[169,156301,156302],{},"较好：",[176,156304,156306],{"className":31833,"code":156305,"language":31835,"meta":181,"style":181},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[183,156307,156308,156313],{"__ignoreMap":181},[186,156309,156310],{"class":188,"line":189},[186,156311,156312],{"class":192},"# 用户过完生日后，年龄增加一岁\n",[186,156314,156315,156317,156319,156321,156323],{"class":188,"line":49},[186,156316,147743],{"class":202},[186,156318,529],{"class":669},[186,156320,17168],{"class":202},[186,156322,2091],{"class":669},[186,156324,57140],{"class":206},[14,156326,156328],{"id":156327},"_22-字面量","2.2 字面量",[169,156330,156331],{},"字面量就是代码中直接写出来的数据。",[176,156333,156335],{"className":31833,"code":156334,"language":31835,"meta":181,"style":181},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[183,156336,156337,156344,156351,156358,156365],{"__ignoreMap":181},[186,156338,156339,156341],{"class":188,"line":189},[186,156340,1922],{"class":206},[186,156342,156343],{"class":192},"          # 整数\n",[186,156345,156346,156348],{"class":188,"line":49},[186,156347,1670],{"class":206},[186,156349,156350],{"class":192},"         # 小数\n",[186,156352,156353,156355],{"class":188,"line":219},[186,156354,7307],{"class":532},[186,156356,156357],{"class":192},"      # 字符串\n",[186,156359,156360,156362],{"class":188,"line":225},[186,156361,32931],{"class":206},[186,156363,156364],{"class":192},"         # 布尔值\n",[186,156366,156367,156369],{"class":188,"line":242},[186,156368,97117],{"class":206},[186,156370,156371],{"class":192},"         # 空值\n",[169,156373,156374],{},"常见字面量类型：",[99,156376,156377,156387],{},[102,156378,156379],{},[105,156380,156381,156383,156385],{},[108,156382,25197],{},[108,156384,28948],{},[108,156386,27327],{},[116,156388,156389,156400,156411,156422,156434,156446,156458,156471,156483],{},[105,156390,156391,156393,156397],{},[121,156392,1626],{},[121,156394,156395],{},[183,156396,1922],{},[121,156398,156399],{},"整数",[105,156401,156402,156404,156408],{},[121,156403,1662],{},[121,156405,156406],{},[183,156407,1670],{},[121,156409,156410],{},"浮点数",[105,156412,156413,156415,156419],{},[121,156414,2775],{},[121,156416,156417],{},[183,156418,7307],{},[121,156420,156421],{},"字符串",[105,156423,156424,156426,156432],{},[121,156425,2827],{},[121,156427,156428,1824,156430],{},[183,156429,32931],{},[183,156431,35442],{},[121,156433,67452],{},[105,156435,156436,156439,156443],{},[121,156437,156438],{},"NoneType",[121,156440,156441],{},[183,156442,97117],{},[121,156444,156445],{},"空值",[105,156447,156448,156450,156455],{},[121,156449,155267],{},[121,156451,156452],{},[183,156453,156454],{},"[1, 2, 3]",[121,156456,156457],{},"列表",[105,156459,156460,156463,156468],{},[121,156461,156462],{},"tuple",[121,156464,156465],{},[183,156466,156467],{},"(1, 2, 3)",[121,156469,156470],{},"元组",[105,156472,156473,156475,156480],{},[121,156474,115977],{},[121,156476,156477],{},[183,156478,156479],{},"{\"name\": \"张三\"}",[121,156481,156482],{},"字典",[105,156484,156485,156488,156493],{},[121,156486,156487],{},"set",[121,156489,156490],{},[183,156491,156492],{},"{1, 2, 3}",[121,156494,156495],{},"集合",[14,156497,156499],{"id":156498},"_23-变量","2.3 变量",[169,156501,156502],{},"变量是保存数据的名字。",[176,156504,156506],{"className":31833,"code":156505,"language":31835,"meta":181,"style":181},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[183,156507,156508,156516,156524,156534],{"__ignoreMap":181},[186,156509,156510,156512,156514],{"class":188,"line":189},[186,156511,147733],{"class":202},[186,156513,529],{"class":669},[186,156515,150550],{"class":532},[186,156517,156518,156520,156522],{"class":188,"line":49},[186,156519,147743],{"class":202},[186,156521,529],{"class":669},[186,156523,147748],{"class":206},[186,156525,156526,156529,156531],{"class":188,"line":219},[186,156527,156528],{"class":202},"height ",[186,156530,529],{"class":669},[186,156532,156533],{"class":206}," 1.75\n",[186,156535,156536,156539,156541],{"class":188,"line":225},[186,156537,156538],{"class":202},"is_student ",[186,156540,529],{"class":669},[186,156542,154796],{"class":206},[169,156544,156545],{},"Python 的变量不需要提前声明类型：",[176,156547,156549],{"className":31833,"code":156548,"language":31835,"meta":181,"style":181},"score = 100\nscore = \"满分\"\n",[183,156550,156551,156561],{"__ignoreMap":181},[186,156552,156553,156556,156558],{"class":188,"line":189},[186,156554,156555],{"class":202},"score ",[186,156557,529],{"class":669},[186,156559,156560],{"class":206}," 100\n",[186,156562,156563,156565,156567],{"class":188,"line":49},[186,156564,156555],{"class":202},[186,156566,529],{"class":669},[186,156568,156569],{"class":532}," \"满分\"\n",[169,156571,156572],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156574,156576],{"id":156575},"_24-变量命名规则","2.4 变量命名规则",[169,156578,156579],{},"硬性规则：",[34,156581,156582,156585,156588,156591],{},[22,156583,156584],{},"只能由字母、数字、下划线组成。",[22,156586,156587],{},"不能以数字开头。",[22,156589,156590],{},"不能使用 Python 关键字。",[22,156592,156593],{},"区分大小写。",[176,156595,156597],{"className":31833,"code":156596,"language":31835,"meta":181,"style":181},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[183,156598,156599,156608,156617],{"__ignoreMap":181},[186,156600,156601,156604,156606],{"class":188,"line":189},[186,156602,156603],{"class":202},"user_name ",[186,156605,529],{"class":669},[186,156607,147738],{"class":532},[186,156609,156610,156613,156615],{"class":188,"line":49},[186,156611,156612],{"class":202},"age2 ",[186,156614,529],{"class":669},[186,156616,147748],{"class":206},[186,156618,156619,156622,156624],{"class":188,"line":219},[186,156620,156621],{"class":202},"_token ",[186,156623,529],{"class":669},[186,156625,156626],{"class":532}," \"abc\"\n",[169,156628,156629],{},"错误写法：",[176,156631,156633],{"className":31833,"code":156632,"language":31835,"meta":181,"style":181},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[183,156634,156635,156644,156656],{"__ignoreMap":181},[186,156636,156637,156640,156642],{"class":188,"line":189},[186,156638,156639],{"class":78836},"2age",[186,156641,15027],{"class":669},[186,156643,147748],{"class":206},[186,156645,156646,156648,156650,156652,156654],{"class":188,"line":49},[186,156647,133000],{"class":202},[186,156649,2142],{"class":669},[186,156651,147733],{"class":202},[186,156653,529],{"class":669},[186,156655,147738],{"class":532},[186,156657,156658,156660,156662],{"class":188,"line":219},[186,156659,16156],{"class":669},[186,156661,15027],{"class":669},[186,156663,156664],{"class":532}," \"一班\"\n",[169,156666,156667],{},"查看关键字：",[176,156669,156671],{"className":31833,"code":156670,"language":31835,"meta":181,"style":181},"import keyword\n\nprint(keyword.kwlist)\n",[183,156672,156673,156680,156684],{"__ignoreMap":181},[186,156674,156675,156677],{"class":188,"line":189},[186,156676,31847],{"class":669},[186,156678,156679],{"class":202}," keyword\n",[186,156681,156682],{"class":188,"line":49},[186,156683,3867],{"emptyLinePlaceholder":1551},[186,156685,156686,156688],{"class":188,"line":219},[186,156687,31870],{"class":206},[186,156689,156690],{"class":202},"(keyword.kwlist)\n",[169,156692,156693],{},"推荐命名风格：",[176,156695,156697],{"className":31833,"code":156696,"language":31835,"meta":181,"style":181},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[183,156698,156699,156708,156718],{"__ignoreMap":181},[186,156700,156701,156704,156706],{"class":188,"line":189},[186,156702,156703],{"class":202},"student_name ",[186,156705,529],{"class":669},[186,156707,150550],{"class":532},[186,156709,156710,156713,156715],{"class":188,"line":49},[186,156711,156712],{"class":202},"total_price ",[186,156714,529],{"class":669},[186,156716,156717],{"class":206}," 99.8\n",[186,156719,156720,156723,156725],{"class":188,"line":219},[186,156721,156722],{"class":202},"is_finished ",[186,156724,529],{"class":669},[186,156726,127238],{"class":206},[169,156728,156729],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156731,52186],{"id":52185},[169,156733,105797,156734,156737],{},[183,156735,156736],{},"type()"," 查看数据类型：",[176,156739,156741],{"className":31833,"code":156740,"language":31835,"meta":181,"style":181},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[183,156742,156743,156757,156771,156785,156799],{"__ignoreMap":181},[186,156744,156745,156747,156749,156751,156753,156755],{"class":188,"line":189},[186,156746,31870],{"class":206},[186,156748,832],{"class":202},[186,156750,104538],{"class":206},[186,156752,832],{"class":202},[186,156754,1922],{"class":206},[186,156756,31952],{"class":202},[186,156758,156759,156761,156763,156765,156767,156769],{"class":188,"line":49},[186,156760,31870],{"class":206},[186,156762,832],{"class":202},[186,156764,104538],{"class":206},[186,156766,832],{"class":202},[186,156768,1670],{"class":206},[186,156770,31952],{"class":202},[186,156772,156773,156775,156777,156779,156781,156783],{"class":188,"line":219},[186,156774,31870],{"class":206},[186,156776,832],{"class":202},[186,156778,104538],{"class":206},[186,156780,832],{"class":202},[186,156782,7307],{"class":532},[186,156784,31952],{"class":202},[186,156786,156787,156789,156791,156793,156795,156797],{"class":188,"line":225},[186,156788,31870],{"class":206},[186,156790,832],{"class":202},[186,156792,104538],{"class":206},[186,156794,832],{"class":202},[186,156796,32931],{"class":206},[186,156798,31952],{"class":202},[186,156800,156801,156803,156805,156807,156809,156811],{"class":188,"line":242},[186,156802,31870],{"class":206},[186,156804,832],{"class":202},[186,156806,104538],{"class":206},[186,156808,832],{"class":202},[186,156810,97117],{"class":206},[186,156812,31952],{"class":202},[169,156814,156815],{},"输出类似：",[176,156817,156820],{"className":156818,"code":156819,"language":753,"meta":181},[751],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[183,156821,156819],{"__ignoreMap":181},[169,156823,10488,156824,108714,156826,156828,156829,156831,156832,22961,156834,156831,156836,156838],{},[183,156825,2827],{},[183,156827,1626],{}," 的子类，",[183,156830,32931],{}," 可以当作 ",[183,156833,1829],{},[183,156835,35442],{},[183,156837,1803],{},"，但业务代码中不要滥用。",[176,156840,156842],{"className":31833,"code":156841,"language":31835,"meta":181,"style":181},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[183,156843,156844,156862],{"__ignoreMap":181},[186,156845,156846,156848,156850,156852,156854,156856,156859],{"class":188,"line":189},[186,156847,31870],{"class":206},[186,156849,832],{"class":202},[186,156851,32931],{"class":206},[186,156853,47020],{"class":669},[186,156855,26577],{"class":206},[186,156857,156858],{"class":202},")   ",[186,156860,156861],{"class":192},"# 2\n",[186,156863,156864,156866,156868,156870,156872,156874,156876],{"class":188,"line":49},[186,156865,31870],{"class":206},[186,156867,832],{"class":202},[186,156869,35442],{"class":206},[186,156871,47020],{"class":669},[186,156873,26577],{"class":206},[186,156875,47262],{"class":202},[186,156877,156878],{"class":192},"# 1\n",[14,156880,156882],{"id":156881},"_26-类型转换","2.6 类型转换",[169,156884,156885],{},"常用转换函数：",[176,156887,156889],{"className":31833,"code":156888,"language":31835,"meta":181,"style":181},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[183,156890,156891,156901,156912,156922],{"__ignoreMap":181},[186,156892,156893,156895,156897,156899],{"class":188,"line":189},[186,156894,1626],{"class":206},[186,156896,832],{"class":202},[186,156898,55761],{"class":532},[186,156900,1629],{"class":202},[186,156902,156903,156905,156907,156910],{"class":188,"line":49},[186,156904,1662],{"class":206},[186,156906,832],{"class":202},[186,156908,156909],{"class":532},"\"3.14\"",[186,156911,1629],{"class":202},[186,156913,156914,156916,156918,156920],{"class":188,"line":219},[186,156915,2775],{"class":206},[186,156917,832],{"class":202},[186,156919,1922],{"class":206},[186,156921,1629],{"class":202},[186,156923,156924,156926,156928,156930],{"class":188,"line":225},[186,156925,2827],{"class":206},[186,156927,832],{"class":202},[186,156929,1829],{"class":206},[186,156931,1629],{"class":202},[169,156933,16597],{},[176,156935,156937],{"className":31833,"code":156936,"language":31835,"meta":181,"style":181},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[183,156938,156939,156948,156959],{"__ignoreMap":181},[186,156940,156941,156943,156945],{"class":188,"line":189},[186,156942,147743],{"class":202},[186,156944,529],{"class":669},[186,156946,156947],{"class":532}," \"18\"\n",[186,156949,156950,156952,156954,156956],{"class":188,"line":49},[186,156951,147743],{"class":202},[186,156953,529],{"class":669},[186,156955,3849],{"class":206},[186,156957,156958],{"class":202},"(age)\n",[186,156960,156961,156963,156966,156968,156970],{"class":188,"line":219},[186,156962,31870],{"class":206},[186,156964,156965],{"class":202},"(age ",[186,156967,2091],{"class":669},[186,156969,26577],{"class":206},[186,156971,1629],{"class":202},[169,156973,156974],{},"输入得到的内容永远是字符串：",[176,156976,156978],{"className":31833,"code":156977,"language":31835,"meta":181,"style":181},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[183,156979,156980,156996],{"__ignoreMap":181},[186,156981,156982,156985,156987,156989,156991,156994],{"class":188,"line":189},[186,156983,156984],{"class":202},"num ",[186,156986,529],{"class":669},[186,156988,62046],{"class":206},[186,156990,832],{"class":202},[186,156992,156993],{"class":532},"\"请输入数字:\"",[186,156995,1629],{"class":202},[186,156997,156998,157000,157002,157004,157007],{"class":188,"line":49},[186,156999,31870],{"class":206},[186,157001,832],{"class":202},[186,157003,104538],{"class":206},[186,157005,157006],{"class":202},"(num))  ",[186,157008,157009],{"class":192},"# str\n",[169,157011,157012],{},"如果要做数学运算，必须转换：",[176,157014,157016],{"className":31833,"code":157015,"language":31835,"meta":181,"style":181},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[183,157017,157018,157036],{"__ignoreMap":181},[186,157019,157020,157022,157024,157026,157028,157030,157032,157034],{"class":188,"line":189},[186,157021,156984],{"class":202},[186,157023,529],{"class":669},[186,157025,3849],{"class":206},[186,157027,832],{"class":202},[186,157029,55266],{"class":206},[186,157031,832],{"class":202},[186,157033,156993],{"class":532},[186,157035,31952],{"class":202},[186,157037,157038,157040,157042,157044,157046],{"class":188,"line":49},[186,157039,31870],{"class":206},[186,157041,47073],{"class":202},[186,157043,2091],{"class":669},[186,157045,3505],{"class":206},[186,157047,1629],{"class":202},[169,157049,157050],{},"常见错误：",[176,157052,157054],{"className":31833,"code":157053,"language":31835,"meta":181,"style":181},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[183,157055,157056,157069],{"__ignoreMap":181},[186,157057,157058,157060,157062,157064,157066],{"class":188,"line":189},[186,157059,1626],{"class":206},[186,157061,832],{"class":202},[186,157063,156909],{"class":532},[186,157065,156858],{"class":202},[186,157067,157068],{"class":192},"# 错误\n",[186,157070,157071,157073,157075,157078,157081],{"class":188,"line":49},[186,157072,1626],{"class":206},[186,157074,832],{"class":202},[186,157076,157077],{"class":532},"\"abc\"",[186,157079,157080],{"class":202},")    ",[186,157082,157068],{"class":192},[169,157084,157085],{},"正确写法：",[176,157087,157089],{"className":31833,"code":157088,"language":31835,"meta":181,"style":181},"num = float(\"3.14\")\n",[183,157090,157091],{"__ignoreMap":181},[186,157092,157093,157095,157097,157099,157101,157103],{"class":188,"line":189},[186,157094,156984],{"class":202},[186,157096,529],{"class":669},[186,157098,111228],{"class":206},[186,157100,832],{"class":202},[186,157102,156909],{"class":532},[186,157104,1629],{"class":202},[14,157106,157108],{"id":157107},"_27-运算符","2.7 运算符",[29,157110,157112],{"id":157111},"_271-算术运算符","2.7.1 算术运算符",[99,157114,157115,157126],{},[102,157116,157117],{},[105,157118,157119,157122,157124],{},[108,157120,157121],{},"运算符",[108,157123,27327],{},[108,157125,28948],{},[116,157127,157128,157142,157156,157170,157184,157198,157212],{},[105,157129,157130,157134,157137],{},[121,157131,157132],{},[183,157133,2091],{},[121,157135,157136],{},"加法",[121,157138,157139],{},[183,157140,157141],{},"1 + 2",[105,157143,157144,157148,157151],{},[121,157145,157146],{},[183,157147,2142],{},[121,157149,157150],{},"减法",[121,157152,157153],{},[183,157154,157155],{},"5 - 3",[105,157157,157158,157162,157165],{},[121,157159,157160],{},[183,157161,2065],{},[121,157163,157164],{},"乘法",[121,157166,157167],{},[183,157168,157169],{},"2 * 3",[105,157171,157172,157176,157179],{},[121,157173,157174],{},[183,157175,2194],{},[121,157177,157178],{},"除法，结果是浮点数",[121,157180,157181],{},[183,157182,157183],{},"5 \u002F 2",[105,157185,157186,157190,157193],{},[121,157187,157188],{},[183,157189,34784],{},[121,157191,157192],{},"整除",[121,157194,157195],{},[183,157196,157197],{},"5 \u002F\u002F 2",[105,157199,157200,157204,157207],{},[121,157201,157202],{},[183,157203,670],{},[121,157205,157206],{},"取余",[121,157208,157209],{},[183,157210,157211],{},"5 % 2",[105,157213,157214,157218,157221],{},[121,157215,157216],{},[183,157217,12124],{},[121,157219,157220],{},"幂运算",[121,157222,157223],{},[183,157224,157225],{},"2 ** 3",[169,157227,16597],{},[176,157229,157231],{"className":31833,"code":157230,"language":31835,"meta":181,"style":181},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[183,157232,157233,157251,157268,157285],{"__ignoreMap":181},[186,157234,157235,157237,157239,157241,157244,157246,157248],{"class":188,"line":189},[186,157236,31870],{"class":206},[186,157238,832],{"class":202},[186,157240,1930],{"class":206},[186,157242,157243],{"class":669}," \u002F",[186,157245,16217],{"class":206},[186,157247,156858],{"class":202},[186,157249,157250],{"class":192},"# 2.5\n",[186,157252,157253,157255,157257,157259,157262,157264,157266],{"class":188,"line":49},[186,157254,31870],{"class":206},[186,157256,832],{"class":202},[186,157258,1930],{"class":206},[186,157260,157261],{"class":669}," \u002F\u002F",[186,157263,16217],{"class":206},[186,157265,47262],{"class":202},[186,157267,156861],{"class":192},[186,157269,157270,157272,157274,157276,157279,157281,157283],{"class":188,"line":219},[186,157271,31870],{"class":206},[186,157273,832],{"class":202},[186,157275,1930],{"class":206},[186,157277,157278],{"class":669}," %",[186,157280,16217],{"class":206},[186,157282,156858],{"class":202},[186,157284,156878],{"class":192},[186,157286,157287,157289,157291,157293,157296,157298,157300],{"class":188,"line":225},[186,157288,31870],{"class":206},[186,157290,832],{"class":202},[186,157292,1697],{"class":206},[186,157294,157295],{"class":669}," **",[186,157297,79503],{"class":206},[186,157299,47262],{"class":202},[186,157301,157302],{"class":192},"# 8\n",[29,157304,157306],{"id":157305},"_272-赋值运算符","2.7.2 赋值运算符",[176,157308,157310],{"className":31833,"code":157309,"language":31835,"meta":181,"style":181},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[183,157311,157312,157320,157328,157336,157344],{"__ignoreMap":181},[186,157313,157314,157316,157318],{"class":188,"line":189},[186,157315,156984],{"class":202},[186,157317,529],{"class":669},[186,157319,59869],{"class":206},[186,157321,157322,157324,157326],{"class":188,"line":49},[186,157323,156984],{"class":202},[186,157325,10940],{"class":669},[186,157327,55872],{"class":206},[186,157329,157330,157332,157334],{"class":188,"line":219},[186,157331,156984],{"class":202},[186,157333,151449],{"class":669},[186,157335,49177],{"class":206},[186,157337,157338,157340,157342],{"class":188,"line":225},[186,157339,156984],{"class":202},[186,157341,138345],{"class":669},[186,157343,121467],{"class":206},[186,157345,157346,157348,157351],{"class":188,"line":242},[186,157347,156984],{"class":202},[186,157349,157350],{"class":669},"\u002F=",[186,157352,49177],{"class":206},[169,157354,157355],{},"等价关系：",[176,157357,157359],{"className":31833,"code":157358,"language":31835,"meta":181,"style":181},"num += 1\nnum = num + 1\n",[183,157360,157361,157369],{"__ignoreMap":181},[186,157362,157363,157365,157367],{"class":188,"line":189},[186,157364,156984],{"class":202},[186,157366,10940],{"class":669},[186,157368,57140],{"class":206},[186,157370,157371,157373,157375,157378,157380],{"class":188,"line":49},[186,157372,156984],{"class":202},[186,157374,529],{"class":669},[186,157376,157377],{"class":202}," num ",[186,157379,2091],{"class":669},[186,157381,57140],{"class":206},[169,157383,157384,157385,102449,157388,913],{},"Python 没有 ",[183,157386,157387],{},"num++",[183,157389,157390],{},"num--",[29,157392,157394],{"id":157393},"_273-比较运算符","2.7.3 比较运算符",[169,157396,157397],{},"比较运算结果是布尔值。",[176,157399,157401],{"className":31833,"code":157400,"language":31835,"meta":181,"style":181},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[183,157402,157403,157417,157432,157446],{"__ignoreMap":181},[186,157404,157405,157407,157409,157411,157413,157415],{"class":188,"line":189},[186,157406,31870],{"class":206},[186,157408,832],{"class":202},[186,157410,2056],{"class":206},[186,157412,27679],{"class":669},[186,157414,3615],{"class":206},[186,157416,1629],{"class":202},[186,157418,157419,157421,157423,157425,157428,157430],{"class":188,"line":49},[186,157420,31870],{"class":206},[186,157422,832],{"class":202},[186,157424,2056],{"class":206},[186,157426,157427],{"class":669}," >=",[186,157429,3505],{"class":206},[186,157431,1629],{"class":202},[186,157433,157434,157436,157438,157440,157442,157444],{"class":188,"line":219},[186,157435,31870],{"class":206},[186,157437,832],{"class":202},[186,157439,2056],{"class":206},[186,157441,102990],{"class":669},[186,157443,3550],{"class":206},[186,157445,1629],{"class":202},[186,157447,157448,157450,157452,157454,157457,157459],{"class":188,"line":225},[186,157449,31870],{"class":206},[186,157451,832],{"class":202},[186,157453,2056],{"class":206},[186,157455,157456],{"class":669}," !=",[186,157458,3550],{"class":206},[186,157460,1629],{"class":202},[169,157462,157463,157464,157466,157467,913],{},"注意：判断相等用 ",[183,157465,4415],{},"，赋值用 ",[183,157468,529],{},[176,157470,157472],{"className":31833,"code":157471,"language":31835,"meta":181,"style":181},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[183,157473,157474,157486],{"__ignoreMap":181},[186,157475,157476,157478,157480,157483],{"class":188,"line":189},[186,157477,147743],{"class":202},[186,157479,529],{"class":669},[186,157481,157482],{"class":206}," 18",[186,157484,157485],{"class":192},"       # 赋值\n",[186,157487,157488,157490,157492,157494],{"class":188,"line":49},[186,157489,147743],{"class":202},[186,157491,4415],{"class":669},[186,157493,157482],{"class":206},[186,157495,157496],{"class":192},"      # 判断是否相等\n",[29,157498,157500],{"id":157499},"_274-逻辑运算符","2.7.4 逻辑运算符",[99,157502,157503,157511],{},[102,157504,157505],{},[105,157506,157507,157509],{},[108,157508,157121],{},[108,157510,27327],{},[116,157512,157513,157522,157531],{},[105,157514,157515,157519],{},[121,157516,157517],{},[183,157518,31917],{},[121,157520,157521],{},"并且",[105,157523,157524,157528],{},[121,157525,157526],{},[183,157527,116521],{},[121,157529,157530],{},"或者",[105,157532,157533,157538],{},[121,157534,157535],{},[183,157536,157537],{},"not",[121,157539,157540],{},"取反",[176,157542,157544],{"className":31833,"code":157543,"language":31835,"meta":181,"style":181},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[183,157545,157546,157554,157563,157567,157582,157596],{"__ignoreMap":181},[186,157547,157548,157550,157552],{"class":188,"line":189},[186,157549,147743],{"class":202},[186,157551,529],{"class":669},[186,157553,89496],{"class":206},[186,157555,157556,157559,157561],{"class":188,"line":49},[186,157557,157558],{"class":202},"has_ticket ",[186,157560,529],{"class":669},[186,157562,154796],{"class":206},[186,157564,157565],{"class":188,"line":219},[186,157566,3867],{"emptyLinePlaceholder":1551},[186,157568,157569,157571,157573,157575,157577,157579],{"class":188,"line":225},[186,157570,31870],{"class":206},[186,157572,156965],{"class":202},[186,157574,3178],{"class":669},[186,157576,157482],{"class":206},[186,157578,121860],{"class":669},[186,157580,157581],{"class":202}," has_ticket)\n",[186,157583,157584,157586,157588,157590,157592,157594],{"class":188,"line":242},[186,157585,31870],{"class":206},[186,157587,156965],{"class":202},[186,157589,520],{"class":669},[186,157591,157482],{"class":206},[186,157593,115632],{"class":669},[186,157595,157581],{"class":202},[186,157597,157598,157600,157602,157604],{"class":188,"line":248},[186,157599,31870],{"class":206},[186,157601,832],{"class":202},[186,157603,157537],{"class":669},[186,157605,157581],{"class":202},[14,157607,157609],{"id":157608},"_28-字符串定义","2.8 字符串定义",[169,157611,157612],{},"三种常见写法：",[176,157614,157616],{"className":31833,"code":157615,"language":31835,"meta":181,"style":181},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[183,157617,157618,157628,157637,157647],{"__ignoreMap":181},[186,157619,157620,157623,157625],{"class":188,"line":189},[186,157621,157622],{"class":202},"name1 ",[186,157624,529],{"class":669},[186,157626,157627],{"class":532}," '小明'\n",[186,157629,157630,157633,157635],{"class":188,"line":49},[186,157631,157632],{"class":202},"name2 ",[186,157634,529],{"class":669},[186,157636,150550],{"class":532},[186,157638,157639,157642,157644],{"class":188,"line":219},[186,157640,157641],{"class":202},"text ",[186,157643,529],{"class":669},[186,157645,157646],{"class":532}," \"\"\"这是多行字符串\n",[186,157648,157649],{"class":188,"line":225},[186,157650,157651],{"class":532},"可以换行\"\"\"\n",[169,157653,157654],{},"字符串中包含引号：",[176,157656,157658],{"className":31833,"code":157657,"language":31835,"meta":181,"style":181},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[183,157659,157660,157670,157680],{"__ignoreMap":181},[186,157661,157662,157665,157667],{"class":188,"line":189},[186,157663,157664],{"class":202},"msg ",[186,157666,529],{"class":669},[186,157668,157669],{"class":532}," \"他说:'你好'\"\n",[186,157671,157672,157675,157677],{"class":188,"line":49},[186,157673,157674],{"class":202},"msg2 ",[186,157676,529],{"class":669},[186,157678,157679],{"class":532}," '他说:\"你好\"'\n",[186,157681,157682,157685,157687,157690,157693,157696,157698],{"class":188,"line":219},[186,157683,157684],{"class":202},"msg3 ",[186,157686,529],{"class":669},[186,157688,157689],{"class":532}," \"他说:",[186,157691,157692],{"class":206},"\\\"",[186,157694,157695],{"class":532},"你好",[186,157697,157692],{"class":206},[186,157699,26592],{"class":532},[169,157701,157702],{},"常见转义字符：",[99,157704,157705,157714],{},[102,157706,157707],{},[105,157708,157709,157712],{},[108,157710,157711],{},"写法",[108,157713,102131],{},[116,157715,157716,157726,157735,157745,157754],{},[105,157717,157718,157723],{},[121,157719,157720],{},[183,157721,157722],{},"\\n",[121,157724,157725],{},"换行",[105,157727,157728,157732],{},[121,157729,157730],{},[183,157731,2707],{},[121,157733,157734],{},"制表符",[105,157736,157737,157742],{},[121,157738,157739],{},[183,157740,157741],{},"\\\\",[121,157743,157744],{},"反斜杠",[105,157746,157747,157751],{},[121,157748,157749],{},[183,157750,157692],{},[121,157752,157753],{},"双引号",[105,157755,157756,157761],{},[121,157757,157758],{},[183,157759,157760],{},"\\'",[121,157762,157763],{},"单引号",[14,157765,157767],{"id":157766},"_29-字符串拼接","2.9 字符串拼接",[176,157769,157771],{"className":31833,"code":157770,"language":31835,"meta":181,"style":181},"name = \"小明\"\nprint(\"你好，\" + name)\n",[183,157772,157773,157781],{"__ignoreMap":181},[186,157774,157775,157777,157779],{"class":188,"line":189},[186,157776,147733],{"class":202},[186,157778,529],{"class":669},[186,157780,150550],{"class":532},[186,157782,157783,157785,157787,157790,157792],{"class":188,"line":49},[186,157784,31870],{"class":206},[186,157786,832],{"class":202},[186,157788,157789],{"class":532},"\"你好，\"",[186,157791,47020],{"class":669},[186,157793,157794],{"class":202}," name)\n",[169,157796,157797],{},"字符串只能和字符串拼接：",[176,157799,157801],{"className":31833,"code":157800,"language":31835,"meta":181,"style":181},"age = 18\nprint(\"年龄:\" + str(age))\n",[183,157802,157803,157811],{"__ignoreMap":181},[186,157804,157805,157807,157809],{"class":188,"line":189},[186,157806,147743],{"class":202},[186,157808,529],{"class":669},[186,157810,147748],{"class":206},[186,157812,157813,157815,157817,157819,157821,157823],{"class":188,"line":49},[186,157814,31870],{"class":206},[186,157816,832],{"class":202},[186,157818,147714],{"class":532},[186,157820,47020],{"class":669},[186,157822,75352],{"class":206},[186,157824,157825],{"class":202},"(age))\n",[169,157827,157828],{},"更推荐使用格式化字符串。",[14,157830,157832],{"id":157831},"_210-字符串格式化","2.10 字符串格式化",[29,157834,157836],{"id":157835},"_2101-百分号格式化","2.10.1 百分号格式化",[176,157838,157840],{"className":31833,"code":157839,"language":31835,"meta":181,"style":181},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[183,157841,157842,157850,157858,157867,157871],{"__ignoreMap":181},[186,157843,157844,157846,157848],{"class":188,"line":189},[186,157845,147733],{"class":202},[186,157847,529],{"class":669},[186,157849,150550],{"class":532},[186,157851,157852,157854,157856],{"class":188,"line":49},[186,157853,147743],{"class":202},[186,157855,529],{"class":669},[186,157857,147748],{"class":206},[186,157859,157860,157862,157864],{"class":188,"line":219},[186,157861,156555],{"class":202},[186,157863,529],{"class":669},[186,157865,157866],{"class":206}," 95.5\n",[186,157868,157869],{"class":188,"line":225},[186,157870,3867],{"emptyLinePlaceholder":1551},[186,157872,157873,157875,157877,157880,157883,157886,157889,157892,157895,157897,157899],{"class":188,"line":242},[186,157874,31870],{"class":206},[186,157876,832],{"class":202},[186,157878,157879],{"class":532},"\"姓名:",[186,157881,157882],{"class":206},"%s",[186,157884,157885],{"class":532}," 年龄:",[186,157887,157888],{"class":206},"%d",[186,157890,157891],{"class":532}," 分数:",[186,157893,157894],{"class":206},"%.1f",[186,157896,1862],{"class":532},[186,157898,157278],{"class":669},[186,157900,157901],{"class":202}," (name, age, score))\n",[169,157903,157904],{},"常用占位符：",[99,157906,157907,157916],{},[102,157908,157909],{},[105,157910,157911,157914],{},[108,157912,157913],{},"占位符",[108,157915,27327],{},[116,157917,157918,157926,157934],{},[105,157919,157920,157924],{},[121,157921,157922],{},[183,157923,157882],{},[121,157925,156421],{},[105,157927,157928,157932],{},[121,157929,157930],{},[183,157931,157888],{},[121,157933,156399],{},[105,157935,157936,157941],{},[121,157937,157938],{},[183,157939,157940],{},"%f",[121,157942,156410],{},[169,157944,157945],{},"精度控制：",[176,157947,157949],{"className":31833,"code":157948,"language":31835,"meta":181,"style":181},"price = 12.3456\nprint(\"%.2f\" % price)\n",[183,157950,157951,157960],{"__ignoreMap":181},[186,157952,157953,157955,157957],{"class":188,"line":189},[186,157954,147878],{"class":202},[186,157956,529],{"class":669},[186,157958,157959],{"class":206}," 12.3456\n",[186,157961,157962,157964,157966,157968,157971,157973,157975],{"class":188,"line":49},[186,157963,31870],{"class":206},[186,157965,832],{"class":202},[186,157967,1862],{"class":532},[186,157969,157970],{"class":206},"%.2f",[186,157972,1862],{"class":532},[186,157974,157278],{"class":669},[186,157976,157977],{"class":202}," price)\n",[29,157979,157981],{"id":157980},"_2102-format方法","2.10.2 format方法",[176,157983,157985],{"className":31833,"code":157984,"language":31835,"meta":181,"style":181},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[183,157986,157987,157995,158003,158007,158026,158046],{"__ignoreMap":181},[186,157988,157989,157991,157993],{"class":188,"line":189},[186,157990,147733],{"class":202},[186,157992,529],{"class":669},[186,157994,150550],{"class":532},[186,157996,157997,157999,158001],{"class":188,"line":49},[186,157998,147743],{"class":202},[186,158000,529],{"class":669},[186,158002,147748],{"class":206},[186,158004,158005],{"class":188,"line":219},[186,158006,3867],{"emptyLinePlaceholder":1551},[186,158008,158009,158011,158013,158015,158017,158019,158021,158023],{"class":188,"line":225},[186,158010,31870],{"class":206},[186,158012,832],{"class":202},[186,158014,157879],{"class":532},[186,158016,33914],{"class":206},[186,158018,157885],{"class":532},[186,158020,33914],{"class":206},[186,158022,1862],{"class":532},[186,158024,158025],{"class":202},".format(name, age))\n",[186,158027,158028,158030,158032,158034,158037,158039,158042,158044],{"class":188,"line":242},[186,158029,31870],{"class":206},[186,158031,832],{"class":202},[186,158033,157879],{"class":532},[186,158035,158036],{"class":206},"{0}",[186,158038,157885],{"class":532},[186,158040,158041],{"class":206},"{1}",[186,158043,1862],{"class":532},[186,158045,158025],{"class":202},[186,158047,158048,158050,158052,158054,158057,158059,158062,158064,158067,158069,158071,158074,158076,158078],{"class":188,"line":248},[186,158049,31870],{"class":206},[186,158051,832],{"class":202},[186,158053,157879],{"class":532},[186,158055,158056],{"class":206},"{name}",[186,158058,157885],{"class":532},[186,158060,158061],{"class":206},"{age}",[186,158063,1862],{"class":532},[186,158065,158066],{"class":202},".format(",[186,158068,81242],{"class":835},[186,158070,529],{"class":669},[186,158072,158073],{"class":202},"name, ",[186,158075,71658],{"class":835},[186,158077,529],{"class":669},[186,158079,158080],{"class":202},"age))\n",[29,158082,158084],{"id":158083},"_2103-f-string","2.10.3 f-string",[169,158086,158087],{},"推荐写法：",[176,158089,158091],{"className":31833,"code":158090,"language":31835,"meta":181,"style":181},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[183,158092,158093,158101,158109,158117,158121],{"__ignoreMap":181},[186,158094,158095,158097,158099],{"class":188,"line":189},[186,158096,147733],{"class":202},[186,158098,529],{"class":669},[186,158100,150550],{"class":532},[186,158102,158103,158105,158107],{"class":188,"line":49},[186,158104,147743],{"class":202},[186,158106,529],{"class":669},[186,158108,147748],{"class":206},[186,158110,158111,158113,158115],{"class":188,"line":219},[186,158112,156555],{"class":202},[186,158114,529],{"class":669},[186,158116,157866],{"class":206},[186,158118,158119],{"class":188,"line":225},[186,158120,3867],{"emptyLinePlaceholder":1551},[186,158122,158123,158125,158127,158129,158131,158133,158135,158137,158139,158141,158143,158145,158147,158149,158152,158155,158157,158159],{"class":188,"line":242},[186,158124,31870],{"class":206},[186,158126,832],{"class":202},[186,158128,1673],{"class":669},[186,158130,157879],{"class":532},[186,158132,2504],{"class":206},[186,158134,81242],{"class":202},[186,158136,2553],{"class":206},[186,158138,157885],{"class":532},[186,158140,2504],{"class":206},[186,158142,71658],{"class":202},[186,158144,2553],{"class":206},[186,158146,157891],{"class":532},[186,158148,2504],{"class":206},[186,158150,158151],{"class":202},"score",[186,158153,158154],{"class":669},":.1f",[186,158156,2553],{"class":206},[186,158158,1862],{"class":532},[186,158160,1629],{"class":202},[169,158162,158163],{},"表达式也可以放进去：",[176,158165,158167],{"className":31833,"code":158166,"language":31835,"meta":181,"style":181},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[183,158168,158169,158177,158185],{"__ignoreMap":181},[186,158170,158171,158173,158175],{"class":188,"line":189},[186,158172,147878],{"class":202},[186,158174,529],{"class":669},[186,158176,147883],{"class":206},[186,158178,158179,158181,158183],{"class":188,"line":49},[186,158180,147888],{"class":202},[186,158182,529],{"class":669},[186,158184,55872],{"class":206},[186,158186,158187,158189,158191,158193,158196,158198,158200,158202,158205,158207,158210],{"class":188,"line":219},[186,158188,31870],{"class":206},[186,158190,832],{"class":202},[186,158192,1673],{"class":669},[186,158194,158195],{"class":532},"\"总价:",[186,158197,2504],{"class":206},[186,158199,147878],{"class":202},[186,158201,2065],{"class":669},[186,158203,158204],{"class":202}," count",[186,158206,2553],{"class":206},[186,158208,158209],{"class":532},"元\"",[186,158211,1629],{"class":202},[14,158213,158215],{"id":158214},"_211-input输入","2.11 input输入",[169,158217,158218,158221],{},[183,158219,158220],{},"input()"," 会暂停程序，等待用户输入。",[176,158223,158225],{"className":31833,"code":158224,"language":31835,"meta":181,"style":181},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[183,158226,158227,158241],{"__ignoreMap":181},[186,158228,158229,158231,158233,158235,158237,158239],{"class":188,"line":189},[186,158230,147733],{"class":202},[186,158232,529],{"class":669},[186,158234,62046],{"class":206},[186,158236,832],{"class":202},[186,158238,153576],{"class":532},[186,158240,1629],{"class":202},[186,158242,158243,158245,158247,158249,158252,158254,158256,158258,158260],{"class":188,"line":49},[186,158244,31870],{"class":206},[186,158246,832],{"class":202},[186,158248,1673],{"class":669},[186,158250,158251],{"class":532},"\"你好，",[186,158253,2504],{"class":206},[186,158255,81242],{"class":202},[186,158257,2553],{"class":206},[186,158259,1862],{"class":532},[186,158261,1629],{"class":202},[169,158263,158264],{},"输入整数：",[176,158266,158268],{"className":31833,"code":158267,"language":31835,"meta":181,"style":181},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[183,158269,158270,158288],{"__ignoreMap":181},[186,158271,158272,158274,158276,158278,158280,158282,158284,158286],{"class":188,"line":189},[186,158273,147743],{"class":202},[186,158275,529],{"class":669},[186,158277,3849],{"class":206},[186,158279,832],{"class":202},[186,158281,55266],{"class":206},[186,158283,832],{"class":202},[186,158285,153591],{"class":532},[186,158287,31952],{"class":202},[186,158289,158290,158292,158294,158296,158299,158301,158303,158305,158308,158310],{"class":188,"line":49},[186,158291,31870],{"class":206},[186,158293,832],{"class":202},[186,158295,1673],{"class":669},[186,158297,158298],{"class":532},"\"明年你",[186,158300,2504],{"class":206},[186,158302,147743],{"class":202},[186,158304,2091],{"class":669},[186,158306,158307],{"class":206}," 1}",[186,158309,150601],{"class":532},[186,158311,1629],{"class":202},[169,158313,158314],{},"输入小数：",[176,158316,158318],{"className":31833,"code":158317,"language":31835,"meta":181,"style":181},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[183,158319,158320,158339],{"__ignoreMap":181},[186,158321,158322,158324,158326,158328,158330,158332,158334,158337],{"class":188,"line":189},[186,158323,156528],{"class":202},[186,158325,529],{"class":669},[186,158327,111228],{"class":206},[186,158329,832],{"class":202},[186,158331,55266],{"class":206},[186,158333,832],{"class":202},[186,158335,158336],{"class":532},"\"请输入身高:\"",[186,158338,31952],{"class":202},[186,158340,158341,158343,158345,158347,158350,158352,158354,158357,158359,158362],{"class":188,"line":49},[186,158342,31870],{"class":206},[186,158344,832],{"class":202},[186,158346,1673],{"class":669},[186,158348,158349],{"class":532},"\"身高:",[186,158351,2504],{"class":206},[186,158353,26440],{"class":202},[186,158355,158356],{"class":669},":.2f",[186,158358,2553],{"class":206},[186,158360,158361],{"class":532},"米\"",[186,158363,1629],{"class":202},[14,158365,158367],{"id":158366},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[169,158369,124723],{},[34,158371,158372,158375,158378,158381],{},[22,158373,158374],{},"输入商品单价。",[22,158376,158377],{},"输入购买数量。",[22,158379,158380],{},"输入折扣，例如 0.8 表示八折。",[22,158382,158383],{},"输出最终金额，保留两位小数。",[169,158385,11498],{},[176,158387,158389],{"className":31833,"code":158388,"language":31835,"meta":181,"style":181},"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",[183,158390,158391,158410,158429,158449,158453,158473,158477,158500,158521,158543],{"__ignoreMap":181},[186,158392,158393,158395,158397,158399,158401,158403,158405,158408],{"class":188,"line":189},[186,158394,147878],{"class":202},[186,158396,529],{"class":669},[186,158398,111228],{"class":206},[186,158400,832],{"class":202},[186,158402,55266],{"class":206},[186,158404,832],{"class":202},[186,158406,158407],{"class":532},"\"请输入商品单价:\"",[186,158409,31952],{"class":202},[186,158411,158412,158414,158416,158418,158420,158422,158424,158427],{"class":188,"line":49},[186,158413,147888],{"class":202},[186,158415,529],{"class":669},[186,158417,3849],{"class":206},[186,158419,832],{"class":202},[186,158421,55266],{"class":206},[186,158423,832],{"class":202},[186,158425,158426],{"class":532},"\"请输入购买数量:\"",[186,158428,31952],{"class":202},[186,158430,158431,158434,158436,158438,158440,158442,158444,158447],{"class":188,"line":219},[186,158432,158433],{"class":202},"discount ",[186,158435,529],{"class":669},[186,158437,111228],{"class":206},[186,158439,832],{"class":202},[186,158441,55266],{"class":206},[186,158443,832],{"class":202},[186,158445,158446],{"class":532},"\"请输入折扣:\"",[186,158448,31952],{"class":202},[186,158450,158451],{"class":188,"line":225},[186,158452,3867],{"emptyLinePlaceholder":1551},[186,158454,158455,158458,158460,158463,158465,158468,158470],{"class":188,"line":242},[186,158456,158457],{"class":202},"total ",[186,158459,529],{"class":669},[186,158461,158462],{"class":202}," price ",[186,158464,2065],{"class":669},[186,158466,158467],{"class":202}," count ",[186,158469,2065],{"class":669},[186,158471,158472],{"class":202}," discount\n",[186,158474,158475],{"class":188,"line":248},[186,158476,3867],{"emptyLinePlaceholder":1551},[186,158478,158479,158481,158483,158485,158488,158490,158492,158494,158496,158498],{"class":188,"line":265},[186,158480,31870],{"class":206},[186,158482,832],{"class":202},[186,158484,1673],{"class":669},[186,158486,158487],{"class":532},"\"商品单价:",[186,158489,2504],{"class":206},[186,158491,81247],{"class":202},[186,158493,158356],{"class":669},[186,158495,2553],{"class":206},[186,158497,1862],{"class":532},[186,158499,1629],{"class":202},[186,158501,158502,158504,158506,158508,158511,158513,158515,158517,158519],{"class":188,"line":271},[186,158503,31870],{"class":206},[186,158505,832],{"class":202},[186,158507,1673],{"class":669},[186,158509,158510],{"class":532},"\"购买数量:",[186,158512,2504],{"class":206},[186,158514,85866],{"class":202},[186,158516,2553],{"class":206},[186,158518,1862],{"class":532},[186,158520,1629],{"class":202},[186,158522,158523,158525,158527,158529,158532,158534,158537,158539,158541],{"class":188,"line":288},[186,158524,31870],{"class":206},[186,158526,832],{"class":202},[186,158528,1673],{"class":669},[186,158530,158531],{"class":532},"\"折扣:",[186,158533,2504],{"class":206},[186,158535,158536],{"class":202},"discount",[186,158538,2553],{"class":206},[186,158540,1862],{"class":532},[186,158542,1629],{"class":202},[186,158544,158545,158547,158549,158551,158554,158556,158559,158561,158563,158565],{"class":188,"line":294},[186,158546,31870],{"class":206},[186,158548,832],{"class":202},[186,158550,1673],{"class":669},[186,158552,158553],{"class":532},"\"应付金额:",[186,158555,2504],{"class":206},[186,158557,158558],{"class":202},"total",[186,158560,158356],{"class":669},[186,158562,2553],{"class":206},[186,158564,158209],{"class":532},[186,158566,1629],{"class":202},[14,158568,158570],{"id":158569},"_213-易错点","2.13 易错点",[34,158572,158573,158578,158584,158592,158595],{},[22,158574,158575,158577],{},[183,158576,158220],{}," 的结果是字符串，做运算前要转换。",[22,158579,158580,158581,913],{},"字符串拼接时，数字要先 ",[183,158582,158583],{},"str()",[22,158585,158586,158588,158589,158591],{},[183,158587,529],{}," 是赋值，",[183,158590,4415],{}," 是比较。",[22,158593,158594],{},"Python 没有自增自减运算符。",[22,158596,158597],{},"浮点数计算可能有精度误差：",[176,158599,158601],{"className":31833,"code":158600,"language":31835,"meta":181,"style":181},"print(0.1 + 0.2)\n",[183,158602,158603],{"__ignoreMap":181},[186,158604,158605,158607,158609,158611,158613,158616],{"class":188,"line":189},[186,158606,31870],{"class":206},[186,158608,832],{"class":202},[186,158610,87642],{"class":206},[186,158612,47020],{"class":669},[186,158614,158615],{"class":206}," 0.2",[186,158617,1629],{"class":202},[169,158619,158620,158621,158624],{},"金额计算如果要求严格，可以后续学习 ",[183,158622,158623],{},"decimal"," 模块。",[14,158626,158628],{"id":158627},"_214-本章练习","2.14 本章练习",[34,158630,158631,158634,158637,158640,158643],{},[22,158632,158633],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[22,158635,158636],{},"输入圆的半径，计算面积，保留两位小数。",[22,158638,158639],{},"输入工资和奖金，计算总收入。",[22,158641,158642],{},"输入摄氏温度，转换为华氏温度。",[22,158644,158645],{},"写一个 BMI 计算程序：",[176,158647,158650],{"className":158648,"code":158649,"language":753,"meta":181},[751],"BMI = 体重kg \u002F 身高m ** 2\n",[183,158651,158649],{"__ignoreMap":181},[1524,158653,158654],{},"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":181,"searchDepth":49,"depth":49,"links":158656},[158657,158658,158659,158660,158661,158662,158663,158669,158670,158671,158676,158677,158678,158679],{"id":156218,"depth":49,"text":156219},{"id":156327,"depth":49,"text":156328},{"id":156498,"depth":49,"text":156499},{"id":156575,"depth":49,"text":156576},{"id":52185,"depth":49,"text":52186},{"id":156881,"depth":49,"text":156882},{"id":157107,"depth":49,"text":157108,"children":158664},[158665,158666,158667,158668],{"id":157111,"depth":219,"text":157112},{"id":157305,"depth":219,"text":157306},{"id":157393,"depth":219,"text":157394},{"id":157499,"depth":219,"text":157500},{"id":157608,"depth":49,"text":157609},{"id":157766,"depth":49,"text":157767},{"id":157831,"depth":49,"text":157832,"children":158672},[158673,158674,158675],{"id":157835,"depth":219,"text":157836},{"id":157980,"depth":219,"text":157981},{"id":158083,"depth":219,"text":158084},{"id":158214,"depth":49,"text":158215},{"id":158366,"depth":49,"text":158367},{"id":158569,"depth":49,"text":158570},{"id":158627,"depth":49,"text":158628},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156210,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158686,"title":158687,"body":158688,"description":1548,"extension":1549,"meta":160324,"navigation":1551,"path":160325,"seo":160326,"stem":160327,"__hash__":160328},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158689,"toc":160305},[158690,158693,158697,158700,158715,158718,158746,158750,158800,158802,158818,158821,158847,158850,158854,158921,158924,158940,158944,158947,159065,159068,159075,159124,159130,159134,159137,159250,159253,159257,159261,159264,159314,159318,159321,159371,159375,159378,159416,159420,159423,159469,159472,159507,159511,159516,159519,159565,159567,159634,159638,159644,159755,159764,159768,159770,159781,159783,159949,159953,159955,159969,159971,160185,160189,160208,160225,160228,160274,160278,160302],[10,158691,158687],{"id":158692},"_3-判断语句",[14,158694,158696],{"id":158695},"_31-布尔值","3.1 布尔值",[169,158698,158699],{},"判断语句依赖布尔值：",[176,158701,158703],{"className":31833,"code":158702,"language":31835,"meta":181,"style":181},"True\nFalse\n",[183,158704,158705,158710],{"__ignoreMap":181},[186,158706,158707],{"class":188,"line":189},[186,158708,158709],{"class":206},"True\n",[186,158711,158712],{"class":188,"line":49},[186,158713,158714],{"class":206},"False\n",[169,158716,158717],{},"比较表达式会产生布尔值：",[176,158719,158721],{"className":31833,"code":158720,"language":31835,"meta":181,"style":181},"age = 18\nprint(age >= 18)  # True\n",[183,158722,158723,158731],{"__ignoreMap":181},[186,158724,158725,158727,158729],{"class":188,"line":189},[186,158726,147743],{"class":202},[186,158728,529],{"class":669},[186,158730,147748],{"class":206},[186,158732,158733,158735,158737,158739,158741,158743],{"class":188,"line":49},[186,158734,31870],{"class":206},[186,158736,156965],{"class":202},[186,158738,3178],{"class":669},[186,158740,157482],{"class":206},[186,158742,47262],{"class":202},[186,158744,158745],{"class":192},"# True\n",[14,158747,158749],{"id":158748},"_32-if基础语法","3.2 if基础语法",[176,158751,158753],{"className":31833,"code":158752,"language":31835,"meta":181,"style":181},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[183,158754,158755,158773,158777,158789],{"__ignoreMap":181},[186,158756,158757,158759,158761,158763,158765,158767,158769,158771],{"class":188,"line":189},[186,158758,147743],{"class":202},[186,158760,529],{"class":669},[186,158762,3849],{"class":206},[186,158764,832],{"class":202},[186,158766,55266],{"class":206},[186,158768,832],{"class":202},[186,158770,153591],{"class":532},[186,158772,31952],{"class":202},[186,158774,158775],{"class":188,"line":49},[186,158776,3867],{"emptyLinePlaceholder":1551},[186,158778,158779,158781,158783,158785,158787],{"class":188,"line":219},[186,158780,3003],{"class":669},[186,158782,17168],{"class":202},[186,158784,3178],{"class":669},[186,158786,157482],{"class":206},[186,158788,5205],{"class":202},[186,158790,158791,158793,158795,158798],{"class":188,"line":225},[186,158792,32754],{"class":206},[186,158794,832],{"class":202},[186,158796,158797],{"class":532},"\"可以进入网吧\"",[186,158799,1629],{"class":202},[169,158801,10488],{},[34,158803,158804,158809,158812,158815],{},[22,158805,158806,158808],{},[183,158807,3003],{}," 后面是条件表达式。",[22,158810,158811],{},"条件后面必须写冒号。",[22,158813,158814],{},"条件成立时执行缩进代码块。",[22,158816,158817],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[169,158819,158820],{},"错误示例：",[176,158822,158824],{"className":31833,"code":158823,"language":31835,"meta":181,"style":181},"if age >= 18\n    print(\"可以进入\")\n",[183,158825,158826,158836],{"__ignoreMap":181},[186,158827,158828,158830,158832,158834],{"class":188,"line":189},[186,158829,3003],{"class":669},[186,158831,17168],{"class":202},[186,158833,3178],{"class":669},[186,158835,147748],{"class":206},[186,158837,158838,158840,158842,158845],{"class":188,"line":49},[186,158839,32754],{"class":206},[186,158841,832],{"class":202},[186,158843,158844],{"class":532},"\"可以进入\"",[186,158846,1629],{"class":202},[169,158848,158849],{},"缺少冒号。",[14,158851,158853],{"id":158852},"_33-if-else","3.3 if else",[176,158855,158857],{"className":31833,"code":158856,"language":31835,"meta":181,"style":181},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[183,158858,158859,158877,158881,158893,158904,158910],{"__ignoreMap":181},[186,158860,158861,158863,158865,158867,158869,158871,158873,158875],{"class":188,"line":189},[186,158862,147743],{"class":202},[186,158864,529],{"class":669},[186,158866,3849],{"class":206},[186,158868,832],{"class":202},[186,158870,55266],{"class":206},[186,158872,832],{"class":202},[186,158874,153591],{"class":532},[186,158876,31952],{"class":202},[186,158878,158879],{"class":188,"line":49},[186,158880,3867],{"emptyLinePlaceholder":1551},[186,158882,158883,158885,158887,158889,158891],{"class":188,"line":219},[186,158884,3003],{"class":669},[186,158886,17168],{"class":202},[186,158888,3178],{"class":669},[186,158890,157482],{"class":206},[186,158892,5205],{"class":202},[186,158894,158895,158897,158899,158902],{"class":188,"line":225},[186,158896,32754],{"class":206},[186,158898,832],{"class":202},[186,158900,158901],{"class":532},"\"成年人\"",[186,158903,1629],{"class":202},[186,158905,158906,158908],{"class":188,"line":242},[186,158907,3169],{"class":669},[186,158909,5205],{"class":202},[186,158911,158912,158914,158916,158919],{"class":188,"line":248},[186,158913,32754],{"class":206},[186,158915,832],{"class":202},[186,158917,158918],{"class":532},"\"未成年人\"",[186,158920,1629],{"class":202},[169,158922,158923],{},"执行逻辑：",[34,158925,158926,158932,158937],{},[22,158927,158928,158929,158931],{},"条件成立，执行 ",[183,158930,3003],{}," 代码块。",[22,158933,158934,158935,158931],{},"条件不成立，执行 ",[183,158936,3169],{},[22,158938,158939],{},"两个代码块只会执行其中一个。",[14,158941,158943],{"id":158942},"_34-if-elif-else","3.4 if elif else",[169,158945,158946],{},"多条件判断：",[176,158948,158950],{"className":31833,"code":158949,"language":31835,"meta":181,"style":181},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[183,158951,158952,158970,158974,158988,158999,159013,159024,159037,159048,159054],{"__ignoreMap":181},[186,158953,158954,158956,158958,158960,158962,158964,158966,158968],{"class":188,"line":189},[186,158955,156555],{"class":202},[186,158957,529],{"class":669},[186,158959,3849],{"class":206},[186,158961,832],{"class":202},[186,158963,55266],{"class":206},[186,158965,832],{"class":202},[186,158967,153606],{"class":532},[186,158969,31952],{"class":202},[186,158971,158972],{"class":188,"line":49},[186,158973,3867],{"emptyLinePlaceholder":1551},[186,158975,158976,158978,158981,158983,158986],{"class":188,"line":219},[186,158977,3003],{"class":669},[186,158979,158980],{"class":202}," score ",[186,158982,3178],{"class":669},[186,158984,158985],{"class":206}," 90",[186,158987,5205],{"class":202},[186,158989,158990,158992,158994,158997],{"class":188,"line":225},[186,158991,32754],{"class":206},[186,158993,832],{"class":202},[186,158995,158996],{"class":532},"\"优秀\"",[186,158998,1629],{"class":202},[186,159000,159001,159004,159006,159008,159011],{"class":188,"line":242},[186,159002,159003],{"class":669},"elif",[186,159005,158980],{"class":202},[186,159007,3178],{"class":669},[186,159009,159010],{"class":206}," 80",[186,159012,5205],{"class":202},[186,159014,159015,159017,159019,159022],{"class":188,"line":248},[186,159016,32754],{"class":206},[186,159018,832],{"class":202},[186,159020,159021],{"class":532},"\"良好\"",[186,159023,1629],{"class":202},[186,159025,159026,159028,159030,159032,159035],{"class":188,"line":265},[186,159027,159003],{"class":669},[186,159029,158980],{"class":202},[186,159031,3178],{"class":669},[186,159033,159034],{"class":206}," 60",[186,159036,5205],{"class":202},[186,159038,159039,159041,159043,159046],{"class":188,"line":271},[186,159040,32754],{"class":206},[186,159042,832],{"class":202},[186,159044,159045],{"class":532},"\"及格\"",[186,159047,1629],{"class":202},[186,159049,159050,159052],{"class":188,"line":288},[186,159051,3169],{"class":669},[186,159053,5205],{"class":202},[186,159055,159056,159058,159060,159063],{"class":188,"line":294},[186,159057,32754],{"class":206},[186,159059,832],{"class":202},[186,159061,159062],{"class":532},"\"不及格\"",[186,159064,1629],{"class":202},[169,159066,159067],{},"注意判断顺序很重要。",[169,159069,159070,159071,159074],{},"如果把 ",[183,159072,159073],{},"score >= 60"," 放在最前面：",[176,159076,159078],{"className":31833,"code":159077,"language":31835,"meta":181,"style":181},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[183,159079,159080,159092,159102,159114],{"__ignoreMap":181},[186,159081,159082,159084,159086,159088,159090],{"class":188,"line":189},[186,159083,3003],{"class":669},[186,159085,158980],{"class":202},[186,159087,3178],{"class":669},[186,159089,159034],{"class":206},[186,159091,5205],{"class":202},[186,159093,159094,159096,159098,159100],{"class":188,"line":49},[186,159095,32754],{"class":206},[186,159097,832],{"class":202},[186,159099,159045],{"class":532},[186,159101,1629],{"class":202},[186,159103,159104,159106,159108,159110,159112],{"class":188,"line":219},[186,159105,159003],{"class":669},[186,159107,158980],{"class":202},[186,159109,3178],{"class":669},[186,159111,158985],{"class":206},[186,159113,5205],{"class":202},[186,159115,159116,159118,159120,159122],{"class":188,"line":225},[186,159117,32754],{"class":206},[186,159119,832],{"class":202},[186,159121,158996],{"class":532},[186,159123,1629],{"class":202},[169,159125,159126,159127,159129],{},"成绩 95 会先满足 ",[183,159128,159073],{},"，后面的优秀分支就不会执行。",[14,159131,159133],{"id":159132},"_35-判断语句嵌套","3.5 判断语句嵌套",[169,159135,159136],{},"嵌套判断就是在一个判断内部再写判断。",[176,159138,159140],{"className":31833,"code":159139,"language":31835,"meta":181,"style":181},"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",[183,159141,159142,159160,159175,159179,159191,159205,159215,159222,159233,159239],{"__ignoreMap":181},[186,159143,159144,159146,159148,159150,159152,159154,159156,159158],{"class":188,"line":189},[186,159145,147743],{"class":202},[186,159147,529],{"class":669},[186,159149,3849],{"class":206},[186,159151,832],{"class":202},[186,159153,55266],{"class":206},[186,159155,832],{"class":202},[186,159157,153591],{"class":532},[186,159159,31952],{"class":202},[186,159161,159162,159164,159166,159168,159170,159173],{"class":188,"line":49},[186,159163,157558],{"class":202},[186,159165,529],{"class":669},[186,159167,62046],{"class":206},[186,159169,832],{"class":202},[186,159171,159172],{"class":532},"\"是否有票(y\u002Fn):\"",[186,159174,1629],{"class":202},[186,159176,159177],{"class":188,"line":219},[186,159178,3867],{"emptyLinePlaceholder":1551},[186,159180,159181,159183,159185,159187,159189],{"class":188,"line":225},[186,159182,3003],{"class":669},[186,159184,17168],{"class":202},[186,159186,3178],{"class":669},[186,159188,157482],{"class":206},[186,159190,5205],{"class":202},[186,159192,159193,159195,159198,159200,159203],{"class":188,"line":242},[186,159194,4567],{"class":669},[186,159196,159197],{"class":202}," has_ticket ",[186,159199,4415],{"class":669},[186,159201,159202],{"class":532}," \"y\"",[186,159204,5205],{"class":202},[186,159206,159207,159209,159211,159213],{"class":188,"line":248},[186,159208,33906],{"class":206},[186,159210,832],{"class":202},[186,159212,158844],{"class":532},[186,159214,1629],{"class":202},[186,159216,159217,159220],{"class":188,"line":265},[186,159218,159219],{"class":669},"    else",[186,159221,5205],{"class":202},[186,159223,159224,159226,159228,159231],{"class":188,"line":271},[186,159225,33906],{"class":206},[186,159227,832],{"class":202},[186,159229,159230],{"class":532},"\"请先买票\"",[186,159232,1629],{"class":202},[186,159234,159235,159237],{"class":188,"line":288},[186,159236,3169],{"class":669},[186,159238,5205],{"class":202},[186,159240,159241,159243,159245,159248],{"class":188,"line":294},[186,159242,32754],{"class":206},[186,159244,832],{"class":202},[186,159246,159247],{"class":532},"\"未成年人禁止进入\"",[186,159249,1629],{"class":202},[169,159251,159252],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159254,159256],{"id":159255},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[29,159258,159260],{"id":159259},"_361-and","3.6.1 and",[169,159262,159263],{},"两个条件都成立才成立。",[176,159265,159267],{"className":31833,"code":159266,"language":31835,"meta":181,"style":181},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[183,159268,159269,159277,159285,159289,159304],{"__ignoreMap":181},[186,159270,159271,159273,159275],{"class":188,"line":189},[186,159272,147743],{"class":202},[186,159274,529],{"class":669},[186,159276,89496],{"class":206},[186,159278,159279,159281,159283],{"class":188,"line":49},[186,159280,157558],{"class":202},[186,159282,529],{"class":669},[186,159284,154796],{"class":206},[186,159286,159287],{"class":188,"line":219},[186,159288,3867],{"emptyLinePlaceholder":1551},[186,159290,159291,159293,159295,159297,159299,159301],{"class":188,"line":225},[186,159292,3003],{"class":669},[186,159294,17168],{"class":202},[186,159296,3178],{"class":669},[186,159298,157482],{"class":206},[186,159300,121860],{"class":669},[186,159302,159303],{"class":202}," has_ticket:\n",[186,159305,159306,159308,159310,159312],{"class":188,"line":242},[186,159307,32754],{"class":206},[186,159309,832],{"class":202},[186,159311,158844],{"class":532},[186,159313,1629],{"class":202},[29,159315,159317],{"id":159316},"_362-or","3.6.2 or",[169,159319,159320],{},"只要一个条件成立就成立。",[176,159322,159324],{"className":31833,"code":159323,"language":31835,"meta":181,"style":181},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[183,159325,159326,159335,159344,159348,159360],{"__ignoreMap":181},[186,159327,159328,159331,159333],{"class":188,"line":189},[186,159329,159330],{"class":202},"is_vip ",[186,159332,529],{"class":669},[186,159334,127238],{"class":206},[186,159336,159337,159340,159342],{"class":188,"line":49},[186,159338,159339],{"class":202},"coupon ",[186,159341,529],{"class":669},[186,159343,154796],{"class":206},[186,159345,159346],{"class":188,"line":219},[186,159347,3867],{"emptyLinePlaceholder":1551},[186,159349,159350,159352,159355,159357],{"class":188,"line":225},[186,159351,3003],{"class":669},[186,159353,159354],{"class":202}," is_vip ",[186,159356,116521],{"class":669},[186,159358,159359],{"class":202}," coupon:\n",[186,159361,159362,159364,159366,159369],{"class":188,"line":242},[186,159363,32754],{"class":206},[186,159365,832],{"class":202},[186,159367,159368],{"class":532},"\"可以享受优惠\"",[186,159370,1629],{"class":202},[29,159372,159374],{"id":159373},"_363-not","3.6.3 not",[169,159376,159377],{},"取反。",[176,159379,159381],{"className":31833,"code":159380,"language":31835,"meta":181,"style":181},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[183,159382,159383,159392,159396,159405],{"__ignoreMap":181},[186,159384,159385,159388,159390],{"class":188,"line":189},[186,159386,159387],{"class":202},"is_closed ",[186,159389,529],{"class":669},[186,159391,127238],{"class":206},[186,159393,159394],{"class":188,"line":49},[186,159395,3867],{"emptyLinePlaceholder":1551},[186,159397,159398,159400,159402],{"class":188,"line":219},[186,159399,3003],{"class":669},[186,159401,40384],{"class":669},[186,159403,159404],{"class":202}," is_closed:\n",[186,159406,159407,159409,159411,159414],{"class":188,"line":225},[186,159408,32754],{"class":206},[186,159410,832],{"class":202},[186,159412,159413],{"class":532},"\"店铺营业中\"",[186,159415,1629],{"class":202},[14,159417,159419],{"id":159418},"_37-链式比较","3.7 链式比较",[169,159421,159422],{},"Python 支持链式比较：",[176,159424,159426],{"className":31833,"code":159425,"language":31835,"meta":181,"style":181},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[183,159427,159428,159437,159441,159458],{"__ignoreMap":181},[186,159429,159430,159432,159434],{"class":188,"line":189},[186,159431,156555],{"class":202},[186,159433,529],{"class":669},[186,159435,159436],{"class":206}," 85\n",[186,159438,159439],{"class":188,"line":49},[186,159440,3867],{"emptyLinePlaceholder":1551},[186,159442,159443,159445,159447,159450,159452,159454,159456],{"class":188,"line":219},[186,159444,3003],{"class":669},[186,159446,5559],{"class":206},[186,159448,159449],{"class":669}," \u003C=",[186,159451,158980],{"class":202},[186,159453,3059],{"class":669},[186,159455,7217],{"class":206},[186,159457,5205],{"class":202},[186,159459,159460,159462,159464,159467],{"class":188,"line":225},[186,159461,32754],{"class":206},[186,159463,832],{"class":202},[186,159465,159466],{"class":532},"\"成绩合法\"",[186,159468,1629],{"class":202},[169,159470,159471],{},"等价于：",[176,159473,159475],{"className":31833,"code":159474,"language":31835,"meta":181,"style":181},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[183,159476,159477,159497],{"__ignoreMap":181},[186,159478,159479,159481,159483,159485,159487,159489,159491,159493,159495],{"class":188,"line":189},[186,159480,3003],{"class":669},[186,159482,158980],{"class":202},[186,159484,3178],{"class":669},[186,159486,5559],{"class":206},[186,159488,121860],{"class":669},[186,159490,158980],{"class":202},[186,159492,3059],{"class":669},[186,159494,7217],{"class":206},[186,159496,5205],{"class":202},[186,159498,159499,159501,159503,159505],{"class":188,"line":49},[186,159500,32754],{"class":206},[186,159502,832],{"class":202},[186,159504,159466],{"class":532},[186,159506,1629],{"class":202},[14,159508,159510],{"id":159509},"_38-真值和假值","3.8 真值和假值",[169,159512,117898,159513,159515],{},[183,159514,3003],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[169,159517,159518],{},"假值：",[176,159520,159522],{"className":31833,"code":159521,"language":31835,"meta":181,"style":181},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[183,159523,159524,159528,159533,159537,159541,159546,159550,159554,159559],{"__ignoreMap":181},[186,159525,159526],{"class":188,"line":189},[186,159527,158714],{"class":206},[186,159529,159530],{"class":188,"line":49},[186,159531,159532],{"class":206},"None\n",[186,159534,159535],{"class":188,"line":219},[186,159536,4551],{"class":206},[186,159538,159539],{"class":188,"line":225},[186,159540,33797],{"class":206},[186,159542,159543],{"class":188,"line":242},[186,159544,159545],{"class":532},"\"\"\n",[186,159547,159548],{"class":188,"line":248},[186,159549,33812],{"class":202},[186,159551,159552],{"class":188,"line":265},[186,159553,3443],{"class":202},[186,159555,159556],{"class":188,"line":271},[186,159557,159558],{"class":202},"{}\n",[186,159560,159561,159563],{"class":188,"line":288},[186,159562,156487],{"class":206},[186,159564,3443],{"class":202},[169,159566,16597],{},[176,159568,159570],{"className":31833,"code":159569,"language":31835,"meta":181,"style":181},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[183,159571,159572,159586,159590,159597,159617,159623],{"__ignoreMap":181},[186,159573,159574,159576,159578,159580,159582,159584],{"class":188,"line":189},[186,159575,147733],{"class":202},[186,159577,529],{"class":669},[186,159579,62046],{"class":206},[186,159581,832],{"class":202},[186,159583,153576],{"class":532},[186,159585,1629],{"class":202},[186,159587,159588],{"class":188,"line":49},[186,159589,3867],{"emptyLinePlaceholder":1551},[186,159591,159592,159594],{"class":188,"line":219},[186,159593,3003],{"class":669},[186,159595,159596],{"class":202}," name:\n",[186,159598,159599,159601,159603,159605,159607,159609,159611,159613,159615],{"class":188,"line":225},[186,159600,32754],{"class":206},[186,159602,832],{"class":202},[186,159604,1673],{"class":669},[186,159606,158251],{"class":532},[186,159608,2504],{"class":206},[186,159610,81242],{"class":202},[186,159612,2553],{"class":206},[186,159614,1862],{"class":532},[186,159616,1629],{"class":202},[186,159618,159619,159621],{"class":188,"line":242},[186,159620,3169],{"class":669},[186,159622,5205],{"class":202},[186,159624,159625,159627,159629,159632],{"class":188,"line":248},[186,159626,32754],{"class":206},[186,159628,832],{"class":202},[186,159630,159631],{"class":532},"\"姓名不能为空\"",[186,159633,1629],{"class":202},[14,159635,159637],{"id":159636},"_39-match语句","3.9 match语句",[169,159639,159640,159641,159643],{},"Python 3.10 开始支持 ",[183,159642,72699],{},"。它适合处理固定选项。",[176,159645,159647],{"className":31833,"code":159646,"language":31835,"meta":181,"style":181},"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",[183,159648,159649,159665,159669,159676,159686,159697,159706,159717,159726,159737,159744],{"__ignoreMap":181},[186,159650,159651,159654,159656,159658,159660,159663],{"class":188,"line":189},[186,159652,159653],{"class":202},"command ",[186,159655,529],{"class":669},[186,159657,62046],{"class":206},[186,159659,832],{"class":202},[186,159661,159662],{"class":532},"\"请输入命令:\"",[186,159664,1629],{"class":202},[186,159666,159667],{"class":188,"line":49},[186,159668,3867],{"emptyLinePlaceholder":1551},[186,159670,159671,159673],{"class":188,"line":219},[186,159672,72699],{"class":669},[186,159674,159675],{"class":202}," command:\n",[186,159677,159678,159681,159684],{"class":188,"line":225},[186,159679,159680],{"class":669},"    case",[186,159682,159683],{"class":532}," \"start\"",[186,159685,5205],{"class":202},[186,159687,159688,159690,159692,159695],{"class":188,"line":242},[186,159689,33906],{"class":206},[186,159691,832],{"class":202},[186,159693,159694],{"class":532},"\"启动\"",[186,159696,1629],{"class":202},[186,159698,159699,159701,159704],{"class":188,"line":248},[186,159700,159680],{"class":669},[186,159702,159703],{"class":532}," \"stop\"",[186,159705,5205],{"class":202},[186,159707,159708,159710,159712,159715],{"class":188,"line":265},[186,159709,33906],{"class":206},[186,159711,832],{"class":202},[186,159713,159714],{"class":532},"\"停止\"",[186,159716,1629],{"class":202},[186,159718,159719,159721,159724],{"class":188,"line":271},[186,159720,159680],{"class":669},[186,159722,159723],{"class":532}," \"restart\"",[186,159725,5205],{"class":202},[186,159727,159728,159730,159732,159735],{"class":188,"line":288},[186,159729,33906],{"class":206},[186,159731,832],{"class":202},[186,159733,159734],{"class":532},"\"重启\"",[186,159736,1629],{"class":202},[186,159738,159739,159741],{"class":188,"line":294},[186,159740,159680],{"class":669},[186,159742,159743],{"class":202}," _:\n",[186,159745,159746,159748,159750,159753],{"class":188,"line":1212},[186,159747,33906],{"class":206},[186,159749,832],{"class":202},[186,159751,159752],{"class":532},"\"未知命令\"",[186,159754,1629],{"class":202},[169,159756,159757,159758,159760,159761,159763],{},"入门阶段掌握 ",[183,159759,155855],{}," 更重要，",[183,159762,72699],{}," 可以作为补充。",[14,159765,159767],{"id":159766},"_310-小案例成绩等级","3.10 小案例：成绩等级",[169,159769,124723],{},[34,159771,159772,159775,159778],{},[22,159773,159774],{},"输入成绩。",[22,159776,159777],{},"判断成绩是否合法。",[22,159779,159780],{},"输出等级。",[169,159782,11498],{},[176,159784,159786],{"className":31833,"code":159785,"language":31835,"meta":181,"style":181},"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",[183,159787,159788,159806,159810,159828,159839,159851,159862,159874,159885,159898,159909,159921,159932,159938],{"__ignoreMap":181},[186,159789,159790,159792,159794,159796,159798,159800,159802,159804],{"class":188,"line":189},[186,159791,156555],{"class":202},[186,159793,529],{"class":669},[186,159795,111228],{"class":206},[186,159797,832],{"class":202},[186,159799,55266],{"class":206},[186,159801,832],{"class":202},[186,159803,153606],{"class":532},[186,159805,31952],{"class":202},[186,159807,159808],{"class":188,"line":49},[186,159809,3867],{"emptyLinePlaceholder":1551},[186,159811,159812,159814,159816,159818,159820,159822,159824,159826],{"class":188,"line":219},[186,159813,3003],{"class":669},[186,159815,40384],{"class":669},[186,159817,5559],{"class":206},[186,159819,159449],{"class":669},[186,159821,158980],{"class":202},[186,159823,3059],{"class":669},[186,159825,7217],{"class":206},[186,159827,5205],{"class":202},[186,159829,159830,159832,159834,159837],{"class":188,"line":225},[186,159831,32754],{"class":206},[186,159833,832],{"class":202},[186,159835,159836],{"class":532},"\"成绩不合法\"",[186,159838,1629],{"class":202},[186,159840,159841,159843,159845,159847,159849],{"class":188,"line":242},[186,159842,159003],{"class":669},[186,159844,158980],{"class":202},[186,159846,3178],{"class":669},[186,159848,158985],{"class":206},[186,159850,5205],{"class":202},[186,159852,159853,159855,159857,159860],{"class":188,"line":248},[186,159854,32754],{"class":206},[186,159856,832],{"class":202},[186,159858,159859],{"class":532},"\"等级:A\"",[186,159861,1629],{"class":202},[186,159863,159864,159866,159868,159870,159872],{"class":188,"line":265},[186,159865,159003],{"class":669},[186,159867,158980],{"class":202},[186,159869,3178],{"class":669},[186,159871,159010],{"class":206},[186,159873,5205],{"class":202},[186,159875,159876,159878,159880,159883],{"class":188,"line":271},[186,159877,32754],{"class":206},[186,159879,832],{"class":202},[186,159881,159882],{"class":532},"\"等级:B\"",[186,159884,1629],{"class":202},[186,159886,159887,159889,159891,159893,159896],{"class":188,"line":288},[186,159888,159003],{"class":669},[186,159890,158980],{"class":202},[186,159892,3178],{"class":669},[186,159894,159895],{"class":206}," 70",[186,159897,5205],{"class":202},[186,159899,159900,159902,159904,159907],{"class":188,"line":294},[186,159901,32754],{"class":206},[186,159903,832],{"class":202},[186,159905,159906],{"class":532},"\"等级:C\"",[186,159908,1629],{"class":202},[186,159910,159911,159913,159915,159917,159919],{"class":188,"line":1212},[186,159912,159003],{"class":669},[186,159914,158980],{"class":202},[186,159916,3178],{"class":669},[186,159918,159034],{"class":206},[186,159920,5205],{"class":202},[186,159922,159923,159925,159927,159930],{"class":188,"line":1223},[186,159924,32754],{"class":206},[186,159926,832],{"class":202},[186,159928,159929],{"class":532},"\"等级:D\"",[186,159931,1629],{"class":202},[186,159933,159934,159936],{"class":188,"line":1236},[186,159935,3169],{"class":669},[186,159937,5205],{"class":202},[186,159939,159940,159942,159944,159947],{"class":188,"line":3096},[186,159941,32754],{"class":206},[186,159943,832],{"class":202},[186,159945,159946],{"class":532},"\"等级:E\"",[186,159948,1629],{"class":202},[14,159950,159952],{"id":159951},"_311-小案例会员折扣","3.11 小案例：会员折扣",[169,159954,124723],{},[34,159956,159957,159960,159963,159966],{},[22,159958,159959],{},"输入消费金额。",[22,159961,159962],{},"输入会员等级，普通、银卡、金卡。",[22,159964,159965],{},"普通不打折，银卡 9 折，金卡 8 折。",[22,159967,159968],{},"满 500 再减 50。",[169,159970,11498],{},[176,159972,159974],{"className":31833,"code":159973,"language":31835,"meta":181,"style":181},"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",[183,159975,159976,159996,160012,160016,160024,160028,160042,160052,160065,160074,160087,160095,160101,160112,160116,160130,160134,160148,160158,160162],{"__ignoreMap":181},[186,159977,159978,159981,159983,159985,159987,159989,159991,159994],{"class":188,"line":189},[186,159979,159980],{"class":202},"amount ",[186,159982,529],{"class":669},[186,159984,111228],{"class":206},[186,159986,832],{"class":202},[186,159988,55266],{"class":206},[186,159990,832],{"class":202},[186,159992,159993],{"class":532},"\"请输入消费金额:\"",[186,159995,31952],{"class":202},[186,159997,159998,160001,160003,160005,160007,160010],{"class":188,"line":49},[186,159999,160000],{"class":202},"level ",[186,160002,529],{"class":669},[186,160004,62046],{"class":206},[186,160006,832],{"class":202},[186,160008,160009],{"class":532},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[186,160011,1629],{"class":202},[186,160013,160014],{"class":188,"line":219},[186,160015,3867],{"emptyLinePlaceholder":1551},[186,160017,160018,160020,160022],{"class":188,"line":225},[186,160019,158433],{"class":202},[186,160021,529],{"class":669},[186,160023,57140],{"class":206},[186,160025,160026],{"class":188,"line":242},[186,160027,3867],{"emptyLinePlaceholder":1551},[186,160029,160030,160032,160035,160037,160040],{"class":188,"line":248},[186,160031,3003],{"class":669},[186,160033,160034],{"class":202}," level ",[186,160036,4415],{"class":669},[186,160038,160039],{"class":532}," \"银卡\"",[186,160041,5205],{"class":202},[186,160043,160044,160047,160049],{"class":188,"line":265},[186,160045,160046],{"class":202},"    discount ",[186,160048,529],{"class":669},[186,160050,160051],{"class":206}," 0.9\n",[186,160053,160054,160056,160058,160060,160063],{"class":188,"line":271},[186,160055,159003],{"class":669},[186,160057,160034],{"class":202},[186,160059,4415],{"class":669},[186,160061,160062],{"class":532}," \"金卡\"",[186,160064,5205],{"class":202},[186,160066,160067,160069,160071],{"class":188,"line":288},[186,160068,160046],{"class":202},[186,160070,529],{"class":669},[186,160072,160073],{"class":206}," 0.8\n",[186,160075,160076,160078,160080,160082,160085],{"class":188,"line":294},[186,160077,159003],{"class":669},[186,160079,160034],{"class":202},[186,160081,4415],{"class":669},[186,160083,160084],{"class":532}," \"普通\"",[186,160086,5205],{"class":202},[186,160088,160089,160091,160093],{"class":188,"line":1212},[186,160090,160046],{"class":202},[186,160092,529],{"class":669},[186,160094,57140],{"class":206},[186,160096,160097,160099],{"class":188,"line":1223},[186,160098,3169],{"class":669},[186,160100,5205],{"class":202},[186,160102,160103,160105,160107,160110],{"class":188,"line":1236},[186,160104,32754],{"class":206},[186,160106,832],{"class":202},[186,160108,160109],{"class":532},"\"会员等级输入错误，按普通会员计算\"",[186,160111,1629],{"class":202},[186,160113,160114],{"class":188,"line":3096},[186,160115,3867],{"emptyLinePlaceholder":1551},[186,160117,160118,160121,160123,160126,160128],{"class":188,"line":3110},[186,160119,160120],{"class":202},"pay ",[186,160122,529],{"class":669},[186,160124,160125],{"class":202}," amount ",[186,160127,2065],{"class":669},[186,160129,158472],{"class":202},[186,160131,160132],{"class":188,"line":3115},[186,160133,3867],{"emptyLinePlaceholder":1551},[186,160135,160136,160138,160141,160143,160146],{"class":188,"line":3121},[186,160137,3003],{"class":669},[186,160139,160140],{"class":202}," pay ",[186,160142,3178],{"class":669},[186,160144,160145],{"class":206}," 500",[186,160147,5205],{"class":202},[186,160149,160150,160153,160155],{"class":188,"line":3142},[186,160151,160152],{"class":202},"    pay ",[186,160154,151449],{"class":669},[186,160156,160157],{"class":206}," 50\n",[186,160159,160160],{"class":188,"line":3147},[186,160161,3867],{"emptyLinePlaceholder":1551},[186,160163,160164,160166,160168,160170,160172,160174,160177,160179,160181,160183],{"class":188,"line":3161},[186,160165,31870],{"class":206},[186,160167,832],{"class":202},[186,160169,1673],{"class":669},[186,160171,158553],{"class":532},[186,160173,2504],{"class":206},[186,160175,160176],{"class":202},"pay",[186,160178,158356],{"class":669},[186,160180,2553],{"class":206},[186,160182,158209],{"class":532},[186,160184,1629],{"class":202},[14,160186,160188],{"id":160187},"_312-易错点","3.12 易错点",[34,160190,160191,160194,160197,160200,160205],{},[22,160192,160193],{},"冒号不能漏。",[22,160195,160196],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[22,160198,160199],{},"多分支判断要注意顺序。",[22,160201,160202,160203,913],{},"判断相等用 ",[183,160204,4415],{},[22,160206,160207],{},"字符串比较区分大小写：",[176,160209,160211],{"className":31833,"code":160210,"language":31835,"meta":181,"style":181},"\"Y\" == \"y\"  # False\n",[183,160212,160213],{"__ignoreMap":181},[186,160214,160215,160218,160220,160222],{"class":188,"line":189},[186,160216,160217],{"class":532},"\"Y\"",[186,160219,102990],{"class":669},[186,160221,159202],{"class":532},[186,160223,160224],{"class":192},"  # False\n",[169,160226,160227],{},"可转换后再判断：",[176,160229,160231],{"className":31833,"code":160230,"language":31835,"meta":181,"style":181},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[183,160232,160233,160250,160263],{"__ignoreMap":181},[186,160234,160235,160238,160240,160242,160244,160247],{"class":188,"line":189},[186,160236,160237],{"class":202},"answer ",[186,160239,529],{"class":669},[186,160241,62046],{"class":206},[186,160243,832],{"class":202},[186,160245,160246],{"class":532},"\"是否继续(y\u002Fn):\"",[186,160248,160249],{"class":202},").lower()\n",[186,160251,160252,160254,160257,160259,160261],{"class":188,"line":49},[186,160253,3003],{"class":669},[186,160255,160256],{"class":202}," answer ",[186,160258,4415],{"class":669},[186,160260,159202],{"class":532},[186,160262,5205],{"class":202},[186,160264,160265,160267,160269,160272],{"class":188,"line":219},[186,160266,32754],{"class":206},[186,160268,832],{"class":202},[186,160270,160271],{"class":532},"\"继续\"",[186,160273,1629],{"class":202},[14,160275,160277],{"id":160276},"_313-本章练习","3.13 本章练习",[34,160279,160280,160283,160286,160289,160299],{},[22,160281,160282],{},"输入年龄，判断是否成年。",[22,160284,160285],{},"输入年份，判断是否为闰年。",[22,160287,160288],{},"输入三个数字，输出最大值。",[22,160290,160291,160292,160295,160296,160298],{},"写登录判断：用户名是 ",[183,160293,160294],{},"admin"," 且密码是 ",[183,160297,16546],{}," 才登录成功。",[22,160300,160301],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1524,160303,160304],{},"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":181,"searchDepth":49,"depth":49,"links":160306},[160307,160308,160309,160310,160311,160312,160317,160318,160319,160320,160321,160322,160323],{"id":158695,"depth":49,"text":158696},{"id":158748,"depth":49,"text":158749},{"id":158852,"depth":49,"text":158853},{"id":158942,"depth":49,"text":158943},{"id":159132,"depth":49,"text":159133},{"id":159255,"depth":49,"text":159256,"children":160313},[160314,160315,160316],{"id":159259,"depth":219,"text":159260},{"id":159316,"depth":219,"text":159317},{"id":159373,"depth":219,"text":159374},{"id":159418,"depth":49,"text":159419},{"id":159509,"depth":49,"text":159510},{"id":159636,"depth":49,"text":159637},{"id":159766,"depth":49,"text":159767},{"id":159951,"depth":49,"text":159952},{"id":160187,"depth":49,"text":160188},{"id":160276,"depth":49,"text":160277},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158687,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160330,"title":160331,"body":160332,"description":1548,"extension":1549,"meta":162101,"navigation":1551,"path":162102,"seo":162103,"stem":162104,"__hash__":162105},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160333,"toc":162081},[160334,160337,160341,160347,160350,160367,160371,160373,160390,160392,160437,160439,160456,160460,160463,160529,160532,160550,160554,160715,160724,160728,160732,160737,160784,160786,160792,160796,160801,160848,160850,160856,160860,160865,160901,160904,160951,160955,160961,161019,161024,161055,161060,161064,161119,161122,161194,161197,161256,161260,161263,161338,161341,161345,161451,161454,161480,161484,161496,161565,161568,161660,161664,161666,161677,161679,161809,161813,162015,162023,162027,162057,162061,162078],[10,160335,160331],{"id":160336},"_4-循环语句",[14,160338,160340],{"id":160339},"_41-为什么需要循环","4.1 为什么需要循环",[169,160342,160343,160344,160346],{},"如果要输出 1 到 100，不应该写 100 行 ",[183,160345,147669],{},"，而应该用循环。",[169,160348,160349],{},"循环适合处理重复任务：",[34,160351,160352,160355,160358,160361,160364],{},[22,160353,160354],{},"重复输出。",[22,160356,160357],{},"重复输入。",[22,160359,160360],{},"遍历数据。",[22,160362,160363],{},"持续执行菜单。",[22,160365,160366],{},"批量处理文件或数据。",[14,160368,160370],{"id":160369},"_42-while循环","4.2 while循环",[169,160372,6647],{},[176,160374,160376],{"className":31833,"code":160375,"language":31835,"meta":181,"style":181},"while 条件:\n    循环体\n",[183,160377,160378,160385],{"__ignoreMap":181},[186,160379,160380,160382],{"class":188,"line":189},[186,160381,110094],{"class":669},[186,160383,160384],{"class":202}," 条件:\n",[186,160386,160387],{"class":188,"line":49},[186,160388,160389],{"class":202},"    循环体\n",[169,160391,16597],{},[176,160393,160395],{"className":31833,"code":160394,"language":31835,"meta":181,"style":181},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[183,160396,160397,160405,160409,160421,160428],{"__ignoreMap":181},[186,160398,160399,160401,160403],{"class":188,"line":189},[186,160400,101579],{"class":202},[186,160402,529],{"class":669},[186,160404,57140],{"class":206},[186,160406,160407],{"class":188,"line":49},[186,160408,3867],{"emptyLinePlaceholder":1551},[186,160410,160411,160413,160415,160417,160419],{"class":188,"line":219},[186,160412,110094],{"class":669},[186,160414,10901],{"class":202},[186,160416,3059],{"class":669},[186,160418,3615],{"class":206},[186,160420,5205],{"class":202},[186,160422,160423,160425],{"class":188,"line":225},[186,160424,32754],{"class":206},[186,160426,160427],{"class":202},"(i)\n",[186,160429,160430,160433,160435],{"class":188,"line":242},[186,160431,160432],{"class":202},"    i ",[186,160434,10940],{"class":669},[186,160436,57140],{"class":206},[169,160438,82361],{},[34,160440,160441,160447,160450,160453],{},[22,160442,160443,160444,913],{},"判断条件 ",[183,160445,160446],{},"i \u003C= 5",[22,160448,160449],{},"条件成立，执行循环体。",[22,160451,160452],{},"执行完后回到条件判断。",[22,160454,160455],{},"条件不成立，退出循环。",[14,160457,160459],{"id":160458},"_43-while累加","4.3 while累加",[169,160461,160462],{},"计算 1 到 100 的和：",[176,160464,160466],{"className":31833,"code":160465,"language":31835,"meta":181,"style":181},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[183,160467,160468,160476,160484,160488,160500,160510,160518,160522],{"__ignoreMap":181},[186,160469,160470,160472,160474],{"class":188,"line":189},[186,160471,101579],{"class":202},[186,160473,529],{"class":669},[186,160475,57140],{"class":206},[186,160477,160478,160480,160482],{"class":188,"line":49},[186,160479,158457],{"class":202},[186,160481,529],{"class":669},[186,160483,48787],{"class":206},[186,160485,160486],{"class":188,"line":219},[186,160487,3867],{"emptyLinePlaceholder":1551},[186,160489,160490,160492,160494,160496,160498],{"class":188,"line":225},[186,160491,110094],{"class":669},[186,160493,10901],{"class":202},[186,160495,3059],{"class":669},[186,160497,7217],{"class":206},[186,160499,5205],{"class":202},[186,160501,160502,160505,160507],{"class":188,"line":242},[186,160503,160504],{"class":202},"    total ",[186,160506,10940],{"class":669},[186,160508,160509],{"class":202}," i\n",[186,160511,160512,160514,160516],{"class":188,"line":248},[186,160513,160432],{"class":202},[186,160515,10940],{"class":669},[186,160517,57140],{"class":206},[186,160519,160520],{"class":188,"line":265},[186,160521,3867],{"emptyLinePlaceholder":1551},[186,160523,160524,160526],{"class":188,"line":271},[186,160525,31870],{"class":206},[186,160527,160528],{"class":202},"(total)\n",[169,160530,160531],{},"核心思想：",[34,160533,160534,160539,160544],{},[22,160535,160536,160538],{},[183,160537,2051],{}," 控制循环次数。",[22,160540,160541,160543],{},[183,160542,158558],{}," 保存累加结果。",[22,160545,160546,160547,160549],{},"每轮循环都要更新 ",[183,160548,2051],{},"，否则可能死循环。",[14,160551,160553],{"id":160552},"_44-while猜数字","4.4 while猜数字",[176,160555,160557],{"className":31833,"code":160556,"language":31835,"meta":181,"style":181},"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",[183,160558,160559,160565,160569,160586,160594,160598,160606,160626,160635,160639,160651,160662,160672,160683,160689,160711],{"__ignoreMap":181},[186,160560,160561,160563],{"class":188,"line":189},[186,160562,31847],{"class":669},[186,160564,46782],{"class":202},[186,160566,160567],{"class":188,"line":49},[186,160568,3867],{"emptyLinePlaceholder":1551},[186,160570,160571,160573,160575,160578,160580,160582,160584],{"class":188,"line":219},[186,160572,160237],{"class":202},[186,160574,529],{"class":669},[186,160576,160577],{"class":202}," random.randint(",[186,160579,1829],{"class":206},[186,160581,13898],{"class":202},[186,160583,1922],{"class":206},[186,160585,1629],{"class":202},[186,160587,160588,160590,160592],{"class":188,"line":225},[186,160589,147888],{"class":202},[186,160591,529],{"class":669},[186,160593,48787],{"class":206},[186,160595,160596],{"class":188,"line":242},[186,160597,3867],{"emptyLinePlaceholder":1551},[186,160599,160600,160602,160604],{"class":188,"line":248},[186,160601,110094],{"class":669},[186,160603,96723],{"class":206},[186,160605,5205],{"class":202},[186,160607,160608,160611,160613,160615,160617,160619,160621,160624],{"class":188,"line":265},[186,160609,160610],{"class":202},"    guess ",[186,160612,529],{"class":669},[186,160614,3849],{"class":206},[186,160616,832],{"class":202},[186,160618,55266],{"class":206},[186,160620,832],{"class":202},[186,160622,160623],{"class":532},"\"请输入1到100之间的数字:\"",[186,160625,31952],{"class":202},[186,160627,160628,160631,160633],{"class":188,"line":271},[186,160629,160630],{"class":202},"    count ",[186,160632,10940],{"class":669},[186,160634,57140],{"class":206},[186,160636,160637],{"class":188,"line":288},[186,160638,3867],{"emptyLinePlaceholder":1551},[186,160640,160641,160643,160646,160648],{"class":188,"line":294},[186,160642,4567],{"class":669},[186,160644,160645],{"class":202}," guess ",[186,160647,2567],{"class":669},[186,160649,160650],{"class":202}," answer:\n",[186,160652,160653,160655,160657,160660],{"class":188,"line":1212},[186,160654,33906],{"class":206},[186,160656,832],{"class":202},[186,160658,160659],{"class":532},"\"猜大了\"",[186,160661,1629],{"class":202},[186,160663,160664,160666,160668,160670],{"class":188,"line":1223},[186,160665,40747],{"class":669},[186,160667,160645],{"class":202},[186,160669,520],{"class":669},[186,160671,160650],{"class":202},[186,160673,160674,160676,160678,160681],{"class":188,"line":1236},[186,160675,33906],{"class":206},[186,160677,832],{"class":202},[186,160679,160680],{"class":532},"\"猜小了\"",[186,160682,1629],{"class":202},[186,160684,160685,160687],{"class":188,"line":3096},[186,160686,159219],{"class":669},[186,160688,5205],{"class":202},[186,160690,160691,160693,160695,160697,160700,160702,160704,160706,160709],{"class":188,"line":3110},[186,160692,33906],{"class":206},[186,160694,832],{"class":202},[186,160696,1673],{"class":669},[186,160698,160699],{"class":532},"\"猜对了，一共猜了",[186,160701,2504],{"class":206},[186,160703,85866],{"class":202},[186,160705,2553],{"class":206},[186,160707,160708],{"class":532},"次\"",[186,160710,1629],{"class":202},[186,160712,160713],{"class":188,"line":3115},[186,160714,33082],{"class":669},[169,160716,160717,160720,160721,160723],{},[183,160718,160719],{},"while True"," 表示无限循环，通常配合 ",[183,160722,3520],{}," 使用。",[14,160725,160727],{"id":160726},"_45-break和continue","4.5 break和continue",[29,160729,160731],{"id":160730},"_451-break","4.5.1 break",[169,160733,160734,160736],{},[183,160735,3520],{}," 直接结束整个循环。",[176,160738,160740],{"className":31833,"code":160739,"language":31835,"meta":181,"style":181},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[183,160741,160742,160762,160774,160778],{"__ignoreMap":181},[186,160743,160744,160746,160748,160750,160752,160754,160756,160758,160760],{"class":188,"line":189},[186,160745,4491],{"class":669},[186,160747,10901],{"class":202},[186,160749,27500],{"class":669},[186,160751,33898],{"class":206},[186,160753,832],{"class":202},[186,160755,1829],{"class":206},[186,160757,13898],{"class":202},[186,160759,1954],{"class":206},[186,160761,32241],{"class":202},[186,160763,160764,160766,160768,160770,160772],{"class":188,"line":49},[186,160765,4567],{"class":669},[186,160767,10901],{"class":202},[186,160769,4415],{"class":669},[186,160771,79503],{"class":206},[186,160773,5205],{"class":202},[186,160775,160776],{"class":188,"line":219},[186,160777,33082],{"class":669},[186,160779,160780,160782],{"class":188,"line":225},[186,160781,32754],{"class":206},[186,160783,160427],{"class":202},[169,160785,147654],{},[176,160787,160790],{"className":160788,"code":160789,"language":753,"meta":181},[751],"1\n2\n",[183,160791,160789],{"__ignoreMap":181},[29,160793,160795],{"id":160794},"_452-continue","4.5.2 continue",[169,160797,160798,160800],{},[183,160799,155869],{}," 跳过本轮剩余代码，进入下一轮循环。",[176,160802,160804],{"className":31833,"code":160803,"language":31835,"meta":181,"style":181},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[183,160805,160806,160826,160838,160842],{"__ignoreMap":181},[186,160807,160808,160810,160812,160814,160816,160818,160820,160822,160824],{"class":188,"line":189},[186,160809,4491],{"class":669},[186,160811,10901],{"class":202},[186,160813,27500],{"class":669},[186,160815,33898],{"class":206},[186,160817,832],{"class":202},[186,160819,1829],{"class":206},[186,160821,13898],{"class":202},[186,160823,1954],{"class":206},[186,160825,32241],{"class":202},[186,160827,160828,160830,160832,160834,160836],{"class":188,"line":49},[186,160829,4567],{"class":669},[186,160831,10901],{"class":202},[186,160833,4415],{"class":669},[186,160835,79503],{"class":206},[186,160837,5205],{"class":202},[186,160839,160840],{"class":188,"line":219},[186,160841,149709],{"class":669},[186,160843,160844,160846],{"class":188,"line":225},[186,160845,32754],{"class":206},[186,160847,160427],{"class":202},[169,160849,147654],{},[176,160851,160854],{"className":160852,"code":160853,"language":753,"meta":181},[751],"1\n2\n4\n5\n",[183,160855,160853],{"__ignoreMap":181},[14,160857,160859],{"id":160858},"_46-for循环","4.6 for循环",[169,160861,160862,160864],{},[183,160863,4491],{}," 常用于遍历序列。",[176,160866,160868],{"className":31833,"code":160867,"language":31835,"meta":181,"style":181},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[183,160869,160870,160879,160883,160894],{"__ignoreMap":181},[186,160871,160872,160874,160876],{"class":188,"line":189},[186,160873,147733],{"class":202},[186,160875,529],{"class":669},[186,160877,160878],{"class":532}," \"python\"\n",[186,160880,160881],{"class":188,"line":49},[186,160882,3867],{"emptyLinePlaceholder":1551},[186,160884,160885,160887,160890,160892],{"class":188,"line":219},[186,160886,4491],{"class":669},[186,160888,160889],{"class":202}," ch ",[186,160891,27500],{"class":669},[186,160893,159596],{"class":202},[186,160895,160896,160898],{"class":188,"line":225},[186,160897,32754],{"class":206},[186,160899,160900],{"class":202},"(ch)\n",[169,160902,160903],{},"遍历列表：",[176,160905,160907],{"className":31833,"code":160906,"language":31835,"meta":181,"style":181},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[183,160908,160909,160931,160935,160945],{"__ignoreMap":181},[186,160910,160911,160914,160916,160918,160920,160922,160924,160926,160929],{"class":188,"line":189},[186,160912,160913],{"class":202},"students ",[186,160915,529],{"class":669},[186,160917,53673],{"class":202},[186,160919,151085],{"class":532},[186,160921,13898],{"class":202},[186,160923,152133],{"class":532},[186,160925,13898],{"class":202},[186,160927,160928],{"class":532},"\"小刚\"",[186,160930,34701],{"class":202},[186,160932,160933],{"class":188,"line":49},[186,160934,3867],{"emptyLinePlaceholder":1551},[186,160936,160937,160939,160941,160943],{"class":188,"line":219},[186,160938,4491],{"class":669},[186,160940,153334],{"class":202},[186,160942,27500],{"class":669},[186,160944,153339],{"class":202},[186,160946,160947,160949],{"class":188,"line":225},[186,160948,32754],{"class":206},[186,160950,151239],{"class":202},[14,160952,160954],{"id":160953},"_47-range函数","4.7 range函数",[169,160956,160957,160960],{},[183,160958,160959],{},"range()"," 用于生成整数序列。",[176,160962,160964],{"className":31833,"code":160963,"language":31835,"meta":181,"style":181},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[183,160965,160966,160980,160998],{"__ignoreMap":181},[186,160967,160968,160970,160972,160974,160977],{"class":188,"line":189},[186,160969,34871],{"class":206},[186,160971,832],{"class":202},[186,160973,1930],{"class":206},[186,160975,160976],{"class":202},")          ",[186,160978,160979],{"class":192},"# 0,1,2,3,4\n",[186,160981,160982,160984,160986,160988,160990,160992,160995],{"class":188,"line":49},[186,160983,34871],{"class":206},[186,160985,832],{"class":202},[186,160987,1829],{"class":206},[186,160989,13898],{"class":202},[186,160991,1930],{"class":206},[186,160993,160994],{"class":202},")       ",[186,160996,160997],{"class":192},"# 1,2,3,4\n",[186,160999,161000,161002,161004,161006,161008,161010,161012,161014,161016],{"class":188,"line":219},[186,161001,34871],{"class":206},[186,161003,832],{"class":202},[186,161005,1829],{"class":206},[186,161007,13898],{"class":202},[186,161009,2056],{"class":206},[186,161011,13898],{"class":202},[186,161013,1697],{"class":206},[186,161015,156858],{"class":202},[186,161017,161018],{"class":192},"# 1,3,5,7,9\n",[169,161020,161021,161022,26077],{},"配合 ",[183,161023,4491],{},[176,161025,161027],{"className":31833,"code":161026,"language":31835,"meta":181,"style":181},"for i in range(1, 6):\n    print(i)\n",[183,161028,161029,161049],{"__ignoreMap":181},[186,161030,161031,161033,161035,161037,161039,161041,161043,161045,161047],{"class":188,"line":189},[186,161032,4491],{"class":669},[186,161034,10901],{"class":202},[186,161036,27500],{"class":669},[186,161038,33898],{"class":206},[186,161040,832],{"class":202},[186,161042,1829],{"class":206},[186,161044,13898],{"class":202},[186,161046,1954],{"class":206},[186,161048,32241],{"class":202},[186,161050,161051,161053],{"class":188,"line":49},[186,161052,32754],{"class":206},[186,161054,160427],{"class":202},[169,161056,10488,161057,161059],{},[183,161058,34871],{}," 的结束值不包含在内。",[14,161061,161063],{"id":161062},"_48-for循环求和","4.8 for循环求和",[176,161065,161067],{"className":31833,"code":161066,"language":31835,"meta":181,"style":181},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[183,161068,161069,161077,161081,161101,161109,161113],{"__ignoreMap":181},[186,161070,161071,161073,161075],{"class":188,"line":189},[186,161072,158457],{"class":202},[186,161074,529],{"class":669},[186,161076,48787],{"class":206},[186,161078,161079],{"class":188,"line":49},[186,161080,3867],{"emptyLinePlaceholder":1551},[186,161082,161083,161085,161087,161089,161091,161093,161095,161097,161099],{"class":188,"line":219},[186,161084,4491],{"class":669},[186,161086,10901],{"class":202},[186,161088,27500],{"class":669},[186,161090,33898],{"class":206},[186,161092,832],{"class":202},[186,161094,1829],{"class":206},[186,161096,13898],{"class":202},[186,161098,1947],{"class":206},[186,161100,32241],{"class":202},[186,161102,161103,161105,161107],{"class":188,"line":225},[186,161104,160504],{"class":202},[186,161106,10940],{"class":669},[186,161108,160509],{"class":202},[186,161110,161111],{"class":188,"line":242},[186,161112,3867],{"emptyLinePlaceholder":1551},[186,161114,161115,161117],{"class":188,"line":248},[186,161116,31870],{"class":206},[186,161118,160528],{"class":202},[169,161120,161121],{},"求偶数和：",[176,161123,161125],{"className":31833,"code":161124,"language":31835,"meta":181,"style":181},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[183,161126,161127,161135,161139,161159,161175,161184,161188],{"__ignoreMap":181},[186,161128,161129,161131,161133],{"class":188,"line":189},[186,161130,158457],{"class":202},[186,161132,529],{"class":669},[186,161134,48787],{"class":206},[186,161136,161137],{"class":188,"line":49},[186,161138,3867],{"emptyLinePlaceholder":1551},[186,161140,161141,161143,161145,161147,161149,161151,161153,161155,161157],{"class":188,"line":219},[186,161142,4491],{"class":669},[186,161144,10901],{"class":202},[186,161146,27500],{"class":669},[186,161148,33898],{"class":206},[186,161150,832],{"class":202},[186,161152,1829],{"class":206},[186,161154,13898],{"class":202},[186,161156,1947],{"class":206},[186,161158,32241],{"class":202},[186,161160,161161,161163,161165,161167,161169,161171,161173],{"class":188,"line":225},[186,161162,4567],{"class":669},[186,161164,10901],{"class":202},[186,161166,670],{"class":669},[186,161168,16217],{"class":206},[186,161170,102990],{"class":669},[186,161172,5559],{"class":206},[186,161174,5205],{"class":202},[186,161176,161177,161180,161182],{"class":188,"line":242},[186,161178,161179],{"class":202},"        total ",[186,161181,10940],{"class":669},[186,161183,160509],{"class":202},[186,161185,161186],{"class":188,"line":248},[186,161187,3867],{"emptyLinePlaceholder":1551},[186,161189,161190,161192],{"class":188,"line":265},[186,161191,31870],{"class":206},[186,161193,160528],{"class":202},[169,161195,161196],{},"也可以：",[176,161198,161200],{"className":31833,"code":161199,"language":31835,"meta":181,"style":181},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[183,161201,161202,161210,161214,161238,161246,161250],{"__ignoreMap":181},[186,161203,161204,161206,161208],{"class":188,"line":189},[186,161205,158457],{"class":202},[186,161207,529],{"class":669},[186,161209,48787],{"class":206},[186,161211,161212],{"class":188,"line":49},[186,161213,3867],{"emptyLinePlaceholder":1551},[186,161215,161216,161218,161220,161222,161224,161226,161228,161230,161232,161234,161236],{"class":188,"line":219},[186,161217,4491],{"class":669},[186,161219,10901],{"class":202},[186,161221,27500],{"class":669},[186,161223,33898],{"class":206},[186,161225,832],{"class":202},[186,161227,1697],{"class":206},[186,161229,13898],{"class":202},[186,161231,1947],{"class":206},[186,161233,13898],{"class":202},[186,161235,1697],{"class":206},[186,161237,32241],{"class":202},[186,161239,161240,161242,161244],{"class":188,"line":225},[186,161241,160504],{"class":202},[186,161243,10940],{"class":669},[186,161245,160509],{"class":202},[186,161247,161248],{"class":188,"line":242},[186,161249,3867],{"emptyLinePlaceholder":1551},[186,161251,161252,161254],{"class":188,"line":248},[186,161253,31870],{"class":206},[186,161255,160528],{"class":202},[14,161257,161259],{"id":161258},"_49-循环嵌套","4.9 循环嵌套",[169,161261,161262],{},"嵌套循环就是循环里面再写循环。",[176,161264,161266],{"className":31833,"code":161265,"language":31835,"meta":181,"style":181},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[183,161267,161268,161288,161308],{"__ignoreMap":181},[186,161269,161270,161272,161274,161276,161278,161280,161282,161284,161286],{"class":188,"line":189},[186,161271,4491],{"class":669},[186,161273,10901],{"class":202},[186,161275,27500],{"class":669},[186,161277,33898],{"class":206},[186,161279,832],{"class":202},[186,161281,1829],{"class":206},[186,161283,13898],{"class":202},[186,161285,1904],{"class":206},[186,161287,32241],{"class":202},[186,161289,161290,161292,161294,161296,161298,161300,161302,161304,161306],{"class":188,"line":49},[186,161291,4667],{"class":669},[186,161293,10963],{"class":202},[186,161295,27500],{"class":669},[186,161297,33898],{"class":206},[186,161299,832],{"class":202},[186,161301,1829],{"class":206},[186,161303,13898],{"class":202},[186,161305,1904],{"class":206},[186,161307,32241],{"class":202},[186,161309,161310,161312,161314,161316,161319,161321,161323,161325,161328,161330,161332,161334,161336],{"class":188,"line":219},[186,161311,33906],{"class":206},[186,161313,832],{"class":202},[186,161315,1673],{"class":669},[186,161317,161318],{"class":532},"\"i=",[186,161320,2504],{"class":206},[186,161322,2051],{"class":202},[186,161324,2553],{"class":206},[186,161326,161327],{"class":532},", j=",[186,161329,2504],{"class":206},[186,161331,2077],{"class":202},[186,161333,2553],{"class":206},[186,161335,1862],{"class":532},[186,161337,1629],{"class":202},[169,161339,161340],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161342,161344],{"id":161343},"_410-九九乘法表","4.10 九九乘法表",[176,161346,161348],{"className":31833,"code":161347,"language":31835,"meta":181,"style":181},"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",[183,161349,161350,161370,161393,161445],{"__ignoreMap":181},[186,161351,161352,161354,161356,161358,161360,161362,161364,161366,161368],{"class":188,"line":189},[186,161353,4491],{"class":669},[186,161355,10901],{"class":202},[186,161357,27500],{"class":669},[186,161359,33898],{"class":206},[186,161361,832],{"class":202},[186,161363,1829],{"class":206},[186,161365,13898],{"class":202},[186,161367,2056],{"class":206},[186,161369,32241],{"class":202},[186,161371,161372,161374,161376,161378,161380,161382,161384,161387,161389,161391],{"class":188,"line":49},[186,161373,4667],{"class":669},[186,161375,10963],{"class":202},[186,161377,27500],{"class":669},[186,161379,33898],{"class":206},[186,161381,832],{"class":202},[186,161383,1829],{"class":206},[186,161385,161386],{"class":202},", i ",[186,161388,2091],{"class":669},[186,161390,26577],{"class":206},[186,161392,32241],{"class":202},[186,161394,161395,161397,161399,161401,161403,161405,161407,161409,161411,161413,161415,161417,161419,161421,161423,161425,161427,161429,161431,161433,161435,161437,161439,161441,161443],{"class":188,"line":219},[186,161396,33906],{"class":206},[186,161398,832],{"class":202},[186,161400,1673],{"class":669},[186,161402,1862],{"class":532},[186,161404,2504],{"class":206},[186,161406,2077],{"class":202},[186,161408,2553],{"class":206},[186,161410,2065],{"class":532},[186,161412,2504],{"class":206},[186,161414,2051],{"class":202},[186,161416,2553],{"class":206},[186,161418,529],{"class":532},[186,161420,2504],{"class":206},[186,161422,101579],{"class":202},[186,161424,2065],{"class":669},[186,161426,4876],{"class":202},[186,161428,2553],{"class":206},[186,161430,1862],{"class":532},[186,161432,13898],{"class":202},[186,161434,47255],{"class":835},[186,161436,529],{"class":669},[186,161438,1862],{"class":532},[186,161440,2707],{"class":206},[186,161442,1862],{"class":532},[186,161444,1629],{"class":202},[186,161446,161447,161449],{"class":188,"line":225},[186,161448,32754],{"class":206},[186,161450,3443],{"class":202},[169,161452,161453],{},"关键点：",[34,161455,161456,161462,161468,161474],{},[22,161457,161458,161459,161461],{},"外层 ",[183,161460,2051],{}," 控制行。",[22,161463,161464,161465,161467],{},"内层 ",[183,161466,2077],{}," 控制列。",[22,161469,161470,161471,161473],{},"每行结束后用 ",[183,161472,147669],{}," 换行。",[22,161475,161476,161479],{},[183,161477,161478],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161481,161483],{"id":161482},"_411-循环else","4.11 循环else",[169,161485,161486,161487,161489,161490,161492,161493,161495],{},"Python 的循环可以带 ",[183,161488,3169],{},"。当循环正常结束时执行 ",[183,161491,3169],{},"，如果被 ",[183,161494,3520],{}," 打断，则不执行。",[176,161497,161499],{"className":31833,"code":161498,"language":31835,"meta":181,"style":181},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[183,161500,161501,161521,161533,161544,161548,161554],{"__ignoreMap":181},[186,161502,161503,161505,161507,161509,161511,161513,161515,161517,161519],{"class":188,"line":189},[186,161504,4491],{"class":669},[186,161506,10901],{"class":202},[186,161508,27500],{"class":669},[186,161510,33898],{"class":206},[186,161512,832],{"class":202},[186,161514,1829],{"class":206},[186,161516,13898],{"class":202},[186,161518,1954],{"class":206},[186,161520,32241],{"class":202},[186,161522,161523,161525,161527,161529,161531],{"class":188,"line":49},[186,161524,4567],{"class":669},[186,161526,10901],{"class":202},[186,161528,4415],{"class":669},[186,161530,3505],{"class":206},[186,161532,5205],{"class":202},[186,161534,161535,161537,161539,161542],{"class":188,"line":219},[186,161536,33906],{"class":206},[186,161538,832],{"class":202},[186,161540,161541],{"class":532},"\"找到了\"",[186,161543,1629],{"class":202},[186,161545,161546],{"class":188,"line":225},[186,161547,33082],{"class":669},[186,161549,161550,161552],{"class":188,"line":242},[186,161551,3169],{"class":669},[186,161553,5205],{"class":202},[186,161555,161556,161558,161560,161563],{"class":188,"line":248},[186,161557,32754],{"class":206},[186,161559,832],{"class":202},[186,161561,161562],{"class":532},"\"没找到\"",[186,161564,1629],{"class":202},[169,161566,161567],{},"常用于搜索。",[176,161569,161571],{"className":31833,"code":161570,"language":31835,"meta":181,"style":181},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[183,161572,161573,161594,161603,161607,161619,161630,161640,161644,161650],{"__ignoreMap":181},[186,161574,161575,161578,161580,161582,161584,161586,161588,161590,161592],{"class":188,"line":189},[186,161576,161577],{"class":202},"names ",[186,161579,529],{"class":669},[186,161581,53673],{"class":202},[186,161583,151085],{"class":532},[186,161585,13898],{"class":202},[186,161587,152133],{"class":532},[186,161589,13898],{"class":202},[186,161591,160928],{"class":532},[186,161593,34701],{"class":202},[186,161595,161596,161598,161600],{"class":188,"line":49},[186,161597,113009],{"class":202},[186,161599,529],{"class":669},[186,161601,161602],{"class":532}," \"小李\"\n",[186,161604,161605],{"class":188,"line":219},[186,161606,3867],{"emptyLinePlaceholder":1551},[186,161608,161609,161611,161614,161616],{"class":188,"line":225},[186,161610,4491],{"class":669},[186,161612,161613],{"class":202}," name ",[186,161615,27500],{"class":669},[186,161617,161618],{"class":202}," names:\n",[186,161620,161621,161623,161625,161627],{"class":188,"line":242},[186,161622,4567],{"class":669},[186,161624,161613],{"class":202},[186,161626,4415],{"class":669},[186,161628,161629],{"class":202}," target:\n",[186,161631,161632,161634,161636,161638],{"class":188,"line":248},[186,161633,33906],{"class":206},[186,161635,832],{"class":202},[186,161637,161541],{"class":532},[186,161639,1629],{"class":202},[186,161641,161642],{"class":188,"line":265},[186,161643,33082],{"class":669},[186,161645,161646,161648],{"class":188,"line":271},[186,161647,3169],{"class":669},[186,161649,5205],{"class":202},[186,161651,161652,161654,161656,161658],{"class":188,"line":288},[186,161653,32754],{"class":206},[186,161655,832],{"class":202},[186,161657,161562],{"class":532},[186,161659,1629],{"class":202},[14,161661,161663],{"id":161662},"_412-小案例登录重试","4.12 小案例：登录重试",[169,161665,124723],{},[34,161667,161668,161671,161674],{},[22,161669,161670],{},"用户最多输入 3 次密码。",[22,161672,161673],{},"密码正确则登录成功。",[22,161675,161676],{},"3 次都错误则锁定账号。",[169,161678,11498],{},[176,161680,161682],{"className":31833,"code":161681,"language":31835,"meta":181,"style":181},"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",[183,161683,161684,161694,161698,161714,161730,161734,161746,161757,161761,161767,161792,161798],{"__ignoreMap":181},[186,161685,161686,161689,161691],{"class":188,"line":189},[186,161687,161688],{"class":202},"password ",[186,161690,529],{"class":669},[186,161692,161693],{"class":532}," \"123456\"\n",[186,161695,161696],{"class":188,"line":49},[186,161697,3867],{"emptyLinePlaceholder":1551},[186,161699,161700,161702,161704,161706,161708,161710,161712],{"class":188,"line":219},[186,161701,4491],{"class":669},[186,161703,10901],{"class":202},[186,161705,27500],{"class":669},[186,161707,33898],{"class":206},[186,161709,832],{"class":202},[186,161711,1691],{"class":206},[186,161713,32241],{"class":202},[186,161715,161716,161719,161721,161723,161725,161728],{"class":188,"line":225},[186,161717,161718],{"class":202},"    user_password ",[186,161720,529],{"class":669},[186,161722,62046],{"class":206},[186,161724,832],{"class":202},[186,161726,161727],{"class":532},"\"请输入密码:\"",[186,161729,1629],{"class":202},[186,161731,161732],{"class":188,"line":242},[186,161733,3867],{"emptyLinePlaceholder":1551},[186,161735,161736,161738,161741,161743],{"class":188,"line":248},[186,161737,4567],{"class":669},[186,161739,161740],{"class":202}," user_password ",[186,161742,4415],{"class":669},[186,161744,161745],{"class":202}," password:\n",[186,161747,161748,161750,161752,161755],{"class":188,"line":265},[186,161749,33906],{"class":206},[186,161751,832],{"class":202},[186,161753,161754],{"class":532},"\"登录成功\"",[186,161756,1629],{"class":202},[186,161758,161759],{"class":188,"line":271},[186,161760,33082],{"class":669},[186,161762,161763,161765],{"class":188,"line":288},[186,161764,159219],{"class":669},[186,161766,5205],{"class":202},[186,161768,161769,161771,161773,161775,161778,161781,161783,161785,161787,161790],{"class":188,"line":294},[186,161770,33906],{"class":206},[186,161772,832],{"class":202},[186,161774,1673],{"class":669},[186,161776,161777],{"class":532},"\"密码错误，还剩",[186,161779,161780],{"class":206},"{2",[186,161782,53718],{"class":669},[186,161784,4498],{"class":202},[186,161786,2553],{"class":206},[186,161788,161789],{"class":532},"次机会\"",[186,161791,1629],{"class":202},[186,161793,161794,161796],{"class":188,"line":1212},[186,161795,3169],{"class":669},[186,161797,5205],{"class":202},[186,161799,161800,161802,161804,161807],{"class":188,"line":1223},[186,161801,32754],{"class":206},[186,161803,832],{"class":202},[186,161805,161806],{"class":532},"\"账号已锁定\"",[186,161808,1629],{"class":202},[14,161810,161812],{"id":161811},"_413-小案例菜单程序","4.13 小案例：菜单程序",[176,161814,161816],{"className":31833,"code":161815,"language":31835,"meta":181,"style":181},"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",[183,161817,161818,161826,161837,161848,161859,161870,161881,161885,161900,161904,161916,161927,161939,161950,161962,161973,161985,161995,161999,162005],{"__ignoreMap":181},[186,161819,161820,161822,161824],{"class":188,"line":189},[186,161821,110094],{"class":669},[186,161823,96723],{"class":206},[186,161825,5205],{"class":202},[186,161827,161828,161830,161832,161835],{"class":188,"line":49},[186,161829,32754],{"class":206},[186,161831,832],{"class":202},[186,161833,161834],{"class":532},"\"====== 菜单 ======\"",[186,161836,1629],{"class":202},[186,161838,161839,161841,161843,161846],{"class":188,"line":219},[186,161840,32754],{"class":206},[186,161842,832],{"class":202},[186,161844,161845],{"class":532},"\"1. 查询余额\"",[186,161847,1629],{"class":202},[186,161849,161850,161852,161854,161857],{"class":188,"line":225},[186,161851,32754],{"class":206},[186,161853,832],{"class":202},[186,161855,161856],{"class":532},"\"2. 存款\"",[186,161858,1629],{"class":202},[186,161860,161861,161863,161865,161868],{"class":188,"line":242},[186,161862,32754],{"class":206},[186,161864,832],{"class":202},[186,161866,161867],{"class":532},"\"3. 取款\"",[186,161869,1629],{"class":202},[186,161871,161872,161874,161876,161879],{"class":188,"line":248},[186,161873,32754],{"class":206},[186,161875,832],{"class":202},[186,161877,161878],{"class":532},"\"0. 退出\"",[186,161880,1629],{"class":202},[186,161882,161883],{"class":188,"line":265},[186,161884,3867],{"emptyLinePlaceholder":1551},[186,161886,161887,161890,161892,161894,161896,161898],{"class":188,"line":271},[186,161888,161889],{"class":202},"    choice ",[186,161891,529],{"class":669},[186,161893,62046],{"class":206},[186,161895,832],{"class":202},[186,161897,154270],{"class":532},[186,161899,1629],{"class":202},[186,161901,161902],{"class":188,"line":288},[186,161903,3867],{"emptyLinePlaceholder":1551},[186,161905,161906,161908,161910,161912,161914],{"class":188,"line":294},[186,161907,4567],{"class":669},[186,161909,154283],{"class":202},[186,161911,4415],{"class":669},[186,161913,154288],{"class":532},[186,161915,5205],{"class":202},[186,161917,161918,161920,161922,161925],{"class":188,"line":1212},[186,161919,33906],{"class":206},[186,161921,832],{"class":202},[186,161923,161924],{"class":532},"\"余额为1000元\"",[186,161926,1629],{"class":202},[186,161928,161929,161931,161933,161935,161937],{"class":188,"line":1223},[186,161930,40747],{"class":669},[186,161932,154283],{"class":202},[186,161934,4415],{"class":669},[186,161936,154307],{"class":532},[186,161938,5205],{"class":202},[186,161940,161941,161943,161945,161948],{"class":188,"line":1236},[186,161942,33906],{"class":206},[186,161944,832],{"class":202},[186,161946,161947],{"class":532},"\"存款功能\"",[186,161949,1629],{"class":202},[186,161951,161952,161954,161956,161958,161960],{"class":188,"line":3096},[186,161953,40747],{"class":669},[186,161955,154283],{"class":202},[186,161957,4415],{"class":669},[186,161959,154325],{"class":532},[186,161961,5205],{"class":202},[186,161963,161964,161966,161968,161971],{"class":188,"line":3110},[186,161965,33906],{"class":206},[186,161967,832],{"class":202},[186,161969,161970],{"class":532},"\"取款功能\"",[186,161972,1629],{"class":202},[186,161974,161975,161977,161979,161981,161983],{"class":188,"line":3115},[186,161976,40747],{"class":669},[186,161978,154283],{"class":202},[186,161980,4415],{"class":669},[186,161982,154379],{"class":532},[186,161984,5205],{"class":202},[186,161986,161987,161989,161991,161993],{"class":188,"line":3121},[186,161988,33906],{"class":206},[186,161990,832],{"class":202},[186,161992,154390],{"class":532},[186,161994,1629],{"class":202},[186,161996,161997],{"class":188,"line":3142},[186,161998,33082],{"class":669},[186,162000,162001,162003],{"class":188,"line":3147},[186,162002,159219],{"class":669},[186,162004,5205],{"class":202},[186,162006,162007,162009,162011,162013],{"class":188,"line":3161},[186,162008,33906],{"class":206},[186,162010,832],{"class":202},[186,162012,154411],{"class":532},[186,162014,1629],{"class":202},[169,162016,162017,162018,162020,162021,913],{},"菜单类程序通常使用 ",[183,162019,160719],{},"，用户选择退出时 ",[183,162022,3520],{},[14,162024,162026],{"id":162025},"_414-易错点","4.14 易错点",[34,162028,162029,162034,162040,162048,162054],{},[22,162030,162031,162033],{},[183,162032,110094],{}," 循环必须更新控制变量。",[22,162035,162036,162039],{},[183,162037,162038],{},"range(1, 10)"," 不包含 10。",[22,162041,162042,162044,162045,162047],{},[183,162043,3520],{}," 结束整个循环，",[183,162046,155869],{}," 只跳过本轮。",[22,162049,162050,162051,162053],{},"嵌套循环中，",[183,162052,3520],{}," 只跳出当前所在的一层循环。",[22,162055,162056],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162058,162060],{"id":162059},"_415-本章练习","4.15 本章练习",[34,162062,162063,162066,162069,162072,162075],{},[22,162064,162065],{},"输出 1 到 100。",[22,162067,162068],{},"计算 1 到 100 的偶数和。",[22,162070,162071],{},"输出 100 以内能被 3 和 5 同时整除的数。",[22,162073,162074],{},"编写猜数字游戏，限制最多猜 7 次。",[22,162076,162077],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1524,162079,162080],{},"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":181,"searchDepth":49,"depth":49,"links":162082},[162083,162084,162085,162086,162087,162091,162092,162093,162094,162095,162096,162097,162098,162099,162100],{"id":160339,"depth":49,"text":160340},{"id":160369,"depth":49,"text":160370},{"id":160458,"depth":49,"text":160459},{"id":160552,"depth":49,"text":160553},{"id":160726,"depth":49,"text":160727,"children":162088},[162089,162090],{"id":160730,"depth":219,"text":160731},{"id":160794,"depth":219,"text":160795},{"id":160858,"depth":49,"text":160859},{"id":160953,"depth":49,"text":160954},{"id":161062,"depth":49,"text":161063},{"id":161258,"depth":49,"text":161259},{"id":161343,"depth":49,"text":161344},{"id":161482,"depth":49,"text":161483},{"id":161662,"depth":49,"text":161663},{"id":161811,"depth":49,"text":161812},{"id":162025,"depth":49,"text":162026},{"id":162059,"depth":49,"text":162060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160331,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162107,"title":162108,"body":162109,"description":1548,"extension":1549,"meta":164114,"navigation":1551,"path":164115,"seo":164116,"stem":164117,"__hash__":164118},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162110,"toc":164094},[162111,162114,162118,162121,162124,162138,162141,162155,162159,162161,162180,162182,162229,162231,162245,162249,162323,162326,162330,162333,162392,162400,162403,162456,162459,162463,162468,162523,162531,162581,162585,162590,162598,162697,162703,162707,162712,162715,162726,162767,162780,162784,162787,162823,162826,162839,162842,162902,162906,162910,162913,162964,162968,162971,163018,163024,163090,163093,163097,163100,163216,163219,163223,163226,163332,163336,163339,163377,163380,163422,163425,163485,163488,163492,163956,163959,163963,163990,163996,164057,164061,164091],[10,162112,162108],{"id":162113},"_5-函数基础",[14,162115,162117],{"id":162116},"_51-为什么需要函数","5.1 为什么需要函数",[169,162119,162120],{},"函数用于封装一段可以重复使用的代码。",[169,162122,162123],{},"不使用函数的问题：",[34,162125,162126,162129,162132,162135],{},[22,162127,162128],{},"重复代码多。",[22,162130,162131],{},"修改逻辑时容易漏改。",[22,162133,162134],{},"主流程不清晰。",[22,162136,162137],{},"程序越写越长，难以维护。",[169,162139,162140],{},"使用函数后的好处：",[34,162142,162143,162146,162149,162152],{},[22,162144,162145],{},"提高复用性。",[22,162147,162148],{},"提高可读性。",[22,162150,162151],{},"便于调试。",[22,162153,162154],{},"便于分工。",[14,162156,162158],{"id":162157},"_52-函数定义","5.2 函数定义",[169,162160,6647],{},[176,162162,162164],{"className":31833,"code":162163,"language":31835,"meta":181,"style":181},"def 函数名():\n    函数体\n",[183,162165,162166,162175],{"__ignoreMap":181},[186,162167,162168,162170,162173],{"class":188,"line":189},[186,162169,33402],{"class":669},[186,162171,162172],{"class":198}," 函数名",[186,162174,33408],{"class":202},[186,162176,162177],{"class":188,"line":49},[186,162178,162179],{"class":202},"    函数体\n",[169,162181,16597],{},[176,162183,162185],{"className":31833,"code":162184,"language":31835,"meta":181,"style":181},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[183,162186,162187,162196,162206,162216,162220,162224],{"__ignoreMap":181},[186,162188,162189,162191,162194],{"class":188,"line":189},[186,162190,33402],{"class":669},[186,162192,162193],{"class":198}," say_hello",[186,162195,33408],{"class":202},[186,162197,162198,162200,162202,162204],{"class":188,"line":49},[186,162199,32754],{"class":206},[186,162201,832],{"class":202},[186,162203,7307],{"class":532},[186,162205,1629],{"class":202},[186,162207,162208,162210,162212,162214],{"class":188,"line":219},[186,162209,32754],{"class":206},[186,162211,832],{"class":202},[186,162213,147836],{"class":532},[186,162215,1629],{"class":202},[186,162217,162218],{"class":188,"line":225},[186,162219,3867],{"emptyLinePlaceholder":1551},[186,162221,162222],{"class":188,"line":242},[186,162223,3867],{"emptyLinePlaceholder":1551},[186,162225,162226],{"class":188,"line":248},[186,162227,162228],{"class":202},"say_hello()\n",[169,162230,10488],{},[34,162232,162233,162236,162239,162242],{},[22,162234,162235],{},"函数必须先定义，再调用。",[22,162237,162238],{},"函数名遵循变量命名规则。",[22,162240,162241],{},"函数体需要缩进。",[22,162243,162244],{},"函数不调用就不会执行。",[14,162246,162248],{"id":162247},"_53-函数调用","5.3 函数调用",[176,162250,162252],{"className":31833,"code":162251,"language":31835,"meta":181,"style":181},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[183,162253,162254,162263,162274,162285,162296,162306,162310,162314,162319],{"__ignoreMap":181},[186,162255,162256,162258,162261],{"class":188,"line":189},[186,162257,33402],{"class":669},[186,162259,162260],{"class":198}," print_menu",[186,162262,33408],{"class":202},[186,162264,162265,162267,162269,162272],{"class":188,"line":49},[186,162266,32754],{"class":206},[186,162268,832],{"class":202},[186,162270,162271],{"class":532},"\"1. 查询\"",[186,162273,1629],{"class":202},[186,162275,162276,162278,162280,162283],{"class":188,"line":219},[186,162277,32754],{"class":206},[186,162279,832],{"class":202},[186,162281,162282],{"class":532},"\"2. 添加\"",[186,162284,1629],{"class":202},[186,162286,162287,162289,162291,162294],{"class":188,"line":225},[186,162288,32754],{"class":206},[186,162290,832],{"class":202},[186,162292,162293],{"class":532},"\"3. 删除\"",[186,162295,1629],{"class":202},[186,162297,162298,162300,162302,162304],{"class":188,"line":242},[186,162299,32754],{"class":206},[186,162301,832],{"class":202},[186,162303,161878],{"class":532},[186,162305,1629],{"class":202},[186,162307,162308],{"class":188,"line":248},[186,162309,3867],{"emptyLinePlaceholder":1551},[186,162311,162312],{"class":188,"line":265},[186,162313,3867],{"emptyLinePlaceholder":1551},[186,162315,162316],{"class":188,"line":271},[186,162317,162318],{"class":202},"print_menu()\n",[186,162320,162321],{"class":188,"line":288},[186,162322,162318],{"class":202},[169,162324,162325],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162327,162329],{"id":162328},"_54-参数","5.4 参数",[169,162331,162332],{},"参数用于向函数传递数据。",[176,162334,162336],{"className":31833,"code":162335,"language":31835,"meta":181,"style":181},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[183,162337,162338,162347,162367,162371,162375,162384],{"__ignoreMap":181},[186,162339,162340,162342,162344],{"class":188,"line":189},[186,162341,33402],{"class":669},[186,162343,162193],{"class":198},[186,162345,162346],{"class":202},"(name):\n",[186,162348,162349,162351,162353,162355,162357,162359,162361,162363,162365],{"class":188,"line":49},[186,162350,32754],{"class":206},[186,162352,832],{"class":202},[186,162354,1673],{"class":669},[186,162356,158251],{"class":532},[186,162358,2504],{"class":206},[186,162360,81242],{"class":202},[186,162362,2553],{"class":206},[186,162364,1862],{"class":532},[186,162366,1629],{"class":202},[186,162368,162369],{"class":188,"line":219},[186,162370,3867],{"emptyLinePlaceholder":1551},[186,162372,162373],{"class":188,"line":225},[186,162374,3867],{"emptyLinePlaceholder":1551},[186,162376,162377,162380,162382],{"class":188,"line":242},[186,162378,162379],{"class":202},"say_hello(",[186,162381,151085],{"class":532},[186,162383,1629],{"class":202},[186,162385,162386,162388,162390],{"class":188,"line":248},[186,162387,162379],{"class":202},[186,162389,152133],{"class":532},[186,162391,1629],{"class":202},[169,162393,162394,162396,162397,162399],{},[183,162395,81242],{}," 是形参，",[183,162398,151085],{}," 是实参。",[169,162401,162402],{},"多个参数：",[176,162404,162406],{"className":31833,"code":162405,"language":31835,"meta":181,"style":181},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[183,162407,162408,162416,162429,162435,162439,162443],{"__ignoreMap":181},[186,162409,162410,162412,162414],{"class":188,"line":189},[186,162411,33402],{"class":669},[186,162413,6673],{"class":198},[186,162415,152290],{"class":202},[186,162417,162418,162421,162423,162425,162427],{"class":188,"line":49},[186,162419,162420],{"class":202},"    result ",[186,162422,529],{"class":669},[186,162424,12332],{"class":202},[186,162426,2091],{"class":669},[186,162428,152301],{"class":202},[186,162430,162431,162433],{"class":188,"line":219},[186,162432,32754],{"class":206},[186,162434,78018],{"class":202},[186,162436,162437],{"class":188,"line":225},[186,162438,3867],{"emptyLinePlaceholder":1551},[186,162440,162441],{"class":188,"line":242},[186,162442,3867],{"emptyLinePlaceholder":1551},[186,162444,162445,162448,162450,162452,162454],{"class":188,"line":248},[186,162446,162447],{"class":202},"add(",[186,162449,2056],{"class":206},[186,162451,13898],{"class":202},[186,162453,801],{"class":206},[186,162455,1629],{"class":202},[169,162457,162458],{},"调用时参数数量必须匹配。",[14,162460,162462],{"id":162461},"_55-返回值","5.5 返回值",[169,162464,162465,162467],{},[183,162466,18507],{}," 用于把函数内部的结果返回给调用者。",[176,162469,162471],{"className":31833,"code":162470,"language":31835,"meta":181,"style":181},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[183,162472,162473,162481,162491,162495,162499,162517],{"__ignoreMap":181},[186,162474,162475,162477,162479],{"class":188,"line":189},[186,162476,33402],{"class":669},[186,162478,6673],{"class":198},[186,162480,152290],{"class":202},[186,162482,162483,162485,162487,162489],{"class":188,"line":49},[186,162484,5556],{"class":669},[186,162486,12332],{"class":202},[186,162488,2091],{"class":669},[186,162490,152301],{"class":202},[186,162492,162493],{"class":188,"line":219},[186,162494,3867],{"emptyLinePlaceholder":1551},[186,162496,162497],{"class":188,"line":225},[186,162498,3867],{"emptyLinePlaceholder":1551},[186,162500,162501,162504,162506,162509,162511,162513,162515],{"class":188,"line":242},[186,162502,162503],{"class":202},"result ",[186,162505,529],{"class":669},[186,162507,162508],{"class":202}," add(",[186,162510,2056],{"class":206},[186,162512,13898],{"class":202},[186,162514,801],{"class":206},[186,162516,1629],{"class":202},[186,162518,162519,162521],{"class":188,"line":248},[186,162520,31870],{"class":206},[186,162522,78018],{"class":202},[169,162524,162525,162526,162528,162529,913],{},"如果函数没有写 ",[183,162527,18507],{},"，默认返回 ",[183,162530,97117],{},[176,162532,162534],{"className":31833,"code":162533,"language":31835,"meta":181,"style":181},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[183,162535,162536,162544,162554,162558,162562,162571],{"__ignoreMap":181},[186,162537,162538,162540,162542],{"class":188,"line":189},[186,162539,33402],{"class":669},[186,162541,162193],{"class":198},[186,162543,33408],{"class":202},[186,162545,162546,162548,162550,162552],{"class":188,"line":49},[186,162547,32754],{"class":206},[186,162549,832],{"class":202},[186,162551,7307],{"class":532},[186,162553,1629],{"class":202},[186,162555,162556],{"class":188,"line":219},[186,162557,3867],{"emptyLinePlaceholder":1551},[186,162559,162560],{"class":188,"line":225},[186,162561,3867],{"emptyLinePlaceholder":1551},[186,162563,162564,162566,162568],{"class":188,"line":242},[186,162565,162503],{"class":202},[186,162567,529],{"class":669},[186,162569,162570],{"class":202}," say_hello()\n",[186,162572,162573,162575,162578],{"class":188,"line":248},[186,162574,31870],{"class":206},[186,162576,162577],{"class":202},"(result)  ",[186,162579,162580],{"class":192},"# None\n",[14,162582,162584],{"id":162583},"_56-return的作用","5.6 return的作用",[169,162586,162587,162589],{},[183,162588,18507],{}," 有两个作用：",[34,162591,162592,162595],{},[22,162593,162594],{},"返回结果。",[22,162596,162597],{},"结束函数。",[176,162599,162601],{"className":31833,"code":162600,"language":31835,"meta":181,"style":181},"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",[183,162602,162603,162613,162625,162632,162636,162648,162655,162659,162666,162670,162674,162685],{"__ignoreMap":181},[186,162604,162605,162607,162610],{"class":188,"line":189},[186,162606,33402],{"class":669},[186,162608,162609],{"class":198}," check_age",[186,162611,162612],{"class":202},"(age):\n",[186,162614,162615,162617,162619,162621,162623],{"class":188,"line":49},[186,162616,4567],{"class":669},[186,162618,17168],{"class":202},[186,162620,520],{"class":669},[186,162622,5559],{"class":206},[186,162624,5205],{"class":202},[186,162626,162627,162629],{"class":188,"line":219},[186,162628,16214],{"class":669},[186,162630,162631],{"class":532}," \"年龄不合法\"\n",[186,162633,162634],{"class":188,"line":225},[186,162635,3867],{"emptyLinePlaceholder":1551},[186,162637,162638,162640,162642,162644,162646],{"class":188,"line":242},[186,162639,4567],{"class":669},[186,162641,17168],{"class":202},[186,162643,3178],{"class":669},[186,162645,157482],{"class":206},[186,162647,5205],{"class":202},[186,162649,162650,162652],{"class":188,"line":248},[186,162651,16214],{"class":669},[186,162653,162654],{"class":532}," \"成年人\"\n",[186,162656,162657],{"class":188,"line":265},[186,162658,3867],{"emptyLinePlaceholder":1551},[186,162660,162661,162663],{"class":188,"line":271},[186,162662,5556],{"class":669},[186,162664,162665],{"class":532}," \"未成年人\"\n",[186,162667,162668],{"class":188,"line":288},[186,162669,3867],{"emptyLinePlaceholder":1551},[186,162671,162672],{"class":188,"line":294},[186,162673,3867],{"emptyLinePlaceholder":1551},[186,162675,162676,162678,162681,162683],{"class":188,"line":1212},[186,162677,31870],{"class":206},[186,162679,162680],{"class":202},"(check_age(",[186,162682,801],{"class":206},[186,162684,31952],{"class":202},[186,162686,162687,162689,162691,162693,162695],{"class":188,"line":1223},[186,162688,31870],{"class":206},[186,162690,162680],{"class":202},[186,162692,2142],{"class":669},[186,162694,1829],{"class":206},[186,162696,31952],{"class":202},[169,162698,162699,162700,162702],{},"函数执行到 ",[183,162701,18507],{}," 后，后面的代码不会继续执行。",[14,162704,162706],{"id":162705},"_57-none","5.7 None",[169,162708,162709,162711],{},[183,162710,97117],{}," 表示空值或没有结果。",[169,162713,162714],{},"常见使用场景：",[34,162716,162717,162720,162723],{},[22,162718,162719],{},"函数没有返回值。",[22,162721,162722],{},"变量暂时没有具体值。",[22,162724,162725],{},"表示查询不到结果。",[176,162727,162729],{"className":31833,"code":162728,"language":31835,"meta":181,"style":181},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[183,162730,162731,162739,162743,162756],{"__ignoreMap":181},[186,162732,162733,162735,162737],{"class":188,"line":189},[186,162734,162503],{"class":202},[186,162736,529],{"class":669},[186,162738,153369],{"class":206},[186,162740,162741],{"class":188,"line":49},[186,162742,3867],{"emptyLinePlaceholder":1551},[186,162744,162745,162747,162750,162752,162754],{"class":188,"line":219},[186,162746,3003],{"class":669},[186,162748,162749],{"class":202}," result ",[186,162751,40381],{"class":669},[186,162753,40387],{"class":206},[186,162755,5205],{"class":202},[186,162757,162758,162760,162762,162765],{"class":188,"line":225},[186,162759,32754],{"class":206},[186,162761,832],{"class":202},[186,162763,162764],{"class":532},"\"没有数据\"",[186,162766,1629],{"class":202},[169,162768,162769,162770,162772,162773,162776,162777,913],{},"判断 ",[183,162771,97117],{}," 推荐使用 ",[183,162774,162775],{},"is None","，不要写成 ",[183,162778,162779],{},"== None",[14,162781,162783],{"id":162782},"_58-函数文档字符串","5.8 函数文档字符串",[169,162785,162786],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[176,162788,162790],{"className":31833,"code":162789,"language":31835,"meta":181,"style":181},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[183,162791,162792,162802,162807],{"__ignoreMap":181},[186,162793,162794,162796,162799],{"class":188,"line":189},[186,162795,33402],{"class":669},[186,162797,162798],{"class":198}," calculate_bmi",[186,162800,162801],{"class":202},"(weight, height):\n",[186,162803,162804],{"class":188,"line":49},[186,162805,162806],{"class":532},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[186,162808,162809,162811,162814,162816,162819,162821],{"class":188,"line":219},[186,162810,5556],{"class":669},[186,162812,162813],{"class":202}," weight ",[186,162815,2194],{"class":669},[186,162817,162818],{"class":202}," height ",[186,162820,12124],{"class":669},[186,162822,49177],{"class":206},[169,162824,162825],{},"查看说明：",[176,162827,162829],{"className":31833,"code":162828,"language":31835,"meta":181,"style":181},"help(calculate_bmi)\n",[183,162830,162831],{"__ignoreMap":181},[186,162832,162833,162836],{"class":188,"line":189},[186,162834,162835],{"class":206},"help",[186,162837,162838],{"class":202},"(calculate_bmi)\n",[169,162840,162841],{},"较完整的写法：",[176,162843,162845],{"className":31833,"code":162844,"language":31835,"meta":181,"style":181},"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",[183,162846,162847,162855,162860,162865,162869,162874,162879,162884,162888],{"__ignoreMap":181},[186,162848,162849,162851,162853],{"class":188,"line":189},[186,162850,33402],{"class":669},[186,162852,162798],{"class":198},[186,162854,162801],{"class":202},[186,162856,162857],{"class":188,"line":49},[186,162858,162859],{"class":532},"    \"\"\"\n",[186,162861,162862],{"class":188,"line":219},[186,162863,162864],{"class":532},"    计算BMI。\n",[186,162866,162867],{"class":188,"line":225},[186,162868,3867],{"emptyLinePlaceholder":1551},[186,162870,162871],{"class":188,"line":242},[186,162872,162873],{"class":532},"    :param weight: 体重，单位kg\n",[186,162875,162876],{"class":188,"line":248},[186,162877,162878],{"class":532},"    :param height: 身高，单位m\n",[186,162880,162881],{"class":188,"line":265},[186,162882,162883],{"class":532},"    :return: BMI数值\n",[186,162885,162886],{"class":188,"line":271},[186,162887,162859],{"class":532},[186,162889,162890,162892,162894,162896,162898,162900],{"class":188,"line":288},[186,162891,5556],{"class":669},[186,162893,162813],{"class":202},[186,162895,2194],{"class":669},[186,162897,162818],{"class":202},[186,162899,12124],{"class":669},[186,162901,49177],{"class":206},[14,162903,162905],{"id":162904},"_59-变量作用域","5.9 变量作用域",[29,162907,162909],{"id":162908},"_591-局部变量","5.9.1 局部变量",[169,162911,162912],{},"在函数内部定义的变量，只能在函数内部使用。",[176,162914,162916],{"className":31833,"code":162915,"language":31835,"meta":181,"style":181},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[183,162917,162918,162927,162935,162941,162945,162949,162954],{"__ignoreMap":181},[186,162919,162920,162922,162925],{"class":188,"line":189},[186,162921,33402],{"class":669},[186,162923,162924],{"class":198}," test",[186,162926,33408],{"class":202},[186,162928,162929,162931,162933],{"class":188,"line":49},[186,162930,47047],{"class":202},[186,162932,529],{"class":669},[186,162934,59869],{"class":206},[186,162936,162937,162939],{"class":188,"line":219},[186,162938,32754],{"class":206},[186,162940,1636],{"class":202},[186,162942,162943],{"class":188,"line":225},[186,162944,3867],{"emptyLinePlaceholder":1551},[186,162946,162947],{"class":188,"line":242},[186,162948,3867],{"emptyLinePlaceholder":1551},[186,162950,162951],{"class":188,"line":248},[186,162952,162953],{"class":202},"test()\n",[186,162955,162956,162958,162961],{"class":188,"line":265},[186,162957,31870],{"class":206},[186,162959,162960],{"class":202},"(num)  ",[186,162962,162963],{"class":192},"# 报错\n",[29,162965,162967],{"id":162966},"_592-全局变量","5.9.2 全局变量",[169,162969,162970],{},"在函数外部定义的变量，可以在函数内部读取。",[176,162972,162974],{"className":31833,"code":162973,"language":31835,"meta":181,"style":181},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[183,162975,162976,162984,162988,162992,163000,163006,163010,163014],{"__ignoreMap":181},[186,162977,162978,162980,162982],{"class":188,"line":189},[186,162979,147733],{"class":202},[186,162981,529],{"class":669},[186,162983,150550],{"class":532},[186,162985,162986],{"class":188,"line":49},[186,162987,3867],{"emptyLinePlaceholder":1551},[186,162989,162990],{"class":188,"line":219},[186,162991,3867],{"emptyLinePlaceholder":1551},[186,162993,162994,162996,162998],{"class":188,"line":225},[186,162995,33402],{"class":669},[186,162997,162193],{"class":198},[186,162999,33408],{"class":202},[186,163001,163002,163004],{"class":188,"line":242},[186,163003,32754],{"class":206},[186,163005,151857],{"class":202},[186,163007,163008],{"class":188,"line":248},[186,163009,3867],{"emptyLinePlaceholder":1551},[186,163011,163012],{"class":188,"line":265},[186,163013,3867],{"emptyLinePlaceholder":1551},[186,163015,163016],{"class":188,"line":271},[186,163017,162228],{"class":202},[169,163019,163020,163021,913],{},"如果要在函数内部修改全局变量，需要 ",[183,163022,163023],{},"global",[176,163025,163027],{"className":31833,"code":163026,"language":31835,"meta":181,"style":181},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[183,163028,163029,163037,163041,163045,163054,163062,163070,163074,163078,163083],{"__ignoreMap":181},[186,163030,163031,163033,163035],{"class":188,"line":189},[186,163032,147888],{"class":202},[186,163034,529],{"class":669},[186,163036,48787],{"class":206},[186,163038,163039],{"class":188,"line":49},[186,163040,3867],{"emptyLinePlaceholder":1551},[186,163042,163043],{"class":188,"line":219},[186,163044,3867],{"emptyLinePlaceholder":1551},[186,163046,163047,163049,163052],{"class":188,"line":225},[186,163048,33402],{"class":669},[186,163050,163051],{"class":198}," add_count",[186,163053,33408],{"class":202},[186,163055,163056,163059],{"class":188,"line":242},[186,163057,163058],{"class":669},"    global",[186,163060,163061],{"class":202}," count\n",[186,163063,163064,163066,163068],{"class":188,"line":248},[186,163065,160630],{"class":202},[186,163067,10940],{"class":669},[186,163069,57140],{"class":206},[186,163071,163072],{"class":188,"line":265},[186,163073,3867],{"emptyLinePlaceholder":1551},[186,163075,163076],{"class":188,"line":271},[186,163077,3867],{"emptyLinePlaceholder":1551},[186,163079,163080],{"class":188,"line":288},[186,163081,163082],{"class":202},"add_count()\n",[186,163084,163085,163087],{"class":188,"line":294},[186,163086,31870],{"class":206},[186,163088,163089],{"class":202},"(count)\n",[169,163091,163092],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163094,163096],{"id":163095},"_510-函数嵌套调用","5.10 函数嵌套调用",[169,163098,163099],{},"一个函数中可以调用另一个函数。",[176,163101,163103],{"className":31833,"code":163102,"language":31835,"meta":181,"style":181},"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",[183,163104,163105,163114,163128,163132,163136,163145,163150,163170,163191,163195,163199,163203],{"__ignoreMap":181},[186,163106,163107,163109,163112],{"class":188,"line":189},[186,163108,33402],{"class":669},[186,163110,163111],{"class":198}," print_line",[186,163113,33408],{"class":202},[186,163115,163116,163118,163120,163122,163124,163126],{"class":188,"line":49},[186,163117,32754],{"class":206},[186,163119,832],{"class":202},[186,163121,33938],{"class":532},[186,163123,7981],{"class":669},[186,163125,80098],{"class":206},[186,163127,1629],{"class":202},[186,163129,163130],{"class":188,"line":219},[186,163131,3867],{"emptyLinePlaceholder":1551},[186,163133,163134],{"class":188,"line":225},[186,163135,3867],{"emptyLinePlaceholder":1551},[186,163137,163138,163140,163143],{"class":188,"line":242},[186,163139,33402],{"class":669},[186,163141,163142],{"class":198}," print_info",[186,163144,150572],{"class":202},[186,163146,163147],{"class":188,"line":248},[186,163148,163149],{"class":202},"    print_line()\n",[186,163151,163152,163154,163156,163158,163160,163162,163164,163166,163168],{"class":188,"line":265},[186,163153,32754],{"class":206},[186,163155,832],{"class":202},[186,163157,1673],{"class":669},[186,163159,157879],{"class":532},[186,163161,2504],{"class":206},[186,163163,81242],{"class":202},[186,163165,2553],{"class":206},[186,163167,1862],{"class":532},[186,163169,1629],{"class":202},[186,163171,163172,163174,163176,163178,163181,163183,163185,163187,163189],{"class":188,"line":271},[186,163173,32754],{"class":206},[186,163175,832],{"class":202},[186,163177,1673],{"class":669},[186,163179,163180],{"class":532},"\"年龄:",[186,163182,2504],{"class":206},[186,163184,71658],{"class":202},[186,163186,2553],{"class":206},[186,163188,1862],{"class":532},[186,163190,1629],{"class":202},[186,163192,163193],{"class":188,"line":288},[186,163194,163149],{"class":202},[186,163196,163197],{"class":188,"line":294},[186,163198,3867],{"emptyLinePlaceholder":1551},[186,163200,163201],{"class":188,"line":1212},[186,163202,3867],{"emptyLinePlaceholder":1551},[186,163204,163205,163208,163210,163212,163214],{"class":188,"line":1223},[186,163206,163207],{"class":202},"print_info(",[186,163209,151085],{"class":532},[186,163211,13898],{"class":202},[186,163213,2260],{"class":206},[186,163215,1629],{"class":202},[169,163217,163218],{},"这种方式可以把小功能组合成大功能。",[14,163220,163222],{"id":163221},"_511-参数检查","5.11 参数检查",[169,163224,163225],{},"函数内部可以检查参数是否合法。",[176,163227,163229],{"className":31833,"code":163228,"language":31835,"meta":181,"style":181},"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",[183,163230,163231,163240,163252,163258,163268,163272,163276,163293,163297,163309,163320,163326],{"__ignoreMap":181},[186,163232,163233,163235,163238],{"class":188,"line":189},[186,163234,33402],{"class":669},[186,163236,163237],{"class":198}," divide",[186,163239,152290],{"class":202},[186,163241,163242,163244,163246,163248,163250],{"class":188,"line":49},[186,163243,4567],{"class":669},[186,163245,12345],{"class":202},[186,163247,4415],{"class":669},[186,163249,5559],{"class":206},[186,163251,5205],{"class":202},[186,163253,163254,163256],{"class":188,"line":219},[186,163255,16214],{"class":669},[186,163257,153369],{"class":206},[186,163259,163260,163262,163264,163266],{"class":188,"line":225},[186,163261,5556],{"class":669},[186,163263,12332],{"class":202},[186,163265,2194],{"class":669},[186,163267,152301],{"class":202},[186,163269,163270],{"class":188,"line":242},[186,163271,3867],{"emptyLinePlaceholder":1551},[186,163273,163274],{"class":188,"line":248},[186,163275,3867],{"emptyLinePlaceholder":1551},[186,163277,163278,163280,163282,163285,163287,163289,163291],{"class":188,"line":265},[186,163279,162503],{"class":202},[186,163281,529],{"class":669},[186,163283,163284],{"class":202}," divide(",[186,163286,2056],{"class":206},[186,163288,13898],{"class":202},[186,163290,1803],{"class":206},[186,163292,1629],{"class":202},[186,163294,163295],{"class":188,"line":271},[186,163296,3867],{"emptyLinePlaceholder":1551},[186,163298,163299,163301,163303,163305,163307],{"class":188,"line":288},[186,163300,3003],{"class":669},[186,163302,162749],{"class":202},[186,163304,40381],{"class":669},[186,163306,40387],{"class":206},[186,163308,5205],{"class":202},[186,163310,163311,163313,163315,163318],{"class":188,"line":294},[186,163312,32754],{"class":206},[186,163314,832],{"class":202},[186,163316,163317],{"class":532},"\"除数不能为0\"",[186,163319,1629],{"class":202},[186,163321,163322,163324],{"class":188,"line":1212},[186,163323,3169],{"class":669},[186,163325,5205],{"class":202},[186,163327,163328,163330],{"class":188,"line":1223},[186,163329,32754],{"class":206},[186,163331,78018],{"class":202},[14,163333,163335],{"id":163334},"_512-类型提示","5.12 类型提示",[169,163337,163338],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[176,163340,163342],{"className":31833,"code":163341,"language":31835,"meta":181,"style":181},"def add(a: int, b: int) -> int:\n    return a + b\n",[183,163343,163344,163367],{"__ignoreMap":181},[186,163345,163346,163348,163350,163353,163355,163358,163360,163363,163365],{"class":188,"line":189},[186,163347,33402],{"class":669},[186,163349,6673],{"class":198},[186,163351,163352],{"class":202},"(a: ",[186,163354,1626],{"class":206},[186,163356,163357],{"class":202},", b: ",[186,163359,1626],{"class":206},[186,163361,163362],{"class":202},") -> ",[186,163364,1626],{"class":206},[186,163366,5205],{"class":202},[186,163368,163369,163371,163373,163375],{"class":188,"line":49},[186,163370,5556],{"class":669},[186,163372,12332],{"class":202},[186,163374,2091],{"class":669},[186,163376,152301],{"class":202},[169,163378,163379],{},"字符串参数：",[176,163381,163383],{"className":31833,"code":163382,"language":31835,"meta":181,"style":181},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[183,163384,163385,163402],{"__ignoreMap":181},[186,163386,163387,163389,163391,163394,163396,163398,163400],{"class":188,"line":189},[186,163388,33402],{"class":669},[186,163390,162193],{"class":198},[186,163392,163393],{"class":202},"(name: ",[186,163395,2775],{"class":206},[186,163397,163362],{"class":202},[186,163399,97117],{"class":206},[186,163401,5205],{"class":202},[186,163403,163404,163406,163408,163410,163412,163414,163416,163418,163420],{"class":188,"line":49},[186,163405,32754],{"class":206},[186,163407,832],{"class":202},[186,163409,1673],{"class":669},[186,163411,158251],{"class":532},[186,163413,2504],{"class":206},[186,163415,81242],{"class":202},[186,163417,2553],{"class":206},[186,163419,1862],{"class":532},[186,163421,1629],{"class":202},[169,163423,163424],{},"列表参数：",[176,163426,163428],{"className":31833,"code":163427,"language":31835,"meta":181,"style":181},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[183,163429,163430,163449,163457,163469,163478],{"__ignoreMap":181},[186,163431,163432,163434,163437,163440,163442,163445,163447],{"class":188,"line":189},[186,163433,33402],{"class":669},[186,163435,163436],{"class":198}," get_total",[186,163438,163439],{"class":202},"(numbers: list[",[186,163441,1626],{"class":206},[186,163443,163444],{"class":202},"]) -> ",[186,163446,1626],{"class":206},[186,163448,5205],{"class":202},[186,163450,163451,163453,163455],{"class":188,"line":49},[186,163452,160504],{"class":202},[186,163454,529],{"class":669},[186,163456,48787],{"class":206},[186,163458,163459,163461,163464,163466],{"class":188,"line":219},[186,163460,4667],{"class":669},[186,163462,163463],{"class":202}," number ",[186,163465,27500],{"class":669},[186,163467,163468],{"class":202}," numbers:\n",[186,163470,163471,163473,163475],{"class":188,"line":225},[186,163472,161179],{"class":202},[186,163474,10940],{"class":669},[186,163476,163477],{"class":202}," number\n",[186,163479,163480,163482],{"class":188,"line":242},[186,163481,5556],{"class":669},[186,163483,163484],{"class":202}," total\n",[169,163486,163487],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163489,163491],{"id":163490},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[176,163493,163495],{"className":31833,"code":163494,"language":31835,"meta":181,"style":181},"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",[183,163496,163497,163507,163511,163515,163523,163534,163544,163554,163564,163574,163578,163582,163591,163613,163617,163621,163630,163636,163656,163668,163679,163683,163692,163703,163708,163712,163716,163725,163731,163750,163762,163772,163776,163787,163797,163801,163809,163820,163824,163828,163832,163840,163845,163859,163863,163875,163880,163892,163897,163909,163914,163926,163936,163940,163946],{"__ignoreMap":181},[186,163498,163499,163502,163504],{"class":188,"line":189},[186,163500,163501],{"class":202},"balance ",[186,163503,529],{"class":669},[186,163505,163506],{"class":206}," 1000\n",[186,163508,163509],{"class":188,"line":49},[186,163510,3867],{"emptyLinePlaceholder":1551},[186,163512,163513],{"class":188,"line":219},[186,163514,3867],{"emptyLinePlaceholder":1551},[186,163516,163517,163519,163521],{"class":188,"line":225},[186,163518,33402],{"class":669},[186,163520,153230],{"class":198},[186,163522,33408],{"class":202},[186,163524,163525,163527,163529,163532],{"class":188,"line":242},[186,163526,32754],{"class":206},[186,163528,832],{"class":202},[186,163530,163531],{"class":532},"\"====== ATM ======\"",[186,163533,1629],{"class":202},[186,163535,163536,163538,163540,163542],{"class":188,"line":248},[186,163537,32754],{"class":206},[186,163539,832],{"class":202},[186,163541,161845],{"class":532},[186,163543,1629],{"class":202},[186,163545,163546,163548,163550,163552],{"class":188,"line":265},[186,163547,32754],{"class":206},[186,163549,832],{"class":202},[186,163551,161856],{"class":532},[186,163553,1629],{"class":202},[186,163555,163556,163558,163560,163562],{"class":188,"line":271},[186,163557,32754],{"class":206},[186,163559,832],{"class":202},[186,163561,161867],{"class":532},[186,163563,1629],{"class":202},[186,163565,163566,163568,163570,163572],{"class":188,"line":288},[186,163567,32754],{"class":206},[186,163569,832],{"class":202},[186,163571,161878],{"class":532},[186,163573,1629],{"class":202},[186,163575,163576],{"class":188,"line":294},[186,163577,3867],{"emptyLinePlaceholder":1551},[186,163579,163580],{"class":188,"line":1212},[186,163581,3867],{"emptyLinePlaceholder":1551},[186,163583,163584,163586,163589],{"class":188,"line":1223},[186,163585,33402],{"class":669},[186,163587,163588],{"class":198}," show_balance",[186,163590,33408],{"class":202},[186,163592,163593,163595,163597,163599,163602,163604,163607,163609,163611],{"class":188,"line":1236},[186,163594,32754],{"class":206},[186,163596,832],{"class":202},[186,163598,1673],{"class":669},[186,163600,163601],{"class":532},"\"当前余额:",[186,163603,2504],{"class":206},[186,163605,163606],{"class":202},"balance",[186,163608,2553],{"class":206},[186,163610,158209],{"class":532},[186,163612,1629],{"class":202},[186,163614,163615],{"class":188,"line":3096},[186,163616,3867],{"emptyLinePlaceholder":1551},[186,163618,163619],{"class":188,"line":3110},[186,163620,3867],{"emptyLinePlaceholder":1551},[186,163622,163623,163625,163628],{"class":188,"line":3115},[186,163624,33402],{"class":669},[186,163626,163627],{"class":198}," save_money",[186,163629,33408],{"class":202},[186,163631,163632,163634],{"class":188,"line":3121},[186,163633,163058],{"class":669},[186,163635,151296],{"class":202},[186,163637,163638,163641,163643,163645,163647,163649,163651,163654],{"class":188,"line":3142},[186,163639,163640],{"class":202},"    money ",[186,163642,529],{"class":669},[186,163644,111228],{"class":206},[186,163646,832],{"class":202},[186,163648,55266],{"class":206},[186,163650,832],{"class":202},[186,163652,163653],{"class":532},"\"请输入存款金额:\"",[186,163655,31952],{"class":202},[186,163657,163658,163660,163662,163664,163666],{"class":188,"line":3147},[186,163659,4567],{"class":669},[186,163661,151339],{"class":202},[186,163663,3059],{"class":669},[186,163665,5559],{"class":206},[186,163667,5205],{"class":202},[186,163669,163670,163672,163674,163677],{"class":188,"line":3161},[186,163671,33906],{"class":206},[186,163673,832],{"class":202},[186,163675,163676],{"class":532},"\"金额必须大于0\"",[186,163678,1629],{"class":202},[186,163680,163681],{"class":188,"line":3166},[186,163682,153558],{"class":669},[186,163684,163685,163688,163690],{"class":188,"line":3195},[186,163686,163687],{"class":202},"    balance ",[186,163689,10940],{"class":669},[186,163691,151372],{"class":202},[186,163693,163694,163696,163698,163701],{"class":188,"line":3200},[186,163695,32754],{"class":206},[186,163697,832],{"class":202},[186,163699,163700],{"class":532},"\"存款成功\"",[186,163702,1629],{"class":202},[186,163704,163705],{"class":188,"line":3217},[186,163706,163707],{"class":202},"    show_balance()\n",[186,163709,163710],{"class":188,"line":3222},[186,163711,3867],{"emptyLinePlaceholder":1551},[186,163713,163714],{"class":188,"line":3227},[186,163715,3867],{"emptyLinePlaceholder":1551},[186,163717,163718,163720,163723],{"class":188,"line":3232},[186,163719,33402],{"class":669},[186,163721,163722],{"class":198}," withdraw_money",[186,163724,33408],{"class":202},[186,163726,163727,163729],{"class":188,"line":3246},[186,163728,163058],{"class":669},[186,163730,151296],{"class":202},[186,163732,163733,163735,163737,163739,163741,163743,163745,163748],{"class":188,"line":3251},[186,163734,163640],{"class":202},[186,163736,529],{"class":669},[186,163738,111228],{"class":206},[186,163740,832],{"class":202},[186,163742,55266],{"class":206},[186,163744,832],{"class":202},[186,163746,163747],{"class":532},"\"请输入取款金额:\"",[186,163749,31952],{"class":202},[186,163751,163752,163754,163756,163758,163760],{"class":188,"line":4044},[186,163753,4567],{"class":669},[186,163755,151339],{"class":202},[186,163757,3059],{"class":669},[186,163759,5559],{"class":206},[186,163761,5205],{"class":202},[186,163763,163764,163766,163768,163770],{"class":188,"line":4058},[186,163765,33906],{"class":206},[186,163767,832],{"class":202},[186,163769,163676],{"class":532},[186,163771,1629],{"class":202},[186,163773,163774],{"class":188,"line":4066},[186,163775,153558],{"class":669},[186,163777,163778,163780,163782,163784],{"class":188,"line":4071},[186,163779,4567],{"class":669},[186,163781,151339],{"class":202},[186,163783,2567],{"class":669},[186,163785,163786],{"class":202}," balance:\n",[186,163788,163789,163791,163793,163795],{"class":188,"line":4077},[186,163790,33906],{"class":206},[186,163792,832],{"class":202},[186,163794,151434],{"class":532},[186,163796,1629],{"class":202},[186,163798,163799],{"class":188,"line":4083},[186,163800,153558],{"class":669},[186,163802,163803,163805,163807],{"class":188,"line":4088},[186,163804,163687],{"class":202},[186,163806,151449],{"class":669},[186,163808,151372],{"class":202},[186,163810,163811,163813,163815,163818],{"class":188,"line":9411},[186,163812,32754],{"class":206},[186,163814,832],{"class":202},[186,163816,163817],{"class":532},"\"取款成功\"",[186,163819,1629],{"class":202},[186,163821,163822],{"class":188,"line":9435},[186,163823,163707],{"class":202},[186,163825,163826],{"class":188,"line":9440},[186,163827,3867],{"emptyLinePlaceholder":1551},[186,163829,163830],{"class":188,"line":9446},[186,163831,3867],{"emptyLinePlaceholder":1551},[186,163833,163834,163836,163838],{"class":188,"line":9473},[186,163835,110094],{"class":669},[186,163837,96723],{"class":206},[186,163839,5205],{"class":202},[186,163841,163842],{"class":188,"line":9478},[186,163843,163844],{"class":202},"    show_menu()\n",[186,163846,163847,163849,163851,163853,163855,163857],{"class":188,"line":9484},[186,163848,161889],{"class":202},[186,163850,529],{"class":669},[186,163852,62046],{"class":206},[186,163854,832],{"class":202},[186,163856,154270],{"class":532},[186,163858,1629],{"class":202},[186,163860,163861],{"class":188,"line":9496},[186,163862,3867],{"emptyLinePlaceholder":1551},[186,163864,163865,163867,163869,163871,163873],{"class":188,"line":9508},[186,163866,4567],{"class":669},[186,163868,154283],{"class":202},[186,163870,4415],{"class":669},[186,163872,154288],{"class":532},[186,163874,5205],{"class":202},[186,163876,163877],{"class":188,"line":9520},[186,163878,163879],{"class":202},"        show_balance()\n",[186,163881,163882,163884,163886,163888,163890],{"class":188,"line":11179},[186,163883,40747],{"class":669},[186,163885,154283],{"class":202},[186,163887,4415],{"class":669},[186,163889,154307],{"class":532},[186,163891,5205],{"class":202},[186,163893,163894],{"class":188,"line":11204},[186,163895,163896],{"class":202},"        save_money()\n",[186,163898,163899,163901,163903,163905,163907],{"class":188,"line":11227},[186,163900,40747],{"class":669},[186,163902,154283],{"class":202},[186,163904,4415],{"class":669},[186,163906,154325],{"class":532},[186,163908,5205],{"class":202},[186,163910,163911],{"class":188,"line":11251},[186,163912,163913],{"class":202},"        withdraw_money()\n",[186,163915,163916,163918,163920,163922,163924],{"class":188,"line":11256},[186,163917,40747],{"class":669},[186,163919,154283],{"class":202},[186,163921,4415],{"class":669},[186,163923,154379],{"class":532},[186,163925,5205],{"class":202},[186,163927,163928,163930,163932,163934],{"class":188,"line":11261},[186,163929,33906],{"class":206},[186,163931,832],{"class":202},[186,163933,154390],{"class":532},[186,163935,1629],{"class":202},[186,163937,163938],{"class":188,"line":11266},[186,163939,33082],{"class":669},[186,163941,163942,163944],{"class":188,"line":11275},[186,163943,159219],{"class":669},[186,163945,5205],{"class":202},[186,163947,163948,163950,163952,163954],{"class":188,"line":11280},[186,163949,33906],{"class":206},[186,163951,832],{"class":202},[186,163953,154411],{"class":532},[186,163955,1629],{"class":202},[169,163957,163958],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163960,163962],{"id":163961},"_514-易错点","5.14 易错点",[34,163964,163965,163968,163971,163976,163981,163984],{},[22,163966,163967],{},"函数定义后必须调用才会执行。",[22,163969,163970],{},"函数名后面有括号才是调用。",[22,163972,163973,163975],{},[183,163974,18507],{}," 后面的代码不会执行。",[22,163977,163978,163979,913],{},"没有返回值的函数默认返回 ",[183,163980,97117],{},[22,163982,163983],{},"局部变量不能在函数外部访问。",[22,163985,163986,163987,163989],{},"不要滥用 ",[183,163988,163023],{},"，更好的方式是让函数返回新值。",[169,163991,163992,163993,163995],{},"例如不用 ",[183,163994,163023],{}," 改写存款：",[176,163997,163999],{"className":31833,"code":163998,"language":31835,"meta":181,"style":181},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[183,164000,164001,164010,164021,164025,164029,164037,164050],{"__ignoreMap":181},[186,164002,164003,164005,164007],{"class":188,"line":189},[186,164004,33402],{"class":669},[186,164006,163627],{"class":198},[186,164008,164009],{"class":202},"(balance, money):\n",[186,164011,164012,164014,164017,164019],{"class":188,"line":49},[186,164013,5556],{"class":669},[186,164015,164016],{"class":202}," balance ",[186,164018,2091],{"class":669},[186,164020,151372],{"class":202},[186,164022,164023],{"class":188,"line":219},[186,164024,3867],{"emptyLinePlaceholder":1551},[186,164026,164027],{"class":188,"line":225},[186,164028,3867],{"emptyLinePlaceholder":1551},[186,164030,164031,164033,164035],{"class":188,"line":242},[186,164032,163501],{"class":202},[186,164034,529],{"class":669},[186,164036,163506],{"class":206},[186,164038,164039,164041,164043,164046,164048],{"class":188,"line":248},[186,164040,163501],{"class":202},[186,164042,529],{"class":669},[186,164044,164045],{"class":202}," save_money(balance, ",[186,164047,3190],{"class":206},[186,164049,1629],{"class":202},[186,164051,164052,164054],{"class":188,"line":265},[186,164053,31870],{"class":206},[186,164055,164056],{"class":202},"(balance)\n",[14,164058,164060],{"id":164059},"_515-本章练习","5.15 本章练习",[34,164062,164063,164070,164076,164082,164088],{},[22,164064,164065,164066,164069],{},"定义函数 ",[183,164067,164068],{},"print_student(name, age)","，输出学生信息。",[22,164071,164065,164072,164075],{},[183,164073,164074],{},"get_max(a, b, c)","，返回三个数中的最大值。",[22,164077,164065,164078,164081],{},[183,164079,164080],{},"is_even(num)","，判断一个数是否为偶数。",[22,164083,164065,164084,164087],{},[183,164085,164086],{},"calculate_bmi(weight, height)","，返回 BMI。",[22,164089,164090],{},"把第 4 章的菜单程序拆分成多个函数。",[1524,164092,164093],{},"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":181,"searchDepth":49,"depth":49,"links":164095},[164096,164097,164098,164099,164100,164101,164102,164103,164104,164108,164109,164110,164111,164112,164113],{"id":162116,"depth":49,"text":162117},{"id":162157,"depth":49,"text":162158},{"id":162247,"depth":49,"text":162248},{"id":162328,"depth":49,"text":162329},{"id":162461,"depth":49,"text":162462},{"id":162583,"depth":49,"text":162584},{"id":162705,"depth":49,"text":162706},{"id":162782,"depth":49,"text":162783},{"id":162904,"depth":49,"text":162905,"children":164105},[164106,164107],{"id":162908,"depth":219,"text":162909},{"id":162966,"depth":219,"text":162967},{"id":163095,"depth":49,"text":163096},{"id":163221,"depth":49,"text":163222},{"id":163334,"depth":49,"text":163335},{"id":163490,"depth":49,"text":163491},{"id":163961,"depth":49,"text":163962},{"id":164059,"depth":49,"text":164060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162108,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164120,"title":164121,"body":164122,"description":1548,"extension":1549,"meta":167166,"navigation":1551,"path":167167,"seo":167168,"stem":167169,"__hash__":167170},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164123,"toc":167147},[164124,164127,164131,164134,164137,164241,164244,164248,164251,164331,164334,164338,164341,164401,164404,164440,164443,164458,164462,164535,164538,164593,164596,164666,164669,164753,164763,164821,164825,164870,164873,164899,164902,165008,165012,165015,165057,165060,165124,165127,165131,165134,165195,165198,165228,165231,165269,165273,165276,165285,165288,165412,165415,165456,165460,165463,165474,165514,165517,165532,165537,165540,165607,165610,165700,165704,165707,165755,165758,165785,165787,165817,165820,165840,165843,165874,165877,165910,165914,165917,165941,165944,165968,165971,165995,165999,166002,166132,166135,166215,166218,166293,166297,166300,166350,166353,166395,166398,166422,166424,166448,166451,166506,166509,166575,166579,166582,166585,166623,166626,166679,166682,166728,166731,166764,166767,166771,167090,167094,167123,167127,167144],[10,164125,164121],{"id":164126},"_6-数据容器",[14,164128,164130],{"id":164129},"_61-什么是数据容器","6.1 什么是数据容器",[169,164132,164133],{},"数据容器用于一次保存多个数据。",[169,164135,164136],{},"常见容器：",[99,164138,164139,164156],{},[102,164140,164141],{},[105,164142,164143,164145,164148,164151,164154],{},[108,164144,27229],{},[108,164146,164147],{},"是否有序",[108,164149,164150],{},"是否可变",[108,164152,164153],{},"是否允许重复",[108,164155,28948],{},[116,164157,164158,164176,164192,164207,164224],{},[105,164159,164160,164163,164166,164169,164172],{},[121,164161,164162],{},"list列表",[121,164164,164165],{},"有序",[121,164167,164168],{},"可变",[121,164170,164171],{},"允许",[121,164173,164174],{},[183,164175,156454],{},[105,164177,164178,164181,164183,164186,164188],{},[121,164179,164180],{},"tuple元组",[121,164182,164165],{},[121,164184,164185],{},"不可变",[121,164187,164171],{},[121,164189,164190],{},[183,164191,156467],{},[105,164193,164194,164197,164199,164201,164203],{},[121,164195,164196],{},"str字符串",[121,164198,164165],{},[121,164200,164185],{},[121,164202,164171],{},[121,164204,164205],{},[183,164206,157077],{},[105,164208,164209,164212,164215,164217,164220],{},[121,164210,164211],{},"set集合",[121,164213,164214],{},"无序",[121,164216,164168],{},[121,164218,164219],{},"不允许",[121,164221,164222],{},[183,164223,156492],{},[105,164225,164226,164229,164231,164233,164236],{},[121,164227,164228],{},"dict字典",[121,164230,164165],{},[121,164232,164168],{},[121,164234,164235],{},"key不允许重复",[121,164237,164238],{},[183,164239,164240],{},"{\"name\": \"小明\"}",[169,164242,164243],{},"Python 3.7 之后，字典保持插入顺序。",[14,164245,164247],{"id":164246},"_62-列表list","6.2 列表list",[169,164249,164250],{},"列表用于保存一组有顺序的数据。",[176,164252,164254],{"className":31833,"code":164253,"language":31835,"meta":181,"style":181},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[183,164255,164256,164276,164301,164322],{"__ignoreMap":181},[186,164257,164258,164260,164262,164264,164266,164268,164270,164272,164274],{"class":188,"line":189},[186,164259,161577],{"class":202},[186,164261,529],{"class":669},[186,164263,53673],{"class":202},[186,164265,151085],{"class":532},[186,164267,13898],{"class":202},[186,164269,152133],{"class":532},[186,164271,13898],{"class":202},[186,164273,160928],{"class":532},[186,164275,34701],{"class":202},[186,164277,164278,164281,164283,164285,164287,164289,164291,164293,164295,164297,164299],{"class":188,"line":49},[186,164279,164280],{"class":202},"numbers ",[186,164282,529],{"class":669},[186,164284,53673],{"class":202},[186,164286,1829],{"class":206},[186,164288,13898],{"class":202},[186,164290,1697],{"class":206},[186,164292,13898],{"class":202},[186,164294,1691],{"class":206},[186,164296,13898],{"class":202},[186,164298,1904],{"class":206},[186,164300,34701],{"class":202},[186,164302,164303,164306,164308,164310,164312,164314,164316,164318,164320],{"class":188,"line":219},[186,164304,164305],{"class":202},"mixed ",[186,164307,529],{"class":669},[186,164309,53673],{"class":202},[186,164311,151085],{"class":532},[186,164313,13898],{"class":202},[186,164315,2260],{"class":206},[186,164317,13898],{"class":202},[186,164319,32931],{"class":206},[186,164321,34701],{"class":202},[186,164323,164324,164327,164329],{"class":188,"line":225},[186,164325,164326],{"class":202},"empty ",[186,164328,529],{"class":669},[186,164330,53285],{"class":202},[169,164332,164333],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164335,164337],{"id":164336},"_63-列表索引","6.3 列表索引",[169,164339,164340],{},"正向索引从 0 开始：",[176,164342,164344],{"className":31833,"code":164343,"language":31835,"meta":181,"style":181},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[183,164345,164346,164366,164370,164381,164391],{"__ignoreMap":181},[186,164347,164348,164350,164352,164354,164356,164358,164360,164362,164364],{"class":188,"line":189},[186,164349,161577],{"class":202},[186,164351,529],{"class":669},[186,164353,53673],{"class":202},[186,164355,151085],{"class":532},[186,164357,13898],{"class":202},[186,164359,152133],{"class":532},[186,164361,13898],{"class":202},[186,164363,160928],{"class":532},[186,164365,34701],{"class":202},[186,164367,164368],{"class":188,"line":49},[186,164369,3867],{"emptyLinePlaceholder":1551},[186,164371,164372,164374,164377,164379],{"class":188,"line":219},[186,164373,31870],{"class":206},[186,164375,164376],{"class":202},"(names[",[186,164378,1803],{"class":206},[186,164380,6123],{"class":202},[186,164382,164383,164385,164387,164389],{"class":188,"line":225},[186,164384,31870],{"class":206},[186,164386,164376],{"class":202},[186,164388,1829],{"class":206},[186,164390,6123],{"class":202},[186,164392,164393,164395,164397,164399],{"class":188,"line":242},[186,164394,31870],{"class":206},[186,164396,164376],{"class":202},[186,164398,1697],{"class":206},[186,164400,6123],{"class":202},[169,164402,164403],{},"反向索引从 -1 开始：",[176,164405,164407],{"className":31833,"code":164406,"language":31835,"meta":181,"style":181},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[183,164408,164409,164425],{"__ignoreMap":181},[186,164410,164411,164413,164415,164417,164419,164422],{"class":188,"line":189},[186,164412,31870],{"class":206},[186,164414,164376],{"class":202},[186,164416,2142],{"class":669},[186,164418,1829],{"class":206},[186,164420,164421],{"class":202},"])  ",[186,164423,164424],{"class":192},"# 小刚\n",[186,164426,164427,164429,164431,164433,164435,164437],{"class":188,"line":49},[186,164428,31870],{"class":206},[186,164430,164376],{"class":202},[186,164432,2142],{"class":669},[186,164434,1697],{"class":206},[186,164436,164421],{"class":202},[186,164438,164439],{"class":192},"# 小红\n",[169,164441,164442],{},"索引越界会报错：",[176,164444,164446],{"className":31833,"code":164445,"language":31835,"meta":181,"style":181},"print(names[3])\n",[183,164447,164448],{"__ignoreMap":181},[186,164449,164450,164452,164454,164456],{"class":188,"line":189},[186,164451,31870],{"class":206},[186,164453,164376],{"class":202},[186,164455,1691],{"class":206},[186,164457,6123],{"class":202},[14,164459,164461],{"id":164460},"_64-列表常用方法","6.4 列表常用方法",[176,164463,164465],{"className":31833,"code":164464,"language":31835,"meta":181,"style":181},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[183,164466,164467,164483,164487,164496,164510,164524,164528],{"__ignoreMap":181},[186,164468,164469,164471,164473,164475,164477,164479,164481],{"class":188,"line":189},[186,164470,161577],{"class":202},[186,164472,529],{"class":669},[186,164474,53673],{"class":202},[186,164476,151085],{"class":532},[186,164478,13898],{"class":202},[186,164480,152133],{"class":532},[186,164482,34701],{"class":202},[186,164484,164485],{"class":188,"line":49},[186,164486,3867],{"emptyLinePlaceholder":1551},[186,164488,164489,164492,164494],{"class":188,"line":219},[186,164490,164491],{"class":202},"names.append(",[186,164493,160928],{"class":532},[186,164495,1629],{"class":202},[186,164497,164498,164501,164503,164505,164508],{"class":188,"line":225},[186,164499,164500],{"class":202},"names.insert(",[186,164502,1829],{"class":206},[186,164504,13898],{"class":202},[186,164506,164507],{"class":532},"\"小李\"",[186,164509,1629],{"class":202},[186,164511,164512,164515,164517,164519,164522],{"class":188,"line":242},[186,164513,164514],{"class":202},"names.extend([",[186,164516,10146],{"class":532},[186,164518,13898],{"class":202},[186,164520,164521],{"class":532},"\"小赵\"",[186,164523,6123],{"class":202},[186,164525,164526],{"class":188,"line":248},[186,164527,3867],{"emptyLinePlaceholder":1551},[186,164529,164530,164532],{"class":188,"line":265},[186,164531,31870],{"class":206},[186,164533,164534],{"class":202},"(names)\n",[169,164536,164537],{},"删除元素：",[176,164539,164541],{"className":31833,"code":164540,"language":31835,"meta":181,"style":181},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[183,164542,164543,164552,164562,164576,164588],{"__ignoreMap":181},[186,164544,164545,164548,164550],{"class":188,"line":189},[186,164546,164547],{"class":202},"names.remove(",[186,164549,152133],{"class":532},[186,164551,1629],{"class":202},[186,164553,164554,164557,164559],{"class":188,"line":49},[186,164555,164556],{"class":202},"last ",[186,164558,529],{"class":669},[186,164560,164561],{"class":202}," names.pop()\n",[186,164563,164564,164567,164569,164572,164574],{"class":188,"line":219},[186,164565,164566],{"class":202},"first ",[186,164568,529],{"class":669},[186,164570,164571],{"class":202}," names.pop(",[186,164573,1803],{"class":206},[186,164575,1629],{"class":202},[186,164577,164578,164581,164584,164586],{"class":188,"line":225},[186,164579,164580],{"class":669},"del",[186,164582,164583],{"class":202}," names[",[186,164585,1803],{"class":206},[186,164587,34701],{"class":202},[186,164589,164590],{"class":188,"line":242},[186,164591,164592],{"class":202},"names.clear()\n",[169,164594,164595],{},"查询和统计：",[176,164597,164599],{"className":31833,"code":164598,"language":31835,"meta":181,"style":181},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[183,164600,164601,164629,164633,164644,164655],{"__ignoreMap":181},[186,164602,164603,164605,164607,164609,164611,164613,164615,164617,164619,164621,164623,164625,164627],{"class":188,"line":189},[186,164604,164280],{"class":202},[186,164606,529],{"class":669},[186,164608,53673],{"class":202},[186,164610,1829],{"class":206},[186,164612,13898],{"class":202},[186,164614,1697],{"class":206},[186,164616,13898],{"class":202},[186,164618,1691],{"class":206},[186,164620,13898],{"class":202},[186,164622,1697],{"class":206},[186,164624,13898],{"class":202},[186,164626,1904],{"class":206},[186,164628,34701],{"class":202},[186,164630,164631],{"class":188,"line":49},[186,164632,3867],{"emptyLinePlaceholder":1551},[186,164634,164635,164637,164640,164642],{"class":188,"line":219},[186,164636,31870],{"class":206},[186,164638,164639],{"class":202},"(numbers.index(",[186,164641,1691],{"class":206},[186,164643,31952],{"class":202},[186,164645,164646,164648,164651,164653],{"class":188,"line":225},[186,164647,31870],{"class":206},[186,164649,164650],{"class":202},"(numbers.count(",[186,164652,1697],{"class":206},[186,164654,31952],{"class":202},[186,164656,164657,164659,164661,164663],{"class":188,"line":242},[186,164658,31870],{"class":206},[186,164660,832],{"class":202},[186,164662,8821],{"class":206},[186,164664,164665],{"class":202},"(numbers))\n",[169,164667,164668],{},"排序：",[176,164670,164672],{"className":31833,"code":164671,"language":31835,"meta":181,"style":181},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[183,164673,164674,164698,164702,164707,164714,164718,164732,164738,164742,164747],{"__ignoreMap":181},[186,164675,164676,164678,164680,164682,164684,164686,164688,164690,164692,164694,164696],{"class":188,"line":189},[186,164677,164280],{"class":202},[186,164679,529],{"class":669},[186,164681,53673],{"class":202},[186,164683,1691],{"class":206},[186,164685,13898],{"class":202},[186,164687,1829],{"class":206},[186,164689,13898],{"class":202},[186,164691,1930],{"class":206},[186,164693,13898],{"class":202},[186,164695,1697],{"class":206},[186,164697,34701],{"class":202},[186,164699,164700],{"class":188,"line":49},[186,164701,3867],{"emptyLinePlaceholder":1551},[186,164703,164704],{"class":188,"line":219},[186,164705,164706],{"class":202},"numbers.sort()\n",[186,164708,164709,164711],{"class":188,"line":225},[186,164710,31870],{"class":206},[186,164712,164713],{"class":202},"(numbers)\n",[186,164715,164716],{"class":188,"line":242},[186,164717,3867],{"emptyLinePlaceholder":1551},[186,164719,164720,164723,164726,164728,164730],{"class":188,"line":248},[186,164721,164722],{"class":202},"numbers.sort(",[186,164724,164725],{"class":835},"reverse",[186,164727,529],{"class":669},[186,164729,32931],{"class":206},[186,164731,1629],{"class":202},[186,164733,164734,164736],{"class":188,"line":265},[186,164735,31870],{"class":206},[186,164737,164713],{"class":202},[186,164739,164740],{"class":188,"line":271},[186,164741,3867],{"emptyLinePlaceholder":1551},[186,164743,164744],{"class":188,"line":288},[186,164745,164746],{"class":202},"numbers.reverse()\n",[186,164748,164749,164751],{"class":188,"line":294},[186,164750,31870],{"class":206},[186,164752,164713],{"class":202},[169,164754,164755,164758,164759,164762],{},[183,164756,164757],{},"sort()"," 会修改原列表，",[183,164760,164761],{},"sorted()"," 返回新列表。",[176,164764,164766],{"className":31833,"code":164765,"language":31835,"meta":181,"style":181},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[183,164767,164768,164792,164804,164808,164814],{"__ignoreMap":181},[186,164769,164770,164772,164774,164776,164778,164780,164782,164784,164786,164788,164790],{"class":188,"line":189},[186,164771,164280],{"class":202},[186,164773,529],{"class":669},[186,164775,53673],{"class":202},[186,164777,1691],{"class":206},[186,164779,13898],{"class":202},[186,164781,1829],{"class":206},[186,164783,13898],{"class":202},[186,164785,1930],{"class":206},[186,164787,13898],{"class":202},[186,164789,1697],{"class":206},[186,164791,34701],{"class":202},[186,164793,164794,164797,164799,164802],{"class":188,"line":49},[186,164795,164796],{"class":202},"new_numbers ",[186,164798,529],{"class":669},[186,164800,164801],{"class":206}," sorted",[186,164803,164713],{"class":202},[186,164805,164806],{"class":188,"line":219},[186,164807,3867],{"emptyLinePlaceholder":1551},[186,164809,164810,164812],{"class":188,"line":225},[186,164811,31870],{"class":206},[186,164813,164713],{"class":202},[186,164815,164816,164818],{"class":188,"line":242},[186,164817,31870],{"class":206},[186,164819,164820],{"class":202},"(new_numbers)\n",[14,164822,164824],{"id":164823},"_65-列表遍历","6.5 列表遍历",[176,164826,164828],{"className":31833,"code":164827,"language":31835,"meta":181,"style":181},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[183,164829,164830,164850,164854,164864],{"__ignoreMap":181},[186,164831,164832,164834,164836,164838,164840,164842,164844,164846,164848],{"class":188,"line":189},[186,164833,161577],{"class":202},[186,164835,529],{"class":669},[186,164837,53673],{"class":202},[186,164839,151085],{"class":532},[186,164841,13898],{"class":202},[186,164843,152133],{"class":532},[186,164845,13898],{"class":202},[186,164847,160928],{"class":532},[186,164849,34701],{"class":202},[186,164851,164852],{"class":188,"line":49},[186,164853,3867],{"emptyLinePlaceholder":1551},[186,164855,164856,164858,164860,164862],{"class":188,"line":219},[186,164857,4491],{"class":669},[186,164859,161613],{"class":202},[186,164861,27500],{"class":669},[186,164863,161618],{"class":202},[186,164865,164866,164868],{"class":188,"line":225},[186,164867,32754],{"class":206},[186,164869,151857],{"class":202},[169,164871,164872],{},"需要索引时：",[176,164874,164876],{"className":31833,"code":164875,"language":31835,"meta":181,"style":181},"for index, name in enumerate(names):\n    print(index, name)\n",[183,164877,164878,164892],{"__ignoreMap":181},[186,164879,164880,164882,164885,164887,164889],{"class":188,"line":189},[186,164881,4491],{"class":669},[186,164883,164884],{"class":202}," index, name ",[186,164886,27500],{"class":669},[186,164888,33061],{"class":206},[186,164890,164891],{"class":202},"(names):\n",[186,164893,164894,164896],{"class":188,"line":49},[186,164895,32754],{"class":206},[186,164897,164898],{"class":202},"(index, name)\n",[169,164900,164901],{},"统计总分：",[176,164903,164905],{"className":31833,"code":164904,"language":31835,"meta":181,"style":181},"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",[183,164906,164907,164932,164940,164944,164955,164963,164967,164984],{"__ignoreMap":181},[186,164908,164909,164912,164914,164916,164918,164920,164922,164924,164926,164928,164930],{"class":188,"line":189},[186,164910,164911],{"class":202},"scores ",[186,164913,529],{"class":669},[186,164915,53673],{"class":202},[186,164917,2470],{"class":206},[186,164919,13898],{"class":202},[186,164921,2344],{"class":206},[186,164923,13898],{"class":202},[186,164925,1865],{"class":206},[186,164927,13898],{"class":202},[186,164929,2171],{"class":206},[186,164931,34701],{"class":202},[186,164933,164934,164936,164938],{"class":188,"line":49},[186,164935,158457],{"class":202},[186,164937,529],{"class":669},[186,164939,48787],{"class":206},[186,164941,164942],{"class":188,"line":219},[186,164943,3867],{"emptyLinePlaceholder":1551},[186,164945,164946,164948,164950,164952],{"class":188,"line":225},[186,164947,4491],{"class":669},[186,164949,158980],{"class":202},[186,164951,27500],{"class":669},[186,164953,164954],{"class":202}," scores:\n",[186,164956,164957,164959,164961],{"class":188,"line":242},[186,164958,160504],{"class":202},[186,164960,10940],{"class":669},[186,164962,3050],{"class":202},[186,164964,164965],{"class":188,"line":248},[186,164966,3867],{"emptyLinePlaceholder":1551},[186,164968,164969,164972,164974,164977,164979,164981],{"class":188,"line":265},[186,164970,164971],{"class":202},"avg ",[186,164973,529],{"class":669},[186,164975,164976],{"class":202}," total ",[186,164978,2194],{"class":669},[186,164980,8794],{"class":206},[186,164982,164983],{"class":202},"(scores)\n",[186,164985,164986,164988,164990,164992,164995,164997,165000,165002,165004,165006],{"class":188,"line":271},[186,164987,31870],{"class":206},[186,164989,832],{"class":202},[186,164991,1673],{"class":669},[186,164993,164994],{"class":532},"\"平均分:",[186,164996,2504],{"class":206},[186,164998,164999],{"class":202},"avg",[186,165001,158356],{"class":669},[186,165003,2553],{"class":206},[186,165005,1862],{"class":532},[186,165007,1629],{"class":202},[14,165009,165011],{"id":165010},"_66-元组tuple","6.6 元组tuple",[169,165013,165014],{},"元组和列表类似，但不可修改。",[176,165016,165018],{"className":31833,"code":165017,"language":31835,"meta":181,"style":181},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[183,165019,165020,165037],{"__ignoreMap":181},[186,165021,165022,165025,165027,165029,165031,165033,165035],{"class":188,"line":189},[186,165023,165024],{"class":202},"point ",[186,165026,529],{"class":669},[186,165028,3126],{"class":202},[186,165030,2056],{"class":206},[186,165032,13898],{"class":202},[186,165034,801],{"class":206},[186,165036,1629],{"class":202},[186,165038,165039,165041,165043,165045,165047,165049,165051,165053,165055],{"class":188,"line":49},[186,165040,117745],{"class":202},[186,165042,529],{"class":669},[186,165044,3126],{"class":202},[186,165046,151085],{"class":532},[186,165048,13898],{"class":202},[186,165050,2260],{"class":206},[186,165052,13898],{"class":202},[186,165054,70706],{"class":532},[186,165056,1629],{"class":202},[169,165058,165059],{},"单元素元组必须加逗号：",[176,165061,165063],{"className":31833,"code":165062,"language":31835,"meta":181,"style":181},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[183,165064,165065,165079,165092,165096,165110],{"__ignoreMap":181},[186,165066,165067,165070,165072,165074,165076],{"class":188,"line":189},[186,165068,165069],{"class":202},"t1 ",[186,165071,529],{"class":669},[186,165073,3126],{"class":202},[186,165075,2056],{"class":206},[186,165077,165078],{"class":202},",)\n",[186,165080,165081,165084,165086,165088,165090],{"class":188,"line":49},[186,165082,165083],{"class":202},"t2 ",[186,165085,529],{"class":669},[186,165087,3126],{"class":202},[186,165089,2056],{"class":206},[186,165091,1629],{"class":202},[186,165093,165094],{"class":188,"line":219},[186,165095,3867],{"emptyLinePlaceholder":1551},[186,165097,165098,165100,165102,165104,165107],{"class":188,"line":225},[186,165099,31870],{"class":206},[186,165101,832],{"class":202},[186,165103,104538],{"class":206},[186,165105,165106],{"class":202},"(t1))  ",[186,165108,165109],{"class":192},"# tuple\n",[186,165111,165112,165114,165116,165118,165121],{"class":188,"line":242},[186,165113,31870],{"class":206},[186,165115,832],{"class":202},[186,165117,104538],{"class":206},[186,165119,165120],{"class":202},"(t2))  ",[186,165122,165123],{"class":192},"# int\n",[169,165125,165126],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165128,165130],{"id":165129},"_67-字符串str","6.7 字符串str",[169,165132,165133],{},"字符串也是序列，可以索引、切片和遍历。",[176,165135,165137],{"className":31833,"code":165136,"language":31835,"meta":181,"style":181},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[183,165138,165139,165147,165151,165162,165174,165178,165189],{"__ignoreMap":181},[186,165140,165141,165143,165145],{"class":188,"line":189},[186,165142,157641],{"class":202},[186,165144,529],{"class":669},[186,165146,160878],{"class":532},[186,165148,165149],{"class":188,"line":49},[186,165150,3867],{"emptyLinePlaceholder":1551},[186,165152,165153,165155,165158,165160],{"class":188,"line":219},[186,165154,31870],{"class":206},[186,165156,165157],{"class":202},"(text[",[186,165159,1803],{"class":206},[186,165161,6123],{"class":202},[186,165163,165164,165166,165168,165170,165172],{"class":188,"line":225},[186,165165,31870],{"class":206},[186,165167,165157],{"class":202},[186,165169,2142],{"class":669},[186,165171,1829],{"class":206},[186,165173,6123],{"class":202},[186,165175,165176],{"class":188,"line":242},[186,165177,3867],{"emptyLinePlaceholder":1551},[186,165179,165180,165182,165184,165186],{"class":188,"line":248},[186,165181,4491],{"class":669},[186,165183,160889],{"class":202},[186,165185,27500],{"class":669},[186,165187,165188],{"class":202}," text:\n",[186,165190,165191,165193],{"class":188,"line":265},[186,165192,32754],{"class":206},[186,165194,160900],{"class":202},[169,165196,165197],{},"字符串不可变：",[176,165199,165201],{"className":31833,"code":165200,"language":31835,"meta":181,"style":181},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[183,165202,165203,165211],{"__ignoreMap":181},[186,165204,165205,165207,165209],{"class":188,"line":189},[186,165206,157641],{"class":202},[186,165208,529],{"class":669},[186,165210,160878],{"class":532},[186,165212,165213,165216,165218,165220,165222,165225],{"class":188,"line":49},[186,165214,165215],{"class":202},"text[",[186,165217,1803],{"class":206},[186,165219,5909],{"class":202},[186,165221,529],{"class":669},[186,165223,165224],{"class":532}," \"P\"",[186,165226,165227],{"class":192},"  # 报错\n",[169,165229,165230],{},"如果要得到新字符串：",[176,165232,165234],{"className":31833,"code":165233,"language":31835,"meta":181,"style":181},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[183,165235,165236,165244,165262],{"__ignoreMap":181},[186,165237,165238,165240,165242],{"class":188,"line":189},[186,165239,157641],{"class":202},[186,165241,529],{"class":669},[186,165243,160878],{"class":532},[186,165245,165246,165248,165250,165252,165254,165257,165259],{"class":188,"line":49},[186,165247,157641],{"class":202},[186,165249,529],{"class":669},[186,165251,165224],{"class":532},[186,165253,47020],{"class":669},[186,165255,165256],{"class":202}," text[",[186,165258,1829],{"class":206},[186,165260,165261],{"class":202},":]\n",[186,165263,165264,165266],{"class":188,"line":219},[186,165265,31870],{"class":206},[186,165267,165268],{"class":202},"(text)\n",[14,165270,165272],{"id":165271},"_68-切片","6.8 切片",[169,165274,165275],{},"切片用于从序列中取一部分。",[176,165277,165279],{"className":31833,"code":165278,"language":31835,"meta":181,"style":181},"序列[开始:结束:步长]\n",[183,165280,165281],{"__ignoreMap":181},[186,165282,165283],{"class":188,"line":189},[186,165284,165278],{"class":202},[169,165286,165287],{},"结束位置不包含。",[176,165289,165291],{"className":31833,"code":165290,"language":31835,"meta":181,"style":181},"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",[183,165292,165293,165330,165334,165353,165368,165382,165396],{"__ignoreMap":181},[186,165294,165295,165298,165300,165302,165304,165306,165308,165310,165312,165314,165316,165318,165320,165322,165324,165326,165328],{"class":188,"line":189},[186,165296,165297],{"class":202},"nums ",[186,165299,529],{"class":669},[186,165301,53673],{"class":202},[186,165303,1803],{"class":206},[186,165305,13898],{"class":202},[186,165307,1829],{"class":206},[186,165309,13898],{"class":202},[186,165311,1697],{"class":206},[186,165313,13898],{"class":202},[186,165315,1691],{"class":206},[186,165317,13898],{"class":202},[186,165319,1904],{"class":206},[186,165321,13898],{"class":202},[186,165323,1930],{"class":206},[186,165325,13898],{"class":202},[186,165327,1954],{"class":206},[186,165329,34701],{"class":202},[186,165331,165332],{"class":188,"line":49},[186,165333,3867],{"emptyLinePlaceholder":1551},[186,165335,165336,165338,165341,165343,165345,165347,165350],{"class":188,"line":219},[186,165337,31870],{"class":206},[186,165339,165340],{"class":202},"(nums[",[186,165342,1829],{"class":206},[186,165344,2467],{"class":202},[186,165346,1904],{"class":206},[186,165348,165349],{"class":202},"])    ",[186,165351,165352],{"class":192},"# [1, 2, 3]\n",[186,165354,165355,165357,165360,165362,165365],{"class":188,"line":225},[186,165356,31870],{"class":206},[186,165358,165359],{"class":202},"(nums[:",[186,165361,1691],{"class":206},[186,165363,165364],{"class":202},"])     ",[186,165366,165367],{"class":192},"# [0, 1, 2]\n",[186,165369,165370,165372,165374,165376,165379],{"class":188,"line":242},[186,165371,31870],{"class":206},[186,165373,165340],{"class":202},[186,165375,1691],{"class":206},[186,165377,165378],{"class":202},":])     ",[186,165380,165381],{"class":192},"# [3, 4, 5, 6]\n",[186,165383,165384,165386,165389,165391,165393],{"class":188,"line":248},[186,165385,31870],{"class":206},[186,165387,165388],{"class":202},"(nums[::",[186,165390,1697],{"class":206},[186,165392,165349],{"class":202},[186,165394,165395],{"class":192},"# [0, 2, 4, 6]\n",[186,165397,165398,165400,165402,165404,165406,165409],{"class":188,"line":265},[186,165399,31870],{"class":206},[186,165401,165388],{"class":202},[186,165403,2142],{"class":669},[186,165405,1829],{"class":206},[186,165407,165408],{"class":202},"])   ",[186,165410,165411],{"class":192},"# 反转\n",[169,165413,165414],{},"字符串切片：",[176,165416,165418],{"className":31833,"code":165417,"language":31835,"meta":181,"style":181},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[183,165419,165420,165429,165443],{"__ignoreMap":181},[186,165421,165422,165424,165426],{"class":188,"line":189},[186,165423,157641],{"class":202},[186,165425,529],{"class":669},[186,165427,165428],{"class":532}," \"abcdef\"\n",[186,165430,165431,165433,165435,165437,165439,165441],{"class":188,"line":49},[186,165432,31870],{"class":206},[186,165434,165157],{"class":202},[186,165436,1829],{"class":206},[186,165438,2467],{"class":202},[186,165440,1904],{"class":206},[186,165442,6123],{"class":202},[186,165444,165445,165447,165450,165452,165454],{"class":188,"line":219},[186,165446,31870],{"class":206},[186,165448,165449],{"class":202},"(text[::",[186,165451,2142],{"class":669},[186,165453,1829],{"class":206},[186,165455,6123],{"class":202},[14,165457,165459],{"id":165458},"_69-集合set","6.9 集合set",[169,165461,165462],{},"集合特点：",[34,165464,165465,165468,165471],{},[22,165466,165467],{},"无序。",[22,165469,165470],{},"元素不重复。",[22,165472,165473],{},"可以做交集、并集、差集。",[176,165475,165477],{"className":31833,"code":165476,"language":31835,"meta":181,"style":181},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[183,165478,165479,165507],{"__ignoreMap":181},[186,165480,165481,165483,165485,165487,165489,165491,165493,165495,165497,165499,165501,165503,165505],{"class":188,"line":189},[186,165482,165297],{"class":202},[186,165484,529],{"class":669},[186,165486,5914],{"class":202},[186,165488,1829],{"class":206},[186,165490,13898],{"class":202},[186,165492,1697],{"class":206},[186,165494,13898],{"class":202},[186,165496,1691],{"class":206},[186,165498,13898],{"class":202},[186,165500,1691],{"class":206},[186,165502,13898],{"class":202},[186,165504,1904],{"class":206},[186,165506,639],{"class":202},[186,165508,165509,165511],{"class":188,"line":49},[186,165510,31870],{"class":206},[186,165512,165513],{"class":202},"(nums)\n",[169,165515,165516],{},"创建空集合：",[176,165518,165520],{"className":31833,"code":165519,"language":31835,"meta":181,"style":181},"s = set()\n",[183,165521,165522],{"__ignoreMap":181},[186,165523,165524,165526,165528,165530],{"class":188,"line":189},[186,165525,12042],{"class":202},[186,165527,529],{"class":669},[186,165529,121153],{"class":206},[186,165531,3443],{"class":202},[169,165533,10488,165534,165536],{},[183,165535,33914],{}," 是空字典，不是空集合。",[169,165538,165539],{},"集合常用操作：",[176,165541,165543],{"className":31833,"code":165542,"language":31835,"meta":181,"style":181},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[183,165544,165545,165565,165569,165578,165587,165596],{"__ignoreMap":181},[186,165546,165547,165549,165551,165553,165555,165557,165559,165561,165563],{"class":188,"line":189},[186,165548,12042],{"class":202},[186,165550,529],{"class":669},[186,165552,5914],{"class":202},[186,165554,1829],{"class":206},[186,165556,13898],{"class":202},[186,165558,1697],{"class":206},[186,165560,13898],{"class":202},[186,165562,1691],{"class":206},[186,165564,639],{"class":202},[186,165566,165567],{"class":188,"line":49},[186,165568,3867],{"emptyLinePlaceholder":1551},[186,165570,165571,165574,165576],{"class":188,"line":219},[186,165572,165573],{"class":202},"s.add(",[186,165575,1904],{"class":206},[186,165577,1629],{"class":202},[186,165579,165580,165583,165585],{"class":188,"line":225},[186,165581,165582],{"class":202},"s.remove(",[186,165584,1697],{"class":206},[186,165586,1629],{"class":202},[186,165588,165589,165592,165594],{"class":188,"line":242},[186,165590,165591],{"class":202},"s.discard(",[186,165593,2056],{"class":206},[186,165595,1629],{"class":202},[186,165597,165598,165600,165602,165604],{"class":188,"line":248},[186,165599,31870],{"class":206},[186,165601,832],{"class":202},[186,165603,8821],{"class":206},[186,165605,165606],{"class":202},"(s))\n",[169,165608,165609],{},"交并差：",[176,165611,165613],{"className":31833,"code":165612,"language":31835,"meta":181,"style":181},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[183,165614,165615,165635,165655,165659,165674,165687],{"__ignoreMap":181},[186,165616,165617,165619,165621,165623,165625,165627,165629,165631,165633],{"class":188,"line":189},[186,165618,12382],{"class":202},[186,165620,529],{"class":669},[186,165622,5914],{"class":202},[186,165624,1829],{"class":206},[186,165626,13898],{"class":202},[186,165628,1697],{"class":206},[186,165630,13898],{"class":202},[186,165632,1691],{"class":206},[186,165634,639],{"class":202},[186,165636,165637,165639,165641,165643,165645,165647,165649,165651,165653],{"class":188,"line":49},[186,165638,12408],{"class":202},[186,165640,529],{"class":669},[186,165642,5914],{"class":202},[186,165644,1691],{"class":206},[186,165646,13898],{"class":202},[186,165648,1904],{"class":206},[186,165650,13898],{"class":202},[186,165652,1930],{"class":206},[186,165654,639],{"class":202},[186,165656,165657],{"class":188,"line":219},[186,165658,3867],{"emptyLinePlaceholder":1551},[186,165660,165661,165663,165666,165668,165671],{"class":188,"line":225},[186,165662,31870],{"class":206},[186,165664,165665],{"class":202},"(a ",[186,165667,1963],{"class":669},[186,165669,165670],{"class":202}," b)  ",[186,165672,165673],{"class":192},"# 交集\n",[186,165675,165676,165678,165680,165682,165684],{"class":188,"line":242},[186,165677,31870],{"class":206},[186,165679,165665],{"class":202},[186,165681,2528],{"class":669},[186,165683,165670],{"class":202},[186,165685,165686],{"class":192},"# 并集\n",[186,165688,165689,165691,165693,165695,165697],{"class":188,"line":248},[186,165690,31870],{"class":206},[186,165692,165665],{"class":202},[186,165694,2142],{"class":669},[186,165696,165670],{"class":202},[186,165698,165699],{"class":192},"# 差集\n",[14,165701,165703],{"id":165702},"_610-字典dict","6.10 字典dict",[169,165705,165706],{},"字典通过 key-value 保存数据。",[176,165708,165710],{"className":31833,"code":165709,"language":31835,"meta":181,"style":181},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[183,165711,165712,165720,165730,165741,165751],{"__ignoreMap":181},[186,165713,165714,165716,165718],{"class":188,"line":189},[186,165715,150678],{"class":202},[186,165717,529],{"class":669},[186,165719,622],{"class":202},[186,165721,165722,165724,165726,165728],{"class":188,"line":49},[186,165723,148217],{"class":532},[186,165725,210],{"class":202},[186,165727,151085],{"class":532},[186,165729,32921],{"class":202},[186,165731,165732,165735,165737,165739],{"class":188,"line":219},[186,165733,165734],{"class":532},"    \"age\"",[186,165736,210],{"class":202},[186,165738,2260],{"class":206},[186,165740,32921],{"class":202},[186,165742,165743,165746,165748],{"class":188,"line":225},[186,165744,165745],{"class":532},"    \"score\"",[186,165747,210],{"class":202},[186,165749,165750],{"class":206},"95\n",[186,165752,165753],{"class":188,"line":242},[186,165754,639],{"class":202},[169,165756,165757],{},"获取值：",[176,165759,165761],{"className":31833,"code":165760,"language":31835,"meta":181,"style":181},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[183,165762,165763,165774],{"__ignoreMap":181},[186,165764,165765,165767,165770,165772],{"class":188,"line":189},[186,165766,31870],{"class":206},[186,165768,165769],{"class":202},"(student[",[186,165771,64117],{"class":532},[186,165773,6123],{"class":202},[186,165775,165776,165778,165781,165783],{"class":188,"line":49},[186,165777,31870],{"class":206},[186,165779,165780],{"class":202},"(student.get(",[186,165782,64117],{"class":532},[186,165784,31952],{"class":202},[169,165786,16850],{},[176,165788,165790],{"className":31833,"code":165789,"language":31835,"meta":181,"style":181},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[183,165791,165792,165805],{"__ignoreMap":181},[186,165793,165794,165796,165799,165802],{"class":188,"line":189},[186,165795,154056],{"class":202},[186,165797,165798],{"class":532},"\"address\"",[186,165800,165801],{"class":202},"]     ",[186,165803,165804],{"class":192},"# key不存在会报错\n",[186,165806,165807,165810,165812,165814],{"class":188,"line":49},[186,165808,165809],{"class":202},"student.get(",[186,165811,165798],{"class":532},[186,165813,839],{"class":202},[186,165815,165816],{"class":192},"# key不存在返回None\n",[169,165818,165819],{},"设置默认值：",[176,165821,165823],{"className":31833,"code":165822,"language":31835,"meta":181,"style":181},"print(student.get(\"address\", \"未知\"))\n",[183,165824,165825],{"__ignoreMap":181},[186,165826,165827,165829,165831,165833,165835,165838],{"class":188,"line":189},[186,165828,31870],{"class":206},[186,165830,165780],{"class":202},[186,165832,165798],{"class":532},[186,165834,13898],{"class":202},[186,165836,165837],{"class":532},"\"未知\"",[186,165839,31952],{"class":202},[169,165841,165842],{},"新增和修改：",[176,165844,165846],{"className":31833,"code":165845,"language":31835,"meta":181,"style":181},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[183,165847,165848,165861],{"__ignoreMap":181},[186,165849,165850,165852,165854,165856,165858],{"class":188,"line":189},[186,165851,154056],{"class":202},[186,165853,70561],{"class":532},[186,165855,5909],{"class":202},[186,165857,529],{"class":669},[186,165859,165860],{"class":206}," 19\n",[186,165862,165863,165865,165867,165869,165871],{"class":188,"line":49},[186,165864,154056],{"class":202},[186,165866,165798],{"class":532},[186,165868,5909],{"class":202},[186,165870,529],{"class":669},[186,165872,165873],{"class":532}," \"北京\"\n",[169,165875,165876],{},"删除：",[176,165878,165880],{"className":31833,"code":165879,"language":31835,"meta":181,"style":181},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[183,165881,165882,165895,165905],{"__ignoreMap":181},[186,165883,165884,165886,165888,165891,165893],{"class":188,"line":189},[186,165885,156555],{"class":202},[186,165887,529],{"class":669},[186,165889,165890],{"class":202}," student.pop(",[186,165892,152669],{"class":532},[186,165894,1629],{"class":202},[186,165896,165897,165899,165901,165903],{"class":188,"line":49},[186,165898,164580],{"class":669},[186,165900,153346],{"class":202},[186,165902,70561],{"class":532},[186,165904,34701],{"class":202},[186,165906,165907],{"class":188,"line":219},[186,165908,165909],{"class":202},"student.clear()\n",[14,165911,165913],{"id":165912},"_611-字典遍历","6.11 字典遍历",[169,165915,165916],{},"遍历 key：",[176,165918,165920],{"className":31833,"code":165919,"language":31835,"meta":181,"style":181},"for key in student:\n    print(key, student[key])\n",[183,165921,165922,165934],{"__ignoreMap":181},[186,165923,165924,165926,165929,165931],{"class":188,"line":189},[186,165925,4491],{"class":669},[186,165927,165928],{"class":202}," key ",[186,165930,27500],{"class":669},[186,165932,165933],{"class":202}," student:\n",[186,165935,165936,165938],{"class":188,"line":49},[186,165937,32754],{"class":206},[186,165939,165940],{"class":202},"(key, student[key])\n",[169,165942,165943],{},"遍历 value：",[176,165945,165947],{"className":31833,"code":165946,"language":31835,"meta":181,"style":181},"for value in student.values():\n    print(value)\n",[183,165948,165949,165961],{"__ignoreMap":181},[186,165950,165951,165953,165956,165958],{"class":188,"line":189},[186,165952,4491],{"class":669},[186,165954,165955],{"class":202}," value ",[186,165957,27500],{"class":669},[186,165959,165960],{"class":202}," student.values():\n",[186,165962,165963,165965],{"class":188,"line":49},[186,165964,32754],{"class":206},[186,165966,165967],{"class":202},"(value)\n",[169,165969,165970],{},"遍历 key 和 value：",[176,165972,165974],{"className":31833,"code":165973,"language":31835,"meta":181,"style":181},"for key, value in student.items():\n    print(key, value)\n",[183,165975,165976,165988],{"__ignoreMap":181},[186,165977,165978,165980,165983,165985],{"class":188,"line":189},[186,165979,4491],{"class":669},[186,165981,165982],{"class":202}," key, value ",[186,165984,27500],{"class":669},[186,165986,165987],{"class":202}," student.items():\n",[186,165989,165990,165992],{"class":188,"line":49},[186,165991,32754],{"class":206},[186,165993,165994],{"class":202},"(key, value)\n",[14,165996,165998],{"id":165997},"_612-嵌套容器","6.12 嵌套容器",[169,166000,166001],{},"列表中保存字典，是项目中最常见的结构之一。",[176,166003,166005],{"className":31833,"code":166004,"language":31835,"meta":181,"style":181},"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",[183,166006,166007,166015,166043,166071,166099,166103,166107,166117],{"__ignoreMap":181},[186,166008,166009,166011,166013],{"class":188,"line":189},[186,166010,160913],{"class":202},[186,166012,529],{"class":669},[186,166014,56888],{"class":202},[186,166016,166017,166019,166021,166023,166025,166027,166029,166031,166033,166035,166037,166039,166041],{"class":188,"line":49},[186,166018,149582],{"class":202},[186,166020,64117],{"class":532},[186,166022,210],{"class":202},[186,166024,151085],{"class":532},[186,166026,13898],{"class":202},[186,166028,70561],{"class":532},[186,166030,210],{"class":202},[186,166032,2260],{"class":206},[186,166034,13898],{"class":202},[186,166036,152669],{"class":532},[186,166038,210],{"class":202},[186,166040,2596],{"class":206},[186,166042,6396],{"class":202},[186,166044,166045,166047,166049,166051,166053,166055,166057,166059,166061,166063,166065,166067,166069],{"class":188,"line":219},[186,166046,149582],{"class":202},[186,166048,64117],{"class":532},[186,166050,210],{"class":202},[186,166052,152133],{"class":532},[186,166054,13898],{"class":202},[186,166056,70561],{"class":532},[186,166058,210],{"class":202},[186,166060,2235],{"class":206},[186,166062,13898],{"class":202},[186,166064,152669],{"class":532},[186,166066,210],{"class":202},[186,166068,2419],{"class":206},[186,166070,6396],{"class":202},[186,166072,166073,166075,166077,166079,166081,166083,166085,166087,166089,166091,166093,166095,166097],{"class":188,"line":225},[186,166074,149582],{"class":202},[186,166076,64117],{"class":532},[186,166078,210],{"class":202},[186,166080,160928],{"class":532},[186,166082,13898],{"class":202},[186,166084,70561],{"class":532},[186,166086,210],{"class":202},[186,166088,2284],{"class":206},[186,166090,13898],{"class":202},[186,166092,152669],{"class":532},[186,166094,210],{"class":202},[186,166096,2016],{"class":206},[186,166098,6396],{"class":202},[186,166100,166101],{"class":188,"line":242},[186,166102,34701],{"class":202},[186,166104,166105],{"class":188,"line":248},[186,166106,3867],{"emptyLinePlaceholder":1551},[186,166108,166109,166111,166113,166115],{"class":188,"line":265},[186,166110,4491],{"class":669},[186,166112,153334],{"class":202},[186,166114,27500],{"class":669},[186,166116,153339],{"class":202},[186,166118,166119,166121,166123,166125,166128,166130],{"class":188,"line":271},[186,166120,32754],{"class":206},[186,166122,165769],{"class":202},[186,166124,64117],{"class":532},[186,166126,166127],{"class":202},"], student[",[186,166129,152669],{"class":532},[186,166131,6123],{"class":202},[169,166133,166134],{},"统计平均分：",[176,166136,166138],{"className":31833,"code":166137,"language":31835,"meta":181,"style":181},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[183,166139,166140,166148,166152,166162,166174,166178,166193],{"__ignoreMap":181},[186,166141,166142,166144,166146],{"class":188,"line":189},[186,166143,158457],{"class":202},[186,166145,529],{"class":669},[186,166147,48787],{"class":206},[186,166149,166150],{"class":188,"line":49},[186,166151,3867],{"emptyLinePlaceholder":1551},[186,166153,166154,166156,166158,166160],{"class":188,"line":219},[186,166155,4491],{"class":669},[186,166157,153334],{"class":202},[186,166159,27500],{"class":669},[186,166161,153339],{"class":202},[186,166163,166164,166166,166168,166170,166172],{"class":188,"line":225},[186,166165,160504],{"class":202},[186,166167,10940],{"class":669},[186,166169,153346],{"class":202},[186,166171,152669],{"class":532},[186,166173,34701],{"class":202},[186,166175,166176],{"class":188,"line":242},[186,166177,3867],{"emptyLinePlaceholder":1551},[186,166179,166180,166182,166184,166186,166188,166190],{"class":188,"line":248},[186,166181,164971],{"class":202},[186,166183,529],{"class":669},[186,166185,164976],{"class":202},[186,166187,2194],{"class":669},[186,166189,8794],{"class":206},[186,166191,166192],{"class":202},"(students)\n",[186,166194,166195,166197,166199,166201,166203,166205,166207,166209,166211,166213],{"class":188,"line":265},[186,166196,31870],{"class":206},[186,166198,832],{"class":202},[186,166200,1673],{"class":669},[186,166202,164994],{"class":532},[186,166204,2504],{"class":206},[186,166206,164999],{"class":202},[186,166208,158356],{"class":669},[186,166210,2553],{"class":206},[186,166212,1862],{"class":532},[186,166214,1629],{"class":202},[169,166216,166217],{},"查找学生：",[176,166219,166221],{"className":31833,"code":166220,"language":31835,"meta":181,"style":181},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[183,166222,166223,166238,166242,166252,166266,166272,166276,166282],{"__ignoreMap":181},[186,166224,166225,166227,166229,166231,166233,166236],{"class":188,"line":189},[186,166226,113009],{"class":202},[186,166228,529],{"class":669},[186,166230,62046],{"class":206},[186,166232,832],{"class":202},[186,166234,166235],{"class":532},"\"请输入学生姓名:\"",[186,166237,1629],{"class":202},[186,166239,166240],{"class":188,"line":49},[186,166241,3867],{"emptyLinePlaceholder":1551},[186,166243,166244,166246,166248,166250],{"class":188,"line":219},[186,166245,4491],{"class":669},[186,166247,153334],{"class":202},[186,166249,27500],{"class":669},[186,166251,153339],{"class":202},[186,166253,166254,166256,166258,166260,166262,166264],{"class":188,"line":225},[186,166255,4567],{"class":669},[186,166257,153346],{"class":202},[186,166259,64117],{"class":532},[186,166261,5909],{"class":202},[186,166263,4415],{"class":669},[186,166265,161629],{"class":202},[186,166267,166268,166270],{"class":188,"line":242},[186,166269,33906],{"class":206},[186,166271,151239],{"class":202},[186,166273,166274],{"class":188,"line":248},[186,166275,33082],{"class":669},[186,166277,166278,166280],{"class":188,"line":265},[186,166279,3169],{"class":669},[186,166281,5205],{"class":202},[186,166283,166284,166286,166288,166291],{"class":188,"line":271},[186,166285,32754],{"class":206},[186,166287,832],{"class":202},[186,166289,166290],{"class":532},"\"没有找到\"",[186,166292,1629],{"class":202},[14,166294,166296],{"id":166295},"_613-容器通用操作","6.13 容器通用操作",[169,166298,166299],{},"长度：",[176,166301,166303],{"className":31833,"code":166302,"language":31835,"meta":181,"style":181},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[183,166304,166305,166324,166334],{"__ignoreMap":181},[186,166306,166307,166309,166312,166314,166316,166318,166320,166322],{"class":188,"line":189},[186,166308,8821],{"class":206},[186,166310,166311],{"class":202},"([",[186,166313,1829],{"class":206},[186,166315,13898],{"class":202},[186,166317,1697],{"class":206},[186,166319,13898],{"class":202},[186,166321,1691],{"class":206},[186,166323,6123],{"class":202},[186,166325,166326,166328,166330,166332],{"class":188,"line":49},[186,166327,8821],{"class":206},[186,166329,832],{"class":202},[186,166331,157077],{"class":532},[186,166333,1629],{"class":202},[186,166335,166336,166338,166341,166343,166345,166347],{"class":188,"line":219},[186,166337,8821],{"class":206},[186,166339,166340],{"class":202},"({",[186,166342,64117],{"class":532},[186,166344,210],{"class":202},[186,166346,151085],{"class":532},[186,166348,166349],{"class":202},"})\n",[169,166351,166352],{},"最大最小：",[176,166354,166356],{"className":31833,"code":166355,"language":31835,"meta":181,"style":181},"max([1, 2, 3])\nmin([1, 2, 3])\n",[183,166357,166358,166376],{"__ignoreMap":181},[186,166359,166360,166362,166364,166366,166368,166370,166372,166374],{"class":188,"line":189},[186,166361,7478],{"class":206},[186,166363,166311],{"class":202},[186,166365,1829],{"class":206},[186,166367,13898],{"class":202},[186,166369,1697],{"class":206},[186,166371,13898],{"class":202},[186,166373,1691],{"class":206},[186,166375,6123],{"class":202},[186,166377,166378,166381,166383,166385,166387,166389,166391,166393],{"class":188,"line":49},[186,166379,166380],{"class":206},"min",[186,166382,166311],{"class":202},[186,166384,1829],{"class":206},[186,166386,13898],{"class":202},[186,166388,1697],{"class":206},[186,166390,13898],{"class":202},[186,166392,1691],{"class":206},[186,166394,6123],{"class":202},[169,166396,166397],{},"求和：",[176,166399,166401],{"className":31833,"code":166400,"language":31835,"meta":181,"style":181},"sum([1, 2, 3])\n",[183,166402,166403],{"__ignoreMap":181},[186,166404,166405,166408,166410,166412,166414,166416,166418,166420],{"class":188,"line":189},[186,166406,166407],{"class":206},"sum",[186,166409,166311],{"class":202},[186,166411,1829],{"class":206},[186,166413,13898],{"class":202},[186,166415,1697],{"class":206},[186,166417,13898],{"class":202},[186,166419,1691],{"class":206},[186,166421,6123],{"class":202},[169,166423,164668],{},[176,166425,166427],{"className":31833,"code":166426,"language":31835,"meta":181,"style":181},"sorted([3, 1, 2])\n",[183,166428,166429],{"__ignoreMap":181},[186,166430,166431,166434,166436,166438,166440,166442,166444,166446],{"class":188,"line":189},[186,166432,166433],{"class":206},"sorted",[186,166435,166311],{"class":202},[186,166437,1691],{"class":206},[186,166439,13898],{"class":202},[186,166441,1829],{"class":206},[186,166443,13898],{"class":202},[186,166445,1697],{"class":206},[186,166447,6123],{"class":202},[169,166449,166450],{},"类型转换：",[176,166452,166454],{"className":31833,"code":166453,"language":31835,"meta":181,"style":181},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[183,166455,166456,166466,166484],{"__ignoreMap":181},[186,166457,166458,166460,166462,166464],{"class":188,"line":189},[186,166459,155267],{"class":206},[186,166461,832],{"class":202},[186,166463,157077],{"class":532},[186,166465,1629],{"class":202},[186,166467,166468,166470,166472,166474,166476,166478,166480,166482],{"class":188,"line":49},[186,166469,156462],{"class":206},[186,166471,166311],{"class":202},[186,166473,1829],{"class":206},[186,166475,13898],{"class":202},[186,166477,1697],{"class":206},[186,166479,13898],{"class":202},[186,166481,1691],{"class":206},[186,166483,6123],{"class":202},[186,166485,166486,166488,166490,166492,166494,166496,166498,166500,166502,166504],{"class":188,"line":219},[186,166487,156487],{"class":206},[186,166489,166311],{"class":202},[186,166491,1829],{"class":206},[186,166493,13898],{"class":202},[186,166495,1829],{"class":206},[186,166497,13898],{"class":202},[186,166499,1697],{"class":206},[186,166501,13898],{"class":202},[186,166503,1691],{"class":206},[186,166505,6123],{"class":202},[169,166507,166508],{},"成员判断：",[176,166510,166512],{"className":31833,"code":166511,"language":31835,"meta":181,"style":181},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[183,166513,166514,166531,166555],{"__ignoreMap":181},[186,166515,166516,166518,166520,166523,166526,166529],{"class":188,"line":189},[186,166517,31870],{"class":206},[186,166519,832],{"class":202},[186,166521,166522],{"class":532},"\"a\"",[186,166524,166525],{"class":669}," in",[186,166527,166528],{"class":532}," \"abc\"",[186,166530,1629],{"class":202},[186,166532,166533,166535,166537,166539,166541,166543,166545,166547,166549,166551,166553],{"class":188,"line":49},[186,166534,31870],{"class":206},[186,166536,832],{"class":202},[186,166538,1829],{"class":206},[186,166540,166525],{"class":669},[186,166542,53673],{"class":202},[186,166544,1829],{"class":206},[186,166546,13898],{"class":202},[186,166548,1697],{"class":206},[186,166550,13898],{"class":202},[186,166552,1691],{"class":206},[186,166554,6123],{"class":202},[186,166556,166557,166559,166561,166563,166565,166567,166569,166571,166573],{"class":188,"line":219},[186,166558,31870],{"class":206},[186,166560,832],{"class":202},[186,166562,64117],{"class":532},[186,166564,166525],{"class":669},[186,166566,5914],{"class":202},[186,166568,64117],{"class":532},[186,166570,210],{"class":202},[186,166572,151085],{"class":532},[186,166574,166349],{"class":202},[14,166576,166578],{"id":166577},"_614-推导式","6.14 推导式",[169,166580,166581],{},"推导式用于快速生成容器。",[169,166583,166584],{},"列表推导式：",[176,166586,166588],{"className":31833,"code":166587,"language":31835,"meta":181,"style":181},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[183,166589,166590,166617],{"__ignoreMap":181},[186,166591,166592,166594,166596,166599,166601,166603,166605,166607,166609,166611,166613,166615],{"class":188,"line":189},[186,166593,165297],{"class":202},[186,166595,529],{"class":669},[186,166597,166598],{"class":202}," [i ",[186,166600,4491],{"class":669},[186,166602,10901],{"class":202},[186,166604,27500],{"class":669},[186,166606,33898],{"class":206},[186,166608,832],{"class":202},[186,166610,1829],{"class":206},[186,166612,13898],{"class":202},[186,166614,1954],{"class":206},[186,166616,98731],{"class":202},[186,166618,166619,166621],{"class":188,"line":49},[186,166620,31870],{"class":206},[186,166622,165513],{"class":202},[169,166624,166625],{},"带条件：",[176,166627,166629],{"className":31833,"code":166628,"language":31835,"meta":181,"style":181},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[183,166630,166631,166672],{"__ignoreMap":181},[186,166632,166633,166636,166638,166640,166642,166644,166646,166648,166650,166652,166654,166656,166658,166660,166662,166664,166666,166668,166670],{"class":188,"line":189},[186,166634,166635],{"class":202},"even_nums ",[186,166637,529],{"class":669},[186,166639,166598],{"class":202},[186,166641,4491],{"class":669},[186,166643,10901],{"class":202},[186,166645,27500],{"class":669},[186,166647,33898],{"class":206},[186,166649,832],{"class":202},[186,166651,1829],{"class":206},[186,166653,13898],{"class":202},[186,166655,1947],{"class":206},[186,166657,839],{"class":202},[186,166659,3003],{"class":669},[186,166661,10901],{"class":202},[186,166663,670],{"class":669},[186,166665,16217],{"class":206},[186,166667,102990],{"class":669},[186,166669,5559],{"class":206},[186,166671,34701],{"class":202},[186,166673,166674,166676],{"class":188,"line":49},[186,166675,31870],{"class":206},[186,166677,166678],{"class":202},"(even_nums)\n",[169,166680,166681],{},"字典推导式：",[176,166683,166685],{"className":31833,"code":166684,"language":31835,"meta":181,"style":181},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[183,166686,166687,166721],{"__ignoreMap":181},[186,166688,166689,166692,166694,166697,166699,166701,166704,166706,166708,166710,166712,166714,166716,166718],{"class":188,"line":189},[186,166690,166691],{"class":202},"squares ",[186,166693,529],{"class":669},[186,166695,166696],{"class":202}," {i: i ",[186,166698,12124],{"class":669},[186,166700,16217],{"class":206},[186,166702,166703],{"class":669}," for",[186,166705,10901],{"class":202},[186,166707,27500],{"class":669},[186,166709,33898],{"class":206},[186,166711,832],{"class":202},[186,166713,1829],{"class":206},[186,166715,13898],{"class":202},[186,166717,1954],{"class":206},[186,166719,166720],{"class":202},")}\n",[186,166722,166723,166725],{"class":188,"line":49},[186,166724,31870],{"class":206},[186,166726,166727],{"class":202},"(squares)\n",[169,166729,166730],{},"集合推导式：",[176,166732,166734],{"className":31833,"code":166733,"language":31835,"meta":181,"style":181},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[183,166735,166736,166757],{"__ignoreMap":181},[186,166737,166738,166741,166743,166746,166748,166750,166752,166755],{"class":188,"line":189},[186,166739,166740],{"class":202},"chars ",[186,166742,529],{"class":669},[186,166744,166745],{"class":202}," {ch ",[186,166747,4491],{"class":669},[186,166749,160889],{"class":202},[186,166751,27500],{"class":669},[186,166753,166754],{"class":532}," \"hello\"",[186,166756,639],{"class":202},[186,166758,166759,166761],{"class":188,"line":49},[186,166760,31870],{"class":206},[186,166762,166763],{"class":202},"(chars)\n",[169,166765,166766],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166768,166770],{"id":166769},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[176,166772,166774],{"className":31833,"code":166773,"language":31835,"meta":181,"style":181},"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",[183,166775,166776,166784,166804,166824,166844,166864,166868,166872,166880,166894,166903,166907,166917,166929,166933,166953,166962,166966,166982,166987,166991,167005,167009,167031,167067],{"__ignoreMap":181},[186,166777,166778,166780,166782],{"class":188,"line":189},[186,166779,160913],{"class":202},[186,166781,529],{"class":669},[186,166783,56888],{"class":202},[186,166785,166786,166788,166790,166792,166794,166796,166798,166800,166802],{"class":188,"line":49},[186,166787,149582],{"class":202},[186,166789,64117],{"class":532},[186,166791,210],{"class":202},[186,166793,151085],{"class":532},[186,166795,13898],{"class":202},[186,166797,152669],{"class":532},[186,166799,210],{"class":202},[186,166801,2596],{"class":206},[186,166803,6396],{"class":202},[186,166805,166806,166808,166810,166812,166814,166816,166818,166820,166822],{"class":188,"line":219},[186,166807,149582],{"class":202},[186,166809,64117],{"class":532},[186,166811,210],{"class":202},[186,166813,152133],{"class":532},[186,166815,13898],{"class":202},[186,166817,152669],{"class":532},[186,166819,210],{"class":202},[186,166821,2419],{"class":206},[186,166823,6396],{"class":202},[186,166825,166826,166828,166830,166832,166834,166836,166838,166840,166842],{"class":188,"line":225},[186,166827,149582],{"class":202},[186,166829,64117],{"class":532},[186,166831,210],{"class":202},[186,166833,160928],{"class":532},[186,166835,13898],{"class":202},[186,166837,152669],{"class":532},[186,166839,210],{"class":202},[186,166841,2016],{"class":206},[186,166843,6396],{"class":202},[186,166845,166846,166848,166850,166852,166854,166856,166858,166860,166862],{"class":188,"line":242},[186,166847,149582],{"class":202},[186,166849,64117],{"class":532},[186,166851,210],{"class":202},[186,166853,164507],{"class":532},[186,166855,13898],{"class":202},[186,166857,152669],{"class":532},[186,166859,210],{"class":202},[186,166861,2490],{"class":206},[186,166863,6396],{"class":202},[186,166865,166866],{"class":188,"line":248},[186,166867,34701],{"class":202},[186,166869,166870],{"class":188,"line":265},[186,166871,3867],{"emptyLinePlaceholder":1551},[186,166873,166874,166876,166878],{"class":188,"line":271},[186,166875,158457],{"class":202},[186,166877,529],{"class":669},[186,166879,48787],{"class":206},[186,166881,166882,166885,166887,166890,166892],{"class":188,"line":288},[186,166883,166884],{"class":202},"max_student ",[186,166886,529],{"class":669},[186,166888,166889],{"class":202}," students[",[186,166891,1803],{"class":206},[186,166893,34701],{"class":202},[186,166895,166896,166899,166901],{"class":188,"line":294},[186,166897,166898],{"class":202},"passed ",[186,166900,529],{"class":669},[186,166902,53285],{"class":202},[186,166904,166905],{"class":188,"line":1212},[186,166906,3867],{"emptyLinePlaceholder":1551},[186,166908,166909,166911,166913,166915],{"class":188,"line":1223},[186,166910,4491],{"class":669},[186,166912,153334],{"class":202},[186,166914,27500],{"class":669},[186,166916,153339],{"class":202},[186,166918,166919,166921,166923,166925,166927],{"class":188,"line":1236},[186,166920,160504],{"class":202},[186,166922,10940],{"class":669},[186,166924,153346],{"class":202},[186,166926,152669],{"class":532},[186,166928,34701],{"class":202},[186,166930,166931],{"class":188,"line":3096},[186,166932,3867],{"emptyLinePlaceholder":1551},[186,166934,166935,166937,166939,166941,166943,166945,166948,166950],{"class":188,"line":3110},[186,166936,4567],{"class":669},[186,166938,153346],{"class":202},[186,166940,152669],{"class":532},[186,166942,5909],{"class":202},[186,166944,2567],{"class":669},[186,166946,166947],{"class":202}," max_student[",[186,166949,152669],{"class":532},[186,166951,166952],{"class":202},"]:\n",[186,166954,166955,166958,166960],{"class":188,"line":3115},[186,166956,166957],{"class":202},"        max_student ",[186,166959,529],{"class":669},[186,166961,153362],{"class":202},[186,166963,166964],{"class":188,"line":3121},[186,166965,3867],{"emptyLinePlaceholder":1551},[186,166967,166968,166970,166972,166974,166976,166978,166980],{"class":188,"line":3142},[186,166969,4567],{"class":669},[186,166971,153346],{"class":202},[186,166973,152669],{"class":532},[186,166975,5909],{"class":202},[186,166977,3178],{"class":669},[186,166979,159034],{"class":206},[186,166981,5205],{"class":202},[186,166983,166984],{"class":188,"line":3147},[186,166985,166986],{"class":202},"        passed.append(student)\n",[186,166988,166989],{"class":188,"line":3161},[186,166990,3867],{"emptyLinePlaceholder":1551},[186,166992,166993,166995,166997,166999,167001,167003],{"class":188,"line":3166},[186,166994,164971],{"class":202},[186,166996,529],{"class":669},[186,166998,164976],{"class":202},[186,167000,2194],{"class":669},[186,167002,8794],{"class":206},[186,167004,166192],{"class":202},[186,167006,167007],{"class":188,"line":3195},[186,167008,3867],{"emptyLinePlaceholder":1551},[186,167010,167011,167013,167015,167017,167019,167021,167023,167025,167027,167029],{"class":188,"line":3200},[186,167012,31870],{"class":206},[186,167014,832],{"class":202},[186,167016,1673],{"class":669},[186,167018,164994],{"class":532},[186,167020,2504],{"class":206},[186,167022,164999],{"class":202},[186,167024,158356],{"class":669},[186,167026,2553],{"class":206},[186,167028,1862],{"class":532},[186,167030,1629],{"class":202},[186,167032,167033,167035,167037,167039,167042,167044,167047,167049,167051,167053,167055,167057,167059,167061,167063,167065],{"class":188,"line":3217},[186,167034,31870],{"class":206},[186,167036,832],{"class":202},[186,167038,1673],{"class":669},[186,167040,167041],{"class":532},"\"最高分学生:",[186,167043,2504],{"class":206},[186,167045,167046],{"class":202},"max_student[",[186,167048,154079],{"class":532},[186,167050,2547],{"class":202},[186,167052,2553],{"class":206},[186,167054,5914],{"class":206},[186,167056,167046],{"class":202},[186,167058,154117],{"class":532},[186,167060,2547],{"class":202},[186,167062,2553],{"class":206},[186,167064,1862],{"class":532},[186,167066,1629],{"class":202},[186,167068,167069,167071,167073,167075,167078,167081,167084,167086,167088],{"class":188,"line":3222},[186,167070,31870],{"class":206},[186,167072,832],{"class":202},[186,167074,1673],{"class":669},[186,167076,167077],{"class":532},"\"及格人数:",[186,167079,167080],{"class":206},"{len",[186,167082,167083],{"class":202},"(passed)",[186,167085,2553],{"class":206},[186,167087,1862],{"class":532},[186,167089,1629],{"class":202},[14,167091,167093],{"id":167092},"_616-易错点","6.16 易错点",[34,167095,167096,167099,167102,167105,167111,167120],{},[22,167097,167098],{},"列表可变，元组和字符串不可变。",[22,167100,167101],{},"切片结束位置不包含。",[22,167103,167104],{},"字典通过 key 取值，不是通过索引。",[22,167106,167107,167108,913],{},"空集合要用 ",[183,167109,167110],{},"set()",[22,167112,105797,167113,167116,167117,913],{},[183,167114,167115],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[183,167118,167119],{},"get()",[22,167121,167122],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167124,167126],{"id":167125},"_617-本章练习","6.17 本章练习",[34,167128,167129,167132,167135,167138,167141],{},[22,167130,167131],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[22,167133,167134],{},"输入一句话，统计每个字符出现次数。",[22,167136,167137],{},"使用集合去除列表中的重复元素。",[22,167139,167140],{},"使用字典保存一个学生的信息，并实现修改成绩。",[22,167142,167143],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1524,167145,167146],{},"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":181,"searchDepth":49,"depth":49,"links":167148},[167149,167150,167151,167152,167153,167154,167155,167156,167157,167158,167159,167160,167161,167162,167163,167164,167165],{"id":164129,"depth":49,"text":164130},{"id":164246,"depth":49,"text":164247},{"id":164336,"depth":49,"text":164337},{"id":164460,"depth":49,"text":164461},{"id":164823,"depth":49,"text":164824},{"id":165010,"depth":49,"text":165011},{"id":165129,"depth":49,"text":165130},{"id":165271,"depth":49,"text":165272},{"id":165458,"depth":49,"text":165459},{"id":165702,"depth":49,"text":165703},{"id":165912,"depth":49,"text":165913},{"id":165997,"depth":49,"text":165998},{"id":166295,"depth":49,"text":166296},{"id":166577,"depth":49,"text":166578},{"id":166769,"depth":49,"text":166770},{"id":167092,"depth":49,"text":167093},{"id":167125,"depth":49,"text":167126},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164121,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167172,"title":167173,"body":167174,"description":1548,"extension":1549,"meta":169346,"navigation":1551,"path":169347,"seo":169348,"stem":169349,"__hash__":169350},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167175,"toc":169321},[167176,167179,167183,167186,167266,167269,167290,167293,167297,167300,167362,167365,167382,167386,167389,167434,167436,167444,167448,167451,167533,167536,167539,167564,167567,167590,167594,167597,167599,167661,167664,167666,167717,167721,167725,167731,167836,167840,167846,167917,167921,167924,167992,167995,168075,168079,168085,168121,168124,168127,168237,168243,168247,168250,168322,168325,168329,168333,168338,168400,168404,168409,168477,168481,168486,168602,168606,168609,168689,168692,168696,168699,168803,168805,168820,168823,168827,168965,168973,168977,168979,168990,168992,169250,169254,169286,169290,169318],[10,167177,167173],{"id":167178},"_7-函数进阶",[14,167180,167182],{"id":167181},"_71-多返回值","7.1 多返回值",[169,167184,167185],{},"Python 函数可以返回多个值，本质上返回的是元组。",[176,167187,167189],{"className":31833,"code":167188,"language":31835,"meta":181,"style":181},"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",[183,167190,167191,167200,167208,167216,167225,167232,167236,167240,167249,167255],{"__ignoreMap":181},[186,167192,167193,167195,167198],{"class":188,"line":189},[186,167194,33402],{"class":669},[186,167196,167197],{"class":198}," get_info",[186,167199,33408],{"class":202},[186,167201,167202,167204,167206],{"class":188,"line":49},[186,167203,153567],{"class":202},[186,167205,529],{"class":669},[186,167207,150550],{"class":532},[186,167209,167210,167212,167214],{"class":188,"line":219},[186,167211,153583],{"class":202},[186,167213,529],{"class":669},[186,167215,147748],{"class":206},[186,167217,167218,167220,167222],{"class":188,"line":225},[186,167219,153598],{"class":202},[186,167221,529],{"class":669},[186,167223,167224],{"class":206}," 95\n",[186,167226,167227,167229],{"class":188,"line":242},[186,167228,5556],{"class":669},[186,167230,167231],{"class":202}," name, age, score\n",[186,167233,167234],{"class":188,"line":248},[186,167235,3867],{"emptyLinePlaceholder":1551},[186,167237,167238],{"class":188,"line":265},[186,167239,3867],{"emptyLinePlaceholder":1551},[186,167241,167242,167244,167246],{"class":188,"line":271},[186,167243,162503],{"class":202},[186,167245,529],{"class":669},[186,167247,167248],{"class":202}," get_info()\n",[186,167250,167251,167253],{"class":188,"line":288},[186,167252,31870],{"class":206},[186,167254,78018],{"class":202},[186,167256,167257,167259,167261,167263],{"class":188,"line":294},[186,167258,31870],{"class":206},[186,167260,832],{"class":202},[186,167262,104538],{"class":206},[186,167264,167265],{"class":202},"(result))\n",[169,167267,167268],{},"可以直接解包：",[176,167270,167272],{"className":31833,"code":167271,"language":31835,"meta":181,"style":181},"name, age, score = get_info()\nprint(name, age, score)\n",[183,167273,167274,167283],{"__ignoreMap":181},[186,167275,167276,167279,167281],{"class":188,"line":189},[186,167277,167278],{"class":202},"name, age, score ",[186,167280,529],{"class":669},[186,167282,167248],{"class":202},[186,167284,167285,167287],{"class":188,"line":49},[186,167286,31870],{"class":206},[186,167288,167289],{"class":202},"(name, age, score)\n",[169,167291,167292],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167294,167296],{"id":167295},"_72-位置参数","7.2 位置参数",[169,167298,167299],{},"位置参数按顺序传递。",[176,167301,167303],{"className":31833,"code":167302,"language":31835,"meta":181,"style":181},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[183,167304,167305,167313,167341,167345,167349],{"__ignoreMap":181},[186,167306,167307,167309,167311],{"class":188,"line":189},[186,167308,33402],{"class":669},[186,167310,150569],{"class":198},[186,167312,150572],{"class":202},[186,167314,167315,167317,167319,167321,167323,167325,167327,167329,167331,167333,167335,167337,167339],{"class":188,"line":49},[186,167316,32754],{"class":206},[186,167318,832],{"class":202},[186,167320,1673],{"class":669},[186,167322,150583],{"class":532},[186,167324,2504],{"class":206},[186,167326,81242],{"class":202},[186,167328,2553],{"class":206},[186,167330,150592],{"class":532},[186,167332,2504],{"class":206},[186,167334,71658],{"class":202},[186,167336,2553],{"class":206},[186,167338,150601],{"class":532},[186,167340,1629],{"class":202},[186,167342,167343],{"class":188,"line":219},[186,167344,3867],{"emptyLinePlaceholder":1551},[186,167346,167347],{"class":188,"line":225},[186,167348,3867],{"emptyLinePlaceholder":1551},[186,167350,167351,167354,167356,167358,167360],{"class":188,"line":242},[186,167352,167353],{"class":202},"introduce(",[186,167355,151085],{"class":532},[186,167357,13898],{"class":202},[186,167359,2260],{"class":206},[186,167361,1629],{"class":202},[169,167363,167364],{},"顺序错了就会得到错误含义：",[176,167366,167368],{"className":31833,"code":167367,"language":31835,"meta":181,"style":181},"introduce(18, \"小明\")\n",[183,167369,167370],{"__ignoreMap":181},[186,167371,167372,167374,167376,167378,167380],{"class":188,"line":189},[186,167373,167353],{"class":202},[186,167375,2260],{"class":206},[186,167377,13898],{"class":202},[186,167379,151085],{"class":532},[186,167381,1629],{"class":202},[14,167383,167385],{"id":167384},"_73-关键字参数","7.3 关键字参数",[169,167387,167388],{},"关键字参数按参数名传递。",[176,167390,167392],{"className":31833,"code":167391,"language":31835,"meta":181,"style":181},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[183,167393,167394,167414],{"__ignoreMap":181},[186,167395,167396,167398,167400,167402,167404,167406,167408,167410,167412],{"class":188,"line":189},[186,167397,167353],{"class":202},[186,167399,81242],{"class":835},[186,167401,529],{"class":669},[186,167403,151085],{"class":532},[186,167405,13898],{"class":202},[186,167407,71658],{"class":835},[186,167409,529],{"class":669},[186,167411,2260],{"class":206},[186,167413,1629],{"class":202},[186,167415,167416,167418,167420,167422,167424,167426,167428,167430,167432],{"class":188,"line":49},[186,167417,167353],{"class":202},[186,167419,71658],{"class":835},[186,167421,529],{"class":669},[186,167423,2260],{"class":206},[186,167425,13898],{"class":202},[186,167427,81242],{"class":835},[186,167429,529],{"class":669},[186,167431,151085],{"class":532},[186,167433,1629],{"class":202},[169,167435,119365],{},[34,167437,167438,167441],{},[22,167439,167440],{},"顺序不容易错。",[22,167442,167443],{},"调用时可读性更强。",[14,167445,167447],{"id":167446},"_74-默认参数","7.4 默认参数",[169,167449,167450],{},"默认参数给参数设置默认值。",[176,167452,167454],{"className":31833,"code":167453,"language":31835,"meta":181,"style":181},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[183,167455,167456,167472,167502,167506,167510,167520],{"__ignoreMap":181},[186,167457,167458,167460,167462,167465,167467,167470],{"class":188,"line":189},[186,167459,33402],{"class":669},[186,167461,123524],{"class":198},[186,167463,167464],{"class":202},"(host, port",[186,167466,529],{"class":669},[186,167468,167469],{"class":206},"3306",[186,167471,32241],{"class":202},[186,167473,167474,167476,167478,167480,167483,167485,167487,167489,167491,167493,167496,167498,167500],{"class":188,"line":49},[186,167475,32754],{"class":206},[186,167477,832],{"class":202},[186,167479,1673],{"class":669},[186,167481,167482],{"class":532},"\"连接",[186,167484,2504],{"class":206},[186,167486,28852],{"class":202},[186,167488,2553],{"class":206},[186,167490,2467],{"class":532},[186,167492,2504],{"class":206},[186,167494,167495],{"class":202},"port",[186,167497,2553],{"class":206},[186,167499,1862],{"class":532},[186,167501,1629],{"class":202},[186,167503,167504],{"class":188,"line":219},[186,167505,3867],{"emptyLinePlaceholder":1551},[186,167507,167508],{"class":188,"line":225},[186,167509,3867],{"emptyLinePlaceholder":1551},[186,167511,167512,167515,167518],{"class":188,"line":242},[186,167513,167514],{"class":202},"connect(",[186,167516,167517],{"class":532},"\"localhost\"",[186,167519,1629],{"class":202},[186,167521,167522,167524,167526,167528,167531],{"class":188,"line":248},[186,167523,167514],{"class":202},[186,167525,167517],{"class":532},[186,167527,13898],{"class":202},[186,167529,167530],{"class":206},"6379",[186,167532,1629],{"class":202},[169,167534,167535],{},"注意：默认参数必须放在非默认参数后面。",[169,167537,167538],{},"错误：",[176,167540,167542],{"className":31833,"code":167541,"language":31835,"meta":181,"style":181},"def connect(port=3306, host):\n    pass\n",[183,167543,167544,167560],{"__ignoreMap":181},[186,167545,167546,167548,167550,167553,167555,167557],{"class":188,"line":189},[186,167547,33402],{"class":669},[186,167549,123524],{"class":198},[186,167551,167552],{"class":202},"(port",[186,167554,529],{"class":669},[186,167556,167469],{"class":206},[186,167558,167559],{"class":202},", host):\n",[186,167561,167562],{"class":188,"line":49},[186,167563,150734],{"class":669},[169,167565,167566],{},"正确：",[176,167568,167570],{"className":31833,"code":167569,"language":31835,"meta":181,"style":181},"def connect(host, port=3306):\n    pass\n",[183,167571,167572,167586],{"__ignoreMap":181},[186,167573,167574,167576,167578,167580,167582,167584],{"class":188,"line":189},[186,167575,33402],{"class":669},[186,167577,123524],{"class":198},[186,167579,167464],{"class":202},[186,167581,529],{"class":669},[186,167583,167469],{"class":206},[186,167585,32241],{"class":202},[186,167587,167588],{"class":188,"line":49},[186,167589,150734],{"class":669},[14,167591,167593],{"id":167592},"_75-默认参数的坑","7.5 默认参数的坑",[169,167595,167596],{},"不要使用可变对象作为默认参数。",[169,167598,158820],{},[176,167600,167602],{"className":31833,"code":167601,"language":31835,"meta":181,"style":181},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[183,167603,167604,167619,167624,167631,167635,167639,167650],{"__ignoreMap":181},[186,167605,167606,167608,167611,167614,167616],{"class":188,"line":189},[186,167607,33402],{"class":669},[186,167609,167610],{"class":198}," add_item",[186,167612,167613],{"class":202},"(item, items",[186,167615,529],{"class":669},[186,167617,167618],{"class":202},"[]):\n",[186,167620,167621],{"class":188,"line":49},[186,167622,167623],{"class":202},"    items.append(item)\n",[186,167625,167626,167628],{"class":188,"line":219},[186,167627,5556],{"class":669},[186,167629,167630],{"class":202}," items\n",[186,167632,167633],{"class":188,"line":225},[186,167634,3867],{"emptyLinePlaceholder":1551},[186,167636,167637],{"class":188,"line":242},[186,167638,3867],{"emptyLinePlaceholder":1551},[186,167640,167641,167643,167646,167648],{"class":188,"line":248},[186,167642,31870],{"class":206},[186,167644,167645],{"class":202},"(add_item(",[186,167647,166522],{"class":532},[186,167649,31952],{"class":202},[186,167651,167652,167654,167656,167659],{"class":188,"line":265},[186,167653,31870],{"class":206},[186,167655,167645],{"class":202},[186,167657,167658],{"class":532},"\"b\"",[186,167660,31952],{"class":202},[169,167662,167663],{},"第二次调用会复用第一次的列表。",[169,167665,157085],{},[176,167667,167669],{"className":31833,"code":167668,"language":31835,"meta":181,"style":181},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[183,167670,167671,167685,167698,167707,167711],{"__ignoreMap":181},[186,167672,167673,167675,167677,167679,167681,167683],{"class":188,"line":189},[186,167674,33402],{"class":669},[186,167676,167610],{"class":198},[186,167678,167613],{"class":202},[186,167680,529],{"class":669},[186,167682,97117],{"class":206},[186,167684,32241],{"class":202},[186,167686,167687,167689,167692,167694,167696],{"class":188,"line":49},[186,167688,4567],{"class":669},[186,167690,167691],{"class":202}," items ",[186,167693,40381],{"class":669},[186,167695,40387],{"class":206},[186,167697,5205],{"class":202},[186,167699,167700,167703,167705],{"class":188,"line":219},[186,167701,167702],{"class":202},"        items ",[186,167704,529],{"class":669},[186,167706,53285],{"class":202},[186,167708,167709],{"class":188,"line":225},[186,167710,167623],{"class":202},[186,167712,167713,167715],{"class":188,"line":242},[186,167714,5556],{"class":669},[186,167716,167630],{"class":202},[14,167718,167720],{"id":167719},"_76-不定长参数","7.6 不定长参数",[29,167722,167724],{"id":167723},"_761-args","7.6.1 *args",[169,167726,167727,167730],{},[183,167728,167729],{},"*args"," 接收任意数量的位置参数，得到元组。",[176,167732,167734],{"className":31833,"code":167733,"language":31835,"meta":181,"style":181},"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",[183,167735,167736,167749,167757,167768,167777,167783,167787,167791,167810],{"__ignoreMap":181},[186,167737,167738,167740,167742,167744,167746],{"class":188,"line":189},[186,167739,33402],{"class":669},[186,167741,6673],{"class":198},[186,167743,832],{"class":202},[186,167745,2065],{"class":669},[186,167747,167748],{"class":202},"args):\n",[186,167750,167751,167753,167755],{"class":188,"line":49},[186,167752,160504],{"class":202},[186,167754,529],{"class":669},[186,167756,48787],{"class":206},[186,167758,167759,167761,167763,167765],{"class":188,"line":219},[186,167760,4667],{"class":669},[186,167762,157377],{"class":202},[186,167764,27500],{"class":669},[186,167766,167767],{"class":202}," args:\n",[186,167769,167770,167772,167774],{"class":188,"line":225},[186,167771,161179],{"class":202},[186,167773,10940],{"class":669},[186,167775,167776],{"class":202}," num\n",[186,167778,167779,167781],{"class":188,"line":242},[186,167780,5556],{"class":669},[186,167782,163484],{"class":202},[186,167784,167785],{"class":188,"line":248},[186,167786,3867],{"emptyLinePlaceholder":1551},[186,167788,167789],{"class":188,"line":265},[186,167790,3867],{"emptyLinePlaceholder":1551},[186,167792,167793,167795,167798,167800,167802,167804,167806,167808],{"class":188,"line":271},[186,167794,31870],{"class":206},[186,167796,167797],{"class":202},"(add(",[186,167799,1829],{"class":206},[186,167801,13898],{"class":202},[186,167803,1697],{"class":206},[186,167805,13898],{"class":202},[186,167807,1691],{"class":206},[186,167809,31952],{"class":202},[186,167811,167812,167814,167816,167818,167820,167822,167824,167826,167828,167830,167832,167834],{"class":188,"line":288},[186,167813,31870],{"class":206},[186,167815,167797],{"class":202},[186,167817,1829],{"class":206},[186,167819,13898],{"class":202},[186,167821,1697],{"class":206},[186,167823,13898],{"class":202},[186,167825,1691],{"class":206},[186,167827,13898],{"class":202},[186,167829,1904],{"class":206},[186,167831,13898],{"class":202},[186,167833,1930],{"class":206},[186,167835,31952],{"class":202},[29,167837,167839],{"id":167838},"_762-kwargs","7.6.2 **kwargs",[169,167841,167842,167845],{},[183,167843,167844],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[176,167847,167849],{"className":31833,"code":167848,"language":31835,"meta":181,"style":181},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[183,167850,167851,167864,167875,167881,167885,167889],{"__ignoreMap":181},[186,167852,167853,167855,167857,167859,167861],{"class":188,"line":189},[186,167854,33402],{"class":669},[186,167856,163142],{"class":198},[186,167858,832],{"class":202},[186,167860,12124],{"class":669},[186,167862,167863],{"class":202},"kwargs):\n",[186,167865,167866,167868,167870,167872],{"class":188,"line":49},[186,167867,4667],{"class":669},[186,167869,165982],{"class":202},[186,167871,27500],{"class":669},[186,167873,167874],{"class":202}," kwargs.items():\n",[186,167876,167877,167879],{"class":188,"line":219},[186,167878,33906],{"class":206},[186,167880,165994],{"class":202},[186,167882,167883],{"class":188,"line":225},[186,167884,3867],{"emptyLinePlaceholder":1551},[186,167886,167887],{"class":188,"line":242},[186,167888,3867],{"emptyLinePlaceholder":1551},[186,167890,167891,167893,167895,167897,167899,167901,167903,167905,167907,167909,167911,167913,167915],{"class":188,"line":248},[186,167892,163207],{"class":202},[186,167894,81242],{"class":835},[186,167896,529],{"class":669},[186,167898,151085],{"class":532},[186,167900,13898],{"class":202},[186,167902,71658],{"class":835},[186,167904,529],{"class":669},[186,167906,2260],{"class":206},[186,167908,13898],{"class":202},[186,167910,71709],{"class":835},[186,167912,529],{"class":669},[186,167914,70706],{"class":532},[186,167916,1629],{"class":202},[14,167918,167920],{"id":167919},"_77-参数解包","7.7 参数解包",[169,167922,167923],{},"列表或元组解包为位置参数：",[176,167925,167927],{"className":31833,"code":167926,"language":31835,"meta":181,"style":181},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[183,167928,167929,167938,167953,167957,167961,167981],{"__ignoreMap":181},[186,167930,167931,167933,167935],{"class":188,"line":189},[186,167932,33402],{"class":669},[186,167934,6673],{"class":198},[186,167936,167937],{"class":202},"(a, b, c):\n",[186,167939,167940,167942,167944,167946,167948,167950],{"class":188,"line":49},[186,167941,5556],{"class":669},[186,167943,12332],{"class":202},[186,167945,2091],{"class":669},[186,167947,12345],{"class":202},[186,167949,2091],{"class":669},[186,167951,167952],{"class":202}," c\n",[186,167954,167955],{"class":188,"line":219},[186,167956,3867],{"emptyLinePlaceholder":1551},[186,167958,167959],{"class":188,"line":225},[186,167960,3867],{"emptyLinePlaceholder":1551},[186,167962,167963,167965,167967,167969,167971,167973,167975,167977,167979],{"class":188,"line":242},[186,167964,165297],{"class":202},[186,167966,529],{"class":669},[186,167968,53673],{"class":202},[186,167970,1829],{"class":206},[186,167972,13898],{"class":202},[186,167974,1697],{"class":206},[186,167976,13898],{"class":202},[186,167978,1691],{"class":206},[186,167980,34701],{"class":202},[186,167982,167983,167985,167987,167989],{"class":188,"line":248},[186,167984,31870],{"class":206},[186,167986,167797],{"class":202},[186,167988,2065],{"class":669},[186,167990,167991],{"class":202},"nums))\n",[169,167993,167994],{},"字典解包为关键字参数：",[176,167996,167998],{"className":31833,"code":167997,"language":31835,"meta":181,"style":181},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[183,167999,168000,168008,168034,168038,168042,168066],{"__ignoreMap":181},[186,168001,168002,168004,168006],{"class":188,"line":189},[186,168003,33402],{"class":669},[186,168005,150569],{"class":198},[186,168007,150572],{"class":202},[186,168009,168010,168012,168014,168016,168018,168020,168022,168024,168026,168028,168030,168032],{"class":188,"line":49},[186,168011,32754],{"class":206},[186,168013,832],{"class":202},[186,168015,1673],{"class":669},[186,168017,1862],{"class":532},[186,168019,2504],{"class":206},[186,168021,81242],{"class":202},[186,168023,2553],{"class":206},[186,168025,5914],{"class":206},[186,168027,71658],{"class":202},[186,168029,2553],{"class":206},[186,168031,1862],{"class":532},[186,168033,1629],{"class":202},[186,168035,168036],{"class":188,"line":219},[186,168037,3867],{"emptyLinePlaceholder":1551},[186,168039,168040],{"class":188,"line":225},[186,168041,3867],{"emptyLinePlaceholder":1551},[186,168043,168044,168046,168048,168050,168052,168054,168056,168058,168060,168062,168064],{"class":188,"line":242},[186,168045,117745],{"class":202},[186,168047,529],{"class":669},[186,168049,5914],{"class":202},[186,168051,64117],{"class":532},[186,168053,210],{"class":202},[186,168055,151085],{"class":532},[186,168057,13898],{"class":202},[186,168059,70561],{"class":532},[186,168061,210],{"class":202},[186,168063,2260],{"class":206},[186,168065,639],{"class":202},[186,168067,168068,168070,168072],{"class":188,"line":248},[186,168069,167353],{"class":202},[186,168071,12124],{"class":669},[186,168073,168074],{"class":202},"info)\n",[14,168076,168078],{"id":168077},"_78-匿名函数lambda","7.8 匿名函数lambda",[169,168080,168081,168084],{},[183,168082,168083],{},"lambda"," 用于定义简单匿名函数。",[176,168086,168088],{"className":31833,"code":168087,"language":31835,"meta":181,"style":181},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[183,168089,168090,168107],{"__ignoreMap":181},[186,168091,168092,168095,168097,168100,168103,168105],{"class":188,"line":189},[186,168093,168094],{"class":202},"add ",[186,168096,529],{"class":669},[186,168098,168099],{"class":669}," lambda",[186,168101,168102],{"class":202}," a, b: a ",[186,168104,2091],{"class":669},[186,168106,152301],{"class":202},[186,168108,168109,168111,168113,168115,168117,168119],{"class":188,"line":49},[186,168110,31870],{"class":206},[186,168112,167797],{"class":202},[186,168114,1829],{"class":206},[186,168116,13898],{"class":202},[186,168118,1697],{"class":206},[186,168120,31952],{"class":202},[169,168122,168123],{},"常和排序、过滤等函数一起使用。",[169,168125,168126],{},"按分数排序：",[176,168128,168130],{"className":31833,"code":168129,"language":31835,"meta":181,"style":181},"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",[183,168131,168132,168140,168160,168180,168200,168204,168208,168231],{"__ignoreMap":181},[186,168133,168134,168136,168138],{"class":188,"line":189},[186,168135,160913],{"class":202},[186,168137,529],{"class":669},[186,168139,56888],{"class":202},[186,168141,168142,168144,168146,168148,168150,168152,168154,168156,168158],{"class":188,"line":49},[186,168143,149582],{"class":202},[186,168145,64117],{"class":532},[186,168147,210],{"class":202},[186,168149,151085],{"class":532},[186,168151,13898],{"class":202},[186,168153,152669],{"class":532},[186,168155,210],{"class":202},[186,168157,2596],{"class":206},[186,168159,6396],{"class":202},[186,168161,168162,168164,168166,168168,168170,168172,168174,168176,168178],{"class":188,"line":219},[186,168163,149582],{"class":202},[186,168165,64117],{"class":532},[186,168167,210],{"class":202},[186,168169,152133],{"class":532},[186,168171,13898],{"class":202},[186,168173,152669],{"class":532},[186,168175,210],{"class":202},[186,168177,2419],{"class":206},[186,168179,6396],{"class":202},[186,168181,168182,168184,168186,168188,168190,168192,168194,168196,168198],{"class":188,"line":225},[186,168183,149582],{"class":202},[186,168185,64117],{"class":532},[186,168187,210],{"class":202},[186,168189,160928],{"class":532},[186,168191,13898],{"class":202},[186,168193,152669],{"class":532},[186,168195,210],{"class":202},[186,168197,2016],{"class":206},[186,168199,6396],{"class":202},[186,168201,168202],{"class":188,"line":242},[186,168203,34701],{"class":202},[186,168205,168206],{"class":188,"line":248},[186,168207,3867],{"emptyLinePlaceholder":1551},[186,168209,168210,168213,168215,168217,168219,168221,168223,168225,168227,168229],{"class":188,"line":265},[186,168211,168212],{"class":202},"students.sort(",[186,168214,155143],{"class":835},[186,168216,155146],{"class":669},[186,168218,155149],{"class":202},[186,168220,152669],{"class":532},[186,168222,113633],{"class":202},[186,168224,164725],{"class":835},[186,168226,529],{"class":669},[186,168228,32931],{"class":206},[186,168230,1629],{"class":202},[186,168232,168233,168235],{"class":188,"line":271},[186,168234,31870],{"class":206},[186,168236,166192],{"class":202},[169,168238,168239,168240,168242],{},"如果逻辑复杂，不要硬写 ",[183,168241,168083],{},"，定义普通函数更清晰。",[14,168244,168246],{"id":168245},"_79-函数作为参数","7.9 函数作为参数",[169,168248,168249],{},"函数可以作为参数传给另一个函数。",[176,168251,168253],{"className":31833,"code":168252,"language":31835,"meta":181,"style":181},"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",[183,168254,168255,168263,168273,168277,168281,168291,168298,168302,168306],{"__ignoreMap":181},[186,168256,168257,168259,168261],{"class":188,"line":189},[186,168258,33402],{"class":669},[186,168260,6673],{"class":198},[186,168262,152290],{"class":202},[186,168264,168265,168267,168269,168271],{"class":188,"line":49},[186,168266,5556],{"class":669},[186,168268,12332],{"class":202},[186,168270,2091],{"class":669},[186,168272,152301],{"class":202},[186,168274,168275],{"class":188,"line":219},[186,168276,3867],{"emptyLinePlaceholder":1551},[186,168278,168279],{"class":188,"line":225},[186,168280,3867],{"emptyLinePlaceholder":1551},[186,168282,168283,168285,168288],{"class":188,"line":242},[186,168284,33402],{"class":669},[186,168286,168287],{"class":198}," calculate",[186,168289,168290],{"class":202},"(a, b, func):\n",[186,168292,168293,168295],{"class":188,"line":248},[186,168294,5556],{"class":669},[186,168296,168297],{"class":202}," func(a, b)\n",[186,168299,168300],{"class":188,"line":265},[186,168301,3867],{"emptyLinePlaceholder":1551},[186,168303,168304],{"class":188,"line":271},[186,168305,3867],{"emptyLinePlaceholder":1551},[186,168307,168308,168310,168313,168315,168317,168319],{"class":188,"line":288},[186,168309,31870],{"class":206},[186,168311,168312],{"class":202},"(calculate(",[186,168314,2056],{"class":206},[186,168316,13898],{"class":202},[186,168318,801],{"class":206},[186,168320,168321],{"class":202},", add))\n",[169,168323,168324],{},"这种思想在排序、回调、框架中经常出现。",[14,168326,168328],{"id":168327},"_710-mapfiltersorted","7.10 map、filter、sorted",[29,168330,168332],{"id":168331},"_7101-map","7.10.1 map",[169,168334,168335,168337],{},[183,168336,75477],{}," 对每个元素执行函数。",[176,168339,168341],{"className":31833,"code":168340,"language":31835,"meta":181,"style":181},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[183,168342,168343,168367,168390],{"__ignoreMap":181},[186,168344,168345,168347,168349,168351,168353,168355,168357,168359,168361,168363,168365],{"class":188,"line":189},[186,168346,165297],{"class":202},[186,168348,529],{"class":669},[186,168350,53673],{"class":202},[186,168352,1829],{"class":206},[186,168354,13898],{"class":202},[186,168356,1697],{"class":206},[186,168358,13898],{"class":202},[186,168360,1691],{"class":206},[186,168362,13898],{"class":202},[186,168364,1904],{"class":206},[186,168366,34701],{"class":202},[186,168368,168369,168371,168373,168376,168378,168380,168383,168385,168387],{"class":188,"line":49},[186,168370,162503],{"class":202},[186,168372,529],{"class":669},[186,168374,168375],{"class":206}," map",[186,168377,832],{"class":202},[186,168379,168083],{"class":669},[186,168381,168382],{"class":202}," x: x ",[186,168384,2065],{"class":669},[186,168386,16217],{"class":206},[186,168388,168389],{"class":202},", nums)\n",[186,168391,168392,168394,168396,168398],{"class":188,"line":219},[186,168393,31870],{"class":206},[186,168395,832],{"class":202},[186,168397,155267],{"class":206},[186,168399,167265],{"class":202},[29,168401,168403],{"id":168402},"_7102-filter","7.10.2 filter",[169,168405,168406,168408],{},[183,168407,81483],{}," 保留满足条件的元素。",[176,168410,168412],{"className":31833,"code":168411,"language":31835,"meta":181,"style":181},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[183,168413,168414,168442,168467],{"__ignoreMap":181},[186,168415,168416,168418,168420,168422,168424,168426,168428,168430,168432,168434,168436,168438,168440],{"class":188,"line":189},[186,168417,165297],{"class":202},[186,168419,529],{"class":669},[186,168421,53673],{"class":202},[186,168423,1829],{"class":206},[186,168425,13898],{"class":202},[186,168427,1697],{"class":206},[186,168429,13898],{"class":202},[186,168431,1691],{"class":206},[186,168433,13898],{"class":202},[186,168435,1904],{"class":206},[186,168437,13898],{"class":202},[186,168439,1930],{"class":206},[186,168441,34701],{"class":202},[186,168443,168444,168446,168448,168451,168453,168455,168457,168459,168461,168463,168465],{"class":188,"line":49},[186,168445,162503],{"class":202},[186,168447,529],{"class":669},[186,168449,168450],{"class":206}," filter",[186,168452,832],{"class":202},[186,168454,168083],{"class":669},[186,168456,168382],{"class":202},[186,168458,670],{"class":669},[186,168460,16217],{"class":206},[186,168462,102990],{"class":669},[186,168464,5559],{"class":206},[186,168466,168389],{"class":202},[186,168468,168469,168471,168473,168475],{"class":188,"line":219},[186,168470,31870],{"class":206},[186,168472,832],{"class":202},[186,168474,155267],{"class":206},[186,168476,167265],{"class":202},[29,168478,168480],{"id":168479},"_7103-sorted","7.10.3 sorted",[169,168482,168483,168485],{},[183,168484,166433],{}," 返回排序后的新列表。",[176,168487,168489],{"className":31833,"code":168488,"language":31835,"meta":181,"style":181},"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",[183,168490,168491,168499,168519,168539,168559,168563,168567,168596],{"__ignoreMap":181},[186,168492,168493,168495,168497],{"class":188,"line":189},[186,168494,160913],{"class":202},[186,168496,529],{"class":669},[186,168498,56888],{"class":202},[186,168500,168501,168503,168505,168507,168509,168511,168513,168515,168517],{"class":188,"line":49},[186,168502,149582],{"class":202},[186,168504,64117],{"class":532},[186,168506,210],{"class":202},[186,168508,151085],{"class":532},[186,168510,13898],{"class":202},[186,168512,152669],{"class":532},[186,168514,210],{"class":202},[186,168516,2596],{"class":206},[186,168518,6396],{"class":202},[186,168520,168521,168523,168525,168527,168529,168531,168533,168535,168537],{"class":188,"line":219},[186,168522,149582],{"class":202},[186,168524,64117],{"class":532},[186,168526,210],{"class":202},[186,168528,152133],{"class":532},[186,168530,13898],{"class":202},[186,168532,152669],{"class":532},[186,168534,210],{"class":202},[186,168536,2419],{"class":206},[186,168538,6396],{"class":202},[186,168540,168541,168543,168545,168547,168549,168551,168553,168555,168557],{"class":188,"line":225},[186,168542,149582],{"class":202},[186,168544,64117],{"class":532},[186,168546,210],{"class":202},[186,168548,160928],{"class":532},[186,168550,13898],{"class":202},[186,168552,152669],{"class":532},[186,168554,210],{"class":202},[186,168556,2016],{"class":206},[186,168558,6396],{"class":202},[186,168560,168561],{"class":188,"line":242},[186,168562,34701],{"class":202},[186,168564,168565],{"class":188,"line":248},[186,168566,3867],{"emptyLinePlaceholder":1551},[186,168568,168569,168571,168573,168575,168578,168580,168582,168584,168586,168588,168590,168592,168594],{"class":188,"line":265},[186,168570,162503],{"class":202},[186,168572,529],{"class":669},[186,168574,164801],{"class":206},[186,168576,168577],{"class":202},"(students, ",[186,168579,155143],{"class":835},[186,168581,155146],{"class":669},[186,168583,155149],{"class":202},[186,168585,152669],{"class":532},[186,168587,113633],{"class":202},[186,168589,164725],{"class":835},[186,168591,529],{"class":669},[186,168593,32931],{"class":206},[186,168595,1629],{"class":202},[186,168597,168598,168600],{"class":188,"line":271},[186,168599,31870],{"class":206},[186,168601,78018],{"class":202},[14,168603,168605],{"id":168604},"_711-闭包入门","7.11 闭包入门",[169,168607,168608],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[176,168610,168612],{"className":31833,"code":168611,"language":31835,"meta":181,"style":181},"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",[183,168613,168614,168624,168634,168645,168649,168656,168660,168664,168678],{"__ignoreMap":181},[186,168615,168616,168618,168621],{"class":188,"line":189},[186,168617,33402],{"class":669},[186,168619,168620],{"class":198}," outer",[186,168622,168623],{"class":202},"(base):\n",[186,168625,168626,168628,168631],{"class":188,"line":49},[186,168627,32256],{"class":669},[186,168629,168630],{"class":198}," inner",[186,168632,168633],{"class":202},"(num):\n",[186,168635,168636,168638,168641,168643],{"class":188,"line":219},[186,168637,16214],{"class":669},[186,168639,168640],{"class":202}," base ",[186,168642,2091],{"class":669},[186,168644,167776],{"class":202},[186,168646,168647],{"class":188,"line":225},[186,168648,3867],{"emptyLinePlaceholder":1551},[186,168650,168651,168653],{"class":188,"line":242},[186,168652,5556],{"class":669},[186,168654,168655],{"class":202}," inner\n",[186,168657,168658],{"class":188,"line":248},[186,168659,3867],{"emptyLinePlaceholder":1551},[186,168661,168662],{"class":188,"line":265},[186,168663,3867],{"emptyLinePlaceholder":1551},[186,168665,168666,168669,168671,168674,168676],{"class":188,"line":271},[186,168667,168668],{"class":202},"add_10 ",[186,168670,529],{"class":669},[186,168672,168673],{"class":202}," outer(",[186,168675,2056],{"class":206},[186,168677,1629],{"class":202},[186,168679,168680,168682,168685,168687],{"class":188,"line":288},[186,168681,31870],{"class":206},[186,168683,168684],{"class":202},"(add_10(",[186,168686,1930],{"class":206},[186,168688,31952],{"class":202},[169,168690,168691],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168693,168695],{"id":168694},"_712-装饰器入门","7.12 装饰器入门",[169,168697,168698],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[176,168700,168702],{"className":31833,"code":168701,"language":31835,"meta":181,"style":181},"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",[183,168703,168704,168713,168722,168733,168738,168749,168753,168760,168764,168768,168773,168781,168791,168795,168799],{"__ignoreMap":181},[186,168705,168706,168708,168710],{"class":188,"line":189},[186,168707,33402],{"class":669},[186,168709,88622],{"class":198},[186,168711,168712],{"class":202},"(func):\n",[186,168714,168715,168717,168720],{"class":188,"line":49},[186,168716,32256],{"class":669},[186,168718,168719],{"class":198}," wrapper",[186,168721,33408],{"class":202},[186,168723,168724,168726,168728,168731],{"class":188,"line":219},[186,168725,33906],{"class":206},[186,168727,832],{"class":202},[186,168729,168730],{"class":532},"\"函数开始执行\"",[186,168732,1629],{"class":202},[186,168734,168735],{"class":188,"line":225},[186,168736,168737],{"class":202},"        func()\n",[186,168739,168740,168742,168744,168747],{"class":188,"line":242},[186,168741,33906],{"class":206},[186,168743,832],{"class":202},[186,168745,168746],{"class":532},"\"函数执行结束\"",[186,168748,1629],{"class":202},[186,168750,168751],{"class":188,"line":248},[186,168752,3867],{"emptyLinePlaceholder":1551},[186,168754,168755,168757],{"class":188,"line":265},[186,168756,5556],{"class":669},[186,168758,168759],{"class":202}," wrapper\n",[186,168761,168762],{"class":188,"line":271},[186,168763,3867],{"emptyLinePlaceholder":1551},[186,168765,168766],{"class":188,"line":288},[186,168767,3867],{"emptyLinePlaceholder":1551},[186,168769,168770],{"class":188,"line":294},[186,168771,168772],{"class":198},"@log\n",[186,168774,168775,168777,168779],{"class":188,"line":1212},[186,168776,33402],{"class":669},[186,168778,162193],{"class":198},[186,168780,33408],{"class":202},[186,168782,168783,168785,168787,168789],{"class":188,"line":1223},[186,168784,32754],{"class":206},[186,168786,832],{"class":202},[186,168788,7307],{"class":532},[186,168790,1629],{"class":202},[186,168792,168793],{"class":188,"line":1236},[186,168794,3867],{"emptyLinePlaceholder":1551},[186,168796,168797],{"class":188,"line":3096},[186,168798,3867],{"emptyLinePlaceholder":1551},[186,168800,168801],{"class":188,"line":3110},[186,168802,162228],{"class":202},[169,168804,159471],{},[176,168806,168808],{"className":31833,"code":168807,"language":31835,"meta":181,"style":181},"say_hello = log(say_hello)\n",[183,168809,168810],{"__ignoreMap":181},[186,168811,168812,168815,168817],{"class":188,"line":189},[186,168813,168814],{"class":202},"say_hello ",[186,168816,529],{"class":669},[186,168818,168819],{"class":202}," log(say_hello)\n",[169,168821,168822],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168824,168826],{"id":168825},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[176,168828,168830],{"className":31833,"code":168829,"language":31835,"meta":181,"style":181},"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",[183,168831,168832,168840,168857,168867,168886,168896,168903,168907,168913,168917,168921,168925,168933,168943,168947,168951],{"__ignoreMap":181},[186,168833,168834,168836,168838],{"class":188,"line":189},[186,168835,33402],{"class":669},[186,168837,88622],{"class":198},[186,168839,168712],{"class":202},[186,168841,168842,168844,168846,168848,168850,168853,168855],{"class":188,"line":49},[186,168843,32256],{"class":669},[186,168845,168719],{"class":198},[186,168847,832],{"class":202},[186,168849,2065],{"class":669},[186,168851,168852],{"class":202},"args, ",[186,168854,12124],{"class":669},[186,168856,167863],{"class":202},[186,168858,168859,168861,168863,168865],{"class":188,"line":219},[186,168860,33906],{"class":206},[186,168862,832],{"class":202},[186,168864,168730],{"class":532},[186,168866,1629],{"class":202},[186,168868,168869,168872,168874,168877,168879,168881,168883],{"class":188,"line":225},[186,168870,168871],{"class":202},"        result ",[186,168873,529],{"class":669},[186,168875,168876],{"class":202}," func(",[186,168878,2065],{"class":669},[186,168880,168852],{"class":202},[186,168882,12124],{"class":669},[186,168884,168885],{"class":202},"kwargs)\n",[186,168887,168888,168890,168892,168894],{"class":188,"line":242},[186,168889,33906],{"class":206},[186,168891,832],{"class":202},[186,168893,168746],{"class":532},[186,168895,1629],{"class":202},[186,168897,168898,168900],{"class":188,"line":248},[186,168899,16214],{"class":669},[186,168901,168902],{"class":202}," result\n",[186,168904,168905],{"class":188,"line":265},[186,168906,3867],{"emptyLinePlaceholder":1551},[186,168908,168909,168911],{"class":188,"line":271},[186,168910,5556],{"class":669},[186,168912,168759],{"class":202},[186,168914,168915],{"class":188,"line":288},[186,168916,3867],{"emptyLinePlaceholder":1551},[186,168918,168919],{"class":188,"line":294},[186,168920,3867],{"emptyLinePlaceholder":1551},[186,168922,168923],{"class":188,"line":1212},[186,168924,168772],{"class":198},[186,168926,168927,168929,168931],{"class":188,"line":1223},[186,168928,33402],{"class":669},[186,168930,6673],{"class":198},[186,168932,152290],{"class":202},[186,168934,168935,168937,168939,168941],{"class":188,"line":1236},[186,168936,5556],{"class":669},[186,168938,12332],{"class":202},[186,168940,2091],{"class":669},[186,168942,152301],{"class":202},[186,168944,168945],{"class":188,"line":3096},[186,168946,3867],{"emptyLinePlaceholder":1551},[186,168948,168949],{"class":188,"line":3110},[186,168950,3867],{"emptyLinePlaceholder":1551},[186,168952,168953,168955,168957,168959,168961,168963],{"class":188,"line":3115},[186,168954,31870],{"class":206},[186,168956,167797],{"class":202},[186,168958,2056],{"class":206},[186,168960,13898],{"class":202},[186,168962,801],{"class":206},[186,168964,31952],{"class":202},[169,168966,168967,168968,102449,168970,168972],{},"这个写法使用 ",[183,168969,167729],{},[183,168971,167844],{}," 接收原函数的所有参数。",[14,168974,168976],{"id":168975},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[169,168978,124723],{},[34,168980,168981,168984,168987],{},[22,168982,168983],{},"给定一组学生数据。",[22,168985,168986],{},"封装函数，根据传入规则筛选学生。",[22,168988,168989],{},"筛选及格、优秀、未成年学生。",[169,168991,11498],{},[176,168993,168995],{"className":31833,"code":168994,"language":31835,"meta":181,"style":181},"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",[183,168996,168997,169005,169033,169061,169089,169093,169097,169101,169111,169119,169129,169136,169141,169147,169151,169155,169179,169202,169225,169229,169236,169243],{"__ignoreMap":181},[186,168998,168999,169001,169003],{"class":188,"line":189},[186,169000,160913],{"class":202},[186,169002,529],{"class":669},[186,169004,56888],{"class":202},[186,169006,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025,169027,169029,169031],{"class":188,"line":49},[186,169008,149582],{"class":202},[186,169010,64117],{"class":532},[186,169012,210],{"class":202},[186,169014,151085],{"class":532},[186,169016,13898],{"class":202},[186,169018,70561],{"class":532},[186,169020,210],{"class":202},[186,169022,2260],{"class":206},[186,169024,13898],{"class":202},[186,169026,152669],{"class":532},[186,169028,210],{"class":202},[186,169030,2596],{"class":206},[186,169032,6396],{"class":202},[186,169034,169035,169037,169039,169041,169043,169045,169047,169049,169051,169053,169055,169057,169059],{"class":188,"line":219},[186,169036,149582],{"class":202},[186,169038,64117],{"class":532},[186,169040,210],{"class":202},[186,169042,152133],{"class":532},[186,169044,13898],{"class":202},[186,169046,70561],{"class":532},[186,169048,210],{"class":202},[186,169050,2235],{"class":206},[186,169052,13898],{"class":202},[186,169054,152669],{"class":532},[186,169056,210],{"class":202},[186,169058,2419],{"class":206},[186,169060,6396],{"class":202},[186,169062,169063,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085,169087],{"class":188,"line":225},[186,169064,149582],{"class":202},[186,169066,64117],{"class":532},[186,169068,210],{"class":202},[186,169070,160928],{"class":532},[186,169072,13898],{"class":202},[186,169074,70561],{"class":532},[186,169076,210],{"class":202},[186,169078,2284],{"class":206},[186,169080,13898],{"class":202},[186,169082,152669],{"class":532},[186,169084,210],{"class":202},[186,169086,2490],{"class":206},[186,169088,6396],{"class":202},[186,169090,169091],{"class":188,"line":242},[186,169092,34701],{"class":202},[186,169094,169095],{"class":188,"line":248},[186,169096,3867],{"emptyLinePlaceholder":1551},[186,169098,169099],{"class":188,"line":265},[186,169100,3867],{"emptyLinePlaceholder":1551},[186,169102,169103,169105,169108],{"class":188,"line":271},[186,169104,33402],{"class":669},[186,169106,169107],{"class":198}," filter_students",[186,169109,169110],{"class":202},"(students, condition):\n",[186,169112,169113,169115,169117],{"class":188,"line":288},[186,169114,162420],{"class":202},[186,169116,529],{"class":669},[186,169118,53285],{"class":202},[186,169120,169121,169123,169125,169127],{"class":188,"line":294},[186,169122,4667],{"class":669},[186,169124,153334],{"class":202},[186,169126,27500],{"class":669},[186,169128,153339],{"class":202},[186,169130,169131,169133],{"class":188,"line":1212},[186,169132,3964],{"class":669},[186,169134,169135],{"class":202}," condition(student):\n",[186,169137,169138],{"class":188,"line":1223},[186,169139,169140],{"class":202},"            result.append(student)\n",[186,169142,169143,169145],{"class":188,"line":1236},[186,169144,5556],{"class":669},[186,169146,168902],{"class":202},[186,169148,169149],{"class":188,"line":3096},[186,169150,3867],{"emptyLinePlaceholder":1551},[186,169152,169153],{"class":188,"line":3110},[186,169154,3867],{"emptyLinePlaceholder":1551},[186,169156,169157,169159,169161,169164,169166,169169,169171,169173,169175,169177],{"class":188,"line":3115},[186,169158,166898],{"class":202},[186,169160,529],{"class":669},[186,169162,169163],{"class":202}," filter_students(students, ",[186,169165,168083],{"class":669},[186,169167,169168],{"class":202}," s: s[",[186,169170,152669],{"class":532},[186,169172,5909],{"class":202},[186,169174,3178],{"class":669},[186,169176,159034],{"class":206},[186,169178,1629],{"class":202},[186,169180,169181,169184,169186,169188,169190,169192,169194,169196,169198,169200],{"class":188,"line":3121},[186,169182,169183],{"class":202},"excellent ",[186,169185,529],{"class":669},[186,169187,169163],{"class":202},[186,169189,168083],{"class":669},[186,169191,169168],{"class":202},[186,169193,152669],{"class":532},[186,169195,5909],{"class":202},[186,169197,3178],{"class":669},[186,169199,158985],{"class":206},[186,169201,1629],{"class":202},[186,169203,169204,169207,169209,169211,169213,169215,169217,169219,169221,169223],{"class":188,"line":3142},[186,169205,169206],{"class":202},"under_age ",[186,169208,529],{"class":669},[186,169210,169163],{"class":202},[186,169212,168083],{"class":669},[186,169214,169168],{"class":202},[186,169216,70561],{"class":532},[186,169218,5909],{"class":202},[186,169220,520],{"class":669},[186,169222,157482],{"class":206},[186,169224,1629],{"class":202},[186,169226,169227],{"class":188,"line":3147},[186,169228,3867],{"emptyLinePlaceholder":1551},[186,169230,169231,169233],{"class":188,"line":3161},[186,169232,31870],{"class":206},[186,169234,169235],{"class":202},"(passed)\n",[186,169237,169238,169240],{"class":188,"line":3166},[186,169239,31870],{"class":206},[186,169241,169242],{"class":202},"(excellent)\n",[186,169244,169245,169247],{"class":188,"line":3195},[186,169246,31870],{"class":206},[186,169248,169249],{"class":202},"(under_age)\n",[14,169251,169253],{"id":169252},"_715-易错点","7.15 易错点",[34,169255,169256,169259,169267,169272,169283],{},[22,169257,169258],{},"默认参数不要写可变对象。",[22,169260,169261,169263,169264,169266],{},[183,169262,167729],{}," 是元组，",[183,169265,167844],{}," 是字典。",[22,169268,169269,169271],{},[183,169270,168083],{}," 只适合简单表达式。",[22,169273,169274,102449,169276,169278,169279,169282],{},[183,169275,75477],{},[183,169277,81483],{}," 的结果是迭代器，常用 ",[183,169280,169281],{},"list()"," 转换查看。",[22,169284,169285],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169287,169289],{"id":169288},"_716-本章练习","7.16 本章练习",[34,169291,169292,169299,169305,169310,169315],{},[22,169293,169294,169295,169298],{},"写函数 ",[183,169296,169297],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[22,169300,169294,169301,169304],{},[183,169302,169303],{},"print_user(**kwargs)","，输出用户所有字段。",[22,169306,105797,169307,169309],{},[183,169308,168083],{}," 对学生列表按年龄排序。",[22,169311,105797,169312,169314],{},[183,169313,81483],{}," 找出成绩不及格的学生。",[22,169316,169317],{},"写一个装饰器，统计函数执行前后的提示信息。",[1524,169319,169320],{},"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":181,"searchDepth":49,"depth":49,"links":169322},[169323,169324,169325,169326,169327,169328,169332,169333,169334,169335,169340,169341,169342,169343,169344,169345],{"id":167181,"depth":49,"text":167182},{"id":167295,"depth":49,"text":167296},{"id":167384,"depth":49,"text":167385},{"id":167446,"depth":49,"text":167447},{"id":167592,"depth":49,"text":167593},{"id":167719,"depth":49,"text":167720,"children":169329},[169330,169331],{"id":167723,"depth":219,"text":167724},{"id":167838,"depth":219,"text":167839},{"id":167919,"depth":49,"text":167920},{"id":168077,"depth":49,"text":168078},{"id":168245,"depth":49,"text":168246},{"id":168327,"depth":49,"text":168328,"children":169336},[169337,169338,169339],{"id":168331,"depth":219,"text":168332},{"id":168402,"depth":219,"text":168403},{"id":168479,"depth":219,"text":168480},{"id":168604,"depth":49,"text":168605},{"id":168694,"depth":49,"text":168695},{"id":168825,"depth":49,"text":168826},{"id":168975,"depth":49,"text":168976},{"id":169252,"depth":49,"text":169253},{"id":169288,"depth":49,"text":169289},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167173,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169352,"title":169353,"body":169354,"description":1548,"extension":1549,"meta":171873,"navigation":1551,"path":171874,"seo":171875,"stem":171876,"__hash__":171877},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169355,"toc":171848},[169356,169359,169363,169366,169369,169400,169404,169408,169411,169438,169442,169445,169496,169499,169514,169517,169552,169556,169558,169582,169585,169645,169649,169653,169656,169713,169716,169736,169740,169743,169806,169810,169813,169869,169876,169900,169904,169907,169970,169974,169979,170030,170033,170037,170042,170109,170112,170194,170198,170203,170254,170257,170261,170264,170267,170275,170278,170324,170327,170373,170377,170383,170427,170430,170476,170479,170519,170522,170583,170587,170590,170680,170683,170825,170828,170895,170899,170902,170905,171046,171049,171127,171130,171306,171310,171312,171323,171325,171524,171528,171772,171776,171810,171814,171845],[10,169357,169353],{"id":169358},"_8-文件操作",[14,169360,169362],{"id":169361},"_81-文件操作的意义","8.1 文件操作的意义",[169,169364,169365],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[169,169367,169368],{},"常见文件类型：",[34,169370,169371,169377,169383,169389,169395],{},[22,169372,169373,169376],{},[183,169374,169375],{},".txt","：普通文本。",[22,169378,169379,169382],{},[183,169380,169381],{},".csv","：表格文本。",[22,169384,169385,169388],{},[183,169386,169387],{},".json","：结构化数据。",[22,169390,169391,169394],{},[183,169392,169393],{},".log","：日志文件。",[22,169396,169397,169399],{},[183,169398,147549],{},"：Python 源代码。",[14,169401,169403],{"id":169402},"_82-路径","8.2 路径",[29,169405,169407],{"id":169406},"_821-相对路径","8.2.1 相对路径",[169,169409,169410],{},"相对当前运行目录：",[176,169412,169414],{"className":31833,"code":169413,"language":31835,"meta":181,"style":181},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[183,169415,169416],{"__ignoreMap":181},[186,169417,169418,169420,169422,169424,169426,169428,169430,169432,169434,169436],{"class":188,"line":189},[186,169419,88346],{"class":206},[186,169421,832],{"class":202},[186,169423,147993],{"class":532},[186,169425,13898],{"class":202},[186,169427,147998],{"class":532},[186,169429,13898],{"class":202},[186,169431,148003],{"class":835},[186,169433,529],{"class":669},[186,169435,148008],{"class":532},[186,169437,1629],{"class":202},[29,169439,169441],{"id":169440},"_822-绝对路径","8.2.2 绝对路径",[169,169443,169444],{},"从根目录或盘符开始：",[176,169446,169448],{"className":31833,"code":169447,"language":31835,"meta":181,"style":181},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[183,169449,169450,169473],{"__ignoreMap":181},[186,169451,169452,169454,169456,169459,169461,169463,169465,169467,169469,169471],{"class":188,"line":189},[186,169453,88346],{"class":206},[186,169455,832],{"class":202},[186,169457,169458],{"class":532},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[186,169460,13898],{"class":202},[186,169462,147998],{"class":532},[186,169464,13898],{"class":202},[186,169466,148003],{"class":835},[186,169468,529],{"class":669},[186,169470,148008],{"class":532},[186,169472,1629],{"class":202},[186,169474,169475,169477,169479,169482,169484,169486,169488,169490,169492,169494],{"class":188,"line":49},[186,169476,88346],{"class":206},[186,169478,832],{"class":202},[186,169480,169481],{"class":532},"\"D:\u002Fdata\u002Fdata.txt\"",[186,169483,13898],{"class":202},[186,169485,147998],{"class":532},[186,169487,13898],{"class":202},[186,169489,148003],{"class":835},[186,169491,529],{"class":669},[186,169493,148008],{"class":532},[186,169495,1629],{"class":202},[169,169497,169498],{},"Windows 路径建议写成：",[176,169500,169502],{"className":31833,"code":169501,"language":31835,"meta":181,"style":181},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[183,169503,169504],{"__ignoreMap":181},[186,169505,169506,169509,169511],{"class":188,"line":189},[186,169507,169508],{"class":202},"path ",[186,169510,529],{"class":669},[186,169512,169513],{"class":532}," \"D:\u002Fdata\u002Fdata.txt\"\n",[169,169515,169516],{},"或原始字符串：",[176,169518,169520],{"className":31833,"code":169519,"language":31835,"meta":181,"style":181},"path = r\"D:\\data\\data.txt\"\n",[183,169521,169522],{"__ignoreMap":181},[186,169523,169524,169526,169528,169530,169532,169535,169538,169541,169543,169545,169547,169550],{"class":188,"line":189},[186,169525,169508],{"class":202},[186,169527,529],{"class":669},[186,169529,18582],{"class":669},[186,169531,1862],{"class":532},[186,169533,169534],{"class":49431},"D:",[186,169536,169537],{"class":206},"\\d",[186,169539,169540],{"class":49431},"ata",[186,169542,169537],{"class":206},[186,169544,169540],{"class":49431},[186,169546,2168],{"class":206},[186,169548,169549],{"class":49431},"txt",[186,169551,26592],{"class":532},[14,169553,169555],{"id":169554},"_83-open函数","8.3 open函数",[169,169557,6647],{},[176,169559,169561],{"className":31833,"code":169560,"language":31835,"meta":181,"style":181},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[183,169562,169563],{"__ignoreMap":181},[186,169564,169565,169567,169569,169571,169574,169576,169578,169580],{"class":188,"line":189},[186,169566,46808],{"class":835},[186,169568,15027],{"class":669},[186,169570,147988],{"class":206},[186,169572,169573],{"class":202},"(文件路径, 打开模式, ",[186,169575,148003],{"class":835},[186,169577,529],{"class":669},[186,169579,148008],{"class":532},[186,169581,1629],{"class":202},[169,169583,169584],{},"常见模式：",[99,169586,169587,169596],{},[102,169588,169589],{},[105,169590,169591,169594],{},[108,169592,169593],{},"模式",[108,169595,27327],{},[116,169597,169598,169607,169616,169625,169635],{},[105,169599,169600,169604],{},[121,169601,169602],{},[183,169603,2279],{},[121,169605,169606],{},"只读，文件不存在会报错",[105,169608,169609,169613],{},[121,169610,169611],{},[183,169612,2403],{},[121,169614,169615],{},"只写，文件不存在会创建，存在会清空",[105,169617,169618,169622],{},[121,169619,169620],{},[183,169621,948],{},[121,169623,169624],{},"追加，文件不存在会创建",[105,169626,169627,169632],{},[121,169628,169629],{},[183,169630,169631],{},"rb",[121,169633,169634],{},"二进制只读",[105,169636,169637,169642],{},[121,169638,169639],{},[183,169640,169641],{},"wb",[121,169643,169644],{},"二进制只写",[14,169646,169648],{"id":169647},"_84-读取文件","8.4 读取文件",[29,169650,169652],{"id":169651},"_841-read","8.4.1 read",[169,169654,169655],{},"一次读取全部内容：",[176,169657,169659],{"className":31833,"code":169658,"language":31835,"meta":181,"style":181},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[183,169660,169661,169687,169699,169706],{"__ignoreMap":181},[186,169662,169663,169665,169667,169669,169671,169673,169675,169677,169679,169681,169683,169685],{"class":188,"line":189},[186,169664,46808],{"class":835},[186,169666,15027],{"class":669},[186,169668,147988],{"class":206},[186,169670,832],{"class":202},[186,169672,147993],{"class":532},[186,169674,13898],{"class":202},[186,169676,147998],{"class":532},[186,169678,13898],{"class":202},[186,169680,148003],{"class":835},[186,169682,529],{"class":669},[186,169684,148008],{"class":532},[186,169686,1629],{"class":202},[186,169688,169689,169692,169694,169696],{"class":188,"line":49},[186,169690,169691],{"class":202},"content ",[186,169693,529],{"class":669},[186,169695,149350],{"class":835},[186,169697,169698],{"class":202},".read()\n",[186,169700,169701,169703],{"class":188,"line":219},[186,169702,31870],{"class":206},[186,169704,169705],{"class":202},"(content)\n",[186,169707,169708,169710],{"class":188,"line":225},[186,169709,46808],{"class":835},[186,169711,169712],{"class":202},".close()\n",[169,169714,169715],{},"可以指定读取字符数：",[176,169717,169719],{"className":31833,"code":169718,"language":31835,"meta":181,"style":181},"content = file.read(10)\n",[183,169720,169721],{"__ignoreMap":181},[186,169722,169723,169725,169727,169729,169732,169734],{"class":188,"line":189},[186,169724,169691],{"class":202},[186,169726,529],{"class":669},[186,169728,149350],{"class":835},[186,169730,169731],{"class":202},".read(",[186,169733,2056],{"class":206},[186,169735,1629],{"class":202},[29,169737,169739],{"id":169738},"_842-readline","8.4.2 readline",[169,169741,169742],{},"一次读取一行：",[176,169744,169746],{"className":31833,"code":169745,"language":31835,"meta":181,"style":181},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[183,169747,169748,169774,169778,169789,169796,169800],{"__ignoreMap":181},[186,169749,169750,169752,169754,169756,169758,169760,169762,169764,169766,169768,169770,169772],{"class":188,"line":189},[186,169751,46808],{"class":835},[186,169753,15027],{"class":669},[186,169755,147988],{"class":206},[186,169757,832],{"class":202},[186,169759,147993],{"class":532},[186,169761,13898],{"class":202},[186,169763,147998],{"class":532},[186,169765,13898],{"class":202},[186,169767,148003],{"class":835},[186,169769,529],{"class":669},[186,169771,148008],{"class":532},[186,169773,1629],{"class":202},[186,169775,169776],{"class":188,"line":49},[186,169777,3867],{"emptyLinePlaceholder":1551},[186,169779,169780,169782,169784,169786],{"class":188,"line":219},[186,169781,148449],{"class":202},[186,169783,529],{"class":669},[186,169785,149350],{"class":835},[186,169787,169788],{"class":202},".readline()\n",[186,169790,169791,169793],{"class":188,"line":225},[186,169792,31870],{"class":206},[186,169794,169795],{"class":202},"(line)\n",[186,169797,169798],{"class":188,"line":242},[186,169799,3867],{"emptyLinePlaceholder":1551},[186,169801,169802,169804],{"class":188,"line":248},[186,169803,46808],{"class":835},[186,169805,169712],{"class":202},[29,169807,169809],{"id":169808},"_843-readlines","8.4.3 readlines",[169,169811,169812],{},"读取所有行，返回列表：",[176,169814,169816],{"className":31833,"code":169815,"language":31835,"meta":181,"style":181},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[183,169817,169818,169844,169856,169863],{"__ignoreMap":181},[186,169819,169820,169822,169824,169826,169828,169830,169832,169834,169836,169838,169840,169842],{"class":188,"line":189},[186,169821,46808],{"class":835},[186,169823,15027],{"class":669},[186,169825,147988],{"class":206},[186,169827,832],{"class":202},[186,169829,147993],{"class":532},[186,169831,13898],{"class":202},[186,169833,147998],{"class":532},[186,169835,13898],{"class":202},[186,169837,148003],{"class":835},[186,169839,529],{"class":669},[186,169841,148008],{"class":532},[186,169843,1629],{"class":202},[186,169845,169846,169849,169851,169853],{"class":188,"line":49},[186,169847,169848],{"class":202},"lines ",[186,169850,529],{"class":669},[186,169852,149350],{"class":835},[186,169854,169855],{"class":202},".readlines()\n",[186,169857,169858,169860],{"class":188,"line":219},[186,169859,31870],{"class":206},[186,169861,169862],{"class":202},"(lines)\n",[186,169864,169865,169867],{"class":188,"line":225},[186,169866,46808],{"class":835},[186,169868,169712],{"class":202},[169,169870,169871,169872,169875],{},"每一行通常带有换行符，可以用 ",[183,169873,169874],{},"strip()"," 去掉：",[176,169877,169879],{"className":31833,"code":169878,"language":31835,"meta":181,"style":181},"for line in lines:\n    print(line.strip())\n",[183,169880,169881,169893],{"__ignoreMap":181},[186,169882,169883,169885,169888,169890],{"class":188,"line":189},[186,169884,4491],{"class":669},[186,169886,169887],{"class":202}," line ",[186,169889,27500],{"class":669},[186,169891,169892],{"class":202}," lines:\n",[186,169894,169895,169897],{"class":188,"line":49},[186,169896,32754],{"class":206},[186,169898,169899],{"class":202},"(line.strip())\n",[29,169901,169903],{"id":169902},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[169,169905,169906],{},"推荐读取大文件时使用：",[176,169908,169910],{"className":31833,"code":169909,"language":31835,"meta":181,"style":181},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[183,169911,169912,169938,169942,169954,169960,169964],{"__ignoreMap":181},[186,169913,169914,169916,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936],{"class":188,"line":189},[186,169915,46808],{"class":835},[186,169917,15027],{"class":669},[186,169919,147988],{"class":206},[186,169921,832],{"class":202},[186,169923,147993],{"class":532},[186,169925,13898],{"class":202},[186,169927,147998],{"class":532},[186,169929,13898],{"class":202},[186,169931,148003],{"class":835},[186,169933,529],{"class":669},[186,169935,148008],{"class":532},[186,169937,1629],{"class":202},[186,169939,169940],{"class":188,"line":49},[186,169941,3867],{"emptyLinePlaceholder":1551},[186,169943,169944,169946,169948,169950,169952],{"class":188,"line":219},[186,169945,4491],{"class":669},[186,169947,169887],{"class":202},[186,169949,27500],{"class":669},[186,169951,149350],{"class":835},[186,169953,5205],{"class":202},[186,169955,169956,169958],{"class":188,"line":225},[186,169957,32754],{"class":206},[186,169959,169899],{"class":202},[186,169961,169962],{"class":188,"line":242},[186,169963,3867],{"emptyLinePlaceholder":1551},[186,169965,169966,169968],{"class":188,"line":248},[186,169967,46808],{"class":835},[186,169969,169712],{"class":202},[14,169971,169973],{"id":169972},"_85-with语句","8.5 with语句",[169,169975,169976,169978],{},[183,169977,109264],{}," 会自动关闭文件，推荐使用。",[176,169980,169982],{"className":31833,"code":169981,"language":31835,"meta":181,"style":181},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[183,169983,169984,170014,170024],{"__ignoreMap":181},[186,169985,169986,169988,169990,169992,169994,169996,169998,170000,170002,170004,170006,170008,170010,170012],{"class":188,"line":189},[186,169987,109264],{"class":669},[186,169989,147988],{"class":206},[186,169991,832],{"class":202},[186,169993,147993],{"class":532},[186,169995,13898],{"class":202},[186,169997,147998],{"class":532},[186,169999,13898],{"class":202},[186,170001,148003],{"class":835},[186,170003,529],{"class":669},[186,170005,148008],{"class":532},[186,170007,839],{"class":202},[186,170009,32838],{"class":669},[186,170011,149350],{"class":835},[186,170013,5205],{"class":202},[186,170015,170016,170018,170020,170022],{"class":188,"line":49},[186,170017,148020],{"class":202},[186,170019,529],{"class":669},[186,170021,149350],{"class":835},[186,170023,169698],{"class":202},[186,170025,170026,170028],{"class":188,"line":219},[186,170027,32754],{"class":206},[186,170029,169705],{"class":202},[169,170031,170032],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170034,170036],{"id":170035},"_86-写入文件","8.6 写入文件",[169,170038,170039,170041],{},[183,170040,2403],{}," 模式会清空原文件。",[176,170043,170045],{"className":31833,"code":170044,"language":31835,"meta":181,"style":181},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[183,170046,170047,170077,170094],{"__ignoreMap":181},[186,170048,170049,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069,170071,170073,170075],{"class":188,"line":189},[186,170050,109264],{"class":669},[186,170052,147988],{"class":206},[186,170054,832],{"class":202},[186,170056,147993],{"class":532},[186,170058,13898],{"class":202},[186,170060,153173],{"class":532},[186,170062,13898],{"class":202},[186,170064,148003],{"class":835},[186,170066,529],{"class":669},[186,170068,148008],{"class":532},[186,170070,839],{"class":202},[186,170072,32838],{"class":669},[186,170074,149350],{"class":835},[186,170076,5205],{"class":202},[186,170078,170079,170082,170085,170088,170090,170092],{"class":188,"line":49},[186,170080,170081],{"class":835},"    file",[186,170083,170084],{"class":202},".write(",[186,170086,170087],{"class":532},"\"hello",[186,170089,157722],{"class":206},[186,170091,1862],{"class":532},[186,170093,1629],{"class":202},[186,170095,170096,170098,170100,170103,170105,170107],{"class":188,"line":219},[186,170097,170081],{"class":835},[186,170099,170084],{"class":202},[186,170101,170102],{"class":532},"\"python",[186,170104,157722],{"class":206},[186,170106,1862],{"class":532},[186,170108,1629],{"class":202},[169,170110,170111],{},"写入多行：",[176,170113,170115],{"className":31833,"code":170114,"language":31835,"meta":181,"style":181},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[183,170116,170117,170152,170156,170187],{"__ignoreMap":181},[186,170118,170119,170121,170123,170125,170128,170130,170132,170134,170137,170139,170141,170143,170146,170148,170150],{"class":188,"line":189},[186,170120,169848],{"class":202},[186,170122,529],{"class":669},[186,170124,53673],{"class":202},[186,170126,170127],{"class":532},"\"小明,18",[186,170129,157722],{"class":206},[186,170131,1862],{"class":532},[186,170133,13898],{"class":202},[186,170135,170136],{"class":532},"\"小红,17",[186,170138,157722],{"class":206},[186,170140,1862],{"class":532},[186,170142,13898],{"class":202},[186,170144,170145],{"class":532},"\"小刚,19",[186,170147,157722],{"class":206},[186,170149,1862],{"class":532},[186,170151,34701],{"class":202},[186,170153,170154],{"class":188,"line":49},[186,170155,3867],{"emptyLinePlaceholder":1551},[186,170157,170158,170160,170162,170164,170167,170169,170171,170173,170175,170177,170179,170181,170183,170185],{"class":188,"line":219},[186,170159,109264],{"class":669},[186,170161,147988],{"class":206},[186,170163,832],{"class":202},[186,170165,170166],{"class":532},"\"students.txt\"",[186,170168,13898],{"class":202},[186,170170,153173],{"class":532},[186,170172,13898],{"class":202},[186,170174,148003],{"class":835},[186,170176,529],{"class":669},[186,170178,148008],{"class":532},[186,170180,839],{"class":202},[186,170182,32838],{"class":669},[186,170184,149350],{"class":835},[186,170186,5205],{"class":202},[186,170188,170189,170191],{"class":188,"line":225},[186,170190,170081],{"class":835},[186,170192,170193],{"class":202},".writelines(lines)\n",[14,170195,170197],{"id":170196},"_87-追加文件","8.7 追加文件",[169,170199,170200,170202],{},[183,170201,948],{}," 模式不会清空原内容，而是在末尾追加。",[176,170204,170206],{"className":31833,"code":170205,"language":31835,"meta":181,"style":181},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[183,170207,170208,170239],{"__ignoreMap":181},[186,170209,170210,170212,170214,170216,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237],{"class":188,"line":189},[186,170211,109264],{"class":669},[186,170213,147988],{"class":206},[186,170215,832],{"class":202},[186,170217,170218],{"class":532},"\"log.txt\"",[186,170220,13898],{"class":202},[186,170222,166522],{"class":532},[186,170224,13898],{"class":202},[186,170226,148003],{"class":835},[186,170228,529],{"class":669},[186,170230,148008],{"class":532},[186,170232,839],{"class":202},[186,170234,32838],{"class":669},[186,170236,149350],{"class":835},[186,170238,5205],{"class":202},[186,170240,170241,170243,170245,170248,170250,170252],{"class":188,"line":49},[186,170242,170081],{"class":835},[186,170244,170084],{"class":202},[186,170246,170247],{"class":532},"\"程序启动",[186,170249,157722],{"class":206},[186,170251,1862],{"class":532},[186,170253,1629],{"class":202},[169,170255,170256],{},"日志类文件常用追加模式。",[14,170258,170260],{"id":170259},"_88-文件编码","8.8 文件编码",[169,170262,170263],{},"编码决定文字如何保存为字节。",[169,170265,170266],{},"常见编码：",[34,170268,170269,170272],{},[22,170270,170271],{},"UTF-8：推荐。",[22,170273,170274],{},"GBK：部分 Windows 中文文件常见。",[169,170276,170277],{},"读取文件乱码时，可以尝试：",[176,170279,170281],{"className":31833,"code":170280,"language":31835,"meta":181,"style":181},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[183,170282,170283,170314],{"__ignoreMap":181},[186,170284,170285,170287,170289,170291,170293,170295,170297,170299,170301,170303,170306,170308,170310,170312],{"class":188,"line":189},[186,170286,109264],{"class":669},[186,170288,147988],{"class":206},[186,170290,832],{"class":202},[186,170292,147993],{"class":532},[186,170294,13898],{"class":202},[186,170296,147998],{"class":532},[186,170298,13898],{"class":202},[186,170300,148003],{"class":835},[186,170302,529],{"class":669},[186,170304,170305],{"class":532},"\"gbk\"",[186,170307,839],{"class":202},[186,170309,32838],{"class":669},[186,170311,149350],{"class":835},[186,170313,5205],{"class":202},[186,170315,170316,170318,170320,170322],{"class":188,"line":49},[186,170317,148020],{"class":202},[186,170319,529],{"class":669},[186,170321,149350],{"class":835},[186,170323,169698],{"class":202},[169,170325,170326],{},"写文件时建议统一 UTF-8：",[176,170328,170330],{"className":31833,"code":170329,"language":31835,"meta":181,"style":181},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[183,170331,170332,170362],{"__ignoreMap":181},[186,170333,170334,170336,170338,170340,170342,170344,170346,170348,170350,170352,170354,170356,170358,170360],{"class":188,"line":189},[186,170335,109264],{"class":669},[186,170337,147988],{"class":206},[186,170339,832],{"class":202},[186,170341,147993],{"class":532},[186,170343,13898],{"class":202},[186,170345,153173],{"class":532},[186,170347,13898],{"class":202},[186,170349,148003],{"class":835},[186,170351,529],{"class":669},[186,170353,148008],{"class":532},[186,170355,839],{"class":202},[186,170357,32838],{"class":669},[186,170359,149350],{"class":835},[186,170361,5205],{"class":202},[186,170363,170364,170366,170368,170371],{"class":188,"line":49},[186,170365,170081],{"class":835},[186,170367,170084],{"class":202},[186,170369,170370],{"class":532},"\"中文内容\"",[186,170372,1629],{"class":202},[14,170374,170376],{"id":170375},"_89-pathlib","8.9 pathlib",[169,170378,170379,170382],{},[183,170380,170381],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[176,170384,170386],{"className":31833,"code":170385,"language":31835,"meta":181,"style":181},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[183,170387,170388,170398,170402,170420],{"__ignoreMap":181},[186,170389,170390,170392,170394,170396],{"class":188,"line":189},[186,170391,32192],{"class":669},[186,170393,109742],{"class":202},[186,170395,31847],{"class":669},[186,170397,109747],{"class":202},[186,170399,170400],{"class":188,"line":49},[186,170401,3867],{"emptyLinePlaceholder":1551},[186,170403,170404,170406,170408,170410,170413,170415,170417],{"class":188,"line":219},[186,170405,169508],{"class":202},[186,170407,529],{"class":669},[186,170409,109976],{"class":202},[186,170411,170412],{"class":532},"\"data\"",[186,170414,839],{"class":202},[186,170416,2194],{"class":669},[186,170418,170419],{"class":532}," \"students.txt\"\n",[186,170421,170422,170424],{"class":188,"line":225},[186,170423,31870],{"class":206},[186,170425,170426],{"class":202},"(path)\n",[169,170428,170429],{},"创建目录：",[176,170431,170433],{"className":31833,"code":170432,"language":31835,"meta":181,"style":181},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[183,170434,170435,170445,170449,170462],{"__ignoreMap":181},[186,170436,170437,170439,170441,170443],{"class":188,"line":189},[186,170438,32192],{"class":669},[186,170440,109742],{"class":202},[186,170442,31847],{"class":669},[186,170444,109747],{"class":202},[186,170446,170447],{"class":188,"line":49},[186,170448,3867],{"emptyLinePlaceholder":1551},[186,170450,170451,170454,170456,170458,170460],{"class":188,"line":219},[186,170452,170453],{"class":202},"data_dir ",[186,170455,529],{"class":669},[186,170457,109976],{"class":202},[186,170459,170412],{"class":532},[186,170461,1629],{"class":202},[186,170463,170464,170467,170470,170472,170474],{"class":188,"line":225},[186,170465,170466],{"class":202},"data_dir.mkdir(",[186,170468,170469],{"class":835},"exist_ok",[186,170471,529],{"class":669},[186,170473,32931],{"class":206},[186,170475,1629],{"class":202},[169,170477,170478],{},"判断文件是否存在：",[176,170480,170482],{"className":31833,"code":170481,"language":31835,"meta":181,"style":181},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[183,170483,170484,170497,170501,170508],{"__ignoreMap":181},[186,170485,170486,170488,170490,170492,170495],{"class":188,"line":189},[186,170487,169508],{"class":202},[186,170489,529],{"class":669},[186,170491,109976],{"class":202},[186,170493,170494],{"class":532},"\"data\u002Fstudents.txt\"",[186,170496,1629],{"class":202},[186,170498,170499],{"class":188,"line":49},[186,170500,3867],{"emptyLinePlaceholder":1551},[186,170502,170503,170505],{"class":188,"line":219},[186,170504,3003],{"class":669},[186,170506,170507],{"class":202}," path.exists():\n",[186,170509,170510,170512,170514,170517],{"class":188,"line":225},[186,170511,32754],{"class":206},[186,170513,832],{"class":202},[186,170515,170516],{"class":532},"\"文件存在\"",[186,170518,1629],{"class":202},[169,170520,170521],{},"读写文本：",[176,170523,170525],{"className":31833,"code":170524,"language":31835,"meta":181,"style":181},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[183,170526,170527,170539,170543,170560,170577],{"__ignoreMap":181},[186,170528,170529,170531,170533,170535,170537],{"class":188,"line":189},[186,170530,169508],{"class":202},[186,170532,529],{"class":669},[186,170534,109976],{"class":202},[186,170536,147993],{"class":532},[186,170538,1629],{"class":202},[186,170540,170541],{"class":188,"line":49},[186,170542,3867],{"emptyLinePlaceholder":1551},[186,170544,170545,170548,170550,170552,170554,170556,170558],{"class":188,"line":219},[186,170546,170547],{"class":202},"path.write_text(",[186,170549,147073],{"class":532},[186,170551,13898],{"class":202},[186,170553,148003],{"class":835},[186,170555,529],{"class":669},[186,170557,148008],{"class":532},[186,170559,1629],{"class":202},[186,170561,170562,170564,170566,170569,170571,170573,170575],{"class":188,"line":225},[186,170563,169691],{"class":202},[186,170565,529],{"class":669},[186,170567,170568],{"class":202}," path.read_text(",[186,170570,148003],{"class":835},[186,170572,529],{"class":669},[186,170574,148008],{"class":532},[186,170576,1629],{"class":202},[186,170578,170579,170581],{"class":188,"line":242},[186,170580,31870],{"class":206},[186,170582,169705],{"class":202},[14,170584,170586],{"id":170585},"_810-json文件","8.10 JSON文件",[169,170588,170589],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[176,170591,170593],{"className":31833,"code":170592,"language":31835,"meta":181,"style":181},"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",[183,170594,170595,170601,170605,170613,170623,170633,170641,170645,170649,170674],{"__ignoreMap":181},[186,170596,170597,170599],{"class":188,"line":189},[186,170598,31847],{"class":669},[186,170600,148288],{"class":202},[186,170602,170603],{"class":188,"line":49},[186,170604,3867],{"emptyLinePlaceholder":1551},[186,170606,170607,170609,170611],{"class":188,"line":219},[186,170608,150678],{"class":202},[186,170610,529],{"class":669},[186,170612,622],{"class":202},[186,170614,170615,170617,170619,170621],{"class":188,"line":225},[186,170616,148217],{"class":532},[186,170618,210],{"class":202},[186,170620,151085],{"class":532},[186,170622,32921],{"class":202},[186,170624,170625,170627,170629,170631],{"class":188,"line":242},[186,170626,165734],{"class":532},[186,170628,210],{"class":202},[186,170630,2260],{"class":206},[186,170632,32921],{"class":202},[186,170634,170635,170637,170639],{"class":188,"line":248},[186,170636,165745],{"class":532},[186,170638,210],{"class":202},[186,170640,165750],{"class":206},[186,170642,170643],{"class":188,"line":265},[186,170644,639],{"class":202},[186,170646,170647],{"class":188,"line":271},[186,170648,3867],{"emptyLinePlaceholder":1551},[186,170650,170651,170653,170655,170658,170660,170662,170664,170666,170668,170670,170672],{"class":188,"line":288},[186,170652,157641],{"class":202},[186,170654,529],{"class":669},[186,170656,170657],{"class":202}," json.dumps(student, ",[186,170659,148334],{"class":835},[186,170661,529],{"class":669},[186,170663,35442],{"class":206},[186,170665,13898],{"class":202},[186,170667,153209],{"class":835},[186,170669,529],{"class":669},[186,170671,1697],{"class":206},[186,170673,1629],{"class":202},[186,170675,170676,170678],{"class":188,"line":294},[186,170677,31870],{"class":206},[186,170679,165268],{"class":202},[169,170681,170682],{},"写入 JSON 文件：",[176,170684,170686],{"className":31833,"code":170685,"language":31835,"meta":181,"style":181},"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",[183,170687,170688,170694,170698,170706,170734,170762,170766,170770,170800],{"__ignoreMap":181},[186,170689,170690,170692],{"class":188,"line":189},[186,170691,31847],{"class":669},[186,170693,148288],{"class":202},[186,170695,170696],{"class":188,"line":49},[186,170697,3867],{"emptyLinePlaceholder":1551},[186,170699,170700,170702,170704],{"class":188,"line":219},[186,170701,160913],{"class":202},[186,170703,529],{"class":669},[186,170705,56888],{"class":202},[186,170707,170708,170710,170712,170714,170716,170718,170720,170722,170724,170726,170728,170730,170732],{"class":188,"line":225},[186,170709,149582],{"class":202},[186,170711,64117],{"class":532},[186,170713,210],{"class":202},[186,170715,151085],{"class":532},[186,170717,13898],{"class":202},[186,170719,70561],{"class":532},[186,170721,210],{"class":202},[186,170723,2260],{"class":206},[186,170725,13898],{"class":202},[186,170727,152669],{"class":532},[186,170729,210],{"class":202},[186,170731,2596],{"class":206},[186,170733,6396],{"class":202},[186,170735,170736,170738,170740,170742,170744,170746,170748,170750,170752,170754,170756,170758,170760],{"class":188,"line":242},[186,170737,149582],{"class":202},[186,170739,64117],{"class":532},[186,170741,210],{"class":202},[186,170743,152133],{"class":532},[186,170745,13898],{"class":202},[186,170747,70561],{"class":532},[186,170749,210],{"class":202},[186,170751,2235],{"class":206},[186,170753,13898],{"class":202},[186,170755,152669],{"class":532},[186,170757,210],{"class":202},[186,170759,2419],{"class":206},[186,170761,6396],{"class":202},[186,170763,170764],{"class":188,"line":248},[186,170765,34701],{"class":202},[186,170767,170768],{"class":188,"line":265},[186,170769,3867],{"emptyLinePlaceholder":1551},[186,170771,170772,170774,170776,170778,170780,170782,170784,170786,170788,170790,170792,170794,170796,170798],{"class":188,"line":271},[186,170773,109264],{"class":669},[186,170775,147988],{"class":206},[186,170777,832],{"class":202},[186,170779,153028],{"class":532},[186,170781,13898],{"class":202},[186,170783,153173],{"class":532},[186,170785,13898],{"class":202},[186,170787,148003],{"class":835},[186,170789,529],{"class":669},[186,170791,148008],{"class":532},[186,170793,839],{"class":202},[186,170795,32838],{"class":669},[186,170797,149350],{"class":835},[186,170799,5205],{"class":202},[186,170801,170802,170805,170807,170809,170811,170813,170815,170817,170819,170821,170823],{"class":188,"line":288},[186,170803,170804],{"class":202},"    json.dump(students, ",[186,170806,46808],{"class":835},[186,170808,13898],{"class":202},[186,170810,148334],{"class":835},[186,170812,529],{"class":669},[186,170814,35442],{"class":206},[186,170816,13898],{"class":202},[186,170818,153209],{"class":835},[186,170820,529],{"class":669},[186,170822,1697],{"class":206},[186,170824,1629],{"class":202},[169,170826,170827],{},"读取 JSON 文件：",[176,170829,170831],{"className":31833,"code":170830,"language":31835,"meta":181,"style":181},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[183,170832,170833,170839,170843,170873,170885,170889],{"__ignoreMap":181},[186,170834,170835,170837],{"class":188,"line":189},[186,170836,31847],{"class":669},[186,170838,148288],{"class":202},[186,170840,170841],{"class":188,"line":49},[186,170842,3867],{"emptyLinePlaceholder":1551},[186,170844,170845,170847,170849,170851,170853,170855,170857,170859,170861,170863,170865,170867,170869,170871],{"class":188,"line":219},[186,170846,109264],{"class":669},[186,170848,147988],{"class":206},[186,170850,832],{"class":202},[186,170852,153028],{"class":532},[186,170854,13898],{"class":202},[186,170856,147998],{"class":532},[186,170858,13898],{"class":202},[186,170860,148003],{"class":835},[186,170862,529],{"class":669},[186,170864,148008],{"class":532},[186,170866,839],{"class":202},[186,170868,32838],{"class":669},[186,170870,149350],{"class":835},[186,170872,5205],{"class":202},[186,170874,170875,170877,170879,170881,170883],{"class":188,"line":225},[186,170876,154234],{"class":202},[186,170878,529],{"class":669},[186,170880,149361],{"class":202},[186,170882,46808],{"class":835},[186,170884,1629],{"class":202},[186,170886,170887],{"class":188,"line":242},[186,170888,3867],{"emptyLinePlaceholder":1551},[186,170890,170891,170893],{"class":188,"line":248},[186,170892,31870],{"class":206},[186,170894,166192],{"class":202},[14,170896,170898],{"id":170897},"_811-csv文件","8.11 CSV文件",[169,170900,170901],{},"CSV 是逗号分隔值，常用于表格数据。",[169,170903,170904],{},"写入 CSV：",[176,170906,170908],{"className":31833,"code":170907,"language":31835,"meta":181,"style":181},"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",[183,170909,170910,170917,170921,170929,170947,170963,170979,170983,170987,171027,171041],{"__ignoreMap":181},[186,170911,170912,170914],{"class":188,"line":189},[186,170913,31847],{"class":669},[186,170915,170916],{"class":202}," csv\n",[186,170918,170919],{"class":188,"line":49},[186,170920,3867],{"emptyLinePlaceholder":1551},[186,170922,170923,170925,170927],{"class":188,"line":219},[186,170924,160913],{"class":202},[186,170926,529],{"class":669},[186,170928,56888],{"class":202},[186,170930,170931,170934,170936,170938,170940,170942,170945],{"class":188,"line":225},[186,170932,170933],{"class":202},"    [",[186,170935,74532],{"class":532},[186,170937,13898],{"class":202},[186,170939,74565],{"class":532},[186,170941,13898],{"class":202},[186,170943,170944],{"class":532},"\"成绩\"",[186,170946,89267],{"class":202},[186,170948,170949,170951,170953,170955,170957,170959,170961],{"class":188,"line":242},[186,170950,170933],{"class":202},[186,170952,151085],{"class":532},[186,170954,13898],{"class":202},[186,170956,2260],{"class":206},[186,170958,13898],{"class":202},[186,170960,2596],{"class":206},[186,170962,89267],{"class":202},[186,170964,170965,170967,170969,170971,170973,170975,170977],{"class":188,"line":248},[186,170966,170933],{"class":202},[186,170968,152133],{"class":532},[186,170970,13898],{"class":202},[186,170972,2235],{"class":206},[186,170974,13898],{"class":202},[186,170976,2419],{"class":206},[186,170978,89267],{"class":202},[186,170980,170981],{"class":188,"line":265},[186,170982,34701],{"class":202},[186,170984,170985],{"class":188,"line":271},[186,170986,3867],{"emptyLinePlaceholder":1551},[186,170988,170989,170991,170993,170995,170998,171000,171002,171004,171006,171008,171010,171012,171015,171017,171019,171021,171023,171025],{"class":188,"line":288},[186,170990,109264],{"class":669},[186,170992,147988],{"class":206},[186,170994,832],{"class":202},[186,170996,170997],{"class":532},"\"students.csv\"",[186,170999,13898],{"class":202},[186,171001,153173],{"class":532},[186,171003,13898],{"class":202},[186,171005,148003],{"class":835},[186,171007,529],{"class":669},[186,171009,148008],{"class":532},[186,171011,13898],{"class":202},[186,171013,171014],{"class":835},"newline",[186,171016,529],{"class":669},[186,171018,9115],{"class":532},[186,171020,839],{"class":202},[186,171022,32838],{"class":669},[186,171024,149350],{"class":835},[186,171026,5205],{"class":202},[186,171028,171029,171032,171034,171037,171039],{"class":188,"line":294},[186,171030,171031],{"class":202},"    writer ",[186,171033,529],{"class":669},[186,171035,171036],{"class":202}," csv.writer(",[186,171038,46808],{"class":835},[186,171040,1629],{"class":202},[186,171042,171043],{"class":188,"line":1212},[186,171044,171045],{"class":202},"    writer.writerows(students)\n",[169,171047,171048],{},"读取 CSV：",[176,171050,171052],{"className":31833,"code":171051,"language":31835,"meta":181,"style":181},"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",[183,171053,171054,171060,171064,171094,171108,171120],{"__ignoreMap":181},[186,171055,171056,171058],{"class":188,"line":189},[186,171057,31847],{"class":669},[186,171059,170916],{"class":202},[186,171061,171062],{"class":188,"line":49},[186,171063,3867],{"emptyLinePlaceholder":1551},[186,171065,171066,171068,171070,171072,171074,171076,171078,171080,171082,171084,171086,171088,171090,171092],{"class":188,"line":219},[186,171067,109264],{"class":669},[186,171069,147988],{"class":206},[186,171071,832],{"class":202},[186,171073,170997],{"class":532},[186,171075,13898],{"class":202},[186,171077,147998],{"class":532},[186,171079,13898],{"class":202},[186,171081,148003],{"class":835},[186,171083,529],{"class":669},[186,171085,148008],{"class":532},[186,171087,839],{"class":202},[186,171089,32838],{"class":669},[186,171091,149350],{"class":835},[186,171093,5205],{"class":202},[186,171095,171096,171099,171101,171104,171106],{"class":188,"line":225},[186,171097,171098],{"class":202},"    reader ",[186,171100,529],{"class":669},[186,171102,171103],{"class":202}," csv.reader(",[186,171105,46808],{"class":835},[186,171107,1629],{"class":202},[186,171109,171110,171112,171115,171117],{"class":188,"line":242},[186,171111,4667],{"class":669},[186,171113,171114],{"class":202}," row ",[186,171116,27500],{"class":669},[186,171118,171119],{"class":202}," reader:\n",[186,171121,171122,171124],{"class":188,"line":248},[186,171123,33906],{"class":206},[186,171125,171126],{"class":202},"(row)\n",[169,171128,171129],{},"使用字典写入：",[176,171131,171133],{"className":31833,"code":171132,"language":31835,"meta":181,"style":181},"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",[183,171134,171135,171141,171145,171153,171181,171209,171213,171217,171255,171276,171297,171302],{"__ignoreMap":181},[186,171136,171137,171139],{"class":188,"line":189},[186,171138,31847],{"class":669},[186,171140,170916],{"class":202},[186,171142,171143],{"class":188,"line":49},[186,171144,3867],{"emptyLinePlaceholder":1551},[186,171146,171147,171149,171151],{"class":188,"line":219},[186,171148,160913],{"class":202},[186,171150,529],{"class":669},[186,171152,56888],{"class":202},[186,171154,171155,171157,171159,171161,171163,171165,171167,171169,171171,171173,171175,171177,171179],{"class":188,"line":225},[186,171156,149582],{"class":202},[186,171158,64117],{"class":532},[186,171160,210],{"class":202},[186,171162,151085],{"class":532},[186,171164,13898],{"class":202},[186,171166,70561],{"class":532},[186,171168,210],{"class":202},[186,171170,2260],{"class":206},[186,171172,13898],{"class":202},[186,171174,152669],{"class":532},[186,171176,210],{"class":202},[186,171178,2596],{"class":206},[186,171180,6396],{"class":202},[186,171182,171183,171185,171187,171189,171191,171193,171195,171197,171199,171201,171203,171205,171207],{"class":188,"line":242},[186,171184,149582],{"class":202},[186,171186,64117],{"class":532},[186,171188,210],{"class":202},[186,171190,152133],{"class":532},[186,171192,13898],{"class":202},[186,171194,70561],{"class":532},[186,171196,210],{"class":202},[186,171198,2235],{"class":206},[186,171200,13898],{"class":202},[186,171202,152669],{"class":532},[186,171204,210],{"class":202},[186,171206,2419],{"class":206},[186,171208,6396],{"class":202},[186,171210,171211],{"class":188,"line":248},[186,171212,34701],{"class":202},[186,171214,171215],{"class":188,"line":265},[186,171216,3867],{"emptyLinePlaceholder":1551},[186,171218,171219,171221,171223,171225,171227,171229,171231,171233,171235,171237,171239,171241,171243,171245,171247,171249,171251,171253],{"class":188,"line":271},[186,171220,109264],{"class":669},[186,171222,147988],{"class":206},[186,171224,832],{"class":202},[186,171226,170997],{"class":532},[186,171228,13898],{"class":202},[186,171230,153173],{"class":532},[186,171232,13898],{"class":202},[186,171234,148003],{"class":835},[186,171236,529],{"class":669},[186,171238,148008],{"class":532},[186,171240,13898],{"class":202},[186,171242,171014],{"class":835},[186,171244,529],{"class":669},[186,171246,9115],{"class":532},[186,171248,839],{"class":202},[186,171250,32838],{"class":669},[186,171252,149350],{"class":835},[186,171254,5205],{"class":202},[186,171256,171257,171260,171262,171264,171266,171268,171270,171272,171274],{"class":188,"line":288},[186,171258,171259],{"class":202},"    fieldnames ",[186,171261,529],{"class":669},[186,171263,53673],{"class":202},[186,171265,64117],{"class":532},[186,171267,13898],{"class":202},[186,171269,70561],{"class":532},[186,171271,13898],{"class":202},[186,171273,152669],{"class":532},[186,171275,34701],{"class":202},[186,171277,171278,171280,171282,171285,171287,171289,171292,171294],{"class":188,"line":294},[186,171279,171031],{"class":202},[186,171281,529],{"class":669},[186,171283,171284],{"class":202}," csv.DictWriter(",[186,171286,46808],{"class":835},[186,171288,13898],{"class":202},[186,171290,171291],{"class":835},"fieldnames",[186,171293,529],{"class":669},[186,171295,171296],{"class":202},"fieldnames)\n",[186,171298,171299],{"class":188,"line":1212},[186,171300,171301],{"class":202},"    writer.writeheader()\n",[186,171303,171304],{"class":188,"line":1223},[186,171305,171045],{"class":202},[14,171307,171309],{"id":171308},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[169,171311,124723],{},[34,171313,171314,171317,171320],{},[22,171315,171316],{},"读取文本文件。",[22,171318,171319],{},"统计每个单词出现次数。",[22,171321,171322],{},"输出出现次数最多的前 10 个单词。",[169,171324,11498],{},[176,171326,171328],{"className":31833,"code":171327,"language":31835,"meta":181,"style":181},"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",[183,171329,171330,171340,171344,171357,171373,171377,171387,171396,171400,171412,171432,171441,171445,171463,171467,171497,171501,171517],{"__ignoreMap":181},[186,171331,171332,171334,171336,171338],{"class":188,"line":189},[186,171333,32192],{"class":669},[186,171335,109742],{"class":202},[186,171337,31847],{"class":669},[186,171339,109747],{"class":202},[186,171341,171342],{"class":188,"line":49},[186,171343,3867],{"emptyLinePlaceholder":1551},[186,171345,171346,171348,171350,171352,171355],{"class":188,"line":219},[186,171347,169508],{"class":202},[186,171349,529],{"class":669},[186,171351,109976],{"class":202},[186,171353,171354],{"class":532},"\"article.txt\"",[186,171356,1629],{"class":202},[186,171358,171359,171361,171363,171365,171367,171369,171371],{"class":188,"line":225},[186,171360,169691],{"class":202},[186,171362,529],{"class":669},[186,171364,170568],{"class":202},[186,171366,148003],{"class":835},[186,171368,529],{"class":669},[186,171370,148008],{"class":532},[186,171372,1629],{"class":202},[186,171374,171375],{"class":188,"line":242},[186,171376,3867],{"emptyLinePlaceholder":1551},[186,171378,171379,171382,171384],{"class":188,"line":248},[186,171380,171381],{"class":202},"words ",[186,171383,529],{"class":669},[186,171385,171386],{"class":202}," content.lower().split()\n",[186,171388,171389,171392,171394],{"class":188,"line":265},[186,171390,171391],{"class":202},"counter ",[186,171393,529],{"class":669},[186,171395,89299],{"class":202},[186,171397,171398],{"class":188,"line":271},[186,171399,3867],{"emptyLinePlaceholder":1551},[186,171401,171402,171404,171407,171409],{"class":188,"line":288},[186,171403,4491],{"class":669},[186,171405,171406],{"class":202}," word ",[186,171408,27500],{"class":669},[186,171410,171411],{"class":202}," words:\n",[186,171413,171414,171417,171419,171422,171425,171427,171430],{"class":188,"line":294},[186,171415,171416],{"class":202},"    word ",[186,171418,529],{"class":669},[186,171420,171421],{"class":202}," word.strip(",[186,171423,171424],{"class":532},"\".,!?;:",[186,171426,157692],{"class":206},[186,171428,171429],{"class":532},"'()[]\"",[186,171431,1629],{"class":202},[186,171433,171434,171436,171438],{"class":188,"line":1212},[186,171435,4567],{"class":669},[186,171437,40384],{"class":669},[186,171439,171440],{"class":202}," word:\n",[186,171442,171443],{"class":188,"line":1223},[186,171444,149709],{"class":669},[186,171446,171447,171450,171452,171455,171457,171459,171461],{"class":188,"line":1236},[186,171448,171449],{"class":202},"    counter[word] ",[186,171451,529],{"class":669},[186,171453,171454],{"class":202}," counter.get(word, ",[186,171456,1803],{"class":206},[186,171458,839],{"class":202},[186,171460,2091],{"class":669},[186,171462,57140],{"class":206},[186,171464,171465],{"class":188,"line":3096},[186,171466,3867],{"emptyLinePlaceholder":1551},[186,171468,171469,171472,171474,171476,171479,171481,171483,171485,171487,171489,171491,171493,171495],{"class":188,"line":3110},[186,171470,171471],{"class":202},"items ",[186,171473,529],{"class":669},[186,171475,164801],{"class":206},[186,171477,171478],{"class":202},"(counter.items(), ",[186,171480,155143],{"class":835},[186,171482,155146],{"class":669},[186,171484,155149],{"class":202},[186,171486,1829],{"class":206},[186,171488,113633],{"class":202},[186,171490,164725],{"class":835},[186,171492,529],{"class":669},[186,171494,32931],{"class":206},[186,171496,1629],{"class":202},[186,171498,171499],{"class":188,"line":3115},[186,171500,3867],{"emptyLinePlaceholder":1551},[186,171502,171503,171505,171508,171510,171513,171515],{"class":188,"line":3121},[186,171504,4491],{"class":669},[186,171506,171507],{"class":202}," word, count ",[186,171509,27500],{"class":669},[186,171511,171512],{"class":202}," items[:",[186,171514,2056],{"class":206},[186,171516,166952],{"class":202},[186,171518,171519,171521],{"class":188,"line":3142},[186,171520,32754],{"class":206},[186,171522,171523],{"class":202},"(word, count)\n",[14,171525,171527],{"id":171526},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[176,171529,171531],{"className":31833,"code":171530,"language":31835,"meta":181,"style":181},"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",[183,171532,171533,171539,171549,171553,171565,171569,171573,171581,171591,171597,171601,171631,171641,171645,171649,171657,171687,171711,171715,171719,171727,171756,171761],{"__ignoreMap":181},[186,171534,171535,171537],{"class":188,"line":189},[186,171536,31847],{"class":669},[186,171538,148288],{"class":202},[186,171540,171541,171543,171545,171547],{"class":188,"line":49},[186,171542,32192],{"class":669},[186,171544,109742],{"class":202},[186,171546,31847],{"class":669},[186,171548,109747],{"class":202},[186,171550,171551],{"class":188,"line":219},[186,171552,3867],{"emptyLinePlaceholder":1551},[186,171554,171555,171557,171559,171561,171563],{"class":188,"line":225},[186,171556,153021],{"class":206},[186,171558,15027],{"class":669},[186,171560,109976],{"class":202},[186,171562,153028],{"class":532},[186,171564,1629],{"class":202},[186,171566,171567],{"class":188,"line":242},[186,171568,3867],{"emptyLinePlaceholder":1551},[186,171570,171571],{"class":188,"line":248},[186,171572,3867],{"emptyLinePlaceholder":1551},[186,171574,171575,171577,171579],{"class":188,"line":265},[186,171576,33402],{"class":669},[186,171578,153045],{"class":198},[186,171580,33408],{"class":202},[186,171582,171583,171585,171587,171589],{"class":188,"line":271},[186,171584,4567],{"class":669},[186,171586,40384],{"class":669},[186,171588,153056],{"class":206},[186,171590,153059],{"class":202},[186,171592,171593,171595],{"class":188,"line":288},[186,171594,16214],{"class":669},[186,171596,53285],{"class":202},[186,171598,171599],{"class":188,"line":294},[186,171600,3867],{"emptyLinePlaceholder":1551},[186,171602,171603,171605,171607,171609,171611,171613,171615,171617,171619,171621,171623,171625,171627,171629],{"class":188,"line":1212},[186,171604,35633],{"class":669},[186,171606,147988],{"class":206},[186,171608,832],{"class":202},[186,171610,153021],{"class":206},[186,171612,13898],{"class":202},[186,171614,147998],{"class":532},[186,171616,13898],{"class":202},[186,171618,148003],{"class":835},[186,171620,529],{"class":669},[186,171622,148008],{"class":532},[186,171624,839],{"class":202},[186,171626,32838],{"class":669},[186,171628,149350],{"class":835},[186,171630,5205],{"class":202},[186,171632,171633,171635,171637,171639],{"class":188,"line":1223},[186,171634,16214],{"class":669},[186,171636,149361],{"class":202},[186,171638,46808],{"class":835},[186,171640,1629],{"class":202},[186,171642,171643],{"class":188,"line":1236},[186,171644,3867],{"emptyLinePlaceholder":1551},[186,171646,171647],{"class":188,"line":3096},[186,171648,3867],{"emptyLinePlaceholder":1551},[186,171650,171651,171653,171655],{"class":188,"line":3110},[186,171652,33402],{"class":669},[186,171654,153155],{"class":198},[186,171656,153158],{"class":202},[186,171658,171659,171661,171663,171665,171667,171669,171671,171673,171675,171677,171679,171681,171683,171685],{"class":188,"line":3115},[186,171660,35633],{"class":669},[186,171662,147988],{"class":206},[186,171664,832],{"class":202},[186,171666,153021],{"class":206},[186,171668,13898],{"class":202},[186,171670,153173],{"class":532},[186,171672,13898],{"class":202},[186,171674,148003],{"class":835},[186,171676,529],{"class":669},[186,171678,148008],{"class":532},[186,171680,839],{"class":202},[186,171682,32838],{"class":669},[186,171684,149350],{"class":835},[186,171686,5205],{"class":202},[186,171688,171689,171691,171693,171695,171697,171699,171701,171703,171705,171707,171709],{"class":188,"line":3121},[186,171690,153194],{"class":202},[186,171692,46808],{"class":835},[186,171694,13898],{"class":202},[186,171696,148334],{"class":835},[186,171698,529],{"class":669},[186,171700,35442],{"class":206},[186,171702,13898],{"class":202},[186,171704,153209],{"class":835},[186,171706,529],{"class":669},[186,171708,1697],{"class":206},[186,171710,1629],{"class":202},[186,171712,171713],{"class":188,"line":3142},[186,171714,3867],{"emptyLinePlaceholder":1551},[186,171716,171717],{"class":188,"line":3147},[186,171718,3867],{"emptyLinePlaceholder":1551},[186,171720,171721,171723,171725],{"class":188,"line":3161},[186,171722,160913],{"class":202},[186,171724,529],{"class":669},[186,171726,154239],{"class":202},[186,171728,171729,171732,171734,171736,171738,171740,171742,171744,171746,171748,171750,171752,171754],{"class":188,"line":3166},[186,171730,171731],{"class":202},"students.append({",[186,171733,64117],{"class":532},[186,171735,210],{"class":202},[186,171737,151085],{"class":532},[186,171739,13898],{"class":202},[186,171741,70561],{"class":532},[186,171743,210],{"class":202},[186,171745,2260],{"class":206},[186,171747,13898],{"class":202},[186,171749,152669],{"class":532},[186,171751,210],{"class":202},[186,171753,2596],{"class":206},[186,171755,166349],{"class":202},[186,171757,171758],{"class":188,"line":3195},[186,171759,171760],{"class":202},"save_students(students)\n",[186,171762,171763,171765,171767,171770],{"class":188,"line":3200},[186,171764,31870],{"class":206},[186,171766,832],{"class":202},[186,171768,171769],{"class":532},"\"保存成功\"",[186,171771,1629],{"class":202},[14,171773,171775],{"id":171774},"_814-易错点","8.14 易错点",[34,171777,171778,171782,171788,171793,171800,171807],{},[22,171779,171780,170041],{},[183,171781,2403],{},[22,171783,171784,171785,913],{},"读写中文要指定 ",[183,171786,171787],{},"encoding=\"utf-8\"",[22,171789,171790,171791,913],{},"打开文件后要关闭，推荐使用 ",[183,171792,109264],{},[22,171794,171795,171796,171799],{},"读取大文件不要直接 ",[183,171797,171798],{},"read()"," 全部内容。",[22,171801,171802,171803,171806],{},"Windows 写 CSV 时建议加 ",[183,171804,171805],{},"newline=\"\"","，避免空行。",[22,171808,171809],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171811,171813],{"id":171812},"_815-本章练习","8.15 本章练习",[34,171815,171816,171823,171828,171831,171834],{},[22,171817,171818,171819,171822],{},"写入一个 ",[183,171820,171821],{},"students.txt","，每行保存一个学生姓名。",[22,171824,105786,171825,171827],{},[183,171826,171821],{}," 并输出所有学生。",[22,171829,171830],{},"把学生列表保存为 JSON 文件。",[22,171832,171833],{},"从 JSON 文件读取学生数据，计算平均分。",[22,171835,171836,171837,171840,171841,171844],{},"写一个日志函数 ",[183,171838,171839],{},"write_log(message)","，每次调用向 ",[183,171842,171843],{},"app.log"," 追加一行。",[1524,171846,171847],{},"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":181,"searchDepth":49,"depth":49,"links":171849},[171850,171851,171855,171856,171862,171863,171864,171865,171866,171867,171868,171869,171870,171871,171872],{"id":169361,"depth":49,"text":169362},{"id":169402,"depth":49,"text":169403,"children":171852},[171853,171854],{"id":169406,"depth":219,"text":169407},{"id":169440,"depth":219,"text":169441},{"id":169554,"depth":49,"text":169555},{"id":169647,"depth":49,"text":169648,"children":171857},[171858,171859,171860,171861],{"id":169651,"depth":219,"text":169652},{"id":169738,"depth":219,"text":169739},{"id":169808,"depth":219,"text":169809},{"id":169902,"depth":219,"text":169903},{"id":169972,"depth":49,"text":169973},{"id":170035,"depth":49,"text":170036},{"id":170196,"depth":49,"text":170197},{"id":170259,"depth":49,"text":170260},{"id":170375,"depth":49,"text":170376},{"id":170585,"depth":49,"text":170586},{"id":170897,"depth":49,"text":170898},{"id":171308,"depth":49,"text":171309},{"id":171526,"depth":49,"text":171527},{"id":171774,"depth":49,"text":171775},{"id":171812,"depth":49,"text":171813},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169353,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171879,"title":171880,"body":171881,"description":1548,"extension":1549,"meta":174067,"navigation":1551,"path":174068,"seo":174069,"stem":174070,"__hash__":174071},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171882,"toc":174034},[171883,171886,171890,171893,171896,171988,171990,172009,172014,172018,172021,172024,172053,172060,172063,172067,172070,172099,172101,172153,172159,172212,172216,172314,172317,172384,172388,172445,172447,172453,172457,172462,172468,172559,172564,172568,172571,172649,172652,172690,172694,172812,172815,172819,172822,172867,172870,172874,172879,172885,172935,172938,172969,172973,172977,173007,173011,173046,173050,173085,173125,173129,173145,173148,173152,173156,173235,173239,173280,173284,173339,173343,173377,173381,173411,173420,173427,173433,173490,173493,173501,173504,173508,173515,173518,173524,173527,173544,173549,173553,173559,173572,173575,173612,173615,173626,173629,173643,173646,173660,173664,173671,173704,173707,173709,173715,173718,173722,173724,173730,173735,173908,173912,173975,173979,174003,174007,174031],[10,171884,171880],{"id":171885},"_9-异常模块与包",[14,171887,171889],{"id":171888},"_91-什么是异常","9.1 什么是异常",[169,171891,171892],{},"异常是程序运行过程中出现的错误。",[169,171894,171895],{},"常见异常：",[99,171897,171898,171907],{},[102,171899,171900],{},[105,171901,171902,171905],{},[108,171903,171904],{},"异常",[108,171906,27327],{},[116,171908,171909,171919,171929,171938,171948,171958,171968,171978],{},[105,171910,171911,171916],{},[121,171912,171913],{},[183,171914,171915],{},"NameError",[121,171917,171918],{},"使用了未定义变量",[105,171920,171921,171926],{},[121,171922,171923],{},[183,171924,171925],{},"TypeError",[121,171927,171928],{},"类型不匹配",[105,171930,171931,171935],{},[121,171932,171933],{},[183,171934,156031],{},[121,171936,171937],{},"值不合法",[105,171939,171940,171945],{},[121,171941,171942],{},[183,171943,171944],{},"IndexError",[121,171946,171947],{},"列表索引越界",[105,171949,171950,171955],{},[121,171951,171952],{},[183,171953,171954],{},"KeyError",[121,171956,171957],{},"字典 key 不存在",[105,171959,171960,171965],{},[121,171961,171962],{},[183,171963,171964],{},"FileNotFoundError",[121,171966,171967],{},"文件不存在",[105,171969,171970,171975],{},[121,171971,171972],{},[183,171973,171974],{},"ZeroDivisionError",[121,171976,171977],{},"除数为 0",[105,171979,171980,171985],{},[121,171981,171982],{},[183,171983,171984],{},"ImportError",[121,171986,171987],{},"导入失败",[169,171989,16597],{},[176,171991,171993],{"className":31833,"code":171992,"language":31835,"meta":181,"style":181},"num = int(\"abc\")\n",[183,171994,171995],{"__ignoreMap":181},[186,171996,171997,171999,172001,172003,172005,172007],{"class":188,"line":189},[186,171998,156984],{"class":202},[186,172000,529],{"class":669},[186,172002,3849],{"class":206},[186,172004,832],{"class":202},[186,172006,157077],{"class":532},[186,172008,1629],{"class":202},[169,172010,172011,172012,913],{},"会触发 ",[183,172013,156031],{},[14,172015,172017],{"id":172016},"_92-为什么要处理异常","9.2 为什么要处理异常",[169,172019,172020],{},"如果不处理异常，程序会直接终止。",[169,172022,172023],{},"例如用户输入年龄：",[176,172025,172027],{"className":31833,"code":172026,"language":31835,"meta":181,"style":181},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[183,172028,172029,172047],{"__ignoreMap":181},[186,172030,172031,172033,172035,172037,172039,172041,172043,172045],{"class":188,"line":189},[186,172032,147743],{"class":202},[186,172034,529],{"class":669},[186,172036,3849],{"class":206},[186,172038,832],{"class":202},[186,172040,55266],{"class":206},[186,172042,832],{"class":202},[186,172044,153591],{"class":532},[186,172046,31952],{"class":202},[186,172048,172049,172051],{"class":188,"line":49},[186,172050,31870],{"class":206},[186,172052,156958],{"class":202},[169,172054,172055,172056,172059],{},"用户输入 ",[183,172057,172058],{},"abc","，程序就会报错退出。",[169,172061,172062],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172064,172066],{"id":172065},"_93-try-except","9.3 try except",[169,172068,172069],{},"基础语法：",[176,172071,172073],{"className":31833,"code":172072,"language":31835,"meta":181,"style":181},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[183,172074,172075,172082,172087,172094],{"__ignoreMap":181},[186,172076,172077,172080],{"class":188,"line":189},[186,172078,172079],{"class":669},"try",[186,172081,5205],{"class":202},[186,172083,172084],{"class":188,"line":49},[186,172085,172086],{"class":202},"    可能出错的代码\n",[186,172088,172089,172092],{"class":188,"line":219},[186,172090,172091],{"class":669},"except",[186,172093,5205],{"class":202},[186,172095,172096],{"class":188,"line":225},[186,172097,172098],{"class":202},"    出错后的处理代码\n",[169,172100,16597],{},[176,172102,172104],{"className":31833,"code":172103,"language":31835,"meta":181,"style":181},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[183,172105,172106,172112,172130,172136,172142],{"__ignoreMap":181},[186,172107,172108,172110],{"class":188,"line":189},[186,172109,172079],{"class":669},[186,172111,5205],{"class":202},[186,172113,172114,172116,172118,172120,172122,172124,172126,172128],{"class":188,"line":49},[186,172115,153583],{"class":202},[186,172117,529],{"class":669},[186,172119,3849],{"class":206},[186,172121,832],{"class":202},[186,172123,55266],{"class":206},[186,172125,832],{"class":202},[186,172127,153591],{"class":532},[186,172129,31952],{"class":202},[186,172131,172132,172134],{"class":188,"line":219},[186,172133,32754],{"class":206},[186,172135,156958],{"class":202},[186,172137,172138,172140],{"class":188,"line":225},[186,172139,172091],{"class":669},[186,172141,5205],{"class":202},[186,172143,172144,172146,172148,172151],{"class":188,"line":242},[186,172145,32754],{"class":206},[186,172147,832],{"class":202},[186,172149,172150],{"class":532},"\"年龄必须是数字\"",[186,172152,1629],{"class":202},[169,172154,172155,172156,172158],{},"不建议裸写 ",[183,172157,172091],{},"，最好指定异常类型。",[176,172160,172162],{"className":31833,"code":172161,"language":31835,"meta":181,"style":181},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[183,172163,172164,172170,172188,172194,172202],{"__ignoreMap":181},[186,172165,172166,172168],{"class":188,"line":189},[186,172167,172079],{"class":669},[186,172169,5205],{"class":202},[186,172171,172172,172174,172176,172178,172180,172182,172184,172186],{"class":188,"line":49},[186,172173,153583],{"class":202},[186,172175,529],{"class":669},[186,172177,3849],{"class":206},[186,172179,832],{"class":202},[186,172181,55266],{"class":206},[186,172183,832],{"class":202},[186,172185,153591],{"class":532},[186,172187,31952],{"class":202},[186,172189,172190,172192],{"class":188,"line":219},[186,172191,32754],{"class":206},[186,172193,156958],{"class":202},[186,172195,172196,172198,172200],{"class":188,"line":225},[186,172197,172091],{"class":669},[186,172199,153423],{"class":206},[186,172201,5205],{"class":202},[186,172203,172204,172206,172208,172210],{"class":188,"line":242},[186,172205,32754],{"class":206},[186,172207,832],{"class":202},[186,172209,172150],{"class":532},[186,172211,1629],{"class":202},[14,172213,172215],{"id":172214},"_94-捕获多个异常","9.4 捕获多个异常",[176,172217,172219],{"className":31833,"code":172218,"language":31835,"meta":181,"style":181},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[183,172220,172221,172227,172248,172268,172275,172283,172294,172303],{"__ignoreMap":181},[186,172222,172223,172225],{"class":188,"line":189},[186,172224,172079],{"class":669},[186,172226,5205],{"class":202},[186,172228,172229,172232,172234,172236,172238,172240,172242,172244,172246],{"class":188,"line":49},[186,172230,172231],{"class":202},"    nums ",[186,172233,529],{"class":669},[186,172235,53673],{"class":202},[186,172237,1829],{"class":206},[186,172239,13898],{"class":202},[186,172241,1697],{"class":206},[186,172243,13898],{"class":202},[186,172245,1691],{"class":206},[186,172247,34701],{"class":202},[186,172249,172250,172253,172255,172257,172259,172261,172263,172266],{"class":188,"line":219},[186,172251,172252],{"class":202},"    index ",[186,172254,529],{"class":669},[186,172256,3849],{"class":206},[186,172258,832],{"class":202},[186,172260,55266],{"class":206},[186,172262,832],{"class":202},[186,172264,172265],{"class":532},"\"请输入索引:\"",[186,172267,31952],{"class":202},[186,172269,172270,172272],{"class":188,"line":225},[186,172271,32754],{"class":206},[186,172273,172274],{"class":202},"(nums[index])\n",[186,172276,172277,172279,172281],{"class":188,"line":242},[186,172278,172091],{"class":669},[186,172280,153423],{"class":206},[186,172282,5205],{"class":202},[186,172284,172285,172287,172289,172292],{"class":188,"line":248},[186,172286,32754],{"class":206},[186,172288,832],{"class":202},[186,172290,172291],{"class":532},"\"索引必须是整数\"",[186,172293,1629],{"class":202},[186,172295,172296,172298,172301],{"class":188,"line":265},[186,172297,172091],{"class":669},[186,172299,172300],{"class":206}," IndexError",[186,172302,5205],{"class":202},[186,172304,172305,172307,172309,172312],{"class":188,"line":271},[186,172306,32754],{"class":206},[186,172308,832],{"class":202},[186,172310,172311],{"class":532},"\"索引越界\"",[186,172313,1629],{"class":202},[169,172315,172316],{},"多个异常使用相同处理逻辑：",[176,172318,172320],{"className":31833,"code":172319,"language":31835,"meta":181,"style":181},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[183,172321,172322,172328,172346,172359,172373],{"__ignoreMap":181},[186,172323,172324,172326],{"class":188,"line":189},[186,172325,172079],{"class":669},[186,172327,5205],{"class":202},[186,172329,172330,172332,172334,172336,172338,172340,172342,172344],{"class":188,"line":49},[186,172331,47047],{"class":202},[186,172333,529],{"class":669},[186,172335,3849],{"class":206},[186,172337,832],{"class":202},[186,172339,55266],{"class":206},[186,172341,832],{"class":202},[186,172343,156993],{"class":532},[186,172345,31952],{"class":202},[186,172347,172348,172350,172352,172354,172356],{"class":188,"line":219},[186,172349,32754],{"class":206},[186,172351,832],{"class":202},[186,172353,2056],{"class":206},[186,172355,157243],{"class":669},[186,172357,172358],{"class":202}," num)\n",[186,172360,172361,172363,172365,172367,172369,172371],{"class":188,"line":225},[186,172362,172091],{"class":669},[186,172364,3126],{"class":202},[186,172366,156031],{"class":206},[186,172368,13898],{"class":202},[186,172370,171974],{"class":206},[186,172372,32241],{"class":202},[186,172374,172375,172377,172379,172382],{"class":188,"line":242},[186,172376,32754],{"class":206},[186,172378,832],{"class":202},[186,172380,172381],{"class":532},"\"输入不合法\"",[186,172383,1629],{"class":202},[14,172385,172387],{"id":172386},"_95-获取异常信息","9.5 获取异常信息",[176,172389,172391],{"className":31833,"code":172390,"language":31835,"meta":181,"style":181},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[183,172392,172393,172399,172413,172424],{"__ignoreMap":181},[186,172394,172395,172397],{"class":188,"line":189},[186,172396,172079],{"class":669},[186,172398,5205],{"class":202},[186,172400,172401,172403,172405,172407,172409,172411],{"class":188,"line":49},[186,172402,47047],{"class":202},[186,172404,529],{"class":669},[186,172406,3849],{"class":206},[186,172408,832],{"class":202},[186,172410,157077],{"class":532},[186,172412,1629],{"class":202},[186,172414,172415,172417,172419,172421],{"class":188,"line":219},[186,172416,172091],{"class":669},[186,172418,153423],{"class":206},[186,172420,66041],{"class":669},[186,172422,172423],{"class":202}," e:\n",[186,172425,172426,172428,172430,172432,172435,172437,172439,172441,172443],{"class":188,"line":225},[186,172427,32754],{"class":206},[186,172429,832],{"class":202},[186,172431,1673],{"class":669},[186,172433,172434],{"class":532},"\"出错了:",[186,172436,2504],{"class":206},[186,172438,1694],{"class":202},[186,172440,2553],{"class":206},[186,172442,1862],{"class":532},[186,172444,1629],{"class":202},[169,172446,147654],{},[176,172448,172451],{"className":172449,"code":172450,"language":753,"meta":181},[751],"出错了:invalid literal for int() with base 10: 'abc'\n",[183,172452,172450],{"__ignoreMap":181},[14,172454,172456],{"id":172455},"_96-else和finally","9.6 else和finally",[169,172458,172459,172461],{},[183,172460,3169],{},"：没有异常时执行。",[169,172463,172464,172467],{},[183,172465,172466],{},"finally","：无论是否异常都会执行。",[176,172469,172471],{"className":31833,"code":172470,"language":31835,"meta":181,"style":181},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[183,172472,172473,172479,172497,172505,172515,172521,172542,172548],{"__ignoreMap":181},[186,172474,172475,172477],{"class":188,"line":189},[186,172476,172079],{"class":669},[186,172478,5205],{"class":202},[186,172480,172481,172483,172485,172487,172489,172491,172493,172495],{"class":188,"line":49},[186,172482,47047],{"class":202},[186,172484,529],{"class":669},[186,172486,3849],{"class":206},[186,172488,832],{"class":202},[186,172490,55266],{"class":206},[186,172492,832],{"class":202},[186,172494,156993],{"class":532},[186,172496,31952],{"class":202},[186,172498,172499,172501,172503],{"class":188,"line":219},[186,172500,172091],{"class":669},[186,172502,153423],{"class":206},[186,172504,5205],{"class":202},[186,172506,172507,172509,172511,172513],{"class":188,"line":225},[186,172508,32754],{"class":206},[186,172510,832],{"class":202},[186,172512,154411],{"class":532},[186,172514,1629],{"class":202},[186,172516,172517,172519],{"class":188,"line":242},[186,172518,3169],{"class":669},[186,172520,5205],{"class":202},[186,172522,172523,172525,172527,172529,172532,172534,172536,172538,172540],{"class":188,"line":248},[186,172524,32754],{"class":206},[186,172526,832],{"class":202},[186,172528,1673],{"class":669},[186,172530,172531],{"class":532},"\"输入正确:",[186,172533,2504],{"class":206},[186,172535,3133],{"class":202},[186,172537,2553],{"class":206},[186,172539,1862],{"class":532},[186,172541,1629],{"class":202},[186,172543,172544,172546],{"class":188,"line":265},[186,172545,172466],{"class":669},[186,172547,5205],{"class":202},[186,172549,172550,172552,172554,172557],{"class":188,"line":271},[186,172551,32754],{"class":206},[186,172553,832],{"class":202},[186,172555,172556],{"class":532},"\"程序结束\"",[186,172558,1629],{"class":202},[169,172560,172561,172563],{},[183,172562,172466],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172565,172567],{"id":172566},"_97-抛出异常","9.7 抛出异常",[169,172569,172570],{},"程序可以主动抛出异常。",[176,172572,172574],{"className":31833,"code":172573,"language":31835,"meta":181,"style":181},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[183,172575,172576,172585,172597,172610,172630,172634,172638],{"__ignoreMap":181},[186,172577,172578,172580,172583],{"class":188,"line":189},[186,172579,33402],{"class":669},[186,172581,172582],{"class":198}," set_age",[186,172584,162612],{"class":202},[186,172586,172587,172589,172591,172593,172595],{"class":188,"line":49},[186,172588,4567],{"class":669},[186,172590,17168],{"class":202},[186,172592,520],{"class":669},[186,172594,5559],{"class":206},[186,172596,5205],{"class":202},[186,172598,172599,172601,172603,172605,172608],{"class":188,"line":219},[186,172600,104863],{"class":669},[186,172602,153423],{"class":206},[186,172604,832],{"class":202},[186,172606,172607],{"class":532},"\"年龄不能为负数\"",[186,172609,1629],{"class":202},[186,172611,172612,172614,172616,172618,172620,172622,172624,172626,172628],{"class":188,"line":225},[186,172613,32754],{"class":206},[186,172615,832],{"class":202},[186,172617,1673],{"class":669},[186,172619,163180],{"class":532},[186,172621,2504],{"class":206},[186,172623,71658],{"class":202},[186,172625,2553],{"class":206},[186,172627,1862],{"class":532},[186,172629,1629],{"class":202},[186,172631,172632],{"class":188,"line":242},[186,172633,3867],{"emptyLinePlaceholder":1551},[186,172635,172636],{"class":188,"line":248},[186,172637,3867],{"emptyLinePlaceholder":1551},[186,172639,172640,172643,172645,172647],{"class":188,"line":265},[186,172641,172642],{"class":202},"set_age(",[186,172644,2142],{"class":669},[186,172646,1829],{"class":206},[186,172648,1629],{"class":202},[169,172650,172651],{},"调用者可以捕获：",[176,172653,172655],{"className":31833,"code":172654,"language":31835,"meta":181,"style":181},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[183,172656,172657,172663,172674,172684],{"__ignoreMap":181},[186,172658,172659,172661],{"class":188,"line":189},[186,172660,172079],{"class":669},[186,172662,5205],{"class":202},[186,172664,172665,172668,172670,172672],{"class":188,"line":49},[186,172666,172667],{"class":202},"    set_age(",[186,172669,2142],{"class":669},[186,172671,1829],{"class":206},[186,172673,1629],{"class":202},[186,172675,172676,172678,172680,172682],{"class":188,"line":219},[186,172677,172091],{"class":669},[186,172679,153423],{"class":206},[186,172681,66041],{"class":669},[186,172683,172423],{"class":202},[186,172685,172686,172688],{"class":188,"line":225},[186,172687,32754],{"class":206},[186,172689,68436],{"class":202},[14,172691,172693],{"id":172692},"_98-自定义异常","9.8 自定义异常",[176,172695,172697],{"className":31833,"code":172696,"language":31835,"meta":181,"style":181},"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",[183,172698,172699,172713,172717,172721,172725,172733,172743,172754,172764,172768,172772,172778,172795,172806],{"__ignoreMap":181},[186,172700,172701,172703,172706,172708,172711],{"class":188,"line":189},[186,172702,16156],{"class":669},[186,172704,172705],{"class":198}," BalanceNotEnoughError",[186,172707,832],{"class":202},[186,172709,172710],{"class":206},"Exception",[186,172712,32241],{"class":202},[186,172714,172715],{"class":188,"line":49},[186,172716,150734],{"class":669},[186,172718,172719],{"class":188,"line":219},[186,172720,3867],{"emptyLinePlaceholder":1551},[186,172722,172723],{"class":188,"line":225},[186,172724,3867],{"emptyLinePlaceholder":1551},[186,172726,172727,172729,172731],{"class":188,"line":242},[186,172728,33402],{"class":669},[186,172730,151383],{"class":198},[186,172732,164009],{"class":202},[186,172734,172735,172737,172739,172741],{"class":188,"line":248},[186,172736,4567],{"class":669},[186,172738,151339],{"class":202},[186,172740,2567],{"class":669},[186,172742,163786],{"class":202},[186,172744,172745,172747,172750,172752],{"class":188,"line":265},[186,172746,104863],{"class":669},[186,172748,172749],{"class":202}," BalanceNotEnoughError(",[186,172751,151434],{"class":532},[186,172753,1629],{"class":202},[186,172755,172756,172758,172760,172762],{"class":188,"line":271},[186,172757,5556],{"class":669},[186,172759,164016],{"class":202},[186,172761,2142],{"class":669},[186,172763,151372],{"class":202},[186,172765,172766],{"class":188,"line":288},[186,172767,3867],{"emptyLinePlaceholder":1551},[186,172769,172770],{"class":188,"line":294},[186,172771,3867],{"emptyLinePlaceholder":1551},[186,172773,172774,172776],{"class":188,"line":1212},[186,172775,172079],{"class":669},[186,172777,5205],{"class":202},[186,172779,172780,172782,172784,172787,172789,172791,172793],{"class":188,"line":1223},[186,172781,163687],{"class":202},[186,172783,529],{"class":669},[186,172785,172786],{"class":202}," withdraw(",[186,172788,1922],{"class":206},[186,172790,13898],{"class":202},[186,172792,3190],{"class":206},[186,172794,1629],{"class":202},[186,172796,172797,172799,172802,172804],{"class":188,"line":1236},[186,172798,172091],{"class":669},[186,172800,172801],{"class":202}," BalanceNotEnoughError ",[186,172803,32838],{"class":669},[186,172805,172423],{"class":202},[186,172807,172808,172810],{"class":188,"line":3096},[186,172809,32754],{"class":206},[186,172811,68436],{"class":202},[169,172813,172814],{},"入门阶段大多数情况使用内置异常即可。",[14,172816,172818],{"id":172817},"_99-traceback","9.9 traceback",[169,172820,172821],{},"调试时可以输出完整异常堆栈。",[176,172823,172825],{"className":31833,"code":172824,"language":31835,"meta":181,"style":181},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[183,172826,172827,172834,172838,172844,172854,172862],{"__ignoreMap":181},[186,172828,172829,172831],{"class":188,"line":189},[186,172830,31847],{"class":669},[186,172832,172833],{"class":202}," traceback\n",[186,172835,172836],{"class":188,"line":49},[186,172837,3867],{"emptyLinePlaceholder":1551},[186,172839,172840,172842],{"class":188,"line":219},[186,172841,172079],{"class":669},[186,172843,5205],{"class":202},[186,172845,172846,172848,172850,172852],{"class":188,"line":225},[186,172847,3452],{"class":206},[186,172849,832],{"class":202},[186,172851,157077],{"class":532},[186,172853,1629],{"class":202},[186,172855,172856,172858,172860],{"class":188,"line":242},[186,172857,172091],{"class":669},[186,172859,153423],{"class":206},[186,172861,5205],{"class":202},[186,172863,172864],{"class":188,"line":248},[186,172865,172866],{"class":202},"    traceback.print_exc()\n",[169,172868,172869],{},"日志系统中常把异常堆栈记录到文件。",[14,172871,172873],{"id":172872},"_910-什么是模块","9.10 什么是模块",[169,172875,172876,172877,127414],{},"模块就是一个 ",[183,172878,147549],{},[169,172880,172881,172882,26077],{},"例如创建 ",[183,172883,172884],{},"my_math.py",[176,172886,172888],{"className":31833,"code":172887,"language":31835,"meta":181,"style":181},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[183,172889,172890,172898,172908,172912,172916,172925],{"__ignoreMap":181},[186,172891,172892,172894,172896],{"class":188,"line":189},[186,172893,33402],{"class":669},[186,172895,6673],{"class":198},[186,172897,152290],{"class":202},[186,172899,172900,172902,172904,172906],{"class":188,"line":49},[186,172901,5556],{"class":669},[186,172903,12332],{"class":202},[186,172905,2091],{"class":669},[186,172907,152301],{"class":202},[186,172909,172910],{"class":188,"line":219},[186,172911,3867],{"emptyLinePlaceholder":1551},[186,172913,172914],{"class":188,"line":225},[186,172915,3867],{"emptyLinePlaceholder":1551},[186,172917,172918,172920,172923],{"class":188,"line":242},[186,172919,33402],{"class":669},[186,172921,172922],{"class":198}," sub",[186,172924,152290],{"class":202},[186,172926,172927,172929,172931,172933],{"class":188,"line":248},[186,172928,5556],{"class":669},[186,172930,12332],{"class":202},[186,172932,2142],{"class":669},[186,172934,152301],{"class":202},[169,172936,172937],{},"在另一个文件中导入：",[176,172939,172941],{"className":31833,"code":172940,"language":31835,"meta":181,"style":181},"import my_math\n\nprint(my_math.add(1, 2))\n",[183,172942,172943,172950,172954],{"__ignoreMap":181},[186,172944,172945,172947],{"class":188,"line":189},[186,172946,31847],{"class":669},[186,172948,172949],{"class":202}," my_math\n",[186,172951,172952],{"class":188,"line":49},[186,172953,3867],{"emptyLinePlaceholder":1551},[186,172955,172956,172958,172961,172963,172965,172967],{"class":188,"line":219},[186,172957,31870],{"class":206},[186,172959,172960],{"class":202},"(my_math.add(",[186,172962,1829],{"class":206},[186,172964,13898],{"class":202},[186,172966,1697],{"class":206},[186,172968,31952],{"class":202},[14,172970,172972],{"id":172971},"_911-import导入","9.11 import导入",[29,172974,172976],{"id":172975},"_9111-导入模块","9.11.1 导入模块",[176,172978,172980],{"className":31833,"code":172979,"language":31835,"meta":181,"style":181},"import random\n\nprint(random.randint(1, 10))\n",[183,172981,172982,172988,172992],{"__ignoreMap":181},[186,172983,172984,172986],{"class":188,"line":189},[186,172985,31847],{"class":669},[186,172987,46782],{"class":202},[186,172989,172990],{"class":188,"line":49},[186,172991,3867],{"emptyLinePlaceholder":1551},[186,172993,172994,172996,172999,173001,173003,173005],{"class":188,"line":219},[186,172995,31870],{"class":206},[186,172997,172998],{"class":202},"(random.randint(",[186,173000,1829],{"class":206},[186,173002,13898],{"class":202},[186,173004,2056],{"class":206},[186,173006,31952],{"class":202},[29,173008,173010],{"id":173009},"_9112-导入指定内容","9.11.2 导入指定内容",[176,173012,173014],{"className":31833,"code":173013,"language":31835,"meta":181,"style":181},"from random import randint\n\nprint(randint(1, 10))\n",[183,173015,173016,173027,173031],{"__ignoreMap":181},[186,173017,173018,173020,173022,173024],{"class":188,"line":189},[186,173019,32192],{"class":669},[186,173021,59237],{"class":202},[186,173023,31847],{"class":669},[186,173025,173026],{"class":202}," randint\n",[186,173028,173029],{"class":188,"line":49},[186,173030,3867],{"emptyLinePlaceholder":1551},[186,173032,173033,173035,173038,173040,173042,173044],{"class":188,"line":219},[186,173034,31870],{"class":206},[186,173036,173037],{"class":202},"(randint(",[186,173039,1829],{"class":206},[186,173041,13898],{"class":202},[186,173043,2056],{"class":206},[186,173045,31952],{"class":202},[29,173047,173049],{"id":173048},"_9113-起别名","9.11.3 起别名",[176,173051,173053],{"className":31833,"code":173052,"language":31835,"meta":181,"style":181},"import random as rd\n\nprint(rd.randint(1, 10))\n",[183,173054,173055,173066,173070],{"__ignoreMap":181},[186,173056,173057,173059,173061,173063],{"class":188,"line":189},[186,173058,31847],{"class":669},[186,173060,59237],{"class":202},[186,173062,32838],{"class":669},[186,173064,173065],{"class":202}," rd\n",[186,173067,173068],{"class":188,"line":49},[186,173069,3867],{"emptyLinePlaceholder":1551},[186,173071,173072,173074,173077,173079,173081,173083],{"class":188,"line":219},[186,173073,31870],{"class":206},[186,173075,173076],{"class":202},"(rd.randint(",[186,173078,1829],{"class":206},[186,173080,13898],{"class":202},[186,173082,2056],{"class":206},[186,173084,31952],{"class":202},[176,173086,173088],{"className":31833,"code":173087,"language":31835,"meta":181,"style":181},"from random import randint as rint\n\nprint(rint(1, 10))\n",[183,173089,173090,173106,173110],{"__ignoreMap":181},[186,173091,173092,173094,173096,173098,173101,173103],{"class":188,"line":189},[186,173093,32192],{"class":669},[186,173095,59237],{"class":202},[186,173097,31847],{"class":669},[186,173099,173100],{"class":202}," randint ",[186,173102,32838],{"class":669},[186,173104,173105],{"class":202}," rint\n",[186,173107,173108],{"class":188,"line":49},[186,173109,3867],{"emptyLinePlaceholder":1551},[186,173111,173112,173114,173117,173119,173121,173123],{"class":188,"line":219},[186,173113,31870],{"class":206},[186,173115,173116],{"class":202},"(rint(",[186,173118,1829],{"class":206},[186,173120,13898],{"class":202},[186,173122,2056],{"class":206},[186,173124,31952],{"class":202},[29,173126,173128],{"id":173127},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[176,173130,173132],{"className":31833,"code":173131,"language":31835,"meta":181,"style":181},"from random import *\n",[183,173133,173134],{"__ignoreMap":181},[186,173135,173136,173138,173140,173142],{"class":188,"line":189},[186,173137,32192],{"class":669},[186,173139,59237],{"class":202},[186,173141,31847],{"class":669},[186,173143,173144],{"class":669}," *\n",[169,173146,173147],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173149,173151],{"id":173150},"_912-常用内置模块","9.12 常用内置模块",[29,173153,173155],{"id":173154},"_9121-random","9.12.1 random",[176,173157,173159],{"className":31833,"code":173158,"language":31835,"meta":181,"style":181},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[183,173160,173161,173167,173171,173185,173204],{"__ignoreMap":181},[186,173162,173163,173165],{"class":188,"line":189},[186,173164,31847],{"class":669},[186,173166,46782],{"class":202},[186,173168,173169],{"class":188,"line":49},[186,173170,3867],{"emptyLinePlaceholder":1551},[186,173172,173173,173175,173177,173179,173181,173183],{"class":188,"line":219},[186,173174,31870],{"class":206},[186,173176,172998],{"class":202},[186,173178,1829],{"class":206},[186,173180,13898],{"class":202},[186,173182,2056],{"class":206},[186,173184,31952],{"class":202},[186,173186,173187,173189,173192,173194,173196,173198,173200,173202],{"class":188,"line":225},[186,173188,31870],{"class":206},[186,173190,173191],{"class":202},"(random.choice([",[186,173193,151085],{"class":532},[186,173195,13898],{"class":202},[186,173197,152133],{"class":532},[186,173199,13898],{"class":202},[186,173201,160928],{"class":532},[186,173203,34598],{"class":202},[186,173205,173206,173208,173211,173213,173215,173217,173219,173221,173223,173225,173227,173229,173231,173233],{"class":188,"line":242},[186,173207,31870],{"class":206},[186,173209,173210],{"class":202},"(random.sample([",[186,173212,1829],{"class":206},[186,173214,13898],{"class":202},[186,173216,1697],{"class":206},[186,173218,13898],{"class":202},[186,173220,1691],{"class":206},[186,173222,13898],{"class":202},[186,173224,1904],{"class":206},[186,173226,13898],{"class":202},[186,173228,1930],{"class":206},[186,173230,113633],{"class":202},[186,173232,1697],{"class":206},[186,173234,31952],{"class":202},[29,173236,173238],{"id":173237},"_9122-time","9.12.2 time",[176,173240,173242],{"className":31833,"code":173241,"language":31835,"meta":181,"style":181},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[183,173243,173244,173250,173254,173261,173269],{"__ignoreMap":181},[186,173245,173246,173248],{"class":188,"line":189},[186,173247,31847],{"class":669},[186,173249,33284],{"class":202},[186,173251,173252],{"class":188,"line":49},[186,173253,3867],{"emptyLinePlaceholder":1551},[186,173255,173256,173258],{"class":188,"line":219},[186,173257,31870],{"class":206},[186,173259,173260],{"class":202},"(time.time())\n",[186,173262,173263,173265,173267],{"class":188,"line":225},[186,173264,96502],{"class":202},[186,173266,1829],{"class":206},[186,173268,1629],{"class":202},[186,173270,173271,173273,173275,173278],{"class":188,"line":242},[186,173272,31870],{"class":206},[186,173274,832],{"class":202},[186,173276,173277],{"class":532},"\"1秒后执行\"",[186,173279,1629],{"class":202},[29,173281,173283],{"id":173282},"_9123-datetime","9.12.3 datetime",[176,173285,173287],{"className":31833,"code":173286,"language":31835,"meta":181,"style":181},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[183,173288,173289,173301,173305,173315,173322],{"__ignoreMap":181},[186,173290,173291,173293,173296,173298],{"class":188,"line":189},[186,173292,32192],{"class":669},[186,173294,173295],{"class":202}," datetime ",[186,173297,31847],{"class":669},[186,173299,173300],{"class":202}," datetime\n",[186,173302,173303],{"class":188,"line":49},[186,173304,3867],{"emptyLinePlaceholder":1551},[186,173306,173307,173310,173312],{"class":188,"line":219},[186,173308,173309],{"class":202},"now ",[186,173311,529],{"class":669},[186,173313,173314],{"class":202}," datetime.now()\n",[186,173316,173317,173319],{"class":188,"line":225},[186,173318,31870],{"class":206},[186,173320,173321],{"class":202},"(now)\n",[186,173323,173324,173326,173329,173332,173334,173337],{"class":188,"line":242},[186,173325,31870],{"class":206},[186,173327,173328],{"class":202},"(now.strftime(",[186,173330,173331],{"class":532},"\"%Y-%m-",[186,173333,157888],{"class":206},[186,173335,173336],{"class":532}," %H:%M:%S\"",[186,173338,31952],{"class":202},[29,173340,173342],{"id":173341},"_9124-os","9.12.4 os",[176,173344,173346],{"className":31833,"code":173345,"language":31835,"meta":181,"style":181},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[183,173347,173348,173354,173358,173365],{"__ignoreMap":181},[186,173349,173350,173352],{"class":188,"line":189},[186,173351,31847],{"class":669},[186,173353,46759],{"class":202},[186,173355,173356],{"class":188,"line":49},[186,173357,3867],{"emptyLinePlaceholder":1551},[186,173359,173360,173362],{"class":188,"line":219},[186,173361,31870],{"class":206},[186,173363,173364],{"class":202},"(os.getcwd())\n",[186,173366,173367,173369,173372,173375],{"class":188,"line":225},[186,173368,31870],{"class":206},[186,173370,173371],{"class":202},"(os.listdir(",[186,173373,173374],{"class":532},"\".\"",[186,173376,31952],{"class":202},[29,173378,173380],{"id":173379},"_9125-sys","9.12.5 sys",[176,173382,173384],{"className":31833,"code":173383,"language":31835,"meta":181,"style":181},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[183,173385,173386,173393,173397,173404],{"__ignoreMap":181},[186,173387,173388,173390],{"class":188,"line":189},[186,173389,31847],{"class":669},[186,173391,173392],{"class":202}," sys\n",[186,173394,173395],{"class":188,"line":49},[186,173396,3867],{"emptyLinePlaceholder":1551},[186,173398,173399,173401],{"class":188,"line":219},[186,173400,31870],{"class":206},[186,173402,173403],{"class":202},"(sys.version)\n",[186,173405,173406,173408],{"class":188,"line":225},[186,173407,31870],{"class":206},[186,173409,173410],{"class":202},"(sys.path)\n",[14,173412,173414,173415,173417,173418,1862],{"id":173413},"_913-if-name-main","9.13 if ",[54,173416,81242],{}," == \"",[54,173419,103489],{},[169,173421,173422,173423,173426],{},"模块被直接运行和被导入时，",[183,173424,173425],{},"__name__"," 的值不同。",[169,173428,173429,173430,26077],{},"创建 ",[183,173431,173432],{},"my_module.py",[176,173434,173436],{"className":31833,"code":173435,"language":31835,"meta":181,"style":181},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[183,173437,173438,173446,173456,173460,173464,173476],{"__ignoreMap":181},[186,173439,173440,173442,173444],{"class":188,"line":189},[186,173441,33402],{"class":669},[186,173443,6673],{"class":198},[186,173445,152290],{"class":202},[186,173447,173448,173450,173452,173454],{"class":188,"line":49},[186,173449,5556],{"class":669},[186,173451,12332],{"class":202},[186,173453,2091],{"class":669},[186,173455,152301],{"class":202},[186,173457,173458],{"class":188,"line":219},[186,173459,3867],{"emptyLinePlaceholder":1551},[186,173461,173462],{"class":188,"line":225},[186,173463,3867],{"emptyLinePlaceholder":1551},[186,173465,173466,173468,173470,173472,173474],{"class":188,"line":242},[186,173467,3003],{"class":669},[186,173469,32675],{"class":206},[186,173471,102990],{"class":669},[186,173473,102993],{"class":532},[186,173475,5205],{"class":202},[186,173477,173478,173480,173482,173484,173486,173488],{"class":188,"line":248},[186,173479,32754],{"class":206},[186,173481,167797],{"class":202},[186,173483,1829],{"class":206},[186,173485,13898],{"class":202},[186,173487,1697],{"class":206},[186,173489,31952],{"class":202},[169,173491,173492],{},"作用：",[34,173494,173495,173498],{},[22,173496,173497],{},"直接运行该文件时，执行测试代码。",[22,173499,173500],{},"被其他文件导入时，不执行测试代码。",[169,173502,173503],{},"这是写模块时很常用的习惯。",[14,173505,173507],{"id":173506},"_914-包","9.14 包",[169,173509,173510,173511,173514],{},"包是包含 ",[183,173512,173513],{},"__init__.py"," 的目录，用于组织多个模块。",[169,173516,173517],{},"目录结构：",[176,173519,173522],{"className":173520,"code":173521,"language":753,"meta":181},[751],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[183,173523,173521],{"__ignoreMap":181},[169,173525,173526],{},"导入：",[176,173528,173530],{"className":31833,"code":173529,"language":31835,"meta":181,"style":181},"from utils.file_utils import read_file\n",[183,173531,173532],{"__ignoreMap":181},[186,173533,173534,173536,173539,173541],{"class":188,"line":189},[186,173535,32192],{"class":669},[186,173537,173538],{"class":202}," utils.file_utils ",[186,173540,31847],{"class":669},[186,173542,173543],{"class":202}," read_file\n",[169,173545,173546,173548],{},[183,173547,173513],{}," 可以为空，也可以写包初始化逻辑。",[14,173550,173552],{"id":173551},"_915-第三方包","9.15 第三方包",[169,173554,173555,173556,173558],{},"第三方包通过 ",[183,173557,25290],{}," 安装。",[176,173560,173562],{"className":25281,"code":173561,"language":25283,"meta":181,"style":181},"pip install requests\n",[183,173563,173564],{"__ignoreMap":181},[186,173565,173566,173568,173570],{"class":188,"line":189},[186,173567,25290],{"class":198},[186,173569,25293],{"class":532},[186,173571,147295],{"class":532},[169,173573,173574],{},"使用：",[176,173576,173578],{"className":31833,"code":173577,"language":31835,"meta":181,"style":181},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[183,173579,173580,173586,173590,173605],{"__ignoreMap":181},[186,173581,173582,173584],{"class":188,"line":189},[186,173583,31847],{"class":669},[186,173585,147295],{"class":202},[186,173587,173588],{"class":188,"line":49},[186,173589,3867],{"emptyLinePlaceholder":1551},[186,173591,173592,173595,173597,173600,173603],{"class":188,"line":219},[186,173593,173594],{"class":202},"response ",[186,173596,529],{"class":669},[186,173598,173599],{"class":202}," requests.get(",[186,173601,173602],{"class":532},"\"https:\u002F\u002Fwww.example.com\"",[186,173604,1629],{"class":202},[186,173606,173607,173609],{"class":188,"line":225},[186,173608,31870],{"class":206},[186,173610,173611],{"class":202},"(response.status_code)\n",[169,173613,173614],{},"查看已安装包：",[176,173616,173618],{"className":25281,"code":173617,"language":25283,"meta":181,"style":181},"pip list\n",[183,173619,173620],{"__ignoreMap":181},[186,173621,173622,173624],{"class":188,"line":189},[186,173623,25290],{"class":198},[186,173625,120386],{"class":532},[169,173627,173628],{},"导出项目依赖：",[176,173630,173631],{"className":25281,"code":147490,"language":25283,"meta":181,"style":181},[183,173632,173633],{"__ignoreMap":181},[186,173634,173635,173637,173639,173641],{"class":188,"line":189},[186,173636,25290],{"class":198},[186,173638,147499],{"class":532},[186,173640,27679],{"class":669},[186,173642,147504],{"class":532},[169,173644,173645],{},"安装项目依赖：",[176,173647,173648],{"className":25281,"code":147510,"language":25283,"meta":181,"style":181},[183,173649,173650],{"__ignoreMap":181},[186,173651,173652,173654,173656,173658],{"class":188,"line":189},[186,173653,25290],{"class":198},[186,173655,25293],{"class":532},[186,173657,121070],{"class":206},[186,173659,147504],{"class":532},[14,173661,173663],{"id":173662},"_916-模块搜索路径","9.16 模块搜索路径",[169,173665,173666,173667,173670],{},"Python 导入模块时会在 ",[183,173668,173669],{},"sys.path"," 中查找。",[176,173672,173674],{"className":31833,"code":173673,"language":31835,"meta":181,"style":181},"import sys\n\nfor path in sys.path:\n    print(path)\n",[183,173675,173676,173682,173686,173698],{"__ignoreMap":181},[186,173677,173678,173680],{"class":188,"line":189},[186,173679,31847],{"class":669},[186,173681,173392],{"class":202},[186,173683,173684],{"class":188,"line":49},[186,173685,3867],{"emptyLinePlaceholder":1551},[186,173687,173688,173690,173693,173695],{"class":188,"line":219},[186,173689,4491],{"class":669},[186,173691,173692],{"class":202}," path ",[186,173694,27500],{"class":669},[186,173696,173697],{"class":202}," sys.path:\n",[186,173699,173700,173702],{"class":188,"line":225},[186,173701,32754],{"class":206},[186,173703,170426],{"class":202},[169,173705,173706],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[169,173708,158820],{},[176,173710,173713],{"className":173711,"code":173712,"language":753,"meta":181},[751],"random.py\njson.py\ntime.py\n",[183,173714,173712],{"__ignoreMap":181},[169,173716,173717],{},"这些文件名可能导致导入异常。",[14,173719,173721],{"id":173720},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[169,173723,173517],{},[176,173725,173728],{"className":173726,"code":173727,"language":753,"meta":181},[751],"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",[183,173729,173727],{"__ignoreMap":181},[169,173731,173732,26077],{},[183,173733,173734],{},"utils\u002Ffile_utils.py",[176,173736,173738],{"className":31833,"code":173737,"language":31835,"meta":181,"style":181},"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",[183,173739,173740,173746,173756,173760,173764,173774,173784,173792,173798,173802,173829,173839,173843,173847,173857,173883],{"__ignoreMap":181},[186,173741,173742,173744],{"class":188,"line":189},[186,173743,31847],{"class":669},[186,173745,148288],{"class":202},[186,173747,173748,173750,173752,173754],{"class":188,"line":49},[186,173749,32192],{"class":669},[186,173751,109742],{"class":202},[186,173753,31847],{"class":669},[186,173755,109747],{"class":202},[186,173757,173758],{"class":188,"line":219},[186,173759,3867],{"emptyLinePlaceholder":1551},[186,173761,173762],{"class":188,"line":225},[186,173763,3867],{"emptyLinePlaceholder":1551},[186,173765,173766,173768,173771],{"class":188,"line":242},[186,173767,33402],{"class":669},[186,173769,173770],{"class":198}," read_json",[186,173772,173773],{"class":202},"(path):\n",[186,173775,173776,173779,173781],{"class":188,"line":248},[186,173777,173778],{"class":202},"    path ",[186,173780,529],{"class":669},[186,173782,173783],{"class":202}," Path(path)\n",[186,173785,173786,173788,173790],{"class":188,"line":265},[186,173787,4567],{"class":669},[186,173789,40384],{"class":669},[186,173791,170507],{"class":202},[186,173793,173794,173796],{"class":188,"line":271},[186,173795,16214],{"class":669},[186,173797,53285],{"class":202},[186,173799,173800],{"class":188,"line":288},[186,173801,3867],{"emptyLinePlaceholder":1551},[186,173803,173804,173806,173808,173811,173813,173815,173817,173819,173821,173823,173825,173827],{"class":188,"line":294},[186,173805,35633],{"class":669},[186,173807,147988],{"class":206},[186,173809,173810],{"class":202},"(path, ",[186,173812,147998],{"class":532},[186,173814,13898],{"class":202},[186,173816,148003],{"class":835},[186,173818,529],{"class":669},[186,173820,148008],{"class":532},[186,173822,839],{"class":202},[186,173824,32838],{"class":669},[186,173826,149350],{"class":835},[186,173828,5205],{"class":202},[186,173830,173831,173833,173835,173837],{"class":188,"line":1212},[186,173832,16214],{"class":669},[186,173834,149361],{"class":202},[186,173836,46808],{"class":835},[186,173838,1629],{"class":202},[186,173840,173841],{"class":188,"line":1223},[186,173842,3867],{"emptyLinePlaceholder":1551},[186,173844,173845],{"class":188,"line":1236},[186,173846,3867],{"emptyLinePlaceholder":1551},[186,173848,173849,173851,173854],{"class":188,"line":3096},[186,173850,33402],{"class":669},[186,173852,173853],{"class":198}," write_json",[186,173855,173856],{"class":202},"(path, data):\n",[186,173858,173859,173861,173863,173865,173867,173869,173871,173873,173875,173877,173879,173881],{"class":188,"line":3110},[186,173860,35633],{"class":669},[186,173862,147988],{"class":206},[186,173864,173810],{"class":202},[186,173866,153173],{"class":532},[186,173868,13898],{"class":202},[186,173870,148003],{"class":835},[186,173872,529],{"class":669},[186,173874,148008],{"class":532},[186,173876,839],{"class":202},[186,173878,32838],{"class":669},[186,173880,149350],{"class":835},[186,173882,5205],{"class":202},[186,173884,173885,173888,173890,173892,173894,173896,173898,173900,173902,173904,173906],{"class":188,"line":3115},[186,173886,173887],{"class":202},"        json.dump(data, ",[186,173889,46808],{"class":835},[186,173891,13898],{"class":202},[186,173893,148334],{"class":835},[186,173895,529],{"class":669},[186,173897,35442],{"class":206},[186,173899,13898],{"class":202},[186,173901,153209],{"class":835},[186,173903,529],{"class":669},[186,173905,1697],{"class":206},[186,173907,1629],{"class":202},[169,173909,173910,26077],{},[183,173911,155804],{},[176,173913,173915],{"className":31833,"code":173914,"language":31835,"meta":181,"style":181},"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",[183,173916,173917,173928,173932,173945,173965],{"__ignoreMap":181},[186,173918,173919,173921,173923,173925],{"class":188,"line":189},[186,173920,32192],{"class":669},[186,173922,173538],{"class":202},[186,173924,31847],{"class":669},[186,173926,173927],{"class":202}," read_json, write_json\n",[186,173929,173930],{"class":188,"line":49},[186,173931,3867],{"emptyLinePlaceholder":1551},[186,173933,173934,173936,173938,173941,173943],{"class":188,"line":219},[186,173935,160913],{"class":202},[186,173937,529],{"class":669},[186,173939,173940],{"class":202}," read_json(",[186,173942,153028],{"class":532},[186,173944,1629],{"class":202},[186,173946,173947,173949,173951,173953,173955,173957,173959,173961,173963],{"class":188,"line":225},[186,173948,171731],{"class":202},[186,173950,64117],{"class":532},[186,173952,210],{"class":202},[186,173954,151085],{"class":532},[186,173956,13898],{"class":202},[186,173958,152669],{"class":532},[186,173960,210],{"class":202},[186,173962,2596],{"class":206},[186,173964,166349],{"class":202},[186,173966,173967,173970,173972],{"class":188,"line":242},[186,173968,173969],{"class":202},"write_json(",[186,173971,153028],{"class":532},[186,173973,173974],{"class":202},", students)\n",[14,173976,173978],{"id":173977},"_918-易错点","9.18 易错点",[34,173980,173981,173984,173989,173994,173997,174000],{},[22,173982,173983],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[22,173985,173986,173987,913],{},"能指定异常类型就不要裸写 ",[183,173988,172091],{},[22,173990,173991,173993],{},[183,173992,172466],{}," 无论是否出错都会执行。",[22,173995,173996],{},"模块文件名不要和标准库重名。",[22,173998,173999],{},"导入自己写的模块时，要注意运行目录。",[22,174001,174002],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174004,174006],{"id":174005},"_919-本章练习","9.19 本章练习",[34,174008,174009,174012,174015,174021,174028],{},[22,174010,174011],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[22,174013,174014],{},"写函数读取文件，如果文件不存在则返回空字符串。",[22,174016,173429,174017,174020],{},[183,174018,174019],{},"math_utils.py","，实现加减乘除函数并导入使用。",[22,174022,174023,174024,174027],{},"创建一个 ",[183,174025,174026],{},"utils"," 包，把 JSON 读写函数放进去。",[22,174029,174030],{},"写一个程序，捕获除零异常和输入格式异常。",[1524,174032,174033],{},"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":181,"searchDepth":49,"depth":49,"links":174035},[174036,174037,174038,174039,174040,174041,174042,174043,174044,174045,174046,174052,174059,174061,174062,174063,174064,174065,174066],{"id":171888,"depth":49,"text":171889},{"id":172016,"depth":49,"text":172017},{"id":172065,"depth":49,"text":172066},{"id":172214,"depth":49,"text":172215},{"id":172386,"depth":49,"text":172387},{"id":172455,"depth":49,"text":172456},{"id":172566,"depth":49,"text":172567},{"id":172692,"depth":49,"text":172693},{"id":172817,"depth":49,"text":172818},{"id":172872,"depth":49,"text":172873},{"id":172971,"depth":49,"text":172972,"children":174047},[174048,174049,174050,174051],{"id":172975,"depth":219,"text":172976},{"id":173009,"depth":219,"text":173010},{"id":173048,"depth":219,"text":173049},{"id":173127,"depth":219,"text":173128},{"id":173150,"depth":49,"text":173151,"children":174053},[174054,174055,174056,174057,174058],{"id":173154,"depth":219,"text":173155},{"id":173237,"depth":219,"text":173238},{"id":173282,"depth":219,"text":173283},{"id":173341,"depth":219,"text":173342},{"id":173379,"depth":219,"text":173380},{"id":173413,"depth":49,"text":174060},"9.13 if name == \"main\"",{"id":173506,"depth":49,"text":173507},{"id":173551,"depth":49,"text":173552},{"id":173662,"depth":49,"text":173663},{"id":173720,"depth":49,"text":173721},{"id":173977,"depth":49,"text":173978},{"id":174005,"depth":49,"text":174006},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171880,"description":1548},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174073,"title":174074,"body":174075,"description":174238,"extension":1549,"meta":174239,"navigation":1551,"path":174240,"seo":174241,"stem":174242,"__hash__":174243},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174076,"toc":174233},[174077,174080,174083,174086,174097,174099,174173,174176,174179,174182,174185,174188,174191,174194,174197,174200,174203],[10,174078,174074],{"id":174079},"python教程",[169,174081,174082],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[169,174084,174085],{},"建议学习环境：",[34,174087,174088,174091,174094],{},[22,174089,174090],{},"Python 版本：Python 3.10 及以上。",[22,174092,174093],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[22,174095,174096],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174098,118509],{"id":118509},[34,174100,174101,174107,174113,174119,174125,174131,174137,174143,174149,174155,174161,174167],{},[22,174102,174103],{},[948,174104,174106],{"href":174105},".\u002Fch1-Python","Python环境与第一个程序",[22,174108,174109],{},[948,174110,174112],{"href":174111},".\u002Fch2","基础语法、变量与字符串",[22,174114,174115],{},[948,174116,174118],{"href":174117},".\u002Fch3","判断语句",[22,174120,174121],{},[948,174122,174124],{"href":174123},".\u002Fch4","循环语句",[22,174126,174127],{},[948,174128,174130],{"href":174129},".\u002Fch5","函数基础",[22,174132,174133],{},[948,174134,174136],{"href":174135},".\u002Fch6","数据容器",[22,174138,174139],{},[948,174140,174142],{"href":174141},".\u002Fch7","函数进阶",[22,174144,174145],{},[948,174146,174148],{"href":174147},".\u002Fch8","文件操作",[22,174150,174151],{},[948,174152,174154],{"href":174153},".\u002Fch9","异常、模块与包",[22,174156,174157],{},[948,174158,174160],{"href":174159},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[22,174162,174163],{},[948,174164,174166],{"href":174165},".\u002Fch11","面向对象基础",[22,174168,174169],{},[948,174170,174172],{"href":174171},".\u002Fch12","综合案例与复习路线",[14,174174,174175],{"id":174175},"学习路线",[169,174177,174178],{},"第一阶段：能运行程序。",[169,174180,174181],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[169,174183,174184],{},"第二阶段：能组织数据。",[169,174186,174187],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[169,174189,174190],{},"第三阶段：能封装逻辑。",[169,174192,174193],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[169,174195,174196],{},"第四阶段：能做小项目。",[169,174198,174199],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174201,174202],{"id":174202},"参考资料",[34,174204,174205,174212,174219,174226],{},[22,174206,174207,174208],{},"黑马程序员 Python 入门教程推荐：",[948,174209,174210],{"href":174210,"rel":174211},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[952],[22,174213,174214,174215],{},"Python 官方中文教程：",[948,174216,174217],{"href":174217,"rel":174218},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[952],[22,174220,174221,174222],{},"Python 标准库文档：",[948,174223,174224],{"href":174224,"rel":174225},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[952],[22,174227,174228,174229],{},"pyecharts 文档：",[948,174230,174231],{"href":174231,"rel":174232},"https:\u002F\u002Fpyecharts.org\u002F",[952],{"title":181,"searchDepth":49,"depth":49,"links":174234},[174235,174236,174237],{"id":118509,"depth":49,"text":118509},{"id":174175,"depth":49,"text":174175},{"id":174202,"depth":49,"text":174202},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24839},"\u002Fwiki\u002F2024-10-10-python",{"title":174074,"description":174238},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331432383]